ACwing FC firmware
STM32WB55: attitude IEKF, altitude Kalman filter, flight core, protocol v2
Loading...
Searching...
No Matches
ext_i2c.c
Go to the documentation of this file.
1
5#include "ext_i2c.h"
6#include "imu_i2c.h"
7#include "cmsis_os2.h"
8#include "main.h"
9
10#define EXT_I2C_TIMEOUT_MS 3u
11
12static int32_t xfer(void *h, uint16_t reg, uint16_t regsz, uint8_t *d, uint16_t len, int write)
13{
14 const uint16_t a8 = (uint16_t)((uintptr_t)h << 1);
15 if (imu_i2c_lock()) return -1;
16 const HAL_StatusTypeDef st = write
17 ? HAL_I2C_Mem_Write(imu_i2c_handle(), a8, reg, regsz, d, len, EXT_I2C_TIMEOUT_MS)
18 : HAL_I2C_Mem_Read (imu_i2c_handle(), a8, reg, regsz, d, len, EXT_I2C_TIMEOUT_MS);
20 return st == HAL_OK ? 0 : -1;
21}
22
23static int32_t wr16(void *h, uint16_t reg, const uint8_t *d, uint16_t n) { return xfer(h, reg, I2C_MEMADD_SIZE_16BIT, (uint8_t *)d, n, 1); }
24static int32_t rd16(void *h, uint16_t reg, uint8_t *d, uint16_t n) { return xfer(h, reg, I2C_MEMADD_SIZE_16BIT, d, n, 0); }
25static int32_t wr8(void *h, uint8_t reg, const uint8_t *d, uint16_t n) { return xfer(h, reg, I2C_MEMADD_SIZE_8BIT, (uint8_t *)d, n, 1); }
26static int32_t rd8(void *h, uint8_t reg, uint8_t *d, uint16_t n) { return xfer(h, reg, I2C_MEMADD_SIZE_8BIT, d, n, 0); }
27static void dly(uint32_t ms) { osDelay(ms); }
28
29void ext_i2c_tof_bus(vl53_bus_t *b, uint8_t addr7)
30{
31 b->write = wr16; b->read = rd16; b->delay_ms = dly; b->handle = (void *)(uintptr_t)addr7;
32}
33
34void ext_i2c_flow_bus(sensor_bus_t *b, uint8_t addr7)
35{
36 b->write = wr8; b->read = rd8; b->delay_ms = dly; b->handle = (void *)(uintptr_t)addr7;
37}
double b[6]
Definition calib_mgr.c:53
uint32_t n
Definition calib_mgr.c:35
#define EXT_I2C_TIMEOUT_MS
Definition ext_i2c.c:10
void ext_i2c_flow_bus(sensor_bus_t *b, uint8_t addr7)
8-bit registers
Definition ext_i2c.c:34
static int32_t xfer(void *h, uint16_t reg, uint16_t regsz, uint8_t *d, uint16_t len, int write)
Definition ext_i2c.c:12
static int32_t wr16(void *h, uint16_t reg, const uint8_t *d, uint16_t n)
Definition ext_i2c.c:23
static int32_t rd16(void *h, uint16_t reg, uint8_t *d, uint16_t n)
Definition ext_i2c.c:24
static void dly(uint32_t ms)
Definition ext_i2c.c:27
void ext_i2c_tof_bus(vl53_bus_t *b, uint8_t addr7)
16-bit registers
Definition ext_i2c.c:29
static int32_t rd8(void *h, uint8_t reg, uint8_t *d, uint16_t n)
Definition ext_i2c.c:26
static int32_t wr8(void *h, uint8_t reg, const uint8_t *d, uint16_t n)
Definition ext_i2c.c:25
HAL binding of the expansion (Qwiic) devices on I2C1.
int imu_i2c_lock(void)
0 = taken (or no kernel yet), -1 = timeout
Definition imu_i2c.c:28
void imu_i2c_unlock(void)
Definition imu_i2c.c:34
I2C_HandleTypeDef * imu_i2c_handle(void)
Definition imu_i2c.c:39
STM32 HAL (STM32WB55) binding of the sensor_bus_t interface + DMA burst read of the FIFO with task no...
uint16_t ms
Definition log_task.c:42
static USBD_StatusTypeDef st(HAL_StatusTypeDef h)
Definition usbd_conf.c:86