kopia lustrzana https://github.com/sh123/esp32_loraprs
89 wiersze
1.5 KiB
C++
89 wiersze
1.5 KiB
C++
#ifndef KISS_PROCESSOR_H
|
|
#define KISS_PROCESSOR_H
|
|
|
|
#include <Arduino.h>
|
|
#include <cppQueue.h>
|
|
#include <memory>
|
|
|
|
namespace Kiss {
|
|
|
|
class Processor {
|
|
|
|
public:
|
|
Processor();
|
|
|
|
void serialSend(const byte *b, int dataLength);
|
|
void serialProcessRx();
|
|
|
|
protected:
|
|
enum Marker {
|
|
Fend = 0xc0,
|
|
Fesc = 0xdb,
|
|
Tfend = 0xdc,
|
|
Tfesc = 0xdd
|
|
};
|
|
|
|
enum State {
|
|
Void = 0,
|
|
GetCmd,
|
|
GetData,
|
|
GetP,
|
|
GetSlotTime,
|
|
Escape
|
|
};
|
|
|
|
enum Cmd {
|
|
|
|
// generic
|
|
Data = 0x00,
|
|
P = 0x02,
|
|
SlotTime = 0x03,
|
|
|
|
// extended to modem
|
|
Frequency = 0x10,
|
|
Bandwidth = 0x11,
|
|
Power = 0x12,
|
|
SyncWord = 0x13,
|
|
SpreadingFactor = 0x14,
|
|
CodingRate = 0x15,
|
|
EnableCrc = 0x16,
|
|
|
|
// extended events from modem
|
|
SignalLevel = 0x30,
|
|
|
|
// end of cmds
|
|
NoCmd = 0x80
|
|
};
|
|
|
|
const int CfgTxQueueSize = 4096;
|
|
|
|
protected:
|
|
virtual bool onRigTxBegin() = 0;
|
|
virtual void onRigTx(byte b) = 0;
|
|
virtual void onRigTxEnd() = 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 onControlCommand(Cmd cmd, int value) = 0;
|
|
virtual void onControlCommand(Cmd cmd, long value) = 0;
|
|
*/
|
|
|
|
private:
|
|
bool receiveByte(unsigned char rxByte);
|
|
bool processCommand(unsigned char rxByte);
|
|
void resetState();
|
|
|
|
private:
|
|
Cmd cmd_;
|
|
State state_;
|
|
std::shared_ptr<cppQueue> txQueue_;
|
|
};
|
|
|
|
} // Kiss
|
|
|
|
#endif // KISS_PROCESSOR_H
|