AMU Library 3.0
C/C++ library for communicating with AMU (Aerospace Measurement Unit) devices
Loading...
Searching...
No Matches
amu_device.c
Go to the documentation of this file.
1
8
10#pragma message(AMULIBC_CONFIG_MESSAGE)
11
12#include "amu_device.h"
13#include "amu_types.h"
14#include "amu_regs.h"
15#include "amu_commands.h"
16
17#ifdef __AMU_USE_SCPI__
18#include "scpi.h"
19#endif
20
21static uint8_t amu_dev_initialized = 0;
23static volatile uint8_t amu_transfer_reg[AMU_TRANSFER_REG_SIZE];
24static uint16_t transfer_reg_data_len = 0;
25
26#ifdef __AMU_DEVICE__
27static uint8_t amu_num_devices = 1;
28
29
34
35
36#else
37static uint8_t amu_num_devices = 0;
38#endif
39
41 .transfer_reg = amu_transfer_reg,
42 .sweep_data = NULL,
43 .amu_regs = NULL,
44
45 .transfer = NULL,
46 .delay = NULL,
47 .watchdog_kick = NULL,
48 .hardware_reset = NULL,
49 .millis = NULL,
50 .process_cmd = NULL,
51};
52
59
60 if (amu_dev_initialized > 0)
61 return &amu_device;
62
63 else {
64
65
66
67 amu_device.transfer = transfer_ptr;
68
69#ifdef __AMU_DEVICE__
72#else
74#endif
75
76
77#ifdef __AMU_USE_SCPI__
79#endif
80
82
83 return &amu_device;
84 }
85}
86
97int8_t amu_dev_transfer(uint8_t address, uint8_t reg, uint8_t* data, size_t len, uint8_t rw) {
98 return amu_device.transfer(address, reg, data, len, rw);
99}
100
107uint8_t amu_dev_busy(uint8_t address) {
108// #ifdef __AMU_DEVICE__
109// amu_dev_transfer(address, (uint8_t)AMU_REG_CMD, (uint8_t*)&amu_device.amu_regs->twi_status, sizeof(uint8_t), AMU_TWI_TRANSFER_READ);
110// return amu_device.amu_regs->twi_status;
111// #else
112 uint8_t cmd;
113 amu_dev_transfer(address, (uint8_t)AMU_REG_CMD, &cmd, sizeof(uint8_t), AMU_TWI_TRANSFER_READ);
114 return cmd;
115// #endif
116}
117
125int8_t amu_dev_send_command(uint8_t address, CMD_t command) {
126 return amu_dev_transfer(address, (uint8_t)AMU_REG_CMD, (uint8_t*)&command, 1, AMU_TWI_TRANSFER_WRITE);
127}
128
137int8_t amu_dev_send_command_data(uint8_t address, CMD_t command, uint8_t len) {
138 if (len > 0)
140 return amu_dev_send_command(address, command);
141}
142
152int8_t amu_dev_query_command(uint8_t address, CMD_t command, uint8_t commandDataLen, uint8_t responseLength) {
153
154 uint8_t repeat = 0;
155
156 amu_dev_send_command_data(address, (command | CMD_READ), commandDataLen);
157
158 do {
159 if (amu_device.delay)
160 amu_device.delay(3);
161 if (amu_device.watchdog_kick)
162 amu_device.watchdog_kick();
163 repeat++;
164 } while (amu_dev_busy(address) && (repeat < 200));
165
166 if (repeat >= 200)
167 return -3;
168 else
169 return amu_dev_transfer(address, (uint8_t)AMU_REG_TRANSFER_PTR, (uint8_t*)amu_transfer_reg, responseLength, AMU_TWI_TRANSFER_READ);
170}
171
179uint8_t amu_scan_for_devices(uint8_t startAddress, uint8_t endAddress) {
180
181#ifdef __AMU_DEVICE__
182 amu_num_devices = 1;
184#else
185 amu_num_devices = 0;
186#endif
187
189
190 for (uint8_t i = startAddress; i < endAddress; i++) {
191
193 continue;
194 else {
195 if (amu_dev_transfer(i, 0, NULL, 0, AMU_TWI_TRANSFER_READ) == 0) {
199 break;
200 }
201 }
202 }
203 }
204
206
207 return amu_num_devices;
208}
209
211 return amu_num_devices;
212}
213
215 return amu_num_devices - 1;
216}
217
224uint8_t amu_get_device_address(uint8_t deviceNum) {
225 if (deviceNum < amu_num_devices)
226 return amu_device_addresses[deviceNum];
227 else
229}
230
242uint8_t _amu_route_command(uint8_t deviceNum, CMD_t cmd, size_t transferLen, bool query) {
243
244 uint8_t twi_address;
245
246 if (cmd == (CMD_t)CMD_SYSTEM_NO_CMD)
247 return 0;
248
249 if ((deviceNum >= amu_num_devices) || (deviceNum == AMU_DEVICE_END_LIST)) {
250 memset((uint8_t*)amu_transfer_reg, 0x00, transferLen); // Clear the transfer reg
251 return 0;
252 }
253
254 if (deviceNum > 0) {
255 if ((twi_address = amu_get_device_address(deviceNum)) != AMU_NO_ADDRESS_MATCH) {
256
257 if (transferLen > AMU_TRANSFER_REG_SIZE) transferLen = AMU_TRANSFER_REG_SIZE;
258
259 if (cmd >= CMD_I2C_USB) {
260 if (cmd & CMD_READ) {
261 amu_dev_query_command(twi_address, (uint8_t)cmd, 1, transferLen);
262 }
263 else {
264 amu_dev_send_command_data(twi_address, (uint8_t)cmd, transferLen);
265 }
266 }
267 else {
268 if (query) {
269 memset((void *)amu_transfer_reg, 0x00, transferLen); //clear transfer reg to zeros before new data is read in.
270 amu_dev_transfer(twi_address, (uint8_t)cmd, (uint8_t*)amu_transfer_reg, transferLen, AMU_TWI_TRANSFER_READ);
271 }
272 else
273 amu_dev_transfer(twi_address, (uint8_t)cmd, (uint8_t*)amu_transfer_reg, transferLen, AMU_TWI_TRANSFER_WRITE);
274 }
275 }
276 }
277 else {
278 if (cmd >= CMD_I2C_USB) {
279 if (amu_device.process_cmd != NULL)
280 amu_device.process_cmd(cmd);
281 else
283 }
284 else {
285 amu_data_reg_t* amu_register = amu_get_register_ptr(cmd & 0xFF);
286
287 if (query) {
288 memcpy((uint8_t*)amu_transfer_reg, (uint8_t*)amu_register, transferLen);
289 }
290 else {
291 memcpy((uint8_t*)amu_register, (uint8_t*)amu_transfer_reg, transferLen);
292 }
293 }
294 }
295
296 return true;
297}
298
299
307void _amu_transfer_read(size_t offset, void* data, size_t len) {
308 if ((offset + len) < AMU_TRANSFER_REG_SIZE) {
309 memcpy(data, (void*)&amu_transfer_reg[offset], len);
310 }
311 else
312 memset(data, 0, len);
313}
314
322void _amu_transfer_write(size_t offset, void* data, size_t len) {
323 if ((offset + len) < AMU_TRANSFER_REG_SIZE) {
324 memcpy((void*)&amu_transfer_reg[offset], data, len);
325
326 transfer_reg_data_len = offset + len; // Update the length of data in the transfer register
327 }
328
329}
330
331volatile uint8_t* amu_dev_get_transfer_reg_ptr(void) { return amu_transfer_reg; }
332
334
335 switch(reg) {
336 case AMU_REG_SYSTEM_CMD: return (amu_data_reg_t*)&amu_device.amu_regs->command; break;
337 case AMU_REG_SYSTEM_AMU_STATUS: return (amu_data_reg_t*)&amu_device.amu_regs->amu_status; break;
338 case AMU_REG_SYSTEM_TWI_STATUS: return (amu_data_reg_t*)&amu_device.amu_regs->twi_status; break;
339 case AMU_REG_SYSTEM_HARDWARE_REVISION: return (amu_data_reg_t*)&amu_device.amu_regs->hardware_revision; break;
340 case AMU_REG_SYSTEM_TSENSOR_TYPE: return (amu_data_reg_t*)&amu_device.amu_regs->tsensor_type; break;
341 case AMU_REG_SYSTEM_TSENSOR_NUM: return (amu_data_reg_t*)&amu_device.amu_regs->tsensor_num; break;
342 case AMU_REG_SYSTEM_ADC_ACTIVE_CHANNELS: return (amu_data_reg_t*)&amu_device.amu_regs->activeADCchannels; break;
343 case AMU_REG_SYSTEM_STATUS_HRADC: return (amu_data_reg_t*)&amu_device.amu_regs->adc_status; break;
344
345 case AMU_REG_DUT_JUNCTION: return (amu_data_reg_t*)&amu_device.amu_regs->dut.junction; break;
346 case AMU_REG_DUT_COVERGLASS: return (amu_data_reg_t*)&amu_device.amu_regs->dut.coverglass; break;
347 case AMU_REG_DUT_INTERCONNECT: return (amu_data_reg_t*)&amu_device.amu_regs->dut.interconnect; break;
348 case AMU_REG_DUT_RESERVED: return (amu_data_reg_t*)&amu_device.amu_regs->dut.reserved; break;
349 case AMU_REG_DUT_MANUFACTURER: return (amu_data_reg_t*)&amu_device.amu_regs->dut.manufacturer; break;
350 case AMU_REG_DUT_MODEL: return (amu_data_reg_t*)&amu_device.amu_regs->dut.model; break;
351 case AMU_REG_DUT_TECHNOLOGY: return (amu_data_reg_t*)&amu_device.amu_regs->dut.technology; break;
352 case AMU_REG_DUT_SERIAL_NUMBER: return (amu_data_reg_t*)&amu_device.amu_regs->dut.serial; break;
353 case AMU_REG_DUT_ENERGY: return (amu_data_reg_t*)&amu_device.amu_regs->dut.energy; break;
354 case AMU_REG_DUT_DOSE: return (amu_data_reg_t*)&amu_device.amu_regs->dut.dose; break;
355
356 case AMU_REG_ADC_DATA_VOLTAGE: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.voltage; break;
357 case AMU_REG_ADC_DATA_CURRENT: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.current; break;
358 // case AMU_REG_ADC_DATA_TSENSOR: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.tsensors; break;
359 // case AMU_REG_ADC_DATA_TSENSORS: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.tsensors; break;
360 case AMU_REG_ADC_DATA_TSENSOR_0: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.tsensors[0]; break;
361 case AMU_REG_ADC_DATA_TSENSOR_1: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.tsensors[1]; break;
362 case AMU_REG_ADC_DATA_TSENSOR_2: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.tsensors[2]; break;
363 case AMU_REG_ADC_DATA_BIAS: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.bias; break;
364 case AMU_REG_ADC_DATA_OFFSET: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.offset; break;
365 case AMU_REG_ADC_DATA_TEMP: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.adc_temp; break;
366 case AMU_REG_ADC_DATA_AVDD: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.avdd; break;
367 case AMU_REG_ADC_DATA_IOVDD: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.iovdd; break;
368 case AMU_REG_ADC_DATA_ALDO: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.aldo; break;
369 case AMU_REG_ADC_DATA_DLDO: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.dldo; break;
370 case AMU_REG_ADC_DATA_SS_TL: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.ss_tl; break;
371 case AMU_REG_ADC_DATA_SS_BL: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.ss_bl; break;
372 case AMU_REG_ADC_DATA_SS_BR: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.ss_br; break;
373 case AMU_REG_ADC_DATA_SS_TR: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.ss_tr; break;
374
375 // case AMU_REG_SUNSENSOR_TL: return (amu_data_reg_t*)&amu_device.amu_regs->ss_angle.diode[0]; break;
376 // case AMU_REG_SUNSENSOR_BL: return (amu_data_reg_t*)&amu_device.amu_regs->ss_angle.diode[1]; break;
377 // case AMU_REG_SUNSENSOR_BR: return (amu_data_reg_t*)&amu_device.amu_regs->ss_angle.diode[2]; break;
378 // case AMU_REG_SUNSENSOR_TR: return (amu_data_reg_t*)&amu_device.amu_regs->ss_angle.diode[3]; break;
379 case AMU_REG_SUNSENSOR_YAW: return (amu_data_reg_t*)&amu_device.amu_regs->ss_angle.yaw; break;
380 case AMU_REG_SUNSENSOR_PITCH: return (amu_data_reg_t*)&amu_device.amu_regs->ss_angle.pitch; break;
381
382 case AMU_REG_TIME_MILLIS: return (amu_data_reg_t*)&amu_device.amu_regs->milliseconds; break;
383 case AMU_REG_TIME_UTC: return (amu_data_reg_t*)&amu_device.amu_regs->utc_time; break;
384
385 case AMU_REG_SWEEP_CONFIG_TYPE: return (amu_data_reg_t*)&amu_device.amu_regs->sweep_config.type; break;
386 case AMU_REG_SWEEP_CONFIG_NUM_POINTS: return (amu_data_reg_t*)&amu_device.amu_regs->sweep_config.numPoints; break;
387 case AMU_REG_SWEEP_CONFIG_DELAY: return (amu_data_reg_t*)&amu_device.amu_regs->sweep_config.delay; break;
388 case AMU_REG_SWEEP_CONFIG_RATIO: return (amu_data_reg_t*)&amu_device.amu_regs->sweep_config.ratio; break;
389 case AMU_REG_SWEEP_CONFIG_PWR_MODE: return (amu_data_reg_t*)&amu_device.amu_regs->sweep_config.power; break;
390 case AMU_REG_SWEEP_CONFIG_DAC_GAIN: return (amu_data_reg_t*)&amu_device.amu_regs->sweep_config.dac_gain; break;
391 case AMU_REG_SWEEP_CONFIG_AVERAGES: return (amu_data_reg_t*)&amu_device.amu_regs->sweep_config.sweep_averages; break;
392 case AMU_REG_SWEEP_CONFIG_ADC_AVERAGES: return (amu_data_reg_t*)&amu_device.amu_regs->sweep_config.adc_averages; break;
393 case AMU_REG_SWEEP_CONFIG_AM0: return (amu_data_reg_t*)&amu_device.amu_regs->sweep_config.am0; break;
394 case AMU_REG_SWEEP_CONFIG_AREA: return (amu_data_reg_t*)&amu_device.amu_regs->sweep_config.area; break;
395
396 case AMU_REG_SWEEP_META_VOC: return (amu_data_reg_t*)&amu_device.amu_regs->meta.voc; break;
397 case AMU_REG_SWEEP_META_ISC: return (amu_data_reg_t*)&amu_device.amu_regs->meta.isc; break;
398 case AMU_REG_SWEEP_META_TSENSOR_START: return (amu_data_reg_t*)&amu_device.amu_regs->meta.tsensor_start; break;
399 case AMU_REG_SWEEP_META_TSENSOR_END: return (amu_data_reg_t*)&amu_device.amu_regs->meta.tsensor_end; break;
400 case AMU_REG_SWEEP_META_FF: return (amu_data_reg_t*)&amu_device.amu_regs->meta.ff; break;
401 case AMU_REG_SWEEP_META_EFF: return (amu_data_reg_t*)&amu_device.amu_regs->meta.eff; break;
402 case AMU_REG_SWEEP_META_VMAX: return (amu_data_reg_t*)&amu_device.amu_regs->meta.vmax; break;
403 case AMU_REG_SWEEP_META_IMAX: return (amu_data_reg_t*)&amu_device.amu_regs->meta.imax; break;
404 case AMU_REG_SWEEP_META_PMAX: return (amu_data_reg_t*)&amu_device.amu_regs->meta.pmax; break;
405 case AMU_REG_SWEEP_META_ADC: return (amu_data_reg_t*)&amu_device.amu_regs->meta.adc; break;
406 case AMU_REG_SWEEP_META_TIMESTAMP: return (amu_data_reg_t*)&amu_device.amu_regs->meta.timestamp; break;
407 case AMU_REG_SWEEP_META_CRC: return (amu_data_reg_t*)&amu_device.amu_regs->meta.crc; break;
408
409 case AMU_REG_DATA_PTR_TIMESTAMP: return (amu_data_reg_t*)amu_device.sweep_data->timestamp; break;
410 case AMU_REG_DATA_PTR_VOLTAGE: return (amu_data_reg_t*)amu_device.sweep_data->voltage; break;
411 case AMU_REG_DATA_PTR_CURRENT: return (amu_data_reg_t*)amu_device.sweep_data->current; break;
412 case AMU_REG_DATA_PTR_SS_YAW: return (amu_data_reg_t*)amu_device.sweep_data->yaw; break;
413 case AMU_REG_DATA_PTR_SS_PITCH: return (amu_data_reg_t*)amu_device.sweep_data->pitch; break;
414
415 case AMU_REG_DATA_PTR_SWEEP_CONFIG: return (amu_data_reg_t*)&amu_device.amu_regs->sweep_config; break;
416 case AMU_REG_DATA_PTR_SWEEP_META: return (amu_data_reg_t*)&amu_device.amu_regs->meta; break;
417 case AMU_REG_DATA_PTR_SUNSENSOR: return (amu_data_reg_t*)&amu_device.amu_regs->ss_angle; break;
418 case AMU_REG_DATA_PTR_PRESSURE: return (amu_data_reg_t*)&amu_device.amu_regs->adc_raw.val.ss_tl; break; // assume request is for quad_photo_sensor_t includeing 4 raw values, not just yaw/pitch
419 case AMU_REG_TRANSFER_PTR: return (amu_data_reg_t*)amu_device.transfer_reg; break;
420
421 default: return NULL; break;
422 }
423
424}
425
426
427#ifdef __AMU_DEVICE__
428
429volatile ivsweep_packet_t* amu_dev_get_sweep_packet_ptr(void) { return amu_device.sweep_data; }
430volatile amu_twi_regs_t* amu_dev_get_twi_regs_ptr(void) { return amu_regs_get_twi_regs_ptr(); }
431volatile amu_scpi_dev_t* amu_get_scpi_dev(void) { return (volatile amu_scpi_dev_t*)&amu_device.scpi_dev; }
432
433
434char* amu_dev_setDeviceTypeStr(const char* deviceTypeStr) {
435 memcpy(dev_deviceType_str, deviceTypeStr, AMU_DEVICE_STR_LEN);
436 return dev_deviceType_str;
437}
438
439char* amu_dev_setManufacturerStr(const char* manufacturerStr) {
440 memcpy(dev_manufacturer_str, manufacturerStr, AMU_MANUFACTURER_STR_LEN);
442}
443
444char* amu_dev_setSerialNumStr(const char* serialNumStr) {
445 memcpy(dev_serialNumber_str, serialNumStr, AMU_SERIALNUM_STR_LEN);
447}
448
449char* amu_dev_setFirmwareStr(const char* firmwareStr) {
450 memcpy(dev_firmware_str, firmwareStr, AMU_FIRMWARE_STR_LEN);
451 return dev_firmware_str;
452}
453
454uint16_t amu_reg_get_length(uint8_t reg) {
455 if(reg == AMU_REG_TRANSFER_PTR) {
457 }
458 else {
460 }
461
462}
463
464#endif
AMU Command Definitions and SCPI Command Mappings.
#define CMD_I2C_USB
TODO.
#define CMD_READ
CMD_t
volatile amu_device_t amu_device
Definition amu_device.c:40
uint8_t amu_get_device_address(uint8_t deviceNum)
Device addresses are used for TODO.
Definition amu_device.c:224
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_get_num_devices()
Definition amu_device.c:210
int8_t amu_dev_query_command(uint8_t address, CMD_t command, uint8_t commandDataLen, uint8_t responseLength)
TODO.
Definition amu_device.c:152
uint8_t _amu_route_command(uint8_t deviceNum, CMD_t cmd, size_t transferLen, bool query)
TODO.
Definition amu_device.c:242
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
volatile uint8_t * amu_dev_get_transfer_reg_ptr(void)
Definition amu_device.c:331
static uint8_t amu_num_devices
Definition amu_device.c:37
uint8_t amu_dev_busy(uint8_t address)
Checks to see if the AMU device is busy.
Definition amu_device.c:107
static uint8_t amu_dev_initialized
Definition amu_device.c:21
int8_t amu_dev_send_command(uint8_t address, CMD_t command)
Sends a command to an AMU device.
Definition amu_device.c:125
amu_data_reg_t * amu_get_register_ptr(uint8_t reg)
Definition amu_device.c:333
static volatile uint8_t amu_transfer_reg[(40 *sizeof(float))]
Definition amu_device.c:23
int8_t amu_dev_send_command_data(uint8_t address, CMD_t command, uint8_t len)
Move local transfer reg to remote transfer reg, then send command.
Definition amu_device.c:137
volatile amu_device_t * amu_dev_init(amu_transfer_fptr_t transfer_ptr)
TODO.
Definition amu_device.c:58
int8_t amu_get_num_connected_devices()
Definition amu_device.c:214
static uint8_t amu_device_addresses[16]
Definition amu_device.c:22
uint8_t amu_scan_for_devices(uint8_t startAddress, uint8_t endAddress)
Scans for any devices that might be connected in order to identify them.
Definition amu_device.c:179
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
static uint16_t transfer_reg_data_len
Definition amu_device.c:24
#define AMU_MANUFACTURER_STR_LEN
Definition amu_device.h:27
char dev_deviceType_str[10]
#define AMU_SERIALNUM_STR_LEN
Definition amu_device.h:28
char dev_serialNumber_str[26]
char dev_manufacturer_str[20]
#define AMU_FIRMWARE_STR_LEN
Definition amu_device.h:29
static void amu_command_complete(void)
Definition amu_device.h:59
#define AMU_FIRMWARE_DEFAULT_STR
Definition amu_device.h:34
#define AMU_DEVICE_DEFAULT_STR
Definition amu_device.h:31
#define AMU_DEVICE_STR_LEN
Definition amu_device.h:26
#define AMU_SERIALNUM_DEFAULT_STR
Definition amu_device.h:33
#define AMU_TWI_TRANSFER_READ
Definition amu_device.h:36
#define AMU_MAX_CONNECTED_DEVICES
Definition amu_device.h:21
#define AMU_MANUFACTURER_DEFAULT_STR
Definition amu_device.h:32
#define AMU_TWI_TRANSFER_WRITE
Definition amu_device.h:37
#define AMU_TWI_ALLCALL_ADDRESS
Definition amu_device.h:17
char dev_firmware_str[16]
uint16_t amu_regs_get_register_length(uint8_t reg)
Definition amu_regs.c:14
volatile amu_twi_regs_t * amu_regs_get_twi_regs_ptr(void)
Definition amu_regs.c:7
@ AMU_REG_CMD
Definition amu_regs.h:22
@ AMU_REG_TRANSFER_PTR
Definition amu_regs.h:32
@ AMU_REG_TIME_MILLIS
Definition amu_regs.h:99
@ AMU_REG_TIME_UTC
Definition amu_regs.h:100
@ AMU_REG_SYSTEM_AMU_STATUS
Definition amu_regs.h:38
@ AMU_REG_SYSTEM_CMD
Definition amu_regs.h:37
@ AMU_REG_SYSTEM_TSENSOR_NUM
Definition amu_regs.h:42
@ AMU_REG_SYSTEM_ADC_ACTIVE_CHANNELS
Definition amu_regs.h:43
@ AMU_REG_SYSTEM_TSENSOR_TYPE
Definition amu_regs.h:41
@ AMU_REG_SYSTEM_STATUS_HRADC
Definition amu_regs.h:44
@ AMU_REG_SYSTEM_TWI_STATUS
Definition amu_regs.h:39
@ AMU_REG_SYSTEM_HARDWARE_REVISION
Definition amu_regs.h:40
@ AMU_REG_DATA_PTR_VOLTAGE
Definition amu_regs.h:140
@ AMU_REG_DATA_PTR_PRESSURE
Definition amu_regs.h:147
@ 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_DATA_PTR_SUNSENSOR
Definition amu_regs.h:146
@ AMU_REG_SWEEP_META_CRC
Definition amu_regs.h:132
@ AMU_REG_SWEEP_META_TIMESTAMP
Definition amu_regs.h:131
@ AMU_REG_SWEEP_META_ADC
Definition amu_regs.h:130
@ AMU_REG_SWEEP_META_IMAX
Definition amu_regs.h:128
@ AMU_REG_SWEEP_META_VOC
Definition amu_regs.h:121
@ AMU_REG_SWEEP_META_ISC
Definition amu_regs.h:122
@ AMU_REG_SWEEP_META_PMAX
Definition amu_regs.h:129
@ AMU_REG_SWEEP_META_TSENSOR_START
Definition amu_regs.h:123
@ AMU_REG_SWEEP_META_FF
Definition amu_regs.h:125
@ AMU_REG_SWEEP_META_EFF
Definition amu_regs.h:126
@ AMU_REG_SWEEP_META_VMAX
Definition amu_regs.h:127
@ AMU_REG_SWEEP_META_TSENSOR_END
Definition amu_regs.h:124
@ AMU_REG_SWEEP_CONFIG_DAC_GAIN
Definition amu_regs.h:111
@ AMU_REG_SWEEP_CONFIG_ADC_AVERAGES
Definition amu_regs.h:113
@ AMU_REG_SWEEP_CONFIG_NUM_POINTS
Definition amu_regs.h:107
@ AMU_REG_SWEEP_CONFIG_DELAY
Definition amu_regs.h:108
@ AMU_REG_SWEEP_CONFIG_AVERAGES
Definition amu_regs.h:112
@ AMU_REG_SWEEP_CONFIG_AREA
Definition amu_regs.h:115
@ AMU_REG_SWEEP_CONFIG_PWR_MODE
Definition amu_regs.h:110
@ AMU_REG_SWEEP_CONFIG_AM0
Definition amu_regs.h:114
@ AMU_REG_SWEEP_CONFIG_RATIO
Definition amu_regs.h:109
@ AMU_REG_SWEEP_CONFIG_TYPE
Definition amu_regs.h:106
@ AMU_REG_DUT_MODEL
Definition amu_regs.h:55
@ AMU_REG_DUT_RESERVED
Definition amu_regs.h:53
@ AMU_REG_DUT_SERIAL_NUMBER
Definition amu_regs.h:57
@ AMU_REG_DUT_TECHNOLOGY
Definition amu_regs.h:56
@ AMU_REG_DUT_COVERGLASS
Definition amu_regs.h:51
@ AMU_REG_DUT_MANUFACTURER
Definition amu_regs.h:54
@ AMU_REG_DUT_ENERGY
Definition amu_regs.h:58
@ AMU_REG_DUT_JUNCTION
Definition amu_regs.h:50
@ AMU_REG_DUT_INTERCONNECT
Definition amu_regs.h:52
@ AMU_REG_DUT_DOSE
Definition amu_regs.h:59
@ AMU_REG_SUNSENSOR_PITCH
Definition amu_regs.h:93
@ AMU_REG_SUNSENSOR_YAW
Definition amu_regs.h:92
@ AMU_REG_ADC_DATA_SS_TR
Definition amu_regs.h:82
@ AMU_REG_ADC_DATA_OFFSET
Definition amu_regs.h:73
@ AMU_REG_ADC_DATA_TSENSOR_1
Definition amu_regs.h:70
@ AMU_REG_ADC_DATA_SS_TL
Definition amu_regs.h:79
@ AMU_REG_ADC_DATA_BIAS
Definition amu_regs.h:72
@ AMU_REG_ADC_DATA_TSENSOR_2
Definition amu_regs.h:71
@ AMU_REG_ADC_DATA_TEMP
Definition amu_regs.h:74
@ AMU_REG_ADC_DATA_VOLTAGE
Definition amu_regs.h:65
@ AMU_REG_ADC_DATA_CURRENT
Definition amu_regs.h:66
@ AMU_REG_ADC_DATA_SS_BR
Definition amu_regs.h:81
@ AMU_REG_ADC_DATA_SS_BL
Definition amu_regs.h:80
@ AMU_REG_ADC_DATA_DLDO
Definition amu_regs.h:78
@ AMU_REG_ADC_DATA_IOVDD
Definition amu_regs.h:76
@ AMU_REG_ADC_DATA_AVDD
Definition amu_regs.h:75
@ AMU_REG_ADC_DATA_ALDO
Definition amu_regs.h:77
@ AMU_REG_ADC_DATA_TSENSOR_0
Definition amu_regs.h:69
volatile uint8_t amu_data_reg_t
Definition amu_types.h:351
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 AMU_TRANSFER_REG_SIZE
Definition amu_types.h:30
#define AMU_NO_ADDRESS_MATCH
Definition amu_types.h:20
#define AMU_THIS_DEVICE
Definition amu_types.h:24
#define AMU_DEVICE_END_LIST
Definition amu_types.h:22
@ CMD_SYSTEM_NO_CMD
No operation command - Communication test.
SCPI library include file.
void amu_scpi_init(volatile amu_device_t *dev, const char *idn1, const char *idn2, const char *idn3, const char *idn4)