operate LoRa radio over I2C

Dependencies:   TimeoutAbs lib_i2c_slave_block sx12xx_hal

radio chip selection

Radio chip driver is not included, allowing choice of radio device.
If you're using SX1272 or SX1276, then import sx127x driver into your program.
if you're using SX1261 or SX1262, then import sx126x driver into your program.
if you're using SX1280, then import sx1280 driver into your program.
If you're using NAmote72 or Murata discovery, then you must import only sx127x driver.

This project is used as slave device with i2c_lora_master on raspberry pi. This i2c_lora_slave offloads the real-time requirements onto microcontroller. Also permits multiple slave radio devices connected to master. Radio MAC layer exists on I2C master, along with application layer.

If beacon operation is enabled, I2C functions which access radio chip are blocked while beacon is loaded and transmitted.
See lib_i2c_slave_block for wiring connections.

Committer:
Wayne Roberts
Date:
Fri Feb 08 11:58:09 2019 -0800
Revision:
0:9eb5b8bf9f7b
first commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wayne Roberts 0:9eb5b8bf9f7b 1 #include "radio_device.h"
Wayne Roberts 0:9eb5b8bf9f7b 2 #ifdef SX127x_H
Wayne Roberts 0:9eb5b8bf9f7b 3 void get_opmode()
Wayne Roberts 0:9eb5b8bf9f7b 4 {
Wayne Roberts 0:9eb5b8bf9f7b 5 Radio::radio.RegOpMode.octet = Radio::radio.read_reg(REG_OPMODE);
Wayne Roberts 0:9eb5b8bf9f7b 6
Wayne Roberts 0:9eb5b8bf9f7b 7 switch (Radio::radio.RegOpMode.bits.Mode) {
Wayne Roberts 0:9eb5b8bf9f7b 8 case RF_OPMODE_SLEEP:
Wayne Roberts 0:9eb5b8bf9f7b 9 irq.buf[1] = OPMODE_SLEEP;
Wayne Roberts 0:9eb5b8bf9f7b 10 break;
Wayne Roberts 0:9eb5b8bf9f7b 11 case RF_OPMODE_STANDBY:
Wayne Roberts 0:9eb5b8bf9f7b 12 irq.buf[1] = OPMODE_STANDBY;
Wayne Roberts 0:9eb5b8bf9f7b 13 break;
Wayne Roberts 0:9eb5b8bf9f7b 14 case RF_OPMODE_TRANSMITTER:
Wayne Roberts 0:9eb5b8bf9f7b 15 irq.buf[1] = OPMODE_TX;
Wayne Roberts 0:9eb5b8bf9f7b 16 break;
Wayne Roberts 0:9eb5b8bf9f7b 17 case RF_OPMODE_SYNTHESIZER_TX:
Wayne Roberts 0:9eb5b8bf9f7b 18 case RF_OPMODE_SYNTHESIZER_RX:
Wayne Roberts 0:9eb5b8bf9f7b 19 irq.buf[1] = OPMODE_FS;
Wayne Roberts 0:9eb5b8bf9f7b 20 break;
Wayne Roberts 0:9eb5b8bf9f7b 21 case RF_OPMODE_RECEIVER:
Wayne Roberts 0:9eb5b8bf9f7b 22 case RF_OPMODE_RECEIVER_SINGLE:
Wayne Roberts 0:9eb5b8bf9f7b 23 case RF_OPMODE_CAD:
Wayne Roberts 0:9eb5b8bf9f7b 24 irq.buf[1] = OPMODE_RX;
Wayne Roberts 0:9eb5b8bf9f7b 25 break;
Wayne Roberts 0:9eb5b8bf9f7b 26 default:
Wayne Roberts 0:9eb5b8bf9f7b 27 irq.buf[1] = OPMODE_FAIL;
Wayne Roberts 0:9eb5b8bf9f7b 28 break;
Wayne Roberts 0:9eb5b8bf9f7b 29 }
Wayne Roberts 0:9eb5b8bf9f7b 30
Wayne Roberts 0:9eb5b8bf9f7b 31 irq.fields.flags.irq_type = IRQ_TYPE_OPMODE;
Wayne Roberts 0:9eb5b8bf9f7b 32 irqOutPin = 1;
Wayne Roberts 0:9eb5b8bf9f7b 33 }
Wayne Roberts 0:9eb5b8bf9f7b 34
Wayne Roberts 0:9eb5b8bf9f7b 35 void get_lora_packet()
Wayne Roberts 0:9eb5b8bf9f7b 36 {
Wayne Roberts 0:9eb5b8bf9f7b 37 uint32_t val;
Wayne Roberts 0:9eb5b8bf9f7b 38 //LoRaPacketConfig(unsigned preambleLen, bool fixLen, bool crcOn, bool invIQ)
Wayne Roberts 0:9eb5b8bf9f7b 39 Radio::lora.RegPreamble = Radio::radio.read_u16(REG_LR_PREAMBLEMSB);
Wayne Roberts 0:9eb5b8bf9f7b 40 val = Radio::lora.RegPreamble;
Wayne Roberts 0:9eb5b8bf9f7b 41 irq.buf[1] = val & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 42 val >>= 8;
Wayne Roberts 0:9eb5b8bf9f7b 43 irq.buf[2] = val & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 44
Wayne Roberts 0:9eb5b8bf9f7b 45 irq.buf[3] = Radio::lora.getHeaderMode();
Wayne Roberts 0:9eb5b8bf9f7b 46
Wayne Roberts 0:9eb5b8bf9f7b 47 Radio::lora.RegTest33.octet = Radio::radio.read_reg(REG_LR_TEST33);
Wayne Roberts 0:9eb5b8bf9f7b 48 irq.buf[4] = Radio::lora.RegTest33.bits.invert_i_q;
Wayne Roberts 0:9eb5b8bf9f7b 49
Wayne Roberts 0:9eb5b8bf9f7b 50 irq.buf[5] = Radio::lora.getRxPayloadCrcOn();
Wayne Roberts 0:9eb5b8bf9f7b 51
Wayne Roberts 0:9eb5b8bf9f7b 52 irq.fields.flags.irq_type = IRQ_TYPE_LORA_PKT;
Wayne Roberts 0:9eb5b8bf9f7b 53 irqOutPin = 1;
Wayne Roberts 0:9eb5b8bf9f7b 54 }
Wayne Roberts 0:9eb5b8bf9f7b 55
Wayne Roberts 0:9eb5b8bf9f7b 56 static const unsigned* lora_bw_khz;
Wayne Roberts 0:9eb5b8bf9f7b 57
Wayne Roberts 0:9eb5b8bf9f7b 58 void get_lora_modem()
Wayne Roberts 0:9eb5b8bf9f7b 59 {
Wayne Roberts 0:9eb5b8bf9f7b 60 uint16_t khz = lora_bw_khz[Radio::lora.getBw()];
Wayne Roberts 0:9eb5b8bf9f7b 61
Wayne Roberts 0:9eb5b8bf9f7b 62 irq.buf[1] = khz & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 63 khz >>= 8;
Wayne Roberts 0:9eb5b8bf9f7b 64 irq.buf[2] = khz & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 65
Wayne Roberts 0:9eb5b8bf9f7b 66 //LoRaModemConfig(unsigned KHz, unsigned sf, unsigned cr)
Wayne Roberts 0:9eb5b8bf9f7b 67 irq.buf[3] = Radio::lora.getSf();
Wayne Roberts 0:9eb5b8bf9f7b 68 irq.buf[4] = Radio::lora.getCodingRate(false);
Wayne Roberts 0:9eb5b8bf9f7b 69
Wayne Roberts 0:9eb5b8bf9f7b 70 irq.fields.flags.irq_type = IRQ_TYPE_LORA_MODEM;
Wayne Roberts 0:9eb5b8bf9f7b 71 irqOutPin = 1;
Wayne Roberts 0:9eb5b8bf9f7b 72 }
Wayne Roberts 0:9eb5b8bf9f7b 73
Wayne Roberts 0:9eb5b8bf9f7b 74 void get_tx_dbm()
Wayne Roberts 0:9eb5b8bf9f7b 75 {
Wayne Roberts 0:9eb5b8bf9f7b 76 int8_t dbm;
Wayne Roberts 0:9eb5b8bf9f7b 77 RegPdsTrim1_t pds_trim;
Wayne Roberts 0:9eb5b8bf9f7b 78 uint8_t adr, pa_test_adr;
Wayne Roberts 0:9eb5b8bf9f7b 79
Wayne Roberts 0:9eb5b8bf9f7b 80 if (Radio::radio.type == SX1276) {
Wayne Roberts 0:9eb5b8bf9f7b 81 adr = REG_PDSTRIM1_SX1276;
Wayne Roberts 0:9eb5b8bf9f7b 82 pa_test_adr = REG_PATEST_SX1276;
Wayne Roberts 0:9eb5b8bf9f7b 83 } else {
Wayne Roberts 0:9eb5b8bf9f7b 84 adr = REG_PDSTRIM1_SX1272;
Wayne Roberts 0:9eb5b8bf9f7b 85 pa_test_adr = REG_PATEST_SX1272;
Wayne Roberts 0:9eb5b8bf9f7b 86 }
Wayne Roberts 0:9eb5b8bf9f7b 87
Wayne Roberts 0:9eb5b8bf9f7b 88 if (Radio::radio.read_reg(pa_test_adr) & 0x20) {
Wayne Roberts 0:9eb5b8bf9f7b 89 pds_trim.octet = Radio::radio.read_reg(adr);
Wayne Roberts 0:9eb5b8bf9f7b 90
Wayne Roberts 0:9eb5b8bf9f7b 91 Radio::radio.RegPaConfig.octet = Radio::radio.read_reg(REG_PACONFIG);
Wayne Roberts 0:9eb5b8bf9f7b 92 if (Radio::radio.RegPaConfig.bits.PaSelect) {
Wayne Roberts 0:9eb5b8bf9f7b 93 dbm = Radio::radio.RegPaConfig.bits.OutputPower + pds_trim.bits.prog_txdac - 2;
Wayne Roberts 0:9eb5b8bf9f7b 94 } else {
Wayne Roberts 0:9eb5b8bf9f7b 95 dbm = Radio::radio.RegPaConfig.bits.OutputPower - 1;
Wayne Roberts 0:9eb5b8bf9f7b 96 }
Wayne Roberts 0:9eb5b8bf9f7b 97 } else {
Wayne Roberts 0:9eb5b8bf9f7b 98 dbm = PA_OFF_DBM;
Wayne Roberts 0:9eb5b8bf9f7b 99 }
Wayne Roberts 0:9eb5b8bf9f7b 100
Wayne Roberts 0:9eb5b8bf9f7b 101 irq.buf[1] = dbm;
Wayne Roberts 0:9eb5b8bf9f7b 102 irq.fields.flags.irq_type = IRQ_TYPE_TXDBM;
Wayne Roberts 0:9eb5b8bf9f7b 103 irqOutPin = 1;
Wayne Roberts 0:9eb5b8bf9f7b 104 }
Wayne Roberts 0:9eb5b8bf9f7b 105
Wayne Roberts 0:9eb5b8bf9f7b 106 void get_fsk_sync()
Wayne Roberts 0:9eb5b8bf9f7b 107 {
Wayne Roberts 0:9eb5b8bf9f7b 108 unsigned n, idx = 1;
Wayne Roberts 0:9eb5b8bf9f7b 109
Wayne Roberts 0:9eb5b8bf9f7b 110 Radio::fsk.RegSyncConfig.octet = Radio::radio.read_reg(REG_FSK_SYNCCONFIG);
Wayne Roberts 0:9eb5b8bf9f7b 111
Wayne Roberts 0:9eb5b8bf9f7b 112 irq.buf[idx++] = Radio::fsk.RegSyncConfig.bits.SyncSize + 1;
Wayne Roberts 0:9eb5b8bf9f7b 113 for (n = 0; n < irq.buf[2]; n++) {
Wayne Roberts 0:9eb5b8bf9f7b 114 irq.buf[idx++] = Radio::radio.read_reg(REG_FSK_SYNCVALUE1+n);
Wayne Roberts 0:9eb5b8bf9f7b 115 }
Wayne Roberts 0:9eb5b8bf9f7b 116
Wayne Roberts 0:9eb5b8bf9f7b 117 irq.fields.flags.irq_type = IRQ_TYPE_FSK_SYNC;
Wayne Roberts 0:9eb5b8bf9f7b 118 irqOutPin = 1;
Wayne Roberts 0:9eb5b8bf9f7b 119 }
Wayne Roberts 0:9eb5b8bf9f7b 120
Wayne Roberts 0:9eb5b8bf9f7b 121 static unsigned bw_read(uint8_t regAddr)
Wayne Roberts 0:9eb5b8bf9f7b 122 {
Wayne Roberts 0:9eb5b8bf9f7b 123 RegRxBw_t reg_bw;
Wayne Roberts 0:9eb5b8bf9f7b 124
Wayne Roberts 0:9eb5b8bf9f7b 125 reg_bw.octet = Radio::radio.read_reg(regAddr);
Wayne Roberts 0:9eb5b8bf9f7b 126
Wayne Roberts 0:9eb5b8bf9f7b 127 switch (reg_bw.bits.Exponent) {
Wayne Roberts 0:9eb5b8bf9f7b 128 case 7:
Wayne Roberts 0:9eb5b8bf9f7b 129 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 0:9eb5b8bf9f7b 130 return 0;
Wayne Roberts 0:9eb5b8bf9f7b 131 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 0:9eb5b8bf9f7b 132 return 1;
Wayne Roberts 0:9eb5b8bf9f7b 133 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 0:9eb5b8bf9f7b 134 return 2;
Wayne Roberts 0:9eb5b8bf9f7b 135 break;
Wayne Roberts 0:9eb5b8bf9f7b 136 case 6:
Wayne Roberts 0:9eb5b8bf9f7b 137 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 0:9eb5b8bf9f7b 138 return 3;
Wayne Roberts 0:9eb5b8bf9f7b 139 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 0:9eb5b8bf9f7b 140 return 4;
Wayne Roberts 0:9eb5b8bf9f7b 141 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 0:9eb5b8bf9f7b 142 return 5;
Wayne Roberts 0:9eb5b8bf9f7b 143 break;
Wayne Roberts 0:9eb5b8bf9f7b 144 case 5:
Wayne Roberts 0:9eb5b8bf9f7b 145 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 0:9eb5b8bf9f7b 146 return 6;
Wayne Roberts 0:9eb5b8bf9f7b 147 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 0:9eb5b8bf9f7b 148 return 7;
Wayne Roberts 0:9eb5b8bf9f7b 149 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 0:9eb5b8bf9f7b 150 return 8;
Wayne Roberts 0:9eb5b8bf9f7b 151 break;
Wayne Roberts 0:9eb5b8bf9f7b 152 case 4:
Wayne Roberts 0:9eb5b8bf9f7b 153 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 0:9eb5b8bf9f7b 154 return 9;
Wayne Roberts 0:9eb5b8bf9f7b 155 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 0:9eb5b8bf9f7b 156 return 10;
Wayne Roberts 0:9eb5b8bf9f7b 157 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 0:9eb5b8bf9f7b 158 return 11;
Wayne Roberts 0:9eb5b8bf9f7b 159 break;
Wayne Roberts 0:9eb5b8bf9f7b 160 case 3:
Wayne Roberts 0:9eb5b8bf9f7b 161 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 0:9eb5b8bf9f7b 162 return 12;
Wayne Roberts 0:9eb5b8bf9f7b 163 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 0:9eb5b8bf9f7b 164 return 13;
Wayne Roberts 0:9eb5b8bf9f7b 165 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 0:9eb5b8bf9f7b 166 return 14;
Wayne Roberts 0:9eb5b8bf9f7b 167 break;
Wayne Roberts 0:9eb5b8bf9f7b 168 case 2:
Wayne Roberts 0:9eb5b8bf9f7b 169 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 0:9eb5b8bf9f7b 170 return 15;
Wayne Roberts 0:9eb5b8bf9f7b 171 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 0:9eb5b8bf9f7b 172 return 16;
Wayne Roberts 0:9eb5b8bf9f7b 173 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 0:9eb5b8bf9f7b 174 return 17;
Wayne Roberts 0:9eb5b8bf9f7b 175 break;
Wayne Roberts 0:9eb5b8bf9f7b 176 case 1:
Wayne Roberts 0:9eb5b8bf9f7b 177 if (reg_bw.bits.Mantissa == 2)
Wayne Roberts 0:9eb5b8bf9f7b 178 return 18;
Wayne Roberts 0:9eb5b8bf9f7b 179 if (reg_bw.bits.Mantissa == 1)
Wayne Roberts 0:9eb5b8bf9f7b 180 return 19;
Wayne Roberts 0:9eb5b8bf9f7b 181 if (reg_bw.bits.Mantissa == 0)
Wayne Roberts 0:9eb5b8bf9f7b 182 return 20;
Wayne Roberts 0:9eb5b8bf9f7b 183 break;
Wayne Roberts 0:9eb5b8bf9f7b 184 }
Wayne Roberts 0:9eb5b8bf9f7b 185
Wayne Roberts 0:9eb5b8bf9f7b 186 return 21;
Wayne Roberts 0:9eb5b8bf9f7b 187 }
Wayne Roberts 0:9eb5b8bf9f7b 188
Wayne Roberts 0:9eb5b8bf9f7b 189 static const unsigned rxbws[] = {
Wayne Roberts 0:9eb5b8bf9f7b 190 2600, // 0
Wayne Roberts 0:9eb5b8bf9f7b 191 3100, // 1
Wayne Roberts 0:9eb5b8bf9f7b 192 3900, // 2
Wayne Roberts 0:9eb5b8bf9f7b 193 5200, // 3
Wayne Roberts 0:9eb5b8bf9f7b 194 6300, // 4
Wayne Roberts 0:9eb5b8bf9f7b 195 7800, // 5
Wayne Roberts 0:9eb5b8bf9f7b 196 10400, // 6
Wayne Roberts 0:9eb5b8bf9f7b 197 12500, // 7
Wayne Roberts 0:9eb5b8bf9f7b 198 15600, // 8
Wayne Roberts 0:9eb5b8bf9f7b 199 20800, // 9
Wayne Roberts 0:9eb5b8bf9f7b 200 25000, // 10
Wayne Roberts 0:9eb5b8bf9f7b 201 31300, // 11
Wayne Roberts 0:9eb5b8bf9f7b 202 41700, // 12
Wayne Roberts 0:9eb5b8bf9f7b 203 50000, // 13
Wayne Roberts 0:9eb5b8bf9f7b 204 62500, // 14
Wayne Roberts 0:9eb5b8bf9f7b 205 83300, // 15
Wayne Roberts 0:9eb5b8bf9f7b 206 100000, // 16
Wayne Roberts 0:9eb5b8bf9f7b 207 125000, // 17
Wayne Roberts 0:9eb5b8bf9f7b 208 166700, // 18
Wayne Roberts 0:9eb5b8bf9f7b 209 200000, // 19
Wayne Roberts 0:9eb5b8bf9f7b 210 250000 // 20
Wayne Roberts 0:9eb5b8bf9f7b 211 };
Wayne Roberts 0:9eb5b8bf9f7b 212
Wayne Roberts 0:9eb5b8bf9f7b 213 void get_fsk_modem()
Wayne Roberts 0:9eb5b8bf9f7b 214 {
Wayne Roberts 0:9eb5b8bf9f7b 215 uint32_t u32;
Wayne Roberts 0:9eb5b8bf9f7b 216 // GFSKModemConfig(unsigned bps, unsigned bwKHz, unsigned fdev_hz)
Wayne Roberts 0:9eb5b8bf9f7b 217
Wayne Roberts 0:9eb5b8bf9f7b 218 u32 = Radio::fsk.get_bitrate();
Wayne Roberts 0:9eb5b8bf9f7b 219 irq.buf[1] = u32 & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 220 u32 >>= 8;
Wayne Roberts 0:9eb5b8bf9f7b 221 irq.buf[2] = u32 & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 222 u32 >>= 8;
Wayne Roberts 0:9eb5b8bf9f7b 223 irq.buf[3] = u32 & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 224 u32 >>= 8;
Wayne Roberts 0:9eb5b8bf9f7b 225 irq.buf[4] = u32 & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 226
Wayne Roberts 0:9eb5b8bf9f7b 227 u32 = rxbws[bw_read(REG_FSK_RXBW)];
Wayne Roberts 0:9eb5b8bf9f7b 228 irq.buf[5] = u32 & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 229 u32 >>= 8;
Wayne Roberts 0:9eb5b8bf9f7b 230 irq.buf[6] = u32 & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 231
Wayne Roberts 0:9eb5b8bf9f7b 232 u32 = Radio::fsk.get_tx_fdev_hz();
Wayne Roberts 0:9eb5b8bf9f7b 233 irq.buf[7] = u32 & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 234 u32 >>= 8;
Wayne Roberts 0:9eb5b8bf9f7b 235 irq.buf[8] = u32 & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 236 u32 >>= 8;
Wayne Roberts 0:9eb5b8bf9f7b 237 irq.buf[9] = u32 & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 238 u32 >>= 8;
Wayne Roberts 0:9eb5b8bf9f7b 239 irq.buf[10] = u32 & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 240
Wayne Roberts 0:9eb5b8bf9f7b 241 irq.fields.flags.irq_type = IRQ_TYPE_FSK_MODEM;
Wayne Roberts 0:9eb5b8bf9f7b 242 irqOutPin = 1;
Wayne Roberts 0:9eb5b8bf9f7b 243 }
Wayne Roberts 0:9eb5b8bf9f7b 244
Wayne Roberts 0:9eb5b8bf9f7b 245 void get_fsk_packet()
Wayne Roberts 0:9eb5b8bf9f7b 246 {
Wayne Roberts 0:9eb5b8bf9f7b 247 // GFSKPacketConfig(unsigned preambleLen, bool fixLen, bool crcOn)
Wayne Roberts 0:9eb5b8bf9f7b 248 unsigned pl = Radio::radio.read_u16(REG_FSK_PREAMBLEMSB);
Wayne Roberts 0:9eb5b8bf9f7b 249 irq.buf[1] = pl & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 250 pl >>= 8;
Wayne Roberts 0:9eb5b8bf9f7b 251 irq.buf[2] = pl & 0xff;
Wayne Roberts 0:9eb5b8bf9f7b 252
Wayne Roberts 0:9eb5b8bf9f7b 253 Radio::fsk.RegPktConfig1.octet = Radio::radio.read_reg(REG_FSK_PACKETCONFIG1);
Wayne Roberts 0:9eb5b8bf9f7b 254 irq.buf[3] = Radio::fsk.RegPktConfig1.bits.PacketFormatVariable;
Wayne Roberts 0:9eb5b8bf9f7b 255
Wayne Roberts 0:9eb5b8bf9f7b 256 Radio::fsk.RegPktConfig1.octet = Radio::radio.read_reg(REG_FSK_PACKETCONFIG1);
Wayne Roberts 0:9eb5b8bf9f7b 257 irq.buf[4] = Radio::fsk.RegPktConfig1.bits.CrcOn;
Wayne Roberts 0:9eb5b8bf9f7b 258
Wayne Roberts 0:9eb5b8bf9f7b 259 irq.fields.flags.irq_type = IRQ_TYPE_FSK_PKT;
Wayne Roberts 0:9eb5b8bf9f7b 260 irqOutPin = 1;
Wayne Roberts 0:9eb5b8bf9f7b 261 }
Wayne Roberts 0:9eb5b8bf9f7b 262
Wayne Roberts 0:9eb5b8bf9f7b 263 void radio_reset()
Wayne Roberts 0:9eb5b8bf9f7b 264 {
Wayne Roberts 0:9eb5b8bf9f7b 265 Radio::radio.hw_reset();
Wayne Roberts 0:9eb5b8bf9f7b 266 }
Wayne Roberts 0:9eb5b8bf9f7b 267
Wayne Roberts 0:9eb5b8bf9f7b 268
Wayne Roberts 0:9eb5b8bf9f7b 269 static const unsigned lora_bw_khz_1276[] = {
Wayne Roberts 0:9eb5b8bf9f7b 270 8, // 0
Wayne Roberts 0:9eb5b8bf9f7b 271 10, // 1
Wayne Roberts 0:9eb5b8bf9f7b 272 16, // 2
Wayne Roberts 0:9eb5b8bf9f7b 273 21, // 3
Wayne Roberts 0:9eb5b8bf9f7b 274 31, // 4
Wayne Roberts 0:9eb5b8bf9f7b 275 42, // 5
Wayne Roberts 0:9eb5b8bf9f7b 276 63, // 6
Wayne Roberts 0:9eb5b8bf9f7b 277 125, // 7
Wayne Roberts 0:9eb5b8bf9f7b 278 250, // 8
Wayne Roberts 0:9eb5b8bf9f7b 279 500 // 9
Wayne Roberts 0:9eb5b8bf9f7b 280 };
Wayne Roberts 0:9eb5b8bf9f7b 281 static const unsigned lora_bw_khz_1272[] = {
Wayne Roberts 0:9eb5b8bf9f7b 282 125, // 0
Wayne Roberts 0:9eb5b8bf9f7b 283 250, // 1
Wayne Roberts 0:9eb5b8bf9f7b 284 500 // 2
Wayne Roberts 0:9eb5b8bf9f7b 285 };
Wayne Roberts 0:9eb5b8bf9f7b 286
Wayne Roberts 0:9eb5b8bf9f7b 287 void radio_device_init()
Wayne Roberts 0:9eb5b8bf9f7b 288 {
Wayne Roberts 0:9eb5b8bf9f7b 289 if (Radio::radio.type == SX1276) {
Wayne Roberts 0:9eb5b8bf9f7b 290 lora_bw_khz = lora_bw_khz_1276;
Wayne Roberts 0:9eb5b8bf9f7b 291 } else if (Radio::radio.type == SX1272) {
Wayne Roberts 0:9eb5b8bf9f7b 292 lora_bw_khz = lora_bw_khz_1272;
Wayne Roberts 0:9eb5b8bf9f7b 293 }
Wayne Roberts 0:9eb5b8bf9f7b 294 }
Wayne Roberts 0:9eb5b8bf9f7b 295
Wayne Roberts 0:9eb5b8bf9f7b 296
Wayne Roberts 0:9eb5b8bf9f7b 297 #endif /* ..SX127x_H */