9#ifndef __AMU_DEVICE_H__
10#define __AMU_DEVICE_H__
16#define AMU_TWI_DEFAULT_ADDRESS 0x0F
17#define AMU_TWI_ALLCALL_ADDRESS 0x0A
18#define AMU_EYAS_ADDRESS 0x07
20#ifdef __AMU_LOW_MEMORY__
21# define AMU_MAX_CONNECTED_DEVICES 16
23# define AMU_MAX_CONNECTED_DEVICES 63
26#define AMU_DEVICE_STR_LEN 10
27#define AMU_MANUFACTURER_STR_LEN 20
28#define AMU_SERIALNUM_STR_LEN 26
29#define AMU_FIRMWARE_STR_LEN 16
31#define AMU_DEVICE_DEFAULT_STR "AMU-M0+"
32#define AMU_MANUFACTURER_DEFAULT_STR "AEROSPACE"
33#define AMU_SERIALNUM_DEFAULT_STR "0x01"
34#define AMU_FIRMWARE_DEFAULT_STR "amu-"
36#define AMU_TWI_TRANSFER_READ 1
37#define AMU_TWI_TRANSFER_WRITE 0
51 int8_t
amu_dev_transfer(uint8_t address, uint8_t reg, uint8_t* data,
size_t len, uint8_t rw);
84 static inline char* amu_dev_getFirmwareStr(
void) {
return dev_firmware_str; }
86 char* amu_dev_setDeviceTypeStr(
const char* deviceTypeStr);
87 char* amu_dev_setManufacturerStr(
const char* manufacturerStr);
88 char* amu_dev_setSerialNumStr(
const char* serialNumStr);
89 char* amu_dev_setFirmwareStr(
const char* firmwareStr);
91 uint16_t amu_reg_get_length(uint8_t reg);
98#define __TRANSFER_READ_(TYPE) static inline TYPE transfer_read_##TYPE(void) { TYPE data; _amu_transfer_read(0, &data, sizeof(TYPE)); return data; }
99#define __TRANSFER_READ_OFFSET(TYPE) static inline TYPE transfer_read_offset_##TYPE(void) { TYPE data; _amu_transfer_read(1, &data, sizeof(TYPE)); return data; }
100#define __TRANSFER_WRITE_(TYPE) static inline void transfer_write_##TYPE(TYPE data) { _amu_transfer_write(0, &data, sizeof(TYPE)); }
101#define __TRANSFER_WRITE_OFFSET(TYPE) static inline void transfer_write_offset_##TYPE(uint8_t num, TYPE data) { _amu_transfer_write(num*sizeof(TYPE), &data, sizeof(TYPE)); }
AMU Command Definitions and SCPI Command Mappings.
volatile amu_device_t amu_device
#define AMU_MANUFACTURER_STR_LEN
uint8_t amu_get_device_address(uint8_t deviceNum)
Device addresses are used for TODO.
volatile amu_device_t * amu_dev_init(amu_transfer_fptr_t)
TODO.
int8_t amu_dev_transfer(uint8_t address, uint8_t reg, uint8_t *data, size_t len, uint8_t rw)
Transfering... TODO.
char dev_deviceType_str[10]
#define AMU_SERIALNUM_STR_LEN
char dev_serialNumber_str[26]
int8_t amu_dev_query_command(uint8_t address, CMD_t command, uint8_t commandDataLen, uint8_t responseLength)
TODO.
amu_data_reg_t * amu_get_register_ptr(uint8_t amu_register)
char dev_manufacturer_str[20]
#define AMU_FIRMWARE_STR_LEN
uint8_t _amu_route_command(uint8_t deviceNum, CMD_t cmd, size_t transferLen, bool query)
TODO.
void _amu_transfer_write(size_t offset, void *data, size_t len)
TODO: explain the transfer part of a transfer write.
static void transfer_write_str(const char *str, uint8_t len)
#define __TRANSFER_READ_(TYPE)
volatile uint8_t * amu_dev_get_transfer_reg_ptr(void)
int8_t amu_get_num_devices(void)
static void amu_command_complete(void)
uint8_t amu_dev_busy(uint8_t address)
Checks to see if the AMU device is busy.
#define __TRANSFER_WRITE_OFFSET(TYPE)
#define AMU_DEVICE_STR_LEN
int8_t amu_dev_send_command(uint8_t address, CMD_t command)
Sends a command to an AMU device.
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.
static CMD_t amu_get_next_twi_command(void)
#define __TRANSFER_WRITE_(TYPE)
static void transfer_read_str(const char *str, uint8_t len)
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.
#define __TRANSFER_READ_OFFSET(TYPE)
void _amu_transfer_read(size_t offset, void *data, size_t len)
TODO: explain the transfer part of a transfer read.
int8_t amu_get_num_connected_devices(void)
char dev_firmware_str[16]
volatile uint8_t amu_data_reg_t
int8_t(* amu_transfer_fptr_t)(uint8_t address, uint8_t reg, uint8_t *data, size_t len, uint8_t read)