[SX127x] Added missing RF switch control
This commit is contained in:
parent
75197d78a0
commit
3fe7da9788
1 changed files with 27 additions and 26 deletions
|
@ -245,6 +245,9 @@ int16_t SX127x::scanChannel() {
|
||||||
// clear interrupt flags
|
// clear interrupt flags
|
||||||
clearIRQFlags();
|
clearIRQFlags();
|
||||||
|
|
||||||
|
// set RF switch (if present)
|
||||||
|
_mod->setRfSwitchState(HIGH, LOW);
|
||||||
|
|
||||||
// set mode to CAD
|
// set mode to CAD
|
||||||
state = setMode(SX127X_CAD);
|
state = setMode(SX127X_CAD);
|
||||||
RADIOLIB_ASSERT(state);
|
RADIOLIB_ASSERT(state);
|
||||||
|
@ -265,11 +268,17 @@ int16_t SX127x::scanChannel() {
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t SX127x::sleep() {
|
int16_t SX127x::sleep() {
|
||||||
|
// set RF switch (if present)
|
||||||
|
_mod->setRfSwitchState(LOW, LOW);
|
||||||
|
|
||||||
// set mode to sleep
|
// set mode to sleep
|
||||||
return(setMode(SX127X_SLEEP));
|
return(setMode(SX127X_SLEEP));
|
||||||
}
|
}
|
||||||
|
|
||||||
int16_t SX127x::standby() {
|
int16_t SX127x::standby() {
|
||||||
|
// set RF switch (if present)
|
||||||
|
_mod->setRfSwitchState(LOW, LOW);
|
||||||
|
|
||||||
// set mode to standby
|
// set mode to standby
|
||||||
return(setMode(SX127X_STANDBY));
|
return(setMode(SX127X_STANDBY));
|
||||||
}
|
}
|
||||||
|
@ -280,6 +289,9 @@ int16_t SX127x::transmitDirect(uint32_t FRF) {
|
||||||
return(ERR_WRONG_MODEM);
|
return(ERR_WRONG_MODEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set RF switch (if present)
|
||||||
|
_mod->setRfSwitchState(LOW, HIGH);
|
||||||
|
|
||||||
// user requested to start transmitting immediately (required for RTTY)
|
// user requested to start transmitting immediately (required for RTTY)
|
||||||
if(FRF != 0) {
|
if(FRF != 0) {
|
||||||
_mod->SPIwriteRegister(SX127X_REG_FRF_MSB, (FRF & 0xFF0000) >> 16);
|
_mod->SPIwriteRegister(SX127X_REG_FRF_MSB, (FRF & 0xFF0000) >> 16);
|
||||||
|
@ -303,6 +315,9 @@ int16_t SX127x::receiveDirect() {
|
||||||
return(ERR_WRONG_MODEM);
|
return(ERR_WRONG_MODEM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// set RF switch (if present)
|
||||||
|
_mod->setRfSwitchState(HIGH, LOW);
|
||||||
|
|
||||||
// activate direct mode
|
// activate direct mode
|
||||||
int16_t state = directMode();
|
int16_t state = directMode();
|
||||||
RADIOLIB_ASSERT(state);
|
RADIOLIB_ASSERT(state);
|
||||||
|
@ -369,7 +384,7 @@ int16_t SX127x::startReceive(uint8_t len, uint8_t mode) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// set RF switch (if present)
|
// set RF switch (if present)
|
||||||
_mod->setRfSwitchState(false);
|
_mod->setRfSwitchState(HIGH, LOW);
|
||||||
|
|
||||||
// set mode to receive
|
// set mode to receive
|
||||||
return(setMode(mode));
|
return(setMode(mode));
|
||||||
|
@ -421,18 +436,6 @@ int16_t SX127x::startTransmit(uint8_t* data, size_t len, uint8_t addr) {
|
||||||
state |= _mod->SPIsetRegValue(SX127X_REG_FIFO_TX_BASE_ADDR, SX127X_FIFO_TX_BASE_ADDR_MAX);
|
state |= _mod->SPIsetRegValue(SX127X_REG_FIFO_TX_BASE_ADDR, SX127X_FIFO_TX_BASE_ADDR_MAX);
|
||||||
state |= _mod->SPIsetRegValue(SX127X_REG_FIFO_ADDR_PTR, SX127X_FIFO_TX_BASE_ADDR_MAX);
|
state |= _mod->SPIsetRegValue(SX127X_REG_FIFO_ADDR_PTR, SX127X_FIFO_TX_BASE_ADDR_MAX);
|
||||||
|
|
||||||
// write packet to FIFO
|
|
||||||
_mod->SPIwriteRegisterBurst(SX127X_REG_FIFO, data, len);
|
|
||||||
|
|
||||||
// set RF switch (if present)
|
|
||||||
_mod->setRfSwitchState(true);
|
|
||||||
|
|
||||||
// start transmission
|
|
||||||
state |= setMode(SX127X_TX);
|
|
||||||
RADIOLIB_ASSERT(state);
|
|
||||||
|
|
||||||
return(ERR_NONE);
|
|
||||||
|
|
||||||
} else if(modem == SX127X_FSK_OOK) {
|
} else if(modem == SX127X_FSK_OOK) {
|
||||||
// check packet length
|
// check packet length
|
||||||
if(len >= SX127X_MAX_PACKET_LENGTH_FSK) {
|
if(len >= SX127X_MAX_PACKET_LENGTH_FSK) {
|
||||||
|
@ -453,12 +456,13 @@ int16_t SX127x::startTransmit(uint8_t* data, size_t len, uint8_t addr) {
|
||||||
if((filter == SX127X_ADDRESS_FILTERING_NODE) || (filter == SX127X_ADDRESS_FILTERING_NODE_BROADCAST)) {
|
if((filter == SX127X_ADDRESS_FILTERING_NODE) || (filter == SX127X_ADDRESS_FILTERING_NODE_BROADCAST)) {
|
||||||
_mod->SPIwriteRegister(SX127X_REG_FIFO, addr);
|
_mod->SPIwriteRegister(SX127X_REG_FIFO, addr);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// write packet to FIFO
|
// write packet to FIFO
|
||||||
_mod->SPIwriteRegisterBurst(SX127X_REG_FIFO, data, len);
|
_mod->SPIwriteRegisterBurst(SX127X_REG_FIFO, data, len);
|
||||||
|
|
||||||
// set RF switch (if present)
|
// set RF switch (if present)
|
||||||
_mod->setRfSwitchState(true);
|
_mod->setRfSwitchState(LOW, HIGH);
|
||||||
|
|
||||||
// start transmission
|
// start transmission
|
||||||
state |= setMode(SX127X_TX);
|
state |= setMode(SX127X_TX);
|
||||||
|
@ -467,9 +471,6 @@ int16_t SX127x::startTransmit(uint8_t* data, size_t len, uint8_t addr) {
|
||||||
return(ERR_NONE);
|
return(ERR_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(ERR_UNKNOWN);
|
|
||||||
}
|
|
||||||
|
|
||||||
int16_t SX127x::readData(uint8_t* data, size_t len) {
|
int16_t SX127x::readData(uint8_t* data, size_t len) {
|
||||||
int16_t modem = getActiveModem();
|
int16_t modem = getActiveModem();
|
||||||
size_t length = len;
|
size_t length = len;
|
||||||
|
|
Loading…
Add table
Reference in a new issue