From 17f6e585c3c1efe519b47efcbc6d17bf847a3294 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Grome=C5=A1?= Date: Mon, 20 Aug 2018 12:02:25 +0200 Subject: [PATCH] [SX127x] Sync with LoRaLib v5.2.0 --- keywords.txt | 2 ++ src/modules/SX1272.cpp | 3 +++ src/modules/SX1278.cpp | 3 +++ src/modules/SX127x.cpp | 45 +++++++++++++++++++++++++++++++++++++++++- src/modules/SX127x.h | 7 +++++-- 5 files changed, 57 insertions(+), 3 deletions(-) diff --git a/keywords.txt b/keywords.txt index 314e7d6e..9d43ab99 100644 --- a/keywords.txt +++ b/keywords.txt @@ -53,6 +53,8 @@ setOutputPower KEYWORD2 listen KEYWORD2 onReceive KEYWORD2 readData KEYWORD2 +directMode KEYWORD2 +packetMode KEYWORD2 # RF69-specific setBitRate KEYWORD2 diff --git a/src/modules/SX1272.cpp b/src/modules/SX1272.cpp index 0d601d24..a89bbdc6 100644 --- a/src/modules/SX1272.cpp +++ b/src/modules/SX1272.cpp @@ -321,5 +321,8 @@ int16_t SX1272::configFSK() { return(state); } + // set fast PLL hop + state = _mod->SPIsetRegValue(SX1272_REG_PLL_HOP, SX127X_FAST_HOP_ON, 7, 7); + return(state); } diff --git a/src/modules/SX1278.cpp b/src/modules/SX1278.cpp index 4b895959..3cfcec82 100644 --- a/src/modules/SX1278.cpp +++ b/src/modules/SX1278.cpp @@ -388,5 +388,8 @@ int16_t SX1278::configFSK() { return(state); } + // set fast PLL hop + state = _mod->SPIsetRegValue(SX1278_REG_PLL_HOP, SX127X_FAST_HOP_ON, 7, 7); + return(state); } diff --git a/src/modules/SX127x.cpp b/src/modules/SX127x.cpp index f39c200d..d4eb23b3 100644 --- a/src/modules/SX127x.cpp +++ b/src/modules/SX127x.cpp @@ -413,6 +413,49 @@ int16_t SX127x::standby() { return(setMode(SX127X_STANDBY)); } +int16_t SX127x::directMode(uint32_t FRF) { + // check modem + if(getActiveModem() != SX127X_FSK_OOK) { + return(ERR_WRONG_MODEM); + } + + // user requested to start transmitting immediately (required for RTTY) + if(FRF != 0) { + _mod->SPIsetRegValue(SX127X_REG_FRF_MSB, (FRF & 0xFF0000) >> 16); + _mod->SPIsetRegValue(SX127X_REG_FRF_MID, (FRF & 0x00FF00) >> 8); + _mod->SPIsetRegValue(SX127X_REG_FRF_LSB, FRF & 0x0000FF); + + return(setMode(SX127X_TX)); + } + + // set mode to standby + int16_t state = setMode(SX127X_STANDBY); + if(state != ERR_NONE) { + return(state); + } + + // set DIO mapping + state = _mod->SPIsetRegValue(SX127X_REG_DIO_MAPPING_1, SX127X_DIO1_CONT_DCLK | SX127X_DIO2_CONT_DATA, 5, 2); + + // set continuous mode + state |= _mod->SPIsetRegValue(SX127X_REG_PACKET_CONFIG_2, SX127X_DATA_MODE_CONTINUOUS, 6, 6); + if(state != ERR_NONE) { + return(state); + } + + // start transmitting + return(setMode(SX127X_TX)); +} + +int16_t SX127x::packetMode() { + // check modem + if(getActiveModem() != SX127X_FSK_OOK) { + return(ERR_WRONG_MODEM); + } + + return(_mod->SPIsetRegValue(SX127X_REG_PACKET_CONFIG_2, SX127X_DATA_MODE_PACKET, 6, 6)); +} + int16_t SX127x::startReceive() { // set mode to standby int16_t state = setMode(SX127X_STANDBY); @@ -738,7 +781,7 @@ int16_t SX127x::setFrequencyDeviation(float freqDev) { } // check frequency deviation range - if(!((freqDev + _br/2.0 <= 250.0) && (freqDev >= 0.6) && (freqDev <= 200.0))) { + if(!((freqDev + _br/2.0 <= 250.0) && (freqDev <= 200.0))) { return(ERR_INVALID_FREQUENCY_DEVIATION); } diff --git a/src/modules/SX127x.h b/src/modules/SX127x.h index c879fc41..c8b33d41 100644 --- a/src/modules/SX127x.h +++ b/src/modules/SX127x.h @@ -499,10 +499,11 @@ #define SX127X_DIO1_PACK_FIFO_LEVEL 0b00000000 // 5 4 #define SX127X_DIO1_PACK_FIFO_EMPTY 0b00010000 // 5 4 #define SX127X_DIO1_PACK_FIFO_FULL 0b00100000 // 5 4 +#define SX127X_DIO2_CONT_DATA 0b00000000 // 3 2 // SX1272_REG_PLL_HOP + SX1278_REG_PLL_HOP -#define SX127X_FAST_HOP_OFF 0b10000000 // 7 7 carrier frequency validated when FRF registers are written -#define SX127X_FAST_HOP_ON 0b00000000 // 7 7 carrier frequency validated when FS modes are requested +#define SX127X_FAST_HOP_OFF 0b00000000 // 7 7 carrier frequency validated when FRF registers are written +#define SX127X_FAST_HOP_ON 0b10000000 // 7 7 carrier frequency validated when FS modes are requested // SX1272_REG_TCXO + SX1278_REG_TCXO #define SX127X_TCXO_INPUT_EXTERNAL 0b00000000 // 4 4 use external crystal oscillator @@ -535,6 +536,8 @@ class SX127x { int16_t scanChannel(); int16_t sleep(); int16_t standby(); + int16_t directMode(uint32_t FRF = 0); + int16_t packetMode(); // interrupt methods void setDio0Action(void (*func)(void));