LMIC lib Lora OTA device for Everynet

Fork of LMiC-10secs by Alcatel-Lucent IoT Development

Files at this revision

API Documentation at this revision

Comitter:
pnysten
Date:
Fri Sep 23 09:15:43 2016 +0000
Parent:
9:c5820ce68bd6
Commit message:
LMIC lib Lora Personalized device for Everynet

Changed in this revision

lmic.cpp Show annotated file Show diff for this revision Revisions of this file
lmic.h Show annotated file Show diff for this revision Revisions of this file
--- a/lmic.cpp	Tue Feb 23 08:41:36 2016 +0000
+++ b/lmic.cpp	Fri Sep 23 09:15:43 2016 +0000
@@ -1052,6 +1052,7 @@
     //debug_val("olen: ", olen);
 
     if( addr != LMIC.devaddr ) {
+        debug_str("Device Address not correct!");
         EV(specCond, WARN, (e_.reason = EV::specCond_t::ALIEN_ADDRESS,
                             e_.eui    = MAIN::CDEV->getEui(),
                             e_.info   = addr,
@@ -1097,6 +1098,7 @@
         }
         // Replay of previous sequence number allowed only if
         // previous frame and repeated both requested confirmation
+        debug_str("Replay Conf\n\r");
         replayConf = 1;
     }
     else {
@@ -1289,7 +1291,7 @@
         
         //if( port >= 0  &&  pend-poff > 0 )
             //aes_cipher(port <= 0 ? LMIC.nwkKey : LMIC.artKey, LMIC.devaddr, seqno, /*dn*/1, d+poff, pend-poff);
-
+        debug_str("HANDLING PAYLOAD...\r\n");
         if( port >= 0  && port != 1 &&  pend-poff > 0 )
         {
             debug_str("Payload decrypting...\r\n");
@@ -1622,7 +1624,11 @@
         goto badframe;
     }
 
-    u4_t addr = os_rlsbf4(LMIC.frame+OFF_JA_DEVADDR);
+    //u4_t addr = os_rlsbf4(LMIC.frame+OFF_JA_DEVADDR);
+    debug_str( "Join accept = ");
+    debug_buf(LMIC.frame, dlen);
+    u4_t addr = os_rlsbf4(&LMIC.frame[OFF_JA_DEVADDR]);
+    debug_val( "Dev Addr = ", addr );
     LMIC.devaddr = addr;
     LMIC.netid = os_rlsbf4(&LMIC.frame[OFF_JA_NETID]) & 0xFFFFFF;
 
@@ -1855,12 +1861,20 @@
         }
         LMIC.frame[end] = LMIC.pendTxPort;
         os_copyMem(LMIC.frame+end+1, LMIC.pendTxData, dlen);
+
+//        debug_str("Data frame before encrypting: ");  
+        debug_buf(LMIC.frame, dlen);
+//        debug_str("Encrypting data frame\r\n");
         aes_cipher(LMIC.pendTxPort==0 ? LMIC.nwkKey : LMIC.artKey,
                    LMIC.devaddr, LMIC.seqnoUp-1,
                    /*up*/0, LMIC.frame+end+1, dlen);
+//        debug_str("Encrypted data frame: ");  
+        debug_buf(LMIC.frame, dlen);         
     }
     aes_appendMic(LMIC.nwkKey, LMIC.devaddr, LMIC.seqnoUp-1, /*up*/0, LMIC.frame, flen-4);
