/** * @file SerialMessage.h * @brief This file contains the SerialMessage class * @details This file contains the SerialMessage class which is used to parse serial messages * @version 1.0.0 * @author Quinn Henthorne. Contact: quinn.henthorne@gmail.com */ #pragma once #include #include "Message.h" template class SerialMessage : public Message{ public: /** * @brief Construct a new Serial Message object */ SerialMessage(HardwareSerial *serial); /** * @brief Initialize the SerialMessage object */ void Init(unsigned int baudRate) override; /** * @brief Prints the args array to the serial monitor */ void PrintArgs() override; protected: /** * @brief reads the serial data and stores it in the data array * @return the next character in the serial buffer */ char getChar() override; /** * @brief returns the number of bytes available in the serial buffer * @return the number of bytes available in the serial buffer */ uint32_t dataAvailable() override; private: HardwareSerial *serial{nullptr}; }; template char SerialMessage::getChar(){ return this->serial->read(); } template uint32_t SerialMessage::dataAvailable(){ return this->serial->available(); } template SerialMessage::SerialMessage(HardwareSerial *serial) : serial(serial){} template void SerialMessage::Init(uint32_t baudRate){ this->serial->begin(baudRate); } template void SerialMessage::PrintArgs(){ return; this->serial->print("Current number of args: "); this->serial->println(this->populatedArgs); for (int i = 0; i < this->populatedArgs; i++) { this->serial->print(this->args[i]); this->serial->print(" "); } this->serial->println(); }