58 for (
int i = 0; i < 4; ++i) {
79 return (uint8_t)(cpol | cpha);
91 return kernel >> (code + 1U);
95 uint32_t deadline_ms) {
116 uint32_t deadline_ms) {
129 uint8_t* rx, uint16_t len,
130 uint32_t deadline_ms) {
131 static uint8_t ones[16];
132 static uint8_t
sink[16];
133 memset(ones, 0xFF,
sizeof(ones));
136 const uint8_t* out = tx;
139 n =
n >
sizeof(ones) ? (uint16_t)
sizeof(ones) :
n;
154 len = (uint16_t)(len -
n);
164 uint8_t* rx, uint16_t len,
165 uint32_t deadline_ms) {
173 st =
shift(
r, tx, rx, len, deadline_ms);
179 const uint8_t* tx, uint8_t* rx,
180 uint16_t len, uint32_t deadline_ms) {
202 uint8_t* rx, uint16_t len,
203 uint32_t deadline_ms) {
207 return shift(
r, tx, rx, len, deadline_ms);
211 uint16_t len, uint32_t deadline_ms) {
244 void* context, uint16_t device_id, uint8_t mode, uint32_t max_hz,
266 frames[i].length, deadline);
#define RADIO_BUSY_GPIO_Port
#define ACCEL_CS_GPIO_Port
#define BARO_CS_GPIO_Port
#define NAND_CS_GPIO_Port
#define RADIO_CS_GPIO_Port
uint32_t board_now_ms(void)
static bool board_deadline_passed(uint32_t deadline_ms)
static uint32_t board_ms_left(uint32_t deadline_ms)
board_spi_status_t board_spi_idle_clocks(board_spi_device_t device, uint16_t len, uint32_t deadline_ms)
self_test_reply_t board_spi_self_test_exchange(void *context, uint16_t device_id, uint8_t mode, uint32_t max_hz, self_test_spi_frame_t *frames, uint8_t count, uint32_t budget_ms)
static board_spi_device_t from_self_test(uint16_t device_id)
static osMutexId_t bus_locks[4]
bool board_spi_init(void)
static int bus_index(const SPI_HandleTypeDef *spi)
board_spi_status_t board_spi_frame(board_spi_device_t device, const uint8_t *tx, uint8_t *rx, uint16_t len, uint32_t deadline_ms)
void board_spi_deselect(board_spi_device_t device)
board_spi_status_t board_spi_lock(board_spi_device_t device, uint32_t deadline_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)
void board_spi_unlock(board_spi_device_t device)
bool board_spi_routed(board_spi_device_t device)
static const board_spi_route_t * route(board_spi_device_t device)
board_spi_status_t board_spi_shift(board_spi_device_t device, const uint8_t *tx, uint8_t *rx, uint16_t len, uint32_t deadline_ms)
static board_spi_status_t wait_busy_low(const board_spi_route_t *r, uint32_t deadline_ms)
uint32_t board_spi_clock_hz(board_spi_device_t device)
uint8_t board_spi_mode(board_spi_device_t device)
static board_spi_status_t shift(const board_spi_route_t *r, const uint8_t *tx, uint8_t *rx, uint16_t len, uint32_t deadline_ms)
void board_spi_select(board_spi_device_t device)
static self_test_reply_t st_reply(self_test_result_t result, int32_t diag)
@ BOARD_SPI_NOT_CONFIGURED
#define osMutexPrioInherit
Priority inherit protocol.
@ osOK
Operation completed successfully.
osMutexId_t osMutexNew(const osMutexAttr_t *attr)
Create and Initialize a Mutex object.
osStatus_t osMutexAcquire(osMutexId_t mutex_id, uint32_t timeout)
Acquire a Mutex or timeout if it is locked.
osStatus_t osMutexRelease(osMutexId_t mutex_id)
Release a Mutex that was acquired by osMutexAcquire.
static void sink(void *ctx, uint8_t type, const void *data, uint8_t len)
GPIO_PinState HAL_GPIO_ReadPin(const GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin)
void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState)
#define SPI_CFG1_MBR
Master baud rate.
uint32_t HAL_RCCEx_GetPeriphCLKFreq(uint64_t PeriphClk)
#define RCC_PERIPHCLK_SPI45
#define RCC_PERIPHCLK_SPI123
#define SPI_POLARITY_HIGH
HAL_StatusTypeDef HAL_SPI_TransmitReceive(SPI_HandleTypeDef *hspi, const uint8_t *pTxData, uint8_t *pRxData, uint16_t Size, uint32_t Timeout)
struct __SPI_HandleTypeDef SPI_HandleTypeDef
SPI handle Structure definition.
size_type count(const key_type &key) const
*brief user defined string literal for JSON values *sa std::size_t n
@ SELF_TEST_DEVICE_ETHERNET
@ SELF_TEST_DEVICE_HIGH_G
@ SELF_TEST_DEVICE_BAROMETER
@ SELF_TEST_NOT_CONFIGURED
HAL_StatusTypeDef
HAL Status structures definition.
Attributes structure for mutex.