uwizeyimana abdulkarim / Mbed 2 deprecated mobileproject

Dependencies:   mbed

Committer:
uwizeyimana
Date:
Sun Jul 11 08:19:38 2021 +0000
Revision:
3:6076b262dc5e
Parent:
2:b990d41df49e
Child:
4:51ec2290a0fc
updated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
uwizeyimana 0:6e0a4dac6596 1 /*mobile project
uwizeyimana 0:6e0a4dac6596 2 GROUP MEMBERS:
uwizeyimana 0:6e0a4dac6596 3 1)UWIZEYIMANA ABDULKARIM REG NBER:220020691
uwizeyimana 0:6e0a4dac6596 4 2)AMOUR SALIM MOHAMMED REG NBER: 221027397
uwizeyimana 0:6e0a4dac6596 5 3)SHAAME M. BAKAR REG NBER: 220020578
uwizeyimana 0:6e0a4dac6596 6 4)ANGELIQUE*/
uwizeyimana 2:b990d41df49e 7
uwizeyimana 0:6e0a4dac6596 8 #include "mbed.h"
uwizeyimana 0:6e0a4dac6596 9 #include "C12832.h"
uwizeyimana 3:6076b262dc5e 10 #include "mbed_trace.h"
uwizeyimana 3:6076b262dc5e 11 #include "mbed_events.h"
uwizeyimana 3:6076b262dc5e 12 #include "LoRaWANInterface.h"
uwizeyimana 0:6e0a4dac6596 13 #include "Sht31.h"
uwizeyimana 3:6076b262dc5e 14 #include "SX1276_LoRaRadio.h"
uwizeyimana 0:6e0a4dac6596 15 #include <string>
uwizeyimana 1:2a3b76b2e4e5 16 #include "time.h"
uwizeyimana 1:2a3b76b2e4e5 17 time_t startTime;
uwizeyimana 1:2a3b76b2e4e5 18 time_t stopTime;
uwizeyimana 1:2a3b76b2e4e5 19 time_t startReading;
uwizeyimana 1:2a3b76b2e4e5 20 time_t stopReading;
uwizeyimana 1:2a3b76b2e4e5 21 int readingDuration;
uwizeyimana 0:6e0a4dac6596 22 Serial device (p9,p10);
uwizeyimana 0:6e0a4dac6596 23 C12832 lcd(SPI_MOSI, SPI_SCK, SPI_MISO, p8, p11);
uwizeyimana 0:6e0a4dac6596 24 Sht31 theo(I2C_SDA, I2C_SCL);
uwizeyimana 0:6e0a4dac6596 25 DigitalOut led(p13);
uwizeyimana 0:6e0a4dac6596 26 DigitalOut bed(p12);
uwizeyimana 0:6e0a4dac6596 27 DigitalOut wed(p14);
uwizeyimana 0:6e0a4dac6596 28 InterruptIn btn(p15);
uwizeyimana 0:6e0a4dac6596 29 InterruptIn swt(p11);
uwizeyimana 1:2a3b76b2e4e5 30 Timeout t;
uwizeyimana 1:2a3b76b2e4e5 31 Ticker k;
uwizeyimana 1:2a3b76b2e4e5 32 Ticker topicTicker;
uwizeyimana 1:2a3b76b2e4e5 33 Ticker durationTime;
uwizeyimana 1:2a3b76b2e4e5 34 Ticker resetted;
uwizeyimana 3:6076b262dc5e 35 //Ticker backagain;
uwizeyimana 0:6e0a4dac6596 36 int direction=0;
uwizeyimana 1:2a3b76b2e4e5 37 int i=0;
uwizeyimana 1:2a3b76b2e4e5 38 int pushDuration;
uwizeyimana 0:6e0a4dac6596 39 int current=0;
uwizeyimana 1:2a3b76b2e4e5 40 int state=0;
uwizeyimana 2:b990d41df49e 41
uwizeyimana 0:6e0a4dac6596 42 string str1 = "Menu of the Day";
uwizeyimana 0:6e0a4dac6596 43 string str2 = "Rwanda Food Services Ltd";
uwizeyimana 0:6e0a4dac6596 44 string str3="Rwanda Food Services Ltd,click Btn to browseMenu";
uwizeyimana 0:6e0a4dac6596 45 string topics[]={"1.Out Side catering services",
uwizeyimana 0:6e0a4dac6596 46 "2.Restaurent Services","3.fast Food Services",
uwizeyimana 0:6e0a4dac6596 47 "4.Online ordering Food Services",
uwizeyimana 0:6e0a4dac6596 48 "5.Cook Training Services "
uwizeyimana 0:6e0a4dac6596 49 };
uwizeyimana 0:6e0a4dac6596 50 string content[]={"11.online bookings buffet package for 80+ guests with 10 percent off",
uwizeyimana 0:6e0a4dac6596 51 "22.Pilawo, biriyani, African food,western food","33.fried chicken with salad,fried fish with salad,Nyama choma",
uwizeyimana 0:6e0a4dac6596 52 "44.African food,westen food,fast food,pilawo,biriyani",
uwizeyimana 0:6e0a4dac6596 53 "55.bread,samosa cooking and smoothies preparation "
uwizeyimana 0:6e0a4dac6596 54 };
uwizeyimana 3:6076b262dc5e 55 // Device credentials, register device as OTAA in The Things Network and copy credentials here
uwizeyimana 3:6076b262dc5e 56 static uint8_t DEV_EUI[] = { 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18 };
uwizeyimana 3:6076b262dc5e 57 static uint8_t APP_EUI[] = { 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18 };
uwizeyimana 3:6076b262dc5e 58 static uint8_t APP_KEY[] = { 0x51, 0xEA, 0x6E, 0x8B, 0x30, 0x44, 0xE6, 0x4A, 0xBD, 0xD3, 0xFD, 0xD0, 0x4A, 0x1C, 0x4D, 0x2F };
uwizeyimana 3:6076b262dc5e 59
uwizeyimana 3:6076b262dc5e 60
uwizeyimana 3:6076b262dc5e 61 // The port we're sending and receiving on
uwizeyimana 3:6076b262dc5e 62 #define MBED_CONF_LORA_APP_PORT 15
uwizeyimana 3:6076b262dc5e 63
uwizeyimana 3:6076b262dc5e 64 // Peripherals (LoRa radio, temperature sensor and button)
uwizeyimana 3:6076b262dc5e 65 SX1276_LoRaRadio radio(D11, D12, D13, D10, A0, D2, D3, D4, D5, D8, D9, NC, NC, NC, NC, A4, NC, NC);
uwizeyimana 3:6076b262dc5e 66 Sht31 sht31(I2C_SDA, I2C_SCL);
uwizeyimana 3:6076b262dc5e 67
uwizeyimana 3:6076b262dc5e 68
uwizeyimana 3:6076b262dc5e 69 // EventQueue is required to dispatch events around
uwizeyimana 3:6076b262dc5e 70 static EventQueue ev_queue;
uwizeyimana 3:6076b262dc5e 71
uwizeyimana 3:6076b262dc5e 72 // Constructing Mbed LoRaWANInterface and passing it down the radio object.
uwizeyimana 3:6076b262dc5e 73 static LoRaWANInterface lorawan(radio);
uwizeyimana 3:6076b262dc5e 74
uwizeyimana 3:6076b262dc5e 75 // Application specific callbacks
uwizeyimana 3:6076b262dc5e 76 static lorawan_app_callbacks_t callbacks;
uwizeyimana 3:6076b262dc5e 77
uwizeyimana 3:6076b262dc5e 78 // LoRaWAN stack event handler
uwizeyimana 3:6076b262dc5e 79 static void lora_event_handler(lorawan_event_t event);
uwizeyimana 0:6e0a4dac6596 80 void display(string sms){
uwizeyimana 0:6e0a4dac6596 81 lcd.cls(); // change dane here
uwizeyimana 0:6e0a4dac6596 82 lcd.locate(0,0);
uwizeyimana 0:6e0a4dac6596 83 lcd.printf(sms.c_str());
uwizeyimana 0:6e0a4dac6596 84 }
uwizeyimana 2:b990d41df49e 85
uwizeyimana 2:b990d41df49e 86
uwizeyimana 1:2a3b76b2e4e5 87 void displayState1(){
uwizeyimana 0:6e0a4dac6596 88 float temp = theo.readTemperature();
uwizeyimana 0:6e0a4dac6596 89 time_t seconds = time(NULL);
uwizeyimana 0:6e0a4dac6596 90 char buffer[32];
uwizeyimana 0:6e0a4dac6596 91 strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds));
uwizeyimana 0:6e0a4dac6596 92 lcd.locate(5, 20); // get cursor to position x=3px and y=5px
uwizeyimana 0:6e0a4dac6596 93 lcd.cls();
uwizeyimana 0:6e0a4dac6596 94 lcd.set_auto_up(0);
uwizeyimana 1:2a3b76b2e4e5 95 lcd.locate(5, 1);
uwizeyimana 0:6e0a4dac6596 96 lcd.printf("Local Time: %s",buffer);
uwizeyimana 1:2a3b76b2e4e5 97 lcd.locate(5, 9);
uwizeyimana 0:6e0a4dac6596 98 lcd.printf("Temperature: %.2f C", temp);
uwizeyimana 0:6e0a4dac6596 99 }
uwizeyimana 2:b990d41df49e 100
uwizeyimana 0:6e0a4dac6596 101
uwizeyimana 1:2a3b76b2e4e5 102 void whiteled()
uwizeyimana 0:6e0a4dac6596 103 {
uwizeyimana 1:2a3b76b2e4e5 104 wed=!wed;
uwizeyimana 1:2a3b76b2e4e5 105 }
uwizeyimana 1:2a3b76b2e4e5 106 void forwards(){
uwizeyimana 1:2a3b76b2e4e5 107 display(topics[i]);
uwizeyimana 1:2a3b76b2e4e5 108 current=i;
uwizeyimana 1:2a3b76b2e4e5 109 i+=1;
uwizeyimana 1:2a3b76b2e4e5 110 if(i>4){
uwizeyimana 1:2a3b76b2e4e5 111 i=0;
uwizeyimana 1:2a3b76b2e4e5 112 }
uwizeyimana 1:2a3b76b2e4e5 113 }
uwizeyimana 1:2a3b76b2e4e5 114 void backwards(){
uwizeyimana 1:2a3b76b2e4e5 115 display(topics[i]);
uwizeyimana 1:2a3b76b2e4e5 116 current=i;
uwizeyimana 1:2a3b76b2e4e5 117 i-=1;
uwizeyimana 1:2a3b76b2e4e5 118 if(i<0){
uwizeyimana 1:2a3b76b2e4e5 119 i=4;
uwizeyimana 0:6e0a4dac6596 120 }
uwizeyimana 0:6e0a4dac6596 121 }
uwizeyimana 1:2a3b76b2e4e5 122 void displayState2(){
uwizeyimana 2:b990d41df49e 123 printf("direction %d \n",direction);
uwizeyimana 1:2a3b76b2e4e5 124 if(direction==0){
uwizeyimana 1:2a3b76b2e4e5 125 i=0;
uwizeyimana 1:2a3b76b2e4e5 126 bed=1;
uwizeyimana 1:2a3b76b2e4e5 127 led=0;
uwizeyimana 3:6076b262dc5e 128 topicTicker.attach(ev_queue.event(&forwards),2.0f);
uwizeyimana 1:2a3b76b2e4e5 129 }
uwizeyimana 1:2a3b76b2e4e5 130 else{
uwizeyimana 1:2a3b76b2e4e5 131 i=4;
uwizeyimana 1:2a3b76b2e4e5 132 led=1;
uwizeyimana 1:2a3b76b2e4e5 133 bed=0;
uwizeyimana 3:6076b262dc5e 134 topicTicker.attach(ev_queue.event(& backwards),2.0f);
uwizeyimana 1:2a3b76b2e4e5 135 }
uwizeyimana 1:2a3b76b2e4e5 136 }
uwizeyimana 2:b990d41df49e 137
uwizeyimana 1:2a3b76b2e4e5 138 void fallBtn(){
uwizeyimana 1:2a3b76b2e4e5 139 state = 0;
uwizeyimana 2:b990d41df49e 140 durationTime.detach();
uwizeyimana 2:b990d41df49e 141
uwizeyimana 1:2a3b76b2e4e5 142 }
uwizeyimana 1:2a3b76b2e4e5 143 void mode1(){
uwizeyimana 3:6076b262dc5e 144 k.attach(ev_queue.event(& whiteled),1.0f);
uwizeyimana 1:2a3b76b2e4e5 145 displayState1();
uwizeyimana 3:6076b262dc5e 146 t.attach(ev_queue.event(&displayState2),3.0f);
uwizeyimana 1:2a3b76b2e4e5 147
uwizeyimana 1:2a3b76b2e4e5 148 }
uwizeyimana 3:6076b262dc5e 149 void welcomeMsg(){
uwizeyimana 3:6076b262dc5e 150 display(str2);
uwizeyimana 3:6076b262dc5e 151 t.attach(ev_queue.event(&mode1),5.0f);
uwizeyimana 3:6076b262dc5e 152 }
uwizeyimana 1:2a3b76b2e4e5 153
uwizeyimana 1:2a3b76b2e4e5 154 void riseSwt(){
uwizeyimana 1:2a3b76b2e4e5 155 time(&startReading);
uwizeyimana 1:2a3b76b2e4e5 156 display(content[current]);
uwizeyimana 1:2a3b76b2e4e5 157 topicTicker.detach();
uwizeyimana 1:2a3b76b2e4e5 158
uwizeyimana 0:6e0a4dac6596 159
uwizeyimana 0:6e0a4dac6596 160 }
uwizeyimana 3:6076b262dc5e 161 static uint8_t* create_message(char device[], int topic, int duration) {
uwizeyimana 3:6076b262dc5e 162 // initialize the buffer
uwizeyimana 3:6076b262dc5e 163 uint8_t tx_buffer[50] = { 0 };
uwizeyimana 3:6076b262dc5e 164
uwizeyimana 3:6076b262dc5e 165 // DATA TO SEND (THE BELOW VALUES ARE THE ONES TO BE MODIFIED)
uwizeyimana 3:6076b262dc5e 166 // char device[] = "infant";
uwizeyimana 3:6076b262dc5e 167 // int topic = 4; // topic identifier
uwizeyimana 3:6076b262dc5e 168 // long int start = 1606037871; // start reading
uwizeyimana 3:6076b262dc5e 169 // long int end = 1606038090; // end reading
uwizeyimana 3:6076b262dc5e 170
uwizeyimana 3:6076b262dc5e 171 // long int duration = 20;
uwizeyimana 3:6076b262dc5e 172
uwizeyimana 3:6076b262dc5e 173 // Writing string data into a buffer
uwizeyimana 3:6076b262dc5e 174 sprintf((char*) tx_buffer, "{\"device\":\"%s\",\"topic\":%d,\"duration\":%d }", device, topic,duration);
uwizeyimana 3:6076b262dc5e 175 return tx_buffer;
uwizeyimana 3:6076b262dc5e 176 }
uwizeyimana 3:6076b262dc5e 177
uwizeyimana 3:6076b262dc5e 178
uwizeyimana 3:6076b262dc5e 179
uwizeyimana 3:6076b262dc5e 180 // Send a message over LoRaWAN
uwizeyimana 3:6076b262dc5e 181 static void send_message(uint8_t *tx_buffer) {
uwizeyimana 3:6076b262dc5e 182
uwizeyimana 3:6076b262dc5e 183 int packet_len = strlen((char*) tx_buffer);
uwizeyimana 3:6076b262dc5e 184
uwizeyimana 3:6076b262dc5e 185 printf("Sending %d bytes: \"%s\"\n", packet_len, tx_buffer);
uwizeyimana 3:6076b262dc5e 186
uwizeyimana 3:6076b262dc5e 187
uwizeyimana 3:6076b262dc5e 188 int16_t retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, tx_buffer, packet_len, MSG_UNCONFIRMED_FLAG);
uwizeyimana 3:6076b262dc5e 189
uwizeyimana 3:6076b262dc5e 190 // for some reason send() returns -1... I cannot find out why, the stack returns the right number. I feel that this is some weird Emscripten quirk
uwizeyimana 3:6076b262dc5e 191 if (retcode < 0) {
uwizeyimana 3:6076b262dc5e 192 retcode == LORAWAN_STATUS_WOULD_BLOCK ? printf("send - duty cycle violation\n")
uwizeyimana 3:6076b262dc5e 193 : printf("send() - Error code %d\n", retcode);
uwizeyimana 3:6076b262dc5e 194 return;
uwizeyimana 3:6076b262dc5e 195 }
uwizeyimana 3:6076b262dc5e 196
uwizeyimana 3:6076b262dc5e 197 printf("%d bytes scheduled for transmission\n", retcode);
uwizeyimana 3:6076b262dc5e 198 }
uwizeyimana 3:6076b262dc5e 199
uwizeyimana 1:2a3b76b2e4e5 200 void fallSwt(){
uwizeyimana 1:2a3b76b2e4e5 201 topicTicker.detach();
uwizeyimana 1:2a3b76b2e4e5 202 time(&stopReading);
uwizeyimana 1:2a3b76b2e4e5 203 readingDuration=stopReading-startReading;
uwizeyimana 1:2a3b76b2e4e5 204 printf("Reading time is:%d \n",readingDuration);
uwizeyimana 1:2a3b76b2e4e5 205 if(readingDuration>5){
uwizeyimana 3:6076b262dc5e 206
uwizeyimana 1:2a3b76b2e4e5 207 printf("message sent,Item Id is:%d \n",current+1);
uwizeyimana 3:6076b262dc5e 208 char device[] = "mobile";
uwizeyimana 3:6076b262dc5e 209 int topic = current+1; // topic identifier
uwizeyimana 3:6076b262dc5e 210
uwizeyimana 3:6076b262dc5e 211 send_message(create_message(device,topic,readingDuration));
uwizeyimana 3:6076b262dc5e 212
uwizeyimana 1:2a3b76b2e4e5 213 }
uwizeyimana 1:2a3b76b2e4e5 214 displayState2();
uwizeyimana 0:6e0a4dac6596 215 }
uwizeyimana 3:6076b262dc5e 216
uwizeyimana 3:6076b262dc5e 217
uwizeyimana 1:2a3b76b2e4e5 218 void countDuration(){
uwizeyimana 1:2a3b76b2e4e5 219 time(&stopTime);
uwizeyimana 1:2a3b76b2e4e5 220 pushDuration=stopTime-startTime;
uwizeyimana 2:b990d41df49e 221 printf("elapsed time is:%d \n",pushDuration);
uwizeyimana 1:2a3b76b2e4e5 222 if(pushDuration>5){
uwizeyimana 1:2a3b76b2e4e5 223 display("System resetting......\n");
uwizeyimana 1:2a3b76b2e4e5 224 durationTime.detach();
uwizeyimana 1:2a3b76b2e4e5 225 topicTicker.detach();
uwizeyimana 3:6076b262dc5e 226 direction=!direction;
uwizeyimana 3:6076b262dc5e 227 resetted.attach(ev_queue.event(&welcomeMsg),10.0f);
uwizeyimana 3:6076b262dc5e 228
uwizeyimana 3:6076b262dc5e 229 //backagain.attach(callback(&mode1),15.0f);
uwizeyimana 1:2a3b76b2e4e5 230
uwizeyimana 1:2a3b76b2e4e5 231 }
uwizeyimana 2:b990d41df49e 232 else if(pushDuration>=3 && state==0 ){
uwizeyimana 2:b990d41df49e 233 state =1;
uwizeyimana 2:b990d41df49e 234 printf("direction changed %d \n",direction);
uwizeyimana 1:2a3b76b2e4e5 235 direction=!direction;
uwizeyimana 1:2a3b76b2e4e5 236 displayState2();
uwizeyimana 1:2a3b76b2e4e5 237
uwizeyimana 1:2a3b76b2e4e5 238 }
uwizeyimana 1:2a3b76b2e4e5 239 }
uwizeyimana 1:2a3b76b2e4e5 240 void riseBtn(){
uwizeyimana 1:2a3b76b2e4e5 241 time(&startTime);
uwizeyimana 3:6076b262dc5e 242 durationTime.attach(ev_queue.event(&countDuration),0.5f);
uwizeyimana 2:b990d41df49e 243
uwizeyimana 1:2a3b76b2e4e5 244 }
uwizeyimana 3:6076b262dc5e 245
uwizeyimana 2:b990d41df49e 246
uwizeyimana 0:6e0a4dac6596 247 int main() {
uwizeyimana 3:6076b262dc5e 248
uwizeyimana 3:6076b262dc5e 249
uwizeyimana 3:6076b262dc5e 250 if (DEV_EUI[0] == 0x0 && DEV_EUI[1] == 0x0 && DEV_EUI[2] == 0x0 && DEV_EUI[3] == 0x0 && DEV_EUI[4] == 0x0 && DEV_EUI[5] == 0x0 && DEV_EUI[6] == 0x0 && DEV_EUI[7] == 0x0) {
uwizeyimana 3:6076b262dc5e 251 printf("Set your LoRaWAN credentials first!\n");
uwizeyimana 3:6076b262dc5e 252 return -1;
uwizeyimana 3:6076b262dc5e 253 }
uwizeyimana 3:6076b262dc5e 254
uwizeyimana 3:6076b262dc5e 255 printf("Press BUTTON1 to send the current value of the temperature sensor!\n");
uwizeyimana 3:6076b262dc5e 256
uwizeyimana 3:6076b262dc5e 257 // Enable trace output for this demo, so we can see what the LoRaWAN stack does
uwizeyimana 3:6076b262dc5e 258 mbed_trace_init();
uwizeyimana 3:6076b262dc5e 259
uwizeyimana 3:6076b262dc5e 260 if (lorawan.initialize(&ev_queue) != LORAWAN_STATUS_OK) {
uwizeyimana 3:6076b262dc5e 261 printf("LoRa initialization failed!\n");
uwizeyimana 3:6076b262dc5e 262 return -1;
uwizeyimana 3:6076b262dc5e 263 }
uwizeyimana 3:6076b262dc5e 264
uwizeyimana 3:6076b262dc5e 265 // Fire a message when the button is pressed
uwizeyimana 3:6076b262dc5e 266 //btn.fall(ev_queue.event(&send_data_button_isr));
uwizeyimana 3:6076b262dc5e 267 btn.rise(ev_queue.event(&riseBtn));
uwizeyimana 3:6076b262dc5e 268 btn.fall(ev_queue.event(&fallBtn));
uwizeyimana 3:6076b262dc5e 269 swt.rise(ev_queue.event(&riseSwt));
uwizeyimana 3:6076b262dc5e 270 swt.fall(ev_queue.event(&fallSwt));
uwizeyimana 3:6076b262dc5e 271
uwizeyimana 3:6076b262dc5e 272 // prepare application callbacks
uwizeyimana 3:6076b262dc5e 273 callbacks.events = mbed::callback(lora_event_handler);
uwizeyimana 3:6076b262dc5e 274 lorawan.add_app_callbacks(&callbacks);
uwizeyimana 3:6076b262dc5e 275
uwizeyimana 3:6076b262dc5e 276 // Disable adaptive data rating
uwizeyimana 3:6076b262dc5e 277 if (lorawan.disable_adaptive_datarate() != LORAWAN_STATUS_OK) {
uwizeyimana 3:6076b262dc5e 278 printf("disable_adaptive_datarate failed!\n");
uwizeyimana 3:6076b262dc5e 279 return -1;
uwizeyimana 3:6076b262dc5e 280 }
uwizeyimana 3:6076b262dc5e 281
uwizeyimana 3:6076b262dc5e 282 lorawan.set_datarate(5); // SF7BW125
uwizeyimana 3:6076b262dc5e 283
uwizeyimana 3:6076b262dc5e 284 lorawan_connect_t connect_params;
uwizeyimana 3:6076b262dc5e 285 connect_params.connect_type = LORAWAN_CONNECTION_OTAA;
uwizeyimana 3:6076b262dc5e 286 connect_params.connection_u.otaa.dev_eui = DEV_EUI;
uwizeyimana 3:6076b262dc5e 287 connect_params.connection_u.otaa.app_eui = APP_EUI;
uwizeyimana 3:6076b262dc5e 288 connect_params.connection_u.otaa.app_key = APP_KEY;
uwizeyimana 3:6076b262dc5e 289 connect_params.connection_u.otaa.nb_trials = 3;
uwizeyimana 3:6076b262dc5e 290
uwizeyimana 3:6076b262dc5e 291 lorawan_status_t retcode = lorawan.connect(connect_params);
uwizeyimana 3:6076b262dc5e 292
uwizeyimana 3:6076b262dc5e 293 if (retcode == LORAWAN_STATUS_OK ||
uwizeyimana 3:6076b262dc5e 294 retcode == LORAWAN_STATUS_CONNECT_IN_PROGRESS) {
uwizeyimana 3:6076b262dc5e 295 } else {
uwizeyimana 3:6076b262dc5e 296 printf("Connection error, code = %d\n", retcode);
uwizeyimana 3:6076b262dc5e 297 return -1;
uwizeyimana 3:6076b262dc5e 298 }
uwizeyimana 3:6076b262dc5e 299
uwizeyimana 3:6076b262dc5e 300 printf("Connection - In Progress ...\r\n");
uwizeyimana 3:6076b262dc5e 301
uwizeyimana 3:6076b262dc5e 302 // make your event queue dispatching events forever
uwizeyimana 3:6076b262dc5e 303 ev_queue.dispatch_forever();
uwizeyimana 3:6076b262dc5e 304
uwizeyimana 3:6076b262dc5e 305 return 0;
uwizeyimana 3:6076b262dc5e 306 }
uwizeyimana 3:6076b262dc5e 307
uwizeyimana 3:6076b262dc5e 308 // This is called from RX_DONE, so whenever a message came in
uwizeyimana 3:6076b262dc5e 309 static void receive_message()
uwizeyimana 3:6076b262dc5e 310 {
uwizeyimana 3:6076b262dc5e 311 uint8_t rx_buffer[50] = { 0 };
uwizeyimana 3:6076b262dc5e 312 int16_t retcode;
uwizeyimana 3:6076b262dc5e 313 retcode = lorawan.receive(MBED_CONF_LORA_APP_PORT, rx_buffer,
uwizeyimana 3:6076b262dc5e 314 sizeof(rx_buffer),
uwizeyimana 3:6076b262dc5e 315 MSG_CONFIRMED_FLAG|MSG_UNCONFIRMED_FLAG);
uwizeyimana 3:6076b262dc5e 316
uwizeyimana 3:6076b262dc5e 317 if (retcode < 0) {
uwizeyimana 3:6076b262dc5e 318 printf("receive() - Error code %d\n", retcode);
uwizeyimana 3:6076b262dc5e 319 return;
uwizeyimana 3:6076b262dc5e 320 }
uwizeyimana 3:6076b262dc5e 321
uwizeyimana 3:6076b262dc5e 322 printf("Data received on port %d (length %d): ", MBED_CONF_LORA_APP_PORT, retcode);
uwizeyimana 3:6076b262dc5e 323
uwizeyimana 3:6076b262dc5e 324 for (uint8_t i = 0; i < retcode; i++) {
uwizeyimana 3:6076b262dc5e 325 printf("%02x ", rx_buffer[i]);
uwizeyimana 3:6076b262dc5e 326 }
uwizeyimana 3:6076b262dc5e 327 printf("\n");
uwizeyimana 3:6076b262dc5e 328 }
uwizeyimana 3:6076b262dc5e 329
uwizeyimana 3:6076b262dc5e 330 // Event handler
uwizeyimana 3:6076b262dc5e 331 static void lora_event_handler(lorawan_event_t event) {
uwizeyimana 3:6076b262dc5e 332 switch (event) {
uwizeyimana 3:6076b262dc5e 333 case CONNECTED:
uwizeyimana 3:6076b262dc5e 334 printf("Connection - Successful\n");
uwizeyimana 3:6076b262dc5e 335 welcomeMsg();
uwizeyimana 3:6076b262dc5e 336
uwizeyimana 3:6076b262dc5e 337 break;
uwizeyimana 3:6076b262dc5e 338 case DISCONNECTED:
uwizeyimana 3:6076b262dc5e 339 ev_queue.break_dispatch();
uwizeyimana 3:6076b262dc5e 340 printf("Disconnected Successfully\n");
uwizeyimana 3:6076b262dc5e 341 break;
uwizeyimana 3:6076b262dc5e 342 case TX_DONE:
uwizeyimana 3:6076b262dc5e 343 printf("Message Sent to Network Server\n");
uwizeyimana 3:6076b262dc5e 344 break;
uwizeyimana 3:6076b262dc5e 345 case TX_TIMEOUT:
uwizeyimana 3:6076b262dc5e 346 case TX_ERROR:
uwizeyimana 3:6076b262dc5e 347 case TX_CRYPTO_ERROR:
uwizeyimana 3:6076b262dc5e 348 case TX_SCHEDULING_ERROR:
uwizeyimana 3:6076b262dc5e 349 printf("Transmission Error - EventCode = %d\n", event);
uwizeyimana 3:6076b262dc5e 350 break;
uwizeyimana 3:6076b262dc5e 351 case RX_DONE:
uwizeyimana 3:6076b262dc5e 352 printf("Received message from Network Server\n");
uwizeyimana 3:6076b262dc5e 353 receive_message();
uwizeyimana 3:6076b262dc5e 354 break;
uwizeyimana 3:6076b262dc5e 355 case RX_TIMEOUT:
uwizeyimana 3:6076b262dc5e 356 case RX_ERROR:
uwizeyimana 3:6076b262dc5e 357 printf("Error in reception - Code = %d\n", event);
uwizeyimana 3:6076b262dc5e 358 break;
uwizeyimana 3:6076b262dc5e 359 case JOIN_FAILURE:
uwizeyimana 3:6076b262dc5e 360 printf("OTAA Failed - Check Keys\n");
uwizeyimana 3:6076b262dc5e 361 break;
uwizeyimana 3:6076b262dc5e 362 default:
uwizeyimana 3:6076b262dc5e 363 MBED_ASSERT("Unknown Event");
uwizeyimana 3:6076b262dc5e 364 }
uwizeyimana 3:6076b262dc5e 365 }