AMU Library 3.0
C/C++ library for communicating with AMU (Aerospace Measurement Unit) devices
Loading...
Searching...
No Matches
amu_device.h
Go to the documentation of this file.
1
7
8
9#ifndef __AMU_DEVICE_H__
10#define __AMU_DEVICE_H__
11
12#include "amu_commands.h"
13#include "amu_types.h"
14#include "amu_config_internal.h"
15
16#define AMU_TWI_DEFAULT_ADDRESS 0x0F
17#define AMU_TWI_ALLCALL_ADDRESS 0x0A
18#define AMU_EYAS_ADDRESS 0x07
19
20#ifdef __AMU_LOW_MEMORY__
21# define AMU_MAX_CONNECTED_DEVICES 16
22#else
23# define AMU_MAX_CONNECTED_DEVICES 63
24#endif
25
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
30
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-"
35
36#define AMU_TWI_TRANSFER_READ 1
37#define AMU_TWI_TRANSFER_WRITE 0
38
39#ifdef __cplusplus
40extern "C" {
41#endif
42
43 extern volatile amu_device_t amu_device;
48
50
51 int8_t amu_dev_transfer(uint8_t address, uint8_t reg, uint8_t* data, size_t len, uint8_t rw);
52 uint8_t amu_dev_busy(uint8_t address);
53
54 int8_t amu_dev_send_command(uint8_t address, CMD_t command);
55 int8_t amu_dev_send_command_data(uint8_t address, CMD_t command, uint8_t len);
56 int8_t amu_dev_query_command(uint8_t address, CMD_t command, uint8_t commandDataLen, uint8_t responseLength);
57
58 static inline CMD_t amu_get_next_twi_command(void) { return (CMD_t)(amu_device.amu_regs->command + CMD_I2C_USB); }
59 static inline void amu_command_complete(void) { amu_device.amu_regs->command = 0;}
60
61 uint8_t amu_scan_for_devices(uint8_t startAddress, uint8_t endAddress);
62 int8_t amu_get_num_devices(void);
64 uint8_t amu_get_device_address(uint8_t deviceNum);
65
66 uint8_t _amu_route_command(uint8_t deviceNum, CMD_t cmd, size_t transferLen, bool query);
67
68 void _amu_transfer_read(size_t offset, void *data, size_t len);
69 void _amu_transfer_write(size_t offset, void *data, size_t len);
70
71 volatile uint8_t* amu_dev_get_transfer_reg_ptr(void);
72
73 amu_data_reg_t* amu_get_register_ptr(uint8_t amu_register);
74
75
76#ifdef __AMU_DEVICE__
77 volatile ivsweep_packet_t* amu_dev_get_sweep_packet_ptr(void);
78 volatile amu_twi_regs_t* amu_dev_get_twi_regs_ptr(void);
79 volatile amu_scpi_dev_t* amu_get_scpi_dev(void);
80
81 static inline char* amu_dev_getDeviceTypeStr(void) { return dev_deviceType_str; }
82 static inline char* amu_dev_getManufacturerStr(void) { return dev_manufacturer_str; }
83 static inline char* amu_dev_getSerialNumStr(void) { return dev_serialNumber_str; }
84 static inline char* amu_dev_getFirmwareStr(void) { return dev_firmware_str; }
85
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);
90
91 uint16_t amu_reg_get_length(uint8_t reg);
92
93
94#endif
95
96
97
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)); }
102
110 __TRANSFER_READ_(press_data_t) //these weren't here before...
113
119
129
131
132 static inline void transfer_write_str(const char* str, uint8_t len) { _amu_transfer_write(0, (void*)str, len); }
133 static inline void transfer_read_str(const char* str, uint8_t len) { _amu_transfer_read(0, (void*)str, len); }
134
135
136
137#ifdef __cplusplus
138}
139#endif
140
141#endif /* __AMU_DEVICE_H__ */
AMU Command Definitions and SCPI Command Mappings.
#define CMD_I2C_USB
TODO.
CMD_t
volatile amu_device_t amu_device
Definition amu_device.c:40
#define AMU_MANUFACTURER_STR_LEN
Definition amu_device.h:27
uint8_t amu_get_device_address(uint8_t deviceNum)
Device addresses are used for TODO.
Definition amu_device.c:224
volatile amu_device_t * amu_dev_init(amu_transfer_fptr_t)
TODO.
Definition amu_device.c:58
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
char dev_deviceType_str[10]
#define AMU_SERIALNUM_STR_LEN
Definition amu_device.h:28
char dev_serialNumber_str[26]
int8_t amu_dev_query_command(uint8_t address, CMD_t command, uint8_t commandDataLen, uint8_t responseLength)
TODO.
Definition amu_device.c:152
amu_data_reg_t * amu_get_register_ptr(uint8_t amu_register)
Definition amu_device.c:333
char dev_manufacturer_str[20]
#define AMU_FIRMWARE_STR_LEN
Definition amu_device.h:29
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
static void transfer_write_str(const char *str, uint8_t len)
Definition amu_device.h:132
#define __TRANSFER_READ_(TYPE)
Definition amu_device.h:98
volatile uint8_t * amu_dev_get_transfer_reg_ptr(void)
Definition amu_device.c:331
int8_t amu_get_num_devices(void)
Definition amu_device.c:210
static void amu_command_complete(void)
Definition amu_device.h:59
uint8_t amu_dev_busy(uint8_t address)
Checks to see if the AMU device is busy.
Definition amu_device.c:107
#define __TRANSFER_WRITE_OFFSET(TYPE)
Definition amu_device.h:101
#define AMU_DEVICE_STR_LEN
Definition amu_device.h:26
int8_t amu_dev_send_command(uint8_t address, CMD_t command)
Sends a command to an AMU device.
Definition amu_device.c:125
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
static CMD_t amu_get_next_twi_command(void)
Definition amu_device.h:58
#define __TRANSFER_WRITE_(TYPE)
Definition amu_device.h:100
static void transfer_read_str(const char *str, uint8_t len)
Definition amu_device.h:133
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
#define __TRANSFER_READ_OFFSET(TYPE)
Definition amu_device.h:99
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
int8_t amu_get_num_connected_devices(void)
Definition amu_device.c:214
char dev_firmware_str[16]
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