From b320736fb2e895b57cec43a20be4187d137032d6 Mon Sep 17 00:00:00 2001 From: Mike Cochrane Date: Sun, 5 Jun 2016 00:06:57 +1200 Subject: [PATCH 1/2] msbf4_read corrupts certain Device Addresses. Just enter it directly as a u4_t. --- .../examples/esp-lmic-v1.51-F/esp-lmic-v1.51-F.ino | 6 ++---- .../examples/nano-lmic-v1.51-F/nano-lmic-v1.51-F.ino | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/libraries/lmic-v1.51/examples/esp-lmic-v1.51-F/esp-lmic-v1.51-F.ino b/libraries/lmic-v1.51/examples/esp-lmic-v1.51-F/esp-lmic-v1.51-F.ino index 902beaf..38818cf 100644 --- a/libraries/lmic-v1.51/examples/esp-lmic-v1.51-F/esp-lmic-v1.51-F.ino +++ b/libraries/lmic-v1.51/examples/esp-lmic-v1.51-F/esp-lmic-v1.51-F.ino @@ -72,9 +72,7 @@ unsigned char AppSkey[16] = { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0x // LoRaWAN end-device address (DevAddr) // See http://thethingsnetwork.org/wiki/AddressSpace - -#define msbf4_read(p) (u4_t)((u4_t)(p)[0]<<24 | (u4_t)(p)[1]<<16 | (p)[2]<<8 | (p)[3]) -unsigned char DevAddr[4] = { 0x01, 0x01, 0x01, 0x01 }; +static const u4_t DevAddr = 0x01010101; // ---------------------------------------------------------------------------- @@ -171,7 +169,7 @@ void setup() { LMIC_reset(); // Set static session parameters. Instead of dynamically establishing a session // by joining the network, precomputed session parameters are be provided. - LMIC_setSession (0x1, msbf4_read(DevAddr), (uint8_t*)NwkSkey, (uint8_t*)AppSkey); + LMIC_setSession (0x1, DevAddr, (uint8_t*)NwkSkey, (uint8_t*)AppSkey); // Disable data rate adaptation LMIC_setAdrMode(0); // Disable link check validation diff --git a/libraries/lmic-v1.51/examples/nano-lmic-v1.51-F/nano-lmic-v1.51-F.ino b/libraries/lmic-v1.51/examples/nano-lmic-v1.51-F/nano-lmic-v1.51-F.ino index d6b7325..f4ed7c9 100644 --- a/libraries/lmic-v1.51/examples/nano-lmic-v1.51-F/nano-lmic-v1.51-F.ino +++ b/libraries/lmic-v1.51/examples/nano-lmic-v1.51-F/nano-lmic-v1.51-F.ino @@ -71,9 +71,7 @@ unsigned char AppSkey[16] = { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0 // LoRaWAN end-device address (DevAddr) // See http://thethingsnetwork.org/wiki/AddressSpace - -#define msbf4_read(p) (u4_t)((u4_t)(p)[0]<<24 | (u4_t)(p)[1]<<16 | (p)[2]<<8 | (p)[3]) -unsigned char DevAddr[4] = { 0x01, 0x01, 0x01, 0x01 }; +static const u4_t DevAddr = 0x01010101; // ---------------------------------------------------------------------------- @@ -167,7 +165,7 @@ void setup() { LMIC_reset(); // Set static session parameters. Instead of dynamically establishing a session // by joining the network, precomputed session parameters are be provided. - LMIC_setSession (0x1, msbf4_read(DevAddr), (uint8_t*)NwkSkey, (uint8_t*)AppSkey); + LMIC_setSession (0x1, DevAddr, (uint8_t*)NwkSkey, (uint8_t*)AppSkey); // Disable data rate adaptation LMIC_setAdrMode(0); // Disable link check validation From d32c8531e036282a8daa7f5d52adb8cc4cce3e10 Mon Sep 17 00:00:00 2001 From: Mike Cochrane Date: Sun, 5 Jun 2016 03:28:06 +1200 Subject: [PATCH 2/2] Fix encryption code to match new device address format --- .../esp-lmic-v1.51-F/esp-lmic-v1.51-F.ino | 2 +- .../nano-lmic-v1.51-F/nano-lmic-v1.51-F.ino | 2 +- libraries/lmic-v1.51/src/lmic/Encrypt_V30.cpp | 19 ++++++++++--------- 3 files changed, 12 insertions(+), 11 deletions(-) diff --git a/libraries/lmic-v1.51/examples/esp-lmic-v1.51-F/esp-lmic-v1.51-F.ino b/libraries/lmic-v1.51/examples/esp-lmic-v1.51-F/esp-lmic-v1.51-F.ino index 38818cf..56b4f63 100644 --- a/libraries/lmic-v1.51/examples/esp-lmic-v1.51-F/esp-lmic-v1.51-F.ino +++ b/libraries/lmic-v1.51/examples/esp-lmic-v1.51-F/esp-lmic-v1.51-F.ino @@ -72,7 +72,7 @@ unsigned char AppSkey[16] = { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0x // LoRaWAN end-device address (DevAddr) // See http://thethingsnetwork.org/wiki/AddressSpace -static const u4_t DevAddr = 0x01010101; +u4_t DevAddr = 0x01010101; // ---------------------------------------------------------------------------- diff --git a/libraries/lmic-v1.51/examples/nano-lmic-v1.51-F/nano-lmic-v1.51-F.ino b/libraries/lmic-v1.51/examples/nano-lmic-v1.51-F/nano-lmic-v1.51-F.ino index f4ed7c9..0b79211 100644 --- a/libraries/lmic-v1.51/examples/nano-lmic-v1.51-F/nano-lmic-v1.51-F.ino +++ b/libraries/lmic-v1.51/examples/nano-lmic-v1.51-F/nano-lmic-v1.51-F.ino @@ -71,7 +71,7 @@ unsigned char AppSkey[16] = { 0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6, 0 // LoRaWAN end-device address (DevAddr) // See http://thethingsnetwork.org/wiki/AddressSpace -static const u4_t DevAddr = 0x01010101; +u4_t DevAddr = 0x01010101; // ---------------------------------------------------------------------------- diff --git a/libraries/lmic-v1.51/src/lmic/Encrypt_V30.cpp b/libraries/lmic-v1.51/src/lmic/Encrypt_V30.cpp index 952ed26..3b829f3 100644 --- a/libraries/lmic-v1.51/src/lmic/Encrypt_V30.cpp +++ b/libraries/lmic-v1.51/src/lmic/Encrypt_V30.cpp @@ -30,6 +30,7 @@ ***************************************************************************************** */ +#include "oslmic.h" #include "Encrypt_V30.h" #include "AES-128_V10.h" @@ -41,7 +42,7 @@ extern unsigned char NwkSkey[16]; extern unsigned char AppSkey[16]; -extern unsigned char DevAddr[4]; +extern u4_t DevAddr; // -------------------------------------------------------------------- // @@ -73,10 +74,10 @@ void Encrypt_Payload(unsigned char *Data, unsigned char Data_Length, unsigned in Block_A[5] = Direction; - Block_A[6] = DevAddr[3]; - Block_A[7] = DevAddr[2]; - Block_A[8] = DevAddr[1]; - Block_A[9] = DevAddr[0]; + Block_A[6] = DevAddr; + Block_A[7] = DevAddr>>8; + Block_A[8] = DevAddr>>16; + Block_A[9] = DevAddr>>24; Block_A[10] = (Frame_Counter & 0x00FF); Block_A[11] = ((Frame_Counter >> 8) & 0x00FF); @@ -157,10 +158,10 @@ void Calculate_MIC(unsigned char *Data, unsigned char *Final_MIC, unsigned char Block_B[5] = Direction; - Block_B[6] = DevAddr[3]; - Block_B[7] = DevAddr[2]; - Block_B[8] = DevAddr[1]; - Block_B[9] = DevAddr[0]; + Block_B[6] = DevAddr; + Block_B[7] = DevAddr>>8; + Block_B[8] = DevAddr>>16; + Block_B[9] = DevAddr>>24; Block_B[10] = (Frame_Counter & 0x00FF); Block_B[11] = ((Frame_Counter >> 8) & 0x00FF);