7#ifdef __AMU_REMOTE_DEVICE__
17AMU::errorPrintFncPtr_t AMU::errorPrintFncPtr =
nullptr;
18AMU::resetFncPtr_t AMU::amuResetFncPtr =
nullptr;
19AMU::resetFncPtr_t AMU::eyasResetFncPtr =
nullptr;
21void AMU::begin(uint8_t twiAddress) {
38 amu_dev = amu_lib_init(i2c_transfer_func);
44uint8_t AMU::waitUntilReady(uint32_t timeout) {
49 uint32_t waitTime = amu_dev->millis();
51 while(busy() && ((amu_dev->millis() - waitTime) < timeout)) {
56 if ((amu_dev->millis() -waitTime) > timeout)
62int8_t AMU::sleep(
void) {
66char* AMU::readNotes(
char* notes, uint8_t len) {
70char* AMU::readNotes(
char* notes) {
74char* AMU::readSerialStr() {
78char* AMU::readFirmwareStr() {
82int8_t AMU::setActiveChannels(uint16_t channels) {
86int8_t AMU::setTimeStamp(uint32_t timestamp) {
91int8_t AMU::setLEDcolor(
float red,
float grn,
float blu) {
125float AMU::measureChannel(uint8_t channel) {
133int8_t AMU::measureActiveChannels() {
145float AMU::measurePressure(
void) {
150float AMU::measureHumidity(
void) {
156float AMU::measurePSTemperature(
void) {
166float AMU::measureSystemTemperature() {
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); }
189 readSweepVoltages(sweep_packet->
voltage);
190 readSweepCurrents(sweep_packet->
current);
195#ifndef __AMU_LOW_MEMORY__
196 readSweepYaws(sweep_packet->yaw);
197 readSweepPitches(sweep_packet->pitch);
199 readSweepYaws(sweep_packet->
voltage);
200 readSweepPitches(sweep_packet->
current);
206 readSweepIV(sweep_packet);
207#ifndef __AMU_LOW_MEMORY__
208 readSweepSunAngle(sweep_packet);
213void AMU::loadSweepDatapoints(uint8_t offset) {
217bool AMU::goodSunAngle(
float minAngle) {
218 if ((getYaw() ==
NAN) || (getPitch() ==
NAN))
221 return ((getYawAbs() < minAngle) && (getPitchAbs() < minAngle));
224float AMU::getPhotoDiodeVoltage(uint8_t n) {
226 return sun_sensor.diode[n];
231float AMU::getDACgainCorrection(
void) {
241uint32_t AMU::getADCstatus(
void) {
245int8_t AMU::triggerIsc(
void) {
249int8_t AMU::triggerVoc(
void) {
253int8_t AMU::triggerSweep(
void) {
270int8_t AMU::sendCommand(
CMD_t cmd) {
271 static uint8_t wait_error = 0;
273 wait_error = waitUntilReady(1000);
275 if (wait_error != 0) {
276 if (AMU::errorPrintFncPtr) {
277 AMU::errorPrintFncPtr(
"Wait until ready error: %u\n", wait_error);
283int8_t AMU::sendCommand(
CMD_t cmd,
void *params, uint8_t param_len) {
285 return sendCommand(cmd);
288int8_t AMU::sendCommandandWait(
CMD_t cmd, uint32_t wait) {
290 return waitUntilReady(wait);
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");
304 if (AMU::errorPrintFncPtr) {
305 AMU::errorPrintFncPtr(
"Query command failed with error: %d\n", result);
310 T* data = (T*)amu_dev->transfer_reg;
315T AMU::query(
CMD_t command, T* data) {
317 if (AMU::errorPrintFncPtr) {
318 AMU::errorPrintFncPtr(
"Error: data pointer is null\n");
325 if (AMU::errorPrintFncPtr) {
326 AMU::errorPrintFncPtr(
"Query command failed with error: %d\n", result);
337T * AMU::query(
CMD_t command, T *data,
size_t len) {
339 if (AMU::errorPrintFncPtr) {
340 AMU::errorPrintFncPtr(
"Error: data pointer is null\n");
346 if (AMU::errorPrintFncPtr) {
347 AMU::errorPrintFncPtr(
"Error: len is zero\n");
354 if (AMU::errorPrintFncPtr) {
355 AMU::errorPrintFncPtr(
"Query command failed with error: %d\n", result);
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");
379 if (AMU::errorPrintFncPtr) {
380 AMU::errorPrintFncPtr(
"Query command failed with error: %d\n", result);
385 T* data = (T*)amu_dev->transfer_reg;
390T AMU::read_twi_reg(uint8_t reg) {
397T * AMU::read_twi_reg(uint8_t reg, T *data,
size_t len) {
403int8_t AMU::write_twi_reg(uint8_t reg, T data) {
408int8_t AMU::write_twi_reg(uint8_t reg, T *data,
size_t len) {
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__
427 if (scpi_dev != NULL) {
int8_t amu_dev_transfer(uint8_t address, uint8_t reg, uint8_t *data, size_t len, uint8_t rw)
Transfering... TODO.
int8_t amu_dev_query_command(uint8_t address, CMD_t command, uint8_t commandDataLen, uint8_t responseLength)
TODO.
void _amu_transfer_write(size_t offset, void *data, size_t len)
TODO: explain the transfer part of a transfer write.
uint8_t amu_dev_busy(uint8_t address)
Checks to see if the AMU device is busy.
int8_t amu_dev_send_command(uint8_t address, CMD_t command)
Sends a command to an AMU device.
volatile amu_device_t * amu_dev_init(amu_transfer_fptr_t transfer_ptr)
TODO.
void _amu_transfer_read(size_t offset, void *data, size_t len)
TODO: explain the transfer part of a transfer read.
#define AMU_SERIALNUM_STR_LEN
#define AMU_FIRMWARE_STR_LEN
#define AMU_TWI_TRANSFER_READ
#define AMU_TWI_TRANSFER_WRITE
@ AMU_REG_SUNSENSOR_ANGLE
@ AMU_REG_SYSTEM_ADC_ACTIVE_CHANNELS
@ AMU_REG_SYSTEM_STATUS_HRADC
@ AMU_REG_SYSTEM_HARDWARE_REVISION
@ AMU_REG_DATA_PTR_VOLTAGE
@ AMU_REG_DATA_PTR_SWEEP_CONFIG
@ AMU_REG_DATA_PTR_SS_YAW
@ AMU_REG_DATA_PTR_CURRENT
@ AMU_REG_DATA_PTR_TIMESTAMP
@ AMU_REG_DATA_PTR_SWEEP_META
@ AMU_REG_DATA_PTR_SS_PITCH
amu_adc_ch_t AMU_ADC_CH_t
int8_t(* amu_transfer_fptr_t)(uint8_t address, uint8_t reg, uint8_t *data, size_t len, uint8_t read)
@ 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.
size_t(* write_cmd)(const char *data, size_t len)