diff --git a/src/debug/spatz.cpp b/src/debug/spatz.cpp index 2f22c0b..a665b3d 100644 --- a/src/debug/spatz.cpp +++ b/src/debug/spatz.cpp @@ -6,6 +6,10 @@ # error "The ID used to communicate SPATZ initialization was not defined." #endif // STA_INIT_SPATZ_ID +#include +#include +#include + namespace sta { namespace spatz @@ -30,26 +34,41 @@ namespace sta { sta::lock_guard lock(*mutex_); - Debug->println("%d", id); - Debug->read(buffer, length); + Debug->printf("%d", id); + Debug->read(buffer, length); } void request(uint8_t id, float * buffer, size_t length) { - sta::lock_guard lock(*mutex_); + mutex_->acquire(); - // Debug->println(id, IntegerBase::DEC); + bool success = false; - Debug->printf("%d", id); - Debug->read(buffer, length); + while (!success) + { + Debug->printf("%d", id); + + HAL_StatusTypeDef state = HAL_UART_Receive(&huart1, reinterpret_cast(buffer), length * sizeof(float), 100); + + if (state == HAL_TIMEOUT) + { + success = false; + Debug->println(">ERROR"); + break; + } + + success = true; + } + + mutex_->release(); } void request(uint8_t id, double * buffer, size_t length) { sta::lock_guard lock(*mutex_); - Debug->println("%d", id); - Debug->read(buffer, length); + Debug->printf("%d", id); + Debug->read(buffer, length); } } // namespace spatz } // namespace sta diff --git a/src/devices/stm32/bus/uart.cpp b/src/devices/stm32/bus/uart.cpp index 300f49f..d8eb3e6 100644 --- a/src/devices/stm32/bus/uart.cpp +++ b/src/devices/stm32/bus/uart.cpp @@ -33,7 +33,7 @@ namespace sta { STA_ASSERT(buffer != nullptr); - HAL_UART_Receive(handle_, buffer, size, HAL_MAX_DELAY); + HAL_UART_Receive(handle_, buffer, size, 1); } void STM32UART::fill(uint8_t value, size_t count)