Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: LMiC SX1276Lib cantcoap lwip mbed-rtos mbed
Fork of LoRaWAN-lmic-app by
Revision 6:540c5d907c90, committed 2015-12-14
- Comitter:
- pnysten
- Date:
- Mon Dec 14 10:47:06 2015 +0000
- Parent:
- 5:97b629581096
- Child:
- 7:f1521b0ecf08
- Commit message:
- LORA ALU motive version
Changed in this revision
| LMiC.lib | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/LMiC.lib Mon Nov 23 09:54:36 2015 +0000 +++ b/LMiC.lib Mon Dec 14 10:47:06 2015 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/users/pnysten/code/LMiC/#1079dc4b4c59 +https://developer.mbed.org/teams/Alcatel-Lucent-IoT-Development/code/LMiC/#663db54d46eb
--- a/main.cpp Mon Nov 23 09:54:36 2015 +0000
+++ b/main.cpp Mon Dec 14 10:47:06 2015 +0000
@@ -12,11 +12,13 @@
Maintainer: Miguel Luis and Gregory Cristian
*/
+
#include <cstdio>
#include <string>
#include <cassert>
#include "mbed.h"
+//#include "Node.h"
#include "cantcoap.h"
#include "lmic.h"
@@ -26,20 +28,20 @@
const std::string ENDPOINT_SEGMENT = "?ep=";
const std::string LIFETIME ="<=";
const std::string BINDING ="&b=";
-
+
const std::string REGISTRATION_OPEN = "<";
const std::string REGISTRATION_CLOSE = ">";
const std::string REGISTRATION_SEPARATOR ="/";
-
+
int _node_Id=0;
-
+
const std::string endPoint_Name = "loraDevice";
const int lifeTime = 300;
const std::string binding = "U";
-
+
unsigned char * _payload;
long _payload_size;
-
+
/*!
* When set to 1 the application uses the Over-the-Air activation procedure
* When set to 0 the application uses the Personalization activation procedure
@@ -57,6 +59,7 @@
* Defines the device address when using personalization activation procedure
*/
#define LORAWAN_DEV_ADDR ( uint32_t )0x12345678
+//#define LORAWAN_DEV_ADDR ( uint32_t )0x12341111
#endif
@@ -94,7 +97,9 @@
#define UINT16_MAX (65535U)
#define UINT64_MAX (18446744073709551615ULL)
-
+
+//Node lwm2mNode("LR-test0");;
+unsigned int LoRaWAN_data_size = 0;
std::string to_string( int x ) {
int length = snprintf( NULL, 0, "%d", x );
@@ -106,11 +111,11 @@
return str;
}
unsigned char * get_Registration_Payload(long *payload_size){
-
+
string registration_Payload ="";
-
+
string s="";
-
+
s.append(REGISTRATION_OPEN);
s.append(REGISTRATION_SEPARATOR);
s.append("3/0/0");
@@ -125,7 +130,7 @@
s.append(REGISTRATION_SEPARATOR);
s.append("3/0/2");
s.append(REGISTRATION_CLOSE);
-
+
registration_Payload.append(s);
unsigned char *c = new unsigned char[registration_Payload.size()+1];
@@ -134,7 +139,7 @@
*payload_size=registration_Payload.size();
return c;
-
+
}
uint8_t * get_Token(int * size){
srand(time(0)+_node_Id);
@@ -159,7 +164,7 @@
}
return token;
}
-
+
uint16_t get_Message_ID(){
srand(time(0)+_node_Id);
int test=0;
@@ -175,7 +180,7 @@
return (uint16_t) test;
}
-
+
char * get_Registration_Query(){
string buffer;
@@ -192,9 +197,9 @@
c[buffer.size()]='\0';
return c;
-
+
}
-
+
//////////////////////////////////////////////////
// CONFIGURATION (FOR APPLICATION CALLBACKS BELOW)
//////////////////////////////////////////////////
@@ -203,12 +208,18 @@
static const uint8_t AppEui[8] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+// 0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00
};
// unique device ID (LSBF)
static const u1_t DevEui[8] =
{
- 0x00, 0x00, 0x00, 0x00, 0x08, 0x06, 0x02, 0x48
+// 0x00, 0x00, 0x00, 0x00, 0x08, 0x06, 0x02, 0x48
+
+ 0x30, 0x74, 0x73, 0x65, 0x74, 0x2D, 0x52, 0x4C // 4c522d7465737430 = "LR-test0"
+// 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x99, 0xF7
+
+
// 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF
// 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x099, 0xF7
};
@@ -216,6 +227,8 @@
// device-specific AES key (derived from device EUI)
static const uint8_t DevKey[16] =
{
+// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+// 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01
0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C
};
@@ -226,6 +239,7 @@
{
0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C
+// 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3D
};
// application session key
@@ -233,6 +247,7 @@
{
0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C
+// 0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3D
};
#endif
@@ -296,6 +311,40 @@
debug_val("LED1 = ", 0 );
}
+static void prepareTxCoapFrame( void )
+{
+ // Create Registration PDU :
+
+ CoapPDU *pdu = new CoapPDU();
+
+ pdu->setCode(CoapPDU::COAP_POST);
+ pdu->setType(CoapPDU::COAP_CONFIRMABLE);
+ int size;
+ uint8_t * token = get_Token(&size);
+ pdu->setToken(token,size);
+ pdu->setMessageID(get_Message_ID());
+ pdu->setURI(get_Registration_Query());
+
+ _payload=get_Registration_Payload(&_payload_size);
+ pdu->setPayload(_payload, (int) _payload_size);
+ int PDUlength = pdu->getPDULength();
+
+// strncpy((char*) LMIC.frame, (const char*)pdu->getPDUPointer(), PDUlength);
+ memcpy(LMIC.frame, pdu->getPDUPointer(), PDUlength * sizeof(uint8_t));
+
+#if ( LORAWAN_CONFIRMED_MSG_ON == 1 )
+ LMIC.frame[PDUlength] = LMIC.seqnoDn >> 8;
+ LMIC.frame[PDUlength+1] = LMIC.seqnoDn;
+ LMIC.frame[PDUlength+2] = LMIC.rssi >> 8;
+ LMIC.frame[PDUlength+3] = LMIC.rssi;
+ LMIC.frame[PDUlength+4] = LMIC.snr;
+#endif
+ debug_str("Frame to be sent: ");
+ debug_buf(LMIC.frame, PDUlength + 5);
+
+ LoRaWAN_data_size = PDUlength + 5;
+}
+
static void prepareTxFrame( void )
{
LMIC.frame[0] = AppLedStateOn;
@@ -306,23 +355,16 @@
LMIC.frame[4] = LMIC.rssi;
LMIC.frame[5] = LMIC.snr;
#endif
-/* debug_str("Frame to be sent: ");
- debug_val("1: ", LMIC.frame[0]);
- debug_val("2: ", LMIC.frame[1]);
- debug_val("3: ", LMIC.frame[2]);
- debug_val("4: ", LMIC.frame[3]);
- debug_val("5: ", LMIC.frame[4]);
- debug_val("6: ", LMIC.frame[5]);
- debug_str("\r\n");*/
+ debug_str("Frame to be sent: ");
+ debug_buf(LMIC.frame, LORAWAN_APP_DATA_SIZE);
+
+ LoRaWAN_data_size = LORAWAN_APP_DATA_SIZE;
}
void processRxFrame( void )
{
debug_str("Data: ");
debug_buf( LMIC.frame + LMIC.dataBeg, LMIC.dataLen );
-/* debug_str("Data - command: ");
- debug_hex(LMIC.frame[0]);
- debug_str("\r\n");*/
switch( LMIC.frame[LMIC.dataBeg - 1] ) // Check Rx port number
{
@@ -348,45 +390,10 @@
static void onSendFrame( osjob_t* j )
{
- prepareTxFrame( );
+ //prepareTxFrame( );
+ prepareTxCoapFrame();
- // Create Registration PDU :
-
- CoapPDU *pdu = new CoapPDU();
-
- pdu->setCode(CoapPDU::COAP_POST);
- pdu->setType(CoapPDU::COAP_CONFIRMABLE);
- int size;
- uint8_t * token = get_Token(&size);
- pdu->setToken(token,size);
- pdu->setMessageID(get_Message_ID());
- pdu->setURI(get_Registration_Query());
-
- _payload=get_Registration_Payload(&_payload_size);
- pdu->setPayload(_payload, (int) _payload_size);
-
- int PDUlength = pdu->getPDULength();
- u1_t frame[PDUlength+6];
-
- memcpy(frame, pdu->getPDUPointer(), PDUlength * sizeof(uint8_t));
-
- frame[PDUlength] = LMIC.seqnoDn >> 8;
- frame[PDUlength+1] = LMIC.seqnoDn;
- frame[PDUlength+2] = LMIC.rssi >> 8;
- frame[PDUlength+3] = LMIC.rssi;
- frame[PDUlength+4] = LMIC.snr;
- frame[PDUlength+5] = '\0';
- /* debug_str("Frame: ");
- debug_str(pdu->getPDUPointer());
- debug_str(" <STOP>\r\n");
-
- debug_str("Frame: ");
- debug_str(frame);
- debug_str(" <STOP>\r\n");
- debug_val("Frame Length: ", PDUlength+5);*/
-
- //LMIC_setTxData2( LORAWAN_APP_PORT, frame, PDUlength+6, LORAWAN_CONFIRMED_MSG_ON );
- LMIC_setTxData2( LORAWAN_APP_PORT, LMIC.frame, LORAWAN_APP_DATA_SIZE, LORAWAN_CONFIRMED_MSG_ON );
+ LMIC_setTxData2( LORAWAN_APP_PORT, LMIC.frame, LoRaWAN_data_size, LORAWAN_CONFIRMED_MSG_ON );
// Blink Tx LED
debug_val( "LED1 = ", 1 );
@@ -415,7 +422,7 @@
{
debug_init();
osjob_t initjob;
-
+
// initialize runtime env
os_init( );
// setup initial job
