RadioLib
Universal wireless communication library for Arduino
Loading...
Searching...
No Matches
LR2021.h
1#if !defined(RADIOLIB_LR2021_H)
2#define RADIOLIB_LR2021_H
3
4#include "../../TypeDef.h"
5
6#if !RADIOLIB_EXCLUDE_LR2021
7
8#include "../../Module.h"
9
10#include "../../protocols/PhysicalLayer/PhysicalLayer.h"
11#include "../LR11x0/LR_common.h"
12#include "LR2021_commands.h"
13#include "LR2021_types.h"
14
15// LR2021 physical layer properties
16#define RADIOLIB_LR2021_FREQUENCY_STEP_SIZE 1.0
17#define RADIOLIB_LR2021_MAX_PACKET_LENGTH 255
18#define RADIOLIB_LR2021_CRYSTAL_FREQ 32.0
19#define RADIOLIB_LR2021_DIV_EXPONENT 25
20#define RADIOLIB_LR2021_LF_POUT_MIN -9
21#define RADIOLIB_LR2021_LF_POUT_MAX 22
22#define RADIOLIB_LR2021_HF_POUT_MIN -19
23#define RADIOLIB_LR2021_HF_POUT_MAX 12
24
25// LR20xx device types - one driver serves the family, but the parts differ in what they support
26#define RADIOLIB_LR2021_DEVICE_LR2021 (0x00)
27#define RADIOLIB_LR2021_DEVICE_LR2022 (0x01)
28#define RADIOLIB_LR2021_DEVICE_LR2012 (0x02)
29
30// GetVersion firmware versions, LR20xx datasheet Rev. 2.2 section 6.7.2 - LR2022 and LR2012 share one
31#define RADIOLIB_LR2021_FW_LR2021 (0x0118)
32#define RADIOLIB_LR2021_FW_LR20X2 (0x0200)
33
38class LR2021: public LRxxxx {
39 public:
40 // introduce PhysicalLayer overloads
46
51 LR2021(Module* mod); // cppcheck-suppress noExplicitConstructor
52
57 uint32_t irqDioNum = 5;
58
65 bool fastCad = false;
66
85
92 RadioLibTCXOVoltage_t tcxoVoltage = Voltage1V6;
93
94 // basic methods
95
103 int16_t begin(const ConfigLoRa_t& config);
104
112 int16_t beginGFSK(const ConfigFSK_t& config);
113
121 int16_t beginOOK(const ConfigOOK_t& config);
122
130 int16_t beginLRFHSS(const ConfigLRFHSS_t& config);
131
139 int16_t beginFLRC(const ConfigFLRC_t& config);
140
149 int16_t transmit(const uint8_t* data, size_t len, uint8_t addr = 0) override;
150
160 int16_t receive(uint8_t* data, size_t len, RadioLibTime_t timeout = 0) override;
161
167 int16_t transmitDirect(uint32_t frf = 0) override;
168
174 int16_t receiveDirect() override;
175
180 int16_t scanChannel() override;
181
190 int16_t scanChannel(const ChannelScanConfig_t &config) override;
191
197 int16_t standby() override;
198
205 int16_t standby(uint8_t mode) override;
206
214 int16_t standby(uint8_t mode, bool wakeup);
215
221 int16_t sleep() override;
222
230 int16_t sleep(bool retainConfig, uint32_t sleepTime);
231
237 size_t getPacketLength(bool update = true) override;
238
239 // interrupt methods
240
247 int16_t startReceive() override;
248
261 int16_t startReceiveDutyCycle(uint32_t rxPeriod, uint32_t sleepPeriod, RadioLibIrqFlags_t irqFlags = RADIOLIB_IRQ_RX_DEFAULT_FLAGS, RadioLibIrqFlags_t irqMask = RADIOLIB_IRQ_RX_DEFAULT_MASK);
262
281 int16_t startReceiveDutyCycleAuto(uint16_t senderPreambleLength = 0, uint16_t minSymbols = 0, RadioLibIrqFlags_t irqFlags = RADIOLIB_IRQ_RX_DEFAULT_FLAGS, RadioLibIrqFlags_t irqMask = RADIOLIB_IRQ_RX_DEFAULT_MASK);
282
291 int16_t readData(uint8_t* data, size_t len) override;
292
297 int16_t finishReceive() override;
298
304 int16_t startChannelScan() override;
305
312 int16_t startChannelScan(const ChannelScanConfig_t &cfg) override;
313
318 int16_t getChannelScanResult() override;
319
324 uint32_t getIrqFlags() override;
325
331 int16_t setIrqFlags(uint32_t irq) override;
332
338 int16_t clearIrqFlags(uint32_t irq) override;
339
346 int16_t setModem(ModemType_t modem) override;
347
348 // configuration methods
349
360 int16_t setFrequency(uint32_t freq) override;
361
371 int16_t setFrequency(uint32_t freq, bool skipCalibration);
372
378 int16_t setOutputPower(int8_t power) override;
379
389 int16_t setOutputPower(int8_t power, uint32_t rampTimeUs);
390
400 void setPaTable(LR2021PaTableEntry_t* table, bool highFreq);
401
408 int16_t setStandbyXOSC(bool enable);
409
411 void setRfSwitchTable(const uint32_t (&pins)[Module::RFSWITCH_MAX_PINS], const Module::RfSwitchMode_t table[]);
412
419 int16_t forceLDRO(bool enable);
420
426 int16_t autoLDRO();
427
434 int16_t setBandwidth(uint32_t bw) override;
435
442 int16_t setSpreadingFactor(uint8_t sf) override;
443
450 int16_t setSpreadingFactor(uint8_t sf, bool legacy);
460 int16_t setCodingRate(uint8_t cr, bool longInterleave = false) override;
461
467 int16_t setSyncWord(uint8_t syncWord);
468
476 int16_t setPreambleLength(size_t len, size_t detLen = 0xFFFFFFFF) override;
477
488 int16_t setTCXO(RadioLibTCXOVoltage_t voltage, uint32_t delay = 1000000);
489
498 int16_t setCRC(uint8_t len, uint32_t initial = 0x00001D0FUL, uint32_t polynomial = 0x00001021UL, bool inverted = true);
499
505 int16_t invertIQ(bool enable) override;
506
512 int16_t setBitRate(uint32_t br) override;
513
519 int16_t setFrequencyDeviation(uint32_t freqDev) override;
520
528 int16_t setRxBandwidth(uint32_t rxBw);
529
536 int16_t setSyncWord(uint8_t* syncWord, size_t len) override;
537
543 int16_t setNodeAddress(uint8_t nodeAddr);
544
551 int16_t setBroadcastAddress(uint8_t broadAddr);
552
557 int16_t disableAddressFiltering();
558
566 int16_t setDataShaping(uint8_t sh) override;
567
573 int16_t setEncoding(uint8_t encoding) override;
574
580 int16_t fixedPacketLengthMode(uint8_t len = RADIOLIB_LR2021_MAX_PACKET_LENGTH);
581
587 int16_t variablePacketLengthMode(uint8_t maxLen = RADIOLIB_LR2021_MAX_PACKET_LENGTH);
588
596 int16_t setWhitening(bool enabled, uint16_t initial = 0x01FF);
597
605 int16_t checkDataRate(DataRate_t dr, ModemType_t modem = RADIOLIB_MODEM_NONE) override;
606
616 int16_t setLrFhssConfig(uint8_t bw, uint8_t cr, bool narrowGrid, uint8_t hdrCount = 3, uint16_t hopSeed = 0x13A) override;
617
623 int16_t setRxBoostedGainMode(uint8_t level);
624
630 RadioLibTime_t getTimeOnAir(size_t len) override;
631
637 int16_t getModem(ModemType_t* modem) override;
638
640 int16_t getMode(RadioModeType_t* mode) override;
641
643 int16_t stageMode(RadioModeType_t mode, RadioModeConfig_t* cfg) override;
644
646 int16_t launchMode() override;
647
649 int16_t writeTxBuffer(const uint8_t* data, size_t len) override;
650
652 int16_t clearTxBuffer() override;
653
659 float getVoltage(uint8_t bits = 13);
660
667 float getTemperature(uint8_t source, uint8_t bits = 13);
668
674 float getRSSI() override;
675
684 float getRSSI(bool packet, bool skipReceive = false);
685
690 float getSNR() override;
691
696 int32_t getFrequencyError();
697
702 uint8_t randomByte() override;
703
709 int16_t implicitHeader(size_t len);
710
715 int16_t explicitHeader();
716
727 int16_t ookDetector(uint16_t pattern = 0x0285, uint8_t len = 16, uint8_t repeats = 0, bool syncRaw = false, bool rising = false, uint8_t sofLen = 0);
728
734 int16_t setOokDetectionThreshold(int16_t level);
735
750 int16_t setSideDetector(const LR2021LoRaSideDetector_t* cfg, size_t numDetectors);
751
758 int16_t setGain(uint8_t gain);
759
767 int16_t setTempCompensationInternal(uint8_t mode);
768
786 int16_t setTempCompensationNTC(uint8_t mode, uint16_t rRatio, uint16_t betaK, uint8_t delay);
787
801 int16_t getLoRaPacketStatus(uint8_t* cr, bool* crc, uint8_t* packetLen = NULL, float* snrPacket = NULL, float* rssiPacket = NULL, float* rssiSignalPacket = NULL, uint8_t* detector = NULL, int32_t* freqError = NULL);
802
809 int16_t getLoRaRxHeaderInfo(uint8_t* cr, bool* hasCRC);
810
816 int16_t getErrors(uint16_t* err);
817
826 int16_t getLoRaRxStats(uint16_t* pktRxTotal, uint16_t* pktCrcError, uint16_t* headerCrcError, uint16_t* falseSynch);
827
837 int16_t getRangingStats(uint16_t* exchangeValid, uint16_t* requestValid, uint16_t* responseDone, uint16_t* timeout, uint16_t* requestDiscarded);
838
850 int16_t getGfskRxStats(uint16_t* packetRx, uint16_t* packetCrcError, uint16_t* lenError, uint16_t* preambleDet, uint16_t* syncOk, uint16_t* syncFail, uint16_t* timeout);
851
859 int16_t getOqpskRxStats(uint16_t* packetRx, uint16_t* crcError, uint16_t* lenError);
860
868 int16_t getFlrcRxStats(uint16_t* packetRx, uint16_t* packetCrcError, uint16_t* lenError);
869
877 int16_t getOokRxStats(uint16_t* packetRx, uint16_t* crcError, uint16_t* lenError);
878
883 int16_t setRegulatorLDO();
884
889 int16_t setRegulatorDCDC();
890
897 int16_t setFifoSize(bool rx, size_t size);
898
908 int16_t setIQStream(uint32_t rate, bool fifo);
909
915 int16_t getFifoIrqFlags(uint8_t* rxFifoFlags, uint8_t* txFifoFlags);
916
923 int16_t clearFifoIrqFlags(uint8_t rxFifoFlags, uint8_t txFifoFlags);
924
930 int16_t getRxFifoLevel(uint16_t* level);
931
937 int16_t getTxFifoLevel(uint16_t* level);
938
948 int16_t readRadioRxFifo(uint8_t* data, size_t len);
949
950#if !RADIOLIB_GODMODE && !RADIOLIB_LOW_LEVEL
951 protected:
952#endif
953 Module* getMod() override;
954
955#if !RADIOLIB_GODMODE
956 protected:
957#endif
959 uint8_t chipType = RADIOLIB_LR2021_DEVICE_LR2021;
960
961#if !RADIOLIB_GODMODE
962 private:
963#endif
964 uint8_t gainModeLf = RADIOLIB_LR2021_RX_BOOST_LF;
965 uint8_t gainModeHf = RADIOLIB_LR2021_RX_BOOST_HF;
966
967 bool standbyXOSC = false;
968
969 // cached FLRC parameters
970 uint16_t bitRateFlrc = 0;
971 uint8_t codingRateFlrc = 0;
972
973 // pointers to PA lookup tables - may be overridden by the user
974 LR2021PaTableEntry_t* paOptTable[2] = { nullptr, nullptr };
975
976 int16_t modSetup(uint32_t freq, uint8_t modem);
977 bool findChip(void);
978 const char* chipName(void) const;
979 bool subGhzOnly(void) const;
980 int16_t config(uint8_t modem);
981 int16_t setPacketMode(uint8_t mode, uint8_t len);
982 int16_t startCad(uint8_t symbolNum, uint8_t detPeak, bool fast, uint8_t exitMode, RadioLibTime_t timeout);
983 void updatePowerLimits(bool highFreq);
984
985 // chip control commands
986 int16_t writeRadioTxFifo(const uint8_t* data, size_t len);
987 int16_t writeRegMem32(uint32_t addr, const uint32_t* data, size_t len);
988 int16_t writeRegMemMask32(uint32_t addr, uint32_t mask, uint32_t data);
989 int16_t readRegMem32(uint32_t addr, uint32_t* data, size_t len);
990 int16_t setFs(void);
991 int16_t setAdditionalRegToRetain(uint8_t slot, uint32_t addr);
992 int16_t setRx(uint32_t timeout);
993 int16_t setTx(uint32_t timeout);
994 int16_t setRxTxFallbackMode(uint8_t mode);
995 int16_t setRxDutyCycle(uint32_t rxMaxTime, uint32_t cycleTime, uint8_t mode);
996 int16_t autoTxRx(uint32_t delay, uint8_t mode, uint32_t timeout);
997 int16_t getRxPktLength(uint16_t* len);
998 int16_t resetRxStats(void);
999 int16_t setDefaultRxTxTimeout(uint32_t rxTimeout, uint32_t txTimeout);
1000 int16_t setRegMode(uint8_t mode);
1001 int16_t calibrate(uint8_t blocks);
1002 int16_t calibrateFrontEnd(const uint16_t freq[3]);
1003 int16_t getVbat(uint8_t resolution, uint16_t* vbat);
1004 int16_t getTemp(uint8_t source, uint8_t resolution, float* temp);
1005 int16_t setEolConfig(bool enable, uint8_t trim);
1006 int16_t getRandomNumber(uint32_t* rnd);
1007 int16_t getVersion(uint8_t* major, uint8_t* minor);
1008 int16_t clearErrors(void);
1009 int16_t setDioFunction(uint8_t dio, uint8_t func, uint8_t pullDrive);
1010 int16_t setDioRfSwitchConfig(uint8_t dio, uint8_t func);
1011 int16_t setDioIrqConfig(uint8_t dio, uint32_t irq);
1012 int16_t clearIrqState(uint32_t irq);
1013 int16_t getAndClearIrqStatus(uint32_t* irq);
1014 int16_t configFifoIrq(uint8_t rxFifoIrq, uint8_t txFifoIrq, uint16_t rxHighThreshold, uint16_t txLowThreshold, uint16_t rxLowThreshold, uint16_t txHighThreshold);
1015 int16_t getAndClearFifoIrqFlags(uint8_t* rxFifoFlags, uint8_t* txFifoFlags);
1016 int16_t clearRxFifo(void);
1017 int16_t clearTxFifo(void);
1018 int16_t configLfClock(uint8_t cfg);
1019 int16_t configClkOutputs(uint8_t scaling);
1020 int16_t setTcxoMode(uint8_t tune, uint32_t startTime);
1021 int16_t setXoscCpTrim(uint8_t xta, uint8_t xtb, uint8_t startTime);
1022 int16_t activatePram(void);
1023 int16_t checkPramLoaded(bool* loaded);
1024 int16_t getPramVersion(uint16_t* version);
1025
1026 // radio frequency front end commands
1027 int16_t setRfFrequency(uint32_t rfFreq);
1028 int16_t setRxPath(uint8_t rxPath, uint8_t rxBoost);
1029 int16_t getRssiInst(float* rssi);
1030 int16_t setRssiCalibration(uint8_t rxPath, const uint16_t gain[RADIOLIB_LR2021_GAIN_TABLE_LENGTH], const uint8_t noiseFloor[RADIOLIB_LR2021_GAIN_TABLE_LENGTH]);
1031 int16_t setTimestampSource(uint8_t index, uint8_t source);
1032 int16_t getTimestampValue(uint8_t index, uint32_t* timestamp);
1033 int16_t setCca(uint32_t duration, uint8_t gain);
1034 int16_t getCcaResult(float* rssiMin, float* rssiMax, float* rssiAvg);
1035 int16_t setCadParams(uint32_t cadTimeout, uint8_t threshold, uint8_t exitMode, uint32_t trxTimeout);
1036 int16_t setCad(void);
1037 int16_t selPa(uint8_t pa);
1038 int16_t setPaConfig(uint8_t pa, uint8_t paLfMode, uint8_t paLfDutyCycle, uint8_t paLfSlices, uint8_t paHfDutyCycle);
1039 int16_t setTxParams(int8_t txPower, uint8_t rampTime);
1040
1041 // modem configuration commands
1042 int16_t setPacketType(uint8_t packetType);
1043 int16_t getPacketType(uint8_t* packetType);
1044
1045 // LoRa commands
1046 int16_t setLoRaModulationParams(uint8_t sf, uint8_t bw, uint8_t cr, uint8_t ldro);
1047 int16_t setLoRaPacketParams(uint16_t preambleLen, uint8_t hdrType, uint8_t payloadLen, uint8_t crcType, uint8_t invertIQ);
1048 int16_t setLoRaSynchTimeout(uint16_t numSymbols);
1049 int16_t setLoRaSyncword(uint8_t syncword);
1050 int16_t setLoRaSideDetConfig(uint8_t* configs, size_t numSideDets);
1051 int16_t setLoRaSideDetSyncword(uint8_t* syncwords, size_t numSideDets);
1052 int16_t setLoRaCadParams(uint8_t numSymbols, bool preambleOnly, uint8_t pnrDelta, uint8_t cadExitMode, uint32_t timeout, uint8_t detPeak);
1053 int16_t setLoRaCad(void);
1054 int16_t setLoRaAddress(uint8_t addrLen, uint8_t addrPos, const uint8_t* addr);
1055 int16_t setLoRaHopping(uint8_t hopCtrl, uint16_t hopPeriod, const uint32_t* freqHops, size_t numFreqHops);
1056 int16_t setLoRaTxSync(uint8_t function, uint8_t dioNum);
1057 int16_t setLoRaSideDetCad(const uint8_t* pnrDelta, const uint8_t* detPeak, size_t numSideDets);
1058 int16_t setLoRaHeaderType(uint8_t hdrType, size_t len = RADIOLIB_LR2021_MAX_PACKET_LENGTH);
1059
1060 // ranging commands
1061 int16_t setRangingAddr(uint32_t addr, uint8_t checkLen);
1062 int16_t setRangingReqAddr(uint32_t addr);
1063 int16_t getRangingResult(uint8_t type, uint32_t* rng1, uint8_t* rssi1, uint32_t* rng2);
1064 int16_t setRangingTxRxDelay(uint32_t delay);
1065 int16_t setRangingParams(bool spyMode, uint8_t nbSymbols);
1066
1067 // GFSK commands
1068 int16_t setGfskModulationParams(uint32_t bitRate, uint8_t pulseShape, uint8_t rxBw, uint32_t freqDev);
1069 int16_t setGfskPacketParams(uint16_t preambleLen, uint8_t preambleDetect, bool longPreamble, bool pldLenBits, uint8_t addrComp, uint8_t packetFormat, uint16_t payloadLen, uint8_t crc, uint8_t dcFree);
1070 int16_t setGfskWhiteningParams(uint8_t whitenType, uint16_t init);
1071 int16_t setGfskCrcParams(uint32_t poly, uint32_t init);
1072 int16_t setGfskSyncword(const uint8_t* syncWord, size_t syncWordLen, bool msbFirst);
1073 int16_t setGfskAddress(uint8_t addrNode, uint8_t addrBroadcast);
1074 int16_t getGfskPacketStatus(uint16_t* packetLen, float* rssiAvg, float* rssiSync, bool* addrMatchNode, bool* addrMatchBroadcast, float* lqi);
1075
1076 // OQPSK commands
1077 int16_t setOqpskParams(uint8_t mode, uint8_t rxBw, uint8_t payloadLen, uint16_t preambleLen, bool addrFilt, bool fcsManual);
1078 int16_t getOqpskPacketStatus(uint8_t* rxHeader, uint16_t* payloadLen, float* rssiAvg, float* rssiSync, float* lqi);
1079 int16_t setOqpskPacketLen(uint8_t len);
1080 int16_t setOqpskAddress(const uint8_t longDestAddr[8], uint16_t shortDestAddr, uint16_t panId, uint8_t transId);
1081
1082 // BPSK commands
1083 int16_t setBpskModulationParams(uint32_t bitRate, uint8_t pulseShape, bool diff, uint8_t diffInit);
1084 int16_t setBpskPacketParams(uint8_t payloadLen, uint8_t mode, bool sigFoxControlMsg, uint8_t sigFoxRank);
1085
1086 // FLRC commands
1087 int16_t setFlrcModulationParams(uint8_t brBw, uint8_t cr, uint8_t pulseShape);
1088 int16_t setFlrcPacketParams(uint8_t agcPreambleLen, uint8_t syncWordLen, uint8_t syncWordTx, uint8_t syncMatch, bool fixedLength, uint8_t crc, uint16_t payloadLen);
1089 int16_t getFlrcPacketStatus(uint16_t* packetLen, float* rssiAvg, float* rssiSync, uint8_t* syncWordNum, int32_t* freqError);
1090 int16_t setFlrcSyncWord(uint8_t syncWordNum, uint32_t syncWord);
1091
1092 // LR-FHSS commands
1093 int16_t lrFhssSetSyncword(uint32_t syncWord);
1095 //int16_t readLrFhssHoppingTable(LR2021LrFhssHopTableEntry_t* hopTable[40], size_t* hopTableLen);
1096 //int16_t writeLrFhssHoppingTable(LR2021LrFhssHopTableEntry_t* hopTable[40], size_t hopTableLen);
1097
1098 // OOK commands
1099 int16_t setOokModulationParams(uint32_t bitRate, uint8_t pulseShape, uint8_t rxBw, uint8_t depth);
1100 int16_t setOokPacketParams(uint16_t preambleLen, uint8_t addrComp, uint8_t packetFormat, uint16_t payloadLen, uint8_t crc, uint8_t manchester);
1101 int16_t setOokCrcParams(uint32_t poly, uint32_t init);
1102 int16_t setOokSyncword(const uint8_t* syncWord, size_t syncWordLen, bool msbFirst);
1103 int16_t setOokAddress(uint8_t addrNode, uint8_t addrBroadcast);
1104 int16_t getOokPacketStatus(uint16_t* packetLen, float* rssiAvg, float* rssiHigh, bool* addrMatchNode, bool* addrMatchBroadcast, float* lqi);
1105 int16_t setOokDetector(uint16_t preamblePattern, uint8_t patternLen, uint8_t patternNumRepeaters, bool syncWordRaw, bool sofDelimiterRising, uint8_t sofDelimiterLen);
1106 int16_t setOokWhiteningParams(uint8_t bitIdx, uint16_t poly, uint16_t init);
1107
1108 // test commands
1109 int16_t setTxTestMode(uint8_t mode);
1110
1111 // port of semtech's workaround
1112 int16_t setDCDCworkaround();
1113 int16_t resetDCDCworkaround();
1114};
1115#endif
1116
1117#endif
int16_t setSpreadingFactor(uint8_t sf) override
Sets LoRa spreading factor. Allowed values range from 5 to 12.
Definition LR2021_config.cpp:332
int16_t setSyncWord(uint8_t syncWord)
Sets LoRa sync word.
Definition LR2021_config.cpp:407
int16_t receive(uint8_t *data, size_t len, RadioLibTime_t timeout=0) override
Blocking binary receive method. Overloads for string-based transmissions are implemented in PhysicalL...
Definition LR2021.cpp:256
int16_t setFifoSize(bool rx, size_t size)
Set the size of Rx/Tx FIFO.
Definition LR2021_cmds_chip_control.cpp:399
int16_t readData(uint8_t *data, size_t len) override
Reads data received after calling startReceive method. When the packet length is not known in advance...
Definition LR2021.cpp:499
int16_t sleep() override
Sets the module to sleep mode. To wake the device up, call standby(). Overload with warm start enable...
Definition LR2021.cpp:398
LR2021(Module *mod)
Default constructor.
Definition LR2021.cpp:8
void setPaTable(LR2021PaTableEntry_t *table, bool highFreq)
Sets custom PA configuration table.
Definition LR2021_config.cpp:186
int16_t begin(const ConfigLoRa_t &config)
Initialization method for LoRa modem.
Definition LR2021.cpp:25
int16_t setFrequencyDeviation(uint32_t freqDev) override
Sets GFSK frequency deviation. Allowed values range from 600 Hz to 500 kHz.
Definition LR2021_config.cpp:627
int16_t getLoRaPacketStatus(uint8_t *cr, bool *crc, uint8_t *packetLen=NULL, float *snrPacket=NULL, float *rssiPacket=NULL, float *rssiSignalPacket=NULL, uint8_t *detector=NULL, int32_t *freqError=NULL)
Read status of the last received packet. Each parameter can be set to NULL if the caller is not inten...
Definition LR2021_cmds_lora.cpp:96
int16_t setLrFhssConfig(uint8_t bw, uint8_t cr, bool narrowGrid, uint8_t hdrCount=3, uint16_t hopSeed=0x13A) override
Sets LR-FHSS configuration.
Definition LR2021_config.cpp:911
int16_t receiveDirect() override
Starts direct mode reception. Only implemented for PhysicalLayer compatibility, as LR2021 does not su...
Definition LR2021.cpp:338
int16_t getLoRaRxHeaderInfo(uint8_t *cr, bool *hasCRC)
Get LoRa header information from last received packet. Implementation based on getLoRaPacketStatus.
Definition LR2021.cpp:1246
int16_t setStandbyXOSC(bool enable)
Set standby mode to be used. XOSC standby uses more power, but allows faster switching between Rx and...
Definition LR2021_config.cpp:190
int16_t clearIrqFlags(uint32_t irq) override
Clear interrupt on a specific IRQ bit (e.g. RxTimeout, CadDone).
Definition LR2021.cpp:641
int16_t checkDataRate(DataRate_t dr, ModemType_t modem=RADIOLIB_MODEM_NONE) override
Check the data rate can be configured by this module.
Definition LR2021_config.cpp:885
int16_t autoLDRO()
Re-enables automatic LDRO configuration. Only available in LoRa mode. After calling this method,...
Definition LR2021_config.cpp:249
int16_t writeTxBuffer(const uint8_t *data, size_t len) override
Write a payload into the transmit buffer without staging or starting a transmission....
Definition LR2021.cpp:1105
int16_t beginFLRC(const ConfigFLRC_t &config)
Initialization method for FLRC modem.
Definition LR2021.cpp:154
int16_t clearFifoIrqFlags(uint8_t rxFifoFlags, uint8_t txFifoFlags)
Clear FIFO IRQ flags.
Definition LR2021_cmds_chip_control.cpp:265
int16_t disableAddressFiltering()
Disables address filtering. Calling this method will also erase previously set addresses.
Definition LR2021_config.cpp:1055
int16_t setRxBandwidth(uint32_t rxBw)
Sets GFSK receiver bandwidth. Allowed values are 4.8, 5.8, 7.3, 9.7, 11.7, 14.6, 19....
Definition LR2021_config.cpp:645
int16_t setBroadcastAddress(uint8_t broadAddr)
Sets broadcast address. Calling this method will also enable address filtering for node and broadcast...
Definition LR2021_config.cpp:1036
int16_t scanChannel() override
Performs scan for LoRa transmission in the current channel. Detects both preamble and payload.
Definition LR2021.cpp:346
int16_t setBitRate(uint32_t br) override
Sets GFSK bit rate. Allowed values range from 500 bps to 2 Mbps.
Definition LR2021_config.cpp:566
uint32_t getIrqFlags() override
Read currently active IRQ flags.
Definition LR2021.cpp:633
int16_t beginOOK(const ConfigOOK_t &config)
Initialization method for OOK modem.
Definition LR2021.cpp:99
int16_t getRangingStats(uint16_t *exchangeValid, uint16_t *requestValid, uint16_t *responseDone, uint16_t *timeout, uint16_t *requestDiscarded)
Get ranging Rx statistics.
Definition LR2021_cmds_ranging.cpp:44
float getRSSI() override
Gets received signal strength indicator. Overload with packet mode enabled for PhysicalLayer compatib...
Definition LR2021.cpp:1177
int16_t setOokDetectionThreshold(int16_t level)
Set OOK detection threshold.
Definition LR2021_config.cpp:1082
int16_t setCRC(uint8_t len, uint32_t initial=0x00001D0FUL, uint32_t polynomial=0x00001021UL, bool inverted=true)
Sets CRC configuration.
Definition LR2021_config.cpp:494
int16_t explicitHeader()
Set explicit header mode for future reception/transmission.
Definition LR2021_config.cpp:1012
int16_t getOokRxStats(uint16_t *packetRx, uint16_t *crcError, uint16_t *lenError)
Get OOK Rx statistics.
Definition LR2021_cmds_ook.cpp:62
int16_t forceLDRO(bool enable)
Forces LoRa low data rate optimization. Only available in LoRa mode. After calling this method,...
Definition LR2021_config.cpp:234
int16_t getChannelScanResult() override
Read the channel scan result.
Definition LR2021.cpp:610
int16_t getFifoIrqFlags(uint8_t *rxFifoFlags, uint8_t *txFifoFlags)
Read tx FIFO level.
Definition LR2021_cmds_chip_control.cpp:257
int16_t getRxFifoLevel(uint16_t *level)
Read Rx FIFO level.
Definition LR2021_cmds_chip_control.cpp:278
int16_t getErrors(uint16_t *err)
Get internal error bits.
Definition LR2021_cmds_chip_control.cpp:205
int16_t startChannelScan() override
Interrupt-driven channel activity detection method. IRQ1 will be activated when LoRa preamble is dete...
Definition LR2021.cpp:560
int16_t transmitDirect(uint32_t frf=0) override
Starts direct mode transmission.
Definition LR2021.cpp:323
int16_t variablePacketLengthMode(uint8_t maxLen=RADIOLIB_LR2021_MAX_PACKET_LENGTH)
Set modem in variable packet length mode. Available in GFSK mode only.
Definition LR2021_config.cpp:848
int16_t setTCXO(RadioLibTCXOVoltage_t voltage, uint32_t delay=1000000)
Sets TCXO (Temperature Compensated Crystal Oscillator) configuration.
Definition LR2021_config.cpp:460
int16_t setEncoding(uint8_t encoding) override
Sets transmission encoding. Available in GFSK mode only. Serves only as alias for PhysicalLayer compa...
Definition LR2021_config.cpp:803
int16_t launchMode() override
Launch previously staged mode.
Definition LR2021.cpp:1124
int16_t invertIQ(bool enable) override
Enable/disable inversion of the I and Q signals.
Definition LR2021_config.cpp:552
int16_t getMode(RadioModeType_t *mode) override
Read the operating mode the radio is in, as the chip reports it. Unlike PhysicalLayer::stagedMode,...
Definition LR2021.cpp:933
OpMode_t
Custom operation modes for LR2021. Needed because LR2021 has several modems (sub-GHz,...
Definition LR2021.h:71
@ MODE_END_OF_TABLE
Definition LR2021.h:73
@ MODE_RX
Definition LR2021.h:77
@ MODE_RX_HF
Definition LR2021.h:81
@ MODE_STBY
Definition LR2021.h:75
@ MODE_TX_HF
Definition LR2021.h:83
@ MODE_TX
Definition LR2021.h:79
int16_t setWhitening(bool enabled, uint16_t initial=0x01FF)
Sets GFSK whitening parameters.
Definition LR2021_config.cpp:852
int16_t transmit(const uint8_t *data, size_t len, uint8_t addr=0) override
Blocking binary transmit method. Overloads for string-based transmissions are implemented in Physical...
Definition LR2021.cpp:196
RadioLibTime_t getTimeOnAir(size_t len) override
Get expected time-on-air for a given size of payload.
Definition LR2021.cpp:862
int16_t setGain(uint8_t gain)
Sets gain of receiver LNA (low-noise amplifier). Can be set to any integer in range 1 to 13,...
Definition LR2021_config.cpp:1165
int16_t beginGFSK(const ConfigFSK_t &config)
Initialization method for FSK modem.
Definition LR2021.cpp:57
int16_t getTxFifoLevel(uint16_t *level)
Read Tx FIFO level.
Definition LR2021_cmds_chip_control.cpp:285
int16_t getModem(ModemType_t *modem) override
Get modem currently in use by the radio.
Definition LR2021.cpp:911
int16_t fixedPacketLengthMode(uint8_t len=RADIOLIB_LR2021_MAX_PACKET_LENGTH)
Set modem in fixed packet length mode. Available in GFSK mode only.
Definition LR2021_config.cpp:844
int32_t getFrequencyError()
Gets frequency error of the latest received packet.
Definition LR2021.cpp:1224
int16_t getOqpskRxStats(uint16_t *packetRx, uint16_t *crcError, uint16_t *lenError)
Get OQPSK Rx statistics.
Definition LR2021_cmds_oqpsk.cpp:19
int16_t setDataShaping(uint8_t sh) override
Sets time-bandwidth product of Gaussian filter applied for shaping. Allowed values are RADIOLIB_SHAPI...
Definition LR2021_config.cpp:765
int16_t getLoRaRxStats(uint16_t *pktRxTotal, uint16_t *pktCrcError, uint16_t *headerCrcError, uint16_t *falseSynch)
Get LoRa Rx statistics.
Definition LR2021_cmds_lora.cpp:86
float getVoltage(uint8_t bits=13)
Read the supply voltage on the Vbat pin.
Definition LR2021.cpp:1151
int16_t finishReceive() override
Clean up after reception is done.
Definition LR2021.cpp:551
int16_t standby() override
Sets the module to standby mode (overload for PhysicalLayer compatibility). Uses 13 MHz RC oscillator...
Definition LR2021.cpp:376
int16_t setFrequency(uint32_t freq) override
Sets carrier frequency. Allowed values are in range from 150 to 1090 MHz, 1900 - 2200 MHz and 2400 - ...
Definition LR2021_config.cpp:84
void setRfSwitchTable(const uint32_t(&pins)[Module::RFSWITCH_MAX_PINS], const Module::RfSwitchMode_t table[])
Some modules contain external RF switch controlled by pins. This function gives RadioLib control over...
Definition LR2021_config.cpp:203
int16_t startReceiveDutyCycleAuto(uint16_t senderPreambleLength=0, uint16_t minSymbols=0, RadioLibIrqFlags_t irqFlags=RADIOLIB_IRQ_RX_DEFAULT_FLAGS, RadioLibIrqFlags_t irqMask=RADIOLIB_IRQ_RX_DEFAULT_MASK)
Calls startReceiveDutyCycle with rxPeriod and sleepPeriod set so the unit shouldn't miss any messages...
Definition LR2021.cpp:477
int16_t setBandwidth(uint32_t bw) override
Sets LoRa bandwidth. Allowed values are 7.8, 10.4, 15.6, 20.8, 31.25, 41.67, 62.5,...
Definition LR2021_config.cpp:261
int16_t setModem(ModemType_t modem) override
Set modem for the radio to use. Will perform full reset and reconfigure the radio using its default p...
Definition LR2021.cpp:645
int16_t setNodeAddress(uint8_t nodeAddr)
Sets node address. Calling this method will also enable address filtering for node address only.
Definition LR2021_config.cpp:1016
int16_t setOutputPower(int8_t power) override
Sets output power. Allowed values are in range from -9 to 22 dBm (sub-GHz PA) or -19 to 12 dBm (high-...
Definition LR2021_config.cpp:151
int16_t setSideDetector(const LR2021LoRaSideDetector_t *cfg, size_t numDetectors)
Configure LoRa side detector, which enables to detect mutiple spreading factors and receive one of th...
Definition LR2021_config.cpp:1087
int16_t setRegulatorDCDC()
Set regulator mode to DC-DC.
Definition LR2021_cmds_chip_control.cpp:344
int16_t clearTxBuffer() override
Discard a payload previously written by writeTxBuffer. On radios whose transmit buffer is simply over...
Definition LR2021.cpp:1120
int16_t setTempCompensationInternal(uint8_t mode)
Enable compensation of crystal self-heating drift during transmission, using the internal temperature...
Definition LR2021_config.cpp:1172
int16_t implicitHeader(size_t len)
Set implicit header mode for future reception/transmission.
Definition LR2021_config.cpp:1008
int16_t setCodingRate(uint8_t cr, bool longInterleave=false) override
Sets LoRa coding rate denominator. Allowed values range from 4 to 8. Note that a value of 4 means no ...
Definition LR2021_config.cpp:361
int16_t startReceive() override
Interrupt-driven receive method with default parameters. Implemented for compatibility with PhysicalL...
Definition LR2021.cpp:435
int16_t beginLRFHSS(const ConfigLRFHSS_t &config)
Initialization method for LR-FHSS modem.
Definition LR2021.cpp:137
int16_t setRxBoostedGainMode(uint8_t level)
Enables or disables Rx Boosted Gain mode (additional Rx gain for increased power consumption).
Definition LR2021_config.cpp:933
int16_t setRegulatorLDO()
Set regulator mode to LDO.
Definition LR2021_cmds_chip_control.cpp:340
int16_t setTempCompensationNTC(uint8_t mode, uint16_t rRatio, uint16_t betaK, uint8_t delay)
Enable compensation of crystal self-heating drift during transmission, using an external NTC thermist...
Definition LR2021_config.cpp:1183
int16_t startReceiveDutyCycle(uint32_t rxPeriod, uint32_t sleepPeriod, RadioLibIrqFlags_t irqFlags=RADIOLIB_IRQ_RX_DEFAULT_FLAGS, RadioLibIrqFlags_t irqMask=RADIOLIB_IRQ_RX_DEFAULT_MASK)
Interrupt-driven receive method where the device mostly sleeps and periodically wakes to listen....
Definition LR2021.cpp:439
float getSNR() override
Gets SNR (Signal to Noise Ratio) of the last received packet. Only available for LoRa modem.
Definition LR2021.cpp:1213
int16_t setPreambleLength(size_t len, size_t detLen=0xFFFFFFFF) override
Sets preamble length for LoRa or GFSK modem. Allowed values range from 1 to 65535.
Definition LR2021_config.cpp:419
int16_t getFlrcRxStats(uint16_t *packetRx, uint16_t *packetCrcError, uint16_t *lenError)
Get FLRC Rx statistics.
Definition LR2021_cmds_flrc.cpp:28
int16_t stageMode(RadioModeType_t mode, RadioModeConfig_t *cfg) override
Stage mode of the radio to be launched later using launchMode.
Definition LR2021.cpp:963
size_t getPacketLength(bool update=true) override
Query modem for the packet length of received payload.
Definition LR2021.cpp:420
int16_t readRadioRxFifo(uint8_t *data, size_t len)
Directly read contents of the Rx FIFO. WARNING: This method accesses the FIFO directly and is meant f...
Definition LR2021_cmds_chip_control.cpp:11
uint8_t randomByte() override
Get one truly random byte from RSSI noise.
Definition LR2021.cpp:1240
int16_t setIrqFlags(uint32_t irq) override
Set interrupt on DIO1 to be sent on a specific IRQ bit (e.g. RxTimeout, CadDone).
Definition LR2021.cpp:637
int16_t ookDetector(uint16_t pattern=0x0285, uint8_t len=16, uint8_t repeats=0, bool syncRaw=false, bool rising=false, uint8_t sofLen=0)
Set OOK detector properties. The default values are set to allow ADS-B reception.
Definition LR2021_config.cpp:1070
int16_t setIQStream(uint32_t rate, bool fifo)
Enable streaming of raw I/Q samples. After calling, the radio has to be reset in order to return to n...
Definition LR2021_cmds_chip_control.cpp:426
float getTemperature(uint8_t source, uint8_t bits=13)
Read the temperature.
Definition LR2021.cpp:1164
int16_t getGfskRxStats(uint16_t *packetRx, uint16_t *packetCrcError, uint16_t *lenError, uint16_t *preambleDet, uint16_t *syncOk, uint16_t *syncFail, uint16_t *timeout)
Get GFSK Rx statistics.
Definition LR2021_cmds_gfsk.cpp:66
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition Module.h:74
static const size_t RFSWITCH_MAX_PINS
The maximum number of pins supported by the RF switch code. Note: It is not recommended to use this c...
Definition Module.h:83
@ MODE_TX
Transmission mode.
Definition Module.h:120
@ MODE_IDLE
Idle mode.
Definition Module.h:114
@ MODE_RX
Receive mode.
Definition Module.h:117
@ MODE_END_OF_TABLE
End of table marker, use END_OF_MODE_TABLE constant instead. Value is zero to ensure zero-initialized...
Definition Module.h:111
virtual int16_t startReceive()
Sets module to received mode using its default configuration.
Definition PhysicalLayer.cpp:131
virtual int16_t readData(uint8_t *data, size_t len)
Reads data that was received after calling startReceive method.
Definition PhysicalLayer.cpp:235
int16_t transmit(const char *str, uint8_t addr=0)
C-string transmit method.
Definition PhysicalLayer.cpp:53
int16_t startTransmit(const char *str, uint8_t addr=0)
Interrupt-driven Arduino String transmit method. Unlike the standard transmit method,...
Definition PhysicalLayer.cpp:157
virtual int16_t receive(uint8_t *data, size_t len, RadioLibTime_t timeout=0)
Binary receive method. Must be implemented in module class.
Definition PhysicalLayer.cpp:111
bool fastCad
Determines the type of Lora CAD to perform, either "standard" CAD (same as is implemented LR11x0,...
Definition LR2021.h:65
uint32_t irqDioNum
Which DIO pin is to be used as the interrupt pin.
Definition LR2021.h:57
RadioLibTCXOVoltage_t tcxoVoltage
TCXO reference voltage to be set on DIO3. Defaults to 1.6 V. If you are seeing -706/-707 error codes,...
Definition LR2021.h:92
unsigned long RadioLibTime_t
Type used for durations in RadioLib.
Definition TypeDef.h:783
uint32_t RadioLibIrqFlags_t
Type used for radio-agnostic IRQ flags. IRQ to enable corresponds to the bit index (RadioLibIrq_t)....
Definition TypeDef.h:789
Definition PhysicalLayer.h:360
Definition PhysicalLayer.h:310
Definition PhysicalLayer.h:347
Definition PhysicalLayer.h:292
Definition PhysicalLayer.h:334
Structure to configure multi-SF detection.
Definition LR2021_types.h:26
Description of RF switch pin states for a single mode. See setRfSwitchTable for details.
Definition Module.h:90
Common channel scan configuration structure.
Definition PhysicalLayer.h:168
Common data rate structure.
Definition PhysicalLayer.h:74
Definition PhysicalLayer.h:214