First program for SmartCampus LoRaWan

Committer:
bastienvincke
Date:
Wed Feb 05 13:17:21 2020 +0000
Revision:
52:bfaf25ee5cd5
Parent:
51:885c5ed083d1
bv

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:7037ed05f54f 1 #include <stdio.h>
mbed_official 3:8c7198d1a2a1 2
mbed_official 0:7037ed05f54f 3 #include "lorawan/LoRaWANInterface.h"
mbed_official 0:7037ed05f54f 4 #include "lorawan/system/lorawan_data_structures.h"
mbed_official 0:7037ed05f54f 5 #include "events/EventQueue.h"
mbed_official 0:7037ed05f54f 6
mbed_official 0:7037ed05f54f 7 #include "trace_helper.h"
mbed_official 0:7037ed05f54f 8 #include "lora_radio_helper.h"
bastienvincke 51:885c5ed083d1 9 #include "SmartFormat.h"
mbed_official 0:7037ed05f54f 10
mbed_official 0:7037ed05f54f 11 using namespace events;
mbed_official 0:7037ed05f54f 12
bastienvincke 51:885c5ed083d1 13 #define TX_TIMER 10000 // on envoie un message toutes les 10 secondes
mbed_official 12:5015dfead3f2 14 #define MAX_NUMBER_OF_EVENTS 10
mbed_official 0:7037ed05f54f 15 #define CONFIRMED_MSG_RETRY_COUNTER 3
mbed_official 0:7037ed05f54f 16
mbed_official 46:a124538e2891 17 static EventQueue ev_queue(MAX_NUMBER_OF_EVENTS *EVENTS_EVENT_SIZE);
mbed_official 0:7037ed05f54f 18 static void lora_event_handler(lorawan_event_t event);
mbed_official 2:dc95ac6d6d4e 19 static LoRaWANInterface lorawan(radio);
mbed_official 0:7037ed05f54f 20 static lorawan_app_callbacks_t callbacks;
mbed_official 0:7037ed05f54f 21
mbed_official 46:a124538e2891 22 int main(void)
mbed_official 0:7037ed05f54f 23 {
bastienvincke 51:885c5ed083d1 24 lorawan_status_t retcode;
mbed_official 0:7037ed05f54f 25 setup_trace();
mbed_official 0:7037ed05f54f 26
bastienvincke 51:885c5ed083d1 27 if (lorawan.initialize(&ev_queue) != LORAWAN_STATUS_OK) { // Initialisation stack lorawan
mbed_official 0:7037ed05f54f 28 printf("\r\n LoRa initialization failed! \r\n");
mbed_official 0:7037ed05f54f 29 return -1;
mbed_official 0:7037ed05f54f 30 }
mbed_official 0:7037ed05f54f 31
bastienvincke 51:885c5ed083d1 32 callbacks.events = mbed::callback(lora_event_handler); // initialisation callback
mbed_official 2:dc95ac6d6d4e 33 lorawan.add_app_callbacks(&callbacks);
mbed_official 0:7037ed05f54f 34
bastienvincke 51:885c5ed083d1 35 if (lorawan.set_confirmed_msg_retries(CONFIRMED_MSG_RETRY_COUNTER) // Modification du nombre de renvoie
mbed_official 46:a124538e2891 36 != LORAWAN_STATUS_OK) {
mbed_official 0:7037ed05f54f 37 printf("\r\n set_confirmed_msg_retries failed! \r\n\r\n");
mbed_official 0:7037ed05f54f 38 return -1;
mbed_official 0:7037ed05f54f 39 }
mbed_official 0:7037ed05f54f 40
bastienvincke 51:885c5ed083d1 41 if (lorawan.enable_adaptive_datarate() != LORAWAN_STATUS_OK) { // adaptative datarate
mbed_official 0:7037ed05f54f 42 printf("\r\n enable_adaptive_datarate failed! \r\n");
mbed_official 0:7037ed05f54f 43 return -1;
mbed_official 0:7037ed05f54f 44 }
mbed_official 0:7037ed05f54f 45
mbed_official 2:dc95ac6d6d4e 46 retcode = lorawan.connect();
mbed_official 0:7037ed05f54f 47
mbed_official 0:7037ed05f54f 48 if (retcode == LORAWAN_STATUS_OK ||
mbed_official 46:a124538e2891 49 retcode == LORAWAN_STATUS_CONNECT_IN_PROGRESS) {
mbed_official 0:7037ed05f54f 50 } else {
mbed_official 0:7037ed05f54f 51 printf("\r\n Connection error, code = %d \r\n", retcode);
mbed_official 0:7037ed05f54f 52 return -1;
mbed_official 0:7037ed05f54f 53 }
mbed_official 0:7037ed05f54f 54
mbed_official 0:7037ed05f54f 55 printf("\r\n Connection - In Progress ...\r\n");
mbed_official 0:7037ed05f54f 56
bastienvincke 51:885c5ed083d1 57 ev_queue.dispatch_forever(); // gestion des événements
mbed_official 3:8c7198d1a2a1 58
mbed_official 3:8c7198d1a2a1 59 return 0;
mbed_official 0:7037ed05f54f 60 }
mbed_official 0:7037ed05f54f 61
bastienvincke 51:885c5ed083d1 62 static void send_message() // Envoie d'un message
mbed_official 0:7037ed05f54f 63 {
mbed_official 0:7037ed05f54f 64 int16_t retcode;
bastienvincke 51:885c5ed083d1 65 char tosend[50] = "Message LoRaWAN";
mbed_official 0:7037ed05f54f 66
bastienvincke 52:bfaf25ee5cd5 67 retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, (uint8_t*)tosend, sizeof(tosend),
bastienvincke 52:bfaf25ee5cd5 68 MSG_CONFIRMED_FLAG);
bastienvincke 51:885c5ed083d1 69
bastienvincke 52:bfaf25ee5cd5 70 /*SmartFormat payload(50,3);
bastienvincke 51:885c5ed083d1 71 payload.add_Digital_Input(1);
bastienvincke 51:885c5ed083d1 72 payload.add_Temperature(25.2);
bastienvincke 51:885c5ed083d1 73 payload.add_Illuminance(17.3);
bastienvincke 51:885c5ed083d1 74
bastienvincke 51:885c5ed083d1 75 retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, payload.getBuffer(), payload.getSize(),
bastienvincke 51:885c5ed083d1 76 MSG_CONFIRMED_FLAG);
bastienvincke 52:bfaf25ee5cd5 77 */
bastienvincke 51:885c5ed083d1 78 if (retcode == LORAWAN_STATUS_WOULD_BLOCK) {
bastienvincke 51:885c5ed083d1 79 printf("Cancel sending \r\n");
bastienvincke 51:885c5ed083d1 80 lorawan.cancel_sending();
bastienvincke 51:885c5ed083d1 81 NVIC_SystemReset();
mbed_official 0:7037ed05f54f 82 }
mbed_official 0:7037ed05f54f 83
bastienvincke 51:885c5ed083d1 84 printf("Retcode : %d \r\n",retcode);
mbed_official 0:7037ed05f54f 85 printf("\r\n %d bytes scheduled for transmission \r\n", retcode);
mbed_official 0:7037ed05f54f 86 }
mbed_official 0:7037ed05f54f 87
bastienvincke 51:885c5ed083d1 88 static void lora_event_handler(lorawan_event_t event) // gestion des événements
mbed_official 0:7037ed05f54f 89 {
mbed_official 0:7037ed05f54f 90 switch (event) {
mbed_official 0:7037ed05f54f 91 case CONNECTED:
mbed_official 0:7037ed05f54f 92 printf("\r\n Connection - Successful \r\n");
bastienvincke 51:885c5ed083d1 93 ev_queue.call_every(TX_TIMER, send_message);
mbed_official 0:7037ed05f54f 94 break;
mbed_official 0:7037ed05f54f 95 case DISCONNECTED:
mbed_official 0:7037ed05f54f 96 ev_queue.break_dispatch();
mbed_official 0:7037ed05f54f 97 printf("\r\n Disconnected Successfully \r\n");
mbed_official 0:7037ed05f54f 98 break;
mbed_official 0:7037ed05f54f 99 case TX_DONE:
mbed_official 0:7037ed05f54f 100 printf("\r\n Message Sent to Network Server \r\n");
mbed_official 0:7037ed05f54f 101 break;
mbed_official 0:7037ed05f54f 102 case TX_TIMEOUT:
mbed_official 0:7037ed05f54f 103 case TX_ERROR:
mbed_official 0:7037ed05f54f 104 case TX_CRYPTO_ERROR:
mbed_official 0:7037ed05f54f 105 case TX_SCHEDULING_ERROR:
mbed_official 0:7037ed05f54f 106 printf("\r\n Transmission Error - EventCode = %d \r\n", event);
mbed_official 0:7037ed05f54f 107 break;
mbed_official 0:7037ed05f54f 108 case RX_DONE:
mbed_official 0:7037ed05f54f 109 printf("\r\n Received message from Network Server \r\n");
mbed_official 0:7037ed05f54f 110 break;
mbed_official 0:7037ed05f54f 111 case RX_TIMEOUT:
mbed_official 0:7037ed05f54f 112 case RX_ERROR:
mbed_official 0:7037ed05f54f 113 printf("\r\n Error in reception - Code = %d \r\n", event);
mbed_official 0:7037ed05f54f 114 break;
mbed_official 0:7037ed05f54f 115 case JOIN_FAILURE:
mbed_official 0:7037ed05f54f 116 printf("\r\n OTAA Failed - Check Keys \r\n");
bastienvincke 51:885c5ed083d1 117 NVIC_SystemReset();
mbed_official 0:7037ed05f54f 118 break;
mbed_official 26:f07f5febf97f 119 case UPLINK_REQUIRED:
mbed_official 26:f07f5febf97f 120 printf("\r\n Uplink required by NS \r\n");
mbed_official 26:f07f5febf97f 121 break;
mbed_official 0:7037ed05f54f 122 default:
mbed_official 0:7037ed05f54f 123 MBED_ASSERT("Unknown Event");
mbed_official 0:7037ed05f54f 124 }
mbed_official 0:7037ed05f54f 125 }