uwizeyimana abdulkarim / Mbed 2 deprecated mobileproject

Dependencies:   mbed

Committer:
uwizeyimana
Date:
Mon Jul 12 15:17:31 2021 +0000
Revision:
10:bdd6069f1345
Parent:
9:9ff8ceda23ac
Child:
11:54d3db4e073d
update

Who changed what in which revision?

UserRevisionLine numberNew contents of line
uwizeyimana 0:6e0a4dac6596 1 /*mobile project
uwizeyimana 8:cf01437054e6 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 10:bdd6069f1345 38 int Situation=0;
uwizeyimana 1:2a3b76b2e4e5 39 int state=0;
uwizeyimana 2:b990d41df49e 40
uwizeyimana 0:6e0a4dac6596 41 string str1 = "Menu of the Day";
uwizeyimana 6:dee22a227ee4 42 string str2 = "Welcome to Rwanda Food\n 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 8:cf01437054e6 49 string content[]={"11.online bookings buffet\n package for 80+ guests with\t 10 percent off",
uwizeyimana 8:cf01437054e6 50 "22.Pilawo,\t biriyani,\n African food,\t western food","33.fried chicken with salad,\nfried fish with salad,\nNyama choma",
uwizeyimana 8:cf01437054e6 51 "44.African food,\t westen food,\t fast food,\t pilawo,\t biriyani",
uwizeyimana 8:cf01437054e6 52 "55.bread,\t samosa cooking and\t 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 10:bdd6069f1345 107 Situation=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 10:bdd6069f1345 116 Situation=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 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 4:51ec2290a0fc 137 //message to call when button has been let go
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 4:51ec2290a0fc 143 //message to display after welcome message on the screen
uwizeyimana 1:2a3b76b2e4e5 144 void mode1(){
uwizeyimana 3:6076b262dc5e 145 k.attach(ev_queue.event(& whiteled),1.0f);
uwizeyimana 1:2a3b76b2e4e5 146 displayState1();
uwizeyimana 3:6076b262dc5e 147 t.attach(ev_queue.event(&displayState2),3.0f);
uwizeyimana 1:2a3b76b2e4e5 148
uwizeyimana 1:2a3b76b2e4e5 149 }
uwizeyimana 4:51ec2290a0fc 150 //message to be displayed on the screen while on start up
uwizeyimana 3:6076b262dc5e 151 void welcomeMsg(){
uwizeyimana 3:6076b262dc5e 152 display(str2);
uwizeyimana 3:6076b262dc5e 153 t.attach(ev_queue.event(&mode1),5.0f);
uwizeyimana 3:6076b262dc5e 154 }
uwizeyimana 4:51ec2290a0fc 155 //message to call when switch is rised
uwizeyimana 1:2a3b76b2e4e5 156 void riseSwt(){
uwizeyimana 1:2a3b76b2e4e5 157 time(&startReading);
uwizeyimana 10:bdd6069f1345 158 display(content[Situation]);
uwizeyimana 1:2a3b76b2e4e5 159 topicTicker.detach();
uwizeyimana 0:6e0a4dac6596 160 }
uwizeyimana 4:51ec2290a0fc 161 // declaration messages to be sent on the cloud
uwizeyimana 3:6076b262dc5e 162 static uint8_t* create_message(char device[], int topic, int duration) {
uwizeyimana 3:6076b262dc5e 163 // initialize the buffer
uwizeyimana 3:6076b262dc5e 164 uint8_t tx_buffer[50] = { 0 };
uwizeyimana 3:6076b262dc5e 165 // Writing string data into a buffer
uwizeyimana 3:6076b262dc5e 166 sprintf((char*) tx_buffer, "{\"device\":\"%s\",\"topic\":%d,\"duration\":%d }", device, topic,duration);
uwizeyimana 3:6076b262dc5e 167 return tx_buffer;
uwizeyimana 3:6076b262dc5e 168 }
uwizeyimana 3:6076b262dc5e 169 // Send a message over LoRaWAN
uwizeyimana 3:6076b262dc5e 170 static void send_message(uint8_t *tx_buffer) {
uwizeyimana 3:6076b262dc5e 171
uwizeyimana 3:6076b262dc5e 172 int packet_len = strlen((char*) tx_buffer);
uwizeyimana 3:6076b262dc5e 173
uwizeyimana 3:6076b262dc5e 174 printf("Sending %d bytes: \"%s\"\n", packet_len, tx_buffer);
uwizeyimana 3:6076b262dc5e 175
uwizeyimana 3:6076b262dc5e 176
uwizeyimana 3:6076b262dc5e 177 int16_t retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, tx_buffer, packet_len, MSG_UNCONFIRMED_FLAG);
uwizeyimana 3:6076b262dc5e 178
uwizeyimana 3:6076b262dc5e 179 // 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 180 if (retcode < 0) {
uwizeyimana 3:6076b262dc5e 181 retcode == LORAWAN_STATUS_WOULD_BLOCK ? printf("send - duty cycle violation\n")
uwizeyimana 3:6076b262dc5e 182 : printf("send() - Error code %d\n", retcode);
uwizeyimana 3:6076b262dc5e 183 return;
uwizeyimana 3:6076b262dc5e 184 }
uwizeyimana 3:6076b262dc5e 185
uwizeyimana 3:6076b262dc5e 186 printf("%d bytes scheduled for transmission\n", retcode);
uwizeyimana 3:6076b262dc5e 187 }
uwizeyimana 4:51ec2290a0fc 188 //action to be processed when the button has been let go
uwizeyimana 1:2a3b76b2e4e5 189 void fallSwt(){
uwizeyimana 1:2a3b76b2e4e5 190 topicTicker.detach();
uwizeyimana 1:2a3b76b2e4e5 191 time(&stopReading);
uwizeyimana 1:2a3b76b2e4e5 192 readingDuration=stopReading-startReading;
uwizeyimana 1:2a3b76b2e4e5 193 printf("Reading time is:%d \n",readingDuration);
uwizeyimana 1:2a3b76b2e4e5 194 if(readingDuration>5){
uwizeyimana 3:6076b262dc5e 195
uwizeyimana 10:bdd6069f1345 196 printf("message sent,Item Id is:%d \n",Situation+1);
uwizeyimana 3:6076b262dc5e 197 char device[] = "mobile";
uwizeyimana 10:bdd6069f1345 198 int topic = Situation+1; // topic identifier
uwizeyimana 3:6076b262dc5e 199
uwizeyimana 3:6076b262dc5e 200 send_message(create_message(device,topic,readingDuration));
uwizeyimana 3:6076b262dc5e 201
uwizeyimana 1:2a3b76b2e4e5 202 }
uwizeyimana 1:2a3b76b2e4e5 203 displayState2();
uwizeyimana 0:6e0a4dac6596 204 }
uwizeyimana 4:51ec2290a0fc 205 //count how long the button have been pushed
uwizeyimana 1:2a3b76b2e4e5 206 void countDuration(){
uwizeyimana 1:2a3b76b2e4e5 207 time(&stopTime);
uwizeyimana 1:2a3b76b2e4e5 208 pushDuration=stopTime-startTime;
uwizeyimana 1:2a3b76b2e4e5 209 if(pushDuration>5){
uwizeyimana 1:2a3b76b2e4e5 210 display("System resetting......\n");
uwizeyimana 1:2a3b76b2e4e5 211 durationTime.detach();
uwizeyimana 1:2a3b76b2e4e5 212 topicTicker.detach();
uwizeyimana 3:6076b262dc5e 213 direction=!direction;
uwizeyimana 3:6076b262dc5e 214 resetted.attach(ev_queue.event(&welcomeMsg),10.0f);
uwizeyimana 1:2a3b76b2e4e5 215 }
uwizeyimana 2:b990d41df49e 216 else if(pushDuration>=3 && state==0 ){
uwizeyimana 2:b990d41df49e 217 state =1;
uwizeyimana 1:2a3b76b2e4e5 218 direction=!direction;
uwizeyimana 1:2a3b76b2e4e5 219 displayState2();
uwizeyimana 1:2a3b76b2e4e5 220 }
uwizeyimana 1:2a3b76b2e4e5 221 }
uwizeyimana 4:51ec2290a0fc 222 //action to be done when button is pushed
uwizeyimana 1:2a3b76b2e4e5 223 void riseBtn(){
uwizeyimana 1:2a3b76b2e4e5 224 time(&startTime);
uwizeyimana 3:6076b262dc5e 225 durationTime.attach(ev_queue.event(&countDuration),0.5f);
uwizeyimana 2:b990d41df49e 226
uwizeyimana 1:2a3b76b2e4e5 227 }
uwizeyimana 3:6076b262dc5e 228
uwizeyimana 0:6e0a4dac6596 229 int main() {
uwizeyimana 3:6076b262dc5e 230
uwizeyimana 3:6076b262dc5e 231
uwizeyimana 3:6076b262dc5e 232 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 233 printf("Set your LoRaWAN credentials first!\n");
uwizeyimana 3:6076b262dc5e 234 return -1;
uwizeyimana 3:6076b262dc5e 235 }
uwizeyimana 3:6076b262dc5e 236 mbed_trace_init();
uwizeyimana 3:6076b262dc5e 237
uwizeyimana 3:6076b262dc5e 238 if (lorawan.initialize(&ev_queue) != LORAWAN_STATUS_OK) {
uwizeyimana 3:6076b262dc5e 239 printf("LoRa initialization failed!\n");
uwizeyimana 3:6076b262dc5e 240 return -1;
uwizeyimana 3:6076b262dc5e 241 }
uwizeyimana 3:6076b262dc5e 242
uwizeyimana 3:6076b262dc5e 243 // Fire a message when the button is pressed
uwizeyimana 3:6076b262dc5e 244 //btn.fall(ev_queue.event(&send_data_button_isr));
uwizeyimana 3:6076b262dc5e 245 btn.rise(ev_queue.event(&riseBtn));
uwizeyimana 3:6076b262dc5e 246 btn.fall(ev_queue.event(&fallBtn));
uwizeyimana 3:6076b262dc5e 247 swt.rise(ev_queue.event(&riseSwt));
uwizeyimana 3:6076b262dc5e 248 swt.fall(ev_queue.event(&fallSwt));
uwizeyimana 3:6076b262dc5e 249
uwizeyimana 3:6076b262dc5e 250 // prepare application callbacks
uwizeyimana 3:6076b262dc5e 251 callbacks.events = mbed::callback(lora_event_handler);
uwizeyimana 3:6076b262dc5e 252 lorawan.add_app_callbacks(&callbacks);
uwizeyimana 3:6076b262dc5e 253
uwizeyimana 3:6076b262dc5e 254 // Disable adaptive data rating
uwizeyimana 3:6076b262dc5e 255 if (lorawan.disable_adaptive_datarate() != LORAWAN_STATUS_OK) {
uwizeyimana 3:6076b262dc5e 256 printf("disable_adaptive_datarate failed!\n");
uwizeyimana 3:6076b262dc5e 257 return -1;
uwizeyimana 3:6076b262dc5e 258 }
uwizeyimana 3:6076b262dc5e 259
uwizeyimana 3:6076b262dc5e 260 lorawan.set_datarate(5); // SF7BW125
uwizeyimana 3:6076b262dc5e 261
uwizeyimana 3:6076b262dc5e 262 lorawan_connect_t connect_params;
uwizeyimana 3:6076b262dc5e 263 connect_params.connect_type = LORAWAN_CONNECTION_OTAA;
uwizeyimana 3:6076b262dc5e 264 connect_params.connection_u.otaa.dev_eui = DEV_EUI;
uwizeyimana 3:6076b262dc5e 265 connect_params.connection_u.otaa.app_eui = APP_EUI;
uwizeyimana 3:6076b262dc5e 266 connect_params.connection_u.otaa.app_key = APP_KEY;
uwizeyimana 3:6076b262dc5e 267 connect_params.connection_u.otaa.nb_trials = 3;
uwizeyimana 3:6076b262dc5e 268
uwizeyimana 3:6076b262dc5e 269 lorawan_status_t retcode = lorawan.connect(connect_params);
uwizeyimana 3:6076b262dc5e 270
uwizeyimana 3:6076b262dc5e 271 if (retcode == LORAWAN_STATUS_OK ||
uwizeyimana 3:6076b262dc5e 272 retcode == LORAWAN_STATUS_CONNECT_IN_PROGRESS) {
uwizeyimana 3:6076b262dc5e 273 } else {
uwizeyimana 3:6076b262dc5e 274 printf("Connection error, code = %d\n", retcode);
uwizeyimana 3:6076b262dc5e 275 return -1;
uwizeyimana 3:6076b262dc5e 276 }
uwizeyimana 3:6076b262dc5e 277
uwizeyimana 3:6076b262dc5e 278 printf("Connection - In Progress ...\r\n");
uwizeyimana 8:cf01437054e6 279 display("Connection - In Progress ...\r\nPlease wait...");
uwizeyimana 3:6076b262dc5e 280
uwizeyimana 3:6076b262dc5e 281 // make your event queue dispatching events forever
uwizeyimana 3:6076b262dc5e 282 ev_queue.dispatch_forever();
uwizeyimana 3:6076b262dc5e 283
uwizeyimana 3:6076b262dc5e 284 return 0;
uwizeyimana 3:6076b262dc5e 285 }
uwizeyimana 3:6076b262dc5e 286
uwizeyimana 3:6076b262dc5e 287 // This is called from RX_DONE, so whenever a message came in
uwizeyimana 3:6076b262dc5e 288 static void receive_message()
uwizeyimana 3:6076b262dc5e 289 {
uwizeyimana 3:6076b262dc5e 290 uint8_t rx_buffer[50] = { 0 };
uwizeyimana 3:6076b262dc5e 291 int16_t retcode;
uwizeyimana 3:6076b262dc5e 292 retcode = lorawan.receive(MBED_CONF_LORA_APP_PORT, rx_buffer,
uwizeyimana 3:6076b262dc5e 293 sizeof(rx_buffer),
uwizeyimana 3:6076b262dc5e 294 MSG_CONFIRMED_FLAG|MSG_UNCONFIRMED_FLAG);
uwizeyimana 3:6076b262dc5e 295
uwizeyimana 3:6076b262dc5e 296 if (retcode < 0) {
uwizeyimana 3:6076b262dc5e 297 printf("receive() - Error code %d\n", retcode);
uwizeyimana 3:6076b262dc5e 298 return;
uwizeyimana 3:6076b262dc5e 299 }
uwizeyimana 3:6076b262dc5e 300
uwizeyimana 3:6076b262dc5e 301 printf("Data received on port %d (length %d): ", MBED_CONF_LORA_APP_PORT, retcode);
uwizeyimana 3:6076b262dc5e 302
uwizeyimana 3:6076b262dc5e 303 for (uint8_t i = 0; i < retcode; i++) {
uwizeyimana 3:6076b262dc5e 304 printf("%02x ", rx_buffer[i]);
uwizeyimana 3:6076b262dc5e 305 }
uwizeyimana 3:6076b262dc5e 306 printf("\n");
uwizeyimana 3:6076b262dc5e 307 }
uwizeyimana 3:6076b262dc5e 308
uwizeyimana 3:6076b262dc5e 309 // Event handler
uwizeyimana 3:6076b262dc5e 310 static void lora_event_handler(lorawan_event_t event) {
uwizeyimana 3:6076b262dc5e 311 switch (event) {
uwizeyimana 3:6076b262dc5e 312 case CONNECTED:
uwizeyimana 3:6076b262dc5e 313 printf("Connection - Successful\n");
uwizeyimana 4:51ec2290a0fc 314 display("Connection - Successful\n");
uwizeyimana 6:dee22a227ee4 315 wait_ms(3000);
uwizeyimana 3:6076b262dc5e 316 welcomeMsg();
uwizeyimana 3:6076b262dc5e 317
uwizeyimana 3:6076b262dc5e 318 break;
uwizeyimana 3:6076b262dc5e 319 case DISCONNECTED:
uwizeyimana 3:6076b262dc5e 320 ev_queue.break_dispatch();
uwizeyimana 4:51ec2290a0fc 321 printf("unable to connect\n");
uwizeyimana 4:51ec2290a0fc 322 display("unable to connect\n");
uwizeyimana 3:6076b262dc5e 323 break;
uwizeyimana 3:6076b262dc5e 324 case TX_DONE:
uwizeyimana 3:6076b262dc5e 325 printf("Message Sent to Network Server\n");
uwizeyimana 3:6076b262dc5e 326 break;
uwizeyimana 3:6076b262dc5e 327 case TX_TIMEOUT:
uwizeyimana 3:6076b262dc5e 328 case TX_ERROR:
uwizeyimana 3:6076b262dc5e 329 case TX_CRYPTO_ERROR:
uwizeyimana 3:6076b262dc5e 330 case TX_SCHEDULING_ERROR:
uwizeyimana 3:6076b262dc5e 331 printf("Transmission Error - EventCode = %d\n", event);
uwizeyimana 3:6076b262dc5e 332 break;
uwizeyimana 3:6076b262dc5e 333 case RX_DONE:
uwizeyimana 3:6076b262dc5e 334 printf("Received message from Network Server\n");
uwizeyimana 3:6076b262dc5e 335 receive_message();
uwizeyimana 3:6076b262dc5e 336 break;
uwizeyimana 3:6076b262dc5e 337 case RX_TIMEOUT:
uwizeyimana 3:6076b262dc5e 338 case RX_ERROR:
uwizeyimana 3:6076b262dc5e 339 printf("Error in reception - Code = %d\n", event);
uwizeyimana 3:6076b262dc5e 340 break;
uwizeyimana 3:6076b262dc5e 341 case JOIN_FAILURE:
uwizeyimana 3:6076b262dc5e 342 printf("OTAA Failed - Check Keys\n");
uwizeyimana 3:6076b262dc5e 343 break;
uwizeyimana 3:6076b262dc5e 344 default:
uwizeyimana 3:6076b262dc5e 345 MBED_ASSERT("Unknown Event");
uwizeyimana 3:6076b262dc5e 346 }
uwizeyimana 3:6076b262dc5e 347 }