123
Diff: sx127x_lora.cpp
- Revision:
- 18:0ecb6adb7c0b
- Parent:
- 17:59279bc8cdab
- Child:
- 19:1ee6ef1ab73f
--- a/sx127x_lora.cpp Wed May 27 22:42:30 2015 +0000 +++ b/sx127x_lora.cpp Tue Jun 02 01:25:47 2015 +0000 @@ -248,12 +248,33 @@ return; if (m_xcvr.type == SX1276) { + RegAutoDrift_t auto_drift; + RegModemConfig.sx1276bits.Bw = bw; if (get_symbol_period() > 16) RegModemConfig3.sx1276bits.LowDataRateOptimize = 1; else RegModemConfig3.sx1276bits.LowDataRateOptimize = 0; - m_xcvr.write_reg(REG_LR_MODEMCONFIG3, RegModemConfig3.octet); + m_xcvr.write_reg(REG_LR_MODEMCONFIG3, RegModemConfig3.octet); + + auto_drift.octet = m_xcvr.read_reg(REG_LR_SX1276_AUTO_DRIFT); + if (bw == 9) { // if 500KHz bw + RegGainDrift_t gd; + gd.octet = m_xcvr.read_reg(REG_LR_GAIN_DRIFT); + auto_drift.bits.freq_to_time_drift_auto = 0; + if (m_xcvr.HF) { + // > 525MHz + gd.bits.freq_to_time_drift = 0x24; + } else { + // < 525MHz + gd.bits.freq_to_time_drift = 0x3f; + } + m_xcvr.write_reg(REG_LR_GAIN_DRIFT, gd.octet); + } else { + auto_drift.bits.freq_to_time_drift_auto = 1; + } + m_xcvr.write_reg(REG_LR_SX1276_AUTO_DRIFT, auto_drift.octet); + } else if (m_xcvr.type == SX1272) { RegModemConfig.sx1272bits.Bw = bw; if (get_symbol_period() > 16)