arm studio build

Dependencies:   libxDot-mbed5

Committer:
alan1974
Date:
Sat Aug 04 19:56:33 2018 +0000
Revision:
2:0af50f386eb2
Parent:
1:0d25d9ddbe9f
Child:
4:d87f8dcf40ef
update

Who changed what in which revision?

UserRevisionLine numberNew 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 1:0d25d9ddbe9f 8 uint8_t j_attempts = 0; //return number of attempts it took to join the network
alan1974 1:0d25d9ddbe9f 9
alan1974 1:0d25d9ddbe9f 10
alan1974 1:0d25d9ddbe9f 11 //network keys
alan1974 1:0d25d9ddbe9f 12 //these are used as backup keys in case nvm memory is corrupted and we can't read the keys correctly
alan1974 1:0d25d9ddbe9f 13 uint8_t network_id[] = { 0x90, 0xF1, 0x47, 0x90, 0x6C, 0x48, 0x1D, 0x29 }; //static id not used anymore but don't comment out
alan1974 2:0af50f386eb2 14 uint8_t network_key[] = { 0x0F, 0xF9, 0xA2, 0x90, 0x2E, 0xAA, 0x6B, 0x8C, 0x6A, 0x4E, 0xFD, 0x67, 0xF9, 0xA6, 0xF3, 0xD3 }; //OTAA appkey
alan1974 2:0af50f386eb2 15 //==============================================================================
alan1974 2:0af50f386eb2 16 //printNmvData
alan1974 1:0d25d9ddbe9f 17 //==============================================================================
alan1974 2:0af50f386eb2 18 void printNmvData(nvm *pNvm){
alan1974 2:0af50f386eb2 19 uint8_t i;
alan1974 2:0af50f386eb2 20 pc.printf("\r\nnon-volatile memory (nvm):");
alan1974 2:0af50f386eb2 21 pc.printf("\r\nnetwork_id:");
alan1974 2:0af50f386eb2 22 // for (i = 0 ; i < sizeof(nvm.network_id);i++)i =1;
alan1974 2:0af50f386eb2 23 //pc.printf(pNvm->network[i];
alan1974 2:0af50f386eb2 24
alan1974 2:0af50f386eb2 25 }
alan1974 2:0af50f386eb2 26 //==============================================================================
alan1974 2:0af50f386eb2 27 //getNvmChkSum
alan1974 1:0d25d9ddbe9f 28 //compute chksum for nvm data; don't include chksum byte in nvm struc
alan1974 1:0d25d9ddbe9f 29 //==============================================================================
alan1974 2:0af50f386eb2 30 uint8_t getNvmChkSum(nvm *pNvm){
alan1974 2:0af50f386eb2 31 uint8_t i;
alan1974 1:0d25d9ddbe9f 32 uint8_t chksum= 0;
alan1974 1:0d25d9ddbe9f 33 uint8_t *pData = (uint8_t *)pNvm;
alan1974 1:0d25d9ddbe9f 34
alan1974 1:0d25d9ddbe9f 35 for (i = 0 ; i < sizeof(nvm)-1;i++)chksum += pData[i];
alan1974 1:0d25d9ddbe9f 36 return chksum;
alan1974 1:0d25d9ddbe9f 37 }
alan1974 1:0d25d9ddbe9f 38 //==============================================================================
alan1974 1:0d25d9ddbe9f 39 //nvmWrite
alan1974 1:0d25d9ddbe9f 40 //write nvmData struc to nvm memory
alan1974 1:0d25d9ddbe9f 41 //==============================================================================
alan1974 1:0d25d9ddbe9f 42 bool nvmWrite(nvm *pNvm){
alan1974 2:0af50f386eb2 43 pNvm->chksum = getNvmChkSum(pNvm);
alan1974 1:0d25d9ddbe9f 44 return dot->nvmWrite(0,pNvm,sizeof(nvm));
alan1974 1:0d25d9ddbe9f 45 }
alan1974 1:0d25d9ddbe9f 46 //==============================================================================
alan1974 1:0d25d9ddbe9f 47 //nvmRead
alan1974 1:0d25d9ddbe9f 48 //- read nvmData struc from nvm memory
alan1974 1:0d25d9ddbe9f 49 //- if bad chksum then default to hard code network keys
alan1974 1:0d25d9ddbe9f 50 //==============================================================================
alan1974 1:0d25d9ddbe9f 51 bool nvmRead(nvm *pNvm){
alan1974 1:0d25d9ddbe9f 52 uint8_t i;
alan1974 1:0d25d9ddbe9f 53 dot->nvmRead(0,pNvm,sizeof(nvm));
alan1974 2:0af50f386eb2 54 uint8_t chksum = getNvmChkSum(pNvm);
alan1974 1:0d25d9ddbe9f 55 if (chksum == pNvm->chksum){
alan1974 2:0af50f386eb2 56 logInfo("nvmRead: chksum ok");
alan1974 1:0d25d9ddbe9f 57 return true;
alan1974 1:0d25d9ddbe9f 58 }
alan1974 1:0d25d9ddbe9f 59 //bad chksum, resort to old hard coded keys
alan1974 2:0af50f386eb2 60 pc.printf("nvmRead: bad chksum, using default values");
alan1974 1:0d25d9ddbe9f 61 for (i = 0; i < sizeof(network_id);i++){
alan1974 1:0d25d9ddbe9f 62 pNvm->network_id[i] = network_id[i];
alan1974 1:0d25d9ddbe9f 63 }
alan1974 1:0d25d9ddbe9f 64 for (i = 0; i < sizeof(network_key);i++){
alan1974 1:0d25d9ddbe9f 65 pNvm->network_key[i] = network_key[i];
alan1974 1:0d25d9ddbe9f 66 }
alan1974 1:0d25d9ddbe9f 67 pNvm->bLogOutputOn = 1; //disable log output
alan1974 1:0d25d9ddbe9f 68 return false;
alan1974 1:0d25d9ddbe9f 69 }
alan1974 1:0d25d9ddbe9f 70 //============================================================================
alan1974 1:0d25d9ddbe9f 71
alan1974 0:a91cd1b08360 72 uint8_t join_network_attempts_wbit() {
alan1974 0:a91cd1b08360 73 return j_attempts;
alan1974 0:a91cd1b08360 74 }
alan1974 0:a91cd1b08360 75
alan1974 0:a91cd1b08360 76 bool join_network_wbit(uint8_t nmbAttempts) {
alan1974 0:a91cd1b08360 77 //int32_t j_attempts = 0;
alan1974 0:a91cd1b08360 78 j_attempts = 0;
alan1974 0:a91cd1b08360 79 int32_t ret = mDot::MDOT_ERROR;
alan1974 0:a91cd1b08360 80
alan1974 0:a91cd1b08360 81 // attempt to join the network
alan1974 0:a91cd1b08360 82 while (ret != mDot::MDOT_OK) {
alan1974 0:a91cd1b08360 83 j_attempts++;
alan1974 0:a91cd1b08360 84 logInfo("attempt %d to join network",j_attempts);
alan1974 0:a91cd1b08360 85 ret = dot->joinNetwork();
alan1974 0:a91cd1b08360 86 if (ret == mDot::MDOT_OK) return true;
alan1974 0:a91cd1b08360 87
alan1974 0:a91cd1b08360 88 logError("failed to join network %d:%s", ret, mDot::getReturnCodeString(ret).c_str());
alan1974 0:a91cd1b08360 89 if (j_attempts >= nmbAttempts)
alan1974 0:a91cd1b08360 90 {
alan1974 0:a91cd1b08360 91 logInfo("attempts %d to join network exceeds specified attempts $d ",j_attempts,nmbAttempts);
alan1974 0:a91cd1b08360 92 return false;
alan1974 0:a91cd1b08360 93 }
alan1974 0:a91cd1b08360 94 // in some frequency bands we need to wait until another channel is available before transmitting again
alan1974 0:a91cd1b08360 95 uint32_t delay_s = (dot->getNextTxMs() / 1000) + 1;
alan1974 0:a91cd1b08360 96 if (delay_s < 2) {
alan1974 0:a91cd1b08360 97 logInfo("waiting %lu s until next free channel", delay_s);
alan1974 0:a91cd1b08360 98 wait(delay_s);
alan1974 0:a91cd1b08360 99 } else {
alan1974 0:a91cd1b08360 100 logInfo("sleeping %lu s until next free channel", delay_s);
alan1974 0:a91cd1b08360 101 dot->sleep(delay_s, mDot::RTC_ALARM, false);
alan1974 0:a91cd1b08360 102 }
alan1974 0:a91cd1b08360 103 }//while
alan1974 0:a91cd1b08360 104 return false;
alan1974 0:a91cd1b08360 105 }