[SX127x] Sync with LoRaLib v6.0.0

This commit is contained in:
Jan Gromeš 2018-09-04 19:52:27 +02:00
parent f6bca77b8a
commit 8165f8107b
5 changed files with 39 additions and 13 deletions

View file

@ -54,7 +54,8 @@ setOutputPower KEYWORD2
listen KEYWORD2
onReceive KEYWORD2
readData KEYWORD2
directMode KEYWORD2
transmitDirect KEYWORD2
receiveDirect KEYWORD2
packetMode KEYWORD2
# RF69-specific

View file

@ -409,7 +409,7 @@ int16_t SX127x::standby() {
return(setMode(SX127X_STANDBY));
}
int16_t SX127x::directMode(uint32_t FRF) {
int16_t SX127x::transmitDirect(uint32_t FRF) {
// check modem
if(getActiveModem() != SX127X_FSK_OOK) {
return(ERR_WRONG_MODEM);
@ -424,6 +424,33 @@ int16_t SX127x::directMode(uint32_t FRF) {
return(setMode(SX127X_TX));
}
// activate direct mode
int16_t state = directMode();
if(state != ERR_NONE) {
return(state);
}
// start transmitting
return(setMode(SX127X_TX));
}
int16_t SX127x::receiveDirect() {
// check modem
if(getActiveModem() != SX127X_FSK_OOK) {
return(ERR_WRONG_MODEM);
}
// activate direct mode
int16_t state = directMode();
if(state != ERR_NONE) {
return(state);
}
// start receiving
return(setMode(SX127X_RX));
}
int16_t SX127x::directMode() {
// set mode to standby
int16_t state = setMode(SX127X_STANDBY);
if(state != ERR_NONE) {
@ -435,12 +462,7 @@ int16_t SX127x::directMode(uint32_t FRF) {
// 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() {

View file

@ -538,7 +538,8 @@ class SX127x: public PhysicalLayer {
int16_t scanChannel();
int16_t sleep();
int16_t standby();
int16_t directMode(uint32_t FRF = 0);
int16_t transmitDirect(uint32_t FRF = 0);
int16_t receiveDirect();
int16_t packetMode();
// interrupt methods
@ -583,6 +584,7 @@ class SX127x: public PhysicalLayer {
int16_t config();
int16_t configFSK();
int16_t getActiveModem();
int16_t directMode();
private:
bool findChip(uint8_t ver);

View file

@ -9,7 +9,8 @@ class PhysicalLayer {
// this class is purely virtual and does not require explicit constructor
// basic methods
virtual int16_t directMode(uint32_t FRF = 0) = 0;
virtual int16_t transmitDirect(uint32_t FRF = 0) = 0;
virtual int16_t receiveDirect() = 0;
virtual int16_t transmit(const char* data, uint8_t addr = 0) = 0;
virtual int16_t transmit(uint8_t* data, size_t len, uint8_t addr = 0) = 0;
virtual int16_t receive(uint8_t* data, size_t len) = 0;

View file

@ -29,7 +29,7 @@ int16_t RTTYClient::begin(float base, uint16_t shift, uint16_t rate, uint8_t dat
}
void RTTYClient::idle() {
_phy->directMode();
_phy->transmitDirect();
mark();
}
@ -178,13 +178,13 @@ size_t RTTYClient::println(double d, int digits) {
void RTTYClient::mark() {
uint32_t start = micros();
_phy->directMode(_base + _shift);
_phy->transmitDirect(_base + _shift);
while(micros() - start < _bitDuration);
}
void RTTYClient::space() {
uint32_t start = micros();
_phy->directMode(_base);
_phy->transmitDirect(_base);
while(micros() - start < _bitDuration);
}