1
Diff: radio_sx128x.cpp
- Revision:
- 1:e79b0a55135f
- Parent:
- 0:9c052ff8dd6a
- Child:
- 5:ab124d3842a8
diff -r 9c052ff8dd6a -r e79b0a55135f radio_sx128x.cpp --- a/radio_sx128x.cpp Thu Jul 05 17:31:54 2018 -0700 +++ b/radio_sx128x.cpp Mon Jul 16 11:15:59 2018 -0700 @@ -4,16 +4,16 @@ #include <float.h> #ifdef TARGET_FF_ARDUINO /* pins of SX126xDVK1xAS board */ + #define NRST_PIN A0 SPIu spi(D11, D12, D13); // mosi, miso, sclk // spi, nss, busy, dio1 - SX128x Radio::radio(spi, D7, D3, D5 ); + SX128x Radio::radio(spi, D7, D3, D5, NRST_PIN); #define LED_ON 1 #define LED_OFF 0 DigitalOut tx_led(A4); DigitalOut rx_led(A5); - #define NRST_PIN A0 DigitalOut ant_sw(A3); DigitalOut cps(D6); // SE2436L @@ -44,7 +44,6 @@ LowPowerTimer Radio::lpt; -RadioModems_t Radio::_m_; PacketParams_t Radio::ppGFSK; PacketParams_t Radio::ppLORA; @@ -109,8 +108,8 @@ LoRaPktPar1_t LoRaPktPar1; LoRaPktPar1.octet = radio.readReg(REG_ADDR_LORA_PKTPAR1, 1); mpLORA.lora.codingRate = LoRaPktPar1.bits.coding_rate; - ppLORA.lora.InvertIQ = LoRaPktPar1.bits.rxinvert_iq; - ppLORA.lora.HeaderType = LoRaPktPar1.bits.implicit_header; + ppLORA.lora.InvertIQ = LoRaPktPar1.octet & LORA_IQ_STD; // LoRaPktPar1.bits.rxinvert_iq + ppLORA.lora.HeaderType = LoRaPktPar1.bits.implicit_header ? IMPLICIT_HEADER : EXPLICIT_HEADER; // LoRaPktPar1.bits.ppm_offset } @@ -317,13 +316,14 @@ int Radio::Send(uint8_t size, timestamp_t maxListenTime, timestamp_t channelFreeTime, int rssiThresh) { uint8_t buf[8]; + uint8_t pktType = radio.getPacketType(); - if (_m_ == MODEM_FSK) { + if (pktType == PACKET_TYPE_LORA) { + ppLORA.lora.PayloadLength = size; + radio.xfer(OPCODE_SET_PACKET_PARAMS, 5, 0, ppLORA.buf); + } else if (pktType == PACKET_TYPE_GFSK) { ppGFSK.gfskFLRC.PayloadLength = size; radio.xfer(OPCODE_SET_PACKET_PARAMS, 7, 0, ppGFSK.buf); - } else if (_m_ == MODEM_LORA) { - ppLORA.lora.PayloadLength = size; - radio.xfer(OPCODE_SET_PACKET_PARAMS, 5, 0, ppLORA.buf); } if (maxListenTime > 0) { @@ -394,8 +394,8 @@ { LoRaPktPar1.octet = radio.readReg(REG_ADDR_LORA_PKTPAR1, 1); LowDatarateOptimize = LoRaPktPar1.bits.ppm_offset ? 1 : 0; - ppLORA.lora.HeaderType = LoRaPktPar1.bits.implicit_header; - ppLORA.lora.InvertIQ = LoRaPktPar1.bits.rxinvert_iq; + ppLORA.lora.HeaderType = LoRaPktPar1.bits.implicit_header ? IMPLICIT_HEADER : EXPLICIT_HEADER; + ppLORA.lora.InvertIQ = LoRaPktPar1.octet & LORA_IQ_STD; // LoRaPktPar1.bits.rxinvert_iq mpLORA.lora.codingRate = LoRaPktPar1.bits.coding_rate; } @@ -528,14 +528,24 @@ void Radio::LoRaModemConfig(unsigned bwKHz, uint8_t sf, uint8_t cr) { - if (bwKHz > 800) + unsigned use; + + if (radio.getPacketType() != PACKET_TYPE_LORA) + radio.setPacketType(PACKET_TYPE_LORA); + + if (bwKHz > 800) { mpLORA.lora.bandwidth = LORA_BW_1600; - if (bwKHz > 400) + use = 1600; + } if (bwKHz > 400) { mpLORA.lora.bandwidth = LORA_BW_800; - if (bwKHz > 200) + use = 800; + } if (bwKHz > 200) { mpLORA.lora.bandwidth = LORA_BW_400; - else + use = 400; + } else { mpLORA.lora.bandwidth = LORA_BW_200; + use = 200; + } mpLORA.lora.codingRate = cr; @@ -546,6 +556,9 @@ void Radio::LoRaPacketConfig(unsigned preambleLen, bool fixLen, bool crcOn, bool invIQ) { + if (radio.getPacketType() != PACKET_TYPE_LORA) + radio.setPacketType(PACKET_TYPE_LORA); + ppLORA.lora.PreambleLength = preambleLen; ppLORA.lora.HeaderType = fixLen ? IMPLICIT_HEADER : EXPLICIT_HEADER; ppLORA.lora.crc = crcOn ? LORA_CRC_ENABLE : LORA_CRC_DISABLE; @@ -604,13 +617,14 @@ radio.xfer(OPCODE_SET_TX_CARRIER, 0, 0, NULL); } -void Radio::SetRxMaxPayloadLength(RadioModems_t modem, uint8_t max) +void Radio::SetRxMaxPayloadLength(uint8_t max) { - if (_m_ == MODEM_FSK) { + uint8_t pktType = radio.getPacketType(); + + if (pktType == PACKET_TYPE_GFSK) ppGFSK.gfskFLRC.PayloadLength = max; - } else if (_m_ == MODEM_LORA) { + else if (pktType == PACKET_TYPE_LORA) ppLORA.lora.PayloadLength = max; - } } #endif /* ..SX126x_H */