Incredibly ugly workaround

This commit is contained in:
dario 2024-08-01 15:06:07 +02:00
parent f0dd514bdd
commit dd20df9952
2 changed files with 28 additions and 9 deletions

View File

@ -6,6 +6,10 @@
# error "The ID used to communicate SPATZ initialization was not defined." # error "The ID used to communicate SPATZ initialization was not defined."
#endif // STA_INIT_SPATZ_ID #endif // STA_INIT_SPATZ_ID
#include <cmsis_os2.h>
#include <FreeRTOS.h>
#include <usart.h>
namespace sta namespace sta
{ {
namespace spatz namespace spatz
@ -30,26 +34,41 @@ namespace sta
{ {
sta::lock_guard<sta::Mutex> lock(*mutex_); sta::lock_guard<sta::Mutex> lock(*mutex_);
Debug->println("%d", id); Debug->printf("%d", id);
Debug->read(buffer, length); Debug->read(buffer, length);
} }
void request(uint8_t id, float * buffer, size_t length) void request(uint8_t id, float * buffer, size_t length)
{ {
sta::lock_guard<sta::Mutex> lock(*mutex_); mutex_->acquire();
// Debug->println(id, IntegerBase::DEC); bool success = false;
Debug->printf("%d", id); while (!success)
Debug->read(buffer, length); {
Debug->printf("%d", id);
HAL_StatusTypeDef state = HAL_UART_Receive(&huart1, reinterpret_cast<uint8_t*>(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) void request(uint8_t id, double * buffer, size_t length)
{ {
sta::lock_guard<sta::Mutex> lock(*mutex_); sta::lock_guard<sta::Mutex> lock(*mutex_);
Debug->println("%d", id); Debug->printf("%d", id);
Debug->read(buffer, length); Debug->read(buffer, length);
} }
} // namespace spatz } // namespace spatz
} // namespace sta } // namespace sta

View File

@ -33,7 +33,7 @@ namespace sta
{ {
STA_ASSERT(buffer != nullptr); 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) void STM32UART::fill(uint8_t value, size_t count)