Fork of SX1276 library, with setLowDataRateOptimize() function added to configure "Low Datarate Optimize" setting of chip.
Dependents: SX1276_terminal SX1276_Semtech_GUI
Fork of SX127x by
Diff: sx127x_lora.cpp
- Revision:
- 7:927a05f84ede
- Parent:
- 4:d987ac2836bf
--- a/sx127x_lora.cpp Tue Jun 03 20:44:30 2014 +0000 +++ b/sx127x_lora.cpp Mon Feb 09 23:26:05 2015 +0000 @@ -277,29 +277,7 @@ void SX127x_lora::start_tx(uint8_t len) -{ - if (m_xcvr.type == SX1276) { - // PA_BOOST on LF, RFO on HF - if (m_xcvr.HF) { - if (m_xcvr.RegPaConfig.bits.PaSelect) { - m_xcvr.RegPaConfig.bits.PaSelect = 0; - m_xcvr.write_reg(REG_PACONFIG, m_xcvr.RegPaConfig.octet); - } - } else { // LF... - if (!m_xcvr.RegPaConfig.bits.PaSelect) { - m_xcvr.RegPaConfig.bits.PaSelect = 1; - m_xcvr.write_reg(REG_PACONFIG, m_xcvr.RegPaConfig.octet); - } - } - } else if (m_xcvr.type == SX1272) { - // always PA_BOOST - if (!m_xcvr.RegPaConfig.bits.PaSelect) { - m_xcvr.RegPaConfig.bits.PaSelect = 1; - m_xcvr.write_reg(REG_PACONFIG, m_xcvr.RegPaConfig.octet); - } - } - - +{ // DIO0 to TxDone if (m_xcvr.RegDioMapping1.bits.Dio0Mapping != 1) { m_xcvr.RegDioMapping1.bits.Dio0Mapping = 1; @@ -311,16 +289,7 @@ // write PayloadLength bytes to fifo write_fifo(len); - - if (m_xcvr.HF) - m_xcvr.femctx = 1; - else - m_xcvr.femcps = 0; - - // radio doesnt provide FhssChangeChannel with channel=0 for TX - if (RegHopPeriod > 0) - m_xcvr.write_u24(REG_FRFMSB, m_xcvr.frfs[0]); - + m_xcvr.set_opmode(RF_OPMODE_TRANSMITTER); } @@ -329,22 +298,13 @@ if (!m_xcvr.RegOpMode.bits.LongRangeMode) return; - if (m_xcvr.HF) - m_xcvr.femctx = 0; - else - m_xcvr.femcps = 1; - if (m_xcvr.RegDioMapping1.bits.Dio0Mapping != 0) { m_xcvr.RegDioMapping1.bits.Dio0Mapping = 0; // DIO0 to RxDone m_xcvr.write_reg(REG_DIOMAPPING1, m_xcvr.RegDioMapping1.octet); } m_xcvr.write_reg(REG_LR_FIFOADDRPTR, m_xcvr.read_reg(REG_LR_FIFORXBASEADDR)); - - // shouldn't be necessary, radio should provide FhssChangeChannel with channel=0 for RX - if (RegHopPeriod > 0) - m_xcvr.write_u24(REG_FRFMSB, m_xcvr.frfs[0]); - + m_xcvr.set_opmode(RF_OPMODE_RECEIVER); } @@ -370,20 +330,7 @@ } } } - - // FhssChangeChannel - if (m_xcvr.RegDioMapping1.bits.Dio1Mapping == 1) { - if (m_xcvr.dio1) { - RegHopChannel.octet = m_xcvr.read_reg(REG_LR_HOPCHANNEL); - m_xcvr.write_u24(REG_FRFMSB, m_xcvr.frfs[RegHopChannel.bits.FhssPresentChannel]); - printf("hopch:%d\r\n", RegHopChannel.bits.FhssPresentChannel); - RegIrqFlags.octet = 0; - RegIrqFlags.bits.FhssChangeChannel = 1; - m_xcvr. write_reg(REG_LR_IRQFLAGS, RegIrqFlags.octet); - - } - } - + if (m_xcvr.dio0 == 0) return SERVICE_NONE; @@ -392,9 +339,6 @@ /* user checks for CRC error in IrqFlags */ RegIrqFlags.octet = m_xcvr.read_reg(REG_LR_IRQFLAGS); // save flags RegHopChannel.octet = m_xcvr.read_reg(REG_LR_HOPCHANNEL); - if (RegIrqFlags.bits.FhssChangeChannel) { - m_xcvr.write_u24(REG_FRFMSB, m_xcvr.frfs[RegHopChannel.bits.FhssPresentChannel]); - } //printf("[%02x]", RegIrqFlags.octet); m_xcvr.write_reg(REG_LR_IRQFLAGS, RegIrqFlags.octet); // clear flags in radio @@ -408,11 +352,6 @@ read_fifo(RegRxNbBytes); return SERVICE_READ_FIFO; case 1: // TxDone - if (m_xcvr.HF) - m_xcvr.femctx = 0; - else - m_xcvr.femcps = 1; - RegIrqFlags.octet = 0; RegIrqFlags.bits.TxDone = 1; m_xcvr.write_reg(REG_LR_IRQFLAGS, RegIrqFlags.octet);