3 #include "SX127xRegs.h"
5 #include "SX12xxDriverCommon.h"
7 #ifdef PLATFORM_ESP8266
11 #define RADIO_SNR_SCALE 4
13 class SX127xDriver
: public SX12xxDriverCommon
17 static SX127xDriver
*instance
;
19 ///////////Radio Variables////////
24 uint16_t timeoutSymbols
;
25 ///////////////////////////////////
27 ////////////////Configuration Functions/////////////
29 bool Begin(uint32_t minimumFrequency
, uint32_t maximumFrequency
);
31 bool DetectChip(SX12XX_Radio_Number_t radioNumber
);
32 void Config(uint8_t bw
, uint8_t sf
, uint8_t cr
, uint32_t freq
, uint8_t preambleLen
, uint8_t syncWord
, bool InvertIQ
, uint8_t _PayloadLength
, uint32_t interval
);
33 void Config(uint8_t bw
, uint8_t sf
, uint8_t cr
, uint32_t freq
, uint8_t preambleLen
, bool InvertIQ
, uint8_t _PayloadLength
, uint32_t interval
);
34 void SetMode(SX127x_RadioOPmodes mode
, SX12XX_Radio_Number_t radioNumber
);
35 void SetTxIdleMode() { SetMode(SX127x_OPMODE_STANDBY
, SX12XX_Radio_All
); } // set Idle mode used when switching from RX to TX
36 void ConfigLoraDefaults();
38 void startCWTest(uint32_t freq
, SX12XX_Radio_Number_t radioNumber
);
39 void cwRepeat(SX12XX_Radio_Number_t radioNumber
);
41 void SetBandwidthCodingRate(SX127x_Bandwidth bw
, SX127x_CodingRate cr
);
42 void SetCRCMode(bool on
); //false for off
43 void SetSyncWord(uint8_t syncWord
);
44 void SetOutputPower(uint8_t Power
);
45 void SetPreambleLength(uint8_t PreambleLen
);
46 void SetSpreadingFactor(SX127x_SpreadingFactor sf
);
47 void SetRxTimeoutUs(uint32_t interval
);
49 uint32_t GetCurrBandwidth();
50 uint32_t GetCurrBandwidthNormalisedShifted();
52 #define FREQ_STEP 61.03515625
53 void SetFrequencyHz(uint32_t freq
, SX12XX_Radio_Number_t radioNumber
);
54 void SetFrequencyReg(uint32_t freq
, SX12XX_Radio_Number_t radioNumber
= SX12XX_Radio_All
);
55 bool FrequencyErrorAvailable() const { return true; }
56 int32_t GetFrequencyError();
57 bool GetFrequencyErrorbool(SX12XX_Radio_Number_t radioNumber
);
58 void SetPPMoffsetReg(int32_t offset
, SX12XX_Radio_Number_t radioNumber
);
60 ////////////////////////////////////////////////////
62 /////////////////Utility Funcitons//////////////////
63 uint8_t GetIrqFlags(SX12XX_Radio_Number_t radioNumber
);
64 void ClearIrqFlags(SX12XX_Radio_Number_t radioNumber
);
66 //////////////RX related Functions/////////////////
70 uint8_t UnsignedGetLastPacketRSSI(SX12XX_Radio_Number_t radioNumber
);
71 int8_t GetLastPacketRSSI(SX12XX_Radio_Number_t radioNumber
);
72 int8_t GetLastPacketSNRRaw(SX12XX_Radio_Number_t radioNumber
);
73 int8_t GetCurrRSSI(SX12XX_Radio_Number_t radioNumber
);
74 void GetLastPacketStats();
75 void CheckForSecondPacket();
77 ////////////Non-blocking TX related Functions/////////////////
78 void TXnb(uint8_t * data
, uint8_t size
, bool sendGeminiBuffer
, uint8_t * dataGemini
, SX12XX_Radio_Number_t radioNumber
);
79 /////////////Non-blocking RX related Functions///////////////
83 // constant used for no power change pending
84 // must not be a valid power register value
85 static const int16_t PWRPENDING_NONE
= -1;
87 SX127x_Bandwidth currBW
;
88 SX127x_SpreadingFactor currSF
;
89 SX127x_CodingRate currCR
;
90 SX127x_RadioOPmodes currOpmode
;
91 SX127x_ModulationModes ModFSKorLoRa
;
93 uint8_t currPreambleLen
;
96 uint8_t lowFrequencyMode
;
98 static void IsrCallback_1();
99 static void IsrCallback_2();
100 static void IsrCallback(SX12XX_Radio_Number_t radioNumber
);
101 bool RXnbISR(SX12XX_Radio_Number_t radioNumber
); // ISR for non-blocking RX routine
102 void TXnbISR(); // ISR for non-blocking TX routine
103 void CommitOutputPower();