STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
board_devbus.c
Go to the documentation of this file.
1#include "board_devbus.h"
2
3#include "board.h"
4#include "cmsis_os2.h"
5
6/* One context per SPI device: the device id is the context. */
11
12static int xfer(void* ctx, const uint8_t* tx, uint8_t* rx, uint16_t len) {
13 board_spi_device_t device = *(const board_spi_device_t*)ctx;
14 uint32_t deadline = board_now_ms() + BOARD_DEVBUS_FRAME_MS;
15 return board_spi_transfer(device, tx, rx, len, deadline) == BOARD_SPI_OK
16 ? DEV_OK
18}
19
20static void delay_ms(void* ctx, uint32_t ms) {
21 (void)ctx;
22 /* osDelay(n) waits until the n-th tick boundary, which can be up to one
23 * tick (1 ms) short; one extra tick guarantees at least ms. */
24 osDelay(ms + 1U);
25}
26
28 dev_bus_t bus = {xfer, delay_ms, &devices[device]};
29 return bus;
30}
uint32_t board_now_ms(void)
Definition board.c:24
static void delay_ms(void *ctx, uint32_t ms)
static int xfer(void *ctx, const uint8_t *tx, uint8_t *rx, uint16_t len)
static board_spi_device_t devices[BOARD_SPI_COUNT]
Definition board_devbus.c:7
dev_bus_t board_devbus(board_spi_device_t device)
#define BOARD_DEVBUS_FRAME_MS
board_spi_status_t board_spi_transfer(board_spi_device_t device, const uint8_t *tx, uint8_t *rx, uint16_t len, uint32_t deadline_ms)
Definition board_spi.c:178
board_spi_device_t
Definition board_spi.h:26
@ BOARD_SPI_COUNT
Definition board_spi.h:33
@ BOARD_SPI_ETH
Definition board_spi.h:30
@ BOARD_SPI_NAND
Definition board_spi.h:32
@ BOARD_SPI_BARO
Definition board_spi.h:29
@ BOARD_SPI_IMU
Definition board_spi.h:27
@ BOARD_SPI_HIGH_G
Definition board_spi.h:28
@ BOARD_SPI_RADIO
Definition board_spi.h:31
@ BOARD_SPI_OK
Definition board_spi.h:37
osStatus_t osDelay(uint32_t ticks)
Wait for Timeout (Time Delay).
Definition cmsis_os2.c:1094
@ DEV_OK
Definition dev_bus.h:17
@ DEV_ERR_BUS
Definition dev_bus.h:18