mirror of
https://git.intern.spaceteamaachen.de/ALPAKA/sta-core.git
synced 2025-06-12 01:25:59 +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/mutex.hpp>
|
||||||
#include <sta/signal.hpp>
|
#include <sta/signal.hpp>
|
||||||
|
#include <sta/event.hpp>
|
||||||
|
|
||||||
#include <sta/config.hpp>
|
#include <sta/config.hpp>
|
||||||
#ifdef STA_SPATZ_ENABLED
|
#ifdef STA_SPATZ_ENABLED
|
||||||
@ -21,7 +22,7 @@ namespace sta
|
|||||||
*
|
*
|
||||||
* @param mutex A mutex used to make SPATZ thread-safe.
|
* @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.
|
* @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.
|
* @param length The number of doubles to request.
|
||||||
*/
|
*/
|
||||||
void request(uint8_t id, double * buffer, size_t length);
|
void request(uint8_t id, double * buffer, size_t length);
|
||||||
|
|
||||||
|
void notify(uint8_t id);
|
||||||
} // namespace spatz
|
} // namespace spatz
|
||||||
} // namespace sta
|
} // namespace sta
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ namespace sta
|
|||||||
* @param flags flag nr. to wait for.
|
* @param flags flag nr. to wait for.
|
||||||
* @param timeout timeout in ms., default to forever.
|
* @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
|
} // namespace sta
|
||||||
|
|
||||||
|
@ -12,18 +12,16 @@ namespace sta
|
|||||||
{
|
{
|
||||||
namespace spatz
|
namespace spatz
|
||||||
{
|
{
|
||||||
sta::Mutex * mutex_ = nullptr;
|
Mutex * mutex_ = nullptr;
|
||||||
sta::Signal * signal_ = nullptr;
|
Event * signal_ = nullptr;
|
||||||
|
|
||||||
void init(sta::Mutex * mutex, Signal * signal)
|
void init(sta::Mutex * mutex, Event * signal)
|
||||||
{
|
{
|
||||||
mutex_ = mutex;
|
mutex_ = mutex;
|
||||||
signal_ = signal;
|
signal_ = signal;
|
||||||
|
|
||||||
uint8_t msg = 0xFF;
|
uint8_t msg = 0xFF;
|
||||||
|
|
||||||
sta::lock_guard<sta::Mutex> lock(*mutex_);
|
|
||||||
|
|
||||||
// Wait until SPATZ sends the init byte.
|
// Wait until SPATZ sends the init byte.
|
||||||
while (msg != STA_INIT_SPATZ_ID)
|
while (msg != STA_INIT_SPATZ_ID)
|
||||||
{
|
{
|
||||||
@ -41,13 +39,11 @@ namespace sta
|
|||||||
|
|
||||||
void request(uint8_t id, float * buffer, size_t length)
|
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));
|
HAL_UART_Receive_IT(&huart1, reinterpret_cast<uint8_t*>(buffer), length * sizeof(float));
|
||||||
Debug->printf("%d", id);
|
Debug->printf("%d", id);
|
||||||
signal_->wait();
|
signal_->wait(0x01);
|
||||||
|
|
||||||
mutex_->release();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void request(uint8_t id, double * buffer, size_t length)
|
void request(uint8_t id, double * buffer, size_t length)
|
||||||
@ -57,6 +53,11 @@ namespace sta
|
|||||||
Debug->printf("%d", id);
|
Debug->printf("%d", id);
|
||||||
Debug->read(buffer, length);
|
Debug->read(buffer, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void notify(uint8_t id)
|
||||||
|
{
|
||||||
|
Debug->printf("%d", id);
|
||||||
|
}
|
||||||
} // namespace spatz
|
} // namespace spatz
|
||||||
} // namespace sta
|
} // namespace sta
|
||||||
|
|
||||||
@ -64,7 +65,11 @@ namespace sta
|
|||||||
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
|
||||||
{
|
{
|
||||||
if (sta::spatz::signal_ != nullptr)
|
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