Updated spatz implementation

This commit is contained in:
dario 2024-06-29 17:30:11 +02:00 committed by dario
parent fe3e5d38e4
commit 27407f36bb
3 changed files with 48 additions and 18 deletions

View File

@ -201,15 +201,6 @@ namespace sta
* @param length Buffer length * @param length Buffer length
*/ */
void read(double * buffer, size_t length); void read(double * buffer, size_t length);
public:
virtual void request(uint8_t * txBuffer, size_t txLength, uint8_t * rxBuffer, size_t rxLength) = 0;
void request(uint8_t * txBuffer, size_t txLength, float * rxBuffer, size_t rxLength);
void request(uint8_t * txBuffer, size_t txLength, double * rxBuffer, size_t rxLenght);
private: private:
/** /**
* @brief Print unsigned integer in selected base. * @brief Print unsigned integer in selected base.

View File

@ -1,6 +1,8 @@
#ifndef STA_CORE_SPATZ_HPP #ifndef STA_CORE_SPATZ_HPP
#define STA_CORE_SPATZ_HPP #define STA_CORE_SPATZ_HPP
#include <sta/mutex.hpp>
#include <sta/config.hpp> #include <sta/config.hpp>
#ifdef STA_SPATZ_ENABLED #ifdef STA_SPATZ_ENABLED
@ -9,8 +11,6 @@
# error "Cannot use SPATZ without debugging being enabled." # error "Cannot use SPATZ without debugging being enabled."
#endif // STA_DEBUGGING_ENABLED #endif // STA_DEBUGGING_ENABLED
#include <sta/mutex.hpp>
namespace sta namespace sta
{ {
namespace spatz namespace spatz
@ -51,6 +51,16 @@ namespace sta
} // namespace spatz } // namespace spatz
} // namespace sta } // namespace sta
#else
namespace sta
{
namespace spatz
{
void init(Mutex * mutex);
} // namespace spatz
} // namespace sta
#endif // STA_SPATZ_ENABLED #endif // STA_SPATZ_ENABLED
#endif // STA_CORE_SPATZ_HPP #endif // STA_CORE_SPATZ_HPP

View File

@ -2,6 +2,10 @@
#ifdef STA_SPATZ_ENABLED #ifdef STA_SPATZ_ENABLED
#ifndef STA_INIT_SPATZ_ID
# error "The ID used to communicate SPATZ initialization was not defined."
#endif // STA_INIT_SPATZ_ID
namespace sta namespace sta
{ {
namespace spatz namespace spatz
@ -11,32 +15,57 @@ namespace sta
void init(sta::Mutex * mutex) void init(sta::Mutex * mutex)
{ {
mutex_ = mutex; mutex_ = mutex;
uint8_t msg = 0xFF;
sta::lock_guard<sta::Mutex> lock(*mutex_);
// Wait until SPATZ sends the init byte.
while (msg != STA_INIT_SPATZ_ID)
{
Debug->read(&msg, 1);
}
} }
void request(uint8_t id, uint8_t * buffer, size_t length) void request(uint8_t id, uint8_t * buffer, size_t length)
{ {
sta::lock_guard lock(*mutex_); sta::lock_guard<sta::Mutex> lock(*mutex_);
Debug->println(id); Debug->println("%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 lock(*mutex_); sta::lock_guard<sta::Mutex> lock(*mutex_);
Debug->println(id); // Debug->println(id, IntegerBase::DEC);
Debug->printf("%d", id);
Debug->read(buffer, length); Debug->read(buffer, length);
} }
void request(uint8_t id, double * buffer, size_t length) void request(uint8_t id, double * buffer, size_t length)
{ {
sta::lock_guard lock(*mutex_); sta::lock_guard<sta::Mutex> lock(*mutex_);
Debug->println(id); Debug->println("%d", id);
Debug->read(buffer, length); Debug->read(buffer, length);
} }
} // namespace spatz } // namespace spatz
} // namespace sta } // namespace sta
#endif // STA_SPATZ_ENABLED #else
namespace sta
{
namespace spatz
{
void init(sta::Mutex * mutex)
{
// Nothing to do here.
}
} // namespace spatz
} // namespace sta
#endif // STA_SPATZ_ENABLED