error message transmission now happens via uarthandler

This commit is contained in:
Leonetienne
2025-12-15 20:22:28 +01:00
parent ace1b9ef66
commit f1e45d886e
3 changed files with 40 additions and 11 deletions
+4 -2
View File
@@ -1,4 +1,5 @@
#include "StateMachine.hpp" #include "StateMachine.hpp"
#include "UartHandler.hpp"
constexpr uint8_t ERROR_INDICATOR_LED_PIN = 3; constexpr uint8_t ERROR_INDICATOR_LED_PIN = 3;
@@ -90,7 +91,8 @@ bool StateMachine::raiseError(const String &reason) noexcept
state = STATE::ERROR; state = STATE::ERROR;
lastError = reason; lastError = reason;
digitalWrite(ERROR_INDICATOR_LED_PIN, HIGH); digitalWrite(ERROR_INDICATOR_LED_PIN, HIGH);
if (Serial) { UartHandler& uart = UartHandler::getInstance();
Serial.println(String("Error!: ") + reason); if (uart.isOpen()) {
uart.send(String("Error!: ") + reason);
} }
} }
+29 -5
View File
@@ -14,7 +14,7 @@ UartHandler::~UartHandler()
} }
} }
UartHandler &UartHandler::getInstance() UartHandler &UartHandler::getInstance() noexcept
{ {
static UartHandler instance; static UartHandler instance;
return instance; return instance;
@@ -46,8 +46,13 @@ bool UartHandler::isOpen() const noexcept
return (bool)Serial; return (bool)Serial;
} }
void UartHandler::poll() void UartHandler::poll() noexcept
{ {
if (!isOpen()) {
StateMachine::getInstance().raiseError("Serial closed!");
return;
}
size_t bytesAvail = Serial.available(); size_t bytesAvail = Serial.available();
if (bytesAvail) { if (bytesAvail) {
// Consume at max one byte at a time to give consumers a chance to consume packets // Consume at max one byte at a time to give consumers a chance to consume packets
@@ -67,7 +72,7 @@ void UartHandler::poll()
} }
} }
void UartHandler::pushPacket() void UartHandler::pushPacket() noexcept
{ {
memset(packetRingBuf + packetRingBufWritePos * PACKET_SIZE, 0x00, PACKET_SIZE); memset(packetRingBuf + packetRingBufWritePos * PACKET_SIZE, 0x00, PACKET_SIZE);
memcpy(packetRingBuf + packetRingBufWritePos * PACKET_SIZE, inBuf, inBufPos); memcpy(packetRingBuf + packetRingBufWritePos * PACKET_SIZE, inBuf, inBufPos);
@@ -80,7 +85,7 @@ void UartHandler::pushPacket()
} }
} }
bool UartHandler::getNextPacket(char* dest) bool UartHandler::getNextPacket(char* dest) noexcept
{ {
if (!numPacketsAvailable) { if (!numPacketsAvailable) {
return false; return false;
@@ -92,8 +97,27 @@ bool UartHandler::getNextPacket(char* dest)
return true; return true;
} }
size_t UartHandler::send(const char *buf, size_t nbytes)
{
if (!isOpen()) {
StateMachine::getInstance().raiseError("Serial closed!");
return;
}
uint8_t UartHandler::getNumAvailablePackets() const return Serial.write(buf, nbytes);
}
size_t UartHandler::send(const String& str)
{
if (!isOpen()) {
StateMachine::getInstance().raiseError("Serial closed!");
return;
}
return Serial.write(str.c_str(), str.length());
}
uint8_t UartHandler::getNumAvailablePackets() const noexcept
{ {
return numPacketsAvailable; return numPacketsAvailable;
} }
+7 -4
View File
@@ -7,7 +7,7 @@
class UartHandler class UartHandler
{ {
public: public:
static UartHandler& getInstance(); static UartHandler& getInstance() noexcept;
// Will attempt to initialize the serial port, returns status. // Will attempt to initialize the serial port, returns status.
// May block up to 1000ms. // May block up to 1000ms.
@@ -15,14 +15,17 @@ class UartHandler
void close(); void close();
void poll(); void poll() noexcept;
// Will write the next available whole line into char* (provide at least 16 bytes!) // Will write the next available whole line into char* (provide at least 16 bytes!)
// Returns whether any data was written. // Returns whether any data was written.
// If data available is longer than 16 bytes, an error will be raised. // If data available is longer than 16 bytes, an error will be raised.
bool getNextPacket(char* dest); bool getNextPacket(char* dest) noexcept;
size_t send(const char* buf, size_t nbytes);
size_t send(const String& str);
// Returns how many packets are ready for reading // Returns how many packets are ready for reading
uint8_t getNumAvailablePackets() const; uint8_t getNumAvailablePackets() const noexcept;
bool isOpen() const noexcept; bool isOpen() const noexcept;