42#define CHIP_NAME "ASAIR AFS01"
43#define MANUFACTURER_NAME "ASAIR"
44#define SUPPLY_VOLTAGE_MIN 4.75f
45#define SUPPLY_VOLTAGE_MAX 5.25f
46#define MAX_CURRENT 10.0f
47#define TEMPERATURE_MIN 25.0f
48#define TEMPERATURE_MAX 50.0f
49#define DRIVER_VERSION 1000
54#define AFS01_ADDRESS 0x80
59#define AFS01_COMMAND_READ_DATA 0x1000U
60#define AFS01_COMMAND_READ_ID 0x31AEU
73static uint8_t a_afs01_read(
afs01_handle_t *handle, uint16_t reg, uint8_t *data, uint16_t len)
90static uint8_t a_afs01_crc(uint8_t *data, uint16_t len)
92 const uint8_t POLYNOMIAL = 0x31;
96 for (j = len; j != 0; --j)
99 for (i = 8; i != 0; --i)
101 crc = (crc & 0x80) ? (crc << 1) ^ POLYNOMIAL : (crc << 1);
136 handle->
debug_print(
"afs01: iic_deinit is null.\n");
142 handle->
debug_print(
"afs01: iic_read_address16 is null.\n");
187 handle->
debug_print(
"afs01: iic deinit failed.\n");
230 if (a_afs01_crc(buf, 2) != buf[2])
236 *raw = (uint16_t)(((uint16_t)buf[0]) << 8) | buf[1];
237 *sccm = ((float)(*raw) - 32000.0f) / 140.0f;
275 if (a_afs01_crc(buf, 2) != buf[2])
281 if (a_afs01_crc(buf + 3, 2) != buf[5])
319 if (a_afs01_read(handle, reg, buf, len) != 0)
#define AFS01_COMMAND_READ_ID
#define AFS01_COMMAND_READ_DATA
chip command definition
#define SUPPLY_VOLTAGE_MAX
#define MANUFACTURER_NAME
#define SUPPLY_VOLTAGE_MIN
#define AFS01_ADDRESS
chip address definition
#define CHIP_NAME
chip information definition
uint8_t afs01_info(afs01_info_t *info)
get chip's information
struct afs01_info_s afs01_info_t
afs01 information structure definition
uint8_t afs01_get_chip_id(afs01_handle_t *handle, uint8_t id[4])
get chip id
uint8_t afs01_read(afs01_handle_t *handle, uint16_t *raw, float *sccm)
read data
uint8_t afs01_deinit(afs01_handle_t *handle)
close the chip
uint8_t afs01_init(afs01_handle_t *handle)
initialize the chip
struct afs01_handle_s afs01_handle_t
afs01 handle structure definition
uint8_t si7021_get_reg(afs01_handle_t *handle, uint16_t reg, uint8_t *buf, uint16_t len)
get chip register
void(* delay_ms)(uint32_t ms)
uint8_t(* iic_read_address16)(uint8_t addr, uint16_t reg, uint8_t *buf, uint16_t len)
void(* debug_print)(const char *const fmt,...)
uint8_t(* iic_init)(void)
uint8_t(* iic_deinit)(void)
float supply_voltage_max_v
char manufacturer_name[32]
float supply_voltage_min_v