diff --git a/.gitignore b/.gitignore index 4b5a695..3adcee3 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,9 @@ Debug/ Release/ +!include/sta/debug/ +!src/debug/ + # Doxygen docs/html docs/latex diff --git a/include/sta/debug/printing/printable.hpp b/include/sta/debug/printing/printable.hpp index d25148b..c913bff 100644 --- a/include/sta/debug/printing/printable.hpp +++ b/include/sta/debug/printing/printable.hpp @@ -201,6 +201,14 @@ namespace sta * @param length Buffer 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: /** diff --git a/include/sta/debug/profile.hpp b/include/sta/debug/profile.hpp index f256ac5..50100c5 100644 --- a/include/sta/debug/profile.hpp +++ b/include/sta/debug/profile.hpp @@ -5,8 +5,8 @@ * Author: Dario */ -#ifndef STA_DEBUGGING_PROFILING_HPP -#define STA_DEBUGGING_PROFILING_HPP +#ifndef STA_CORE_PROFILE_HPP +#define STA_CORE_PROFILE_HPP #include @@ -44,4 +44,4 @@ namespace sta #endif // // STA_PROFILING_ENABLED -#endif // STA_DEBUGGING_PROFILING_HPP +#endif // STA_CORE_PROFILE_HPP diff --git a/include/sta/debug/spatz.hpp b/include/sta/debug/spatz.hpp new file mode 100644 index 0000000..5f6f54f --- /dev/null +++ b/include/sta/debug/spatz.hpp @@ -0,0 +1,56 @@ +#ifndef STA_CORE_SPATZ_HPP +#define STA_CORE_SPATZ_HPP + +#include +#ifdef STA_SPATZ_ENABLED + +#include +#ifndef STA_DEBUGGING_ENABLED +# error "Cannot use SPATZ without debugging being enabled." +#endif // STA_DEBUGGING_ENABLED + +#include + +namespace sta +{ + namespace spatz + { + /** + * @brief Initialize SPATZ for in-the-loop testing. + * + * @param mutex A mutex used to make SPATZ thread-safe. + */ + void init(Mutex * mutex); + + /** + * @brief Request bytes for a specific sensor id via the printable. + * + * @param id The id of the sensor to request data for. + * @param buffer The byte buffer to write the data to. + * @param length The number of the bytes to request. + */ + void request(uint8_t id, uint8_t * buffer, size_t length); + + /** + * @brief Request floats for a specific sensor id via the printable. + * + * @param id The id of the sensor to request data for. + * @param buffer The float buffer to write the data to. + * @param length The number of floats to request. + */ + void request(uint8_t id, float * buffer, size_t length); + + /** + * @brief Request doubles for a specific sensor id via the printable. + * + * @param id The id of the sensor to request data for. + * @param buffer The double buffer to write the data to. + * @param length The number of doubles to request. + */ + void request(uint8_t id, double * buffer, size_t length); + } // namespace spatz +} // namespace sta + +#endif // STA_SPATZ_ENABLED + +#endif // STA_CORE_SPATZ_HPP diff --git a/src/debug/spatz.cpp b/src/debug/spatz.cpp new file mode 100644 index 0000000..0e3082a --- /dev/null +++ b/src/debug/spatz.cpp @@ -0,0 +1,42 @@ +#include + +#ifdef STA_SPATZ_ENABLED + +namespace sta +{ + namespace spatz + { + sta::Mutex * mutex_; + + void init(sta::Mutex * mutex) + { + mutex_ = mutex; + } + + void request(uint8_t id, uint8_t * buffer, size_t length) + { + sta::lock_guard lock(*mutex_); + + Debug->println(id); + Debug->read(buffer, length); + } + + void request(uint8_t id, float * buffer, size_t length) + { + sta::lock_guard lock(*mutex_); + + Debug->println(id); + Debug->read(buffer, length); + } + + void request(uint8_t id, double * buffer, size_t length) + { + sta::lock_guard lock(*mutex_); + + Debug->println(id); + Debug->read(buffer, length); + } + } // namespace spatz +} // namespace sta + +#endif // STA_SPATZ_ENABLED \ No newline at end of file