61 lines
1.5 KiB
C
61 lines
1.5 KiB
C
|
#ifndef HDLC_AFSK_TX_H
|
||
|
#define HDLC_AFSK_TX_H
|
||
|
|
||
|
#include "hdlcFramesBuffer.h"
|
||
|
|
||
|
#define AFSK_PIN_COUNT 4
|
||
|
#define AFSK_PIN_4 4
|
||
|
#define AFSK_PIN_5 5
|
||
|
#define AFSK_PIN_6 6
|
||
|
#define AFSK_PIN_7 7
|
||
|
#define AFSK_MASK 0xf0
|
||
|
#define NON_AFSK_MASK 0x0f
|
||
|
|
||
|
#define SIN_TABLE_SIZE 48
|
||
|
#define MARK_SAMPLE_DEG_STEP 6
|
||
|
#define SPACE_SAMPLE_DEG_STEP 11
|
||
|
#define MAX_BIT_SAMPLE_INDEX 7
|
||
|
|
||
|
#define ANALOG_ZERO 0x80
|
||
|
#define MASK_RESET_VALUE 0x01
|
||
|
#define MAX_BIT_INDEX 7
|
||
|
|
||
|
#define TX_FRAME_PREAMBLE 0
|
||
|
#define TX_FRAME_BEGIN 1
|
||
|
#define TX_FRAME_DATA 2
|
||
|
#define TX_FRAME_END 3
|
||
|
|
||
|
#define MAX_ONES_WITHOUT_STUFFING 4
|
||
|
#define DEFAULT_PREAMBLE_COUNT 75
|
||
|
|
||
|
class HdlcAfskTx {
|
||
|
public:
|
||
|
HdlcAfskTx(HdlcFrameBuffer* txBuffer);
|
||
|
boolean loopbackTest=false;
|
||
|
byte encodeSample();
|
||
|
void start();
|
||
|
boolean getReady();
|
||
|
void setTxDelay(int val);
|
||
|
private:
|
||
|
HdlcFrameBuffer* _txBuffer;
|
||
|
int _pins[AFSK_PIN_COUNT] = {AFSK_PIN_7, AFSK_PIN_6, AFSK_PIN_5, AFSK_PIN_4};
|
||
|
int _n7_5deg = 0;
|
||
|
int _n7_5degTest = 0;
|
||
|
int _bitSampleCounter = 0;
|
||
|
boolean _mark = true;
|
||
|
boolean _runToZero = false;
|
||
|
boolean _ready = true;
|
||
|
byte _afskByte = HDLC_FLAG;
|
||
|
byte _afskBitMask = MASK_RESET_VALUE;
|
||
|
int frameTxState = TX_FRAME_PREAMBLE;
|
||
|
int _afskBitPtr = 0;
|
||
|
int _preambleCount = DEFAULT_PREAMBLE_COUNT;
|
||
|
int _preampCountDown = DEFAULT_PREAMBLE_COUNT;
|
||
|
boolean _enableStuffBit = false;
|
||
|
boolean _stuffBit = false;
|
||
|
int _oneCounter = 0;
|
||
|
boolean getNextMark(boolean* current);
|
||
|
};
|
||
|
|
||
|
#endif
|