Lorawan para integracao com o Arquetipo Pulga

Dependencies:   pulga-lorawan-drv Si1133 BME280

Committer:
MatteusCarr
Date:
Mon May 03 19:49:07 2021 +0000
Revision:
64:573096d2e9cc
Parent:
62:e2116ce452eb
Lorawan - Retrabalho e possibilidade de PABOOST

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>
afzalsamira 61:169e75494337 18 #include <ctime> //samira-time
afzalsamira 61:169e75494337 19 #include <chrono>
afzalsamira 61:169e75494337 20 #include <iostream>
mbed_official 3:8c7198d1a2a1 21
mbed_official 0:7037ed05f54f 22 #include "lorawan/LoRaWANInterface.h"
mbed_official 0:7037ed05f54f 23 #include "lorawan/system/lorawan_data_structures.h"
mbed_official 0:7037ed05f54f 24 #include "events/EventQueue.h"
mbed_official 0:7037ed05f54f 25
mbed_official 0:7037ed05f54f 26 // Application helpers
pancotinho 59:a4fc1efb1569 27 //#include "DummySensor.h"
mbed_official 0:7037ed05f54f 28 #include "trace_helper.h"
mbed_official 0:7037ed05f54f 29 #include "lora_radio_helper.h"
pancotinho 59:a4fc1efb1569 30 #include "BME280.h"
mbed_official 0:7037ed05f54f 31
mbed_official 0:7037ed05f54f 32 using namespace events;
mbed_official 0:7037ed05f54f 33
mbed_official 12:5015dfead3f2 34 // Max payload size can be LORAMAC_PHY_MAXPAYLOAD.
mbed_official 12:5015dfead3f2 35 // This example only communicates with much shorter messages (<30 bytes).
mbed_official 12:5015dfead3f2 36 // If longer messages are used, these buffers must be changed accordingly.
afzalsamira 61:169e75494337 37 //uint8_t tx_buffer[1000];
mbed_official 12:5015dfead3f2 38 uint8_t rx_buffer[30];
afzalsamira 62:e2116ce452eb 39 uint8_t tx_buffer[256]; //= {0xd8, 0x60, 0x84, 0x43, 0xa1, 0x01, 0x0a, 0xa1, 0x05, 0x4c, 0x13, 0x28, 0x18, 0x7b, 0x01, 0xa1, 0x26, 0xca, 0xf7, 0x8e, 0x55, 0x51, 0x58, 0x6f, 0xa8, 0x00, 0x82, 0x64, 0xcf, 0xb0, 0x5e, 0x3d, 0x48, 0x7e, 0x30, 0x2f, 0x4c, 0xc3, 0x37, 0x6b, 0x4d, 0xdb, 0xb6, 0xa9, 0x1b, 0xc9, 0x4c, 0xcc, 0x8e, 0x92, 0x39, 0x8e, 0x4f, 0xe9, 0x3d, 0xb0, 0xa7, 0x48, 0x00, 0xfe, 0x38, 0xa7, 0xcd, 0x57, 0x7e, 0x04, 0x65, 0xb8, 0x2b, 0xf8, 0xc3, 0xbe, 0x33, 0x17, 0xf1, 0xe1, 0xfa, 0x88, 0x7d, 0x3b, 0xd4, 0xa0, 0xce, 0xed, 0x84, 0xed, 0x83, 0xdc, 0x57, 0xcf, 0xe8, 0x5b, 0x7e, 0xc0, 0x5c, 0x6b, 0xbd, 0xa1, 0xdb, 0x67, 0x5d, 0xae, 0xc4, 0x1f, 0x6d, 0x98, 0xf0, 0x97, 0xb6, 0x7a, 0x06, 0x55, 0x97, 0xe6, 0x11, 0x07, 0x52, 0x89, 0x73, 0x65, 0x28, 0x7c, 0xc8, 0x69, 0x39, 0x69, 0xde, 0x12, 0x71, 0x87, 0x43, 0xda, 0xd5, 0x11, 0xbf, 0x81, 0x83, 0x56, 0xa2, 0x01, 0x38, 0x1a, 0x04, 0x50, 0x88, 0x8a, 0x33, 0x0e, 0xc6, 0x2a, 0x43, 0xeb, 0xbf, 0x3c, 0xc9, 0x7c, 0xa6, 0x55, 0xed, 0x33, 0xa0, 0x40};
afzalsamira 62:e2116ce452eb 40
afzalsamira 62:e2116ce452eb 41 auto timenow = chrono::system_clock::to_time_t(chrono::system_clock::now());
afzalsamira 62:e2116ce452eb 42
afzalsamira 62:e2116ce452eb 43 #define wait_time 0
afzalsamira 62:e2116ce452eb 44
mbed_official 0:7037ed05f54f 45 /*
mbed_official 0:7037ed05f54f 46 * Sets up an application dependent transmission timer in ms. Used only when Duty Cycling is off for testing
mbed_official 0:7037ed05f54f 47 */
mbed_official 0:7037ed05f54f 48 #define TX_TIMER 10000
afzalsamira 62:e2116ce452eb 49 #define DR DR_0
mbed_official 0:7037ed05f54f 50
mbed_official 0:7037ed05f54f 51 /**
mbed_official 0:7037ed05f54f 52 * Maximum number of events for the event queue.
mbed_official 12:5015dfead3f2 53 * 10 is the safe number for the stack events, however, if application
mbed_official 0:7037ed05f54f 54 * also uses the queue for whatever purposes, this number should be increased.
mbed_official 0:7037ed05f54f 55 */
mbed_official 12:5015dfead3f2 56 #define MAX_NUMBER_OF_EVENTS 10
mbed_official 0:7037ed05f54f 57
mbed_official 0:7037ed05f54f 58 /**
mbed_official 0:7037ed05f54f 59 * Maximum number of retries for CONFIRMED messages before giving up
mbed_official 0:7037ed05f54f 60 */
mbed_official 0:7037ed05f54f 61 #define CONFIRMED_MSG_RETRY_COUNTER 3
mbed_official 0:7037ed05f54f 62
mbed_official 0:7037ed05f54f 63 /**
mbed_official 0:7037ed05f54f 64 * Dummy pin for dummy sensor
mbed_official 0:7037ed05f54f 65 */
pancotinho 59:a4fc1efb1569 66 //#define PC_9 0
mbed_official 0:7037ed05f54f 67
mbed_official 0:7037ed05f54f 68 /**
mbed_official 0:7037ed05f54f 69 * Dummy sensor class object
mbed_official 0:7037ed05f54f 70 */
pancotinho 59:a4fc1efb1569 71 //DS1820 ds1820(PC_9);
brunnobbco 60:c4f9e9202fb4 72 //BME280 sensor_amb(P0_13, P0_15, 0x77 << 1) ;
pancotinho 59:a4fc1efb1569 73
pancotinho 59:a4fc1efb1569 74 /**
pancotinho 59:a4fc1efb1569 75 * Sensors Variables
pancotinho 59:a4fc1efb1569 76 */
pancotinho 59:a4fc1efb1569 77 uint32_t lux = 0;
pancotinho 59:a4fc1efb1569 78 uint32_t amb = 0;
pancotinho 59:a4fc1efb1569 79 float sensor_get = 0;
mbed_official 0:7037ed05f54f 80
mbed_official 0:7037ed05f54f 81 /**
mbed_official 0:7037ed05f54f 82 * This event queue is the global event queue for both the
mbed_official 0:7037ed05f54f 83 * application and stack. To conserve memory, the stack is designed to run
mbed_official 0:7037ed05f54f 84 * in the same thread as the application and the application is responsible for
mbed_official 0:7037ed05f54f 85 * providing an event queue to the stack that will be used for ISR deferment as
mbed_official 0:7037ed05f54f 86 * well as application information event queuing.
mbed_official 0:7037ed05f54f 87 */
mbed_official 46:a124538e2891 88 static EventQueue ev_queue(MAX_NUMBER_OF_EVENTS *EVENTS_EVENT_SIZE);
mbed_official 0:7037ed05f54f 89
mbed_official 0:7037ed05f54f 90 /**
mbed_official 0:7037ed05f54f 91 * Event handler.
mbed_official 0:7037ed05f54f 92 *
mbed_official 0:7037ed05f54f 93 * This will be passed to the LoRaWAN stack to queue events for the
mbed_official 0:7037ed05f54f 94 * application which in turn drive the application.
mbed_official 0:7037ed05f54f 95 */
mbed_official 0:7037ed05f54f 96 static void lora_event_handler(lorawan_event_t event);
mbed_official 0:7037ed05f54f 97
mbed_official 0:7037ed05f54f 98 /**
mbed_official 46:a124538e2891 99 * Constructing Mbed LoRaWANInterface and passing it the radio object from lora_radio_helper.
mbed_official 0:7037ed05f54f 100 */
mbed_official 2:dc95ac6d6d4e 101 static LoRaWANInterface lorawan(radio);
mbed_official 0:7037ed05f54f 102
mbed_official 0:7037ed05f54f 103 /**
mbed_official 0:7037ed05f54f 104 * Application specific callbacks
mbed_official 0:7037ed05f54f 105 */
mbed_official 0:7037ed05f54f 106 static lorawan_app_callbacks_t callbacks;
mbed_official 0:7037ed05f54f 107
mbed_official 0:7037ed05f54f 108 /**
mbed_official 0:7037ed05f54f 109 * Entry point for application
mbed_official 0:7037ed05f54f 110 */
pancotinho 59:a4fc1efb1569 111
brunnobbco 60:c4f9e9202fb4 112 mbed::DigitalOut _alive_led(P1_13, 0);
brunnobbco 60:c4f9e9202fb4 113 mbed::DigitalOut _actuated_led(P1_14,1);
afzalsamira 61:169e75494337 114 int msg_seq_number;
pancotinho 59:a4fc1efb1569 115
afzalsamira 62:e2116ce452eb 116
afzalsamira 62:e2116ce452eb 117 /////////////////////////////////////////////////////////////////////////
afzalsamira 62:e2116ce452eb 118 //Samira
afzalsamira 62:e2116ce452eb 119 //define the channel
afzalsamira 62:e2116ce452eb 120 /////////////////////////////////////////////////////////////////////////
afzalsamira 62:e2116ce452eb 121
afzalsamira 62:e2116ce452eb 122
afzalsamira 62:e2116ce452eb 123 static loramac_channel_t testchannel[] = {
afzalsamira 62:e2116ce452eb 124 {0, {916800000, 0, {(DR_5 << 4) | DR_0}, 1}},
afzalsamira 62:e2116ce452eb 125 {1, {917000000, 0, {(DR_5 << 4) | DR_0}, 1}},
afzalsamira 62:e2116ce452eb 126 {2, {917200000, 0, {(DR_5 << 4) | DR_0}, 1}},
afzalsamira 62:e2116ce452eb 127 {3, {917400000, 0, {(DR_5 << 4) | DR_0}, 0}},
afzalsamira 62:e2116ce452eb 128 {4, {917600000, 0, {(DR_5 << 4) | DR_0}, 0}},
afzalsamira 62:e2116ce452eb 129 {5, {917800000, 0, {(DR_5 << 4) | DR_0}, 0}},
afzalsamira 62:e2116ce452eb 130 {6, {918000000, 0, {(DR_5 << 4) | DR_0}, 0}},
afzalsamira 62:e2116ce452eb 131 {7, {918200000, 0, {(DR_5 << 4) | DR_0}, 0}}
afzalsamira 62:e2116ce452eb 132 };
afzalsamira 62:e2116ce452eb 133
afzalsamira 62:e2116ce452eb 134 /*
afzalsamira 62:e2116ce452eb 135 To set the channel - execute the following code before calling lorawan.connect()
afzalsamira 62:e2116ce452eb 136 */
afzalsamira 62:e2116ce452eb 137
afzalsamira 62:e2116ce452eb 138 void LoRa_SetChannelPlan() {
afzalsamira 62:e2116ce452eb 139 lorawan_channelplan_t channelPlan {};
afzalsamira 62:e2116ce452eb 140 loramac_channel_t channels[8];
afzalsamira 62:e2116ce452eb 141 channelPlan.channels = (loramac_channel_t*) channels;
afzalsamira 62:e2116ce452eb 142
afzalsamira 62:e2116ce452eb 143 //only activate the first three channels, up and downlink .
afzalsamira 62:e2116ce452eb 144 channels[0] = testchannel[0];
afzalsamira 62:e2116ce452eb 145 channels[1] = testchannel[1];
afzalsamira 62:e2116ce452eb 146 channels[2] = testchannel[2];
afzalsamira 62:e2116ce452eb 147
afzalsamira 62:e2116ce452eb 148 channelPlan.nb_channels = 3;
afzalsamira 62:e2116ce452eb 149
afzalsamira 62:e2116ce452eb 150 //remove previously set channel plan
afzalsamira 62:e2116ce452eb 151 if(lorawan.remove_channel_plan() == LORAWAN_STATUS_OK) {
afzalsamira 62:e2116ce452eb 152 printf("[+] Removing old channels okay\n");
afzalsamira 62:e2116ce452eb 153 } else {
afzalsamira 62:e2116ce452eb 154 printf("[-] Removing old channels failed\n");
afzalsamira 62:e2116ce452eb 155
afzalsamira 62:e2116ce452eb 156 }
afzalsamira 62:e2116ce452eb 157 if (lorawan.set_channel_plan(channelPlan ) == LORAWAN_STATUS_OK) {
afzalsamira 62:e2116ce452eb 158 printf("[+] Setting TTN channels okay\n");
afzalsamira 62:e2116ce452eb 159 } else {
afzalsamira 62:e2116ce452eb 160 printf("[-] Failed to set TTN channels! Debug return code.\n");
afzalsamira 62:e2116ce452eb 161 }
afzalsamira 62:e2116ce452eb 162 }
afzalsamira 62:e2116ce452eb 163
afzalsamira 62:e2116ce452eb 164
afzalsamira 62:e2116ce452eb 165 /*
afzalsamira 62:e2116ce452eb 166 To print the channel After the CONNECTED event in the callback in the callback handler
afzalsamira 62:e2116ce452eb 167 */
afzalsamira 62:e2116ce452eb 168 void LoRa_PrintChannels() {
afzalsamira 62:e2116ce452eb 169 /* print list of all channel frequencies */
afzalsamira 62:e2116ce452eb 170 lorawan_channelplan_t channelPlan {};
afzalsamira 62:e2116ce452eb 171 // static loramac_channel_t channelbuf[10];
afzalsamira 62:e2116ce452eb 172 // channelPlan.channels = channelbuf;
afzalsamira 62:e2116ce452eb 173 if (lorawan.get_channel_plan(channelPlan) == LORAWAN_STATUS_OK) {
afzalsamira 62:e2116ce452eb 174 for (uint8_t i = 0; i < channelPlan.nb_channels; i++) {
afzalsamira 62:e2116ce452eb 175 loramac_channel_t chan = channelPlan.channels[i];
afzalsamira 62:e2116ce452eb 176 printf("CHAN %d ID %d FREQ %lu RX1FREQ %lu Band %d DR min %d max %d\n",
afzalsamira 62:e2116ce452eb 177 (int) i, (int) chan.id, chan.ch_param.frequency,
afzalsamira 62:e2116ce452eb 178 chan.ch_param.rx1_frequency, (int) chan.ch_param.band,
afzalsamira 62:e2116ce452eb 179 (int) chan.ch_param.dr_range.fields.min,
afzalsamira 62:e2116ce452eb 180 (int) chan.ch_param.dr_range.fields.max);
afzalsamira 62:e2116ce452eb 181 }
afzalsamira 62:e2116ce452eb 182 } else {
afzalsamira 62:e2116ce452eb 183 printf("COULD NOT GET CHANNEL PLAN\n");
afzalsamira 62:e2116ce452eb 184 }
afzalsamira 62:e2116ce452eb 185 }
afzalsamira 62:e2116ce452eb 186
afzalsamira 62:e2116ce452eb 187 /////////////////////////////////////////////////////////////////////////
afzalsamira 62:e2116ce452eb 188 /////////////////////////////////////////////////////////////////////////
afzalsamira 62:e2116ce452eb 189
afzalsamira 62:e2116ce452eb 190
afzalsamira 62:e2116ce452eb 191
afzalsamira 62:e2116ce452eb 192
mbed_official 46:a124538e2891 193 int main(void)
mbed_official 0:7037ed05f54f 194 {
mbed_official 0:7037ed05f54f 195 // setup tracing
mbed_official 0:7037ed05f54f 196 setup_trace();
mbed_official 0:7037ed05f54f 197
mbed_official 0:7037ed05f54f 198 // stores the status of a call to LoRaWAN protocol
mbed_official 0:7037ed05f54f 199 lorawan_status_t retcode;
mbed_official 0:7037ed05f54f 200
mbed_official 0:7037ed05f54f 201 // Initialize LoRaWAN stack
mbed_official 2:dc95ac6d6d4e 202 if (lorawan.initialize(&ev_queue) != LORAWAN_STATUS_OK) {
mbed_official 0:7037ed05f54f 203 printf("\r\n LoRa initialization failed! \r\n");
mbed_official 0:7037ed05f54f 204 return -1;
mbed_official 0:7037ed05f54f 205 }
mbed_official 0:7037ed05f54f 206
mbed_official 0:7037ed05f54f 207 printf("\r\n Mbed LoRaWANStack initialized \r\n");
mbed_official 0:7037ed05f54f 208
mbed_official 0:7037ed05f54f 209 // prepare application callbacks
mbed_official 0:7037ed05f54f 210 callbacks.events = mbed::callback(lora_event_handler);
mbed_official 2:dc95ac6d6d4e 211 lorawan.add_app_callbacks(&callbacks);
mbed_official 0:7037ed05f54f 212
mbed_official 0:7037ed05f54f 213 // Set number of retries in case of CONFIRMED messages
mbed_official 2:dc95ac6d6d4e 214 if (lorawan.set_confirmed_msg_retries(CONFIRMED_MSG_RETRY_COUNTER)
mbed_official 46:a124538e2891 215 != LORAWAN_STATUS_OK) {
mbed_official 0:7037ed05f54f 216 printf("\r\n set_confirmed_msg_retries failed! \r\n\r\n");
mbed_official 0:7037ed05f54f 217 return -1;
mbed_official 0:7037ed05f54f 218 }
mbed_official 0:7037ed05f54f 219
mbed_official 0:7037ed05f54f 220 printf("\r\n CONFIRMED message retries : %d \r\n",
mbed_official 0:7037ed05f54f 221 CONFIRMED_MSG_RETRY_COUNTER);
mbed_official 0:7037ed05f54f 222
mbed_official 0:7037ed05f54f 223 // Enable adaptive data rate
afzalsamira 61:169e75494337 224 /* if (lorawan.enable_adaptive_datarate() != LORAWAN_STATUS_OK) {
mbed_official 0:7037ed05f54f 225 printf("\r\n enable_adaptive_datarate failed! \r\n");
mbed_official 0:7037ed05f54f 226 return -1;
mbed_official 0:7037ed05f54f 227 }
mbed_official 0:7037ed05f54f 228
mbed_official 0:7037ed05f54f 229 printf("\r\n Adaptive data rate (ADR) - Enabled \r\n");
afzalsamira 61:169e75494337 230 */
afzalsamira 61:169e75494337 231 if (lorawan.disable_adaptive_datarate() != LORAWAN_STATUS_OK) {
afzalsamira 61:169e75494337 232 printf("\r\ndisable_adaptive_datarate failed! \r\n");
afzalsamira 61:169e75494337 233 return -1;
afzalsamira 61:169e75494337 234 }
afzalsamira 61:169e75494337 235
afzalsamira 61:169e75494337 236 printf("\r\n Adaptive data rate (ADR) - Disabled \r\n");
afzalsamira 61:169e75494337 237
afzalsamira 61:169e75494337 238 if (lorawan.set_datarate(DR) != LORAWAN_STATUS_OK) {
afzalsamira 61:169e75494337 239 printf("\r\n Couldn't set data rate to %d! \r\n", DR);
afzalsamira 61:169e75494337 240 return -1;
afzalsamira 61:169e75494337 241 }
afzalsamira 61:169e75494337 242
afzalsamira 61:169e75494337 243 printf("\r\n Data rate = %d\r\n", DR);
afzalsamira 61:169e75494337 244
afzalsamira 61:169e75494337 245
afzalsamira 61:169e75494337 246
afzalsamira 62:e2116ce452eb 247 //samira - to set a channel plan
afzalsamira 62:e2116ce452eb 248 //LoRa_SetChannelPlan();
mbed_official 0:7037ed05f54f 249
afzalsamira 62:e2116ce452eb 250
mbed_official 2:dc95ac6d6d4e 251 retcode = lorawan.connect();
afzalsamira 62:e2116ce452eb 252
mbed_official 0:7037ed05f54f 253
mbed_official 0:7037ed05f54f 254 if (retcode == LORAWAN_STATUS_OK ||
mbed_official 46:a124538e2891 255 retcode == LORAWAN_STATUS_CONNECT_IN_PROGRESS) {
mbed_official 0:7037ed05f54f 256 } else {
mbed_official 0:7037ed05f54f 257 printf("\r\n Connection error, code = %d \r\n", retcode);
mbed_official 0:7037ed05f54f 258 return -1;
mbed_official 0:7037ed05f54f 259 }
mbed_official 0:7037ed05f54f 260
mbed_official 0:7037ed05f54f 261 printf("\r\n Connection - In Progress ...\r\n");
pancotinho 59:a4fc1efb1569 262
brunnobbco 60:c4f9e9202fb4 263 _actuated_led =0;
afzalsamira 62:e2116ce452eb 264
afzalsamira 62:e2116ce452eb 265 /* set_time(1256729737); // Set RTC time to Wed, 28 Oct 2009 11:35:37
afzalsamira 62:e2116ce452eb 266
afzalsamira 62:e2116ce452eb 267
afzalsamira 62:e2116ce452eb 268 time_t seconds = time(NULL);
afzalsamira 62:e2116ce452eb 269
afzalsamira 62:e2116ce452eb 270 //printf("Time as seconds since January 1, 1970 = %u\n", (unsigned int)seconds);
afzalsamira 62:e2116ce452eb 271
afzalsamira 62:e2116ce452eb 272 //printf("Time as a basic string = %s", ctime(&seconds));
afzalsamira 62:e2116ce452eb 273
afzalsamira 62:e2116ce452eb 274 char time_buffer[32];
afzalsamira 62:e2116ce452eb 275 strftime(time_buffer, 32, "%I:%M %p\n", localtime(&seconds));
afzalsamira 62:e2116ce452eb 276 printf("Time as a custom formatted string = %s", time_buffer);
afzalsamira 62:e2116ce452eb 277
afzalsamira 62:e2116ce452eb 278
afzalsamira 62:e2116ce452eb 279 */
afzalsamira 62:e2116ce452eb 280 /* testing how wait works. it is for seconds
afzalsamira 62:e2116ce452eb 281 //samira-time
afzalsamira 62:e2116ce452eb 282 timenow = chrono::system_clock::to_time_t(chrono::system_clock::now());
afzalsamira 62:e2116ce452eb 283
afzalsamira 62:e2116ce452eb 284 cout << ctime(&timenow) << endl;
afzalsamira 62:e2116ce452eb 285 wait (1);
afzalsamira 62:e2116ce452eb 286 timenow = chrono::system_clock::to_time_t(chrono::system_clock::now());
afzalsamira 62:e2116ce452eb 287 cout << "wait was 1"<<ctime(&timenow) << endl;
afzalsamira 62:e2116ce452eb 288 wait (20);
afzalsamira 62:e2116ce452eb 289 timenow = chrono::system_clock::to_time_t(chrono::system_clock::now());
afzalsamira 62:e2116ce452eb 290 cout << "wait was 2"<<ctime(&timenow) << endl;
afzalsamira 62:e2116ce452eb 291 wait (30);
afzalsamira 62:e2116ce452eb 292 timenow = chrono::system_clock::to_time_t(chrono::system_clock::now());
afzalsamira 62:e2116ce452eb 293 cout << "wait was 3"<<ctime(&timenow) << endl;
afzalsamira 62:e2116ce452eb 294 wait (40);
afzalsamira 62:e2116ce452eb 295 timenow = chrono::system_clock::to_time_t(chrono::system_clock::now());
afzalsamira 62:e2116ce452eb 296 cout << "wait was 4"<<ctime(&timenow) << endl;
afzalsamira 62:e2116ce452eb 297 */
mbed_official 0:7037ed05f54f 298 // make your event queue dispatching events forever
afzalsamira 62:e2116ce452eb 299
afzalsamira 62:e2116ce452eb 300
mbed_official 0:7037ed05f54f 301 ev_queue.dispatch_forever();
mbed_official 3:8c7198d1a2a1 302
mbed_official 3:8c7198d1a2a1 303 return 0;
mbed_official 0:7037ed05f54f 304 }
mbed_official 0:7037ed05f54f 305
afzalsamira 61:169e75494337 306 static void print_lora_tx_buffer_hex(size_t bufSize){
afzalsamira 61:169e75494337 307 char hexa[2*bufSize + 1];
afzalsamira 61:169e75494337 308
afzalsamira 61:169e75494337 309 for (int i = 0 ; i != bufSize ; i++) {
afzalsamira 61:169e75494337 310 sprintf(&hexa[2*i], "%02X", tx_buffer[i]);
afzalsamira 61:169e75494337 311 }
afzalsamira 61:169e75494337 312 hexa[2*bufSize] = '\0';
afzalsamira 61:169e75494337 313 printf("Size = %d. Message to sent: [ %s ]\n", bufSize, hexa);
afzalsamira 61:169e75494337 314 }
afzalsamira 61:169e75494337 315
mbed_official 0:7037ed05f54f 316 /**
mbed_official 0:7037ed05f54f 317 * Sends a message to the Network Server
mbed_official 0:7037ed05f54f 318 */
mbed_official 0:7037ed05f54f 319 static void send_message()
mbed_official 0:7037ed05f54f 320 {
afzalsamira 62:e2116ce452eb 321 printf("------------------------------------------\n");
mbed_official 0:7037ed05f54f 322 uint16_t packet_len;
mbed_official 0:7037ed05f54f 323 int16_t retcode;
mbed_official 56:39847849d219 324 int32_t sensor_value;
pancotinho 59:a4fc1efb1569 325
afzalsamira 61:169e75494337 326 msg_seq_number = msg_seq_number + 1;
afzalsamira 61:169e75494337 327 printf("\r\n msgs %d is creating \r\n", msg_seq_number);
afzalsamira 61:169e75494337 328
afzalsamira 61:169e75494337 329 // packet_len = sprintf((char *) tx_buffer, "Ø`„C¡¡L({¡&Ê÷ŽUQXo¨‚dÏ°^=H~0/LÃ7kMÛ¶©ÉL̎’9ŽOé=°§Hþ8§ÍW~e¸+øþ3ñáúˆ};Ô Îí„íƒÜWÏè[~À\k½¡Ûg]®Äm˜ð—¶zU—æR‰se(|Èi9iÞq‡CÚÕ¿ƒV¢8PˆŠ3Æ*Cë¿<É|¦Uí3 @", msg_seq_number);
afzalsamira 61:169e75494337 330
afzalsamira 61:169e75494337 331
afzalsamira 62:e2116ce452eb 332 //packet_len = sprintf((char *) tx_buffer, "This is message with seq_number = %d \n", msg_seq_number);
afzalsamira 62:e2116ce452eb 333 packet_len = sprintf((char *) tx_buffer, "P");
afzalsamira 61:169e75494337 334
afzalsamira 62:e2116ce452eb 335 // packet_len = 162;
afzalsamira 61:169e75494337 336
afzalsamira 61:169e75494337 337
afzalsamira 61:169e75494337 338 printf("packet_len = %d\n", packet_len);
afzalsamira 61:169e75494337 339 printf("packet_content = %s \n", tx_buffer);
afzalsamira 61:169e75494337 340 // std::cout<<tx_buffer<<endl;
afzalsamira 61:169e75494337 341 print_lora_tx_buffer_hex(packet_len);
afzalsamira 61:169e75494337 342
afzalsamira 62:e2116ce452eb 343 //////samira-time
afzalsamira 61:169e75494337 344 auto timenow =
afzalsamira 61:169e75494337 345 chrono::system_clock::to_time_t(chrono::system_clock::now());
afzalsamira 61:169e75494337 346
afzalsamira 61:169e75494337 347 cout << ctime(&timenow) << endl;
afzalsamira 62:e2116ce452eb 348 /////
mbed_official 0:7037ed05f54f 349
mbed_official 2:dc95ac6d6d4e 350 retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, tx_buffer, packet_len,
mbed_official 47:b6d132f1079f 351 MSG_UNCONFIRMED_FLAG);
mbed_official 0:7037ed05f54f 352
mbed_official 0:7037ed05f54f 353 if (retcode < 0) {
mbed_official 0:7037ed05f54f 354 retcode == LORAWAN_STATUS_WOULD_BLOCK ? printf("send - WOULD BLOCK\r\n")
mbed_official 46:a124538e2891 355 : printf("\r\n send() - Error code %d \r\n", retcode);
mbed_official 26:f07f5febf97f 356
mbed_official 26:f07f5febf97f 357 if (retcode == LORAWAN_STATUS_WOULD_BLOCK) {
mbed_official 26:f07f5febf97f 358 //retry in 3 seconds
mbed_official 26:f07f5febf97f 359 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 26:f07f5febf97f 360 ev_queue.call_in(3000, send_message);
mbed_official 26:f07f5febf97f 361 }
mbed_official 26:f07f5febf97f 362 }
mbed_official 0:7037ed05f54f 363 return;
mbed_official 0:7037ed05f54f 364 }
mbed_official 0:7037ed05f54f 365
afzalsamira 62:e2116ce452eb 366 printf("\r %d bytes scheduled for transmission \r\n", retcode);
afzalsamira 62:e2116ce452eb 367 memset(tx_buffer, 0, sizeof(tx_buffer));
afzalsamira 62:e2116ce452eb 368 printf("------------------------------------------\n");
afzalsamira 61:169e75494337 369
mbed_official 0:7037ed05f54f 370 }
mbed_official 0:7037ed05f54f 371
mbed_official 0:7037ed05f54f 372 /**
mbed_official 0:7037ed05f54f 373 * Receive a message from the Network Server
mbed_official 0:7037ed05f54f 374 */
mbed_official 0:7037ed05f54f 375 static void receive_message()
mbed_official 0:7037ed05f54f 376 {
mbed_official 47:b6d132f1079f 377 uint8_t port;
mbed_official 47:b6d132f1079f 378 int flags;
mbed_official 47:b6d132f1079f 379 int16_t retcode = lorawan.receive(rx_buffer, sizeof(rx_buffer), port, flags);
mbed_official 0:7037ed05f54f 380
mbed_official 0:7037ed05f54f 381 if (retcode < 0) {
mbed_official 0:7037ed05f54f 382 printf("\r\n receive() - Error code %d \r\n", retcode);
mbed_official 0:7037ed05f54f 383 return;
mbed_official 0:7037ed05f54f 384 }
mbed_official 0:7037ed05f54f 385
mbed_official 47:b6d132f1079f 386 printf(" RX Data on port %u (%d bytes): ", port, retcode);
mbed_official 0:7037ed05f54f 387 for (uint8_t i = 0; i < retcode; i++) {
mbed_official 47:b6d132f1079f 388 printf("%02x ", rx_buffer[i]);
mbed_official 0:7037ed05f54f 389 }
mbed_official 47:b6d132f1079f 390 printf("\r\n");
mbed_official 47:b6d132f1079f 391
mbed_official 12:5015dfead3f2 392 memset(rx_buffer, 0, sizeof(rx_buffer));
mbed_official 0:7037ed05f54f 393 }
mbed_official 0:7037ed05f54f 394
mbed_official 0:7037ed05f54f 395 /**
mbed_official 0:7037ed05f54f 396 * Event handler
mbed_official 0:7037ed05f54f 397 */
mbed_official 0:7037ed05f54f 398 static void lora_event_handler(lorawan_event_t event)
mbed_official 0:7037ed05f54f 399 {
mbed_official 0:7037ed05f54f 400 switch (event) {
mbed_official 0:7037ed05f54f 401 case CONNECTED:
mbed_official 0:7037ed05f54f 402 printf("\r\n Connection - Successful \r\n");
mbed_official 0:7037ed05f54f 403 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
afzalsamira 62:e2116ce452eb 404
afzalsamira 62:e2116ce452eb 405
afzalsamira 62:e2116ce452eb 406
mbed_official 0:7037ed05f54f 407 send_message();
afzalsamira 62:e2116ce452eb 408
afzalsamira 62:e2116ce452eb 409 // LoRa_PrintChannels();
afzalsamira 62:e2116ce452eb 410
afzalsamira 62:e2116ce452eb 411
afzalsamira 62:e2116ce452eb 412
afzalsamira 62:e2116ce452eb 413
mbed_official 0:7037ed05f54f 414 } else {
mbed_official 0:7037ed05f54f 415 ev_queue.call_every(TX_TIMER, send_message);
mbed_official 0:7037ed05f54f 416 }
mbed_official 0:7037ed05f54f 417
mbed_official 0:7037ed05f54f 418 break;
mbed_official 0:7037ed05f54f 419 case DISCONNECTED:
mbed_official 0:7037ed05f54f 420 ev_queue.break_dispatch();
mbed_official 0:7037ed05f54f 421 printf("\r\n Disconnected Successfully \r\n");
mbed_official 0:7037ed05f54f 422 break;
mbed_official 0:7037ed05f54f 423 case TX_DONE:
afzalsamira 62:e2116ce452eb 424 //samira-time wait for x minutes
afzalsamira 62:e2116ce452eb 425 timenow = chrono::system_clock::to_time_t(chrono::system_clock::now());
afzalsamira 62:e2116ce452eb 426 cout << "time = "<<ctime(&timenow) << endl;
afzalsamira 62:e2116ce452eb 427 printf("\r Message Sent to Network Server \r\n");
afzalsamira 62:e2116ce452eb 428 printf("\r device waits for %d minutes before sending next messages \r\n", wait_time);
afzalsamira 62:e2116ce452eb 429 wait(wait_time);//samira-time wait for x seconds
afzalsamira 62:e2116ce452eb 430 timenow = chrono::system_clock::to_time_t(chrono::system_clock::now());
afzalsamira 62:e2116ce452eb 431 cout << "wait time is finished time = "<<ctime(&timenow) << endl;
afzalsamira 62:e2116ce452eb 432
afzalsamira 62:e2116ce452eb 433 //printf("\r\n Message Sent to Network Server \r\n");
mbed_official 0:7037ed05f54f 434 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
afzalsamira 62:e2116ce452eb 435 send_message();
mbed_official 0:7037ed05f54f 436 }
mbed_official 0:7037ed05f54f 437 break;
mbed_official 0:7037ed05f54f 438 case TX_TIMEOUT:
pancotinho 59:a4fc1efb1569 439 printf("\r\n Transmission Error TX_Timeout");
mbed_official 0:7037ed05f54f 440 case TX_ERROR:
pancotinho 59:a4fc1efb1569 441 printf("\r\n Transmission Error TX_Error");
mbed_official 0:7037ed05f54f 442 case TX_CRYPTO_ERROR:
pancotinho 59:a4fc1efb1569 443 printf("\r\n Transmission Error TX_Crypto_Error");
mbed_official 0:7037ed05f54f 444 case TX_SCHEDULING_ERROR:
mbed_official 0:7037ed05f54f 445 printf("\r\n Transmission Error - EventCode = %d \r\n", event);
mbed_official 0:7037ed05f54f 446 // try again
mbed_official 0:7037ed05f54f 447 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 0:7037ed05f54f 448 send_message();
mbed_official 0:7037ed05f54f 449 }
mbed_official 0:7037ed05f54f 450 break;
mbed_official 0:7037ed05f54f 451 case RX_DONE:
mbed_official 0:7037ed05f54f 452 printf("\r\n Received message from Network Server \r\n");
mbed_official 0:7037ed05f54f 453 receive_message();
mbed_official 0:7037ed05f54f 454 break;
mbed_official 0:7037ed05f54f 455 case RX_TIMEOUT:
pancotinho 59:a4fc1efb1569 456 printf("\r\n Transmission Error RX_Timeout");
mbed_official 0:7037ed05f54f 457 case RX_ERROR:
mbed_official 0:7037ed05f54f 458 printf("\r\n Error in reception - Code = %d \r\n", event);
mbed_official 0:7037ed05f54f 459 break;
mbed_official 0:7037ed05f54f 460 case JOIN_FAILURE:
mbed_official 0:7037ed05f54f 461 printf("\r\n OTAA Failed - Check Keys \r\n");
mbed_official 0:7037ed05f54f 462 break;
mbed_official 26:f07f5febf97f 463 case UPLINK_REQUIRED:
mbed_official 26:f07f5febf97f 464 printf("\r\n Uplink required by NS \r\n");
mbed_official 26:f07f5febf97f 465 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
mbed_official 26:f07f5febf97f 466 send_message();
mbed_official 26:f07f5febf97f 467 }
mbed_official 26:f07f5febf97f 468 break;
mbed_official 0:7037ed05f54f 469 default:
mbed_official 0:7037ed05f54f 470 MBED_ASSERT("Unknown Event");
mbed_official 0:7037ed05f54f 471 }
mbed_official 0:7037ed05f54f 472 }
mbed_official 0:7037ed05f54f 473
mbed_official 0:7037ed05f54f 474 // EOF