Driver library for SX1272/SX1276 transceivers

Dependents:   LORA_RX LORA_TX WindConcentrator hid_test ... more

/media/uploads/dudmuck/lora.png

Driver library for SX1272 and SX1276 radio transceivers.

This device uses CSS modulation to provide much improved link budget. The RF hardware is same as in FSK devices, just with added LoRa spread-spectrum modem.

This library provides functions to configure radio chip and transmit & receive packets.

Using This Library

Library function service_radio() must be called continuously from main loop, to service interrupts from radio.

/media/uploads/dudmuck/sx1272rf1_connector_300.jpg

Board Specific implementation

FunctionPointer for rf_switch callback allows the program to implement control of RF switch unique to their board. Example options are:

  • SKY13373 for external power amplifier implementation. Requires two DigitalOut pins.
  • SKY13350 using PA_BOOST. requires two DigitalOut pins.
  • PE4259-63: controlled directly by radio chip, no software function needed. However, in the case of SX1276MB1xAS, the RXTX pin on IO2 should be driven by this callback function when R16 is installed (without R15) on this shield board.

Some configurations may need to force the use of RFO or PA_BOOST, or a board could offer both options. The rf_switch function pointer callback should support the implementation choice on the board.

further reading

Committer:
dudmuck
Date:
Wed Apr 30 22:49:43 2014 +0000
Revision:
2:fdae76e1215e
Child:
3:3bf2515b1eed
separated LoRa code from FSK code from common code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dudmuck 2:fdae76e1215e 1 #include "sx127x.h"
dudmuck 2:fdae76e1215e 2
dudmuck 2:fdae76e1215e 3 #define REG_FSK_BITRATEMSB 0x02
dudmuck 2:fdae76e1215e 4 #define REG_FSK_BITRATELSB 0x03
dudmuck 2:fdae76e1215e 5 #define REG_FSK_FDEVMSB 0x04
dudmuck 2:fdae76e1215e 6 #define REG_FSK_FDEVLSB 0x05
dudmuck 2:fdae76e1215e 7
dudmuck 2:fdae76e1215e 8 #define REG_FSK_RXCONFIG 0x0D
dudmuck 2:fdae76e1215e 9 #define REG_FSK_RSSICONFIG 0x0E
dudmuck 2:fdae76e1215e 10 #define REG_FSK_RSSICOLLISION 0x0F // rssi delta threshold (interferer)
dudmuck 2:fdae76e1215e 11 #define REG_FSK_RSSITHRESH 0x10 // trigger level for rssi interrupt
dudmuck 2:fdae76e1215e 12 #define REG_FSK_RSSIVALUE 0x11
dudmuck 2:fdae76e1215e 13 #define REG_FSK_RXBW 0x12
dudmuck 2:fdae76e1215e 14 #define REG_FSK_AFCBW 0x13
dudmuck 2:fdae76e1215e 15 #define REG_FSK_OOKPEAK 0x14 // bitsync config
dudmuck 2:fdae76e1215e 16 #define REG_FSK_OOKFIX 0x15 // threshold dB
dudmuck 2:fdae76e1215e 17 #define REG_FSK_OOKAVG 0x16
dudmuck 2:fdae76e1215e 18 #define REG_FSK_RES17 0x17 // barker test
dudmuck 2:fdae76e1215e 19 #define REG_FSK_RES18 0x18 // barker test
dudmuck 2:fdae76e1215e 20 #define REG_FSK_RES19 0x19 // barker test
dudmuck 2:fdae76e1215e 21 #define REG_FSK_AFCFEI 0x1A
dudmuck 2:fdae76e1215e 22 #define REG_FSK_AFCMSB 0x1B
dudmuck 2:fdae76e1215e 23 #define REG_FSK_AFCLSB 0x1C
dudmuck 2:fdae76e1215e 24 #define REG_FSK_FEIMSB 0x1D
dudmuck 2:fdae76e1215e 25 #define REG_FSK_FEILSB 0x1E
dudmuck 2:fdae76e1215e 26 #define REG_FSK_PREAMBLEDETECT 0x1F
dudmuck 2:fdae76e1215e 27 #define REG_FSK_RXTIMEOUT1 0x20 // rssi timeout
dudmuck 2:fdae76e1215e 28 #define REG_FSK_RXTIMEOUT2 0x21 // preamble detect timeout
dudmuck 2:fdae76e1215e 29 #define REG_FSK_RXTIMEOUT3 0x22 // sync detect timeout
dudmuck 2:fdae76e1215e 30 #define REG_FSK_RXDELAY 0x23 // RX restart delay
dudmuck 2:fdae76e1215e 31 // Oscillator settings
dudmuck 2:fdae76e1215e 32 #define REG_FSK_OSC 0x24 // clkout output divider
dudmuck 2:fdae76e1215e 33 // Packet handler settings
dudmuck 2:fdae76e1215e 34 #define REG_FSK_PREAMBLEMSB 0x25 // preamble length
dudmuck 2:fdae76e1215e 35 #define REG_FSK_PREAMBLELSB 0x26 // preamble length
dudmuck 2:fdae76e1215e 36 #define REG_FSK_SYNCCONFIG 0x27
dudmuck 2:fdae76e1215e 37 #define REG_FSK_SYNCVALUE1 0x28
dudmuck 2:fdae76e1215e 38 #define REG_FSK_SYNCVALUE2 0x29
dudmuck 2:fdae76e1215e 39 #define REG_FSK_SYNCVALUE3 0x2A
dudmuck 2:fdae76e1215e 40 #define REG_FSK_SYNCVALUE4 0x2B
dudmuck 2:fdae76e1215e 41 #define REG_FSK_SYNCVALUE5 0x2C
dudmuck 2:fdae76e1215e 42 #define REG_FSK_SYNCVALUE6 0x2D
dudmuck 2:fdae76e1215e 43 #define REG_FSK_SYNCVALUE7 0x2E
dudmuck 2:fdae76e1215e 44 #define REG_FSK_SYNCVALUE8 0x2F
dudmuck 2:fdae76e1215e 45 #define REG_FSK_PACKETCONFIG1 0x30
dudmuck 2:fdae76e1215e 46 #define REG_FSK_PACKETCONFIG2 0x31
dudmuck 2:fdae76e1215e 47 #define REG_FSK_PAYLOADLENGTH 0x32
dudmuck 2:fdae76e1215e 48 #define REG_FSK_NODEADRS 0x33
dudmuck 2:fdae76e1215e 49 #define REG_FSK_BROADCASTADRS 0x34
dudmuck 2:fdae76e1215e 50 #define REG_FSK_FIFOTHRESH 0x35
dudmuck 2:fdae76e1215e 51 // SM settings
dudmuck 2:fdae76e1215e 52 #define REG_FSK_SEQCONFIG1 0x36
dudmuck 2:fdae76e1215e 53 #define REG_FSK_SEQCONFIG2 0x37
dudmuck 2:fdae76e1215e 54 #define REG_FSK_TIMERRESOL 0x38
dudmuck 2:fdae76e1215e 55 #define REG_FSK_TIMER1COEF 0x39 // period of timer1 interrupt
dudmuck 2:fdae76e1215e 56 #define REG_FSK_TIMER2COEF 0x3A // period of timer2 interrupt
dudmuck 2:fdae76e1215e 57 // Service settings
dudmuck 2:fdae76e1215e 58 #define REG_FSK_IMAGECAL 0x3B
dudmuck 2:fdae76e1215e 59 #define REG_FSK_TEMP 0x3C
dudmuck 2:fdae76e1215e 60 #define REG_FSK_LOWBAT 0x3D // EOL "end of life"
dudmuck 2:fdae76e1215e 61 // Status
dudmuck 2:fdae76e1215e 62 #define REG_FSK_IRQFLAGS1 0x3E
dudmuck 2:fdae76e1215e 63 #define REG_FSK_IRQFLAGS2 0x3F // packet flags
dudmuck 2:fdae76e1215e 64
dudmuck 2:fdae76e1215e 65 /******************************************************************************/
dudmuck 2:fdae76e1215e 66
dudmuck 2:fdae76e1215e 67 #define FSK_FIFO_SIZE 64
dudmuck 2:fdae76e1215e 68 #define FSK_FIFO_SIZE_HALF (FSK_FIFO_SIZE>>1)
dudmuck 2:fdae76e1215e 69
dudmuck 2:fdae76e1215e 70 typedef union {
dudmuck 2:fdae76e1215e 71 struct { // sx1272 register 0x0d
dudmuck 2:fdae76e1215e 72 //uint8_t wait_rssi_irq : 1; // 0 wait for signal strength before entering RX
dudmuck 2:fdae76e1215e 73 //uint8_t wait_irq_0x55 : 1; // 1 wait for preamble before entering RX
dudmuck 2:fdae76e1215e 74 //uint8_t agc_on_irq_0x55 : 1; // 2 1=LNA gain adj done until irq_0x55 asserted
dudmuck 2:fdae76e1215e 75 uint8_t RxTrigger : 3; // 0,1,2: 0=none 1=rssiInt 6=preambleDet 7=both
dudmuck 2:fdae76e1215e 76 uint8_t AgcAutoOn : 1; // 3
dudmuck 2:fdae76e1215e 77 uint8_t AfcAutoOn : 1; // 4
dudmuck 2:fdae76e1215e 78 uint8_t RestartRxWithPllLock : 1; // 5 restart from FSRX mode
dudmuck 2:fdae76e1215e 79 uint8_t RestartRxWithoutPllLock : 1; // 6
dudmuck 2:fdae76e1215e 80 uint8_t RestartRxOnCollision : 1; // 7
dudmuck 2:fdae76e1215e 81 } bits;
dudmuck 2:fdae76e1215e 82 uint8_t octet;
dudmuck 2:fdae76e1215e 83 } FSKRegRxConfig_t;
dudmuck 2:fdae76e1215e 84
dudmuck 2:fdae76e1215e 85
dudmuck 2:fdae76e1215e 86 typedef union {
dudmuck 2:fdae76e1215e 87 struct { // sx1272 register 0x1a
dudmuck 2:fdae76e1215e 88 uint8_t AfcAutoClearOn : 1; // 0
dudmuck 2:fdae76e1215e 89 uint8_t AfcClear : 1; // 1 manual clear
dudmuck 2:fdae76e1215e 90 uint8_t unused1 : 1; // 2
dudmuck 2:fdae76e1215e 91 uint8_t fei_range : 1; // 3 FEI range limited by: 0=rxbw 1=fs/2
dudmuck 2:fdae76e1215e 92 uint8_t AgcStart : 1; // 4 manual trigger AGC
dudmuck 2:fdae76e1215e 93 uint8_t unused : 3; // 5,6,7
dudmuck 2:fdae76e1215e 94 } bits;
dudmuck 2:fdae76e1215e 95 uint8_t octet;
dudmuck 2:fdae76e1215e 96 } FSKRegAfcFei_t;
dudmuck 2:fdae76e1215e 97
dudmuck 2:fdae76e1215e 98
dudmuck 2:fdae76e1215e 99 typedef union {
dudmuck 2:fdae76e1215e 100 struct { // sx1272 register 0x0e
dudmuck 2:fdae76e1215e 101 uint8_t RssiSmoothing : 3; // 0,1,2
dudmuck 2:fdae76e1215e 102 uint8_t RssiOffset : 5; // 3,4,5,6,7
dudmuck 2:fdae76e1215e 103 } bits;
dudmuck 2:fdae76e1215e 104 uint8_t octet;
dudmuck 2:fdae76e1215e 105 } FSKRegRssiConfig_t;
dudmuck 2:fdae76e1215e 106
dudmuck 2:fdae76e1215e 107 typedef union {
dudmuck 2:fdae76e1215e 108 struct { // sx1272 register 0x12
dudmuck 2:fdae76e1215e 109 //uint8_t RxBw : 5; // 0,1,2,3,4 (0,1,2=exp 3,4=mant)
dudmuck 2:fdae76e1215e 110 uint8_t Exponent : 3; // 0,1,2
dudmuck 2:fdae76e1215e 111 uint8_t Mantissa : 2; // 3,4
dudmuck 2:fdae76e1215e 112 uint8_t dcc_force : 1; // 5 force dcc on all rxbw (otherwise put only if > 167KHz)
dudmuck 2:fdae76e1215e 113 uint8_t dcc_fast_init : 1; // 6
dudmuck 2:fdae76e1215e 114 uint8_t reserved : 1; // 7
dudmuck 2:fdae76e1215e 115 } bits;
dudmuck 2:fdae76e1215e 116 uint8_t octet;
dudmuck 2:fdae76e1215e 117 } FSKRegRxBw_t;
dudmuck 2:fdae76e1215e 118
dudmuck 2:fdae76e1215e 119 typedef union {
dudmuck 2:fdae76e1215e 120 struct { // sx1272 register 0x14
dudmuck 2:fdae76e1215e 121 uint8_t OokPeakThreshStep : 3; // 0,1,2
dudmuck 2:fdae76e1215e 122 uint8_t OokThreshType : 2; // 3,4
dudmuck 2:fdae76e1215e 123 uint8_t BitSyncOn : 1; // 5
dudmuck 2:fdae76e1215e 124 uint8_t barker_en : 1; // 6
dudmuck 2:fdae76e1215e 125 uint8_t bsync_opt : 1; // 7 not used
dudmuck 2:fdae76e1215e 126 } bits;
dudmuck 2:fdae76e1215e 127 uint8_t octet;
dudmuck 2:fdae76e1215e 128 } FSKRegOokPeak_t; // DEMOD1 0x14
dudmuck 2:fdae76e1215e 129
dudmuck 2:fdae76e1215e 130 typedef union {
dudmuck 2:fdae76e1215e 131 struct { // sx1272 register 0x1f
dudmuck 2:fdae76e1215e 132 uint8_t PreambleDetectorTol : 5; // 0,1,2,3,4 allowed chip errors
dudmuck 2:fdae76e1215e 133 uint8_t PreambleDetectorSize : 2; // 5,6 00b=1bytes... 11b=4bytes
dudmuck 2:fdae76e1215e 134 uint8_t PreambleDetectorOn : 1; // 7
dudmuck 2:fdae76e1215e 135 } bits;
dudmuck 2:fdae76e1215e 136 uint8_t octet;
dudmuck 2:fdae76e1215e 137 } FSKRegPreambleDetect_t;
dudmuck 2:fdae76e1215e 138
dudmuck 2:fdae76e1215e 139 typedef union {
dudmuck 2:fdae76e1215e 140 struct { // sx1232 register 0x27
dudmuck 2:fdae76e1215e 141 uint8_t SyncSize : 3; // 0,1,2
dudmuck 2:fdae76e1215e 142 uint8_t FifoFillCondition : 1; // 3 rx fifo fill starting 0=start-on-sync
dudmuck 2:fdae76e1215e 143 uint8_t SyncOn : 1; // 4 enable pattern recognition
dudmuck 2:fdae76e1215e 144 uint8_t PreamblePolarity : 1; // 5 0=0xaa 1=0x55
dudmuck 2:fdae76e1215e 145 uint8_t AutoRestartRxMode : 2; // 6,7 00b=do not restart 10b=wait-for-pll
dudmuck 2:fdae76e1215e 146 } bits;
dudmuck 2:fdae76e1215e 147 uint8_t octet;
dudmuck 2:fdae76e1215e 148 } FSKRegSyncConfig_t;
dudmuck 2:fdae76e1215e 149
dudmuck 2:fdae76e1215e 150 typedef union {
dudmuck 2:fdae76e1215e 151 struct { // sx1232 register 0x30
dudmuck 2:fdae76e1215e 152 uint8_t CrCWhiteningType : 1; // 0 1=IBM-crc 0=ccitt-crc
dudmuck 2:fdae76e1215e 153 uint8_t AddressFiltering : 2; // 1,2 11b = two-byte nodeadrs at 0x2c->0x2f
dudmuck 2:fdae76e1215e 154 uint8_t CrcAutoClearOff : 1; // 3
dudmuck 2:fdae76e1215e 155 uint8_t CrcOn : 1; // 4
dudmuck 2:fdae76e1215e 156 uint8_t DcFree : 2; // 5,6
dudmuck 2:fdae76e1215e 157 uint8_t PacketFormatVariable : 1; // 7 1=variable length, 0=fixed
dudmuck 2:fdae76e1215e 158 } bits;
dudmuck 2:fdae76e1215e 159 uint8_t octet;
dudmuck 2:fdae76e1215e 160 } FSKRegPktConfig1_t;
dudmuck 2:fdae76e1215e 161
dudmuck 2:fdae76e1215e 162 typedef union {
dudmuck 2:fdae76e1215e 163 struct { // sx1272 register 0x31 and 0x32
dudmuck 2:fdae76e1215e 164 uint16_t PayloadLength : 11; // 0->10
dudmuck 2:fdae76e1215e 165 uint16_t BeaconOn : 1; // 11
dudmuck 2:fdae76e1215e 166 uint16_t IoHomePowerFrame : 1; // 12 CRC LFSR init: 0=0x1d0f, 1=0x0000=powerlink
dudmuck 2:fdae76e1215e 167 uint16_t IoHomeOn : 1; // 13
dudmuck 2:fdae76e1215e 168 uint16_t DataModePacket : 1; // 14 1=packet mode, 0=continuous mode
dudmuck 2:fdae76e1215e 169 uint16_t unused : 1; // 15
dudmuck 2:fdae76e1215e 170 } bits;
dudmuck 2:fdae76e1215e 171 uint16_t word;
dudmuck 2:fdae76e1215e 172 } FSKRegPktConfig2_t;
dudmuck 2:fdae76e1215e 173
dudmuck 2:fdae76e1215e 174 typedef union {
dudmuck 2:fdae76e1215e 175 struct { // sx1272 register 0x35
dudmuck 2:fdae76e1215e 176 uint8_t FifoThreshold : 6; // 0,1,2,3,4,5
dudmuck 2:fdae76e1215e 177 uint8_t unused : 1; // 6
dudmuck 2:fdae76e1215e 178 uint8_t TxStartCondition : 1; // 7 0=fifoThresh 1=fifoNotEmpty
dudmuck 2:fdae76e1215e 179 } bits;
dudmuck 2:fdae76e1215e 180 uint8_t octet;
dudmuck 2:fdae76e1215e 181 } FSKRegFifoThreshold_t;
dudmuck 2:fdae76e1215e 182
dudmuck 2:fdae76e1215e 183 typedef union {
dudmuck 2:fdae76e1215e 184 struct { // sx1272 register 0x36
dudmuck 2:fdae76e1215e 185 uint8_t FromTransmit : 1; // 0
dudmuck 2:fdae76e1215e 186 uint8_t FromIdle : 1; // 1
dudmuck 2:fdae76e1215e 187 uint8_t LowPowerSelection : 1; // 2
dudmuck 2:fdae76e1215e 188 uint8_t FromStart : 2; // 3,4
dudmuck 2:fdae76e1215e 189 uint8_t IdleMode : 1; // 5
dudmuck 2:fdae76e1215e 190 uint8_t SequencerStop : 1; // 6
dudmuck 2:fdae76e1215e 191 uint8_t SequencerStart : 1; // 7
dudmuck 2:fdae76e1215e 192 } bits;
dudmuck 2:fdae76e1215e 193 uint8_t octet;
dudmuck 2:fdae76e1215e 194 } FSKRegSeqConfig1_t; // @0x36
dudmuck 2:fdae76e1215e 195
dudmuck 2:fdae76e1215e 196 typedef union {
dudmuck 2:fdae76e1215e 197 struct { // sx1272 register 0x37
dudmuck 2:fdae76e1215e 198 uint8_t FromPacketReceived : 3; // 0,1,2
dudmuck 2:fdae76e1215e 199 uint8_t FromRxTimeout : 2; // 3,4
dudmuck 2:fdae76e1215e 200 uint8_t FromReceive : 3; // 5,6,7
dudmuck 2:fdae76e1215e 201 } bits;
dudmuck 2:fdae76e1215e 202 uint8_t octet;
dudmuck 2:fdae76e1215e 203 } RegSeqConfig2_t; // @0x37
dudmuck 2:fdae76e1215e 204
dudmuck 2:fdae76e1215e 205 typedef union {
dudmuck 2:fdae76e1215e 206 struct { // sx1272 register 0x38
dudmuck 2:fdae76e1215e 207 uint8_t timer2_resol : 2; // 0,1
dudmuck 2:fdae76e1215e 208 uint8_t timer1_resol : 2; // 2,3
dudmuck 2:fdae76e1215e 209 uint8_t force_hlm_irq : 1; // 4
dudmuck 2:fdae76e1215e 210 uint8_t hlm_started : 1; // 5
dudmuck 2:fdae76e1215e 211 uint8_t unused : 2; // 6,7
dudmuck 2:fdae76e1215e 212 } bits;
dudmuck 2:fdae76e1215e 213 uint8_t octet;
dudmuck 2:fdae76e1215e 214 } FSKRegTimerResol_t; // HL42 @0x38
dudmuck 2:fdae76e1215e 215
dudmuck 2:fdae76e1215e 216 typedef union {
dudmuck 2:fdae76e1215e 217 struct { // sx1272 register 0x3b
dudmuck 2:fdae76e1215e 218 uint8_t TempMonitorOff : 1; // 0
dudmuck 2:fdae76e1215e 219 uint8_t TempThreshold : 2; // 1,2
dudmuck 2:fdae76e1215e 220 uint8_t TempChange : 1; // 3 read-only
dudmuck 2:fdae76e1215e 221 uint8_t unused : 1; // 4
dudmuck 2:fdae76e1215e 222 uint8_t ImageCalRunning : 1; // 5 read-only
dudmuck 2:fdae76e1215e 223 uint8_t ImageCalStart : 1; // 6 write-only
dudmuck 2:fdae76e1215e 224 uint8_t AutoImageCalOn : 1; // 7
dudmuck 2:fdae76e1215e 225 } bits;
dudmuck 2:fdae76e1215e 226 uint8_t octet;
dudmuck 2:fdae76e1215e 227 } FSKRegImageCal_t; //
dudmuck 2:fdae76e1215e 228
dudmuck 2:fdae76e1215e 229 typedef union {
dudmuck 2:fdae76e1215e 230 struct { // sx1232 register 0x3e
dudmuck 2:fdae76e1215e 231 uint8_t SyncAddressMatch : 1; // 0
dudmuck 2:fdae76e1215e 232 uint8_t PreambleDetect : 1; // 1
dudmuck 2:fdae76e1215e 233 uint8_t Timeout : 1; // 2 rx-timeout
dudmuck 2:fdae76e1215e 234 uint8_t Rssi : 1; // 3
dudmuck 2:fdae76e1215e 235 uint8_t PllLock : 1; // 4
dudmuck 2:fdae76e1215e 236 uint8_t TxReady : 1; // 5
dudmuck 2:fdae76e1215e 237 uint8_t RxReady : 1; // 6
dudmuck 2:fdae76e1215e 238 uint8_t ModeReady : 1; // 7
dudmuck 2:fdae76e1215e 239 } bits;
dudmuck 2:fdae76e1215e 240 uint8_t octet;
dudmuck 2:fdae76e1215e 241 } FSKRegIrqFlags1_t; // STAT0
dudmuck 2:fdae76e1215e 242
dudmuck 2:fdae76e1215e 243 typedef union {
dudmuck 2:fdae76e1215e 244 struct { // sx1232 register 0x3f
dudmuck 2:fdae76e1215e 245 uint8_t LowBat : 1; // 0 "eol"
dudmuck 2:fdae76e1215e 246 uint8_t CrcOk : 1; // 1
dudmuck 2:fdae76e1215e 247 uint8_t PayloadReady : 1; // 2
dudmuck 2:fdae76e1215e 248 uint8_t PacketSent : 1; // 3
dudmuck 2:fdae76e1215e 249 uint8_t FifoOverrun : 1; // 4
dudmuck 2:fdae76e1215e 250 uint8_t FifoLevel : 1; // 5
dudmuck 2:fdae76e1215e 251 uint8_t FifoEmpty : 1; // 6
dudmuck 2:fdae76e1215e 252 uint8_t FifoFull : 1; // 7
dudmuck 2:fdae76e1215e 253 } bits;
dudmuck 2:fdae76e1215e 254 uint8_t octet;
dudmuck 2:fdae76e1215e 255 } FSKRegIrqFlags2_t; // STAT1 @0x3f
dudmuck 2:fdae76e1215e 256
dudmuck 2:fdae76e1215e 257 //class SX127x_fsk : public SX127x
dudmuck 2:fdae76e1215e 258 class SX127x_fsk {
dudmuck 2:fdae76e1215e 259 public:
dudmuck 2:fdae76e1215e 260 //SX127x_fsk(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName rst, PinName dio_0, PinName dio_1, PinName fem_ctx, PinName fem_cps);
dudmuck 2:fdae76e1215e 261 SX127x_fsk(SX127x r);
dudmuck 2:fdae76e1215e 262
dudmuck 2:fdae76e1215e 263 ~SX127x_fsk();
dudmuck 2:fdae76e1215e 264
dudmuck 2:fdae76e1215e 265 /** changes from LoRa mode to FSK mdoe */
dudmuck 2:fdae76e1215e 266 void enable(void);
dudmuck 2:fdae76e1215e 267
dudmuck 2:fdae76e1215e 268 /** fills radio FIFO with payload contents, prior to transmission
dudmuck 2:fdae76e1215e 269 * @param len count of bytes to put into FIFO
dudmuck 2:fdae76e1215e 270 * @note tx_buf[] should contain desired payload (to send) prior to calling
dudmuck 2:fdae76e1215e 271 */
dudmuck 2:fdae76e1215e 272 void write_fifo(uint8_t len);
dudmuck 2:fdae76e1215e 273
dudmuck 2:fdae76e1215e 274 void start_tx(uint16_t len);
dudmuck 2:fdae76e1215e 275
dudmuck 2:fdae76e1215e 276 void start_rx(void);
dudmuck 2:fdae76e1215e 277
dudmuck 2:fdae76e1215e 278 uint32_t get_rx_bw_hz(uint8_t addr);
dudmuck 2:fdae76e1215e 279
dudmuck 2:fdae76e1215e 280 /** bw_hz: single side (ssb) */
dudmuck 2:fdae76e1215e 281 void set_rx_dcc_bw_hz(uint32_t bw_hz, char afc);
dudmuck 2:fdae76e1215e 282
dudmuck 2:fdae76e1215e 283 service_action_e service(void); // (SLIH) ISR bottom half
dudmuck 2:fdae76e1215e 284
dudmuck 2:fdae76e1215e 285 FSKRegRxConfig_t RegRxConfig; // 0x0d
dudmuck 2:fdae76e1215e 286 FSKRegRssiConfig_t RegRssiConfig; // 0x0e
dudmuck 2:fdae76e1215e 287 uint8_t RegRssiThresh; // 0x10
dudmuck 2:fdae76e1215e 288 FSKRegRxBw_t RegRxBw; // 0x12
dudmuck 2:fdae76e1215e 289 FSKRegRxBw_t RegAfcBw; // 0x13
dudmuck 2:fdae76e1215e 290 FSKRegOokPeak_t RegOokPeak; // 0x14
dudmuck 2:fdae76e1215e 291 FSKRegAfcFei_t RegAfcFei; // 0x1a
dudmuck 2:fdae76e1215e 292 FSKRegPreambleDetect_t RegPreambleDetect; // 0x1f
dudmuck 2:fdae76e1215e 293 FSKRegSyncConfig_t RegSyncConfig; // 0x27
dudmuck 2:fdae76e1215e 294 FSKRegPktConfig1_t RegPktConfig1; // 0x30
dudmuck 2:fdae76e1215e 295 FSKRegPktConfig2_t RegPktConfig2; // 0x31 -> 0x32
dudmuck 2:fdae76e1215e 296 FSKRegFifoThreshold_t RegFifoThreshold; // 0x35
dudmuck 2:fdae76e1215e 297 FSKRegSeqConfig1_t RegSeqConfig1; // 0x36
dudmuck 2:fdae76e1215e 298 RegSeqConfig2_t RegSeqConfig2; // 0x37
dudmuck 2:fdae76e1215e 299 FSKRegTimerResol_t RegTimerResol; // 0x38
dudmuck 2:fdae76e1215e 300 FSKRegImageCal_t RegImageCal; // 0x3b
dudmuck 2:fdae76e1215e 301
dudmuck 2:fdae76e1215e 302 private:
dudmuck 2:fdae76e1215e 303 uint32_t ComputeRxBw( uint8_t mantisse, uint8_t exponent );
dudmuck 2:fdae76e1215e 304 void ComputeRxBwMantExp( uint32_t rxBwValue, uint8_t* mantisse, uint8_t* exponent );
dudmuck 2:fdae76e1215e 305 SX127x m_xcvr;
dudmuck 2:fdae76e1215e 306 };