-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathkpz101.h
169 lines (148 loc) · 7.11 KB
/
kpz101.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#ifndef __KPZ101_H__
#define __KPZ101_H__
#pragma once
#include "libapt.h"
// KPZ101 - PREFIX : PZ
typedef APT_STATE PZ_STATE;
#define PZ_STATE_LABELS APT_STATE_LABELS
// page 184
enum class PZ_VOLTAGE_RANGE : uint8_t {
VOLTAGE_RANGE_75V = 0x01,
VOLTAGE_RANGE_100V,
VOLTAGE_RANGE_150V,
VOLTAGE_RANGE_N_RANGES
};
#define PZ_VOLTAGE_RANGE_LABELS {"VOLTAGE_RANGE_INVALID_0",\
"VOLTAGE_RANGE_75V",\
"VOLTAGE_RANGE_100V",\
"VOLTAGE_RANGE_150V"}
// page 184
enum class PZ_ANALOG_INPUT_SOURCE : uint8_t {
ANALOG_INPUT_SOURCE_A = 0x01,
ANALOG_INPUT_SOURCE_B,
ANALOG_INPUT_SOURCE_EXTSIG_SMA,
ANALOG_INPUT_SOURCE_N_SOURCES
};
#define PZ_ANALOG_INPUT_SOURCE_LABELS {"ANALOG_INPUT_SOURCE_INVALID_0",\
"ANALOG_INPUT_SOURCE_A",\
"ANALOG_INPUT_SOURCE_B",\
"ANALOG_INPUT_SOURCE_EXTSIG_SMA"}
// page 160
enum class PZ_INPUT_VOLTAGE_SOURCE : uint8_t {
INPUT_VOLTAGE_SOURCE_SW_ONLY = 0x00,
INPUT_VOLTAGE_SOURCE_EXT_SIG = 0x01,
INPUT_VOLTAGE_SOURCE_POT = 0x02,
INPUT_VOLTAGE_SOURCE_N_SOURCES
};
#define PZ_INPUT_VOLTAGE_SOURCE_LABELS {"INPUT_VOLTS_SRC_SW_ONLY",\
"INPUT_VOLTS_SRC_EXT_SIG",\
"INPUT_VOLTS_SRC_POT"}
// page 156
enum class PZ_POSITION_CONTROL_MODE : uint8_t {
POSITION_CONTROL_MODE_OPEN_LOOP = 0x01,
POSITION_CONTROL_MODE_CLOSED_LOOP,
POSITION_CONTROL_MODE_OPEN_LOOP_SMOOTH,
POSITION_CONTROL_MODE_CLOSED_LOOP_SMOOTH,
POSITION_CONTROL_MODE_N_MODES
};
#define PZ_POSITION_CONTROL_MODE_LABELS {"POSITION_CONTROL_MODE_INVALID_0",\
"POSITION_CONTROL_MODE_OPEN_LOOP",\
"POSITION_CONTROL_MODE_CLOSED_LOOP",\
"POSITION_CONTROL_MODE_OPEN_LOOP_SMOOTH",\
"POSITION_CONTROL_MODE_CLOSED_LOOP_SMOOTH"}
namespace aptserial {
// ==================================================================================================================
const std::string voltageRangeToString(const PZ_VOLTAGE_RANGE _vRange);
const bool stringToVoltageRange(const std::string _vRangeString, PZ_VOLTAGE_RANGE& _vRange);
const std::string analogInputSourceToString(const PZ_ANALOG_INPUT_SOURCE _analogInputSource);
const bool stringToAnalogInputSource(const std::string _analogInputSourceString, PZ_ANALOG_INPUT_SOURCE& _analogInputSource);
const std::string inputVoltageSourceToString(const PZ_INPUT_VOLTAGE_SOURCE _inputVSource);
const bool stringToInputVoltageSource(const std::string _inputVSourceString, PZ_INPUT_VOLTAGE_SOURCE& _inputVSource);
const std::string positionControlModeToString(const PZ_POSITION_CONTROL_MODE _positionCtrlMode);
const bool stringToPositionControlMode(const std::string _positionCtrlModeString, PZ_POSITION_CONTROL_MODE& _positionCtrlMode);
// ==================================================================================================================
class KPZ101 : public APTDevice { // Piezo Controller
struct stChannelValue { // page 174
uint16_t channel = 0x0000;
uint16_t value = 0x0000;
} __attribute__((packed));
struct stChannelSource { // page 176
uint16_t channel = 0x0000;
uint16_t source = 0x0000;
} __attribute__((packed));
struct stChannelIOSettings { // page 200
uint16_t channel = 0x0000;
uint16_t voltageRange = 0x0000;
uint16_t analogInput = 0x0000;
uint16_t future1 = 0x0000;
uint16_t future2 = 0x0000;
} __attribute__((packed));
private:
PZ_ANALOG_INPUT_SOURCE m_analogInputSource;
PZ_VOLTAGE_RANGE m_vRange;
PZ_INPUT_VOLTAGE_SOURCE m_inputVoltageSource;
PZ_POSITION_CONTROL_MODE m_positionControlMode;
uint16_t m_voltage_adu;
PZ_STATE m_state;
public:
KPZ101(const std::string _deviceFileName);
~KPZ101() = default;
KPZ101( const KPZ101& ) = delete; // disallows copy construction: KPZ101 a = b
KPZ101& operator= ( const KPZ101& ) = delete; // disallows copy assignment: a = b;
void identifyDevice() {
return APTDevice::identifyDevice(APT_CHANNEL::CHANNEL_1);
}
void setIOSettings(const PZ_VOLTAGE_RANGE _vRange, const PZ_ANALOG_INPUT_SOURCE _analogInputSource);
void getIOSettings(PZ_VOLTAGE_RANGE& _vRange, PZ_ANALOG_INPUT_SOURCE& _analogInputSource);
void setIOSettings(const PZ_VOLTAGE_RANGE _vRange) {
return setIOSettings(_vRange, m_analogInputSource);
}
void setIOSettings(const PZ_ANALOG_INPUT_SOURCE _analogInputSource) {
return setIOSettings(m_vRange, _analogInputSource);
}
void updateIOSettings();
PZ_VOLTAGE_RANGE getVRange() {
return m_vRange;
}
std::vector<PZ_VOLTAGE_RANGE> getVRangeList() {
return std::vector<PZ_VOLTAGE_RANGE> {PZ_VOLTAGE_RANGE::VOLTAGE_RANGE_75V, PZ_VOLTAGE_RANGE::VOLTAGE_RANGE_100V, PZ_VOLTAGE_RANGE::VOLTAGE_RANGE_150V};
}
PZ_ANALOG_INPUT_SOURCE getAnalogInputSource() {
return m_analogInputSource;
}
std::vector<PZ_ANALOG_INPUT_SOURCE> getAnalogInputSourceList() {
return std::vector<PZ_ANALOG_INPUT_SOURCE> {PZ_ANALOG_INPUT_SOURCE::ANALOG_INPUT_SOURCE_A, PZ_ANALOG_INPUT_SOURCE::ANALOG_INPUT_SOURCE_B, PZ_ANALOG_INPUT_SOURCE::ANALOG_INPUT_SOURCE_EXTSIG_SMA};
}
void setInputVoltageSource(const PZ_INPUT_VOLTAGE_SOURCE _inputVoltageSource);
void getInputVoltageSource(PZ_INPUT_VOLTAGE_SOURCE& _inputVoltageSource);
void updateInputVoltageSource();
PZ_INPUT_VOLTAGE_SOURCE getInputVoltageSource() {
return m_inputVoltageSource;
}
std::vector<PZ_INPUT_VOLTAGE_SOURCE> getInputVoltageSourceList() {
return std::vector<PZ_INPUT_VOLTAGE_SOURCE> {PZ_INPUT_VOLTAGE_SOURCE::INPUT_VOLTAGE_SOURCE_SW_ONLY, PZ_INPUT_VOLTAGE_SOURCE::INPUT_VOLTAGE_SOURCE_EXT_SIG, PZ_INPUT_VOLTAGE_SOURCE::INPUT_VOLTAGE_SOURCE_POT};
}
void setPositionControlMode(const PZ_POSITION_CONTROL_MODE _positionControlMode);
void getPositionControlMode(PZ_POSITION_CONTROL_MODE& _positionControlMode);
void updatePositionControlMode();
PZ_POSITION_CONTROL_MODE getPositionControlMode() {
return m_positionControlMode;
}
std::vector<PZ_POSITION_CONTROL_MODE> getPositionControlModeList() {
return std::vector<PZ_POSITION_CONTROL_MODE> {PZ_POSITION_CONTROL_MODE::POSITION_CONTROL_MODE_OPEN_LOOP, PZ_POSITION_CONTROL_MODE::POSITION_CONTROL_MODE_CLOSED_LOOP, PZ_POSITION_CONTROL_MODE::POSITION_CONTROL_MODE_OPEN_LOOP, PZ_POSITION_CONTROL_MODE::POSITION_CONTROL_MODE_CLOSED_LOOP_SMOOTH};
}
void setOutputVoltage(const uint16_t _voltage_adu);
void getOutputVoltage(uint16_t& _voltage_adu);
void updateOutputVoltage();
uint16_t getOutputVoltage() {
return m_voltage_adu;
}
void setChannelEnableState(const PZ_STATE _state);
void updateChannelEnableState();
PZ_STATE getChannelEnableState() {
return m_state;
}
};
// ==================================================================================================================
}
#endif /* __KPZ101_H__ */