33 uint8_t valid, uint32_t dt_us)
46static int16_t
sat16(int32_t v, uint8_t *ovf)
48 if (v > 32767) { *ovf = 1;
return 32767; }
49 if (v < -32768) { *ovf = 1;
return -32768; }
53static void put16(uint8_t *p, uint16_t v) { p[0] = (uint8_t)v; p[1] = (uint8_t)(v >> 8); }
64 if (dt > 0xFFFFu) dt = 0xFFFFu;
void bridge_add_sample(int16_t dx, int16_t dy, uint8_t squal, uint16_t shutter, uint8_t valid, uint32_t dt_us)
one motion burst: deltas since the previous burst, dt_us = time between the two bursts; valid = 0 for...
void bridge_i2c_addr_read(void)
address matched, master reads: snapshot
static volatile uint8_t s_reads
static volatile uint8_t s_squal
static void snapshot(uint8_t latch)
void bridge_i2c_addr_write(void)
address matched, master writes
void bridge_i2c_rx(uint8_t b)
first byte = register pointer
static volatile uint16_t s_shutter
static uint8_t s_img[FLOW_REG_SPACE]
void bridge_set_sensor_ok(uint8_t ok)
static volatile uint8_t s_count
uint8_t bridge_reads(void)
FRAME reads since boot (LED activity), wraps.
static volatile uint8_t s_ctrl
uint8_t bridge_take_ctrl(void)
CTRL bits written by the master, cleared.
static int16_t sat16(int32_t v, uint8_t *ovf)
static volatile int32_t s_dx
static void put16(uint8_t *p, uint16_t v)
uint8_t bridge_i2c_tx(void)
next byte to send
static volatile uint32_t s_dt_us
static volatile int32_t s_dy
void bridge_i2c_stop(void)
static volatile uint8_t s_status
Register file of the flow bridge and the I2C target protocol.
I2C register map of the ACwing Flow bridge (STM32C011 at 0x3B).
#define FLOW_FW_VERSION
1.0
#define FLOW_WHO_AM_I_VAL