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
25class LR2021: public LRxxxx {
26 public:
27 // introduce PhysicalLayer overloads
33
38 LR2021(Module* mod); // cppcheck-suppress noExplicitConstructor
39
43 uint32_t irqDioNum = 5;
44
63
64 // basic methods
65
81 int16_t begin(float freq = 434.0, float bw = 125.0, uint8_t sf = 9, uint8_t cr = 7, uint8_t syncWord = RADIOLIB_LR2021_LORA_SYNC_WORD_PRIVATE, int8_t power = 10, uint16_t preambleLength = 8, float tcxoVoltage = 1.6);
82
96 int16_t beginGFSK(float freq = 434.0, float br = 4.8, float freqDev = 5.0, float rxBw = 153.8, int8_t power = 10, uint16_t preambleLength = 16, float tcxoVoltage = 1.6);
97
110 int16_t beginOOK(float freq = 434.0, float br = 4.8, float rxBw = 153.8, int8_t power = 10, uint16_t preambleLength = 16, float tcxoVoltage = 1.6);
111
124 int16_t beginLRFHSS(float freq = 434.0, uint8_t bw = RADIOLIB_LRXXXX_LR_FHSS_BW_722_66, uint8_t cr = RADIOLIB_LRXXXX_LR_FHSS_CR_2_3, bool narrowGrid = true, int8_t power = 10, float tcxoVoltage = 1.6);
125
136 int16_t beginFLRC(float freq = 434.0, uint16_t br = 650, uint8_t cr = RADIOLIB_LR2021_FLRC_CR_2_3, int8_t pwr = 10, uint16_t preambleLength = 16, uint8_t dataShaping = RADIOLIB_SHAPING_0_5, float tcxoVoltage = 1.6);
137
146 int16_t transmit(const uint8_t* data, size_t len, uint8_t addr = 0) override;
147
157 int16_t receive(uint8_t* data, size_t len, RadioLibTime_t timeout = 0) override;
158
164 int16_t transmitDirect(uint32_t frf = 0) override;
165
171 int16_t receiveDirect() override;
172
177 int16_t scanChannel() override;
178
184 int16_t scanChannel(const ChannelScanConfig_t &config) override;
185
190 int16_t standby() override;
191
198 int16_t standby(uint8_t mode) override;
199
207 int16_t standby(uint8_t mode, bool wakeup);
208
214 int16_t sleep() override;
215
223 int16_t sleep(bool retainConfig, uint32_t sleepTime);
224
230 size_t getPacketLength(bool update = true) override;
231
232 // interrupt methods
233
238 int16_t finishTransmit() override;
239
246 int16_t startReceive() override;
247
256 int16_t readData(uint8_t* data, size_t len) override;
257
262 int16_t finishReceive() override;
263
269 int16_t startChannelScan() override;
270
277 int16_t startChannelScan(const ChannelScanConfig_t &config) override;
278
283 int16_t getChannelScanResult() override;
284
289 uint32_t getIrqFlags() override;
290
296 int16_t setIrqFlags(uint32_t irq) override;
297
303 int16_t clearIrqFlags(uint32_t irq) override;
304
311 int16_t setModem(ModemType_t modem) override;
312
313 // configuration methods
314
325 int16_t setFrequency(float freq) override;
326
338 int16_t setFrequency(float freq, bool skipCalibration);
339
345 int16_t setOutputPower(int8_t power) override;
346
354 int16_t setOutputPower(int8_t power, uint32_t rampTimeUs);
355
363 int16_t checkOutputPower(int8_t power, int8_t* clipped) override;
364
366 void setRfSwitchTable(const uint32_t (&pins)[Module::RFSWITCH_MAX_PINS], const Module::RfSwitchMode_t table[]);
367
374 int16_t setBandwidth(float bw);
375
382 int16_t setSpreadingFactor(uint8_t sf, bool legacy = false);
383
393 int16_t setCodingRate(uint8_t cr, bool longInterleave = false);
394
400 int16_t setSyncWord(uint8_t syncWord);
401
407 int16_t setPreambleLength(size_t preambleLength) override;
408
418 int16_t setTCXO(float voltage, uint32_t delay = 1000000);
419
428 int16_t setCRC(uint8_t len, uint32_t initial = 0x00001D0FUL, uint32_t polynomial = 0x00001021UL, bool inverted = true);
429
435 int16_t invertIQ(bool enable) override;
436
442 int16_t setBitRate(float br) override;
443
449 int16_t setFrequencyDeviation(float freqDev) override;
450
457 int16_t setRxBandwidth(float rxBw);
458
465 int16_t setSyncWord(uint8_t* syncWord, size_t len) override;
466
472 int16_t setNodeAddress(uint8_t nodeAddr);
473
480 int16_t setBroadcastAddress(uint8_t broadAddr);
481
486 int16_t disableAddressFiltering();
487
495 int16_t setDataShaping(uint8_t sh) override;
496
502 int16_t setEncoding(uint8_t encoding) override;
503
509 int16_t fixedPacketLengthMode(uint8_t len = RADIOLIB_LR2021_MAX_PACKET_LENGTH);
510
516 int16_t variablePacketLengthMode(uint8_t maxLen = RADIOLIB_LR2021_MAX_PACKET_LENGTH);
517
525 int16_t setWhitening(bool enabled, uint16_t initial = 0x01FF);
526
534 int16_t setDataRate(DataRate_t dr, ModemType_t modem = RADIOLIB_MODEM_NONE) override;
535
543 int16_t checkDataRate(DataRate_t dr, ModemType_t modem = RADIOLIB_MODEM_NONE) override;
544
553 int16_t setLrFhssConfig(uint8_t bw, uint8_t cr, uint8_t hdrCount = 3, uint16_t hopSeed = 0x13A);
554
560 int16_t setRxBoostedGainMode(uint8_t level);
561
567 RadioLibTime_t getTimeOnAir(size_t len) override;
568
574 int16_t getModem(ModemType_t* modem) override;
575
577 int16_t stageMode(RadioModeType_t mode, RadioModeConfig_t* cfg) override;
578
580 int16_t launchMode() override;
581
587 float getVoltage(uint8_t bits = 13);
588
595 float getTemperature(uint8_t source, uint8_t bits = 13);
596
602 float getRSSI() override;
603
609 float getRSSI(bool packet);
610
615 float getSNR() override;
616
621 uint8_t randomByte() override;
622
628 int16_t implicitHeader(size_t len);
629
634 int16_t explicitHeader();
635
646 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);
647
662 int16_t setSideDetector(const LR2021LoRaSideDetector_t* cfg, size_t numDetectors);
663
664#if !RADIOLIB_GODMODE && !RADIOLIB_LOW_LEVEL
665 protected:
666#endif
667 Module* getMod() override;
668
669#if !RADIOLIB_GODMODE
670 protected:
671#endif
672
673#if !RADIOLIB_GODMODE
674 private:
675#endif
676 // flag to determine whether we are in the sub-GHz or 2.4 GHz range
677 // this is needed to automatically detect which PA to use
678 bool highFreq = false;
679 uint8_t gainModeLf = RADIOLIB_LR2021_RX_BOOST_LF;
680 uint8_t gainModeHf = RADIOLIB_LR2021_RX_BOOST_HF;
681
682 // cached FLRC parameters
683 uint16_t bitRateFlrc = 0;
684 uint8_t codingRateFlrc = 0;
685
686 int16_t modSetup(float freq, float tcxoVoltage, uint8_t modem);
687 bool findChip(void);
688 int16_t config(uint8_t modem);
689 int16_t setPacketMode(uint8_t mode, uint8_t len);
690 int16_t startCad(uint8_t symbolNum, uint8_t detPeak, uint8_t detMin, uint8_t exitMode, RadioLibTime_t timeout);
691
692 // chip control commands
693 int16_t readRadioRxFifo(uint8_t* data, size_t len);
694 int16_t writeRadioTxFifo(const uint8_t* data, size_t len);
695 int16_t writeRegMem32(uint32_t addr, const uint32_t* data, size_t len);
696 int16_t writeRegMemMask32(uint32_t addr, uint32_t mask, uint32_t data);
697 int16_t readRegMem32(uint32_t addr, uint32_t* data, size_t len);
698 int16_t setFs(void);
699 int16_t setAdditionalRegToRetain(uint8_t slot, uint32_t addr);
700 int16_t setRx(uint32_t timeout);
701 int16_t setTx(uint32_t timeout);
702 int16_t setRxTxFallbackMode(uint8_t mode);
703 int16_t setRxDutyCycle(uint32_t rxMaxTime, uint32_t cycleTime, uint8_t cfg);
704 int16_t autoTxRx(uint32_t delay, uint8_t mode, uint32_t timeout);
705 int16_t getRxPktLength(uint16_t* len);
706 int16_t resetRxStats(void);
707 int16_t setDefaultRxTxTimeout(uint32_t rxTimeout, uint32_t txTimeout);
708 int16_t setRegMode(uint8_t simoUsage, const uint8_t rampTimes[4]);
709 int16_t calibrate(uint8_t blocks);
710 int16_t calibrateFrontEnd(const uint16_t freq[3]);
711 int16_t getVbat(uint8_t resolution, uint16_t* vbat);
712 int16_t getTemp(uint8_t source, uint8_t resolution, float* temp);
713 int16_t setEolConfig(bool enable, uint8_t trim);
714 int16_t getRandomNumber(uint32_t* rnd);
715 int16_t getVersion(uint8_t* major, uint8_t* minor);
716 int16_t clearErrors(void);
717 int16_t getErrors(uint16_t* err);
718 int16_t setDioFunction(uint8_t dio, uint8_t func, uint8_t pullDrive);
719 int16_t setDioRfSwitchConfig(uint8_t dio, uint8_t func);
720 int16_t setDioIrqConfig(uint8_t dio, uint32_t irq);
721 int16_t clearIrqState(uint32_t irq);
722 int16_t getAndClearIrqStatus(uint32_t* irq);
723 int16_t configFifoIrq(uint8_t rxFifoIrq, uint8_t txFifoIrq, uint8_t rxHighThreshold, uint8_t txHighThreshold);
724 int16_t getFifoIrqFlags(uint8_t* rxFifoFlags, uint8_t* txFifoFlags);
725 int16_t clearFifoIrqFlags(uint8_t rxFifoFlags, uint8_t txFifoFlags);
726 int16_t getAndClearFifoIrqFlags(uint8_t* rxFifoFlags, uint8_t* txFifoFlags);
727 int16_t getRxFifoLevel(uint16_t* level);
728 int16_t getTxFifoLevel(uint16_t* level);
729 int16_t clearRxFifo(void);
730 int16_t clearTxFifo(void);
731 int16_t configLfClock(uint8_t cfg);
732 int16_t configClkOutputs(uint8_t scaling);
733 int16_t setTcxoMode(uint8_t tune, uint32_t startTime);
734 int16_t setXoscCpTrim(uint8_t xta, uint8_t xtb, uint8_t startTime);
735
736 // radio frequency front end commands
737 int16_t setRfFrequency(uint32_t rfFreq);
738 int16_t setRxPath(uint8_t rxPath, uint8_t rxBoost);
739 int16_t getRssiInst(float* rssi);
740 int16_t setRssiCalibration(uint8_t rxPath, const uint16_t gain[RADIOLIB_LR2021_GAIN_TABLE_LENGTH], const uint8_t noiseFloor[RADIOLIB_LR2021_GAIN_TABLE_LENGTH]);
741 int16_t setTimestampSource(uint8_t index, uint8_t source);
742 int16_t getTimestampValue(uint8_t index, uint32_t* timestamp);
743 int16_t setCca(uint32_t duration, uint8_t gain);
744 int16_t getCcaResult(float* rssiMin, float* rssiMax, float* rssiAvg);
745 int16_t setAgcGainManual(uint8_t gain);
746 int16_t setCadParams(uint32_t cadTimeout, uint8_t threshold, uint8_t exitMode, uint32_t trxTimeout);
747 int16_t setCad(void);
748 int16_t selPa(uint8_t pa);
749 int16_t setPaConfig(uint8_t pa, uint8_t paLfMode, uint8_t paLfDutyCycle, uint8_t paLfSlices, uint8_t paHfDutyCycle);
750 int16_t setTxParams(int8_t txPower, uint8_t rampTime);
751
752 // modem configuration commands
753 int16_t setPacketType(uint8_t packetType);
754 int16_t getPacketType(uint8_t* packetType);
755
756 // LoRa commands
757 int16_t setLoRaModulationParams(uint8_t sf, uint8_t bw, uint8_t cr, uint8_t ldro);
758 int16_t setLoRaPacketParams(uint16_t preambleLen, uint8_t hdrType, uint8_t payloadLen, uint8_t crcType, uint8_t invertIQ);
759 int16_t setLoRaSynchTimeout(uint8_t numSymbols, bool format);
760 int16_t setLoRaSyncword(uint8_t syncword);
761 int16_t setLoRaSideDetConfig(uint8_t* configs, size_t numSideDets);
762 int16_t setLoRaSideDetSyncword(uint8_t* syncwords, size_t numSideDets);
763 int16_t setLoRaCadParams(uint8_t numSymbols, bool preambleOnly, uint8_t pnrDelta, uint8_t cadExitMode, uint32_t timeout, uint8_t detPeak);
764 int16_t setLoRaCad(void);
765 int16_t getLoRaRxStats(uint16_t* pktRxTotal, uint16_t* pktCrcError, uint16_t* headerCrcError, uint16_t* falseSynch);
766 int16_t getLoRaPacketStatus(uint8_t* crc, uint8_t* cr, uint8_t* packetLen, float* snrPacket, float* rssiPacket, float* rssiSignalPacket);
767 int16_t setLoRaAddress(uint8_t addrLen, uint8_t addrPos, const uint8_t* addr);
768 int16_t setLoRaHopping(uint8_t hopCtrl, uint16_t hopPeriod, const uint32_t* freqHops, size_t numFreqHops);
769 int16_t setLoRaTxSync(uint8_t function, uint8_t dioNum);
770 int16_t setLoRaSideDetCad(const uint8_t* pnrDelta, const uint8_t* detPeak, size_t numSideDets);
771 int16_t setLoRaHeaderType(uint8_t hdrType, size_t len = RADIOLIB_LR2021_MAX_PACKET_LENGTH);
772
773 // ranging commands
774 int16_t setRangingAddr(uint32_t addr, uint8_t checkLen);
775 int16_t setRangingReqAddr(uint32_t addr);
776 int16_t getRangingResult(uint8_t type, uint32_t* rng1, uint8_t* rssi1, uint32_t* rng2);
777 int16_t getRangingStats(uint16_t* exchangeValid, uint16_t* requestValid, uint16_t* responseDone, uint16_t* timeout, uint16_t* requestDiscarded);
778 int16_t setRangingTxRxDelay(uint32_t delay);
779 int16_t setRangingParams(bool spyMode, uint8_t nbSymbols);
780
781 // GFSK commands
782 int16_t setGfskModulationParams(uint32_t bitRate, uint8_t pulseShape, uint8_t rxBw, uint32_t freqDev);
783 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);
784 int16_t setGfskWhiteningParams(uint8_t whitenType, uint16_t init);
785 int16_t setGfskCrcParams(uint32_t poly, uint32_t init);
786 int16_t setGfskSyncword(const uint8_t* syncWord, size_t syncWordLen, bool msbFirst);
787 int16_t setGfskAddress(uint8_t addrNode, uint8_t addrBroadcast);
788 int16_t getGfskRxStats(uint16_t* packetRx, uint16_t* packetCrcError, uint16_t* lenError, uint16_t* preambleDet, uint16_t* syncOk, uint16_t* syncFail, uint16_t* timeout);
789 int16_t getGfskPacketStatus(uint16_t* packetLen, float* rssiAvg, float* rssiSync, bool* addrMatchNode, bool* addrMatchBroadcast, float* lqi);
790
791 // OQPSK commands
792 int16_t setOqpskParams(uint8_t mode, uint8_t rxBw, uint8_t payloadLen, uint16_t preambleLen, bool addrFilt, bool fcsManual);
793 int16_t getOqpskRxStats(uint16_t* packetRx, uint16_t* crcError, uint16_t* lenError);
794 int16_t getOqpskPacketStatus(uint8_t* rxHeader, uint16_t* payloadLen, float* rssiAvg, float* rssiSync, float* lqi);
795 int16_t setOqpskPacketLen(uint8_t len);
796 int16_t setOqpskAddress(const uint8_t longDestAddr[8], uint16_t shortDestAddr, uint16_t panId, uint8_t transId);
797
798 // BPSK commands
799 int16_t setBpskModulationParams(uint32_t bitRate, uint8_t pulseShape, bool diff, uint8_t diffInit);
800 int16_t setBpskPacketParams(uint8_t payloadLen, uint8_t mode, bool sigFoxControlMsg, uint8_t sigFoxRank);
801
802 // FLRC commands
803 int16_t setFlrcModulationParams(uint8_t brBw, uint8_t cr, uint8_t pulseShape);
804 int16_t setFlrcPacketParams(uint8_t agcPreambleLen, uint8_t syncWordLen, uint8_t syncWordTx, uint8_t syncMatch, bool fixedLength, uint8_t crc, uint16_t payloadLen);
805 int16_t getFlrcRxStats(uint16_t* packetRx, uint16_t* packetCrcError, uint16_t* lenError);
806 int16_t getFlrcPacketStatus(uint16_t* packetLen, float* rssiAvg, float* rssiSync, uint8_t* syncWordNum);
807 int16_t setFlrcSyncWord(uint8_t syncWordNum, uint32_t syncWord);
808
809 // LR-FHSS commands
810 int16_t lrFhssSetSyncword(uint32_t syncWord);
812 //int16_t readLrFhssHoppingTable(LR2021LrFhssHopTableEntry_t* hopTable[40], size_t* hopTableLen);
813 //int16_t writeLrFhssHoppingTable(LR2021LrFhssHopTableEntry_t* hopTable[40], size_t hopTableLen);
814
815 // OOK commands
816 int16_t setOokModulationParams(uint32_t bitRate, uint8_t pulseShape, uint8_t rxBw, uint8_t depth);
817 int16_t setOokPacketParams(uint16_t preambleLen, uint8_t addrComp, uint8_t packetFormat, uint16_t payloadLen, uint8_t crc, uint8_t manchester);
818 int16_t setOokCrcParams(uint32_t poly, uint32_t init);
819 int16_t setOokSyncword(const uint8_t* syncWord, size_t syncWordLen, bool msbFirst);
820 int16_t setOokAddress(uint8_t addrNode, uint8_t addrBroadcast);
821 int16_t getOokRxStats(uint16_t* packetRx, uint16_t* crcError, uint16_t* lenError);
822 int16_t getOokPacketStatus(uint16_t* packetLen, float* rssiAvg, float* rssiSync, bool* addrMatchNode, bool* addrMatchBroadcast, float* lqi);
823 int16_t setOokDetector(uint16_t preamblePattern, uint8_t patternLen, uint8_t patternNumRepeaters, bool syncWordRaw, bool sofDelimiterRising, uint8_t sofDelimiterLen);
824 int16_t setOokWhiteningParams(uint8_t bitIdx, uint16_t poly, uint16_t init);
825
826 // test commands
827 int16_t setTxTestMode(uint8_t mode);
828};
829
830#endif
831
832#endif
Definition LR2021.h:25
int16_t setBitRate(float br) override
Sets GFSK bit rate. Allowed values range from 0.5 to 2000.0 kbps.
Definition LR2021_config.cpp:432
int16_t setSyncWord(uint8_t syncWord)
Sets LoRa sync word.
Definition LR2021_config.cpp:268
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:260
int16_t setRxBandwidth(float 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:505
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:450
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:401
int16_t begin(float freq=434.0, float bw=125.0, uint8_t sf=9, uint8_t cr=7, uint8_t syncWord=RADIOLIB_LR2021_LORA_SYNC_WORD_PRIVATE, int8_t power=10, uint16_t preambleLength=8, float tcxoVoltage=1.6)
Initialization method for LoRa modem.
Definition LR2021.cpp:23
int16_t receiveDirect() override
Starts direct mode reception. Only implemented for PhysicalLayer compatibility, as LR2021 does not su...
Definition LR2021.cpp:342
int16_t clearIrqFlags(uint32_t irq) override
Clear interrupt on a specific IRQ bit (e.g. RxTimeout, CadDone).
Definition LR2021.cpp:581
int16_t setDataRate(DataRate_t dr, ModemType_t modem=RADIOLIB_MODEM_NONE) override
Set data rate.
Definition LR2021_config.cpp:695
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:747
int16_t setTCXO(float voltage, uint32_t delay=1000000)
Sets TCXO (Temperature Compensated Crystal Oscillator) configuration.
Definition LR2021_config.cpp:311
int16_t disableAddressFiltering()
Disables address filtering. Calling this method will also erase previously set addresses.
Definition LR2021_config.cpp:904
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:886
int16_t checkOutputPower(int8_t power, int8_t *clipped) override
Check if output power is configurable. This method is needed for compatibility with PhysicalLayer::ch...
Definition LR2021_config.cpp:97
int16_t scanChannel() override
Performs scan for LoRa transmission in the current channel. Detects both preamble and payload.
Definition LR2021.cpp:350
uint32_t getIrqFlags() override
Read currently active IRQ flags.
Definition LR2021.cpp:573
float getRSSI() override
Gets recorded signal strength indicator. Overload with packet mode enabled for PhysicalLayer compatib...
Definition LR2021.cpp:994
int16_t setCodingRate(uint8_t cr, bool longInterleave=false)
Sets LoRa coding rate denominator. Allowed values range from 4 to 8. Note that a value of 4 means no ...
Definition LR2021_config.cpp:222
int16_t setCRC(uint8_t len, uint32_t initial=0x00001D0FUL, uint32_t polynomial=0x00001021UL, bool inverted=true)
Sets CRC configuration.
Definition LR2021_config.cpp:366
int16_t explicitHeader()
Set explicit header mode for future reception/transmission.
Definition LR2021_config.cpp:863
int16_t getChannelScanResult() override
Read the channel scan result.
Definition LR2021.cpp:550
int16_t setFrequency(float freq) override
Sets carrier frequency. Allowed values are in range from 150.0 to 960.0 MHz, 1900 - 2200 MHz and 2400...
Definition LR2021_config.cpp:13
int16_t beginFLRC(float freq=434.0, uint16_t br=650, uint8_t cr=RADIOLIB_LR2021_FLRC_CR_2_3, int8_t pwr=10, uint16_t preambleLength=16, uint8_t dataShaping=RADIOLIB_SHAPING_0_5, float tcxoVoltage=1.6)
Initialization method for FLRC modem.
Definition LR2021.cpp:155
int16_t startChannelScan() override
Interrupt-driven channel activity detection method. IRQ1 will be activated when LoRa preamble is dete...
Definition LR2021.cpp:505
uint32_t irqDioNum
Which DIO pin is to be used as the interrupt pin.
Definition LR2021.h:43
int16_t transmitDirect(uint32_t frf=0) override
Starts direct mode transmission.
Definition LR2021.cpp:327
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:660
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:652
int16_t launchMode() override
Launch previously staged mode.
Definition LR2021.cpp:941
int16_t invertIQ(bool enable) override
Enable/disable inversion of the I and Q signals.
Definition LR2021_config.cpp:419
int16_t setBandwidth(float bw)
Sets LoRa bandwidth. Allowed values are 31.25, 41.67, 62.5, 83.34, 125.0, 101.56, 203....
Definition LR2021_config.cpp:142
OpMode_t
Custom operation modes for LR2021. Needed because LR2021 has several modems (sub-GHz,...
Definition LR2021.h:49
@ MODE_END_OF_TABLE
Definition LR2021.h:51
@ MODE_RX
Definition LR2021.h:55
@ MODE_RX_HF
Definition LR2021.h:59
@ MODE_STBY
Definition LR2021.h:53
@ MODE_TX_HF
Definition LR2021.h:61
@ MODE_TX
Definition LR2021.h:57
int16_t setWhitening(bool enabled, uint16_t initial=0x01FF)
Sets GFSK whitening parameters.
Definition LR2021_config.cpp:664
int16_t finishTransmit() override
Clean up after transmission is done.
Definition LR2021.cpp:438
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:200
RadioLibTime_t getTimeOnAir(size_t len) override
Get expected time-on-air for a given size of payload.
Definition LR2021.cpp:765
int16_t getModem(ModemType_t *modem) override
Get modem currently in use by the radio.
Definition LR2021.cpp:814
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:656
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:614
float getVoltage(uint8_t bits=13)
Read the supply voltage on the Vbat pin.
Definition LR2021.cpp:968
int16_t beginLRFHSS(float freq=434.0, uint8_t bw=RADIOLIB_LRXXXX_LR_FHSS_BW_722_66, uint8_t cr=RADIOLIB_LRXXXX_LR_FHSS_CR_2_3, bool narrowGrid=true, int8_t power=10, float tcxoVoltage=1.6)
Initialization method for LR-FHSS modem.
Definition LR2021.cpp:135
int16_t finishReceive() override
Clean up after reception is done.
Definition LR2021.cpp:496
int16_t standby() override
Sets the module to standby mode (overload for PhysicalLayer compatibility, uses 13 MHz RC oscillator)...
Definition LR2021.cpp:379
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:115
int16_t beginOOK(float freq=434.0, float br=4.8, float rxBw=153.8, int8_t power=10, uint16_t preambleLength=16, float tcxoVoltage=1.6)
Initialization method for OOK modem.
Definition LR2021.cpp:97
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:585
int16_t beginGFSK(float freq=434.0, float br=4.8, float freqDev=5.0, float rxBw=153.8, int8_t power=10, uint16_t preambleLength=16, float tcxoVoltage=1.6)
Initialization method for FSK modem.
Definition LR2021.cpp:55
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:867
int16_t setPreambleLength(size_t preambleLength) override
Sets preamble length for LoRa or GFSK modem. Allowed values range from 1 to 65535.
Definition LR2021_config.cpp:280
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:73
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:930
int16_t setSpreadingFactor(uint8_t sf, bool legacy=false)
Sets LoRa spreading factor. Allowed values range from 5 to 12.
Definition LR2021_config.cpp:201
int16_t implicitHeader(size_t len)
Set implicit header mode for future reception/transmission.
Definition LR2021_config.cpp:859
int16_t startReceive() override
Interrupt-driven receive method with default parameters. Implemented for compatibility with PhysicalL...
Definition LR2021.cpp:446
int16_t setRxBoostedGainMode(uint8_t level)
Enables or disables Rx Boosted Gain mode (additional Rx gain for increased power consumption).
Definition LR2021_config.cpp:794
float getSNR() override
Gets SNR (Signal to Noise Ratio) of the last received packet. Only available for LoRa modem.
Definition LR2021.cpp:1024
int16_t stageMode(RadioModeType_t mode, RadioModeConfig_t *cfg) override
Stage mode of the radio to be launched later using launchMode.
Definition LR2021.cpp:836
int16_t setFrequencyDeviation(float freqDev) override
Sets GFSK frequency deviation. Allowed values range from 0.6 to 500.0 kHz.
Definition LR2021_config.cpp:484
size_t getPacketLength(bool update=true) override
Query modem for the packet length of received payload.
Definition LR2021.cpp:423
uint8_t randomByte() override
Get one truly random byte from RSSI noise.
Definition LR2021.cpp:1035
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:577
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:918
float getTemperature(uint8_t source, uint8_t bits=13)
Read the temperature.
Definition LR2021.cpp:981
int16_t setLrFhssConfig(uint8_t bw, uint8_t cr, uint8_t hdrCount=3, uint16_t hopSeed=0x13A)
Sets LR-FHSS configuration.
Definition LR2021_config.cpp:773
Definition LR_common.h:91
Implements all common low-level methods to control the wireless module. Every module class contains o...
Definition Module.h:73
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:82
@ MODE_TX
Transmission mode.
Definition Module.h:119
@ MODE_IDLE
Idle mode.
Definition Module.h:113
@ MODE_RX
Receive mode.
Definition Module.h:116
@ 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:110
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:225
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:156
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
#define RADIOLIB_SHAPING_0_5
Gaussian shaping filter, BT = 0.5.
Definition TypeDef.h:27
unsigned long RadioLibTime_t
Type used for durations in RadioLib.
Definition TypeDef.h:658
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:89
Common channel scan configuration structure.
Definition PhysicalLayer.h:165
Common data rate structure.
Definition PhysicalLayer.h:74
Definition PhysicalLayer.h:208