diff --git a/keywords.txt b/keywords.txt index 4e41354..5b6df85 100644 --- a/keywords.txt +++ b/keywords.txt @@ -20,6 +20,7 @@ endPacket KEYWORD2 parsePacket KEYWORD2 packetRssi KEYWORD2 +packetSnr KEYWORD2 write KEYWORD2 @@ -33,6 +34,8 @@ receive KEYWORD2 idle KEYWORD2 sleep KEYWORD2 +random KEYWORD2 + setFrequency KEYWORD2 setTxPower KEYWORD2 setSpreadingFactor KEYWORD2 diff --git a/src/LoRa.cpp b/src/LoRa.cpp index b78c7a6..f5e0107 100644 --- a/src/LoRa.cpp +++ b/src/LoRa.cpp @@ -15,11 +15,13 @@ #define REG_IRQ_FLAGS 0x12 #define REG_RX_NB_BYTES 0x13 #define REG_PKT_RSSI_VALUE 0x1a +#define REG_PKT_SNR_VALUE 0x1b #define REG_MODEM_CONFIG_1 0x1d #define REG_MODEM_CONFIG_2 0x1e #define REG_PREAMBLE_MSB 0x20 #define REG_PREAMBLE_LSB 0x21 #define REG_PAYLOAD_LENGTH 0x22 +#define REG_RSSI_WIDEBAND 0x2c #define REG_DETECTION_OPTIMIZE 0x31 #define REG_DETECTION_THRESHOLD 0x37 #define REG_SYNC_WORD 0x39 @@ -172,6 +174,11 @@ int LoRaClass::packetRssi() return (readRegister(REG_PKT_RSSI_VALUE) - (_frequency < 868E6 ? 164 : 157)); } +float LoRaClass::packetSnr() +{ + return ((int8_t)readRegister(REG_PKT_SNR_VALUE)) * 0.25; +} + size_t LoRaClass::write(uint8_t byte) { return write(&byte, sizeof(byte)); @@ -263,6 +270,11 @@ void LoRaClass::sleep() writeRegister(REG_OP_MODE, MODE_LONG_RANGE_MODE | MODE_SLEEP); } +byte LoRaClass::random() +{ + return readRegister(REG_RSSI_WIDEBAND); +} + void LoRaClass::setFrequency(long frequency) { _frequency = frequency; diff --git a/src/LoRa.h b/src/LoRa.h index 8bda362..8013409 100644 --- a/src/LoRa.h +++ b/src/LoRa.h @@ -20,6 +20,7 @@ public: int parsePacket(); int packetRssi(); + float packetSnr(); // from Print virtual size_t write(uint8_t byte); @@ -37,6 +38,8 @@ public: void idle(); void sleep(); + byte random(); + void setFrequency(long frequency); void setTxPower(int level); void setSpreadingFactor(int sf);