
First program for SmartCampus LoRaWan
main.cpp@51:885c5ed083d1, 2020-02-05 (annotated)
- Committer:
- bastienvincke
- Date:
- Wed Feb 05 13:11:05 2020 +0000
- Revision:
- 51:885c5ed083d1
- Parent:
- 47:b6d132f1079f
- Child:
- 52:bfaf25ee5cd5
bv
Who changed what in which revision?
User | Revision | Line number | New 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 | 51:885c5ed083d1 | 67 | //retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, (uint8_t*)tosend, sizeof(tosend), |
bastienvincke | 51:885c5ed083d1 | 68 | // MSG_CONFIRMED_FLAG); |
bastienvincke | 51:885c5ed083d1 | 69 | |
bastienvincke | 51:885c5ed083d1 | 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 | 51:885c5ed083d1 | 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 | } |