AMU Library 3.0
C/C++ library for communicating with AMU (Aerospace Measurement Unit) devices
Loading...
Searching...
No Matches
amulib.h
Go to the documentation of this file.
1// amu.h
2
3#ifndef __AMULIB_H__
4#define __AMULIB_H__
5
7#include "amulibc/amu_regs.h"
9
10#ifdef __AMU_USE_SCPI__
11#include "amulibc/scpi.h"
12#endif
13
14#ifdef __AMU_REMOTE_DEVICE__
15
16#include <stdlib.h>
17
18#ifdef __cplusplus
19
20class AMU {
21
22public:
23
24 void begin(uint8_t twiAddress);
25 void begin(uint8_t twiAddress, amu_transfer_fptr_t i2c_transfer_func);
26
27 uint8_t waitUntilReady(uint32_t timeout);
28
29 int8_t sleep(void);
30
31 char* readNotes(char *notes, uint8_t len);
32 char* readNotes(char* notes);
33 char* readSerialStr(void);
34 char* readFirmwareStr(void);
35
36 int8_t setActiveChannels(uint16_t channels);
37 int8_t setTimeStamp(uint32_t timestamp);
38
39 int8_t setLEDcolor(float red, float grn, float blu);
40 int8_t setLEDmode(amu_led_pattern_t mode);
41
42 uint8_t getPGA(AMU_ADC_CH_t channel);
43
44 float measureVoltage(void);
45 float measureCurrent(void);
46 float measureTSensor(void);
47 float measureTSensor0(void);
48 float measureTSensor1(void);
49 float measureTSensor2(void);
50 float measureSSTL(void);
51 float measureSSBL(void);
52 float measureSSBR(void);
53 float measureSSTR(void);
54 float measureBias(void);
55 float measureOffset(void);
56 float measureTemperature(void);
57 float measureAvdd(void);
58 float measureIOvdd(void);
59 float measureAldo(void);
60 float measureDldo(void);
61
62 float measureChannel(uint8_t channel);
63 int8_t measureActiveChannels(void);
64 amu_int_volt_t measureInternalVoltages(void);
65 quad_photo_sensor_t measureSunSensor(void);
66
67 float measureSystemTemperature(void);
68
69 /*** EYAS FUNCTIONS ***/
70 press_data_t measurePressureSensor(void);
71 float measurePressure(void);
72 float measureHumidity(void);
73 float measurePSTemperature(void);
74
75
76 ivsweep_config_t * readSweepConfig(void);
77 ivsweep_meta_t * readMeta(void);
78 float readIsc(void);
79 float readVoc(void);
80 ss_angle_t * readSunSensorAngles(void);
81 quad_photo_sensor_t * readSunSensorMeasurement(void);
82
83 amu_meas_t readMeasurement(void);
84 uint32_t * readSweepTimestamps(uint32_t*);
85 float * readSweepVoltages(float*);
86 float * readSweepCurrents(float*);
87 float * readSweepYaws(float*);
88 float * readSweepPitches(float*);
89 ivsweep_packet_t * readSweepIV(ivsweep_packet_t*);
90 ivsweep_packet_t * readSweepSunAngle(ivsweep_packet_t*);
91 ivsweep_packet_t * readSweepAll(ivsweep_packet_t*);
92
93 void loadSweepDatapoints(uint8_t offset);
94
95 uint8_t getAddress(void) { return address; }
96
97 amu_dut_t* getDUT(void) { return &dut; }
98 char * getDutManufacturer(void) { return dut.manufacturer; }
99 char* getDutModel(void) { return dut.model; }
100 uint8_t getDutJunction(void) { return dut.junction; }
101 char * getDutSerialNumber(void) { return dut.serial; }
102 float getDutEnergy(void) { return dut.energy; }
103 float getDutDose(void) { return dut.dose; }
104
105
106 amu_hardware_revision_t getHardwareRevision(void) { return hardware_revision; }
107
108 char * getFirmware(void) { return firmware; }
109 char* getSerialNumber(void) { return serial_number; }
110
111 ivsweep_config_t * getSweepConfig(void) { return &sweep_config; }
112 ivsweep_meta_t * getMetaData(void) { return &meta; }
113
114 float getDACgainCorrection(void);
115
116 quad_photo_sensor_t getQuadPhotoSensor(void) { return sun_sensor; }
117
118 float getPhotoDiodeVoltage(uint8_t n);
119 float getYaw(void) { return sun_sensor.angle.yaw; }
120 float getPitch(void) { return sun_sensor.angle.pitch; }
121
122 float getYawAbs(void) { return abs(sun_sensor.angle.yaw); }
123 float getPitchAbs(void) { return abs(sun_sensor.angle.pitch); }
124
125 bool goodSunAngle(float minAngle);
126
127 amu_coeff_t getYawCoefficients(void);
128 amu_coeff_t getPitchCoefficients(void);
129 float getSSHVal(void);
130 float getSSRVal(void);
131
132 uint32_t getADCstatus(void);
133
134 int8_t triggerIsc(void);
135 int8_t triggerVoc(void);
136
137 int8_t triggerSweep(void);
138
139 amu_meas_t measureIsc(void);
140 amu_meas_t measureVoc(void);
141
142
143
144
145
146public:
147
148 typedef void (*errorPrintFncPtr_t)(const char* fmt, ...);
149 typedef void (*resetFncPtr_t)(void);
150
151 static errorPrintFncPtr_t errorPrintFncPtr;
152 static resetFncPtr_t amuResetFncPtr;
153 static resetFncPtr_t eyasResetFncPtr;
154
155 static amu_device_t * amu_lib_init(amu_transfer_fptr_t i2c_transfer_func);
156 static amu_scpi_dev_t * amu_scpi_init(size_t(*write_cmd)(const char* data, size_t len), void(*flush_cmd)(void));
157
158public:
159
160 static void setErrorPrintFunction(errorPrintFncPtr_t fptr) { errorPrintFncPtr = fptr; }
161 static void setAMUResetFuncPtr(resetFncPtr_t fptr) { amuResetFncPtr = fptr; }
162 static void setEYASResetFuncPtr(resetFncPtr_t fptr) { eyasResetFncPtr = fptr; }
163
164protected:
165
166 uint8_t address;
167
168 volatile amu_device_t* amu_dev;
169
170 char serial_number[AMU_SERIALNUM_STR_LEN];
171 char firmware[AMU_FIRMWARE_STR_LEN];
172
173 amu_hardware_revision_t hardware_revision;
174
175 amu_dut_t dut;
176
177 ivsweep_config_t sweep_config;
178 ivsweep_meta_t meta;
179
180 quad_photo_sensor_t sun_sensor;
181
182 uint8_t busy(void);
183
184 int8_t sendCommand(CMD_t cmd);
185 int8_t sendCommand(CMD_t cmd, void* params, uint8_t param_len);
186 int8_t sendCommandandWait(CMD_t cmd, uint32_t wait);
187
188 template <typename T>
189 T query(CMD_t command);
190
191 template <typename T>
192 T query(CMD_t command, T* data);
193
194 template <typename T>
195 T * query(CMD_t command, T *data, size_t len);
196
197 template <typename T>
198 T queryChannel(CMD_t command, uint8_t channel);
199
200 template <typename T>
201 T read_twi_reg(uint8_t reg);
202
203 template <typename T>
204 T * read_twi_reg(uint8_t reg, T *data, size_t len);
205
206 template <typename T>
207 int8_t write_twi_reg(uint8_t reg, T data);
208
209 template <typename T>
210 int8_t write_twi_reg(uint8_t reg, T * data, size_t len);
211};
212
213#endif // __cplusplus
214
215#endif // __AMU_REMOTE_DEVICE__
216
217#endif /* __AMULIB_H__ */
CMD_t
#define AMU_SERIALNUM_STR_LEN
Definition amu_device.h:28
#define AMU_FIRMWARE_STR_LEN
Definition amu_device.h:29
amu_hardware_revision_t
Definition amu_types.h:112
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
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)