Some fixes for UART receiving with interrupts for SPATZ

This commit is contained in:
dario
2024-08-16 21:49:45 +02:00
parent fc5d676624
commit 1ad0d0120a
3 changed files with 20 additions and 12 deletions

View File

@@ -12,18 +12,16 @@ namespace sta
{
namespace spatz
{
sta::Mutex * mutex_ = nullptr;
sta::Signal * signal_ = nullptr;
Mutex * mutex_ = nullptr;
Event * signal_ = nullptr;
void init(sta::Mutex * mutex, Signal * signal)
void init(sta::Mutex * mutex, Event * signal)
{
mutex_ = mutex;
signal_ = signal;
uint8_t msg = 0xFF;
sta::lock_guard<sta::Mutex> lock(*mutex_);
// Wait until SPATZ sends the init byte.
while (msg != STA_INIT_SPATZ_ID)
{
@@ -41,13 +39,11 @@ namespace sta
void request(uint8_t id, float * buffer, size_t length)
{
mutex_->acquire();
sta::lock_guard<sta::Mutex> lock(*mutex_);
HAL_UART_Receive_IT(&huart1, reinterpret_cast<uint8_t*>(buffer), length * sizeof(float));
Debug->printf("%d", id);
signal_->wait();
mutex_->release();
signal_->wait(0x01);
}
void request(uint8_t id, double * buffer, size_t length)
@@ -57,6 +53,11 @@ namespace sta
Debug->printf("%d", id);
Debug->read(buffer, length);
}
void notify(uint8_t id)
{
Debug->printf("%d", id);
}
} // namespace spatz
} // namespace sta
@@ -64,7 +65,11 @@ namespace sta
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
if (sta::spatz::signal_ != nullptr)
sta::spatz::signal_->notify();
{
sta::spatz::signal_->set(0x01);
sta::spatz::signal_->clear(0x01);
}
}