ACwing FC firmware
STM32WB55: attitude IEKF, altitude Kalman filter, flight core, protocol v2
Loading...
Searching...
No Matches
flow_bridge.c
Go to the documentation of this file.
1
4#include "flow_bridge.h"
5
6static int16_t le16(const uint8_t *p) { return (int16_t)((uint16_t)p[0] | ((uint16_t)p[1] << 8)); }
7
8int32_t flow_init(flow_t *f, const sensor_bus_t *bus)
9{
10 f->bus = *bus;
11 f->ok = 0;
12 uint8_t id[2] = { 0, 0 };
13 if (f->bus.read(f->bus.handle, FLOW_REG_WHO_AM_I, id, 2)) return -1;
14 if (id[0] != FLOW_BRIDGE_WHO_AM_I) return -2;
15 f->version = id[1];
16 f->ok = 1;
17 return 0;
18}
19
20void flow_decode(const uint8_t r[FLOW_FRAME_LEN], flow_frame_t *fr)
21{
22 fr->status = r[0];
23 fr->count = r[1];
24 fr->dx = le16(&r[2]);
25 fr->dy = le16(&r[4]);
26 fr->squal = r[6];
27 fr->shutter = (uint16_t)le16(&r[7]);
28 fr->dt_s = (float)(uint16_t)le16(&r[9]) * 1e-4f;
29}
30
32{
33 if (!f->ok) return -1;
34 uint8_t r[FLOW_FRAME_LEN];
35 if (f->bus.read(f->bus.handle, FLOW_REG_FRAME, r, sizeof r)) return -1;
36 flow_decode(r, fr);
37 return (fr->status & FLOW_ST_NEW) ? 1 : 0;
38}
int32_t flow_read(flow_t *f, flow_frame_t *fr)
1 = new data, 0 = none, <0 error
Definition flow_bridge.c:31
void flow_decode(const uint8_t r[FLOW_FRAME_LEN], flow_frame_t *fr)
pure decoder (host tests)
Definition flow_bridge.c:20
int32_t flow_init(flow_t *f, const sensor_bus_t *bus)
0 = bridge found
Definition flow_bridge.c:8
static int16_t le16(const uint8_t *p)
Definition flow_bridge.c:6
ACwing Flow rev A optical-flow bridge (STM32C011 at 0x3B, PMW3901 behind it).
#define FLOW_ST_NEW
Definition flow_bridge.h:48
#define FLOW_REG_FRAME
Definition flow_bridge.h:43
#define FLOW_BRIDGE_WHO_AM_I
Definition flow_bridge.h:40
#define FLOW_REG_WHO_AM_I
Definition flow_bridge.h:41
#define FLOW_FRAME_LEN
Definition flow_bridge.h:44
uint8_t count
Definition flow_bridge.h:59
uint8_t status
Definition flow_bridge.h:59
uint16_t shutter
Definition flow_bridge.h:61
uint8_t squal
Definition flow_bridge.h:59
sensor_bus_t bus
Definition flow_bridge.h:53
uint8_t ok
Definition flow_bridge.h:55
uint8_t version
Definition flow_bridge.h:54
void * handle
opaque context passed to read/write
Definition sensor_bus.h:23
bus_read_fn read
Definition sensor_bus.h:21