alan broad
/
carbon_v5_arm_studio
arm studio build
src/wbit_util.cpp@22:034c134f17c7, 2019-08-14 (annotated)
- Committer:
- alan1974
- Date:
- Wed Aug 14 17:22:36 2019 +0000
- Revision:
- 22:034c134f17c7
- Parent:
- 17:74d60177c6b6
- Child:
- 26:f51ff4ad7a93
inital commit of 040A; - updated to libxDot 3.2.0 and mbed_os 5.11.1; - multitech deprecated api(s); - call getMaxPacketLength to check if MAC payload to be sent
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
alan1974 | 1:0d25d9ddbe9f | 1 | #include "global.h" |
alan1974 | 0:a91cd1b08360 | 2 | #include "wbit_util.h" |
alan1974 | 0:a91cd1b08360 | 3 | #include "dot_util.h" |
alan1974 | 1:0d25d9ddbe9f | 4 | #include "commI2C.h" |
alan1974 | 0:a91cd1b08360 | 5 | #include "mbed.h" |
alan1974 | 0:a91cd1b08360 | 6 | #include "mDot.h" |
alan1974 | 2:0af50f386eb2 | 7 | extern Serial pc; |
alan1974 | 5:abfe25f0de33 | 8 | extern bool verbose; |
alan1974 | 1:0d25d9ddbe9f | 9 | uint8_t j_attempts = 0; //return number of attempts it took to join the network |
alan1974 | 1:0d25d9ddbe9f | 10 | |
alan1974 | 1:0d25d9ddbe9f | 11 | |
alan1974 | 1:0d25d9ddbe9f | 12 | //network keys |
alan1974 | 1:0d25d9ddbe9f | 13 | //these are used as backup keys in case nvm memory is corrupted and we can't read the keys correctly |
alan1974 | 12:7944e4dbe853 | 14 | uint8_t key_AppEUI[] = { 0x90, 0xF1, 0x47, 0x90, 0x6C, 0x48, 0x1D, 0x29 }; //AppEui |
alan1974 | 12:7944e4dbe853 | 15 | uint8_t key_AppKey[] = { 0x0F, 0xF9, 0xA2, 0x90, 0x2E, 0xAA, 0x6B, 0x8C, 0x6A, 0x4E, 0xFD, 0x67, 0xF9, 0xA6, 0xF3, 0xD3 }; ////OTAA appkey => loriot "Appkey" -> common to all nodes |
alan1974 | 12:7944e4dbe853 | 16 | |
alan1974 | 13:1f3a8d0be511 | 17 | //ADP keys: for xdot spoofer eui ---> need to be uploaded from proc, using EUI: #spoofer (EUI 00-80-00-00-04-00-FF-FF) |
alan1974 | 14:fc836a5a5d2f | 18 | //static uint8_t network_address[] = {0x01,0x59,0xE2,0xC7}; |
alan1974 | 14:fc836a5a5d2f | 19 | //static uint8_t network_session_key[] = {0xBA, 0xEF, 0x4D, 0xA3, 0x66, 0xD1, 0x85, 0xDE, 0xB1, 0xCD, 0x79, 0x15, 0xC7, 0xEB, 0x72, 0x35}; |
alan1974 | 14:fc836a5a5d2f | 20 | //static uint8_t data_session_key[] = {0xF9,0x13,0x94,0x0D,0x12,0x95,0x96,0x5A,0xF4,0x34,0xBB,0xA9,0x8E,0x2A,0x83,0x10}; |
alan1974 | 12:7944e4dbe853 | 21 | |
alan1974 | 5:abfe25f0de33 | 22 | |
alan1974 | 5:abfe25f0de33 | 23 | //============================================================================ |
alan1974 | 5:abfe25f0de33 | 24 | // printRadioCfg |
alan1974 | 5:abfe25f0de33 | 25 | |
alan1974 | 5:abfe25f0de33 | 26 | //============================================================================ |
alan1974 | 5:abfe25f0de33 | 27 | void printRadioCfg(){ |
alan1974 | 5:abfe25f0de33 | 28 | if(verbose){ |
alan1974 | 5:abfe25f0de33 | 29 | pc.printf("\r\n************************************************************"); |
alan1974 | 5:abfe25f0de33 | 30 | pc.printf("\r\n saved radio configuration: "); |
alan1974 | 5:abfe25f0de33 | 31 | pc.printf("\r\n public network: %d ",dot->getPublicNetwork()); |
alan1974 | 5:abfe25f0de33 | 32 | pc.printf("\r\n subband: %d ",dot->getFrequencySubBand()); |
alan1974 | 5:abfe25f0de33 | 33 | pc.printf("\n\r join delay %d ",dot->getJoinDelay()); |
alan1974 | 5:abfe25f0de33 | 34 | pc.printf("\r\n ADR: %d ",dot->getAdr()); |
alan1974 | 5:abfe25f0de33 | 35 | pc.printf("\r\n antenna gain: %d ",dot->getAntennaGain()); |
alan1974 | 5:abfe25f0de33 | 36 | pc.printf("\r\n transmit max pwr: %d ",dot->getMaxTxPower()); //not saved in cfg |
alan1974 | 5:abfe25f0de33 | 37 | pc.printf("\r\n transmit min pwr: %d ",dot->getMinTxPower()); //not saved in cfg |
alan1974 | 5:abfe25f0de33 | 38 | pc.printf("\r\n transmit pwr: %d ",dot->getTxPower()); |
alan1974 | 22:034c134f17c7 | 39 | //deprecated API: pc.printf("\n\r tx inverted %d ",dot->getTxInverted()); |
alan1974 | 22:034c134f17c7 | 40 | //deprecated API: pc.printf("\n\r rx inverted %d ",dot->getRxInverted()); |
alan1974 | 5:abfe25f0de33 | 41 | pc.printf("\n\r rx delay %d ",dot->getRxDelay()); |
alan1974 | 5:abfe25f0de33 | 42 | pc.printf("\r\n TxDataRate: %d ",dot->getTxDataRate()); |
alan1974 | 5:abfe25f0de33 | 43 | pc.printf("\r\n maxPktLen: %d ",dot->getMaxPacketLength()); //not saved in cfg |
alan1974 | 5:abfe25f0de33 | 44 | pc.printf("\r\n************************************************************\r\n"); |
alan1974 | 5:abfe25f0de33 | 45 | } |
alan1974 | 5:abfe25f0de33 | 46 | } |
alan1974 | 2:0af50f386eb2 | 47 | //============================================================================== |
alan1974 | 2:0af50f386eb2 | 48 | //printNmvData |
alan1974 | 1:0d25d9ddbe9f | 49 | //============================================================================== |
alan1974 | 2:0af50f386eb2 | 50 | void printNmvData(nvm *pNvm){ |
alan1974 | 4:d87f8dcf40ef | 51 | uint8_t i; |
alan1974 | 7:fba1e8fc7693 | 52 | if(verbose){ |
alan1974 | 7:fba1e8fc7693 | 53 | pc.printf("\r\n************************************************************"); |
alan1974 | 7:fba1e8fc7693 | 54 | pc.printf("\r\nnon-volatile memory (nvm):"); |
alan1974 | 12:7944e4dbe853 | 55 | pc.printf("\r\nkey_AppEUI:"); |
alan1974 | 12:7944e4dbe853 | 56 | for (i = 0; i < sizeof(key_AppEUI);i++) |
alan1974 | 12:7944e4dbe853 | 57 | pc.printf(" %x",pNvm->key_AppEUI[i]); |
alan1974 | 12:7944e4dbe853 | 58 | pc.printf("\r\nkey_AppKey:"); |
alan1974 | 12:7944e4dbe853 | 59 | for (i = 0 ; i < sizeof(key_AppKey);i++) |
alan1974 | 12:7944e4dbe853 | 60 | pc.printf(" %x",pNvm->key_AppKey[i]); |
alan1974 | 7:fba1e8fc7693 | 61 | pc.printf("\r\nbLogOutputOn: %d ",pNvm->bLogOutputOn); |
alan1974 | 7:fba1e8fc7693 | 62 | |
alan1974 | 13:1f3a8d0be511 | 63 | pc.printf("\r\nstatic backup keys:"); |
alan1974 | 12:7944e4dbe853 | 64 | pc.printf("\r\nkey_AppEUI:"); |
alan1974 | 12:7944e4dbe853 | 65 | for (i = 0; i < sizeof(key_AppEUI);i++) |
alan1974 | 12:7944e4dbe853 | 66 | pc.printf(" %x",key_AppEUI[i]); |
alan1974 | 12:7944e4dbe853 | 67 | pc.printf("\r\nkey_AppKey:"); |
alan1974 | 12:7944e4dbe853 | 68 | for (i = 0 ; i < sizeof(key_AppKey);i++) |
alan1974 | 12:7944e4dbe853 | 69 | pc.printf(" %x",key_AppKey[i]); |
alan1974 | 7:fba1e8fc7693 | 70 | } |
alan1974 | 5:abfe25f0de33 | 71 | if(verbose)pc.printf("\r\n************************************************************\r\n"); |
alan1974 | 12:7944e4dbe853 | 72 | } |
alan1974 | 12:7944e4dbe853 | 73 | //============================================================================== |
alan1974 | 17:74d60177c6b6 | 74 | //printNvmABPData --- OLD CODE |
alan1974 | 12:7944e4dbe853 | 75 | //============================================================================== |
alan1974 | 17:74d60177c6b6 | 76 | /* |
alan1974 | 12:7944e4dbe853 | 77 | void printNvmABPData(nvmABP *pNvmABP){ |
alan1974 | 12:7944e4dbe853 | 78 | uint8_t i; |
alan1974 | 12:7944e4dbe853 | 79 | if(verbose){ |
alan1974 | 12:7944e4dbe853 | 80 | pc.printf("\r\n************************************************************"); |
alan1974 | 12:7944e4dbe853 | 81 | pc.printf("\r\nnon-volatile memory (nvm) for ABP credendtials:"); |
alan1974 | 12:7944e4dbe853 | 82 | pc.printf("\r\nnetworkSessionKey:"); |
alan1974 | 12:7944e4dbe853 | 83 | for (i = 0; i < 16;i++) |
alan1974 | 12:7944e4dbe853 | 84 | pc.printf(" %x",pNvmABP->key_nsk[i]); |
alan1974 | 13:1f3a8d0be511 | 85 | pc.printf("\r\nappicationSessonKey"); |
alan1974 | 12:7944e4dbe853 | 86 | for (i = 0; i < 16; i++) |
alan1974 | 12:7944e4dbe853 | 87 | pc.printf(" %x",pNvmABP->key_aps[i]); |
alan1974 | 13:1f3a8d0be511 | 88 | pc.printf("\r\nDevAddr"); |
alan1974 | 12:7944e4dbe853 | 89 | for (i = 0 ; i < 8; i++) |
alan1974 | 12:7944e4dbe853 | 90 | pc.printf(" %x",pNvmABP->devAdr[i]); |
alan1974 | 12:7944e4dbe853 | 91 | } |
alan1974 | 12:7944e4dbe853 | 92 | if(verbose)pc.printf("\r\n************************************************************\r\n"); |
alan1974 | 17:74d60177c6b6 | 93 | } |
alan1974 | 17:74d60177c6b6 | 94 | */ |
alan1974 | 13:1f3a8d0be511 | 95 | //============================================================================== |
alan1974 | 13:1f3a8d0be511 | 96 | //getChkSum |
alan1974 | 13:1f3a8d0be511 | 97 | //compute chksum |
alan1974 | 13:1f3a8d0be511 | 98 | // *pData : pointer to byte data array |
alan1974 | 13:1f3a8d0be511 | 99 | // len : len of byte data array |
alan1974 | 13:1f3a8d0be511 | 100 | //============================================================================== |
alan1974 | 13:1f3a8d0be511 | 101 | uint8_t getChkSum(uint8_t *pData,uint8_t len ){ |
alan1974 | 13:1f3a8d0be511 | 102 | uint8_t i; |
alan1974 | 13:1f3a8d0be511 | 103 | uint8_t chksum= 0; |
alan1974 | 13:1f3a8d0be511 | 104 | for (i = 0 ; i < len;i++)chksum += pData[i]; |
alan1974 | 13:1f3a8d0be511 | 105 | return chksum; |
alan1974 | 13:1f3a8d0be511 | 106 | } |
alan1974 | 13:1f3a8d0be511 | 107 | /* |
alan1974 | 2:0af50f386eb2 | 108 | //============================================================================== |
alan1974 | 2:0af50f386eb2 | 109 | //getNvmChkSum |
alan1974 | 1:0d25d9ddbe9f | 110 | //compute chksum for nvm data; don't include chksum byte in nvm struc |
alan1974 | 1:0d25d9ddbe9f | 111 | //============================================================================== |
alan1974 | 2:0af50f386eb2 | 112 | uint8_t getNvmChkSum(nvm *pNvm){ |
alan1974 | 2:0af50f386eb2 | 113 | uint8_t i; |
alan1974 | 1:0d25d9ddbe9f | 114 | uint8_t chksum= 0; |
alan1974 | 1:0d25d9ddbe9f | 115 | uint8_t *pData = (uint8_t *)pNvm; |
alan1974 | 1:0d25d9ddbe9f | 116 | |
alan1974 | 1:0d25d9ddbe9f | 117 | for (i = 0 ; i < sizeof(nvm)-1;i++)chksum += pData[i]; |
alan1974 | 1:0d25d9ddbe9f | 118 | return chksum; |
alan1974 | 13:1f3a8d0be511 | 119 | } |
alan1974 | 13:1f3a8d0be511 | 120 | */ |
alan1974 | 1:0d25d9ddbe9f | 121 | //============================================================================== |
alan1974 | 12:7944e4dbe853 | 122 | //getNvmADPChkSum |
alan1974 | 12:7944e4dbe853 | 123 | //compute chksum for nvm data; don't include chksum byte in nvm struc |
alan1974 | 12:7944e4dbe853 | 124 | // TODO: COMBINE TWO CHKSUM PROCEDURES |
alan1974 | 12:7944e4dbe853 | 125 | //============================================================================== |
alan1974 | 13:1f3a8d0be511 | 126 | /* |
alan1974 | 13:1f3a8d0be511 | 127 | uint8_t getNvmABPChkSum(nvmABP *pNvmABP){ |
alan1974 | 12:7944e4dbe853 | 128 | uint8_t i; |
alan1974 | 12:7944e4dbe853 | 129 | uint8_t chksum= 0; |
alan1974 | 12:7944e4dbe853 | 130 | uint8_t *pData = (uint8_t *)pNvmABP; |
alan1974 | 12:7944e4dbe853 | 131 | |
alan1974 | 12:7944e4dbe853 | 132 | for (i = 0 ; i < sizeof(nvmABP)-1;i++)chksum += pData[i]; |
alan1974 | 12:7944e4dbe853 | 133 | return chksum; |
alan1974 | 12:7944e4dbe853 | 134 | } |
alan1974 | 13:1f3a8d0be511 | 135 | */ |
alan1974 | 12:7944e4dbe853 | 136 | //============================================================================== |
alan1974 | 1:0d25d9ddbe9f | 137 | //nvmWrite |
alan1974 | 1:0d25d9ddbe9f | 138 | //write nvmData struc to nvm memory |
alan1974 | 1:0d25d9ddbe9f | 139 | //============================================================================== |
alan1974 | 1:0d25d9ddbe9f | 140 | bool nvmWrite(nvm *pNvm){ |
alan1974 | 13:1f3a8d0be511 | 141 | //pNvm->chksum = getNvmChkSum(pNvm); |
alan1974 | 13:1f3a8d0be511 | 142 | uint8_t len = sizeof(pNvm)-1; //doesn't include chksum byte |
alan1974 | 13:1f3a8d0be511 | 143 | pNvm->chksum = getChkSum((uint8_t *)pNvm,len); |
alan1974 | 4:d87f8dcf40ef | 144 | printNmvData(pNvm); |
alan1974 | 12:7944e4dbe853 | 145 | return dot->nvmWrite(NVM_ADDR_OTAA,pNvm,sizeof(nvm)); |
alan1974 | 12:7944e4dbe853 | 146 | } |
alan1974 | 17:74d60177c6b6 | 147 | /* |
alan1974 | 12:7944e4dbe853 | 148 | //============================================================================== |
alan1974 | 12:7944e4dbe853 | 149 | //nvmWriteABP |
alan1974 | 12:7944e4dbe853 | 150 | //write nvmABPData struc to nvm memory TODO: WRITE PROCEDUREES |
alan1974 | 12:7944e4dbe853 | 151 | //============================================================================== |
alan1974 | 12:7944e4dbe853 | 152 | bool nvmWriteABP(nvmABP *pNvmABP){ |
alan1974 | 13:1f3a8d0be511 | 153 | // pNvmABP->chksum = getNvmABPChkSum(pNvmABP); |
alan1974 | 13:1f3a8d0be511 | 154 | uint8_t len = sizeof(pNvmABP)-1; //doesn't include chksum byte |
alan1974 | 13:1f3a8d0be511 | 155 | pNvmABP->chksum = getChkSum((uint8_t *)pNvmABP,len); |
alan1974 | 13:1f3a8d0be511 | 156 | if(verbose)pc.printf("\r\n writing ABP creds to nvm:"); |
alan1974 | 12:7944e4dbe853 | 157 | printNvmABPData(pNvmABP); |
alan1974 | 13:1f3a8d0be511 | 158 | return dot->nvmWrite(NVM_ADDR_ABP,pNvmABP,sizeof(nvmABP)); |
alan1974 | 1:0d25d9ddbe9f | 159 | } |
alan1974 | 17:74d60177c6b6 | 160 | */ |
alan1974 | 1:0d25d9ddbe9f | 161 | //============================================================================== |
alan1974 | 8:a5316708e51d | 162 | //nvmRestorekeys |
alan1974 | 13:1f3a8d0be511 | 163 | //restore OTAA hard coded keys to nvm and also logdisplay enable/disable |
alan1974 | 8:a5316708e51d | 164 | //============================================================================== |
alan1974 | 9:cc23b2049639 | 165 | bool nvmRestore(nvm *pNvm){ |
alan1974 | 8:a5316708e51d | 166 | uint8_t i; |
alan1974 | 12:7944e4dbe853 | 167 | for (i = 0; i < sizeof(key_AppEUI);i++){ |
alan1974 | 12:7944e4dbe853 | 168 | pNvm->key_AppEUI[i] = key_AppEUI[i]; |
alan1974 | 8:a5316708e51d | 169 | } |
alan1974 | 12:7944e4dbe853 | 170 | for (i = 0; i < sizeof(key_AppKey);i++){ |
alan1974 | 12:7944e4dbe853 | 171 | pNvm->key_AppKey[i] = key_AppKey[i]; |
alan1974 | 8:a5316708e51d | 172 | } |
alan1974 | 13:1f3a8d0be511 | 173 | uint8_t len = sizeof(pNvm)-1; //doesn't include chksum byte |
alan1974 | 13:1f3a8d0be511 | 174 | pNvm->chksum = getChkSum((uint8_t *)pNvm,len); |
alan1974 | 13:1f3a8d0be511 | 175 | //pNvm->chksum = getNvmChkSum(pNvm); |
alan1974 | 13:1f3a8d0be511 | 176 | if(verbose)pc.printf("\r\n restoring OTAA backup keys:"); |
alan1974 | 8:a5316708e51d | 177 | printNmvData(pNvm); |
alan1974 | 12:7944e4dbe853 | 178 | return dot->nvmWrite(NVM_ADDR_OTAA,pNvm,sizeof(nvm)); |
alan1974 | 8:a5316708e51d | 179 | } |
alan1974 | 8:a5316708e51d | 180 | //============================================================================== |
alan1974 | 1:0d25d9ddbe9f | 181 | //nvmRead |
alan1974 | 1:0d25d9ddbe9f | 182 | //- read nvmData struc from nvm memory |
alan1974 | 1:0d25d9ddbe9f | 183 | //- if bad chksum then default to hard code network keys |
alan1974 | 1:0d25d9ddbe9f | 184 | //============================================================================== |
alan1974 | 1:0d25d9ddbe9f | 185 | bool nvmRead(nvm *pNvm){ |
alan1974 | 12:7944e4dbe853 | 186 | dot->nvmRead(NVM_ADDR_OTAA,pNvm,sizeof(nvm)); |
alan1974 | 13:1f3a8d0be511 | 187 | uint8_t len = sizeof(pNvm)-1; //doesn't include chksum byte |
alan1974 | 13:1f3a8d0be511 | 188 | uint8_t chksum = getChkSum((uint8_t *)pNvm,len); |
alan1974 | 13:1f3a8d0be511 | 189 | //uint8_t chksum = getNvmChkSum(pNvm); |
alan1974 | 7:fba1e8fc7693 | 190 | |
alan1974 | 1:0d25d9ddbe9f | 191 | if (chksum == pNvm->chksum){ |
alan1974 | 13:1f3a8d0be511 | 192 | logInfo("nvmRead: nvm OTAA chksum ok"); |
alan1974 | 1:0d25d9ddbe9f | 193 | return true; |
alan1974 | 1:0d25d9ddbe9f | 194 | } |
alan1974 | 8:a5316708e51d | 195 | return false; |
alan1974 | 1:0d25d9ddbe9f | 196 | } |
alan1974 | 12:7944e4dbe853 | 197 | |
alan1974 | 12:7944e4dbe853 | 198 | //============================================================================== |
alan1974 | 17:74d60177c6b6 | 199 | //nvmReadABP ------------ OLD CODE |
alan1974 | 12:7944e4dbe853 | 200 | //- read nvmDataABP struc from nvm memory |
alan1974 | 12:7944e4dbe853 | 201 | //- if bad chksum then default to hard code network keys |
alan1974 | 12:7944e4dbe853 | 202 | //============================================================================== |
alan1974 | 17:74d60177c6b6 | 203 | /* |
alan1974 | 12:7944e4dbe853 | 204 | bool nvmReadABP(nvmABP *pNvmABP){ |
alan1974 | 13:1f3a8d0be511 | 205 | dot->nvmRead(NVM_ADDR_ABP,pNvmABP,sizeof(nvmABP)); |
alan1974 | 13:1f3a8d0be511 | 206 | //uint8_t chksum = getNvmABPChkSum(pNvmABP); |
alan1974 | 13:1f3a8d0be511 | 207 | uint8_t len = sizeof(pNvmABP)-1; //doesn't include chksum byte |
alan1974 | 13:1f3a8d0be511 | 208 | uint8_t chksum = getChkSum((uint8_t *)pNvmABP,len); |
alan1974 | 12:7944e4dbe853 | 209 | |
alan1974 | 12:7944e4dbe853 | 210 | if (chksum == pNvmABP->chksum){ |
alan1974 | 13:1f3a8d0be511 | 211 | logInfo("nvmRead: ABP chksum ok"); |
alan1974 | 12:7944e4dbe853 | 212 | return true; |
alan1974 | 12:7944e4dbe853 | 213 | } |
alan1974 | 12:7944e4dbe853 | 214 | return false; |
alan1974 | 12:7944e4dbe853 | 215 | } |
alan1974 | 17:74d60177c6b6 | 216 | */ |
alan1974 | 1:0d25d9ddbe9f | 217 | //============================================================================ |
alan1974 | 1:0d25d9ddbe9f | 218 | |
alan1974 | 0:a91cd1b08360 | 219 | uint8_t join_network_attempts_wbit() { |
alan1974 | 0:a91cd1b08360 | 220 | return j_attempts; |
alan1974 | 0:a91cd1b08360 | 221 | } |
alan1974 | 0:a91cd1b08360 | 222 | |
alan1974 | 0:a91cd1b08360 | 223 | bool join_network_wbit(uint8_t nmbAttempts) { |
alan1974 | 0:a91cd1b08360 | 224 | j_attempts = 0; |
alan1974 | 0:a91cd1b08360 | 225 | int32_t ret = mDot::MDOT_ERROR; |
alan1974 | 0:a91cd1b08360 | 226 | |
alan1974 | 0:a91cd1b08360 | 227 | // attempt to join the network |
alan1974 | 14:fc836a5a5d2f | 228 | while (ret != mDot::MDOT_OK) |
alan1974 | 14:fc836a5a5d2f | 229 | { |
alan1974 | 0:a91cd1b08360 | 230 | j_attempts++; |
alan1974 | 0:a91cd1b08360 | 231 | logInfo("attempt %d to join network",j_attempts); |
alan1974 | 0:a91cd1b08360 | 232 | ret = dot->joinNetwork(); |
alan1974 | 0:a91cd1b08360 | 233 | if (ret == mDot::MDOT_OK) return true; |
alan1974 | 0:a91cd1b08360 | 234 | |
alan1974 | 0:a91cd1b08360 | 235 | logError("failed to join network %d:%s", ret, mDot::getReturnCodeString(ret).c_str()); |
alan1974 | 0:a91cd1b08360 | 236 | if (j_attempts >= nmbAttempts) |
alan1974 | 0:a91cd1b08360 | 237 | { |
alan1974 | 0:a91cd1b08360 | 238 | logInfo("attempts %d to join network exceeds specified attempts $d ",j_attempts,nmbAttempts); |
alan1974 | 0:a91cd1b08360 | 239 | return false; |
alan1974 | 0:a91cd1b08360 | 240 | } |
alan1974 | 0:a91cd1b08360 | 241 | // in some frequency bands we need to wait until another channel is available before transmitting again |
alan1974 | 0:a91cd1b08360 | 242 | uint32_t delay_s = (dot->getNextTxMs() / 1000) + 1; |
alan1974 | 0:a91cd1b08360 | 243 | if (delay_s < 2) { |
alan1974 | 0:a91cd1b08360 | 244 | logInfo("waiting %lu s until next free channel", delay_s); |
alan1974 | 0:a91cd1b08360 | 245 | wait(delay_s); |
alan1974 | 0:a91cd1b08360 | 246 | } else { |
alan1974 | 0:a91cd1b08360 | 247 | logInfo("sleeping %lu s until next free channel", delay_s); |
alan1974 | 0:a91cd1b08360 | 248 | dot->sleep(delay_s, mDot::RTC_ALARM, false); |
alan1974 | 0:a91cd1b08360 | 249 | } |
alan1974 | 0:a91cd1b08360 | 250 | }//while |
alan1974 | 0:a91cd1b08360 | 251 | return false; |
alan1974 | 0:a91cd1b08360 | 252 | } |