diff --git a/include/kiss_processor.h b/include/kiss_processor.h index 6290d8f..c1c3f9f 100644 --- a/include/kiss_processor.h +++ b/include/kiss_processor.h @@ -4,6 +4,7 @@ #include #include #include +#include #define CIRCULAR_BUFFER_INT_SAFE #include @@ -13,6 +14,7 @@ namespace Kiss { class Processor { protected: + // Enum to represent special KISS markers enum Marker { Fend = 0xc0, Fesc = 0xdb, @@ -20,6 +22,7 @@ protected: Tfesc = 0xdd }; + // Enum to represent the state of the processor enum State { GetStart = 0, GetEnd, @@ -30,6 +33,7 @@ protected: Escape }; + // Enum to represent KISS commands enum Cmd { Data = 0x00, TxDelay = 0x01, @@ -43,6 +47,7 @@ protected: NoCmd = 0x80 }; + // Enum to represent the type of data being processed enum DataType { Raw = 0, Control, @@ -50,57 +55,69 @@ protected: None = 0x80 }; - static const int CfgToSerialDelayMs = 10; - static const int CfgSerialToRigQueueSize = 4096; - static const int CfgRigToSerialQueueSize = 4096; + // Compile-time constants for configuration + static constexpr int CfgToSerialDelayMs = 10; + static constexpr int CfgSerialToRigQueueSize = 4096; + static constexpr int CfgRigToSerialQueueSize = 4096; public: Processor(); - + virtual ~Processor() = default; // Add virtual destructor + + // Sends data from rig to serial with a specific command void sendRigToSerial(Cmd cmd, const byte *packet, int packetLength); + + // Queues data for transmission from rig to serial void queueRigToSerial(Cmd cmd, const byte *packet, int packetLength); + + // Queues data for transmission from serial to rig void queueSerialToRig(Cmd cmd, const byte *packet, int packetLength); + // Processes queued data for transmission from rig to serial bool processRigToSerial(); + + // Processes queued data for transmission from serial to rig bool processSerialToRig(); protected: + // Virtual methods to be implemented by derived classes virtual bool onRigTxBegin() = 0; virtual void onRigTx(byte b) = 0; virtual void onRigTxEnd() = 0; virtual void onRigPacket(void *packet, int packetLength) = 0; - virtual void onSerialTx(byte b) = 0; virtual bool onSerialRxHasData() = 0; virtual bool onSerialRx(byte *b) = 0; - virtual void onControlCommand(Cmd cmd, byte value) = 0; virtual void onRadioControlCommand(const std::vector &command) = 0; virtual void onRebootCommand() = 0; private: + // Processes a received byte bool receiveByte(byte rxByte); bool receiveByteRaw(byte rxByte); bool receiveByteKiss(byte rxByte); + // Processes data and commands void processData(byte rxByte); bool processCommand(byte rxByte); protected: - bool disableKiss_; - bool usePrefix3_; + bool disableKiss_; // Flag to disable KISS mode + bool usePrefix3_; // Flag to use a 3-byte prefix private: - bool isRawIdle_; - State state_; - DataType dataType_; - std::vector cmdBuffer_; + bool isRawIdle_; // Indicates if raw mode is idle + State state_; // Current state of the processor + DataType dataType_;// Current data type being processed + std::vector cmdBuffer_; // Buffer for commands + // Circular buffers for data queues CircularBuffer serialToRigQueue_; CircularBuffer rigToSerialQueue_; CircularBuffer rigToSerialQueueIndex_; }; - + } // Kiss #endif // KISS_PROCESSOR_H diff --git a/include/loraprs_service.h b/include/loraprs_service.h index 292d901..d87fcef 100644 --- a/include/loraprs_service.h +++ b/include/loraprs_service.h @@ -135,7 +135,7 @@ private: } __attribute__((packed)); private: - const String CfgLoraprsVersion = "LoRAPRS 1.0.15"; + const String CfgLoraprsVersion = "LoRAPRS 1.0.16"; // processor config const int CfgConnRetryMs = 500; // connection retry delay, e.g. wifi