uwizeyimana abdulkarim / Mbed 2 deprecated mobileproject

Dependencies:   mbed

Committer:
uwizeyimana
Date:
Sun Jul 11 15:54:28 2021 +0000
Revision:
5:97e965dd4bff
Parent:
4:51ec2290a0fc
Child:
6:dee22a227ee4
UPDATE

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