[SX127x] Added fixed packet mode for FSK modem
This commit is contained in:
parent
57fab02e20
commit
05d6a1c1c8
2 changed files with 72 additions and 3 deletions
|
@ -42,6 +42,9 @@ int16_t SX127x::begin(uint8_t chipVersion, uint8_t syncWord, uint8_t currentLimi
|
||||||
|
|
||||||
// set preamble length
|
// set preamble length
|
||||||
state = SX127x::setPreambleLength(preambleLength);
|
state = SX127x::setPreambleLength(preambleLength);
|
||||||
|
if(state != ERR_NONE) {
|
||||||
|
return(state);
|
||||||
|
}
|
||||||
|
|
||||||
// initalize internal variables
|
// initalize internal variables
|
||||||
_dataRate = 0.0;
|
_dataRate = 0.0;
|
||||||
|
@ -129,6 +132,15 @@ int16_t SX127x::beginFSK(uint8_t chipVersion, float br, float freqDev, float rxB
|
||||||
|
|
||||||
// set default encoding
|
// set default encoding
|
||||||
state = setEncoding(0);
|
state = setEncoding(0);
|
||||||
|
if(state != ERR_NONE) {
|
||||||
|
return(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set default packet length mode
|
||||||
|
state = variablePacketLengthMode();
|
||||||
|
if (state != ERR_NONE) {
|
||||||
|
return(state);
|
||||||
|
}
|
||||||
|
|
||||||
return(state);
|
return(state);
|
||||||
}
|
}
|
||||||
|
@ -413,7 +425,7 @@ int16_t SX127x::startTransmit(uint8_t* data, size_t len, uint8_t addr) {
|
||||||
int16_t modem = getActiveModem();
|
int16_t modem = getActiveModem();
|
||||||
if(modem == SX127X_LORA) {
|
if(modem == SX127X_LORA) {
|
||||||
// check packet length
|
// check packet length
|
||||||
if(len >= 256) {
|
if(len >= SX127X_MAX_PACKET_LENGTH) {
|
||||||
return(ERR_PACKET_TOO_LONG);
|
return(ERR_PACKET_TOO_LONG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -443,7 +455,7 @@ int16_t SX127x::startTransmit(uint8_t* data, size_t len, uint8_t addr) {
|
||||||
|
|
||||||
} else if(modem == SX127X_FSK_OOK) {
|
} else if(modem == SX127X_FSK_OOK) {
|
||||||
// check packet length
|
// check packet length
|
||||||
if(len >= 64) {
|
if(len >= SX127X_MAX_PACKET_LENGTH_FSK) {
|
||||||
return(ERR_PACKET_TOO_LONG);
|
return(ERR_PACKET_TOO_LONG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -905,6 +917,14 @@ size_t SX127x::getPacketLength(bool update) {
|
||||||
return(_packetLength);
|
return(_packetLength);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int16_t SX127x::fixedPacketLengthMode(uint8_t len) {
|
||||||
|
return(SX127x::setPacketMode(SX127X_PACKET_FIXED, len));
|
||||||
|
}
|
||||||
|
|
||||||
|
int16_t SX127x::variablePacketLengthMode(uint8_t maxLen) {
|
||||||
|
return(SX127x::setPacketMode(SX127X_PACKET_VARIABLE, maxLen));
|
||||||
|
}
|
||||||
|
|
||||||
int16_t SX127x::setRSSIConfig(uint8_t smoothingSamples, int8_t offset) {
|
int16_t SX127x::setRSSIConfig(uint8_t smoothingSamples, int8_t offset) {
|
||||||
// check active modem
|
// check active modem
|
||||||
if(getActiveModem() != SX127X_FSK_OOK) {
|
if(getActiveModem() != SX127X_FSK_OOK) {
|
||||||
|
@ -1006,6 +1026,34 @@ int16_t SX127x::configFSK() {
|
||||||
return(state);
|
return(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int16_t SX127x::setPacketMode(uint8_t mode, uint8_t len) {
|
||||||
|
// check packet length
|
||||||
|
if (len > SX127X_MAX_PACKET_LENGTH_FSK) {
|
||||||
|
return(ERR_PACKET_TOO_LONG);
|
||||||
|
}
|
||||||
|
|
||||||
|
// check active modem
|
||||||
|
if(getActiveModem() != SX127X_FSK_OOK) {
|
||||||
|
return(ERR_WRONG_MODEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set to fixed packet length
|
||||||
|
int16_t state = _mod->SPIsetRegValue(SX127X_REG_PACKET_CONFIG_1, mode, 7, 7);
|
||||||
|
if(state != ERR_NONE) {
|
||||||
|
return(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
// set length to register
|
||||||
|
state = _mod->SPIsetRegValue(SX127X_REG_PAYLOAD_LENGTH_FSK, len);
|
||||||
|
if(state != ERR_NONE) {
|
||||||
|
return(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
// update cached value
|
||||||
|
_packetLengthConfig = mode;
|
||||||
|
return(state);
|
||||||
|
}
|
||||||
|
|
||||||
bool SX127x::findChip(uint8_t ver) {
|
bool SX127x::findChip(uint8_t ver) {
|
||||||
uint8_t i = 0;
|
uint8_t i = 0;
|
||||||
bool flagFound = false;
|
bool flagFound = false;
|
||||||
|
|
|
@ -9,7 +9,8 @@
|
||||||
// SX127x physical layer properties
|
// SX127x physical layer properties
|
||||||
#define SX127X_CRYSTAL_FREQ 32.0
|
#define SX127X_CRYSTAL_FREQ 32.0
|
||||||
#define SX127X_DIV_EXPONENT 19
|
#define SX127X_DIV_EXPONENT 19
|
||||||
#define SX127X_MAX_PACKET_LENGTH 256
|
#define SX127X_MAX_PACKET_LENGTH 255
|
||||||
|
#define SX127X_MAX_PACKET_LENGTH_FSK 64
|
||||||
|
|
||||||
// SX127x series common LoRa registers
|
// SX127x series common LoRa registers
|
||||||
#define SX127X_REG_FIFO 0x00
|
#define SX127X_REG_FIFO 0x00
|
||||||
|
@ -842,6 +843,24 @@ class SX127x: public PhysicalLayer {
|
||||||
*/
|
*/
|
||||||
size_t getPacketLength(bool update = true);
|
size_t getPacketLength(bool update = true);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Set modem in fixed packet length mode. Available in FSK mode only.
|
||||||
|
|
||||||
|
\param len Packet length.
|
||||||
|
|
||||||
|
\returns \ref status_codes
|
||||||
|
*/
|
||||||
|
int16_t fixedPacketLengthMode(uint8_t len = SX127X_MAX_PACKET_LENGTH_FSK);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Set modem in variable packet length mode. Available in FSK mode only.
|
||||||
|
|
||||||
|
\param len Maximum packet length.
|
||||||
|
|
||||||
|
\returns \ref status_codes
|
||||||
|
*/
|
||||||
|
int16_t variablePacketLengthMode(uint8_t maxLen = SX127X_MAX_PACKET_LENGTH_FSK);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Sets RSSI measurement configuration in FSK mode.
|
\brief Sets RSSI measurement configuration in FSK mode.
|
||||||
|
|
||||||
|
@ -885,6 +904,7 @@ class SX127x: public PhysicalLayer {
|
||||||
int16_t configFSK();
|
int16_t configFSK();
|
||||||
int16_t getActiveModem();
|
int16_t getActiveModem();
|
||||||
int16_t directMode();
|
int16_t directMode();
|
||||||
|
int16_t setPacketMode(uint8_t mode, uint8_t len);
|
||||||
|
|
||||||
#ifndef RADIOLIB_GODMODE
|
#ifndef RADIOLIB_GODMODE
|
||||||
private:
|
private:
|
||||||
|
@ -892,6 +912,7 @@ class SX127x: public PhysicalLayer {
|
||||||
float _dataRate;
|
float _dataRate;
|
||||||
size_t _packetLength;
|
size_t _packetLength;
|
||||||
bool _packetLengthQueried; // FSK packet length is the first byte in FIFO, length can only be queried once
|
bool _packetLengthQueried; // FSK packet length is the first byte in FIFO, length can only be queried once
|
||||||
|
uint8_t _packetLengthConfig;
|
||||||
|
|
||||||
bool findChip(uint8_t ver);
|
bool findChip(uint8_t ver);
|
||||||
int16_t setMode(uint8_t mode);
|
int16_t setMode(uint8_t mode);
|
||||||
|
|
Loading…
Add table
Reference in a new issue