47 UartRx(UART_HandleTypeDef *huart,
size_t buf_size)
48 : huart_{huart}, queue_{buf_size} {
49 hal::set_uart_context(huart_,
this);
50 HAL_UART_RegisterCallback(
51 huart_, HAL_UART_RX_COMPLETE_CB_ID, [](UART_HandleTypeDef *huart) {
52 auto uart =
reinterpret_cast<UartRx *
>(hal::get_uart_context(huart));
53 uart->queue_.push(uart->buf_, 0);
54 HAL_UART_Receive_IT(huart, &uart->buf_, 1);
56 HAL_UART_RegisterCallback(
57 huart_, HAL_UART_ERROR_CB_ID,
58 [](UART_HandleTypeDef *huart) { HAL_UART_Abort_IT(huart); });
59 HAL_UART_RegisterCallback(
60 huart_, HAL_UART_ABORT_COMPLETE_CB_ID, [](UART_HandleTypeDef *huart) {
61 auto uart =
reinterpret_cast<UartRx *
>(hal::get_uart_context(huart));
62 HAL_UART_Receive_IT(huart, &uart->buf_, 1);
64 HAL_UART_Receive_IT(huart, &buf_, 1);
68 HAL_UART_Abort_IT(huart_);
69 HAL_UART_UnRegisterCallback(huart_, HAL_UART_RX_COMPLETE_CB_ID);
70 HAL_UART_UnRegisterCallback(huart_, HAL_UART_ERROR_CB_ID);
71 HAL_UART_UnRegisterCallback(huart_, HAL_UART_ABORT_COMPLETE_CB_ID);
72 hal::set_uart_context(huart_,
nullptr);