mirror of
https://git.intern.spaceteamaachen.de/ALPAKA/sta-core.git
synced 2025-06-10 16:55:58 +00:00
Some fixes for UART receiving with interrupts for SPATZ
This commit is contained in:
parent
fc5d676624
commit
1ad0d0120a
@ -3,6 +3,7 @@
|
||||
|
||||
#include <sta/mutex.hpp>
|
||||
#include <sta/signal.hpp>
|
||||
#include <sta/event.hpp>
|
||||
|
||||
#include <sta/config.hpp>
|
||||
#ifdef STA_SPATZ_ENABLED
|
||||
@ -21,7 +22,7 @@ namespace sta
|
||||
*
|
||||
* @param mutex A mutex used to make SPATZ thread-safe.
|
||||
*/
|
||||
void init(Mutex * mutex, Signal * signal);
|
||||
void init(Mutex * mutex, Event * signal);
|
||||
|
||||
/**
|
||||
* @brief Request bytes for a specific sensor id via the printable.
|
||||
@ -49,6 +50,8 @@ namespace sta
|
||||
* @param length The number of doubles to request.
|
||||
*/
|
||||
void request(uint8_t id, double * buffer, size_t length);
|
||||
|
||||
void notify(uint8_t id);
|
||||
} // namespace spatz
|
||||
} // namespace sta
|
||||
|
||||
|
@ -40,7 +40,7 @@ namespace sta
|
||||
* @param flags flag nr. to wait for.
|
||||
* @param timeout timeout in ms., default to forever.
|
||||
*/
|
||||
virtual uint32_t wait(uint32_t flags, uint32_t timeout = osWaitForever) = 0;
|
||||
virtual uint32_t wait(uint32_t flags, uint32_t timeout = 0xFFFFFFFF) = 0;
|
||||
};
|
||||
} // namespace sta
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user