[SX127x] Sync with LoRaLib v5.2.0

This commit is contained in:
Jan Gromeš 2018-08-20 12:02:25 +02:00
parent 5bab97d16b
commit 17f6e585c3
5 changed files with 57 additions and 3 deletions

View file

@ -53,6 +53,8 @@ setOutputPower KEYWORD2
listen KEYWORD2
onReceive KEYWORD2
readData KEYWORD2
directMode KEYWORD2
packetMode KEYWORD2
# RF69-specific
setBitRate KEYWORD2

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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);
}

View file

@ -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));