LilyGo-LoRa-Series/lib/RadioLib/src/modules/SX127x/SX1279.cpp

95 lines
2.5 KiB
C++
Raw Normal View History

2022-12-09 15:34:10 +08:00
#include "SX1279.h"
2024-05-12 10:43:40 +08:00
#if !RADIOLIB_EXCLUDE_SX127X
2022-12-09 15:34:10 +08:00
SX1279::SX1279(Module* mod) : SX1278(mod) {
}
int16_t SX1279::begin(float freq, float bw, uint8_t sf, uint8_t cr, uint8_t syncWord, int8_t power, uint16_t preambleLength, uint8_t gain) {
// execute common part
2026-04-17 10:15:48 +08:00
const uint8_t versions[] = { RADIOLIB_SX1278_CHIP_VERSION, RADIOLIB_SX1278_CHIP_VERSION_ALT, RADIOLIB_SX1278_CHIP_VERSION_RFM9X };
2024-05-12 10:43:40 +08:00
int16_t state = SX127x::begin(versions, 3, syncWord, preambleLength);
2022-12-09 15:34:10 +08:00
RADIOLIB_ASSERT(state);
// configure publicly accessible settings
2022-12-09 16:12:04 +08:00
state = setBandwidth(bw);
2022-12-09 15:34:10 +08:00
RADIOLIB_ASSERT(state);
2022-12-09 16:12:04 +08:00
state = setFrequency(freq);
2022-12-09 15:34:10 +08:00
RADIOLIB_ASSERT(state);
state = setSpreadingFactor(sf);
RADIOLIB_ASSERT(state);
state = setCodingRate(cr);
RADIOLIB_ASSERT(state);
state = setOutputPower(power);
RADIOLIB_ASSERT(state);
state = setGain(gain);
RADIOLIB_ASSERT(state);
2023-05-12 11:27:13 +08:00
// set publicly accessible settings that are not a part of begin method
state = setCRC(true);
RADIOLIB_ASSERT(state);
2022-12-09 15:34:10 +08:00
return(state);
}
int16_t SX1279::beginFSK(float freq, float br, float freqDev, float rxBw, int8_t power, uint16_t preambleLength, bool enableOOK) {
// execute common part
2026-04-17 10:15:48 +08:00
const uint8_t versions[] = { RADIOLIB_SX1278_CHIP_VERSION, RADIOLIB_SX1278_CHIP_VERSION_ALT, RADIOLIB_SX1278_CHIP_VERSION_RFM9X };
2024-05-12 10:43:40 +08:00
int16_t state = SX127x::beginFSK(versions, 3, freqDev, rxBw, preambleLength, enableOOK);
2022-12-09 15:34:10 +08:00
RADIOLIB_ASSERT(state);
// configure settings not accessible by API
state = configFSK();
RADIOLIB_ASSERT(state);
// configure publicly accessible settings
state = setFrequency(freq);
RADIOLIB_ASSERT(state);
2023-05-12 11:27:13 +08:00
state = setBitRate(br);
RADIOLIB_ASSERT(state);
2022-12-09 15:34:10 +08:00
state = setOutputPower(power);
RADIOLIB_ASSERT(state);
2022-12-09 16:12:04 +08:00
if(enableOOK) {
state = setDataShapingOOK(RADIOLIB_SHAPING_NONE);
RADIOLIB_ASSERT(state);
} else {
state = setDataShaping(RADIOLIB_SHAPING_NONE);
RADIOLIB_ASSERT(state);
}
2022-12-09 15:34:10 +08:00
return(state);
}
int16_t SX1279::setFrequency(float freq) {
2026-04-17 10:15:48 +08:00
RADIOLIB_CHECK_RANGE(freq, 137.0f, 960.0f, RADIOLIB_ERR_INVALID_FREQUENCY);
2022-12-09 15:34:10 +08:00
2022-12-09 16:12:04 +08:00
// set frequency and if successful, save the new setting
int16_t state = SX127x::setFrequencyRaw(freq);
if(state == RADIOLIB_ERR_NONE) {
2023-05-12 11:27:13 +08:00
SX127x::frequency = freq;
2022-12-09 16:12:04 +08:00
}
return(state);
2022-12-09 15:34:10 +08:00
}
2024-11-05 10:27:21 +08:00
int16_t SX1279::setModem(ModemType_t modem) {
switch(modem) {
2025-01-13 10:28:08 +08:00
case(ModemType_t::RADIOLIB_MODEM_LORA): {
2024-11-05 10:27:21 +08:00
return(this->begin());
} break;
2025-01-13 10:28:08 +08:00
case(ModemType_t::RADIOLIB_MODEM_FSK): {
2024-11-05 10:27:21 +08:00
return(this->beginFSK());
} break;
default:
return(RADIOLIB_ERR_WRONG_MODEM);
}
}
2022-12-09 15:34:10 +08:00
#endif