[SX127x] Sync with LoRaLib 8.2.0
This commit is contained in:
parent
b873127155
commit
6949ccf363
8 changed files with 163 additions and 41 deletions
|
@ -94,6 +94,8 @@ setCrcFiltering KEYWORD2
|
|||
enableSyncWordFiltering KEYWORD2
|
||||
disableSyncWordFiltering KEYWORD2
|
||||
setPromiscuous KEYWORD2
|
||||
setRSSIConfig KEYWORD2
|
||||
setEncoding KEYWORD2
|
||||
|
||||
# RF69-specific
|
||||
setAESKey KEYWORD2
|
||||
|
@ -189,6 +191,9 @@ ERR_INVALID_CURRENT_LIMIT LITERAL1
|
|||
ERR_INVALID_PREAMBLE_LENGTH LITERAL1
|
||||
ERR_INVALID_GAIN LITERAL1
|
||||
ERR_WRONG_MODEM LITERAL1
|
||||
ERR_INVALID_NUM_SAMPLES LITERAL1
|
||||
ERR_INVALID_RSSI_OFFSET LITERAL1
|
||||
ERR_INVALID_ENCODING LITERAL1
|
||||
|
||||
ERR_INVALID_BIT_RATE LITERAL1
|
||||
ERR_INVALID_FREQUENCY_DEVIATION LITERAL1
|
||||
|
|
|
@ -263,6 +263,21 @@
|
|||
*/
|
||||
#define ERR_WRONG_MODEM -20
|
||||
|
||||
/*!
|
||||
\brief The supplied number of RSSI samples is invalid.
|
||||
*/
|
||||
#define ERR_INVALID_NUM_SAMPLES -21
|
||||
|
||||
/*!
|
||||
\brief The supplied RSSI offset is invalid.
|
||||
*/
|
||||
#define ERR_INVALID_RSSI_OFFSET -22
|
||||
|
||||
/*!
|
||||
\brief The supplied encoding is invalid.
|
||||
*/
|
||||
#define ERR_INVALID_ENCODING -23
|
||||
|
||||
// RF69-specific status codes
|
||||
|
||||
/*!
|
||||
|
|
|
@ -342,13 +342,10 @@ int16_t SX1272::setDataShapingOOK(uint8_t sh) {
|
|||
return(state);
|
||||
}
|
||||
|
||||
int8_t SX1272::getRSSI() {
|
||||
// check active modem
|
||||
if(getActiveModem() != SX127X_LORA) {
|
||||
return(0);
|
||||
}
|
||||
|
||||
int8_t lastPacketRSSI = -139 + _mod->SPIgetRegValue(SX127X_REG_PKT_RSSI_VALUE);
|
||||
float SX1272::getRSSI() {
|
||||
if(getActiveModem() == SX127X_LORA) {
|
||||
// RSSI calculation uses different constant for low-frequency and high-frequency ports
|
||||
float lastPacketRSSI = -139 + _mod->SPIgetRegValue(SX127X_REG_PKT_RSSI_VALUE);
|
||||
|
||||
// spread-spectrum modulation signal can be received below noise floor
|
||||
// check last packet SNR and if it's less than 0, add it to reported RSSI to get the correct value
|
||||
|
@ -358,6 +355,20 @@ int8_t SX1272::getRSSI() {
|
|||
}
|
||||
|
||||
return(lastPacketRSSI);
|
||||
|
||||
} else {
|
||||
// enable listen mode
|
||||
startReceive();
|
||||
|
||||
// read the value for FSK
|
||||
float rssi = (float)_mod->SPIgetRegValue(SX127X_REG_RSSI_VALUE_FSK) / -2.0;
|
||||
|
||||
// set mode back to standby
|
||||
standby();
|
||||
|
||||
// return the value
|
||||
return(rssi);
|
||||
}
|
||||
}
|
||||
|
||||
int16_t SX1272::setCRC(bool enableCRC) {
|
||||
|
|
|
@ -235,11 +235,11 @@ class SX1272: public SX127x {
|
|||
int16_t setDataShapingOOK(uint8_t sh);
|
||||
|
||||
/*!
|
||||
\brief Gets recorded signal strength indicator of the latest received packet.
|
||||
\brief Gets recorded signal strength indicator of the latest received packet for LoRa modem, or current RSSI level for FSK modem.
|
||||
|
||||
\returns Last packet recorded signal strength indicator (RSSI).
|
||||
\returns Last packet RSSI for LoRa modem, or current RSSI level for FSK modem.
|
||||
*/
|
||||
int8_t getRSSI();
|
||||
float getRSSI();
|
||||
|
||||
/*!
|
||||
\brief Enables/disables CRC check of received packets.
|
||||
|
|
|
@ -411,13 +411,10 @@ int16_t SX1278::setDataShapingOOK(uint8_t sh) {
|
|||
return(state);
|
||||
}
|
||||
|
||||
int8_t SX1278::getRSSI() {
|
||||
// check active modem
|
||||
if(getActiveModem() != SX127X_LORA) {
|
||||
return(0);
|
||||
}
|
||||
|
||||
int8_t lastPacketRSSI;
|
||||
float SX1278::getRSSI() {
|
||||
if(getActiveModem() == SX127X_LORA) {
|
||||
// for LoRa, get RSSI of the last packet
|
||||
float lastPacketRSSI;
|
||||
|
||||
// RSSI calculation uses different constant for low-frequency and high-frequency ports
|
||||
if(_freq < 868.0) {
|
||||
|
@ -434,6 +431,20 @@ int8_t SX1278::getRSSI() {
|
|||
}
|
||||
|
||||
return(lastPacketRSSI);
|
||||
|
||||
} else {
|
||||
// enable listen mode
|
||||
startReceive();
|
||||
|
||||
// read the value for FSK
|
||||
float rssi = (float)_mod->SPIgetRegValue(SX127X_REG_RSSI_VALUE_FSK) / -2.0;
|
||||
|
||||
// set mode back to standby
|
||||
standby();
|
||||
|
||||
// return the value
|
||||
return(rssi);
|
||||
}
|
||||
}
|
||||
|
||||
int16_t SX1278::setCRC(bool enableCRC) {
|
||||
|
|
|
@ -244,11 +244,11 @@ class SX1278: public SX127x {
|
|||
int16_t setDataShapingOOK(uint8_t sh);
|
||||
|
||||
/*!
|
||||
\brief Gets recorded signal strength indicator of the latest received packet.
|
||||
\brief Gets recorded signal strength indicator of the latest received packet for LoRa modem, or current RSSI level for FSK modem.
|
||||
|
||||
\returns Last packet recorded signal strength indicator (RSSI).
|
||||
\returns Last packet RSSI for LoRa modem, or current RSSI level for FSK modem.
|
||||
*/
|
||||
int8_t getRSSI();
|
||||
float getRSSI();
|
||||
|
||||
/*!
|
||||
\brief Enables/disables CRC check of received packets.
|
||||
|
|
|
@ -117,6 +117,18 @@ int16_t SX127x::beginFSK(uint8_t chipVersion, float br, float freqDev, float rxB
|
|||
|
||||
// enable/disable OOK
|
||||
state = setOOK(enableOOK);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
// set default RSSI measurement config
|
||||
state = setRSSIConfig(2);
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
// set default encoding
|
||||
state = setEncoding(0);
|
||||
|
||||
return(state);
|
||||
}
|
||||
|
@ -174,6 +186,8 @@ int16_t SX127x::transmit(uint8_t* data, size_t len, uint8_t addr) {
|
|||
return(ERR_TX_TIMEOUT);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return(ERR_UNKNOWN);
|
||||
}
|
||||
|
||||
// update data rate
|
||||
|
@ -891,6 +905,52 @@ size_t SX127x::getPacketLength(bool update) {
|
|||
return(_packetLength);
|
||||
}
|
||||
|
||||
int16_t SX127x::setRSSIConfig(uint8_t smoothingSamples, int8_t offset) {
|
||||
// check active modem
|
||||
if(getActiveModem() != SX127X_FSK_OOK) {
|
||||
return(ERR_WRONG_MODEM);
|
||||
}
|
||||
|
||||
// set mode to standby
|
||||
int16_t state = standby();
|
||||
if(state != ERR_NONE) {
|
||||
return(state);
|
||||
}
|
||||
|
||||
// check provided values
|
||||
if(!(smoothingSamples <= 7)) {
|
||||
return(ERR_INVALID_NUM_SAMPLES);
|
||||
}
|
||||
|
||||
if(!((offset >= -16) && (offset <= 15))) {
|
||||
return(ERR_INVALID_RSSI_OFFSET);
|
||||
}
|
||||
|
||||
// set new register values
|
||||
state = _mod->SPIsetRegValue(SX127X_REG_RSSI_CONFIG, offset, 7, 3);
|
||||
state |= _mod->SPIsetRegValue(SX127X_REG_RSSI_CONFIG, smoothingSamples, 2, 0);
|
||||
return(state);
|
||||
}
|
||||
|
||||
int16_t SX127x::setEncoding(uint8_t encoding) {
|
||||
// check active modem
|
||||
if(getActiveModem() != SX127X_FSK_OOK) {
|
||||
return(ERR_WRONG_MODEM);
|
||||
}
|
||||
|
||||
// set encoding
|
||||
switch(encoding) {
|
||||
case 0:
|
||||
return(_mod->SPIsetRegValue(SX127X_REG_PACKET_CONFIG_1, SX127X_DC_FREE_NONE, 6, 5));
|
||||
case 1:
|
||||
return(_mod->SPIsetRegValue(SX127X_REG_PACKET_CONFIG_1, SX127X_DC_FREE_MANCHESTER, 6, 5));
|
||||
case 2:
|
||||
return(_mod->SPIsetRegValue(SX127X_REG_PACKET_CONFIG_1, SX127X_DC_FREE_WHITENING, 6, 5));
|
||||
default:
|
||||
return(ERR_INVALID_ENCODING);
|
||||
}
|
||||
}
|
||||
|
||||
int16_t SX127x::config() {
|
||||
// turn off frequency hopping
|
||||
int16_t state = _mod->SPIsetRegValue(SX127X_REG_HOP_PERIOD, SX127X_HOP_PERIOD_OFF);
|
||||
|
@ -963,8 +1023,7 @@ bool SX127x::findChip(uint8_t ver) {
|
|||
sprintf(buffHex, "0x%02X", version);
|
||||
RADIOLIB_DEBUG_PRINT(buffHex);
|
||||
RADIOLIB_DEBUG_PRINT(F(", expected 0x00"));
|
||||
RADIOLIB_DEBUG_PRINT(ver, HEX);
|
||||
RADIOLIB_DEBUG_PRINTLN();
|
||||
RADIOLIB_DEBUG_PRINTLN(ver, HEX);
|
||||
#endif
|
||||
delay(1000);
|
||||
i++;
|
||||
|
|
|
@ -842,6 +842,27 @@ class SX127x: public PhysicalLayer {
|
|||
*/
|
||||
size_t getPacketLength(bool update = true);
|
||||
|
||||
/*!
|
||||
\brief Sets RSSI measurement configuration in FSK mode.
|
||||
|
||||
\param smoothingSamples Number of samples taken to avergae the RSSI result.
|
||||
numSamples = 2 ^ (1 + smoothingSamples), allowed values are in range 0 (2 samples) - 7 (256 samples)
|
||||
|
||||
\param offset Signed RSSI offset that will be automatically compensated. 1 dB per LSB, defaults to 0, allowed values are in range -16 dB to +15 dB.
|
||||
|
||||
\returns \ref status_codes
|
||||
*/
|
||||
int16_t setRSSIConfig(uint8_t smoothingSamples, int8_t offset = 0);
|
||||
|
||||
/*!
|
||||
\brief Sets transmission encoding. Only available in FSK mode.
|
||||
|
||||
\param encoding Encoding to be used. Set to 0 for NRZ, 1 for Manchester and 2 for whitening.
|
||||
|
||||
\returns \ref status_codes
|
||||
*/
|
||||
int16_t setEncoding(uint8_t encoding);
|
||||
|
||||
#ifdef RADIOLIB_DEBUG
|
||||
void regDump();
|
||||
#endif
|
||||
|
|
Loading…
Add table
Reference in a new issue