[SX128x] Added support for changing LoRa sync word (#311)

This commit is contained in:
jgromes 2021-06-13 14:44:52 +02:00
parent 0abfb5fe1b
commit 8be419f007
2 changed files with 29 additions and 2 deletions

View file

@ -5,7 +5,7 @@ SX128x::SX128x(Module* mod) : PhysicalLayer(SX128X_FREQUENCY_STEP_SIZE, SX128X_M
_mod = mod; _mod = mod;
} }
int16_t SX128x::begin(float freq, float bw, uint8_t sf, uint8_t cr, int8_t power, uint16_t preambleLength) { int16_t SX128x::begin(float freq, float bw, uint8_t sf, uint8_t cr, uint8_t syncWord, int8_t power, uint16_t preambleLength) {
// set module properties // set module properties
_mod->init(RADIOLIB_USE_SPI); _mod->init(RADIOLIB_USE_SPI);
Module::pinMode(_mod->getIrq(), INPUT); Module::pinMode(_mod->getIrq(), INPUT);
@ -48,6 +48,9 @@ int16_t SX128x::begin(float freq, float bw, uint8_t sf, uint8_t cr, int8_t power
state = setCodingRate(cr); state = setCodingRate(cr);
RADIOLIB_ASSERT(state); RADIOLIB_ASSERT(state);
state = setSyncWord(syncWord);
RADIOLIB_ASSERT(state);
state = setPreambleLength(preambleLength); state = setPreambleLength(preambleLength);
RADIOLIB_ASSERT(state); RADIOLIB_ASSERT(state);
@ -906,6 +909,17 @@ int16_t SX128x::setSyncWord(uint8_t* syncWord, uint8_t len) {
return(setPacketParamsGFSK(_preambleLengthGFSK, _syncWordLen, _syncWordMatch, _crcGFSK, _whitening)); return(setPacketParamsGFSK(_preambleLengthGFSK, _syncWordLen, _syncWordMatch, _crcGFSK, _whitening));
} }
int16_t SX128x::setSyncWord(uint8_t syncWord, uint8_t controlBits) {
// check active modem
if(getPacketType() != SX128X_PACKET_TYPE_LORA) {
return(ERR_WRONG_MODEM);
}
// update register
uint8_t data[2] = {(uint8_t)((syncWord & 0xF0) | ((controlBits & 0xF0) >> 4)), (uint8_t)(((syncWord & 0x0F) << 4) | (controlBits & 0x0F))};
return(writeRegister(SX128X_REG_LORA_SYNC_WORD_MSB, data, 2));
}
int16_t SX128x::setCRC(uint8_t len, uint32_t initial, uint16_t polynomial) { int16_t SX128x::setCRC(uint8_t len, uint32_t initial, uint16_t polynomial) {
// check active modem // check active modem
uint8_t modem = getPacketType(); uint8_t modem = getPacketType();

View file

@ -375,13 +375,15 @@ class SX128x: public PhysicalLayer {
\param cr LoRa coding rate denominator. Defaults to 7 (coding rate 4/7). \param cr LoRa coding rate denominator. Defaults to 7 (coding rate 4/7).
\param syncWord 2-byte LoRa sync word. Defaults to SX128X_SYNC_WORD_PRIVATE (0x12).
\param power Output power in dBm. Defaults to 10 dBm. \param power Output power in dBm. Defaults to 10 dBm.
\param preambleLength LoRa preamble length in symbols. Defaults to 12 symbols. \param preambleLength LoRa preamble length in symbols. Defaults to 12 symbols.
\returns \ref status_codes \returns \ref status_codes
*/ */
int16_t begin(float freq = 2400.0, float bw = 812.5, uint8_t sf = 9, uint8_t cr = 7, int8_t power = 10, uint16_t preambleLength = 12); int16_t begin(float freq = 2400.0, float bw = 812.5, uint8_t sf = 9, uint8_t cr = 7, uint8_t syncWord = SX128X_SYNC_WORD_PRIVATE, int8_t power = 10, uint16_t preambleLength = 12);
/*! /*!
\brief Initialization method for GFSK modem. \brief Initialization method for GFSK modem.
@ -666,6 +668,17 @@ class SX128x: public PhysicalLayer {
*/ */
int16_t setSyncWord(uint8_t* syncWord, uint8_t len); int16_t setSyncWord(uint8_t* syncWord, uint8_t len);
/*!
\brief Sets LoRa sync word.
\param syncWord LoRa sync word to be set.
\param controlBits Undocumented control bits, required for compatibility purposes.
\returns \ref status_codes
*/
int16_t setSyncWord(uint8_t syncWord, uint8_t controlBits = 0x44);
/*! /*!
\brief Sets CRC configuration. \brief Sets CRC configuration.