2023-05-25 14:21:20 +01:00
# ifndef ARDOPCHEADERDEFINED
# define ARDOPCHEADERDEFINED
# ifdef CONST
# undef CONST
# endif
# define CONST const // for building sample arrays
extern const char ProductName [ ] ;
extern const char ProductVersion [ ] ;
//#define USE_SOUNDMODEM
# define UseGUI // Enable GUI Front End Support
# ifndef TEENSY
# ifdef UseGUI
// Constellation and Waterfall for GUI interface
//#define PLOTCONSTELLATION
//#define PLOTWATERFALL
//#define PLOTSPECTRUM
# define ConstellationHeight 90
# define ConstellationWidth 90
# define WaterfallWidth 205
# define WaterfallHeight 64
# define SpectrumWidth 205
# define SpectrumHeight 64
# define PLOTRADIUS 42
# define WHITE 0
# define Tomato 1
# define Gold 2
# define Lime 3
# define Yellow 4
# define Orange 5
# define Khaki 6
# define Cyan 7
# define DeepSkyBlue 8
# define RoyalBlue 9
# define Navy 10
# define Black 11
# define Goldenrod 12
# define Fuchsia 13
# endif
# endif
// Sound interface buffer size
# define SendSize 1200 // 100 mS for now
# define ReceiveSize 240 // try 100 mS for now
# define NumberofinBuffers 4
# define MAXCAR 43 // Max OFDM Carriers
# define DATABUFFERSIZE 11000
# ifndef _WIN32_WINNT // Allow use of features specific to Windows XP or later.
# define _WIN32_WINNT 0x0501 // Change this to the appropriate value to target other versions of Windows.
# endif
# define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
# define _CRT_SECURE_NO_DEPRECATE
# ifndef WIN32
# define max(x, y) ((x) > (y) ? (x) : (y))
# define min(x, y) ((x) < (y) ? (x) : (y))
# endif
# ifdef WIN32
typedef void * HANDLE ;
# else
# define HANDLE int
# endif
void txSleep ( int mS ) ;
unsigned int getTicks ( ) ;
//#ifdef WIN32
//#define round(x) floorf(x + 0.5f);
//#endif
# define Now getTicks()
// DebugLog Severity Levels
# define LOGEMERGENCY 0
# define LOGALERT 1
# define LOGCRIT 2
# define LOGERROR 3
# define LOGWARNING 4
# define LOGNOTICE 5
# define LOGINFO 6
# define LOGDEBUG 7
# include <time.h>
# include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <ctype.h>
//#include <math.h>
# ifdef M_PI
# undef M_PI
# endif
# define M_PI 3.1415926f
# ifndef TEENSY
# ifndef WIN32
# define LINUX
# endif
# endif
# ifdef __ARM_ARCH
# ifndef TEENSY
# define ARMLINUX
# endif
# endif
# include "ecc.h" // RS Constants
typedef int BOOL ;
typedef unsigned char UCHAR ;
# define VOID void
# define FALSE 0
# define TRUE 1
# define False 0
# define True 1
// TEENSY Interface board equates
# ifdef TEENSY
# ifdef PIBOARD
# define ISSLED LED0
# else
# define ISSLED LED1
# endif
# define IRSLED LED1
# define TRAFFICLED LED2
# else
# define ISSLED 1
# define IRSLED 2
# define TRAFFICLED 3
# define PKTLED 4
# endif
BOOL KeyPTT ( BOOL State ) ;
UCHAR FrameCode ( char * strFrameName ) ;
BOOL FrameInfo ( UCHAR bytFrameType , int * blnOdd , int * intNumCar , char * strMod ,
int * intBaud , int * intDataLen , int * intRSLen , UCHAR * bytQualThres , char * strType ) ;
void ClearDataToSend ( ) ;
int EncodeFSKData ( UCHAR bytFrameType , UCHAR * bytDataToSend , int Length , unsigned char * bytEncodedBytes ) ;
int EncodePSKData ( UCHAR bytFrameType , UCHAR * bytDataToSend , int Length , unsigned char * bytEncodedBytes ) ;
int EncodeOFDMData ( UCHAR bytFrameType , UCHAR * bytDataToSend , int Length , unsigned char * bytEncodedBytes ) ;
int Encode4FSKIDFrame ( char * Callsign , char * Square , unsigned char * bytreturn , UCHAR SessionID ) ;
int EncodeDATAACK ( int intQuality , UCHAR bytSessionID , UCHAR * bytreturn ) ;
int EncodeDATANAK ( int intQuality , UCHAR bytSessionID , UCHAR * bytreturn ) ;
void Mod4FSKDataAndPlay ( unsigned char * bytEncodedBytes , int Len , int intLeaderLen , int Chan ) ;
void ModPSKDataAndPlay ( unsigned char * bytEncodedBytes , int Len , int intLeaderLen , int Chan ) ;
BOOL IsDataFrame ( UCHAR intFrameType ) ;
BOOL CheckValidCallsignSyntax ( char * strTargetCallsign ) ;
void StartCodec ( char * strFault ) ;
void StopCodec ( char * strFault ) ;
BOOL SendARQConnectRequest ( char * strMycall , char * strTargetCall ) ;
void AddDataToDataToSend ( UCHAR * bytNewData , int Len ) ;
BOOL StartFEC ( UCHAR * bytData , int Len , char * strDataMode , int intRepeats , BOOL blnSendID ) ;
void SendID ( BOOL blnEnableCWID ) ;
BOOL CheckGSSyntax ( char * GS ) ;
//void SetARDOPProtocolState(int value);
unsigned int GenCRC16 ( unsigned char * Data , unsigned short length ) ;
void SendCommandToHost ( char * Cmd ) ;
void TCPSendCommandToHost ( char * Cmd ) ;
void SCSSendCommandToHost ( char * Cmd ) ;
void SendCommandToHostQuiet ( char * Cmd ) ;
void TCPSendCommandToHostQuiet ( char * Cmd ) ;
void SCSSendCommandToHostQuiet ( char * Cmd ) ;
void UpdateBusyDetector ( short * bytNewSamples ) ;
int UpdatePhaseConstellation ( short * intPhases , short * intMags , int intPSKPhase , BOOL blnQAM , BOOL OFDM ) ;
void SetARDOPProtocolState ( int value ) ;
BOOL BusyDetect3 ( float * dblMag , int intStart , int intStop ) ;
void SendLogToHost ( char * Msg , int len ) ;
VOID Gearshift_2 ( int intAckNakValue , BOOL blnInit ) ;
void displayState ( const char * State ) ;
void displayCall ( int dirn , char * call ) ;
void SampleSink ( int LR , short Sample ) ;
void SoundFlush ( ) ;
void StopCapture ( ) ;
void StartCapture ( ) ;
void DiscardOldSamples ( ) ;
void ClearAllMixedSamples ( ) ;
void SetFilter ( void * Filter ( ) ) ;
void AddTrailer ( ) ;
void CWID ( char * strID , short * intSamples , BOOL blnPlay ) ;
void sendCWID ( char * Call , BOOL Play , int Chan ) ;
UCHAR ComputeTypeParity ( UCHAR bytFrameType ) ;
void GenCRC16FrameType ( char * Data , int Length , UCHAR bytFrameType ) ;
BOOL CheckCRC16FrameType ( unsigned char * Data , int Length , UCHAR bytFrameType ) ;
char * strlop ( char * buf , char delim ) ;
void QueueCommandToHost ( char * Cmd ) ;
void SCSQueueCommandToHost ( char * Cmd ) ;
void TCPQueueCommandToHost ( char * Cmd ) ;
void SendReplyToHost ( char * strText ) ;
void TCPSendReplyToHost ( char * strText ) ;
void SCSSendReplyToHost ( char * strText ) ;
void LogStats ( ) ;
int GetNextFrameData ( int * intUpDn , UCHAR * bytFrameTypeToSend , UCHAR * strMod , BOOL blnInitialize ) ;
void SendData ( ) ;
int ComputeInterFrameInterval ( int intRequestedIntervalMS ) ;
VOID EncodeAndSend4FSKControl ( UCHAR bytFrameType , UCHAR bytSessionID , int LeaderLength ) ;
VOID WriteExceptionLog ( const char * format , . . . ) ;
void SaveQueueOnBreak ( ) ;
VOID Statsprintf ( const char * format , . . . ) ;
VOID CloseDebugLog ( ) ;
VOID CloseStatsLog ( ) ;
void Abort ( ) ;
void SetLED ( int LED , int State ) ;
VOID ClearBusy ( ) ;
VOID CloseCOMPort ( HANDLE fd ) ;
VOID COMClearRTS ( HANDLE fd ) ;
VOID COMClearDTR ( HANDLE fd ) ;
//#ifdef WIN32
void ProcessNewSamples ( short * Samples , int nSamples ) ;
VOID Debugprintf ( const char * format , . . . ) ;
VOID WriteDebugLog ( const char * format , . . . ) ;
void ardopmain ( ) ;
BOOL GetNextFECFrame ( ) ;
void GenerateFSKTemplates ( ) ;
void printtick ( char * msg ) ;
void InitValidFrameTypes ( ) ;
//#endif
extern void Generate50BaudTwoToneLeaderTemplate ( ) ;
extern BOOL blnDISCRepeating ;
BOOL DemodDecode4FSKID ( UCHAR bytFrameType , char * strCallID , char * strGridSquare ) ;
void DeCompressCallsign ( char * bytCallsign , char * returned ) ;
void DeCompressGridSquare ( char * bytGS , char * returned ) ;
int RSEncode ( UCHAR * bytToRS , UCHAR * RSBytes , int DataLen , int RSLen ) ;
BOOL RSDecode ( UCHAR * bytRcv , int Length , int CheckLen , BOOL * blnRSOK ) ;
void ProcessRcvdFECDataFrame ( int intFrameType , UCHAR * bytData , BOOL blnFrameDecodedOK ) ;
void ProcessUnconnectedConReqFrame ( int intFrameType , UCHAR * bytData ) ;
void ProcessRcvdARQFrame ( UCHAR intFrameType , UCHAR * bytData , int DataLen , BOOL blnFrameDecodedOK ) ;
void InitializeConnection ( ) ;
void AddTagToDataAndSendToHost ( UCHAR * Msg , char * Type , int Len ) ;
void TCPAddTagToDataAndSendToHost ( UCHAR * Msg , char * Type , int Len ) ;
void SCSAddTagToDataAndSendToHost ( UCHAR * Msg , char * Type , int Len ) ;
void RemoveDataFromQueue ( int Len ) ;
void RemodulateLastFrame ( ) ;
void GetSemaphore ( ) ;
void FreeSemaphore ( ) ;
const char * Name ( UCHAR bytID ) ;
const char * shortName ( UCHAR bytID ) ;
void InitSound ( ) ;
void initFilter ( int Width , int centerFreq , int Chan ) ;
void FourierTransform ( int NumSamples , short * RealIn , float * RealOut , float * ImagOut , int InverseTransform ) ;
VOID ClosePacketSessions ( ) ;
VOID LostHost ( ) ;
VOID ProcessPacketHostBytes ( UCHAR * RXBuffer , int Len ) ;
int ReadCOMBlock ( HANDLE fd , char * Block , int MaxLength ) ;
VOID ProcessDEDModeFrame ( UCHAR * rxbuffer , unsigned int Length ) ;
BOOL CheckForPktMon ( ) ;
BOOL CheckForPktData ( ) ;
void ModOFDMDataAndPlay ( unsigned char * bytEncodedBytes , int Len , int intLeaderLen , int Chan ) ;
void GetOFDMFrameInfo ( int OFDMMode , int * intDataLen , int * intRSLen , int * Mode , int * Symbols ) ;
void ClearOFDMVariables ( ) ;
VOID EncodeAndSendOFDMACK ( UCHAR bytSessionID , int LeaderLength , int Chan ) ;
int ProcessOFDMAck ( int AckType ) ;
void ProcessOFDMNak ( int AckType ) ;
int SendtoGUI ( char Type , unsigned char * Msg , int Len ) ;
void DrawRXFrame ( int State , const char * Frame ) ;
void DrawTXFrame ( const char * Frame ) ;
void mySetPixel ( unsigned char x , unsigned char y , unsigned int Colour ) ;
void clearDisplay ( ) ;
void DrawDecode ( char * Decode ) ;
extern int WaterfallActive ;
extern int SpectrumActive ;
extern unsigned int PKTLEDTimer ;
extern char stcLastPingstrSender [ 10 ] ;
extern char stcLastPingstrTarget [ 10 ] ;
extern int stcLastPingintRcvdSN ;
extern int stcLastPingintQuality ;
extern time_t stcLastPingdttTimeReceived ;
enum _ReceiveState // used for initial receive testing...later put in correct protocol states
{
SearchingForLeader ,
AcquireSymbolSync ,
AcquireFrameSync ,
AcquireFrameType ,
DecodeFrameType ,
AcquireFrame ,
DecodeFramestate
} ;
extern enum _ReceiveState State ;
enum _ARQBandwidth
{
XB200 ,
XB500 ,
XB2500 ,
UNDEFINED
} ;
extern enum _ARQBandwidth ARQBandwidth ;
extern const char ARQBandwidths [ 9 ] [ 12 ] ;
enum _ARDOPState
{
OFFLINE ,
DISC ,
ISS ,
IRS ,
IDLE , // ISS in quiet state ...no transmissions)
IRStoISS , // IRS during transition to ISS waiting for ISS's ACK from IRS's BREAK
FECSend ,
FECRcv
} ;
extern enum _ARDOPState ProtocolState ;
extern const char ARDOPStates [ 8 ] [ 9 ] ;
// Enum of ARQ Substates
enum _ARQSubStates
{
None ,
ISSConReq ,
ISSConAck ,
ISSData ,
ISSId ,
IRSConAck ,
IRSData ,
IRSBreak ,
IRSfromISS ,
DISCArqEnd
} ;
extern enum _ARQSubStates ARQState ;
enum _ProtocolMode
{
Undef ,
FEC ,
ARQ
} ;
extern enum _ProtocolMode ProtocolMode ;
extern const char ARDOPModes [ 3 ] [ 6 ] ;
extern enum _ARQSubStates ARQState ;
struct SEM
{
unsigned int Flag ;
int Clashes ;
int Gets ;
int Rels ;
} ;
extern struct SEM Semaphore ;
# define DataNAK 0x00
# define DataNAKLoQ 0x01
# define ConRejBusy 0x02
# define ConRejBW 0x03
# define ConAck 0x04
# define DISCFRAME 0x05
# define BREAK 0x06
# define END 0x07
# define IDLEFRAME 0x08
# define ConReq200 0x09
# define ConReq500 0x0A
# define ConReq2500 0x0B
# define IDFRAME 0x0C
# define PINGACK 0x0D
# define PING 0x0E
# define CQ_de 0x0F
// 200 Hz Bandwidth
// 1 Car modes
# define D4PSK_200_50_E 0x10
# define D4PSK_200_50_O 0x11
# define D4PSK_200_100_E 0x12
# define D4PSK_200_100_O 0x13
# define D16QAM_200_100_E 0x14
# define D16QAM_200_100_O 0x15
// 500 Hz bandwidth Data
// 1 Car 4FSK Data mode 500 Hz, 50 baud tones spaced @ 100 Hz
# define D4FSK_500_50_E 0x1A
# define D4FSK_500_50_O 0x1B
# define D4PSK_500_50_E 0x1C
# define D4PSK_500_50_O 0x1D
# define D4PSK_500_100_E 0x1E
# define D4PSK_500_100_O 0x1F
// 2 Car 16QAM Data Modes 100 baud
# define D16QAMR_500_100_E 0x20
# define D16QAMR_500_100_O 0x21
# define D16QAM_500_100_E 0x22
# define D16QAM_500_100_O 0x23
// OFDM modes
# define DOFDM_500_55_E 0x24
# define DOFDM_500_55_O 0x25
# define DOFDM_200_55_E 0x26
# define DOFDM_200_55_O 0x27
# define OConReq500 0x18
# define OConReq2500 0x19
// 1 Khz Bandwidth Data Modes
// 2 Car 4FSK Data mode 1000 Hz, 50 baud tones spaced @ 100 Hz
# define D4FSK_1000_50_E 0x28
# define D4FSK_1000_50_O 0x29
// 2500 bandwidth modes
// 10 Car PSK Data Modes 50 baud
# define D4PSKR_2500_50_E 0x2A
# define D4PSKR_2500_50_O 0x2B
# define D4PSK_2500_50_E 0x2C
# define D4PSK_2500_50_O 0x2D
// 10 Car PSK Data Modes 100 baud
# define D4PSK_2500_100_E 0x2E
# define D4PSK_2500_100_O 0x2F
// 10 Car 10 Car 16QAMRobust (duplicated carriers)
# define D16QAMR_2500_100_E 0x30
# define D16QAMR_2500_100_O 0x31
// 10 Car 16QAM Data modes 100 baud
# define D16QAM_2500_100_E 0x32
# define D16QAM_2500_100_O 0x33
// OFDM modes
# define DOFDM_2500_55_E 0x34
# define DOFDM_2500_55_O 0x35
# define PktFrameHeader 0x3A // Variable length frame Header
# define PktFrameData 0x3B // Variable length frame Data (Virtual Frsme Type)
# define OFDMACK 0x3D
# define DataACK 0x3E
# define DataACKHiQ 0x3F
extern CONST short int50BaudTwoToneLeaderTemplate [ 240 ] ; // holds just 1 symbol (20 ms) of the leader
//The actual templates over 11 carriers for 16QAM in a 8-8 circular constellation. First 4 symbols only
// (only positive Phase values are in the table, sign reversal is used to get the negative phase values) This reduces the template size to 5280 integers
extern CONST short intQAM50bdCarTemplate [ 11 ] [ 4 ] [ 120 ] ;
extern CONST short intFSK50bdCarTemplate [ 12 ] [ 240 ] ; // Template for 4FSK carriers spaced at 50 Hz, 50 baud
extern CONST short intFSK100bdCarTemplate [ 4 ] [ 120 ] ;
extern CONST short intOFDMTemplate [ MAXCAR ] [ 8 ] [ 216 ] ;
// Config Params
extern char GridSquare [ 9 ] ;
extern char Callsign [ 10 ] ;
extern BOOL wantCWID ;
extern BOOL CWOnOff ;
extern int LeaderLength ;
extern int TrailerLength ;
extern unsigned int ARQTimeout ;
extern int TuningRange ;
extern int TXLevel ;
extern int RXLevel ;
extern int autoRXLevel ;
extern BOOL DebugLog ;
extern int ARQConReqRepeats ;
extern BOOL CommandTrace ;
extern char strFECMode [ ] ;
extern char CaptureDevice [ ] ;
extern char PlaybackDevice [ ] ;
extern int port ;
extern char HostPort [ 80 ] ;
extern int pktport ;
extern BOOL RadioControl ;
extern BOOL SlowCPU ;
extern BOOL AccumulateStats ;
extern BOOL Use600Modes ;
extern BOOL UseOFDM ;
extern BOOL EnableOFDM ;
extern BOOL FSKOnly ;
extern BOOL fastStart ;
extern BOOL ConsoleLogLevel ;
extern BOOL FileLogLevel ;
extern BOOL EnablePingAck ;
extern BOOL NegotiateBW ;
extern int dttLastPINGSent ;
extern BOOL blnPINGrepeating ;
extern BOOL blnFramePending ;
extern int intPINGRepeats ;
extern BOOL gotGPIO ;
extern BOOL useGPIO ;
extern int pttGPIOPin ;
extern HANDLE hCATDevice ; // port for Rig Control
extern char CATPort [ 80 ] ;
extern int CATBAUD ;
extern int EnableHostCATRX ;
extern HANDLE hPTTDevice ; // port for PTT
extern char PTTPort [ 80 ] ; // Port for Hardware PTT - may be same as control port.
extern int PTTBAUD ;
# define PTTRTS 1
# define PTTDTR 2
# define PTTCI_V 4
extern UCHAR PTTOnCmd [ ] ;
extern UCHAR PTTOnCmdLen ;
extern UCHAR PTTOffCmd [ ] ;
extern UCHAR PTTOffCmdLen ;
extern int PTTMode ; // PTT Control Flags.
extern char * CaptureDevices ;
extern char * PlaybackDevices ;
extern int dttCodecStarted ;
extern int dttStartRTMeasure ;
extern int intCalcLeader ; // the computed leader to use based on the reported Leader Length
extern const char strFrameType [ 64 ] [ 18 ] ;
extern const char shortFrameType [ 64 ] [ 12 ] ;
extern BOOL Capturing ;
extern int SoundIsPlaying ;
extern int blnLastPTT ;
extern BOOL blnAbort ;
extern BOOL blnClosing ;
extern BOOL blnCodecStarted ;
extern BOOL blnInitializing ;
extern BOOL blnARQDisconnect ;
extern int DriveLevel ;
extern int FECRepeats ;
extern BOOL FECId ;
extern int Squelch ;
extern int BusyDet ;
extern BOOL blnEnbARQRpt ;
extern unsigned int dttNextPlay ;
extern UCHAR bytDataToSend [ ] ;
extern int bytDataToSendLength ;
extern BOOL blnListen ;
extern BOOL Monitor ;
extern BOOL AutoBreak ;
extern BOOL BusyBlock ;
extern int DecodeCompleteTime ;
extern BOOL AccumulateStats ;
extern unsigned char bytEncodedBytes [ 4500 ] ;
extern int EncLen ;
extern char AuxCalls [ 10 ] [ 10 ] ;
extern int AuxCallsLength ;
extern int bytValidFrameTypesLength ;
extern int bytValidFrameTypesLengthALL ;
extern int bytValidFrameTypesLengthISS ;
extern BOOL blnTimeoutTriggered ;
extern int intFrameRepeatInterval ;
extern int extraDelay ;
extern BOOL PlayComplete ;
extern const UCHAR bytValidFrameTypesALL [ ] ;
extern const UCHAR bytValidFrameTypesISS [ ] ;
extern const UCHAR * bytValidFrameTypes ;
extern const char strAllDataModes [ ] [ 16 ] ;
extern int strAllDataModesLen ;
extern const short Rate [ 64 ] ; // Data Rate (in bits/sec) by Frame Type
extern BOOL newStatus ;
// RS Variables
extern int MaxCorrections ;
// Stats counters
extern int SessBytesSent ;
extern int SessBytesReceived ;
extern int intLeaderDetects ;
extern int intLeaderSyncs ;
extern int intAccumLeaderTracking ;
extern float dblFSKTuningSNAvg ;
extern int intGoodFSKFrameTypes ;
extern int intFailedFSKFrameTypes ;
extern int intAccumFSKTracking ;
extern int intFSKSymbolCnt ;
extern int intGoodFSKFrameDataDecodes ;
extern int intFailedFSKFrameDataDecodes ;
extern int intAvgFSKQuality ;
extern int intFrameSyncs ;
extern int intGoodPSKSummationDecodes ;
extern int intGoodFSKSummationDecodes ;
extern int intGoodOFDMSummationDecodes ;
extern float dblLeaderSNAvg ;
extern int intAccumPSKLeaderTracking ;
extern float dblAvgPSKRefErr ;
extern int intPSKTrackAttempts ;
extern int intAccumPSKTracking ;
extern int intQAMTrackAttempts ;
extern int intAccumQAMTracking ;
extern int intOFDMTrackAttempts ;
extern int intAccumOFDMTracking ;
extern int intPSKSymbolCnt ;
extern int intQAMSymbolCnt ;
extern int intOFDMSymbolCnt ;
extern int intGoodPSKFrameDataDecodes ;
extern int intFailedPSKFrameDataDecodes ;
extern int intAvgPSKQuality ;
extern int intGoodOFDMFrameDataDecodes ;
extern int intFailedOFDMFrameDataDecodes ;
extern int intAvgOFDMQuality ;
extern float dblAvgDecodeDistance ;
extern int intDecodeDistanceCount ;
extern int intShiftUPs ;
extern int intShiftDNs ;
extern unsigned int dttStartSession ;
extern int intLinkTurnovers ;
extern int intEnvelopeCors ;
extern float dblAvgCorMaxToMaxProduct ;
extern int intConReqSN ;
extern int intConReqQuality ;
extern int int4FSKQuality ;
extern int int4FSKQualityCnts ;
extern int int8FSKQuality ;
extern int int8FSKQualityCnts ;
extern int int16FSKQuality ;
extern int int16FSKQualityCnts ;
extern int intFSKSymbolsDecoded ;
extern int intPSKQuality [ 2 ] ;
extern int intPSKQualityCnts [ 2 ] ;
extern int intPSKSymbolsDecoded ;
extern int intOFDMQuality [ 8 ] ;
extern int intOFDMQualityCnts [ 8 ] ;
extern int intOFDMSymbolsDecoded ;
extern int intQAMQuality ;
extern int intQAMQualityCnts ;
extern int intQAMSymbolsDecoded ;
extern int intQAMSymbolCnt ;
extern int intOFDMSymbolCnt ;
extern int intGoodQAMFrameDataDecodes ;
extern int intFailedQAMFrameDataDecodes ;
extern int intGoodQAMSummationDecodes ;
extern int dttLastBusyOn ;
extern int dttLastBusyOff ;
extern int dttLastLeaderDetect ;
extern int LastBusyOn ;
extern int LastBusyOff ;
extern int dttLastLeaderDetect ;
extern int pktDataLen ;
extern int pktRSLen ;
extern const char pktMod [ 16 ] [ 12 ] ;
extern int pktMode ;
extern int pktModeLen ;
extern const int pktBW [ 16 ] ;
extern const int pktCarriers [ 16 ] ;
extern const int defaultPacLen [ 16 ] ;
extern const BOOL pktFSK [ 16 ] ;
extern int pktMaxFrame ;
extern int pktMaxBandwidth ;
extern int pktPacLen ;
extern int initMode ; // 0 - 4PSK 1 - 8PSK 2 = 16QAM
extern UCHAR UnackedOFDMBlocks [ 128 ] ;
extern int NextOFDMBlock ;
extern BOOL SerialMode ; // Set if using SCS Mode, Unset ofr TCP Mode
// Has to follow enum defs
BOOL EncodeARQConRequest ( char * strMyCallsign , char * strTargetCallsign , enum _ARQBandwidth ARQBandwidth , UCHAR * bytReturn ) ;
// OFDM Modes
# define PSK2 0
# define PSK4 1
# define PSK8 2
# define QAM16 3
# define PSK16 4 // Experimental - is it better than 16QAM?
# define QAM32 5
# define PSK4S 6 // Special shorter frame for short messages
extern int OFDMMode ; // OFDM can use various modulation modes and redundancy levels
extern int LastSentOFDMMode ; // For retries
extern int LastSentOFDMType ; // For retries
extern int SavedOFDMMode ; // used if we switch to a more robust mode cos we don't have much to send
extern int SavedFrameType ;
extern const char OFDMModes [ 8 ] [ 6 ] ;
2023-05-21 18:13:55 +01:00
# endif