KissTncAX25/Arduino/hdlcTnc.h
2022-08-24 07:32:07 +02:00

54 lines
1.3 KiB
C++

#ifndef HDLC_TNC_H
#define HDLC_TNC_H
#include "hdlcAfskRx.h"
#include "hdlcAfskTx.h"
#include "afskSampler.h"
#define DEFAULT_PERSISTENCE 63
#define DEFAULT_SLOT_TIME 100
#define RANDOM_VAL_LIMIT 256
#define HS_IDLE 0
#define HS_WAIT_FOR_FREE_CHANNEL 1
#define HS_RANDOM_WAIT 2
#define HS_TX_FRAME 3
class HdlcTnc {
public:
HdlcTnc(
int rxIndicationPin, int txIndicationPin, int rxOnlyPin, int pttPin,
int lowLevelSelectPin, int rxBufferSize, int txBufferSize
);
void hdlcTask();
void addByteToTxBuf(byte newByte);
void addFrameEndToTxBuf();
void resetTxFrame();
boolean getRxByte(byte* rxByte, boolean* frameEnd);
void setTxDelay(int val);
void setPersistence(byte val);
void setSlotTime(int val);
void setFullDuplex(boolean val);
void setLoopbackTest(boolean On);
private:
HdlcCrcTable* _crcTable;
HdlcFrameBuffer* _rxBuffer;
HdlcFrameBuffer* _txBuffer;
HdlcAfskRx* _afskRx;
HdlcAfskTx* _afskTx;
AfskSampler* _afskSampler;
int _rxIndicationPin = 0;
int _txIndicationPin = 0;
int _pttPin = 0;
int _rxOnlyPin = 0;
byte _persistence = DEFAULT_PERSISTENCE;
int _slotTime = DEFAULT_SLOT_TIME;
boolean _fullDuplex = false;
int _hdlcState = HS_IDLE;
unsigned long _randomWaitTimeOutTime = 0;
void setPtt(boolean on);
};
#endif