-
+//    debug_str("Frame to be sent: ");  
+    debug_buf(LMIC.frame, dlen);         
+ 
     EV(dfinfo, DEBUG, (e_.deveui  = MAIN::CDEV->getEui(),
                        e_.devaddr = LMIC.devaddr,
                        e_.seqno   = LMIC.seqnoUp-1,
@@ -2009,7 +2023,7 @@
 // ================================================================================
 
 static void processPingRx (xref2osjob_t osjob) {
-    //debug_str("processPingRx\r\n");
+    debug_str("processPingRx\r\n");
     if( LMIC.dataLen != 0 ) {
         LMIC.txrxFlags = TXRX_PING;
         if( decodeFrame() ) {
@@ -2023,7 +2037,7 @@
 
 
 static bit_t processDnData (void) {
-    //debug_str("processDnData\r\n");
+    debug_str("processDnData\r\n");
     ASSERT((LMIC.opmode & OP_TXRXPEND)!=0);
 
     if( LMIC.dataLen == 0 ) {
@@ -2082,7 +2096,9 @@
         }
         return 1;
     }
+    debug_str("processDnData - decodeFrame\r\n");
     if( !decodeFrame() ) {
+        debug_str("decode Frame deconne\r\n");
         if( (LMIC.txrxFlags & TXRX_DNW1) != 0 )
             return 0;
         goto norx;
@@ -2223,7 +2239,7 @@
             goto checkrx;
         }
         // Earliest possible time vs overhead to setup radio
-        /*PANYif( txbeg - (now + TX_RAMPUP) < 0 ) {PANY*/
+        if( txbeg - (now + TX_RAMPUP) < 0 ) {
             // We could send right now!
             debug_str("We could send right now!"); 
             debug_char( '\r' );
@@ -2270,7 +2286,7 @@
             updateTx(txbeg);
             os_radio(RADIO_TX);
             return;
-        /*PANY}PANY*/
+        }
         // Cannot yet TX
         if( (LMIC.opmode & OP_TRACK) == 0 )
         {
@@ -2425,7 +2441,7 @@
 
 
 //
-int LMIC_setTxData2 (u1_t port, xref2u1_t data, u1_t dlen, u1_t confirmed) {
+int LMIC_setTxData2 (u1_t port, xref2u1_t data, u1_t dlen, u1_t confirmed, int encrypted) {
     //debug_str("LMIC_setTxData2\r\n");
 /*    debug_val("Data Length: ", dlen);
     debug_val("Data Length: ", SIZEOFEXPR(LMIC.pendTxData));*/
@@ -2433,12 +2449,27 @@
         return -2;
     if( data != (xref2u1_t)0 )
     {
-        os_copyMem(LMIC.pendTxData, data, dlen);
+     if (encrypted == 1) {
+        debug_str("ENCRYPTING PAYLOAD\n\r");
+        debug_val("COUNTER UP: ", LMIC.seqnoUp);
+        debug_str("Network Key: ");
+        debug_buf(LMIC.nwkKey, 16);
+        debug_val("Device Address: ", LMIC.devaddr);
+        debug_str("Data before encryption: ");
+        debug_buf(data, dlen);
+        aes_cipher(LMIC.nwkKey, LMIC.devaddr, LMIC.seqnoUp, 0, data, dlen);
+        debug_str("Data after encryption: ");
+        debug_buf(data, dlen);
+     }
+       os_copyMem(LMIC.pendTxData, data, dlen);
     }
     //debug_str("Send Data\r\n");
     LMIC.pendTxConf = confirmed;
     LMIC.pendTxPort = port;
     LMIC.pendTxLen  = dlen;
+ /*   aes_cipher(LMIC.pendTxPort==0 ? LMIC.nwkKey : LMIC.artKey,
+                   LMIC.devaddr, LMIC.seqnoUp-1,
+                   0, LMIC.frame+end+1, dlen);*/
     LMIC_setTxData();
     return 0;
 }
--- a/lmic.h	Tue Feb 23 08:41:36 2016 +0000
+++ b/lmic.h	Fri Sep 23 09:15:43 2016 +0000
@@ -44,18 +44,20 @@
        LINK_CHECK_INIT    = -12 ,    // UP frame count until we inc datarate
        LINK_CHECK_OFF     =-128 };   // link check disabled
 
-/*enum { TIME_RESYNC        =  6*128 }; // secs
+enum { TIME_RESYNC        =  6*128 }; // secs
 enum { TXRX_GUARD_ms      =  6000 };  // msecs - don't start TX-RX transaction before beacon
 enum { JOIN_GUARD_ms      =  9000 };  // msecs - don't start Join Req/Acc transaction before beacon
 enum { TXRX_BCNEXT_secs   =     2 };  // secs - earliest start after beacon time
-enum { RETRY_PERIOD_secs  =     3 };  // secs - random period for retrying a confirmed send*/
+enum { RETRY_PERIOD_secs  =     3 };  // secs - random period for retrying a confirmed send
 
 //PANY
+/*
 enum { TIME_RESYNC        =  6*128 }; // secs
 enum { TXRX_GUARD_ms      =  1000 };  // msecs - don't start TX-RX transaction before beacon
 enum { JOIN_GUARD_ms      =  1000 };  // msecs - don't start Join Req/Acc transaction before beacon
 enum { TXRX_BCNEXT_secs   =     1 };  // secs - earliest start after beacon time
 enum { RETRY_PERIOD_secs  =     1 };  // secs - random period for retrying a confirmed send
+*/
 //PANY
 #if defined(CFG_eu868) // EU868 spectrum ====================================================
 
@@ -263,7 +265,7 @@
 void  LMIC_reset        (void);
 void  LMIC_clrTxData    (void);
 void  LMIC_setTxData    (void);
-int   LMIC_setTxData2   (u1_t port, xref2u1_t data, u1_t dlen, u1_t confirmed);
+int   LMIC_setTxData2   (u1_t port, xref2u1_t data, u1_t dlen, u1_t confirmed, int encrypted);
 void  LMIC_sendAlive    (void);
 
 bit_t LMIC_enableTracking  (u1_t tryBcnInfo);