Forest fire prediction using sensors and LoRa communications

Dependencies:   X_NUCLEO_IKS01A2

Committer:
spadala
Date:
Mon Jun 03 10:26:44 2019 +0000
Revision:
51:925c07d0d7cf
Parent:
50:6e615eea1e6f
final

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:7037ed05f54f 1 /**
mbed_official 0:7037ed05f54f 2 * Copyright (c) 2017, Arm Limited and affiliates.
mbed_official 0:7037ed05f54f 3 * SPDX-License-Identifier: Apache-2.0
mbed_official 0:7037ed05f54f 4 *
mbed_official 0:7037ed05f54f 5 * Licensed under the Apache License, Version 2.0 (the "License");
mbed_official 0:7037ed05f54f 6 * you may not use this file except in compliance with the License.
mbed_official 0:7037ed05f54f 7 * You may obtain a copy of the License at
mbed_official 0:7037ed05f54f 8 *
mbed_official 0:7037ed05f54f 9 * http://www.apache.org/licenses/LICENSE-2.0
mbed_official 0:7037ed05f54f 10 *
mbed_official 0:7037ed05f54f 11 * Unless required by applicable law or agreed to in writing, software
mbed_official 0:7037ed05f54f 12 * distributed under the License is distributed on an "AS IS" BASIS,
mbed_official 0:7037ed05f54f 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
mbed_official 0:7037ed05f54f 14 * See the License for the specific language governing permissions and
mbed_official 0:7037ed05f54f 15 * limitations under the License.
mbed_official 0:7037ed05f54f 16 */
mbed_official 0:7037ed05f54f 17 #include <stdio.h>
mbed_official 3:8c7198d1a2a1 18
mbed_official 0:7037ed05f54f 19 #include "lorawan/LoRaWANInterface.h"
mbed_official 0:7037ed05f54f 20 #include "lorawan/system/lorawan_data_structures.h"
mbed_official 0:7037ed05f54f 21 #include "events/EventQueue.h"
mbed_official 0:7037ed05f54f 22
spadala 51:925c07d0d7cf 23 // Sensor headers
spadala 51:925c07d0d7cf 24 #include "mbed.h"
spadala 51:925c07d0d7cf 25 #include "XNucleoIKS01A2.h"
spadala 51:925c07d0d7cf 26
mbed_official 0:7037ed05f54f 27 // Application helpers
mbed_official 0:7037ed05f54f 28 #include "trace_helper.h"
mbed_official 0:7037ed05f54f 29 #include "lora_radio_helper.h"
mbed_official 0:7037ed05f54f 30
mbed_official 0:7037ed05f54f 31 using namespace events;
mbed_official 0:7037ed05f54f 32
spadala 51:925c07d0d7cf 33 //#define WITH_SENSORS
spadala 51:925c07d0d7cf 34
spadala 51:925c07d0d7cf 35 #ifdef WITH_SENSORS
spadala 51:925c07d0d7cf 36 // Instantiate the expansion board
spadala 51:925c07d0d7cf 37 static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(D14, D15, D4, D5);
spadala 51:925c07d0d7cf 38
spadala 51:925c07d0d7cf 39 // Retrieve the composing elements of the expansion board
spadala 51:925c07d0d7cf 40 static HTS221Sensor *hum_temp = mems_expansion_board->ht_sensor;
spadala 51:925c07d0d7cf 41 static LPS22HBSensor *press_temp = mems_expansion_board->pt_sensor;
spadala 51:925c07d0d7cf 42 #endif
spadala 51:925c07d0d7cf 43
mbed_official 12:5015dfead3f2 44 // Max payload size can be LORAMAC_PHY_MAXPAYLOAD.
mbed_official 12:5015dfead3f2 45 // This example only communicates with much shorter messages (<30 bytes).
mbed_official 12:5015dfead3f2 46 // If longer messages are used, these buffers must be changed accordingly.
spadala 51:925c07d0d7cf 47 uint8_t tx_buffer[100];
spadala 51:925c07d0d7cf 48 uint8_t rx_buffer[100];
spadala 51:925c07d0d7cf 49
spadala 51:925c07d0d7cf 50 // Buffers needed to read values from the sensors
spadala 51:925c07d0d7cf 51 float value_temp, value_hum;
spadala 51:925c07d0d7cf 52 #define SENSOR_BUFFER_SIZE 32
spadala 51:925c07d0d7cf 53 char buffer_temp[SENSOR_BUFFER_SIZE], buffer_hum[SENSOR_BUFFER_SIZE];
mbed_official 0:7037ed05f54f 54
mbed_official 0:7037ed05f54f 55 /*
mbed_official 0:7037ed05f54f 56 * Sets up an application dependent transmission timer in ms. Used only when Duty Cycling is off for testing
mbed_official 0:7037ed05f54f 57 */
spadala 51:925c07d0d7cf 58 #define TX_TIMER 11000
mbed_official 0:7037ed05f54f 59
mbed_official 0:7037ed05f54f 60 /**
mbed_official 0:7037ed05f54f 61 * Maximum number of events for the event queue.
mbed_official 12:5015dfead3f2 62 * 10 is the safe number for the stack events, however, if application
mbed_official 0:7037ed05f54f 63 * also uses the queue for whatever purposes, this number should be increased.
mbed_official 0:7037ed05f54f 64 */
mbed_official 12:5015dfead3f2 65 #define MAX_NUMBER_OF_EVENTS 10
mbed_official 0:7037ed05f54f 66
mbed_official 0:7037ed05f54f 67 /**
mbed_official 0:7037ed05f54f 68 * Maximum number of retries for CONFIRMED messages before giving up
mbed_official 0:7037ed05f54f 69 */
mbed_official 0:7037ed05f54f 70 #define CONFIRMED_MSG_RETRY_COUNTER 3
mbed_official 0:7037ed05f54f 71
mbed_official 0:7037ed05f54f 72
mbed_official 0:7037ed05f54f 73 /**
mbed_official 0:7037ed05f54f 74 * This event queue is the global event queue for both the
mbed_official 0:7037ed05f54f 75 * application and stack. To conserve memory, the stack is designed to run
mbed_official 0:7037ed05f54f 76 * in the same thread as the application and the application is responsible for
mbed_official 0:7037ed05f54f 77 * providing an event queue to the stack that will be used for ISR deferment as
mbed_official 0:7037ed05f54f 78 * well as application information event queuing.
mbed_official 0:7037ed05f54f 79 */
mbed_official 46:a124538e2891 80 static EventQueue ev_queue(MAX_NUMBER_OF_EVENTS *EVENTS_EVENT_SIZE);
mbed_official 0:7037ed05f54f 81
mbed_official 0:7037ed05f54f 82 /**
mbed_official 0:7037ed05f54f 83 * Event handler.
mbed_official 0:7037ed05f54f 84 *
mbed_official 0:7037ed05f54f 85 * This will be passed to the LoRaWAN stack to queue events for the
mbed_official 0:7037ed05f54f 86 * application which in turn drive the application.
mbed_official 0:7037ed05f54f 87 */
mbed_official 0:7037ed05f54f 88 static void lora_event_handler(lorawan_event_t event);
mbed_official 0:7037ed05f54f 89
mbed_official 0:7037ed05f54f 90 /**
mbed_official 46:a124538e2891 91 * Constructing Mbed LoRaWANInterface and passing it the radio object from lora_radio_helper.
mbed_official 0:7037ed05f54f 92 */
mbed_official 2:dc95ac6d6d4e 93 static LoRaWANInterface lorawan(radio);
mbed_official 0:7037ed05f54f 94
mbed_official 0:7037ed05f54f 95 /**
mbed_official 0:7037ed05f54f 96 * Application specific callbacks
mbed_official 0:7037ed05f54f 97 */
mbed_official 0:7037ed05f54f 98 static lorawan_app_callbacks_t callbacks;
mbed_official 0:7037ed05f54f 99
spadala 51:925c07d0d7cf 100
spadala 51:925c07d0d7cf 101 static char *print_double(char* str, double v);
spadala 51:925c07d0d7cf 102
mbed_official 0:7037ed05f54f 103 /**
mbed_official 0:7037ed05f54f 104 * Entry point for application
mbed_official 0:7037ed05f54f 105 */
mbed_official 46:a124538e2891 106 int main(void)
mbed_official 0:7037ed05f54f 107 {
spadala 51:925c07d0d7cf 108 printf("\r\n Hello, starting...");
spadala 51:925c07d0d7cf 109
spadala 51:925c07d0d7cf 110 #ifdef WITH_SENSORS
spadala 51:925c07d0d7cf 111 // setup sensor stack
spadala 51:925c07d0d7cf 112 hum_temp->enable();
spadala 51:925c07d0d7cf 113 press_temp->enable();
spadala 51:925c07d0d7cf 114
spadala 51:925c07d0d7cf 115 // testing sensors
spadala 51:925c07d0d7cf 116 hum_temp->get_temperature(&value_temp);
spadala 51:925c07d0d7cf 117 hum_temp->get_humidity(&value_hum);
spadala 51:925c07d0d7cf 118 printf("\r\n Sensors test:\r\n HTS221: [temp] %7s C, [hum] %s%%\r\n", print_double(buffer_temp, value_temp), print_double(buffer_hum, value_hum));
spadala 51:925c07d0d7cf 119 #endif
spadala 51:925c07d0d7cf 120
mbed_official 0:7037ed05f54f 121 // setup tracing
mbed_official 0:7037ed05f54f 122 setup_trace();
mbed_official 0:7037ed05f54f 123
mbed_official 0:7037ed05f54f 124 // stores the status of a call to LoRaWAN protocol
mbed_official 0:7037ed05f54f 125 lorawan_status_t retcode;
mbed_official 0:7037ed05f54f 126
mbed_official 0:7037ed05f54f 127 // Initialize LoRaWAN stack
mbed_official 2:dc95ac6d6d4e 128 if (lorawan.initialize(&ev_queue) != LORAWAN_STATUS_OK) {
mbed_official 0:7037ed05f54f 129 printf("\r\n LoRa initialization failed! \r\n");
mbed_official 0:7037ed05f54f 130 return -1;
mbed_official 0:7037ed05f54f 131 }
mbed_official 0:7037ed05f54f 132
mbed_official 0:7037ed05f54f 133 printf("\r\n Mbed LoRaWANStack initialized \r\n");
mbed_official 0:7037ed05f54f 134
mbed_official 0:7037ed05f54f 135 // prepare application callbacks
mbed_official 0:7037ed05f54f 136 callbacks.events = mbed::callback(lora_event_handler);
mbed_official 2:dc95ac6d6d4e 137 lorawan.add_app_callbacks(&callbacks);
mbed_official 0:7037ed05f54f 138
mbed_official 0:7037ed05f54f 139 // Set number of retries in case of CONFIRMED messages
mbed_official 2:dc95ac6d6d4e 140 if (lorawan.set_confirmed_msg_retries(CONFIRMED_MSG_RETRY_COUNTER)
mbed_official 46:a124538e2891 141 != LORAWAN_STATUS_OK) {
mbed_official 0:7037ed05f54f 142 printf("\r\n set_confirmed_msg_retries failed! \r\n\r\n");
mbed_official 0:7037ed05f54f 143 return -1;
mbed_official 0:7037ed05f54f 144 }
mbed_official 0:7037ed05f54f 145
mbed_official 0:7037ed05f54f 146 printf("\r\n CONFIRMED message retries : %d \r\n",
mbed_official 0:7037ed05f54f 147 CONFIRMED_MSG_RETRY_COUNTER);
mbed_official 0:7037ed05f54f 148
mbed_official 0:7037ed05f54f 149 // Enable adaptive data rate
mbed_official 2:dc95ac6d6d4e 150 if (lorawan.enable_adaptive_datarate() != LORAWAN_STATUS_OK) {
mbed_official 0:7037ed05f54f 151 printf("\r\n enable_adaptive_datarate failed! \r\n");
mbed_official 0:7037ed05f54f 152 return -1;
mbed_official 0:7037ed05f54f 153 }
mbed_official 0:7037ed05f54f 154
mbed_official 0:7037ed05f54f 155 printf("\r\n Adaptive data rate (ADR) - Enabled \r\n");
mbed_official 0:7037ed05f54f 156
mbed_official 2:dc95ac6d6d4e 157 retcode = lorawan.connect();
mbed_official 0:7037ed05f54f 158
mbed_official 0:7037ed05f54f 159 if (retcode == LORAWAN_STATUS_OK ||
mbed_official 46:a124538e2891 160 retcode == LORAWAN_STATUS_CONNECT_IN_PROGRESS) {
mbed_official 0:7037ed05f54f 161 } else {
mbed_official 0:7037ed05f54f 162 printf("\r\n Connection error, code = %d \r\n", retcode);
mbed_official 0:7037ed05f54f 163 return -1;
mbed_official 0:7037ed05f54f 164 }
mbed_official 0:7037ed05f54f 165
mbed_official 0:7037ed05f54f 166 printf("\r\n Connection - In Progress ...\r\n");
mbed_official 0:7037ed05f54f 167
mbed_official 0:7037ed05f54f 168 // make your event queue dispatching events forever
mbed_official 0:7037ed05f54f 169 ev_queue.dispatch_forever();
mbed_official 3:8c7198d1a2a1 170
mbed_official 3:8c7198d1a2a1 171 return 0;
mbed_official 0:7037ed05f54f 172 }
mbed_official 0:7037ed05f54f 173
spadala 51:925c07d0d7cf 174 #ifndef WITH_SENSORS
spadala 51:925c07d0d7cf 175
spadala 51:925c07d0d7cf 176 /*
mbed_official 0:7037ed05f54f 177 * Sends a message to the Network Server
mbed_official 0:7037ed05f54f 178 */
mbed_official 0:7037ed05f54f 179 static void send_message()
mbed_official 0:7037ed05f54f 180 {
mbed_official 0:7037ed05f54f 181 uint16_t packet_len;
mbed_official 0:7037ed05f54f 182 int16_t retcode;
spadala 51:925c07d0d7cf 183 printf("\n\rSending message");
mbed_official 0:7037ed05f54f 184
spadala 51:925c07d0d7cf 185 packet_len = sprintf((char *) tx_buffer, "This is a test. LoRa Works! <3");
mbed_official 0:7037ed05f54f 186
mbed_official 2:dc95ac6d6d4e 187 retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, tx_buffer, packet_len,
mbed_official 47:b6d132f1079f 188 MSG_UNCONFIRMED_FLAG);
mbed_official 0:7037ed05f54f 189
mbed_official 0:7037ed05f54f 190 if (retcode < 0) {
spadala 51:925c07d0d7cf 191 printf("retcode < 0 in send\r\n");
spadala 51:925c07d0d7cf 192
mbed_official 0:7037ed05f54f 193 retcode == LORAWAN_STATUS_WOULD_BLOCK ? printf("send - WOULD BLOCK\r\n")
mbed_official 46:a124538e2891 194 : printf("\r\n send() - Error code %d \r\n", retcode);
mbed_official 26:f07f5febf97f 195
mbed_official 26:f07f5febf97f 196 if (retcode == LORAWAN_STATUS_WOULD_BLOCK) {
mbed_official 26:f07f5febf97f 197 //retry in 3 seconds
spadala 51:925c07d0d7cf 198 printf("LORAWAN_STATUS_WOULD_BLOCK verified, retrying");
mbed_official 26:f07f5febf97f 199 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 26:f07f5febf97f 200 ev_queue.call_in(3000, send_message);
mbed_official 26:f07f5febf97f 201 }
mbed_official 26:f07f5febf97f 202 }
mbed_official 0:7037ed05f54f 203 return;
mbed_official 0:7037ed05f54f 204 }
mbed_official 0:7037ed05f54f 205
mbed_official 0:7037ed05f54f 206 printf("\r\n %d bytes scheduled for transmission \r\n", retcode);
mbed_official 12:5015dfead3f2 207 memset(tx_buffer, 0, sizeof(tx_buffer));
mbed_official 0:7037ed05f54f 208 }
mbed_official 0:7037ed05f54f 209
spadala 51:925c07d0d7cf 210 #else
spadala 51:925c07d0d7cf 211
spadala 51:925c07d0d7cf 212
spadala 51:925c07d0d7cf 213 static void send_message()
spadala 51:925c07d0d7cf 214 {
spadala 51:925c07d0d7cf 215 printf("\n\rSending message");
spadala 51:925c07d0d7cf 216 uint16_t packet_len;
spadala 51:925c07d0d7cf 217 int16_t retcode;
spadala 51:925c07d0d7cf 218
spadala 51:925c07d0d7cf 219 // reading from sensors
spadala 51:925c07d0d7cf 220 memset(buffer_temp, 0, sizeof(buffer_temp));
spadala 51:925c07d0d7cf 221 memset(buffer_hum, 0, sizeof(buffer_hum));
spadala 51:925c07d0d7cf 222 hum_temp->get_temperature(&value_temp);
spadala 51:925c07d0d7cf 223 hum_temp->get_humidity(&value_hum);
spadala 51:925c07d0d7cf 224 printf("\r\nSensors reading: [temp] %7s C, [hum] %s%%\r\n",
spadala 51:925c07d0d7cf 225 print_double(buffer_temp, value_temp), print_double(buffer_hum, value_hum));
spadala 51:925c07d0d7cf 226
spadala 51:925c07d0d7cf 227 // format data
spadala 51:925c07d0d7cf 228 uint16_t temp_len = sprintf((char *) tx_buffer, buffer_temp);
spadala 51:925c07d0d7cf 229 tx_buffer[temp_len] = ':';
spadala 51:925c07d0d7cf 230 uint16_t hum_len = sprintf((char *) &tx_buffer[temp_len+1], buffer_hum);
spadala 51:925c07d0d7cf 231
spadala 51:925c07d0d7cf 232 // set final payload and send
spadala 51:925c07d0d7cf 233 packet_len = temp_len + hum_len + 1;
spadala 51:925c07d0d7cf 234
spadala 51:925c07d0d7cf 235 printf("\r\n Sending to server %s", tx_buffer);
spadala 51:925c07d0d7cf 236
spadala 51:925c07d0d7cf 237 retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, tx_buffer, packet_len,
spadala 51:925c07d0d7cf 238 MSG_UNCONFIRMED_FLAG);
spadala 51:925c07d0d7cf 239
spadala 51:925c07d0d7cf 240
spadala 51:925c07d0d7cf 241
spadala 51:925c07d0d7cf 242 if (retcode < 0) {
spadala 51:925c07d0d7cf 243 printf("retcode < 0 in send\r\n");
spadala 51:925c07d0d7cf 244
spadala 51:925c07d0d7cf 245 retcode == LORAWAN_STATUS_WOULD_BLOCK ? printf("send - WOULD BLOCK\r\n")
spadala 51:925c07d0d7cf 246 : printf("\r\n send() - Error code %d \r\n", retcode);
spadala 51:925c07d0d7cf 247
spadala 51:925c07d0d7cf 248 if (retcode == LORAWAN_STATUS_WOULD_BLOCK) {
spadala 51:925c07d0d7cf 249 //retry in 3 seconds
spadala 51:925c07d0d7cf 250 printf("LORAWAN_STATUS_WOULD_BLOCK verified, retrying");
spadala 51:925c07d0d7cf 251 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
spadala 51:925c07d0d7cf 252 ev_queue.call_in(3000, send_message);
spadala 51:925c07d0d7cf 253 }
spadala 51:925c07d0d7cf 254 }
spadala 51:925c07d0d7cf 255 return;
spadala 51:925c07d0d7cf 256 }
spadala 51:925c07d0d7cf 257
spadala 51:925c07d0d7cf 258 printf("\r\n %d bytes scheduled for transmission \r\n", retcode);
spadala 51:925c07d0d7cf 259 memset(tx_buffer, 0, sizeof(tx_buffer));
spadala 51:925c07d0d7cf 260 }
spadala 51:925c07d0d7cf 261
spadala 51:925c07d0d7cf 262 #endif
spadala 51:925c07d0d7cf 263
spadala 51:925c07d0d7cf 264 /* Helper function for printing floats & doubles */
spadala 51:925c07d0d7cf 265 static char *print_double(char* str, double v)
spadala 51:925c07d0d7cf 266 {
spadala 51:925c07d0d7cf 267 int decimalDigits=2;
spadala 51:925c07d0d7cf 268 int i = 1;
spadala 51:925c07d0d7cf 269 int intPart, fractPart;
spadala 51:925c07d0d7cf 270 int len;
spadala 51:925c07d0d7cf 271 char *ptr;
spadala 51:925c07d0d7cf 272
spadala 51:925c07d0d7cf 273 /* prepare decimal digits multiplicator */
spadala 51:925c07d0d7cf 274 for (;decimalDigits!=0; i*=10, decimalDigits--);
spadala 51:925c07d0d7cf 275
spadala 51:925c07d0d7cf 276 /* calculate integer & fractinal parts */
spadala 51:925c07d0d7cf 277 intPart = (int)v;
spadala 51:925c07d0d7cf 278 fractPart = (int)((v-(double)(int)v)*i);
spadala 51:925c07d0d7cf 279
spadala 51:925c07d0d7cf 280 /* fill in integer part */
spadala 51:925c07d0d7cf 281 sprintf(str, "%i.", intPart);
spadala 51:925c07d0d7cf 282
spadala 51:925c07d0d7cf 283 /* prepare fill in of fractional part */
spadala 51:925c07d0d7cf 284 len = strlen(str);
spadala 51:925c07d0d7cf 285 ptr = &str[len];
spadala 51:925c07d0d7cf 286
spadala 51:925c07d0d7cf 287 /* fill in leading fractional zeros */
spadala 51:925c07d0d7cf 288 for (i/=10;i>1; i/=10, ptr++) {
spadala 51:925c07d0d7cf 289 if (fractPart >= i) {
spadala 51:925c07d0d7cf 290 break;
spadala 51:925c07d0d7cf 291 }
spadala 51:925c07d0d7cf 292 *ptr = '0';
spadala 51:925c07d0d7cf 293 }
spadala 51:925c07d0d7cf 294
spadala 51:925c07d0d7cf 295 /* fill in (rest of) fractional part */
spadala 51:925c07d0d7cf 296 sprintf(ptr, "%i", fractPart);
spadala 51:925c07d0d7cf 297
spadala 51:925c07d0d7cf 298 return str;
spadala 51:925c07d0d7cf 299 }
spadala 51:925c07d0d7cf 300
mbed_official 0:7037ed05f54f 301 /**
mbed_official 0:7037ed05f54f 302 * Event handler
mbed_official 0:7037ed05f54f 303 */
mbed_official 0:7037ed05f54f 304 static void lora_event_handler(lorawan_event_t event)
mbed_official 0:7037ed05f54f 305 {
mbed_official 0:7037ed05f54f 306 switch (event) {
mbed_official 0:7037ed05f54f 307 case CONNECTED:
mbed_official 0:7037ed05f54f 308 printf("\r\n Connection - Successful \r\n");
mbed_official 0:7037ed05f54f 309 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 0:7037ed05f54f 310 send_message();
mbed_official 0:7037ed05f54f 311 } else {
mbed_official 0:7037ed05f54f 312 ev_queue.call_every(TX_TIMER, send_message);
mbed_official 0:7037ed05f54f 313 }
mbed_official 0:7037ed05f54f 314
mbed_official 0:7037ed05f54f 315 break;
mbed_official 0:7037ed05f54f 316 case DISCONNECTED:
mbed_official 0:7037ed05f54f 317 ev_queue.break_dispatch();
mbed_official 0:7037ed05f54f 318 printf("\r\n Disconnected Successfully \r\n");
mbed_official 0:7037ed05f54f 319 break;
mbed_official 0:7037ed05f54f 320 case TX_DONE:
mbed_official 0:7037ed05f54f 321 printf("\r\n Message Sent to Network Server \r\n");
mbed_official 0:7037ed05f54f 322 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 0:7037ed05f54f 323 send_message();
mbed_official 0:7037ed05f54f 324 }
mbed_official 0:7037ed05f54f 325 break;
mbed_official 0:7037ed05f54f 326 case TX_TIMEOUT:
mbed_official 0:7037ed05f54f 327 case TX_ERROR:
mbed_official 0:7037ed05f54f 328 case TX_CRYPTO_ERROR:
mbed_official 0:7037ed05f54f 329 case TX_SCHEDULING_ERROR:
mbed_official 0:7037ed05f54f 330 printf("\r\n Transmission Error - EventCode = %d \r\n", event);
mbed_official 0:7037ed05f54f 331 // try again
mbed_official 0:7037ed05f54f 332 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 0:7037ed05f54f 333 send_message();
mbed_official 0:7037ed05f54f 334 }
mbed_official 0:7037ed05f54f 335 break;
mbed_official 0:7037ed05f54f 336 case RX_DONE:
mbed_official 0:7037ed05f54f 337 printf("\r\n Received message from Network Server \r\n");
mbed_official 0:7037ed05f54f 338 break;
mbed_official 0:7037ed05f54f 339 case RX_TIMEOUT:
mbed_official 0:7037ed05f54f 340 case RX_ERROR:
mbed_official 0:7037ed05f54f 341 printf("\r\n Error in reception - Code = %d \r\n", event);
mbed_official 0:7037ed05f54f 342 break;
mbed_official 0:7037ed05f54f 343 case JOIN_FAILURE:
mbed_official 0:7037ed05f54f 344 printf("\r\n OTAA Failed - Check Keys \r\n");
mbed_official 0:7037ed05f54f 345 break;
mbed_official 26:f07f5febf97f 346 case UPLINK_REQUIRED:
mbed_official 26:f07f5febf97f 347 printf("\r\n Uplink required by NS \r\n");
mbed_official 26:f07f5febf97f 348 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 26:f07f5febf97f 349 send_message();
mbed_official 26:f07f5febf97f 350 }
mbed_official 26:f07f5febf97f 351 break;
mbed_official 0:7037ed05f54f 352 default:
mbed_official 0:7037ed05f54f 353 MBED_ASSERT("Unknown Event");
mbed_official 0:7037ed05f54f 354 }
mbed_official 0:7037ed05f54f 355 }
mbed_official 0:7037ed05f54f 356
mbed_official 0:7037ed05f54f 357 // EOF