![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
arm studio build
Diff: src/wbit_util.cpp
- Revision:
- 13:1f3a8d0be511
- Parent:
- 12:7944e4dbe853
- Child:
- 14:fc836a5a5d2f
--- a/src/wbit_util.cpp Thu Jan 17 14:21:33 2019 +0000 +++ b/src/wbit_util.cpp Thu Jan 17 20:17:31 2019 +0000 @@ -14,12 +14,10 @@ uint8_t key_AppEUI[] = { 0x90, 0xF1, 0x47, 0x90, 0x6C, 0x48, 0x1D, 0x29 }; //AppEui 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 - -//ADP keys: for xdot spoofer eui ---> need to be uploaded from proc, using EUI: -static uint8_t network_address[] = { 0x01,0x48,0xF8,0x9A}; //0148F89A -static uint8_t network_session_key[] = { 0x67, 0x9B, 0x67, 0x1F, 0x4B, 0xF4, 0x04, 0xD9, 0xD7, 0x1F, 0x9E, 0x00, 0xB3, 0x5D, 0x02, 0x48 }; -static uint8_t data_session_key[] = { 0xB5, 0xB4, 0x2A, 0xB0, 0x2C, 0xC7, 0x8F, 0x5D, 0x83, 0x99, 0x73, 0xB7, 0x24, 0x63, 0x6B, 0xBC }; - +//ADP keys: for xdot spoofer eui ---> need to be uploaded from proc, using EUI: #spoofer (EUI 00-80-00-00-04-00-FF-FF) +static uint8_t network_address[] = {0x01,0x59,0xE2,0xC7}; +static uint8_t network_session_key[] = {0xBA, 0xEF, 0x4D, 0xA3, 0x66, 0xD1, 0x85, 0xDE, 0xB1, 0xCD, 0x79, 0x15, 0xC7, 0xEB, 0x72, 0x35}; +static uint8_t data_session_key[] = {0xF9,0x13,0x94,0x0D,0x12,0x95,0x96,0x5A,0xF4,0x34,0xBB,0xA9,0x8E,0x2A,0x83,0x10}; //============================================================================ @@ -62,7 +60,7 @@ pc.printf(" %x",pNvm->key_AppKey[i]); pc.printf("\r\nbLogOutputOn: %d ",pNvm->bLogOutputOn); - pc.printf("\r\n static backup keys:"); + pc.printf("\r\nstatic backup keys:"); pc.printf("\r\nkey_AppEUI:"); for (i = 0; i < sizeof(key_AppEUI);i++) pc.printf(" %x",key_AppEUI[i]); @@ -83,15 +81,28 @@ pc.printf("\r\nnetworkSessionKey:"); for (i = 0; i < 16;i++) pc.printf(" %x",pNvmABP->key_nsk[i]); - pc.printf("\r\n:appicationSessonKey"); + pc.printf("\r\nappicationSessonKey"); for (i = 0; i < 16; i++) pc.printf(" %x",pNvmABP->key_aps[i]); - pc.printf("\r\n:DevAddr"); + pc.printf("\r\nDevAddr"); for (i = 0 ; i < 8; i++) pc.printf(" %x",pNvmABP->devAdr[i]); } if(verbose)pc.printf("\r\n************************************************************\r\n"); -} +} +//============================================================================== +//getChkSum +//compute chksum +// *pData : pointer to byte data array +// len : len of byte data array +//============================================================================== +uint8_t getChkSum(uint8_t *pData,uint8_t len ){ + uint8_t i; + uint8_t chksum= 0; + for (i = 0 ; i < len;i++)chksum += pData[i]; + return chksum; +} +/* //============================================================================== //getNvmChkSum //compute chksum for nvm data; don't include chksum byte in nvm struc @@ -103,14 +114,15 @@ for (i = 0 ; i < sizeof(nvm)-1;i++)chksum += pData[i]; return chksum; -} +} +*/ //============================================================================== //getNvmADPChkSum //compute chksum for nvm data; don't include chksum byte in nvm struc // TODO: COMBINE TWO CHKSUM PROCEDURES //============================================================================== -uint8_t getNvmABPChkSum(nvmABP *pNvmABP){ - +/* +uint8_t getNvmABPChkSum(nvmABP *pNvmABP){ uint8_t i; uint8_t chksum= 0; uint8_t *pData = (uint8_t *)pNvmABP; @@ -118,12 +130,15 @@ for (i = 0 ; i < sizeof(nvmABP)-1;i++)chksum += pData[i]; return chksum; } +*/ //============================================================================== //nvmWrite //write nvmData struc to nvm memory //============================================================================== bool nvmWrite(nvm *pNvm){ - pNvm->chksum = getNvmChkSum(pNvm); + //pNvm->chksum = getNvmChkSum(pNvm); + uint8_t len = sizeof(pNvm)-1; //doesn't include chksum byte + pNvm->chksum = getChkSum((uint8_t *)pNvm,len); printNmvData(pNvm); return dot->nvmWrite(NVM_ADDR_OTAA,pNvm,sizeof(nvm)); } @@ -132,13 +147,16 @@ //write nvmABPData struc to nvm memory TODO: WRITE PROCEDUREES //============================================================================== bool nvmWriteABP(nvmABP *pNvmABP){ - pNvmABP->chksum = getNvmABPChkSum(pNvmABP); +// pNvmABP->chksum = getNvmABPChkSum(pNvmABP); + uint8_t len = sizeof(pNvmABP)-1; //doesn't include chksum byte + pNvmABP->chksum = getChkSum((uint8_t *)pNvmABP,len); + if(verbose)pc.printf("\r\n writing ABP creds to nvm:"); printNvmABPData(pNvmABP); - return dot->nvmWrite(NVM_ADDR_OTAA,pNvmABP,sizeof(nvmABP)); + return dot->nvmWrite(NVM_ADDR_ABP,pNvmABP,sizeof(nvmABP)); } //============================================================================== //nvmRestorekeys -//restore hard coded keys to nvm and also logdisplay enable/disable +//restore OTAA hard coded keys to nvm and also logdisplay enable/disable //============================================================================== bool nvmRestore(nvm *pNvm){ uint8_t i; @@ -148,8 +166,10 @@ for (i = 0; i < sizeof(key_AppKey);i++){ pNvm->key_AppKey[i] = key_AppKey[i]; } - pNvm->chksum = getNvmChkSum(pNvm); - if(verbose)pc.printf("\r\n restoring backup keys:"); + uint8_t len = sizeof(pNvm)-1; //doesn't include chksum byte + pNvm->chksum = getChkSum((uint8_t *)pNvm,len); + //pNvm->chksum = getNvmChkSum(pNvm); + if(verbose)pc.printf("\r\n restoring OTAA backup keys:"); printNmvData(pNvm); return dot->nvmWrite(NVM_ADDR_OTAA,pNvm,sizeof(nvm)); } @@ -159,12 +179,13 @@ //- if bad chksum then default to hard code network keys //============================================================================== bool nvmRead(nvm *pNvm){ - uint8_t i; dot->nvmRead(NVM_ADDR_OTAA,pNvm,sizeof(nvm)); - uint8_t chksum = getNvmChkSum(pNvm); + uint8_t len = sizeof(pNvm)-1; //doesn't include chksum byte + uint8_t chksum = getChkSum((uint8_t *)pNvm,len); + //uint8_t chksum = getNvmChkSum(pNvm); if (chksum == pNvm->chksum){ - logInfo("nvmRead: chksum ok"); + logInfo("nvmRead: nvm OTAA chksum ok"); return true; } return false; @@ -176,12 +197,13 @@ //- if bad chksum then default to hard code network keys //============================================================================== bool nvmReadABP(nvmABP *pNvmABP){ - uint8_t i; - dot->nvmRead(NVM_ADDR_OTAA,pNvmABP,sizeof(nvmABP)); - uint8_t chksum = getNvmABPChkSum(pNvmABP); + dot->nvmRead(NVM_ADDR_ABP,pNvmABP,sizeof(nvmABP)); + //uint8_t chksum = getNvmABPChkSum(pNvmABP); + uint8_t len = sizeof(pNvmABP)-1; //doesn't include chksum byte + uint8_t chksum = getChkSum((uint8_t *)pNvmABP,len); if (chksum == pNvmABP->chksum){ - logInfo("nvmRead: chksum ok"); + logInfo("nvmRead: ABP chksum ok"); return true; } return false;