17 SPI(SPI_HandleTypeDef *hspi) : hspi_{hspi} {}
21 bool transmit(
const uint8_t *data,
size_t size, uint32_t timeout) {
22 std::lock_guard lock{mtx_};
23 if (HAL_SPI_Transmit_IT(hspi_, data, size) != HAL_OK) {
27 while (hspi_->State != HAL_SPI_STATE_READY) {
29 if (elapsed >= timeout) {
37 bool receive(uint8_t *data,
size_t size, uint32_t timeout) {
38 std::lock_guard lock{mtx_};
39 if (HAL_SPI_Receive_IT(hspi_, data, size) != HAL_OK) {
43 while (hspi_->State != HAL_SPI_STATE_READY) {
45 if (elapsed >= timeout) {
55 std::lock_guard lock{mtx_};
56 if (HAL_SPI_TransmitReceive_IT(hspi_, tx_data, rx_data, size) != HAL_OK) {
60 while (hspi_->State != HAL_SPI_STATE_READY) {
62 if (elapsed >= timeout) {
73 SPI_HandleTypeDef *hspi_;
static uint32_t get_ticks()
Definition kernel.hpp:14
static void delay(uint32_t ticks)
Definition thread.hpp:32
bool receive(uint8_t *data, size_t size, uint32_t timeout)
Definition spi.hpp:37
~SPI()
Definition spi.hpp:19
bool transmit_receive(const uint8_t *tx_data, uint8_t *rx_data, size_t size, uint32_t timeout)
Definition spi.hpp:53
SPI(SPI_HandleTypeDef *hspi)
Definition spi.hpp:17
bool transmit(const uint8_t *data, size_t size, uint32_t timeout)
Definition spi.hpp:21
SPI_HandleTypeDef * get_hal_handle()
Definition spi.hpp:70
#define TUTRCOS_VERIFY(expr)
Definition utility.hpp:16