AMU Library 3.0
C/C++ library for communicating with AMU (Aerospace Measurement Unit) devices
Loading...
Searching...
No Matches
amulib.cpp
Go to the documentation of this file.
1//
2//
3//
4
5#include "amulib.h"
6
7#ifdef __AMU_REMOTE_DEVICE__
8
9
10#ifdef __cplusplus
11
12#ifdef ARDUINO
13#include <Arduino.h>
14#endif
15
16
17AMU::errorPrintFncPtr_t AMU::errorPrintFncPtr = nullptr;
18AMU::resetFncPtr_t AMU::amuResetFncPtr = nullptr;
19AMU::resetFncPtr_t AMU::eyasResetFncPtr = nullptr;
20
21void AMU::begin(uint8_t twiAddress) {
22
23 address = twiAddress;
24
25 readFirmwareStr();
26
27 readSerialStr();
28
29 hardware_revision = (amu_hardware_revision_t)read_twi_reg< uint8_t >(AMU_REG_SYSTEM_HARDWARE_REVISION);
30
31 dut = read_twi_reg<amu_dut_t>(AMU_REG_DUT);
32
33 readSweepConfig();
34}
35
36void AMU::begin(uint8_t twiAddress, amu_transfer_fptr_t i2c_transfer_func) {
37
38 amu_dev = amu_lib_init(i2c_transfer_func);
39
40 begin(twiAddress);
41
42}
43
44uint8_t AMU::waitUntilReady(uint32_t timeout) {
45
46 if (!amu_dev->millis)
47 return 2;
48
49 uint32_t waitTime = amu_dev->millis();
50
51 while(busy() && ((amu_dev->millis() - waitTime) < timeout)) {
52 if (amu_dev->delay)
53 amu_dev->delay(3);
54 }
55
56 if ((amu_dev->millis() -waitTime) > timeout)
57 return 1;
58 else
59 return 0;
60}
61
62int8_t AMU::sleep(void) {
63 return sendCommand((CMD_t)CMD_SYSTEM_SLEEP);
64}
65
66char* AMU::readNotes(char* notes, uint8_t len) {
67 return query<char>((CMD_t)CMD_DUT_NOTES, notes, len);
68}
69
70char* AMU::readNotes(char* notes) {
71 return query<char>((CMD_t)CMD_DUT_NOTES, notes, AMU_NOTES_SIZE);
72}
73
74char* AMU::readSerialStr() {
75 return query<char>((CMD_t)CMD_SYSTEM_SERIAL_NUM, (char*)&serial_number, (size_t)AMU_SERIALNUM_STR_LEN);
76}
77
78char* AMU::readFirmwareStr() {
79 return query<char>((CMD_t)CMD_SYSTEM_FIRMWARE, (char*)&firmware, (size_t)AMU_FIRMWARE_STR_LEN);
80}
81
82int8_t AMU::setActiveChannels(uint16_t channels) {
83 return write_twi_reg<uint16_t>(AMU_REG_SYSTEM_ADC_ACTIVE_CHANNELS, channels);
84}
85
86int8_t AMU::setTimeStamp(uint32_t timestamp) {
87 //SAFE_CMD_DATA(CMD_SYSTEM_TIME, &timestamp, sizeof(uint32_t), "CMD TIMESTAMP");
88 return 0;
89}
90
91int8_t AMU::setLEDcolor(float red, float grn, float blu) {
92 amu_pid_t colors = { red, grn, blu };
93 return sendCommand((CMD_t)CMD_SYSTEM_LED_COLOR, (void *)&colors, sizeof(amu_pid_t));
94}
95
96int8_t AMU::setLEDmode(amu_led_pattern_t mode) {
97 return sendCommand((CMD_t)(CMD_SYSTEM_LED + mode));
98}
99
100uint8_t AMU::getPGA(AMU_ADC_CH_t channel) {
101 if (channel < AMU_ADC_CH_NUM)
102 return (1<<queryChannel<uint8_t>((CMD_t)CMD_ADC_CH_PGA, channel));
103 else
104 return 0;
105}
106
107float AMU::measureVoltage() { return query<float>((CMD_t)CMD_MEAS_CH_VOLTAGE); }
108float AMU::measureCurrent() { return query<float>((CMD_t)CMD_MEAS_CH_CURRENT); }
109float AMU::measureTSensor() { return query<float>((CMD_t)CMD_MEAS_CH_TSENSOR_0); }
110float AMU::measureTSensor0() { return query<float>((CMD_t)CMD_MEAS_CH_TSENSOR_0); }
111float AMU::measureTSensor1() { return query<float>((CMD_t)CMD_MEAS_CH_TSENSOR_1); }
112float AMU::measureTSensor2() { return query<float>((CMD_t)CMD_MEAS_CH_TSENSOR_2); }
113float AMU::measureSSTL() { return query<float>((CMD_t)CMD_MEAS_CH_SS_TL); }
114float AMU::measureSSBL() { return query<float>((CMD_t)CMD_MEAS_CH_SS_BL); }
115float AMU::measureSSBR() { return query<float>((CMD_t)CMD_MEAS_CH_SS_BR); }
116float AMU::measureSSTR() { return query<float>((CMD_t)CMD_MEAS_CH_SS_TR); }
117float AMU::measureBias() { return query<float>((CMD_t)CMD_MEAS_CH_BIAS); }
118float AMU::measureOffset() { return query<float>((CMD_t)CMD_MEAS_CH_OFFSET); }
119float AMU::measureTemperature() { return query<float>((CMD_t)CMD_MEAS_CH_TEMP); }
120float AMU::measureAvdd() { return query<float>((CMD_t)CMD_MEAS_CH_AVDD); }
121float AMU::measureIOvdd() { return query<float>((CMD_t)CMD_MEAS_CH_IOVDD); }
122float AMU::measureAldo() { return query<float>((CMD_t)CMD_MEAS_CH_ALDO); }
123float AMU::measureDldo() { return query<float>((CMD_t)CMD_MEAS_CH_DLDO); }
124
125float AMU::measureChannel(uint8_t channel) {
126 if (channel < AMU_ADC_CH_NUM) {
127 return query<float>((CMD_t)(CMD_MEAS_CH_VOLTAGE + channel));
128 }
129 else
130 return -1.000;
131}
132
133int8_t AMU::measureActiveChannels() {
134 return sendCommand((CMD_t)CMD_EXEC_MEAS_ACTIVE_CHANNELS);
135}
136
137amu_int_volt_t AMU::measureInternalVoltages(void) {
138 return query<amu_int_volt_t>((CMD_t)CMD_EXEC_MEAS_INTERNAL_VOLTAGES);
139}
140
141press_data_t AMU::measurePressureSensor(void) {
142 return query<press_data_t>((CMD_t)CMD_EXEC_MEAS_PRESSURE_SENSOR);
143}
144
145float AMU::measurePressure(void) {
146 press_data_t press_data = measurePressureSensor();
147 return press_data.pressure;
148}
149
150float AMU::measureHumidity(void) {
151 press_data_t press_data = measurePressureSensor();
152 return press_data.humidity;
153
154}
155
156float AMU::measurePSTemperature(void) {
157 press_data_t press_data = measurePressureSensor();
158 return press_data.temperature;
159}
160
161//TYPE data; SAFE_CMD(_queryCommand((CMD_t)((X) | CMD_READ), 0, sizeof(TYPE)), ERROR_MSG); _amu_transfer_read(0, &data, sizeof(TYPE)); return data;
162quad_photo_sensor_t AMU::measureSunSensor() {
163 return query<quad_photo_sensor_t>((CMD_t)CMD_EXEC_MEAS_SUN_SENSOR, &sun_sensor);
164}
165
166float AMU::measureSystemTemperature() {
167 return query<float>((CMD_t)CMD_SYSTEM_TEMPERATURE);
168}
169
170ivsweep_config_t * AMU::readSweepConfig() { sweep_config = read_twi_reg<ivsweep_config_t>(AMU_REG_DATA_PTR_SWEEP_CONFIG); return &sweep_config; }
171ivsweep_meta_t * AMU::readMeta() { meta = read_twi_reg<ivsweep_meta_t>(AMU_REG_DATA_PTR_SWEEP_META); return &meta; }
172
173float AMU::readIsc() { meta.isc = read_twi_reg<float>(AMU_REG_SWEEP_META_ISC); return meta.isc; }
174float AMU::readVoc() { meta.voc = read_twi_reg<float>(AMU_REG_SWEEP_META_VOC); return meta.voc; }
175
176ss_angle_t * AMU::readSunSensorAngles() { sun_sensor.angle = read_twi_reg<ss_angle_t>(AMU_REG_SUNSENSOR_ANGLE); return &sun_sensor.angle; }
177quad_photo_sensor_t * AMU::readSunSensorMeasurement() { sun_sensor = read_twi_reg<quad_photo_sensor_t>(AMU_REG_SUNSENSOR); return &sun_sensor; }
178
179amu_meas_t AMU::readMeasurement(void) { return read_twi_reg<amu_meas_t>(AMU_REG_TRANSFER_PTR); }
180
181uint32_t * AMU::readSweepTimestamps(uint32_t* data) { return read_twi_reg<uint32_t>(AMU_REG_DATA_PTR_TIMESTAMP, data, sizeof(uint32_t) * sweep_config.numPoints); }
182float * AMU::readSweepVoltages(float* data) { return read_twi_reg<float>(AMU_REG_DATA_PTR_VOLTAGE, data, sizeof(float) * sweep_config.numPoints); }
183float * AMU::readSweepCurrents(float* data) { return read_twi_reg<float>(AMU_REG_DATA_PTR_CURRENT, data, sizeof(float) * sweep_config.numPoints); }
184float* AMU::readSweepYaws(float* data) { return read_twi_reg<float>(AMU_REG_DATA_PTR_SS_YAW, data, sizeof(float) * sweep_config.numPoints); }
185float* AMU::readSweepPitches(float* data) { return read_twi_reg<float>(AMU_REG_DATA_PTR_SS_PITCH, data, sizeof(float) * sweep_config.numPoints); }
186
187
188ivsweep_packet_t* AMU::readSweepIV(ivsweep_packet_t* sweep_packet) {
189 readSweepVoltages(sweep_packet->voltage);
190 readSweepCurrents(sweep_packet->current);
191 return sweep_packet;
192}
193
194ivsweep_packet_t* AMU::readSweepSunAngle(ivsweep_packet_t* sweep_packet) {
195#ifndef __AMU_LOW_MEMORY__
196 readSweepYaws(sweep_packet->yaw);
197 readSweepPitches(sweep_packet->pitch);
198#else
199 readSweepYaws(sweep_packet->voltage);
200 readSweepPitches(sweep_packet->current);
201#endif
202 return sweep_packet;
203}
204
205ivsweep_packet_t* AMU::readSweepAll(ivsweep_packet_t* sweep_packet) {
206 readSweepIV(sweep_packet);
207#ifndef __AMU_LOW_MEMORY__
208 readSweepSunAngle(sweep_packet);
209#endif
210 return (ivsweep_packet_t*)amu_dev->sweep_data;
211}
212
213void AMU::loadSweepDatapoints(uint8_t offset) {
214 sendCommand((CMD_t)CMD_SWEEP_DATAPOINT_LOAD, &offset, 1);
215}
216
217bool AMU::goodSunAngle(float minAngle) {
218 if ((getYaw() == NAN) || (getPitch() == NAN)) // test this?
219 return false;
220
221 return ((getYawAbs() < minAngle) && (getPitchAbs() < minAngle));
222}
223
224float AMU::getPhotoDiodeVoltage(uint8_t n) {
225 if (n < 4)
226 return sun_sensor.diode[n];
227 else
228 return -1.000;
229}
230
231float AMU::getDACgainCorrection(void) {
232 return query<float>((CMD_t)CMD_AUX_DAC_GAIN_CORRECTION);
233}
234
235amu_coeff_t AMU::getYawCoefficients(void) { return query<amu_coeff_t>((CMD_t)CMD_AUX_SUNSENSOR_FIT_YAW_COEFF); }
236amu_coeff_t AMU::getPitchCoefficients(void) { return query<amu_coeff_t>((CMD_t)CMD_AUX_SUNSENSOR_FIT_PITCH_COEFF); }
237
238float AMU::getSSHVal(void) { return query<float>((CMD_t)CMD_AUX_SUNSENSOR_HVAL); }
239float AMU::getSSRVal(void) { return query<float>((CMD_t)CMD_AUX_SUNSENSOR_RVAL); }
240
241uint32_t AMU::getADCstatus(void) {
242 return read_twi_reg<uint32_t>((uint8_t)AMU_REG_SYSTEM_STATUS_HRADC);
243}
244
245int8_t AMU::triggerIsc(void) {
246 return sendCommand((CMD_t)CMD_SWEEP_TRIG_ISC);
247}
248
249int8_t AMU::triggerVoc(void) {
250 return sendCommand((CMD_t)CMD_SWEEP_TRIG_VOC);
251}
252
253int8_t AMU::triggerSweep(void) {
254 return sendCommand((CMD_t)CMD_SWEEP_TRIG_SWEEP);
255}
256
257amu_meas_t AMU::measureIsc(void) {
258 return query<amu_meas_t>((CMD_t)CMD_SWEEP_TRIG_ISC);
259}
260
261amu_meas_t AMU::measureVoc(void) {
262 return query<amu_meas_t>((CMD_t)CMD_SWEEP_TRIG_VOC);
263}
264
265uint8_t AMU::busy() {
266 return amu_dev_busy(address);
267}
268
270int8_t AMU::sendCommand(CMD_t cmd) {
271 static uint8_t wait_error = 0;
272
273 wait_error = waitUntilReady(1000);
274
275 if (wait_error != 0) {
276 if (AMU::errorPrintFncPtr) {
277 AMU::errorPrintFncPtr("Wait until ready error: %u\n", wait_error);
278 }
279 }
280 return amu_dev_send_command(address, cmd);
281}
282
283int8_t AMU::sendCommand(CMD_t cmd, void *params, uint8_t param_len) {
284 amu_dev_transfer(address, AMU_REG_TRANSFER_PTR, (uint8_t*)params, param_len, AMU_TWI_TRANSFER_WRITE);
285 return sendCommand(cmd);
286}
287
288int8_t AMU::sendCommandandWait(CMD_t cmd, uint32_t wait) {
289 sendCommand(cmd);
290 return waitUntilReady(wait);
291}
292
293template <typename T>
294T AMU::query(CMD_t command) {
295 if (!amu_dev || !amu_dev->transfer_reg) {
296 if (AMU::errorPrintFncPtr) {
297 AMU::errorPrintFncPtr("Error: amu_dev or transfer_reg is null\n");
298 }
299 return T{}; // Return default-constructed value
300 }
301
302 int8_t result = amu_dev_query_command(address, command, 0, sizeof(T));
303 if (result < 0) {
304 if (AMU::errorPrintFncPtr) {
305 AMU::errorPrintFncPtr("Query command failed with error: %d\n", result);
306 }
307 return T{};
308 }
309
310 T* data = (T*)amu_dev->transfer_reg;
311 return *data;
312}
313
314template <typename T>
315T AMU::query(CMD_t command, T* data) {
316 if (!data) {
317 if (AMU::errorPrintFncPtr) {
318 AMU::errorPrintFncPtr("Error: data pointer is null\n");
319 }
320 return T{};
321 }
322
323 int8_t result = amu_dev_query_command(address, command, 0, sizeof(T));
324 if (result < 0) {
325 if (AMU::errorPrintFncPtr) {
326 AMU::errorPrintFncPtr("Query command failed with error: %d\n", result);
327 }
328 return *data; // Return existing data value
329 }
330
331 _amu_transfer_read(0, data, sizeof(T));
332
333 return *data;
334}
335
336template <typename T>
337T * AMU::query(CMD_t command, T *data, size_t len) {
338 if (!data) {
339 if (AMU::errorPrintFncPtr) {
340 AMU::errorPrintFncPtr("Error: data pointer is null\n");
341 }
342 return nullptr;
343 }
344
345 if (len == 0) {
346 if (AMU::errorPrintFncPtr) {
347 AMU::errorPrintFncPtr("Error: len is zero\n");
348 }
349 return data;
350 }
351
352 int8_t result = amu_dev_query_command(address, command, 0, len);
353 if (result < 0) {
354 if (AMU::errorPrintFncPtr) {
355 AMU::errorPrintFncPtr("Query command failed with error: %d\n", result);
356 }
357 return data; // Return original pointer
358 }
359
360 _amu_transfer_read(0, data, len);
361
362
363 return data;
364}
365
366template <typename T>
367T AMU::queryChannel(CMD_t command, uint8_t channel) {
368 if (!amu_dev || !amu_dev->transfer_reg) {
369 if (AMU::errorPrintFncPtr) {
370 AMU::errorPrintFncPtr("Error: amu_dev or transfer_reg is null\n");
371 }
372 return T{};
373 }
374
375 _amu_transfer_write(0, &channel, 1);
376
377 int8_t result = amu_dev_query_command(address, command, 0, sizeof(T));
378 if (result != 0) {
379 if (AMU::errorPrintFncPtr) {
380 AMU::errorPrintFncPtr("Query command failed with error: %d\n", result);
381 }
382 return T{};
383 }
384
385 T* data = (T*)amu_dev->transfer_reg;
386 return *data;
387}
388
389template <typename T>
390T AMU::read_twi_reg(uint8_t reg) {
391 T data;
392 amu_dev_transfer(address, reg, (uint8_t *)&data, sizeof(T), AMU_TWI_TRANSFER_READ);
393 return data;
394}
395
396template <typename T>
397T * AMU::read_twi_reg(uint8_t reg, T *data, size_t len) {
398 amu_dev_transfer(address, reg, (uint8_t *)data, len, AMU_TWI_TRANSFER_READ);
399 return data;
400}
401
402template <typename T>
403int8_t AMU::write_twi_reg(uint8_t reg, T data) {
404 return amu_dev_transfer(address, reg, (uint8_t *)&data, sizeof(T), AMU_TWI_TRANSFER_WRITE);
405}
406
407template <typename T>
408int8_t AMU::write_twi_reg(uint8_t reg, T *data, size_t len) {
409 return amu_dev_transfer(address, reg, (uint8_t *)data, len, AMU_TWI_TRANSFER_WRITE);
410}
411
412amu_device_t* AMU::amu_lib_init(amu_transfer_fptr_t i2c_transfer_func) {
413
414 amu_device_t * dev = (amu_device_t * )amu_dev_init(i2c_transfer_func);
415
416#ifdef ARDUINO
417 dev->delay = delay; // delay function pointer amu_delay_fptr_t
418 dev->millis = millis; // millis fucnction pointer amu_milis_fptr_t
419#endif
420
421 return dev;
422}
423
424amu_scpi_dev_t* AMU::amu_scpi_init(size_t(*write_cmd)(const char* data, size_t len), void(*flush_cmd)(void)) {
425#ifdef __AMU_USE_SCPI__
426 amu_scpi_dev_t* scpi_dev = (amu_scpi_dev_t *)amu_get_scpi_dev();
427 if (scpi_dev != NULL) {
428 scpi_dev->write_cmd = write_cmd;
429 scpi_dev->flush_cmd = flush_cmd;
430 }
431 return scpi_dev;
432#else
433 return nullptr;
434#endif
435}
436
437#endif // __cplusplus
438
439#endif // __AMU_REMOTE_DEVICE__
CMD_t
@ CMD_SYSTEM_LED
int8_t amu_dev_transfer(uint8_t address, uint8_t reg, uint8_t *data, size_t len, uint8_t rw)
Transfering... TODO.
Definition amu_device.c:97
int8_t amu_dev_query_command(uint8_t address, CMD_t command, uint8_t commandDataLen, uint8_t responseLength)
TODO.
Definition amu_device.c:152
void _amu_transfer_write(size_t offset, void *data, size_t len)
TODO: explain the transfer part of a transfer write.
Definition amu_device.c:322
uint8_t amu_dev_busy(uint8_t address)
Checks to see if the AMU device is busy.
Definition amu_device.c:107
int8_t amu_dev_send_command(uint8_t address, CMD_t command)
Sends a command to an AMU device.
Definition amu_device.c:125
volatile amu_device_t * amu_dev_init(amu_transfer_fptr_t transfer_ptr)
TODO.
Definition amu_device.c:58
void _amu_transfer_read(size_t offset, void *data, size_t len)
TODO: explain the transfer part of a transfer read.
Definition amu_device.c:307
#define AMU_SERIALNUM_STR_LEN
Definition amu_device.h:28
#define AMU_FIRMWARE_STR_LEN
Definition amu_device.h:29
#define AMU_TWI_TRANSFER_READ
Definition amu_device.h:36
#define AMU_TWI_TRANSFER_WRITE
Definition amu_device.h:37
@ AMU_REG_DUT
Definition amu_regs.h:24
@ AMU_REG_SUNSENSOR
Definition amu_regs.h:26
@ AMU_REG_SUNSENSOR_ANGLE
Definition amu_regs.h:27
@ AMU_REG_TRANSFER_PTR
Definition amu_regs.h:32
@ AMU_REG_SYSTEM_ADC_ACTIVE_CHANNELS
Definition amu_regs.h:43
@ AMU_REG_SYSTEM_STATUS_HRADC
Definition amu_regs.h:44
@ AMU_REG_SYSTEM_HARDWARE_REVISION
Definition amu_regs.h:40
@ AMU_REG_DATA_PTR_VOLTAGE
Definition amu_regs.h:140
@ AMU_REG_DATA_PTR_SWEEP_CONFIG
Definition amu_regs.h:144
@ AMU_REG_DATA_PTR_SS_YAW
Definition amu_regs.h:142
@ AMU_REG_DATA_PTR_CURRENT
Definition amu_regs.h:141
@ AMU_REG_DATA_PTR_TIMESTAMP
Definition amu_regs.h:139
@ AMU_REG_DATA_PTR_SWEEP_META
Definition amu_regs.h:145
@ AMU_REG_DATA_PTR_SS_PITCH
Definition amu_regs.h:143
@ AMU_REG_SWEEP_META_VOC
Definition amu_regs.h:121
@ AMU_REG_SWEEP_META_ISC
Definition amu_regs.h:122
@ AMU_ADC_CH_NUM
Definition amu_types.h:61
amu_hardware_revision_t
Definition amu_types.h:112
#define AMU_NOTES_SIZE
Definition amu_types.h:26
amu_adc_ch_t AMU_ADC_CH_t
Definition amu_types.h:64
amu_led_pattern_t
Definition amu_types.h:132
int8_t(* amu_transfer_fptr_t)(uint8_t address, uint8_t reg, uint8_t *data, size_t len, uint8_t read)
Definition amu_types.h:299
#define NAN
Definition config.h:269
@ CMD_ADC_CH_PGA
Sets or queries ADC channel PGA setting.
@ CMD_AUX_SUNSENSOR_RVAL
Sets or queries sun sensor radial reference.
@ CMD_AUX_SUNSENSOR_FIT_PITCH_COEFF
Sets or queries sun sensor pitch calibration coefficients.
@ CMD_AUX_DAC_GAIN_CORRECTION
Sets or queries DAC gain correction coefficient.
@ CMD_AUX_SUNSENSOR_FIT_YAW_COEFF
Sets or queries sun sensor yaw calibration coefficients.
@ CMD_AUX_SUNSENSOR_HVAL
Sets or queries sun sensor horizontal reference.
@ CMD_DUT_NOTES
Sets or queries DUT documentation notes.
@ CMD_EXEC_MEAS_INTERNAL_VOLTAGES
Measures internal supply voltages.
@ CMD_EXEC_MEAS_ACTIVE_CHANNELS
Measures all active ADC channels.
@ CMD_EXEC_MEAS_SUN_SENSOR
Calculates sun sensor angles.
@ CMD_EXEC_MEAS_PRESSURE_SENSOR
Measures pressure sensor.
@ CMD_MEAS_CH_BIAS
Measures bias voltage reference.
@ CMD_MEAS_CH_ALDO
Measures analog LDO output voltage.
@ CMD_MEAS_CH_AVDD
Measures analog supply voltage.
@ CMD_MEAS_CH_IOVDD
Measures I/O supply voltage.
@ CMD_MEAS_CH_SS_BL
Measures sun sensor bottom-left quadrant.
@ CMD_MEAS_CH_TSENSOR_0
Measures temperature sensor 0.
@ CMD_MEAS_CH_SS_TR
Measures sun sensor top-right quadrant.
@ CMD_MEAS_CH_SS_TL
Measures sun sensor top-left quadrant.
@ CMD_MEAS_CH_VOLTAGE
Measures dedicated voltage channel.
@ CMD_MEAS_CH_SS_BR
Measures sun sensor bottom-right quadrant.
@ CMD_MEAS_CH_CURRENT
Measures dedicated current channel.
@ CMD_MEAS_CH_TEMP
Measures internal MCU temperature.
@ CMD_MEAS_CH_OFFSET
Measures offset calibration reference.
@ CMD_MEAS_CH_TSENSOR_1
Measures temperature sensor 1.
@ CMD_MEAS_CH_TSENSOR_2
Measures temperature sensor 2.
@ CMD_MEAS_CH_DLDO
Measures digital LDO output voltage.
@ CMD_SWEEP_TRIG_ISC
Measures short-circuit current.
@ CMD_SWEEP_TRIG_SWEEP
Initiates complete I-V sweep measurement.
@ CMD_SWEEP_DATAPOINT_LOAD
Loads single voltage/current data point.
@ CMD_SWEEP_TRIG_VOC
Measures open-circuit voltage.
@ CMD_SYSTEM_SLEEP
Enters low-power sleep mode.
@ CMD_SYSTEM_FIRMWARE
Returns firmware version string.
@ CMD_SYSTEM_SERIAL_NUM
Returns unique device serial number.
@ CMD_SYSTEM_TEMPERATURE
Internal MCU temperature sensor.
@ CMD_SYSTEM_LED_COLOR
Sets or queries status LED color.
amu_delay_fptr_t delay
Definition amu_types.h:333
amu_milis_fptr_t millis
Definition amu_types.h:341
void(* flush_cmd)(void)
Definition amu_types.h:319
size_t(* write_cmd)(const char *data, size_t len)
Definition amu_types.h:317
float voltage[40]
Definition amu_types.h:216
float current[40]
Definition amu_types.h:217
float pressure
Definition amu_types.h:255
float humidity
Definition amu_types.h:257
float temperature
Definition amu_types.h:256