Follow Optimized Frequency Hopping Sequence

by cf13c60ae5
Don't remove "if (newMode == _mode)" to prevent unnecessary mode switching by setFrequency()
This commit is contained in:
Daniel A. Maierhofer 2015-01-18 12:22:43 +01:00
parent c491a2ab82
commit 8cecd36d9b
1 changed files with 12 additions and 3 deletions

View File

@ -119,16 +119,24 @@ uint32_t RFM69::getFrequency()
// set the frequency (in Hz)
void RFM69::setFrequency(uint32_t freqHz)
{
// TODO: datasheet p38 hopping sequence may need to be followed in some cases
uint8_t oldMode = _mode;
if (oldMode == RF69_MODE_TX) {
setMode(RF69_MODE_RX);
}
freqHz /= RF69_FSTEP; // divide down by FSTEP to get FRF
writeReg(REG_FRFMSB, freqHz >> 16);
writeReg(REG_FRFMID, freqHz >> 8);
writeReg(REG_FRFLSB, freqHz);
if (oldMode == RF69_MODE_RX) {
setMode(RF69_MODE_SYNTH);
}
setMode(oldMode);
}
void RFM69::setMode(uint8_t newMode)
{
if (newMode == _mode) return; // TODO: can remove this?
if (newMode == _mode)
return;
switch (newMode) {
case RF69_MODE_TX:
@ -148,7 +156,8 @@ void RFM69::setMode(uint8_t newMode)
case RF69_MODE_SLEEP:
writeReg(REG_OPMODE, (readReg(REG_OPMODE) & 0xE3) | RF_OPMODE_SLEEP);
break;
default: return;
default:
return;
}
// we are using packet mode, so this check is not really needed