RadioLib
Universal wireless communication library for Arduino
Loading...
Searching...
No Matches
LR11x0.h
1#if !defined(_RADIOLIB_LR11X0_H)
2#define _RADIOLIB_LR11X0_H
3
4#include "../../TypeDef.h"
5
6#if !RADIOLIB_EXCLUDE_LR11X0
7
8#include "../../Module.h"
9
10#include "../../protocols/PhysicalLayer/PhysicalLayer.h"
11
12#include "LR11x0_commands.h"
13#include "LR11x0_registers.h"
14#include "LR11x0_types.h"
15
16// LR11X0 physical layer properties
17#define RADIOLIB_LR11X0_FREQUENCY_STEP_SIZE 1.0
18#define RADIOLIB_LR11X0_MAX_PACKET_LENGTH 255
19#define RADIOLIB_LR11X0_CRYSTAL_FREQ 32.0
20#define RADIOLIB_LR11X0_DIV_EXPONENT 25
21
27class LR11x0: public PhysicalLayer {
28 public:
29 // introduce PhysicalLayer overloads
35
40 explicit LR11x0(Module* mod);
41
64
68 bool XTAL;
69
82 int16_t begin(float bw, uint8_t sf, uint8_t cr, uint8_t syncWord, uint16_t preambleLength, float tcxoVoltage, bool high = false);
83
93 int16_t beginGFSK(float br, float freqDev, float rxBw, uint16_t preambleLength, float tcxoVoltage);
94
103 int16_t beginLRFHSS(uint8_t bw, uint8_t cr, bool narrowGrid, float tcxoVoltage);
104
111 int16_t beginGNSS(uint8_t constellations = RADIOLIB_LR11X0_GNSS_CONSTELLATION_GPS | RADIOLIB_LR11X0_GNSS_CONSTELLATION_BEIDOU, float tcxoVoltage = 1.6);
112
117 int16_t reset();
118
127 int16_t transmit(const uint8_t* data, size_t len, uint8_t addr = 0) override;
128
138 int16_t receive(uint8_t* data, size_t len, RadioLibTime_t timeout = 0) override;
139
145 int16_t transmitDirect(uint32_t frf = 0) override;
146
152 int16_t receiveDirect() override;
153
158 int16_t scanChannel() override;
159
165 int16_t scanChannel(const ChannelScanConfig_t &config) override;
166
171 int16_t standby() override;
172
180 int16_t standby(uint8_t mode, bool wakeup = true);
181
187 int16_t sleep() override;
188
196 int16_t sleep(bool retainConfig, uint32_t sleepTime);
197
198 // interrupt methods
199
204 void setIrqAction(void (*func)(void));
205
209 void clearIrqAction();
210
215 void setPacketReceivedAction(void (*func)(void)) override;
216
220 void clearPacketReceivedAction() override;
221
226 void setPacketSentAction(void (*func)(void)) override;
227
231 void clearPacketSentAction() override;
232
237 int16_t finishTransmit() override;
238
245 int16_t startReceive() override;
246
251 uint32_t getIrqStatus();
252
261 int16_t readData(uint8_t* data, size_t len) override;
262
267 int16_t finishReceive() override;
268
274 int16_t startChannelScan() override;
275
282 int16_t startChannelScan(const ChannelScanConfig_t &config) override;
283
288 int16_t getChannelScanResult() override;
289
290 // configuration methods
291
298 int16_t setBandwidth(float bw, bool high = false);
299
306 int16_t setSpreadingFactor(uint8_t sf, bool legacy = false);
307
317 int16_t setCodingRate(uint8_t cr, bool longInterleave = false);
318
324 int16_t setSyncWord(uint8_t syncWord);
325
331 int16_t setBitRate(float br) override;
332
338 int16_t setFrequencyDeviation(float freqDev) override;
339
346 int16_t setRxBandwidth(float rxBw);
347
354 int16_t setSyncWord(uint8_t* syncWord, size_t len) override;
355
363 int16_t setSyncBits(uint8_t *syncWord, uint8_t bitsLen);
364
370 int16_t setNodeAddress(uint8_t nodeAddr);
371
378 int16_t setBroadcastAddress(uint8_t broadAddr);
379
384 int16_t disableAddressFiltering();
385
393 int16_t setDataShaping(uint8_t sh) override;
394
400 int16_t setEncoding(uint8_t encoding) override;
401
407 int16_t fixedPacketLengthMode(uint8_t len = RADIOLIB_LR11X0_MAX_PACKET_LENGTH);
408
414 int16_t variablePacketLengthMode(uint8_t maxLen = RADIOLIB_LR11X0_MAX_PACKET_LENGTH);
415
423 int16_t setWhitening(bool enabled, uint16_t initial = 0x01FF);
424
432 int16_t setDataRate(DataRate_t dr, ModemType_t modem = RADIOLIB_MODEM_NONE) override;
433
441 int16_t checkDataRate(DataRate_t dr, ModemType_t modem = RADIOLIB_MODEM_NONE) override;
442
448 int16_t setPreambleLength(size_t preambleLength) override;
449
458 int16_t setTCXO(float voltage, uint32_t delay = 5000);
459
468 int16_t setCRC(uint8_t len, uint32_t initial = 0x00001D0FUL, uint32_t polynomial = 0x00001021UL, bool inverted = true);
469
475 int16_t invertIQ(bool enable) override;
476
481 float getRSSI() override;
482
487 float getSNR() override;
488
493 float getFrequencyError();
494
500 size_t getPacketLength(bool update = true) override;
501
508 size_t getPacketLength(bool update, uint8_t* offset);
509
516 int16_t getLoRaRxHeaderInfo(uint8_t* cr, bool* hasCRC);
517
526 RadioLibTime_t calculateTimeOnAir(ModemType_t modem, DataRate_t dr, PacketConfig_t pc, size_t len) override;
527
533 RadioLibTime_t getTimeOnAir(size_t len) override;
534
541
546 uint32_t getIrqFlags() override;
547
553 int16_t setIrqFlags(uint32_t irq) override;
554
560 int16_t clearIrqFlags(uint32_t irq) override;
561
566 uint8_t randomByte() override;
567
573 int16_t implicitHeader(size_t len);
574
579 int16_t explicitHeader();
580
585 float getDataRate() const;
586
591 int16_t setRegulatorLDO();
592
597 int16_t setRegulatorDCDC();
598
604 int16_t setRxBoostedGainMode(bool en);
605
607 void setRfSwitchTable(const uint32_t (&pins)[Module::RFSWITCH_MAX_PINS], const Module::RfSwitchMode_t table[]);
608
615 int16_t forceLDRO(bool enable);
616
622 int16_t autoLDRO();
623
632 int16_t setLrFhssConfig(uint8_t bw, uint8_t cr, uint8_t hdrCount = 3, uint16_t hopSeed = 0x13A);
633
648 int16_t startWifiScan(char wifiType, uint8_t mode = RADIOLIB_LR11X0_WIFI_ACQ_MODE_FULL_BEACON, uint16_t chanMask = RADIOLIB_LR11X0_WIFI_ALL_CHANNELS, uint8_t numScans = 16, uint16_t timeout = 100);
649
654 void setWiFiScanAction(void (*func)(void));
655
659 void clearWiFiScanAction();
660
666 int16_t getWifiScanResultsCount(uint8_t* count);
667
677 int16_t getWifiScanResult(LR11x0WifiResult_t* result, uint8_t index, bool brief = false);
678
695 int16_t wifiScan(uint8_t wifiType, uint8_t* count, uint8_t mode = RADIOLIB_LR11X0_WIFI_ACQ_MODE_FULL_BEACON, uint16_t chanMask = RADIOLIB_LR11X0_WIFI_ALL_CHANNELS, uint8_t numScans = 16, uint16_t timeout = 100);
696
702 int16_t getVersionInfo(LR11x0VersionInfo_t* info);
703
714 int16_t updateFirmware(const uint32_t* image, size_t size, bool nonvolatile = true);
715
720 int16_t isGnssScanCapable();
721
728 int16_t gnssScan(LR11x0GnssResult_t* res = NULL);
729
737
747 int16_t gnssDelayUntilSubframe(LR11x0GnssAlmanacStatus_t *stat, uint8_t constellation);
748
755 int16_t updateGnssAlmanac(uint8_t constellation);
756
763 int16_t getGnssPosition(LR11x0GnssPosition_t* pos, bool filtered = true);
764
771 int16_t getGnssSatellites(LR11x0GnssSatellite_t* sats, uint8_t numSats);
772
778 int16_t getModem(ModemType_t* modem) override;
779
787 int16_t calibrateImageRejection(float freqMin, float freqMax);
788
790 int16_t stageMode(RadioModeType_t mode, RadioModeConfig_t* cfg) override;
791
793 int16_t launchMode() override;
794
795#if !RADIOLIB_GODMODE && !RADIOLIB_LOW_LEVEL
796 protected:
797#endif
798 Module* getMod() override;
799
800 // LR11x0 command helpers
806 uint8_t roundRampTime(uint32_t rampTimeUs);
807
808 // method that applies some magic workaround for specific bitrate, frequency deviation,
809 // receiver bandwidth and carrier frequencies for GFSK (and resets it in all other cases)
810 int16_t workaroundGFSK();
811
812 // LR11x0 SPI command implementations
813 int16_t writeRegMem32(uint32_t addr, const uint32_t* data, size_t len);
814 int16_t readRegMem32(uint32_t addr, uint32_t* data, size_t len);
815 int16_t writeBuffer8(const uint8_t* data, size_t len);
816 int16_t readBuffer8(uint8_t* data, size_t len, size_t offset);
817 int16_t clearRxBuffer(void);
818 int16_t writeRegMemMask32(uint32_t addr, uint32_t mask, uint32_t data);
819
820 int16_t getStatus(uint8_t* stat1, uint8_t* stat2, uint32_t* irq);
821 int16_t getVersion(uint8_t* hw, uint8_t* device, uint8_t* major, uint8_t* minor);
822 int16_t getErrors(uint16_t* err);
823 int16_t clearErrors(void);
824 int16_t calibrate(uint8_t params);
825 int16_t setRegMode(uint8_t mode);
826 int16_t setDioAsRfSwitch(uint8_t en, uint8_t stbyCfg, uint8_t rxCfg, uint8_t txCfg, uint8_t txHpCfg, uint8_t txHfCfg, uint8_t gnssCfg, uint8_t wifiCfg);
827 int16_t setDioIrqParams(uint32_t irq1, uint32_t irq2);
828 int16_t setDioIrqParams(uint32_t irq);
829 int16_t clearIrqState(uint32_t irq);
830 int16_t configLfClock(uint8_t setup);
831 int16_t setTcxoMode(uint8_t tune, uint32_t delay);
832 int16_t reboot(bool stay);
833 int16_t getVbat(float* vbat);
834 int16_t getTemp(float* temp);
835 int16_t setFs(void);
836 int16_t getRandomNumber(uint32_t* rnd);
837 int16_t eraseInfoPage(void);
838 int16_t writeInfoPage(uint16_t addr, const uint32_t* data, size_t len);
839 int16_t readInfoPage(uint16_t addr, uint32_t* data, size_t len);
840 int16_t getChipEui(uint8_t* eui);
841 int16_t getSemtechJoinEui(uint8_t* eui);
842 int16_t deriveRootKeysAndGetPin(uint8_t* pin);
843 int16_t enableSpiCrc(bool en);
844 int16_t driveDiosInSleepMode(bool en);
845
846 int16_t resetStats(void);
847 int16_t getStats(uint16_t* nbPktReceived, uint16_t* nbPktCrcError, uint16_t* data1, uint16_t* data2);
848 int16_t getPacketType(uint8_t* type);
849 int16_t getRxBufferStatus(uint8_t* len, uint8_t* startOffset);
850 int16_t getPacketStatusLoRa(float* rssiPkt, float* snrPkt, float* signalRssiPkt);
851 int16_t getPacketStatusGFSK(float* rssiSync, float* rssiAvg, uint8_t* rxLen, uint8_t* stat);
852 int16_t getRssiInst(float* rssi);
853 int16_t setGfskSyncWord(uint8_t* sync);
854 int16_t setLoRaPublicNetwork(bool pub);
855 int16_t setRx(uint32_t timeout);
856 int16_t setTx(uint32_t timeout);
857 int16_t setRfFrequency(uint32_t rfFreq);
858 int16_t autoTxRx(uint32_t delay, uint8_t intMode, uint32_t timeout);
859 int16_t setCadParams(uint8_t symNum, uint8_t detPeak, uint8_t detMin, uint8_t cadExitMode, uint32_t timeout);
860 int16_t setPacketType(uint8_t type);
861 int16_t setModulationParamsLoRa(uint8_t sf, uint8_t bw, uint8_t cr, uint8_t ldro);
862 int16_t setModulationParamsGFSK(uint32_t br, uint8_t sh, uint8_t rxBw, uint32_t freqDev);
863 int16_t setModulationParamsLrFhss(uint32_t br, uint8_t sh);
864 int16_t setModulationParamsSigfox(uint32_t br, uint8_t sh);
865 int16_t setPacketParamsLoRa(uint16_t preambleLen, uint8_t hdrType, uint8_t payloadLen, uint8_t crcType, uint8_t invertIQ);
866 int16_t setPacketParamsGFSK(uint16_t preambleLen, uint8_t preambleDetectorLen, uint8_t syncWordLen, uint8_t addrCmp, uint8_t packType, uint8_t payloadLen, uint8_t crcType, uint8_t whiten);
867 int16_t setPacketParamsSigfox(uint8_t payloadLen, uint16_t rampUpDelay, uint16_t rampDownDelay, uint16_t bitNum);
868 int16_t setTxParams(int8_t pwr, uint8_t ramp);
869 int16_t setPacketAdrs(uint8_t node, uint8_t broadcast);
870 int16_t setRxTxFallbackMode(uint8_t mode);
871 int16_t setRxDutyCycle(uint32_t rxPeriod, uint32_t sleepPeriod, uint8_t mode);
872 int16_t setPaConfig(uint8_t paSel, uint8_t regPaSupply, uint8_t paDutyCycle, uint8_t paHpSel);
873 int16_t stopTimeoutOnPreamble(bool stop);
874 int16_t setCad(void);
875 int16_t setTxCw(void);
876 int16_t setTxInfinitePreamble(void);
877 int16_t setLoRaSynchTimeout(uint8_t symbolNum);
878 int16_t setRangingAddr(uint32_t addr, uint8_t checkLen);
879 int16_t setRangingReqAddr(uint32_t addr);
880 int16_t getRangingResult(uint8_t type, float* res);
881 int16_t setRangingTxRxDelay(uint32_t delay);
882 int16_t setGfskCrcParams(uint32_t init, uint32_t poly);
883 int16_t setGfskWhitParams(uint16_t seed);
884 int16_t setRangingParameter(uint8_t symbolNum);
885 int16_t setRssiCalibration(const int8_t* tune, int16_t gainOffset);
886 int16_t setLoRaSyncWord(uint8_t sync);
887 int16_t lrFhssBuildFrame(uint8_t hdrCount, uint8_t cr, uint8_t grid, bool hop, uint8_t bw, uint16_t hopSeq, int8_t devOffset, const uint8_t* payload, size_t len);
888 int16_t lrFhssSetSyncWord(uint32_t sync);
889 int16_t configBleBeacon(uint8_t chan, const uint8_t* payload, size_t len);
890 int16_t bleBeaconSend(uint8_t chan, const uint8_t* payload, size_t len);
891
892 int16_t wifiScan(uint8_t type, uint16_t mask, uint8_t acqMode, uint8_t nbMaxRes, uint8_t nbScanPerChan, uint16_t timeout, uint8_t abortOnTimeout);
893 int16_t wifiScanTimeLimit(uint8_t type, uint16_t mask, uint8_t acqMode, uint8_t nbMaxRes, uint16_t timePerChan, uint16_t timeout);
894 int16_t wifiCountryCode(uint16_t mask, uint8_t nbMaxRes, uint8_t nbScanPerChan, uint16_t timeout, uint8_t abortOnTimeout);
895 int16_t wifiCountryCodeTimeLimit(uint16_t mask, uint8_t nbMaxRes, uint16_t timePerChan, uint16_t timeout);
896 int16_t wifiGetNbResults(uint8_t* nbResults);
897 int16_t wifiReadResults(uint8_t index, uint8_t nbResults, uint8_t format, uint8_t* results);
898 int16_t wifiResetCumulTimings(void);
899 int16_t wifiReadCumulTimings(uint32_t* detection, uint32_t* capture, uint32_t* demodulation);
900 int16_t wifiGetNbCountryCodeResults(uint8_t* nbResults);
901 int16_t wifiReadCountryCodeResults(uint8_t index, uint8_t nbResults, uint8_t* results);
902 int16_t wifiCfgTimestampAPphone(uint32_t timestamp);
903 int16_t wifiReadVersion(uint8_t* major, uint8_t* minor);
904
905 int16_t gnssReadRssi(int8_t* rssi);
906 int16_t gnssSetConstellationToUse(uint8_t mask);
907 int16_t gnssReadConstellationToUse(uint8_t* mask);
908 int16_t gnssSetAlmanacUpdate(uint8_t mask);
909 int16_t gnssReadAlmanacUpdate(uint8_t* mask);
910 int16_t gnssSetFreqSearchSpace(uint8_t freq);
911 int16_t gnssReadFreqSearchSpace(uint8_t* freq);
912 int16_t gnssReadVersion(uint8_t* fw, uint8_t* almanac);
913 int16_t gnssReadSupportedConstellations(uint8_t* mask);
914 int16_t gnssSetMode(uint8_t mode);
915 int16_t gnssAutonomous(uint32_t gpsTime, uint8_t resMask, uint8_t nbSvMask);
916 int16_t gnssAssisted(uint32_t gpsTime, uint8_t effort, uint8_t resMask, uint8_t nbSvMask);
917 int16_t gnssSetAssistancePosition(float lat, float lon);
918 int16_t gnssReadAssistancePosition(float* lat, float* lon);
919 int16_t gnssPushSolverMsg(uint8_t* payload, size_t len);
920 int16_t gnssPushDmMsg(uint8_t* payload, size_t len);
921 int16_t gnssGetContextStatus(uint8_t* fwVersion, uint32_t* almanacCrc, uint8_t* errCode, uint8_t* almUpdMask, uint8_t* freqSpace);
922 int16_t gnssGetNbSvDetected(uint8_t* nbSv);
923 int16_t gnssGetSvDetected(uint8_t* svId, uint8_t* snr, int16_t* doppler, size_t nbSv);
924 int16_t gnssGetConsumption(uint32_t* cpu, uint32_t* radio);
925 int16_t gnssGetResultSize(uint16_t* size);
926 int16_t gnssReadResults(uint8_t* result, uint16_t size);
927 int16_t gnssAlmanacFullUpdateHeader(uint16_t date, uint32_t globalCrc);
928 int16_t gnssAlmanacFullUpdateSV(uint8_t svn, const uint8_t* svnAlmanac);
929 int16_t gnssAlmanacReadAddrSize(uint32_t* addr, uint16_t* size);
930 int16_t gnssAlmanacReadSV(uint8_t svId, uint8_t* almanac);
931 int16_t gnssGetNbSvVisible(uint32_t time, float lat, float lon, uint8_t constellation, uint8_t* nbSv);
932 int16_t gnssGetSvVisible(uint8_t nbSv, uint8_t** svId, int16_t** doppler, int16_t** dopplerErr);
933 int16_t gnssPerformScan(uint8_t effort, uint8_t resMask, uint8_t nbSvMax);
934 int16_t gnssReadLastScanModeLaunched(uint8_t* lastScanMode);
935 int16_t gnssFetchTime(uint8_t effort, uint8_t opt);
936 int16_t gnssReadTime(uint8_t* err, uint32_t* time, uint32_t* nbUs, uint32_t* timeAccuracy);
937 int16_t gnssResetTime(void);
938 int16_t gnssResetPosition(void);
939 int16_t gnssReadWeekNumberRollover(uint8_t* status, uint8_t* rollover);
940 int16_t gnssReadDemodStatus(int8_t* status, uint8_t* info);
941 int16_t gnssReadCumulTiming(uint32_t* timing, uint8_t* constDemod);
942 int16_t gnssSetTime(uint32_t time, uint16_t accuracy);
943 int16_t gnssReadDopplerSolverRes(uint8_t* error, uint8_t* nbSvUsed, float* lat, float* lon, uint16_t* accuracy, uint16_t* xtal, float* latFilt, float* lonFilt, uint16_t* accuracyFilt, uint16_t* xtalFilt);
944 int16_t gnssReadDelayResetAP(uint32_t* delay);
945 int16_t gnssAlmanacUpdateFromSat(uint8_t effort, uint8_t bitMask);
946 int16_t gnssReadAlmanacStatus(uint8_t* status);
947 int16_t gnssReadKeepSyncStatus(uint8_t mask, uint8_t* nbSvVisible, uint32_t* elapsed);
948 int16_t gnssConfigAlmanacUpdatePeriod(uint8_t bitMask, uint8_t svType, uint16_t period);
949 int16_t gnssReadAlmanacUpdatePeriod(uint8_t bitMask, uint8_t svType, uint16_t* period);
950 int16_t gnssConfigDelayResetAP(uint32_t delay);
951 int16_t gnssGetSvWarmStart(uint8_t bitMask, uint8_t* sv, uint8_t nbVisSat);
952 int16_t gnssReadWarmStartStatus(uint8_t bitMask, uint8_t* nbVisSat, uint32_t* timeElapsed);
953 int16_t gnssGetSvSync(uint8_t mask, uint8_t nbSv, uint8_t* syncList);
954 int16_t gnssWriteBitMaskSatActivated(uint8_t bitMask, uint32_t* bitMaskActivated0, uint32_t* bitMaskActivated1);
955 void gnssAbort();
956
957 int16_t cryptoSetKey(uint8_t keyId, const uint8_t* key);
958 int16_t cryptoDeriveKey(uint8_t srcKeyId, uint8_t dstKeyId, const uint8_t* key);
959 int16_t cryptoProcessJoinAccept(uint8_t decKeyId, uint8_t verKeyId, uint8_t lwVer, const uint8_t* header, const uint8_t* dataIn, size_t len, uint8_t* dataOut);
960 int16_t cryptoComputeAesCmac(uint8_t keyId, const uint8_t* data, size_t len, uint32_t* mic);
961 int16_t cryptoVerifyAesCmac(uint8_t keyId, uint32_t micExp, const uint8_t* data, size_t len, bool* result);
962 int16_t cryptoAesEncrypt01(uint8_t keyId, const uint8_t* dataIn, size_t len, uint8_t* dataOut);
963 int16_t cryptoAesEncrypt(uint8_t keyId, const uint8_t* dataIn, size_t len, uint8_t* dataOut);
964 int16_t cryptoAesDecrypt(uint8_t keyId, const uint8_t* dataIn, size_t len, uint8_t* dataOut);
965 int16_t cryptoStoreToFlash(void);
966 int16_t cryptoRestoreFromFlash(void);
967 int16_t cryptoSetParam(uint8_t id, uint32_t value);
968 int16_t cryptoGetParam(uint8_t id, uint32_t* value);
969 int16_t cryptoCheckEncryptedFirmwareImage(uint32_t offset, const uint32_t* data, size_t len, bool nonvolatile);
970 int16_t cryptoCheckEncryptedFirmwareImageResult(bool* result);
971
972 int16_t bootEraseFlash(void);
973 int16_t bootWriteFlashEncrypted(uint32_t offset, const uint32_t* data, size_t len, bool nonvolatile);
974 int16_t bootGetHash(uint8_t hash[RADIOLIB_LR11X0_HASH_LEN]);
975 int16_t bootReboot(bool stay);
976 int16_t bootGetPin(uint8_t* pin);
977 int16_t bootGetChipEui(uint8_t* eui);
978 int16_t bootGetJoinEui(uint8_t* eui);
979
980 int16_t SPIcommand(uint16_t cmd, bool write, uint8_t* data, size_t len, const uint8_t* out = NULL, size_t outLen = 0);
981
982#if !RADIOLIB_GODMODE
983 protected:
984#endif
985 uint8_t chipType = 0;
986 float freqMHz = 0;
987
988#if !RADIOLIB_GODMODE
989 private:
990#endif
991 Module* mod;
992
993 // cached LoRa parameters
994 uint8_t bandwidth = 0, spreadingFactor = 0, codingRate = 0, ldrOptimize = 0, crcTypeLoRa = 0, headerType = 0;
995 uint16_t preambleLengthLoRa = 0;
996 float bandwidthKhz = 0;
997 bool ldroAuto = true;
998 size_t implicitLen = 0;
999 bool invertIQEnabled = false;
1000
1001 // cached GFSK parameters
1002 uint32_t bitRate = 0, frequencyDev = 0;
1003 uint8_t preambleDetLength = 0, rxBandwidth = 0, pulseShape = 0, crcTypeGFSK = 0, syncWordLength = 0, addrComp = 0, whitening = 0, packetType = 0, node = 0;
1004 uint16_t preambleLengthGFSK = 0;
1005
1006 // cached LR-FHSS parameters
1007 uint8_t lrFhssCr = 0, lrFhssBw = 0, lrFhssHdrCount = 0, lrFhssGrid = 0;
1008 uint16_t lrFhssHopSeq = 0;
1009
1010 float dataRateMeasured = 0;
1011
1012 uint8_t wifiScanMode = 0;
1013 bool gnss = false;
1014 uint32_t rxTimeout = 0;
1015
1016 int16_t modSetup(float tcxoVoltage, uint8_t modem);
1017 static int16_t SPIparseStatus(uint8_t in);
1018 static int16_t SPIcheckStatus(Module* mod);
1019 bool findChip(uint8_t ver);
1020 int16_t config(uint8_t modem);
1021 int16_t setPacketMode(uint8_t mode, uint8_t len);
1022 int16_t startCad(uint8_t symbolNum, uint8_t detPeak, uint8_t detMin, uint8_t exitMode, RadioLibTime_t timeout);
1023 int16_t setHeaderType(uint8_t hdrType, size_t len = 0xFF);
1024
1025 // common methods to avoid some copy-paste
1026 int16_t bleBeaconCommon(uint16_t cmd, uint8_t chan, const uint8_t* payload, size_t len);
1027 int16_t writeCommon(uint16_t cmd, uint32_t addrOffset, const uint32_t* data, size_t len, bool nonvolatile);
1028 int16_t cryptoCommon(uint16_t cmd, uint8_t keyId, const uint8_t* dataIn, size_t len, uint8_t* dataOut);
1029};
1030
1031#endif
1032
1033#endif
Base class for LR11x0 series. All derived classes for LR11x0 (e.g. LR1110 or LR1120) inherit from thi...
Definition LR11x0.h:27
float getSNR() override
Gets SNR (Signal to Noise Ratio) of the last received packet. Only available for LoRa modem.
Definition LR11x0.cpp:1209
uint32_t getIrqStatus()
Reads the current IRQ status.
Definition LR11x0.cpp:432
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 LR11x0.cpp:1426
int16_t getGnssPosition(LR11x0GnssPosition_t *pos, bool filtered=true)
Get GNSS position. Called after gnssScan to retrieve the position calculated by the internal solver.
Definition LR11x0_gnss.cpp:214
int16_t setRegulatorDCDC()
Set regulator mode to DC-DC.
Definition LR11x0.cpp:1417
int16_t getChannelScanResult() override
Read the channel scan result.
Definition LR11x0.cpp:541
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 LR11x0.cpp:237
float getDataRate() const
Gets effective data rate for the last transmitted packet. The value is calculated only for payload by...
Definition LR11x0.cpp:1409
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 LR11x0.cpp:442
uint32_t getIrqFlags() override
Read currently active IRQ flags.
Definition LR11x0.cpp:1383
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 LR11x0.cpp:176
int16_t beginLRFHSS(uint8_t bw, uint8_t cr, bool narrowGrid, float tcxoVoltage)
Initialization method for LR-FHSS modem.
Definition LR11x0.cpp:100
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 LR11x0.cpp:728
RadioLibTime_t calculateRxTimeout(RadioLibTime_t timeoutUs) override
Calculate the timeout value for this specific module / series (in number of symbols or units of time)
Definition LR11x0.cpp:1376
int16_t reset()
Reset method. Will reset the chip to the default state using RST pin.
Definition LR11x0.cpp:153
OpMode_t
Custom operation modes for LR11x0. Needed because LR11x0 has several modems (sub-GHz,...
Definition LR11x0.h:46
@ MODE_TX_HP
Definition LR11x0.h:56
@ MODE_END_OF_TABLE
Definition LR11x0.h:48
@ MODE_WIFI
Definition LR11x0.h:62
@ MODE_GNSS
Definition LR11x0.h:60
@ MODE_TX
Definition LR11x0.h:54
@ MODE_RX
Definition LR11x0.h:52
@ MODE_STBY
Definition LR11x0.h:50
@ MODE_TX_HF
Definition LR11x0.h:58
int16_t finishReceive() override
Clean up after reception is done.
Definition LR11x0.cpp:487
int16_t startWifiScan(char wifiType, uint8_t mode=RADIOLIB_LR11X0_WIFI_ACQ_MODE_FULL_BEACON, uint16_t chanMask=RADIOLIB_LR11X0_WIFI_ALL_CHANNELS, uint8_t numScans=16, uint16_t timeout=100)
Start passive WiFi scan. BUSY pin will be de-activated when the scan is finished.
Definition LR11x0_wifi.cpp:7
int16_t explicitHeader()
Set explicit header mode for future reception/transmission.
Definition LR11x0.cpp:1405
RadioLibTime_t calculateTimeOnAir(ModemType_t modem, DataRate_t dr, PacketConfig_t pc, size_t len) override
Calculate the expected time-on-air for a given modem, data rate, packet configuration and payload siz...
Definition LR11x0.cpp:1246
bool XTAL
Whether the module has an XTAL (true) or TCXO (false). Defaults to false.
Definition LR11x0.h:68
int16_t getWifiScanResult(LR11x0WifiResult_t *result, uint8_t index, bool brief=false)
Retrieve passive WiFi scan result.
Definition LR11x0_wifi.cpp:71
void setIrqAction(void(*func)(void))
Sets interrupt service routine to call when IRQ1 activates.
Definition LR11x0.cpp:396
int16_t startChannelScan() override
Interrupt-driven channel activity detection method. IRQ1 will be activated when LoRa preamble is dete...
Definition LR11x0.cpp:496
int16_t setDataRate(DataRate_t dr, ModemType_t modem=RADIOLIB_MODEM_NONE) override
Set data rate.
Definition LR11x0.cpp:981
int16_t setCRC(uint8_t len, uint32_t initial=0x00001D0FUL, uint32_t polynomial=0x00001021UL, bool inverted=true)
Sets CRC configuration.
Definition LR11x0.cpp:1135
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 LR11x0.cpp:635
int16_t setDataShaping(uint8_t sh) override
Sets time-bandwidth product of Gaussian filter applied for shaping. Allowed values are RADIOLIB_SHAPI...
Definition LR11x0.cpp:910
int16_t fixedPacketLengthMode(uint8_t len=RADIOLIB_LR11X0_MAX_PACKET_LENGTH)
Set modem in fixed packet length mode. Available in GFSK mode only.
Definition LR11x0.cpp:948
int16_t getWifiScanResultsCount(uint8_t *count)
Get number of WiFi scan results after the scan is finished.
Definition LR11x0_wifi.cpp:57
int16_t setNodeAddress(uint8_t nodeAddr)
Sets node address. Calling this method will also enable address filtering for node address only.
Definition LR11x0.cpp:859
int16_t setIrqFlags(uint32_t irq) override
Set interrupt on IRQ pin to be sent on a specific IRQ bit (e.g. RxTimeout, CadDone).
Definition LR11x0.cpp:1387
int16_t setSyncBits(uint8_t *syncWord, uint8_t bitsLen)
Sets GFSK sync word in the form of array of up to 8 bytes.
Definition LR11x0.cpp:838
int16_t stageMode(RadioModeType_t mode, RadioModeConfig_t *cfg) override
Stage mode of the radio to be launched later using launchMode.
Definition LR11x0.cpp:1615
int16_t scanChannel() override
Performs scan for LoRa transmission in the current channel. Detects both preamble and payload.
Definition LR11x0.cpp:324
float getRSSI() override
Gets RSSI (Recorded Signal Strength Indicator) of the last received packet. Only available for LoRa o...
Definition LR11x0.cpp:1192
int16_t setBandwidth(float bw, bool high=false)
Sets LoRa bandwidth. Allowed values are 62.5, 125.0, 250.0 and 500.0 kHz. (default,...
Definition LR11x0.cpp:564
int16_t getGnssAlmanacStatus(LR11x0GnssAlmanacStatus_t *stat)
Read information about the almanac.
Definition LR11x0_gnss.cpp:121
int16_t standby() override
Sets the module to standby mode (overload for PhysicalLayer compatibility, uses 13 MHz RC oscillator)...
Definition LR11x0.cpp:353
int16_t isGnssScanCapable()
Method to check whether the device is capable of performing a GNSS scan.
Definition LR11x0_gnss.cpp:7
uint8_t randomByte() override
Get one truly random byte from RSSI noise.
Definition LR11x0.cpp:1395
int16_t setEncoding(uint8_t encoding) override
Sets transmission encoding. Available in GFSK mode only. Serves only as alias for PhysicalLayer compa...
Definition LR11x0.cpp:944
int16_t setLrFhssConfig(uint8_t bw, uint8_t cr, uint8_t hdrCount=3, uint16_t hopSeed=0x13A)
Sets LR-FHSS configuration.
Definition LR11x0.cpp:1494
int16_t checkDataRate(DataRate_t dr, ModemType_t modem=RADIOLIB_MODEM_NONE) override
Check the data rate can be configured by this module.
Definition LR11x0.cpp:1033
void setPacketSentAction(void(*func)(void)) override
Sets interrupt service routine to call when a packet is sent.
Definition LR11x0.cpp:412
int16_t setRegulatorLDO()
Set regulator mode to LDO.
Definition LR11x0.cpp:1413
void clearPacketSentAction() override
Clears interrupt service routine to call when a packet is sent.
Definition LR11x0.cpp:416
int16_t updateGnssAlmanac(uint8_t constellation)
Perform almanac update. Must be called immediately after gnssDelayUntilSubframe.
Definition LR11x0_gnss.cpp:184
void clearPacketReceivedAction() override
Clears interrupt service routine to call when a packet is received.
Definition LR11x0.cpp:408
int16_t setTCXO(float voltage, uint32_t delay=5000)
Sets TCXO (Temperature Compensated Crystal Oscillator) configuration.
Definition LR11x0.cpp:1080
int16_t getGnssSatellites(LR11x0GnssSatellite_t *sats, uint8_t numSats)
Get GNSS satellites found during the last scan.
Definition LR11x0_gnss.cpp:234
int16_t begin(float bw, uint8_t sf, uint8_t cr, uint8_t syncWord, uint16_t preambleLength, float tcxoVoltage, bool high=false)
Initialization method for LoRa modem.
Definition LR11x0.cpp:25
int16_t clearIrqFlags(uint32_t irq) override
Clear interrupt on a specific IRQ bit (e.g. RxTimeout, CadDone).
Definition LR11x0.cpp:1391
int16_t setPreambleLength(size_t preambleLength) override
Sets preamble length for LoRa or GFSK modem. Allowed values range from 1 to 65535.
Definition LR11x0.cpp:1059
int16_t startReceive() override
Interrupt-driven receive method with default parameters. Implemented for compatibility with PhysicalL...
Definition LR11x0.cpp:428
int16_t autoLDRO()
Re-enables automatic LDRO configuration. Only available in LoRa mode. After calling this method,...
Definition LR11x0.cpp:1482
int16_t launchMode() override
Launch previously staged mode.
Definition LR11x0.cpp:1711
int16_t finishTransmit() override
Clean up after transmission is done.
Definition LR11x0.cpp:420
int16_t setRxBoostedGainMode(bool en)
Enables or disables Rx Boosted Gain mode (additional Rx gain for increased power consumption).
Definition LR11x0.cpp:1421
void clearIrqAction()
Clears interrupt service routine to call when IRQ1 activates.
Definition LR11x0.cpp:400
int16_t setBitRate(float br) override
Sets GFSK bit rate. Allowed values range from 0.6 to 300.0 kbps.
Definition LR11x0.cpp:683
int16_t updateFirmware(const uint32_t *image, size_t size, bool nonvolatile=true)
Method to upload new firmware image to the device. The device will be automatically erased,...
Definition LR11x0.cpp:1535
int16_t gnssDelayUntilSubframe(LR11x0GnssAlmanacStatus_t *stat, uint8_t constellation)
Blocking wait until the next subframe with almanac data is available. Used to control timing during a...
Definition LR11x0_gnss.cpp:160
int16_t implicitHeader(size_t len)
Set implicit header mode for future reception/transmission.
Definition LR11x0.cpp:1401
int16_t beginGFSK(float br, float freqDev, float rxBw, uint16_t preambleLength, float tcxoVoltage)
Initialization method for FSK modem.
Definition LR11x0.cpp:59
RadioLibTime_t getTimeOnAir(size_t len) override
Get expected time-on-air for a given size of payload.
Definition LR11x0.cpp:1318
int16_t setFrequencyDeviation(float freqDev) override
Sets GFSK frequency deviation. Allowed values range from 0.0 to 200.0 kHz.
Definition LR11x0.cpp:704
size_t getPacketLength(bool update=true) override
Query modem for the packet length of received payload.
Definition LR11x0.cpp:1227
void setPacketReceivedAction(void(*func)(void)) override
Sets interrupt service routine to call when a packet is received.
Definition LR11x0.cpp:404
int16_t getVersionInfo(LR11x0VersionInfo_t *info)
Retrieve LR11x0 hardware, device and firmware version information.
Definition LR11x0.cpp:1515
void clearWiFiScanAction()
Clears interrupt service routine to call when a WiFi scan is completed.
Definition LR11x0_wifi.cpp:53
int16_t sleep() override
Sets the module to sleep mode. To wake the device up, call standby(). Overload with warm start enable...
Definition LR11x0.cpp:371
int16_t beginGNSS(uint8_t constellations=RADIOLIB_LR11X0_GNSS_CONSTELLATION_GPS|RADIOLIB_LR11X0_GNSS_CONSTELLATION_BEIDOU, float tcxoVoltage=1.6)
Initialization method for GNSS scanning.
Definition LR11x0.cpp:123
float getFrequencyError()
Gets frequency error of the latest received packet.
Definition LR11x0.cpp:1222
int16_t gnssScan(LR11x0GnssResult_t *res=NULL)
Performs GNSS scan.
Definition LR11x0_gnss.cpp:53
int16_t calibrateImageRejection(float freqMin, float freqMax)
Perform image rejection calibration for the specified frequency band. WARNING: Use at your own risk!...
Definition LR11x0_commands.cpp:154
int16_t variablePacketLengthMode(uint8_t maxLen=RADIOLIB_LR11X0_MAX_PACKET_LENGTH)
Set modem in variable packet length mode. Available in GFSK mode only.
Definition LR11x0.cpp:952
int16_t setWhitening(bool enabled, uint16_t initial=0x01FF)
Sets GFSK whitening parameters.
Definition LR11x0.cpp:956
int16_t wifiScan(uint8_t wifiType, uint8_t *count, uint8_t mode=RADIOLIB_LR11X0_WIFI_ACQ_MODE_FULL_BEACON, uint16_t chanMask=RADIOLIB_LR11X0_WIFI_ALL_CHANNELS, uint8_t numScans=16, uint16_t timeout=100)
Blocking WiFi scan method. Performs a full passive WiFi scan. This method may block for several secon...
Definition LR11x0_wifi.cpp:145
int16_t setSpreadingFactor(uint8_t sf, bool legacy=false)
Sets LoRa spreading factor. Allowed values range from 5 to 12.
Definition LR11x0.cpp:614
int16_t transmitDirect(uint32_t frf=0) override
Starts direct mode transmission.
Definition LR11x0.cpp:301
int16_t forceLDRO(bool enable)
Forces LoRa low data rate optimization. Only available in LoRa mode. After calling this method,...
Definition LR11x0.cpp:1467
int16_t receiveDirect() override
Starts direct mode reception. Only implemented for PhysicalLayer compatibility, as SX126x series does...
Definition LR11x0.cpp:316
int16_t disableAddressFiltering()
Disables address filtering. Calling this method will also erase previously set addresses.
Definition LR11x0.cpp:896
int16_t setSyncWord(uint8_t syncWord)
Sets LoRa sync word.
Definition LR11x0.cpp:671
int16_t setBroadcastAddress(uint8_t broadAddr)
Sets broadcast address. Calling this method will also enable address filtering for node and broadcast...
Definition LR11x0.cpp:878
int16_t invertIQ(bool enable) override
Enable/disable inversion of the I and Q signals.
Definition LR11x0.cpp:1179
int16_t getLoRaRxHeaderInfo(uint8_t *cr, bool *hasCRC)
Get LoRa header information from last received packet. Only valid in explicit header mode.
Definition LR11x0_commands.cpp:731
int16_t getModem(ModemType_t *modem) override
Get modem currently in use by the radio.
Definition LR11x0.cpp:1593
void setWiFiScanAction(void(*func)(void))
Sets interrupt service routine to call when a WiFi scan is completed.
Definition LR11x0_wifi.cpp:49
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
Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN....
Definition PhysicalLayer.h:257
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
unsigned long RadioLibTime_t
Type used for durations in RadioLib.
Definition TypeDef.h:647
Structure to save information about the GNSS almanac. This is not the actual almanac,...
Definition LR11x0_types.h:211
Structure to report position from LR11x0 internal solver.
Definition LR11x0_types.h:161
Structure to report information results of a GNSS scan.
Definition LR11x0_types.h:146
Structure to save information about a satellite found during GNSS scan.
Definition LR11x0_types.h:179
Structure to report information about versions of the LR11x0 hardware and firmware.
Definition LR11x0_types.h:116
Structure to save result of passive WiFi scan. This result only saves the basic information.
Definition LR11x0_types.h:19
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
Common packet configuration structure.
Definition PhysicalLayer.h:119
Definition PhysicalLayer.h:208