STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
fake_baro.c
Go to the documentation of this file.
1#include "fake_baro.h"
2
3#include <string.h>
4
5const uint16_t fake_baro_datasheet_prom[8] = {0x3132, 40127, 36924, 23317,
6 23282, 33464, 28312, 0x1233};
7
8static int xfer(void* ctx, const uint8_t* tx, uint8_t* rx, uint16_t len) {
9 fake_baro_t* f = ctx;
10 if (f->fail) {
11 return DEV_ERR_BUS;
12 }
13 f->transfers++;
14 f->last_cmd = tx[0];
15 if (rx) {
16 memset(rx, 0, len);
17 }
18 if (tx[0] >= 0xA0 && tx[0] <= 0xAE && len == 3 && rx) {
19 uint16_t w = f->prom[(tx[0] - 0xA0) / 2];
20 rx[1] = (uint8_t)(w >> 8);
21 rx[2] = (uint8_t)w;
22 } else if (tx[0] == 0x48 || tx[0] == 0x58) {
23 f->pending = tx[0];
24 } else if (tx[0] == 0x00 && len == 4 && rx) {
25 uint32_t v = f->pending == 0x48 ? f->d1
26 : f->pending == 0x58 ? f->d2
27 : 0;
28 f->pending = 0;
29 rx[1] = (uint8_t)(v >> 16);
30 rx[2] = (uint8_t)(v >> 8);
31 rx[3] = (uint8_t)v;
32 }
33 return DEV_OK;
34}
35
36static void no_delay(void* ctx, uint32_t ms) {
37 (void)ctx;
38 (void)ms;
39}
40
42 dev_bus_t bus = {xfer, no_delay, f};
43 return bus;
44}
static int xfer(void *ctx, const uint8_t *tx, uint8_t *rx, uint16_t len)
@ DEV_OK
Definition dev_bus.h:17
@ DEV_ERR_BUS
Definition dev_bus.h:18
static void no_delay(void *ctx, uint32_t ms)
Definition fake_baro.c:36
static int xfer(void *ctx, const uint8_t *tx, uint8_t *rx, uint16_t len)
Definition fake_baro.c:8
const uint16_t fake_baro_datasheet_prom[8]
Definition fake_baro.c:5
dev_bus_t fake_baro_bus(fake_baro_t *f)
Definition fake_baro.c:41
uint32_t d2
Definition fake_baro.h:15
uint16_t prom[8]
Definition fake_baro.h:14
uint8_t pending
Definition fake_baro.h:16
uint8_t last_cmd
Definition fake_baro.h:19
unsigned transfers
Definition fake_baro.h:18
uint32_t d1
Definition fake_baro.h:15