diff --git a/_lo_ra_w_a_n_8h_source.html b/_lo_ra_w_a_n_8h_source.html index 49de0df7..7dfed464 100644 --- a/_lo_ra_w_a_n_8h_source.html +++ b/_lo_ra_w_a_n_8h_source.html @@ -575,363 +575,363 @@ $(document).ready(function(){initNavTree('_lo_ra_w_a_n_8h_source.html',''); init
736 
743  void setDutyCycle(bool enable = true, RadioLibTime_t msPerHour = 0);
744 
-
750  void setDwellTime(RadioLibTime_t msPerUplink);
-
751 
-
759  void setCSMA(bool csmaEnabled, uint8_t maxChanges = 4, uint8_t backoffMax = 0, uint8_t difsSlots = 2);
-
760 
-
766  void setDeviceStatus(uint8_t battLevel);
-
767 
-
775  void scheduleTransmission(RadioLibTime_t tUplink);
-
776 
-
781  uint32_t getFCntUp();
-
782 
-
787  uint32_t getNFCntDown();
-
788 
-
793  uint32_t getAFCntDown();
-
794 
-
800  void resetFCntDown();
-
801 
-
806  uint32_t getDevAddr();
-
807 
-
812  RadioLibTime_t getLastToA();
-
813 
-
821  RadioLibTime_t dutyCycleInterval(RadioLibTime_t msPerHour, RadioLibTime_t airtime);
-
822 
-
824  RadioLibTime_t timeUntilUplink();
-
825 
-
830  uint8_t getMaxPayloadLen();
-
831 
-
836  bool TS009 = false;
-
837 
-
850  RadioLibTime_t scanGuard = 10;
-
851 
-
852 #if !RADIOLIB_GODMODE
-
853  protected:
-
854 #endif
-
855  PhysicalLayer* phyLayer = NULL;
-
856  const LoRaWANBand_t* band = NULL;
-
857 
-
858  // a buffer that holds all LW base parameters that should persist at all times!
-
859  uint8_t bufferNonces[RADIOLIB_LORAWAN_NONCES_BUF_SIZE] = { 0 };
-
860 
-
861  // a buffer that holds all LW session parameters that preferably persist, but can be afforded to get lost
-
862  uint8_t bufferSession[RADIOLIB_LORAWAN_SESSION_BUF_SIZE] = { 0 };
-
863 
-
864  uint8_t fOptsUp[RADIOLIB_LORAWAN_FHDR_FOPTS_MAX_LEN] = { 0 };
-
865  uint8_t fOptsDown[RADIOLIB_LORAWAN_FHDR_FOPTS_MAX_LEN] = { 0 };
-
866  uint8_t fOptsUpLen = 0;
-
867  uint8_t fOptsDownLen = 0;
-
868 
-
869  uint16_t lwMode = RADIOLIB_LORAWAN_MODE_NONE;
-
870  uint8_t lwClass = RADIOLIB_LORAWAN_CLASS_A;
-
871  bool isActive = false;
-
872 
-
873  uint64_t joinEUI = 0;
-
874  uint64_t devEUI = 0;
-
875  uint8_t nwkKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
-
876  uint8_t appKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
-
877 
-
878  // the following is either provided by the network server (OTAA)
-
879  // or directly entered by the user (ABP)
-
880  uint32_t devAddr = 0;
-
881  uint8_t appSKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
-
882  uint8_t fNwkSIntKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
-
883  uint8_t sNwkSIntKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
-
884  uint8_t nwkSEncKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
-
885  uint8_t jSIntKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
-
886 
-
887  uint16_t keyCheckSum = 0;
-
888 
-
889  // device-specific parameters, persistent through sessions
-
890  uint16_t devNonce = 0;
-
891  uint32_t joinNonce = 0;
-
892 
-
893  // session-specific parameters
-
894  uint32_t homeNetId = 0;
-
895  uint8_t adrLimitExp = RADIOLIB_LORAWAN_ADR_ACK_LIMIT_EXP;
-
896  uint8_t adrDelayExp = RADIOLIB_LORAWAN_ADR_ACK_DELAY_EXP;
-
897  uint8_t nbTrans = 1; // Number of allowed frame retransmissions
-
898  uint8_t txPowerSteps = 0;
-
899  uint8_t txPowerMax = 0;
-
900  uint32_t fCntUp = 0;
-
901  uint32_t aFCntDown = 0;
-
902  uint32_t nFCntDown = 0;
-
903  uint32_t confFCntUp = RADIOLIB_LORAWAN_FCNT_NONE;
-
904  uint32_t confFCntDown = RADIOLIB_LORAWAN_FCNT_NONE;
-
905  uint32_t adrFCnt = 0;
-
906 
-
907  // ADR is enabled by default
-
908  bool adrEnabled = true;
-
909 
-
910  // duty cycle is set upon initialization and activated in regions that impose this
-
911  bool dutyCycleEnabled = false;
-
912  uint32_t dutyCycle = 0;
-
913 
-
914  // dwell time is set upon initialization and activated in regions that impose this
-
915  uint16_t dwellTimeUp = 0;
-
916  uint16_t dwellTimeDn = 0;
-
917 
-
918  RadioLibTime_t tUplink = 0; // scheduled uplink transmission time (internal clock)
-
919  RadioLibTime_t tDownlink = 0; // time at end of downlink reception
-
920 
-
921  // enable/disable CSMA for LoRaWAN
-
922  bool csmaEnabled = false;
-
923 
-
924  // maximum number of channel hops during CSMA
-
925  uint8_t maxChanges = RADIOLIB_LORAWAN_MAX_CHANGES_DEFAULT;
-
926 
-
927  // number of backoff slots to be checked after DIFS phase.
-
928  // A random BO avoids collisions in the case where two or more nodes start the CSMA
-
929  // process at the same time.
-
930  uint8_t backoffMax = RADIOLIB_LORAWAN_BACKOFF_MAX_DEFAULT;
-
931 
-
932  // number of CADs to estimate a clear CH
-
933  uint8_t difsSlots = RADIOLIB_LORAWAN_DIFS_DEFAULT;
-
934 
-
935  // available channel frequencies from list passed during OTA activation
-
936  LoRaWANChannel_t channelPlan[2][RADIOLIB_LORAWAN_NUM_AVAILABLE_CHANNELS];
-
937 
-
938  // currently configured channels for TX, RX1, RX2
-
939  LoRaWANChannel_t channels[3] = { RADIOLIB_LORAWAN_CHANNEL_NONE, RADIOLIB_LORAWAN_CHANNEL_NONE,
-
940  RADIOLIB_LORAWAN_CHANNEL_NONE };
-
941 
-
942  // delays between the uplink and RX1/2 windows
-
943  // the first field is meaningless, but is used for offsetting for Rx windows 1 and 2
-
944  RadioLibTime_t rxDelays[3] = { 0, RADIOLIB_LORAWAN_RECEIVE_DELAY_1_MS, RADIOLIB_LORAWAN_RECEIVE_DELAY_2_MS };
-
945 
-
946  // offset between TX and RX1 (such that RX1 has equal or lower DR)
-
947  uint8_t rx1DrOffset = 0;
-
948 
-
949  // LoRaWAN revision (1.0 vs 1.1)
-
950  uint8_t rev = 0;
-
951 
-
952  // Time on Air of last uplink
-
953  RadioLibTime_t lastToA = 0;
-
954 
-
955  // timestamp to measure the RX1/2 delay (from uplink end)
-
956  RadioLibTime_t rxDelayStart = 0;
-
957 
-
958  // timestamp when the Rx1/2 windows were closed (timeout or uplink received)
-
959  RadioLibTime_t rxDelayEnd = 0;
-
960 
-
961  // device status - battery level
-
962  uint8_t battLevel = 0xFF;
-
963 
-
964  // indicates whether an uplink has MAC commands as payload
-
965  bool isMACPayload = false;
-
966 
-
967  // save the selected sub-band in case this must be restored in ADR control
-
968  uint8_t subBand = 0;
-
969 
-
970  // allow port 226 for devices implementing TS011
-
971  bool TS011 = false;
-
972 
-
973  // this will reset the device credentials, so the device starts completely new
-
974  void clearNonces();
-
975 
-
976  // start a fresh session using default parameters
-
977  void createSession(uint16_t lwMode, uint8_t initialDr);
-
978 
-
979  // setup Join-Request payload
-
980  void composeJoinRequest(uint8_t* joinRequestMsg);
-
981 
-
982  // extract Join-Accept payload and start a new session
-
983  int16_t processJoinAccept(LoRaWANJoinEvent_t *joinEvent);
-
984 
-
985  // a join-accept can piggy-back a set of channels or channel masks
-
986  void processCFList(uint8_t* cfList);
-
987 
-
988  // check whether payload length and fport are allowed
-
989  int16_t isValidUplink(uint8_t* len, uint8_t fPort);
-
990 
-
991  // perform ADR backoff
-
992  void adrBackoff();
-
993 
-
994  // create an encrypted uplink buffer, composing metadata, user data and MAC data
-
995  void composeUplink(const uint8_t* in, uint8_t lenIn, uint8_t* out, uint8_t fPort, bool isConfirmed);
-
996 
-
997  // generate and set the MIC of an uplink buffer (depends on selected channels)
-
998  void micUplink(uint8_t* inOut, uint8_t lenInOut);
-
999 
-
1000  // transmit uplink buffer on a specified channel
-
1001  int16_t transmitUplink(LoRaWANChannel_t* chnl, uint8_t* in, uint8_t len, bool retrans);
-
1002 
-
1003  // wait for, open and listen during receive windows; only performs listening
-
1004  int16_t receiveCommon(uint8_t dir, const LoRaWANChannel_t* dlChannels, const RadioLibTime_t* dlDelays, uint8_t numWindows, RadioLibTime_t tReference);
-
1005 
-
1006  // extract downlink payload and process MAC commands
-
1007  int16_t parseDownlink(uint8_t* data, size_t* len, LoRaWANEvent_t* event = NULL);
-
1008 
-
1009  // execute mac command, return the number of processed bytes for sequential processing
-
1010  bool execMacCommand(uint8_t cid, uint8_t* optIn, uint8_t lenIn);
-
1011  bool execMacCommand(uint8_t cid, uint8_t* optIn, uint8_t lenIn, uint8_t* optOut);
-
1012 
-
1013  // possible override for additional MAC commands that are not in the base specification
-
1014  virtual bool derivedMacHandler(uint8_t cid, uint8_t* optIn, uint8_t lenIn, uint8_t* optOut);
-
1015 
-
1016  // pre-process a (set of) LinkAdrReq commands into one super-channel-mask + Tx/Dr/NbTrans fields
-
1017  void preprocessMacLinkAdr(uint8_t* mPtr, uint8_t cLen, uint8_t* mAdrOpt);
-
1018 
-
1019  // post-process a (set of) LinkAdrAns commands depending on LoRaWAN version
-
1020  void postprocessMacLinkAdr(uint8_t* ack, uint8_t cLen);
-
1021 
-
1022  // get the properties of a MAC command given a certain command ID
-
1023  int16_t getMacCommand(uint8_t cid, LoRaWANMacCommand_t* cmd);
-
1024 
-
1025  // possible override for additional MAC commands that are not in the base specification
-
1026  virtual int16_t derivedMacFinder(uint8_t cid, LoRaWANMacCommand_t* cmd);
-
1027 
-
1028  // get the length of a certain MAC command in a specific direction (up/down)
-
1029  // if inclusive is true, add one for the CID byte
-
1030  int16_t getMacLen(uint8_t cid, uint8_t* len, uint8_t dir, bool inclusive = false);
-
1031 
-
1032  // find out of a MAC command should persist destruction
-
1033  // in uplink direction, some commands must persist if no downlink is received
-
1034  // in downlink direction, the user-accessible MAC commands remain available for retrieval
-
1035  bool isPersistentMacCommand(uint8_t cid, uint8_t dir);
-
1036 
-
1037  // push MAC command to queue, done by copy
-
1038  int16_t pushMacCommand(uint8_t cid, uint8_t* cOcts, uint8_t* out, uint8_t* lenOut, uint8_t dir);
-
1039 
-
1040  // retrieve the payload of a certain MAC command, if present in the buffer
-
1041  int16_t getMacPayload(uint8_t cid, uint8_t* in, uint8_t lenIn, uint8_t* out, uint8_t dir);
-
1042 
-
1043  // delete a specific MAC command from queue, indicated by the command ID
-
1044  int16_t deleteMacCommand(uint8_t cid, uint8_t* inOut, uint8_t* lenInOut, uint8_t dir);
-
1045 
-
1046  // clear a MAC buffer, possible retaining persistent MAC commands
-
1047  void clearMacCommands(uint8_t* inOut, uint8_t* lenInOut, uint8_t dir);
-
1048 
-
1049  // configure the common physical layer properties (frequency, sync word etc.)
-
1050  int16_t setPhyProperties(const LoRaWANChannel_t* chnl, uint8_t dir, int8_t pwr, size_t pre = 0);
-
1051 
-
1052  // Performs CSMA as per LoRa Alliance Technical Recommendation 13 (TR-013).
-
1053  bool csmaChannelClear(uint8_t difs, uint8_t numBackoff);
-
1054 
-
1055  // perform a single CAD operation for the under SF/CH combination. Returns either busy or otherwise.
-
1056  bool cadChannelClear();
-
1057 
-
1058  // (dynamic bands:) get or (fixed bands:) create a complete 80-bit channel mask for current configuration
-
1059  void getChannelPlanMask(uint64_t* chMaskGrp0123, uint32_t* chMaskGrp45);
-
1060 
-
1061  // setup uplink/downlink channel data rates and frequencies
-
1062  // for dynamic channels, there is a small set of predefined channels
-
1063  // in case of JoinRequest, add some optional extra frequencies
-
1064  void selectChannelPlanDyn();
-
1065 
-
1066  // setup uplink/downlink channel data rates and frequencies
-
1067  // for fixed bands, we only allow one sub-band at a time to be selected
-
1068  void selectChannelPlanFix();
-
1069 
-
1070  // get the number of available channels,
-
1071  // along with a 16-bit mask indicating which channels can be used next for uplink/downlink
-
1072  uint8_t getAvailableChannels(uint16_t* mask);
-
1073 
-
1074  // (re)set/restore which channels can be used next for uplink/downlink
-
1075  void setAvailableChannels(uint16_t mask);
-
1076 
-
1077  // select a set of random TX/RX channels for up- and downlink
-
1078  int16_t selectChannels();
-
1079 
-
1080  // apply a 96-bit channel mask
-
1081  bool applyChannelMask(uint64_t chMaskGrp0123, uint32_t chMaskGrp45);
-
1082 
-
1083 #if RADIOLIB_DEBUG_PROTOCOL
-
1084  // print the available channels through debug
-
1085  void printChannels();
-
1086 #endif
-
1087 
-
1088  // method to generate message integrity code
-
1089  uint32_t generateMIC(uint8_t* msg, size_t len, uint8_t* key);
-
1090 
-
1091  // method to verify message integrity code
-
1092  // it assumes that the MIC is the last 4 bytes of the message
-
1093  bool verifyMIC(uint8_t* msg, size_t len, uint8_t* key);
-
1094 
-
1095  // find the first usable data rate for the given band
-
1096  int16_t findDataRate(uint8_t dr, DataRate_t* dataRate);
-
1097 
-
1098  // function to encrypt and decrypt payloads (regular uplink/downlink)
-
1099  void processAES(const uint8_t* in, size_t len, uint8_t* key, uint8_t* out, uint32_t fCnt, uint8_t dir, uint8_t ctrId, bool counter);
-
1100 
-
1101  // 16-bit checksum method that takes a uint8_t array of even length and calculates the checksum
-
1102  static uint16_t checkSum16(const uint8_t *key, uint16_t keyLen);
-
1103 
-
1104  // check the integrity of a buffer using a 16-bit checksum located in the last two bytes of the buffer
-
1105  static int16_t checkBufferCommon(const uint8_t *buffer, uint16_t size);
-
1106 
-
1107  // network-to-host conversion method - takes data from network packet and converts it to the host endians
-
1108  template<typename T>
-
1109  static T ntoh(const uint8_t* buff, size_t size = 0);
-
1110 
-
1111  // host-to-network conversion method - takes data from host variable and and converts it to network packet endians
-
1112  template<typename T>
-
1113  static void hton(uint8_t* buff, T val, size_t size = 0);
-
1114 };
-
1115 
-
1116 template<typename T>
-
1117 T LoRaWANNode::ntoh(const uint8_t* buff, size_t size) {
-
1118  const uint8_t* buffPtr = buff;
-
1119  size_t targetSize = sizeof(T);
-
1120  if(size != 0) {
-
1121  targetSize = size;
-
1122  }
-
1123  T res = 0;
-
1124  for(size_t i = 0; i < targetSize; i++) {
-
1125  res |= (uint32_t)(*(buffPtr++)) << 8*i;
-
1126  }
-
1127  return(res);
-
1128 }
-
1129 
-
1130 template<typename T>
-
1131 void LoRaWANNode::hton(uint8_t* buff, T val, size_t size) {
-
1132  uint8_t* buffPtr = buff;
-
1133  size_t targetSize = sizeof(T);
-
1134  if(size != 0) {
-
1135  targetSize = size;
-
1136  }
-
1137  for(size_t i = 0; i < targetSize; i++) {
-
1138  *(buffPtr++) = val >> 8*i;
-
1139  }
-
1140 }
-
1141 
-
1142 #endif
+
751  void setDwellTime(bool enable, RadioLibTime_t msPerUplink = 0);
+
752 
+
760  void setCSMA(bool csmaEnabled, uint8_t maxChanges = 4, uint8_t backoffMax = 0, uint8_t difsSlots = 2);
+
761 
+
767  void setDeviceStatus(uint8_t battLevel);
+
768 
+
776  void scheduleTransmission(RadioLibTime_t tUplink);
+
777 
+
782  uint32_t getFCntUp();
+
783 
+
788  uint32_t getNFCntDown();
+
789 
+
794  uint32_t getAFCntDown();
+
795 
+
801  void resetFCntDown();
+
802 
+
807  uint32_t getDevAddr();
+
808 
+
813  RadioLibTime_t getLastToA();
+
814 
+
822  RadioLibTime_t dutyCycleInterval(RadioLibTime_t msPerHour, RadioLibTime_t airtime);
+
823 
+
825  RadioLibTime_t timeUntilUplink();
+
826 
+
831  uint8_t getMaxPayloadLen();
+
832 
+
837  bool TS009 = false;
+
838 
+
851  RadioLibTime_t scanGuard = 10;
+
852 
+
853 #if !RADIOLIB_GODMODE
+
854  protected:
+
855 #endif
+
856  PhysicalLayer* phyLayer = NULL;
+
857  const LoRaWANBand_t* band = NULL;
+
858 
+
859  // a buffer that holds all LW base parameters that should persist at all times!
+
860  uint8_t bufferNonces[RADIOLIB_LORAWAN_NONCES_BUF_SIZE] = { 0 };
+
861 
+
862  // a buffer that holds all LW session parameters that preferably persist, but can be afforded to get lost
+
863  uint8_t bufferSession[RADIOLIB_LORAWAN_SESSION_BUF_SIZE] = { 0 };
+
864 
+
865  uint8_t fOptsUp[RADIOLIB_LORAWAN_FHDR_FOPTS_MAX_LEN] = { 0 };
+
866  uint8_t fOptsDown[RADIOLIB_LORAWAN_FHDR_FOPTS_MAX_LEN] = { 0 };
+
867  uint8_t fOptsUpLen = 0;
+
868  uint8_t fOptsDownLen = 0;
+
869 
+
870  uint16_t lwMode = RADIOLIB_LORAWAN_MODE_NONE;
+
871  uint8_t lwClass = RADIOLIB_LORAWAN_CLASS_A;
+
872  bool isActive = false;
+
873 
+
874  uint64_t joinEUI = 0;
+
875  uint64_t devEUI = 0;
+
876  uint8_t nwkKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
+
877  uint8_t appKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
+
878 
+
879  // the following is either provided by the network server (OTAA)
+
880  // or directly entered by the user (ABP)
+
881  uint32_t devAddr = 0;
+
882  uint8_t appSKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
+
883  uint8_t fNwkSIntKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
+
884  uint8_t sNwkSIntKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
+
885  uint8_t nwkSEncKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
+
886  uint8_t jSIntKey[RADIOLIB_AES128_KEY_SIZE] = { 0 };
+
887 
+
888  uint16_t keyCheckSum = 0;
+
889 
+
890  // device-specific parameters, persistent through sessions
+
891  uint16_t devNonce = 0;
+
892  uint32_t joinNonce = 0;
+
893 
+
894  // session-specific parameters
+
895  uint32_t homeNetId = 0;
+
896  uint8_t adrLimitExp = RADIOLIB_LORAWAN_ADR_ACK_LIMIT_EXP;
+
897  uint8_t adrDelayExp = RADIOLIB_LORAWAN_ADR_ACK_DELAY_EXP;
+
898  uint8_t nbTrans = 1; // Number of allowed frame retransmissions
+
899  uint8_t txPowerSteps = 0;
+
900  uint8_t txPowerMax = 0;
+
901  uint32_t fCntUp = 0;
+
902  uint32_t aFCntDown = 0;
+
903  uint32_t nFCntDown = 0;
+
904  uint32_t confFCntUp = RADIOLIB_LORAWAN_FCNT_NONE;
+
905  uint32_t confFCntDown = RADIOLIB_LORAWAN_FCNT_NONE;
+
906  uint32_t adrFCnt = 0;
+
907 
+
908  // ADR is enabled by default
+
909  bool adrEnabled = true;
+
910 
+
911  // duty cycle is set upon initialization and activated in regions that impose this
+
912  bool dutyCycleEnabled = false;
+
913  uint32_t dutyCycle = 0;
+
914 
+
915  // dwell time is set upon initialization and activated in regions that impose this
+
916  uint16_t dwellTimeUp = 0;
+
917  uint16_t dwellTimeDn = 0;
+
918 
+
919  RadioLibTime_t tUplink = 0; // scheduled uplink transmission time (internal clock)
+
920  RadioLibTime_t tDownlink = 0; // time at end of downlink reception
+
921 
+
922  // enable/disable CSMA for LoRaWAN
+
923  bool csmaEnabled = false;
+
924 
+
925  // maximum number of channel hops during CSMA
+
926  uint8_t maxChanges = RADIOLIB_LORAWAN_MAX_CHANGES_DEFAULT;
+
927 
+
928  // number of backoff slots to be checked after DIFS phase.
+
929  // A random BO avoids collisions in the case where two or more nodes start the CSMA
+
930  // process at the same time.
+
931  uint8_t backoffMax = RADIOLIB_LORAWAN_BACKOFF_MAX_DEFAULT;
+
932 
+
933  // number of CADs to estimate a clear CH
+
934  uint8_t difsSlots = RADIOLIB_LORAWAN_DIFS_DEFAULT;
+
935 
+
936  // available channel frequencies from list passed during OTA activation
+
937  LoRaWANChannel_t channelPlan[2][RADIOLIB_LORAWAN_NUM_AVAILABLE_CHANNELS];
+
938 
+
939  // currently configured channels for TX, RX1, RX2
+
940  LoRaWANChannel_t channels[3] = { RADIOLIB_LORAWAN_CHANNEL_NONE, RADIOLIB_LORAWAN_CHANNEL_NONE,
+
941  RADIOLIB_LORAWAN_CHANNEL_NONE };
+
942 
+
943  // delays between the uplink and RX1/2 windows
+
944  // the first field is meaningless, but is used for offsetting for Rx windows 1 and 2
+
945  RadioLibTime_t rxDelays[3] = { 0, RADIOLIB_LORAWAN_RECEIVE_DELAY_1_MS, RADIOLIB_LORAWAN_RECEIVE_DELAY_2_MS };
+
946 
+
947  // offset between TX and RX1 (such that RX1 has equal or lower DR)
+
948  uint8_t rx1DrOffset = 0;
+
949 
+
950  // LoRaWAN revision (1.0 vs 1.1)
+
951  uint8_t rev = 0;
+
952 
+
953  // Time on Air of last uplink
+
954  RadioLibTime_t lastToA = 0;
+
955 
+
956  // timestamp to measure the RX1/2 delay (from uplink end)
+
957  RadioLibTime_t rxDelayStart = 0;
+
958 
+
959  // timestamp when the Rx1/2 windows were closed (timeout or uplink received)
+
960  RadioLibTime_t rxDelayEnd = 0;
+
961 
+
962  // device status - battery level
+
963  uint8_t battLevel = 0xFF;
+
964 
+
965  // indicates whether an uplink has MAC commands as payload
+
966  bool isMACPayload = false;
+
967 
+
968  // save the selected sub-band in case this must be restored in ADR control
+
969  uint8_t subBand = 0;
+
970 
+
971  // allow port 226 for devices implementing TS011
+
972  bool TS011 = false;
+
973 
+
974  // this will reset the device credentials, so the device starts completely new
+
975  void clearNonces();
+
976 
+
977  // start a fresh session using default parameters
+
978  void createSession(uint16_t lwMode, uint8_t initialDr);
+
979 
+
980  // setup Join-Request payload
+
981  void composeJoinRequest(uint8_t* joinRequestMsg);
+
982 
+
983  // extract Join-Accept payload and start a new session
+
984  int16_t processJoinAccept(LoRaWANJoinEvent_t *joinEvent);
+
985 
+
986  // a join-accept can piggy-back a set of channels or channel masks
+
987  void processCFList(uint8_t* cfList);
+
988 
+
989  // check whether payload length and fport are allowed
+
990  int16_t isValidUplink(uint8_t* len, uint8_t fPort);
+
991 
+
992  // perform ADR backoff
+
993  void adrBackoff();
+
994 
+
995  // create an encrypted uplink buffer, composing metadata, user data and MAC data
+
996  void composeUplink(const uint8_t* in, uint8_t lenIn, uint8_t* out, uint8_t fPort, bool isConfirmed);
+
997 
+
998  // generate and set the MIC of an uplink buffer (depends on selected channels)
+
999  void micUplink(uint8_t* inOut, uint8_t lenInOut);
+
1000 
+
1001  // transmit uplink buffer on a specified channel
+
1002  int16_t transmitUplink(LoRaWANChannel_t* chnl, uint8_t* in, uint8_t len, bool retrans);
+
1003 
+
1004  // wait for, open and listen during receive windows; only performs listening
+
1005  int16_t receiveCommon(uint8_t dir, const LoRaWANChannel_t* dlChannels, const RadioLibTime_t* dlDelays, uint8_t numWindows, RadioLibTime_t tReference);
+
1006 
+
1007  // extract downlink payload and process MAC commands
+
1008  int16_t parseDownlink(uint8_t* data, size_t* len, LoRaWANEvent_t* event = NULL);
+
1009 
+
1010  // execute mac command, return the number of processed bytes for sequential processing
+
1011  bool execMacCommand(uint8_t cid, uint8_t* optIn, uint8_t lenIn);
+
1012  bool execMacCommand(uint8_t cid, uint8_t* optIn, uint8_t lenIn, uint8_t* optOut);
+
1013 
+
1014  // possible override for additional MAC commands that are not in the base specification
+
1015  virtual bool derivedMacHandler(uint8_t cid, uint8_t* optIn, uint8_t lenIn, uint8_t* optOut);
+
1016 
+
1017  // pre-process a (set of) LinkAdrReq commands into one super-channel-mask + Tx/Dr/NbTrans fields
+
1018  void preprocessMacLinkAdr(uint8_t* mPtr, uint8_t cLen, uint8_t* mAdrOpt);
+
1019 
+
1020  // post-process a (set of) LinkAdrAns commands depending on LoRaWAN version
+
1021  void postprocessMacLinkAdr(uint8_t* ack, uint8_t cLen);
+
1022 
+
1023  // get the properties of a MAC command given a certain command ID
+
1024  int16_t getMacCommand(uint8_t cid, LoRaWANMacCommand_t* cmd);
+
1025 
+
1026  // possible override for additional MAC commands that are not in the base specification
+
1027  virtual int16_t derivedMacFinder(uint8_t cid, LoRaWANMacCommand_t* cmd);
+
1028 
+
1029  // get the length of a certain MAC command in a specific direction (up/down)
+
1030  // if inclusive is true, add one for the CID byte
+
1031  int16_t getMacLen(uint8_t cid, uint8_t* len, uint8_t dir, bool inclusive = false);
+
1032 
+
1033  // find out of a MAC command should persist destruction
+
1034  // in uplink direction, some commands must persist if no downlink is received
+
1035  // in downlink direction, the user-accessible MAC commands remain available for retrieval
+
1036  bool isPersistentMacCommand(uint8_t cid, uint8_t dir);
+
1037 
+
1038  // push MAC command to queue, done by copy
+
1039  int16_t pushMacCommand(uint8_t cid, uint8_t* cOcts, uint8_t* out, uint8_t* lenOut, uint8_t dir);
+
1040 
+
1041  // retrieve the payload of a certain MAC command, if present in the buffer
+
1042  int16_t getMacPayload(uint8_t cid, uint8_t* in, uint8_t lenIn, uint8_t* out, uint8_t dir);
+
1043 
+
1044  // delete a specific MAC command from queue, indicated by the command ID
+
1045  int16_t deleteMacCommand(uint8_t cid, uint8_t* inOut, uint8_t* lenInOut, uint8_t dir);
+
1046 
+
1047  // clear a MAC buffer, possible retaining persistent MAC commands
+
1048  void clearMacCommands(uint8_t* inOut, uint8_t* lenInOut, uint8_t dir);
+
1049 
+
1050  // configure the common physical layer properties (frequency, sync word etc.)
+
1051  int16_t setPhyProperties(const LoRaWANChannel_t* chnl, uint8_t dir, int8_t pwr, size_t pre = 0);
+
1052 
+
1053  // Performs CSMA as per LoRa Alliance Technical Recommendation 13 (TR-013).
+
1054  bool csmaChannelClear(uint8_t difs, uint8_t numBackoff);
+
1055 
+
1056  // perform a single CAD operation for the under SF/CH combination. Returns either busy or otherwise.
+
1057  bool cadChannelClear();
+
1058 
+
1059  // (dynamic bands:) get or (fixed bands:) create a complete 80-bit channel mask for current configuration
+
1060  void getChannelPlanMask(uint64_t* chMaskGrp0123, uint32_t* chMaskGrp45);
+
1061 
+
1062  // setup uplink/downlink channel data rates and frequencies
+
1063  // for dynamic channels, there is a small set of predefined channels
+
1064  // in case of JoinRequest, add some optional extra frequencies
+
1065  void selectChannelPlanDyn();
+
1066 
+
1067  // setup uplink/downlink channel data rates and frequencies
+
1068  // for fixed bands, we only allow one sub-band at a time to be selected
+
1069  void selectChannelPlanFix();
+
1070 
+
1071  // get the number of available channels,
+
1072  // along with a 16-bit mask indicating which channels can be used next for uplink/downlink
+
1073  uint8_t getAvailableChannels(uint16_t* mask);
+
1074 
+
1075  // (re)set/restore which channels can be used next for uplink/downlink
+
1076  void setAvailableChannels(uint16_t mask);
+
1077 
+
1078  // select a set of random TX/RX channels for up- and downlink
+
1079  int16_t selectChannels();
+
1080 
+
1081  // apply a 96-bit channel mask
+
1082  bool applyChannelMask(uint64_t chMaskGrp0123, uint32_t chMaskGrp45);
+
1083 
+
1084 #if RADIOLIB_DEBUG_PROTOCOL
+
1085  // print the available channels through debug
+
1086  void printChannels();
+
1087 #endif
+
1088 
+
1089  // method to generate message integrity code
+
1090  uint32_t generateMIC(uint8_t* msg, size_t len, uint8_t* key);
+
1091 
+
1092  // method to verify message integrity code
+
1093  // it assumes that the MIC is the last 4 bytes of the message
+
1094  bool verifyMIC(uint8_t* msg, size_t len, uint8_t* key);
+
1095 
+
1096  // find the first usable data rate for the given band
+
1097  int16_t findDataRate(uint8_t dr, DataRate_t* dataRate);
+
1098 
+
1099  // function to encrypt and decrypt payloads (regular uplink/downlink)
+
1100  void processAES(const uint8_t* in, size_t len, uint8_t* key, uint8_t* out, uint32_t fCnt, uint8_t dir, uint8_t ctrId, bool counter);
+
1101 
+
1102  // 16-bit checksum method that takes a uint8_t array of even length and calculates the checksum
+
1103  static uint16_t checkSum16(const uint8_t *key, uint16_t keyLen);
+
1104 
+
1105  // check the integrity of a buffer using a 16-bit checksum located in the last two bytes of the buffer
+
1106  static int16_t checkBufferCommon(const uint8_t *buffer, uint16_t size);
+
1107 
+
1108  // network-to-host conversion method - takes data from network packet and converts it to the host endians
+
1109  template<typename T>
+
1110  static T ntoh(const uint8_t* buff, size_t size = 0);
+
1111 
+
1112  // host-to-network conversion method - takes data from host variable and and converts it to network packet endians
+
1113  template<typename T>
+
1114  static void hton(uint8_t* buff, T val, size_t size = 0);
+
1115 };
+
1116 
+
1117 template<typename T>
+
1118 T LoRaWANNode::ntoh(const uint8_t* buff, size_t size) {
+
1119  const uint8_t* buffPtr = buff;
+
1120  size_t targetSize = sizeof(T);
+
1121  if(size != 0) {
+
1122  targetSize = size;
+
1123  }
+
1124  T res = 0;
+
1125  for(size_t i = 0; i < targetSize; i++) {
+
1126  res |= (uint32_t)(*(buffPtr++)) << 8*i;
+
1127  }
+
1128  return(res);
+
1129 }
+
1130 
+
1131 template<typename T>
+
1132 void LoRaWANNode::hton(uint8_t* buff, T val, size_t size) {
+
1133  uint8_t* buffPtr = buff;
+
1134  size_t targetSize = sizeof(T);
+
1135  if(size != 0) {
+
1136  targetSize = size;
+
1137  }
+
1138  for(size_t i = 0; i < targetSize; i++) {
+
1139  *(buffPtr++) = val >> 8*i;
+
1140  }
+
1141 }
+
1142 
+
1143 #endif
LoRaWANNode
LoRaWAN-compatible node (class A device).
Definition: LoRaWAN.h:522
LoRaWANNode::clearSession
void clearSession()
Clear an active session, so that the device will have to rejoin the network.
Definition: LoRaWAN.cpp:278
LoRaWANNode::sendReceive
virtual int16_t sendReceive(const char *strUp, uint8_t fPort, bool isConfirmed=false, LoRaWANEvent_t *eventUp=NULL, LoRaWANEvent_t *eventDown=NULL)
Send a message to the server and wait for a downlink during Rx1 and/or Rx2 window.
Definition: LoRaWAN.cpp:43
LoRaWANNode::setDatarate
int16_t setDatarate(uint8_t drUp)
Set uplink datarate. This should not be used when ADR is enabled.
Definition: LoRaWAN.cpp:2597
-
LoRaWANNode::scheduleTransmission
void scheduleTransmission(RadioLibTime_t tUplink)
Set the exact time a transmission should occur. Note: this is the internal clock time....
Definition: LoRaWAN.cpp:2723
-
LoRaWANNode::scanGuard
RadioLibTime_t scanGuard
Rx window padding in milliseconds according to the spec, the Rx window must be at least enough time t...
Definition: LoRaWAN.h:850
-
LoRaWANNode::setDwellTime
void setDwellTime(RadioLibTime_t msPerUplink)
Set or disable uplink dwell time limitation; enabled by default if mandatory.
Definition: LoRaWAN.cpp:2699
-
LoRaWANNode::setCSMA
void setCSMA(bool csmaEnabled, uint8_t maxChanges=4, uint8_t backoffMax=0, uint8_t difsSlots=2)
Configures CSMA for LoRaWAN as per TR013, LoRa Alliance.
Definition: LoRaWAN.cpp:2705
+
LoRaWANNode::scheduleTransmission
void scheduleTransmission(RadioLibTime_t tUplink)
Set the exact time a transmission should occur. Note: this is the internal clock time....
Definition: LoRaWAN.cpp:2730
+
LoRaWANNode::scanGuard
RadioLibTime_t scanGuard
Rx window padding in milliseconds according to the spec, the Rx window must be at least enough time t...
Definition: LoRaWAN.h:851
+
LoRaWANNode::setCSMA
void setCSMA(bool csmaEnabled, uint8_t maxChanges=4, uint8_t backoffMax=0, uint8_t difsSlots=2)
Configures CSMA for LoRaWAN as per TR013, LoRa Alliance.
Definition: LoRaWAN.cpp:2712
LoRaWANNode::setDutyCycle
void setDutyCycle(bool enable=true, RadioLibTime_t msPerHour=0)
Toggle adherence to dutyCycle limits to on or off.
Definition: LoRaWAN.cpp:2687
LoRaWANNode::beginABP
int16_t beginABP(uint32_t addr, const uint8_t *fNwkSIntKey, const uint8_t *sNwkSIntKey, const uint8_t *nwkSEncKey, const uint8_t *appSKey)
Set the device credentials and activation configuration.
Definition: LoRaWAN.cpp:612
-
LoRaWANNode::timeUntilUplink
RadioLibTime_t timeUntilUplink()
Returns time in milliseconds until next uplink is available under dutyCycle limits.
Definition: LoRaWAN.cpp:3231
-
LoRaWANNode::setDeviceStatus
void setDeviceStatus(uint8_t battLevel)
Set device status.
Definition: LoRaWAN.cpp:2719
-
LoRaWANNode::dutyCycleInterval
RadioLibTime_t dutyCycleInterval(RadioLibTime_t msPerHour, RadioLibTime_t airtime)
Calculate the minimum interval to adhere to a certain dutyCycle. This interval is based on the ToA of...
Definition: LoRaWAN.cpp:3221
-
LoRaWANNode::getAFCntDown
uint32_t getAFCntDown()
Returns the last application downlink's frame counter; also 0 if no application downlink occured yet.
Definition: LoRaWAN.cpp:2739
-
LoRaWANNode::getLastToA
RadioLibTime_t getLastToA()
Get the Time-on-air of the last uplink message (in milliseconds).
Definition: LoRaWAN.cpp:2752
+
LoRaWANNode::timeUntilUplink
RadioLibTime_t timeUntilUplink()
Returns time in milliseconds until next uplink is available under dutyCycle limits.
Definition: LoRaWAN.cpp:3238
+
LoRaWANNode::setDeviceStatus
void setDeviceStatus(uint8_t battLevel)
Set device status.
Definition: LoRaWAN.cpp:2726
+
LoRaWANNode::dutyCycleInterval
RadioLibTime_t dutyCycleInterval(RadioLibTime_t msPerHour, RadioLibTime_t airtime)
Calculate the minimum interval to adhere to a certain dutyCycle. This interval is based on the ToA of...
Definition: LoRaWAN.cpp:3228
+
LoRaWANNode::setDwellTime
void setDwellTime(bool enable, RadioLibTime_t msPerUplink=0)
Set or disable uplink dwell time limitation; enabled by default if mandatory.
Definition: LoRaWAN.cpp:2699
+
LoRaWANNode::getAFCntDown
uint32_t getAFCntDown()
Returns the last application downlink's frame counter; also 0 if no application downlink occured yet.
Definition: LoRaWAN.cpp:2746
+
LoRaWANNode::getLastToA
RadioLibTime_t getLastToA()
Get the Time-on-air of the last uplink message (in milliseconds).
Definition: LoRaWAN.cpp:2759
LoRaWANNode::activateABP
virtual int16_t activateABP(uint8_t initialDr=RADIOLIB_LORAWAN_DATA_RATE_UNUSED)
Join network by restoring ABP session or performing over-the-air activation. In this procedure,...
Definition: LoRaWAN.cpp:957
-
LoRaWANNode::TS009
bool TS009
TS009 Protocol Specification Verification switch (allows FPort 224 and cuts off uplink payload instea...
Definition: LoRaWAN.h:836
+
LoRaWANNode::TS009
bool TS009
TS009 Protocol Specification Verification switch (allows FPort 224 and cuts off uplink payload instea...
Definition: LoRaWAN.h:837
LoRaWANNode::getBufferNonces
uint8_t * getBufferNonces()
Returns the pointer to the internal buffer that holds the LW base parameters.
Definition: LoRaWAN.cpp:227
LoRaWANNode::getBufferSession
uint8_t * getBufferSession()
Returns the pointer to the internal buffer that holds the LW session parameters.
Definition: LoRaWAN.cpp:427
LoRaWANNode::isActivated
bool isActivated()
Whether there is an ongoing session active.
Definition: LoRaWAN.cpp:1047
LoRaWANNode::setTxPower
int16_t setTxPower(int8_t txPower)
Configure TX power of the radio module.
Definition: LoRaWAN.cpp:2630
LoRaWANNode::getMacDeviceTimeAns
int16_t getMacDeviceTimeAns(uint32_t *gpsEpoch, uint8_t *fraction, bool returnUnix=true)
Returns the network time after requesting a DeviceTime MAC command. Returns 'true' if a network respo...
Definition: LoRaWAN.cpp:2448
-
LoRaWANNode::getNFCntDown
uint32_t getNFCntDown()
Returns the last network downlink's frame counter; also 0 if no network downlink occured yet.
Definition: LoRaWAN.cpp:2735
+
LoRaWANNode::getNFCntDown
uint32_t getNFCntDown()
Returns the last network downlink's frame counter; also 0 if no network downlink occured yet.
Definition: LoRaWAN.cpp:2742
LoRaWANNode::LoRaWANNode
LoRaWANNode(PhysicalLayer *phy, const LoRaWANBand_t *band, uint8_t subBand=0)
Default constructor.
Definition: LoRaWAN.cpp:9
LoRaWANNode::beginOTAA
int16_t beginOTAA(uint64_t joinEUI, uint64_t devEUI, const uint8_t *nwkKey, const uint8_t *appKey)
Set the device credentials and activation configuration.
Definition: LoRaWAN.cpp:583
-
LoRaWANNode::getMaxPayloadLen
uint8_t getMaxPayloadLen()
Returns the maximum allowed uplink payload size given the current MAC state. Most importantly,...
Definition: LoRaWAN.cpp:3240
+
LoRaWANNode::getMaxPayloadLen
uint8_t getMaxPayloadLen()
Returns the maximum allowed uplink payload size given the current MAC state. Most importantly,...
Definition: LoRaWAN.cpp:3247
LoRaWANNode::activateOTAA
virtual int16_t activateOTAA(uint8_t initialDr=RADIOLIB_LORAWAN_DATA_RATE_UNUSED, LoRaWANJoinEvent_t *joinEvent=NULL)
Join network by restoring OTAA session or performing over-the-air activation. By this procedure,...
Definition: LoRaWAN.cpp:867
-
LoRaWANNode::getFCntUp
uint32_t getFCntUp()
Returns the last uplink's frame counter; also 0 if no uplink occured yet.
Definition: LoRaWAN.cpp:2728
+
LoRaWANNode::getFCntUp
uint32_t getFCntUp()
Returns the last uplink's frame counter; also 0 if no uplink occured yet.
Definition: LoRaWAN.cpp:2735
LoRaWANNode::setBufferNonces
int16_t setBufferNonces(const uint8_t *persistentBuffer)
Fill the internal buffer that holds the LW base parameters with a supplied buffer.
Definition: LoRaWAN.cpp:242
LoRaWANNode::setRx2Dr
int16_t setRx2Dr(uint8_t dr)
Configure the Rx2 datarate for ABP mode. This should not be needed for LoRaWAN 1.1 as it is configure...
Definition: LoRaWAN.cpp:2656
LoRaWANNode::sendMacCommandReq
int16_t sendMacCommandReq(uint8_t cid)
Add a MAC command to the uplink queue. Only LinkCheck and DeviceTime are available to the user....
Definition: LoRaWAN.cpp:2413
LoRaWANNode::getMacLinkCheckAns
int16_t getMacLinkCheckAns(uint8_t *margin, uint8_t *gwCnt)
Returns the quality of connectivity after requesting a LinkCheck MAC command. Returns 'true' if a net...
Definition: LoRaWAN.cpp:2437
LoRaWANNode::setADR
void setADR(bool enable=true)
Toggle ADR to on or off.
Definition: LoRaWAN.cpp:2683
LoRaWANNode::setBufferSession
int16_t setBufferSession(const uint8_t *persistentBuffer)
Fill the internal buffer that holds the LW session parameters with a supplied buffer.
Definition: LoRaWAN.cpp:459
-
LoRaWANNode::getDevAddr
uint32_t getDevAddr()
Returns the DevAddr of the device, regardless of OTAA or ABP mode.
Definition: LoRaWAN.cpp:2748
-
LoRaWANNode::resetFCntDown
void resetFCntDown()
Reset the downlink frame counters (application and network) This is unsafe and can possibly allow rep...
Definition: LoRaWAN.cpp:2743
+
LoRaWANNode::getDevAddr
uint32_t getDevAddr()
Returns the DevAddr of the device, regardless of OTAA or ABP mode.
Definition: LoRaWAN.cpp:2755
+
LoRaWANNode::resetFCntDown
void resetFCntDown()
Reset the downlink frame counters (application and network) This is unsafe and can possibly allow rep...
Definition: LoRaWAN.cpp:2750
PhysicalLayer
Provides common interface for protocols that run on LoRa/FSK modules, such as RTTY or LoRaWAN....
Definition: PhysicalLayer.h:151
RadioLibTime_t
unsigned long RadioLibTime_t
Type used for durations in RadioLib.
Definition: TypeDef.h:642
LoRaWANBand_t
Structure to save information about LoRaWAN band.
Definition: LoRaWAN.h:367
diff --git a/class_lo_ra_w_a_n_node-members.html b/class_lo_ra_w_a_n_node-members.html index 26080dfa..58460da6 100644 --- a/class_lo_ra_w_a_n_node-members.html +++ b/class_lo_ra_w_a_n_node-members.html @@ -122,7 +122,7 @@ $(document).ready(function(){initNavTree('class_lo_ra_w_a_n_node.html',''); init setDatarate(uint8_t drUp)LoRaWANNode setDeviceStatus(uint8_t battLevel)LoRaWANNode setDutyCycle(bool enable=true, RadioLibTime_t msPerHour=0)LoRaWANNode - setDwellTime(RadioLibTime_t msPerUplink)LoRaWANNode + setDwellTime(bool enable, RadioLibTime_t msPerUplink=0)LoRaWANNode setRx2Dr(uint8_t dr)LoRaWANNode setTxPower(int8_t txPower)LoRaWANNode timeUntilUplink()LoRaWANNode diff --git a/class_lo_ra_w_a_n_node.html b/class_lo_ra_w_a_n_node.html index ebc74cfc..e7d90970 100644 --- a/class_lo_ra_w_a_n_node.html +++ b/class_lo_ra_w_a_n_node.html @@ -169,9 +169,9 @@ bool void setDutyCycle (bool enable=true, RadioLibTime_t msPerHour=0)  Toggle adherence to dutyCycle limits to on or off. More...
  -void setDwellTime (RadioLibTime_t msPerUplink) - Set or disable uplink dwell time limitation; enabled by default if mandatory. More...
-  +void setDwellTime (bool enable, RadioLibTime_t msPerUplink=0) + Set or disable uplink dwell time limitation; enabled by default if mandatory. More...
+  void setCSMA (bool csmaEnabled, uint8_t maxChanges=4, uint8_t backoffMax=0, uint8_t difsSlots=2)  Configures CSMA for LoRaWAN as per TR013, LoRa Alliance. More...
  @@ -1249,8 +1249,8 @@ bool  -

◆ setDwellTime()

+ +

◆ setDwellTime()

@@ -1258,9 +1258,19 @@ bool void LoRaWANNode::setDwellTime ( - RadioLibTime_t  - msPerUplink) + bool  + enable, + + + + RadioLibTime_t  + msPerUplink = 0  + + + + ) +
@@ -1268,7 +1278,8 @@ bool 
Parameters
- + +
msPerUplinkThe maximum allowed Time-on-Air per uplink in milliseconds (0 = no dwell time limitation, make sure you follow regulations/law!).
enableWhether to adhere to dwellTime limits or not (default true).
msPerUplinkThe maximum allowed Time-on-Air per uplink in milliseconds (default 0 = band default value); make sure you follow regulations/law!
diff --git a/class_lo_ra_w_a_n_node.js b/class_lo_ra_w_a_n_node.js index ced42c45..0e72da42 100644 --- a/class_lo_ra_w_a_n_node.js +++ b/class_lo_ra_w_a_n_node.js @@ -32,7 +32,7 @@ var class_lo_ra_w_a_n_node = [ "setDatarate", "class_lo_ra_w_a_n_node.html#a14e8a8a098df28ff5ee294f235500499", null ], [ "setDeviceStatus", "class_lo_ra_w_a_n_node.html#a5449e301634dff1838a1b024b4067034", null ], [ "setDutyCycle", "class_lo_ra_w_a_n_node.html#a3d4bbd6d382496838954ab4ac1168b77", null ], - [ "setDwellTime", "class_lo_ra_w_a_n_node.html#a288a86771bd40ac25f8f064c3a5b7f9d", null ], + [ "setDwellTime", "class_lo_ra_w_a_n_node.html#a62bfe68f6fe63c2e408dccbff6a34a4f", null ], [ "setRx2Dr", "class_lo_ra_w_a_n_node.html#addfd8ac3d0bfe5a273e9ba10e51f8025", null ], [ "setTxPower", "class_lo_ra_w_a_n_node.html#a9af613f7d923e7bdcfdbd020132c6d4b", null ], [ "timeUntilUplink", "class_lo_ra_w_a_n_node.html#a49e690c14858b46692e4ce9aa5a2566a", null ], diff --git a/functions_func_s.html b/functions_func_s.html index 87098af6..d7706409 100644 --- a/functions_func_s.html +++ b/functions_func_s.html @@ -297,7 +297,7 @@ $(document).ready(function(){initNavTree('functions_func_s.html',''); initResiza :
LoRaWANNode
  • setDwellTime() -: LoRaWANNode +: LoRaWANNode
  • setEncoding() : CC1101 diff --git a/functions_s.html b/functions_s.html index 5e7162b2..6f261804 100644 --- a/functions_s.html +++ b/functions_s.html @@ -312,7 +312,7 @@ $(document).ready(function(){initNavTree('functions_s.html',''); initResizable() : LoRaWANNode
  • setDwellTime() -: LoRaWANNode +: LoRaWANNode
  • setEncoding() : CC1101 diff --git a/navtreeindex1.js b/navtreeindex1.js index de22db7d..02a787bc 100644 --- a/navtreeindex1.js +++ b/navtreeindex1.js @@ -129,13 +129,13 @@ var NAVTREEINDEX1 = "class_lo_ra_w_a_n_node.html#a14e8a8a098df28ff5ee294f235500499":[3,0,24,29], "class_lo_ra_w_a_n_node.html#a16c7ae2edfe324e11498b13aa042665f":[3,0,24,19], "class_lo_ra_w_a_n_node.html#a2176aa3d546e6b00e870a7e1e310c403":[3,0,24,36], -"class_lo_ra_w_a_n_node.html#a288a86771bd40ac25f8f064c3a5b7f9d":[3,0,24,32], "class_lo_ra_w_a_n_node.html#a2d9a53560ebfbaf006eefd9761424d80":[3,0,24,28], "class_lo_ra_w_a_n_node.html#a3d4bbd6d382496838954ab4ac1168b77":[3,0,24,31], "class_lo_ra_w_a_n_node.html#a43b259fd8804ef8d9d4922962e9ecae5":[3,0,24,3], "class_lo_ra_w_a_n_node.html#a49e690c14858b46692e4ce9aa5a2566a":[3,0,24,35], "class_lo_ra_w_a_n_node.html#a5449e301634dff1838a1b024b4067034":[3,0,24,30], "class_lo_ra_w_a_n_node.html#a5bb50904544f331806fd744ab5b99efa":[3,0,24,6], +"class_lo_ra_w_a_n_node.html#a62bfe68f6fe63c2e408dccbff6a34a4f":[3,0,24,32], "class_lo_ra_w_a_n_node.html#a6785265f3311ff6bf296f82429c96701":[3,0,24,7], "class_lo_ra_w_a_n_node.html#a683b02b63867bb7de5df45c94d190305":[3,0,24,12], "class_lo_ra_w_a_n_node.html#a77483c51548e48a5dff4b707f7770e86":[3,0,24,1], diff --git a/search/all_10.js b/search/all_10.js index a4a54f07..6a34cfe5 100644 --- a/search/all_10.js +++ b/search/all_10.js @@ -51,7 +51,7 @@ var searchData= ['setdirectaction_537',['setDirectAction',['../class_r_f69.html#a9852fe520aec018d2bb4aff0cd17de77',1,'RF69::setDirectAction()'],['../class_physical_layer.html#abf96cf4f3cb4c82d44be581dbe615966',1,'PhysicalLayer::setDirectAction()'],['../class_s_x128x.html#a2326cf28c385b8dd709cb62c9f665000',1,'SX128x::setDirectAction()'],['../class_s_x127x.html#ae4b99d1bc67ac2c81eeb11dd6793a8c5',1,'SX127x::setDirectAction()'],['../class_s_x126x.html#a4f514b341b8982650526c6d8e20fd1a4',1,'SX126x::setDirectAction()'],['../class_si443x.html#a48a59ff1ddc7c8ec820328174955de43',1,'Si443x::setDirectAction()'],['../class_c_c1101.html#a24f4b059cc56238499c6117b88cd5505',1,'CC1101::setDirectAction()']]], ['setdirectsyncword_538',['setDirectSyncWord',['../class_physical_layer.html#a8e378fe136a498ea485a9c10f5e15aab',1,'PhysicalLayer']]], ['setdutycycle_539',['setDutyCycle',['../class_lo_ra_w_a_n_node.html#a3d4bbd6d382496838954ab4ac1168b77',1,'LoRaWANNode']]], - ['setdwelltime_540',['setDwellTime',['../class_lo_ra_w_a_n_node.html#a288a86771bd40ac25f8f064c3a5b7f9d',1,'LoRaWANNode']]], + ['setdwelltime_540',['setDwellTime',['../class_lo_ra_w_a_n_node.html#a62bfe68f6fe63c2e408dccbff6a34a4f',1,'LoRaWANNode']]], ['setencoding_541',['setEncoding',['../class_c_c1101.html#ab4b98eb6af33d006306bb7514ed216ea',1,'CC1101::setEncoding()'],['../class_l_r11x0.html#a8ae178a17f6e41b545b79cfffd3e2864',1,'LR11x0::setEncoding()'],['../classn_r_f24.html#a0429a9d6524005065e6fac21aaebdcbf',1,'nRF24::setEncoding()'],['../class_r_f69.html#aae828ce8dda16da4e54d2f18b1fb8af2',1,'RF69::setEncoding()'],['../class_si443x.html#a1382fc3b68f447e381613e6670747128',1,'Si443x::setEncoding()'],['../class_s_x127x.html#abad2d455012bd28d304589c8164390eb',1,'SX127x::setEncoding()'],['../class_s_x128x.html#a8720a388d2cd10fac3112b89f4a80947',1,'SX128x::setEncoding()'],['../class_external_radio.html#ae619f011daea49a97098d2897e5a3c2c',1,'ExternalRadio::setEncoding()'],['../class_physical_layer.html#acb45b2342400a03a914a91d2ac7fb488',1,'PhysicalLayer::setEncoding()'],['../class_s_x126x.html#a2b3eb51117558c58384b03de4b7bfe60',1,'SX126x::setEncoding()']]], ['setfhsshoppingperiod_542',['setFHSSHoppingPeriod',['../class_s_x127x.html#a7f04a7e883057908df18f06c7f74c7e1',1,'SX127x']]], ['setfifoemptyaction_543',['setFifoEmptyAction',['../class_r_f69.html#a788023a0de9d6b43cb4079d12ca90b8d',1,'RF69::setFifoEmptyAction()'],['../class_s_x127x.html#a6fbdfd8e2a2ad1eb7e59a73385847acb',1,'SX127x::setFifoEmptyAction(void(*func)(void))']]], diff --git a/search/functions_f.js b/search/functions_f.js index 2126d0c2..2a36a5dc 100644 --- a/search/functions_f.js +++ b/search/functions_f.js @@ -46,7 +46,7 @@ var searchData= ['setdirectaction_1029',['setDirectAction',['../class_physical_layer.html#abf96cf4f3cb4c82d44be581dbe615966',1,'PhysicalLayer::setDirectAction()'],['../class_s_x128x.html#a2326cf28c385b8dd709cb62c9f665000',1,'SX128x::setDirectAction()'],['../class_s_x127x.html#ae4b99d1bc67ac2c81eeb11dd6793a8c5',1,'SX127x::setDirectAction()'],['../class_si443x.html#a48a59ff1ddc7c8ec820328174955de43',1,'Si443x::setDirectAction()'],['../class_s_x126x.html#a4f514b341b8982650526c6d8e20fd1a4',1,'SX126x::setDirectAction()'],['../class_c_c1101.html#a24f4b059cc56238499c6117b88cd5505',1,'CC1101::setDirectAction()'],['../class_r_f69.html#a9852fe520aec018d2bb4aff0cd17de77',1,'RF69::setDirectAction()']]], ['setdirectsyncword_1030',['setDirectSyncWord',['../class_physical_layer.html#a8e378fe136a498ea485a9c10f5e15aab',1,'PhysicalLayer']]], ['setdutycycle_1031',['setDutyCycle',['../class_lo_ra_w_a_n_node.html#a3d4bbd6d382496838954ab4ac1168b77',1,'LoRaWANNode']]], - ['setdwelltime_1032',['setDwellTime',['../class_lo_ra_w_a_n_node.html#a288a86771bd40ac25f8f064c3a5b7f9d',1,'LoRaWANNode']]], + ['setdwelltime_1032',['setDwellTime',['../class_lo_ra_w_a_n_node.html#a62bfe68f6fe63c2e408dccbff6a34a4f',1,'LoRaWANNode']]], ['setencoding_1033',['setEncoding',['../class_c_c1101.html#ab4b98eb6af33d006306bb7514ed216ea',1,'CC1101::setEncoding()'],['../class_l_r11x0.html#a8ae178a17f6e41b545b79cfffd3e2864',1,'LR11x0::setEncoding()'],['../classn_r_f24.html#a0429a9d6524005065e6fac21aaebdcbf',1,'nRF24::setEncoding()'],['../class_r_f69.html#aae828ce8dda16da4e54d2f18b1fb8af2',1,'RF69::setEncoding()'],['../class_si443x.html#a1382fc3b68f447e381613e6670747128',1,'Si443x::setEncoding()'],['../class_s_x126x.html#a2b3eb51117558c58384b03de4b7bfe60',1,'SX126x::setEncoding()'],['../class_s_x127x.html#abad2d455012bd28d304589c8164390eb',1,'SX127x::setEncoding()'],['../class_s_x128x.html#a8720a388d2cd10fac3112b89f4a80947',1,'SX128x::setEncoding()'],['../class_external_radio.html#ae619f011daea49a97098d2897e5a3c2c',1,'ExternalRadio::setEncoding()'],['../class_physical_layer.html#acb45b2342400a03a914a91d2ac7fb488',1,'PhysicalLayer::setEncoding()']]], ['setfhsshoppingperiod_1034',['setFHSSHoppingPeriod',['../class_s_x127x.html#a7f04a7e883057908df18f06c7f74c7e1',1,'SX127x']]], ['setfifoemptyaction_1035',['setFifoEmptyAction',['../class_s_x127x.html#a6fbdfd8e2a2ad1eb7e59a73385847acb',1,'SX127x::setFifoEmptyAction()'],['../class_r_f69.html#a788023a0de9d6b43cb4079d12ca90b8d',1,'RF69::setFifoEmptyAction(void(*func)(void))']]],