Projeto teste do Programa de integracao com biblioteca SGAM_MDW !! Aqui visa um usuario que usa o projeto implementado para a placa NUCLEO F429ZI

Dependencies:   sgam_mdw sgam_mdw_NUCLEOF429ZI_impl Cayenne-LPP

Committer:
AndersonIctus
Date:
Sat Jul 13 11:18:35 2019 -0300
Revision:
26:8c55aac7887f
Parent:
23:6869d0465b03
Child:
28:18a54c786ba9
- Mudancas para o write de conteudo !

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AndersonIctus 12:2109a8bc8848 1 #include "mbed.h"
AndersonIctus 7:cabeef41022a 2 #include "sgam_mdw.h"
AndersonIctus 10:cb7a807b5225 3
AndersonIctus 7:cabeef41022a 4 #include "ControlImpl.h"
AndersonIctus 7:cabeef41022a 5 #include "Gyroscope.h"
AndersonIctus 14:8ec6bdff6f67 6 #include "LoRAWanComm.h"
AndersonIctus 16:2b3715dd0f13 7 #include "LoRaWANInterface.h"
AndersonIctus 16:2b3715dd0f13 8 #include "lora_radio_helper.h"
AndersonIctus 7:cabeef41022a 9
AndersonIctus 26:8c55aac7887f 10 #include "CayenneLPP.h"
AndersonIctus 26:8c55aac7887f 11
AndersonIctus 7:cabeef41022a 12 ControlImpl ctrl;
AndersonIctus 7:cabeef41022a 13
AndersonIctus 12:2109a8bc8848 14 #define D_LOG(args...) printf(args)
AndersonIctus 12:2109a8bc8848 15
AndersonIctus 14:8ec6bdff6f67 16 // LORA WAN CONFIGS
AndersonIctus 14:8ec6bdff6f67 17 #define TX_INTERVAL 10000
AndersonIctus 14:8ec6bdff6f67 18 #define MBED_CONF_LORA_APP_PORT 15 //15
AndersonIctus 14:8ec6bdff6f67 19
AndersonIctus 14:8ec6bdff6f67 20 static uint8_t LORAWAN_DEV_EUI[] = { 0x00, 0x1C, 0x73, 0x4A, 0x55, 0x89, 0xAE, 0xC6 };
AndersonIctus 14:8ec6bdff6f67 21 static uint8_t LORAWAN_APP_EUI[] = { 0x70, 0xB3, 0xD5, 0x7E, 0xD0, 0x01, 0xD0, 0x2F };
AndersonIctus 14:8ec6bdff6f67 22 static uint8_t LORAWAN_APP_KEY[] = { 0x75, 0xC6, 0xF2, 0xFB, 0xEE, 0xA9, 0x82, 0x6C, 0xA0, 0xBD, 0xB9, 0x0F, 0xC9, 0xEC, 0xF7, 0x10 };
AndersonIctus 14:8ec6bdff6f67 23
AndersonIctus 16:2b3715dd0f13 24 // static uint32_t DEVADDR_1 = 0x2601177B;
AndersonIctus 16:2b3715dd0f13 25 // static uint8_t NWKSKEY_1[] = { 0x2A, 0xE9, 0x3F, 0x5E, 0x4C, 0x25, 0xDC, 0x34, 0x16, 0x82, 0x1B, 0xD1, 0x1A, 0x7F, 0xD0, 0xF6 };
AndersonIctus 16:2b3715dd0f13 26 // static uint8_t APPSKEY_1[] = { 0x78, 0x59, 0x61, 0xBB, 0x6B, 0xB7, 0xDE, 0x57, 0x80, 0x74, 0xAF, 0xED, 0x10, 0xD7, 0x47, 0x18 };
AndersonIctus 16:2b3715dd0f13 27
AndersonIctus 16:2b3715dd0f13 28 static void lora_event_handler(lorawan_event_t event);
AndersonIctus 16:2b3715dd0f13 29 static int16_t count_message;
AndersonIctus 14:8ec6bdff6f67 30
AndersonIctus 17:579f6353c6fb 31 EventQueue ev_queue;
AndersonIctus 17:579f6353c6fb 32 static lorawan_app_callbacks_t callbacks;
AndersonIctus 17:579f6353c6fb 33
AndersonIctus 20:b25436619b59 34 Communication<LoraData>* comm = NULL;
AndersonIctus 20:b25436619b59 35
AndersonIctus 0:5d86284beacd 36 int main() {
AndersonIctus 12:2109a8bc8848 37 D_LOG("=============== INICIO ===============\r\n");
AndersonIctus 7:cabeef41022a 38
AndersonIctus 7:cabeef41022a 39 Control* control = ctrl.getControler();
AndersonIctus 12:2109a8bc8848 40 control->initialize();
AndersonIctus 7:cabeef41022a 41
AndersonIctus 20:b25436619b59 42 comm = (Communication<LoraData>*)control->getCommunication("LoRAWAN");
AndersonIctus 14:8ec6bdff6f67 43
AndersonIctus 16:2b3715dd0f13 44 ////////////////////////////////////////////////////////////////////////////////////////////
AndersonIctus 17:579f6353c6fb 45 // 1 - Configura os callbacks do loran WAN e inicializa os dados !!
AndersonIctus 17:579f6353c6fb 46 // Dados de Conexão
AndersonIctus 17:579f6353c6fb 47 lorawan_connect_t connect_params;
AndersonIctus 17:579f6353c6fb 48 connect_params.connect_type = LORAWAN_CONNECTION_OTAA;
AndersonIctus 10:cb7a807b5225 49
AndersonIctus 17:579f6353c6fb 50 connect_params.connection_u.otaa.dev_eui = LORAWAN_DEV_EUI;
AndersonIctus 17:579f6353c6fb 51 connect_params.connection_u.otaa.app_eui = LORAWAN_APP_EUI;
AndersonIctus 17:579f6353c6fb 52 connect_params.connection_u.otaa.app_key = LORAWAN_APP_KEY;
AndersonIctus 17:579f6353c6fb 53 connect_params.connection_u.otaa.nb_trials = 10;
AndersonIctus 14:8ec6bdff6f67 54
AndersonIctus 17:579f6353c6fb 55 LoraData* data = new LoraData(&connect_params, (LoRaRadio*)&radio, &ev_queue );
AndersonIctus 17:579f6353c6fb 56 callbacks.events = mbed::callback(lora_event_handler);
AndersonIctus 17:579f6353c6fb 57 data->prepareCallBack(callbacks);
AndersonIctus 16:2b3715dd0f13 58
AndersonIctus 20:b25436619b59 59 // Flags de leitura !!
AndersonIctus 26:8c55aac7887f 60 data->lora_port = MBED_CONF_LORA_APP_PORT;
AndersonIctus 20:b25436619b59 61
AndersonIctus 17:579f6353c6fb 62 /////////////////////////////////////////////////////////////////////////////////////////////
AndersonIctus 17:579f6353c6fb 63 // 2 - INICIALIZA A CONEXAO
AndersonIctus 17:579f6353c6fb 64 if( comm->initialize(data) != TRUE) {
AndersonIctus 16:2b3715dd0f13 65 D_LOG("Inicialização falhou !!\r\n");
AndersonIctus 16:2b3715dd0f13 66 return -1;
AndersonIctus 16:2b3715dd0f13 67 }
AndersonIctus 7:cabeef41022a 68
AndersonIctus 16:2b3715dd0f13 69 ////////////////////////////////////////////////////////////////////////////////////////////
AndersonIctus 17:579f6353c6fb 70 // 3 - Tentar conectar
AndersonIctus 17:579f6353c6fb 71 lorawan_status_t retcode = (lorawan_status_t) comm->connect();
AndersonIctus 17:579f6353c6fb 72 if (retcode == LORAWAN_STATUS_OK || retcode == LORAWAN_STATUS_CONNECT_IN_PROGRESS) {
AndersonIctus 17:579f6353c6fb 73 printf("Connection - In Progress ...\r\n");
AndersonIctus 17:579f6353c6fb 74 } else {
AndersonIctus 17:579f6353c6fb 75 printf("Connection error, code = %d \r\n", retcode);
AndersonIctus 14:8ec6bdff6f67 76 return -1;
AndersonIctus 21:1a2ecd140da8 77 }
AndersonIctus 7:cabeef41022a 78
AndersonIctus 17:579f6353c6fb 79 // make your event queue dispatching events forever
AndersonIctus 17:579f6353c6fb 80 ev_queue.dispatch_forever();
AndersonIctus 7:cabeef41022a 81
AndersonIctus 10:cb7a807b5225 82 control->finalize();
AndersonIctus 12:2109a8bc8848 83 D_LOG("=============== FINAL ===============\r\n");
AndersonIctus 7:cabeef41022a 84 return 1;
AndersonIctus 0:5d86284beacd 85 }
AndersonIctus 16:2b3715dd0f13 86
AndersonIctus 16:2b3715dd0f13 87 /**
AndersonIctus 16:2b3715dd0f13 88 * Receive a message from the Network Server
AndersonIctus 16:2b3715dd0f13 89 */
AndersonIctus 16:2b3715dd0f13 90 static void receive_message()
AndersonIctus 16:2b3715dd0f13 91 {
AndersonIctus 16:2b3715dd0f13 92 printf("receive_message()\n");
AndersonIctus 16:2b3715dd0f13 93
AndersonIctus 26:8c55aac7887f 94 LoraData* data = (LoraData*) comm->getData();
AndersonIctus 26:8c55aac7887f 95 data->read_write_flags = MSG_CONFIRMED_FLAG|MSG_UNCONFIRMED_FLAG;
AndersonIctus 26:8c55aac7887f 96
AndersonIctus 20:b25436619b59 97 uint8_t rx_buffer[50] = { 0 };
AndersonIctus 20:b25436619b59 98 int16_t retcode = comm->read( rx_buffer, sizeof(rx_buffer) );
AndersonIctus 20:b25436619b59 99 if (retcode < 0) {
AndersonIctus 20:b25436619b59 100 printf("receive() - Error code %d \r\n", retcode);
AndersonIctus 20:b25436619b59 101 return;
AndersonIctus 20:b25436619b59 102 }
AndersonIctus 16:2b3715dd0f13 103
AndersonIctus 20:b25436619b59 104 printf("RX Data (%d bytes): ", retcode);
AndersonIctus 20:b25436619b59 105 for (uint8_t i = 0; i < retcode; i++) {
AndersonIctus 20:b25436619b59 106 printf("%02x ", rx_buffer[i]);
AndersonIctus 20:b25436619b59 107 }
AndersonIctus 16:2b3715dd0f13 108
AndersonIctus 16:2b3715dd0f13 109 printf("\r\n");
AndersonIctus 16:2b3715dd0f13 110 }
AndersonIctus 16:2b3715dd0f13 111
AndersonIctus 16:2b3715dd0f13 112 /**
AndersonIctus 16:2b3715dd0f13 113 * Sends a message to the Network Server
AndersonIctus 16:2b3715dd0f13 114 */
AndersonIctus 16:2b3715dd0f13 115 static void send_message() {
AndersonIctus 20:b25436619b59 116 printf("send_message()\n");
AndersonIctus 16:2b3715dd0f13 117
AndersonIctus 16:2b3715dd0f13 118 // YOUR CODE HERE
AndersonIctus 26:8c55aac7887f 119 int16_t temperature = 10;
AndersonIctus 26:8c55aac7887f 120 printf("temperature = (%d)\n", temperature);
AndersonIctus 20:b25436619b59 121
AndersonIctus 26:8c55aac7887f 122 CayenneLPP payload(50);
AndersonIctus 26:8c55aac7887f 123 payload.addTemperature(1, temperature);
AndersonIctus 20:b25436619b59 124
AndersonIctus 26:8c55aac7887f 125 LoraData* data = (LoraData*) comm->getData();
AndersonIctus 26:8c55aac7887f 126 data->read_write_flags = MSG_UNCONFIRMED_FLAG;
AndersonIctus 16:2b3715dd0f13 127
AndersonIctus 26:8c55aac7887f 128 int16_t retcode = comm->write(payload.getBuffer(), payload.getSize());
AndersonIctus 26:8c55aac7887f 129 printf("lorawan.send = retcode [%d]\n",retcode);
AndersonIctus 26:8c55aac7887f 130
AndersonIctus 26:8c55aac7887f 131 if (retcode < 0) {
AndersonIctus 26:8c55aac7887f 132 retcode == LORAWAN_STATUS_WOULD_BLOCK
AndersonIctus 26:8c55aac7887f 133 ? printf("send - Duty cycle violation\r\n")
AndersonIctus 26:8c55aac7887f 134 : printf("send() - Error code %d \r\n", retcode);
AndersonIctus 16:2b3715dd0f13 135
AndersonIctus 26:8c55aac7887f 136 if (retcode == LORAWAN_STATUS_NO_ACTIVE_SESSIONS)
AndersonIctus 26:8c55aac7887f 137 printf("\r\n|-1017 - LORAWAN_STATUS_NO_ACTIVE_SESSIONS");
AndersonIctus 16:2b3715dd0f13 138
AndersonIctus 26:8c55aac7887f 139 if (retcode == LORAWAN_STATUS_WOULD_BLOCK) { //retry in 3 seconds
AndersonIctus 26:8c55aac7887f 140 ev_queue.call_in(3000, send_message);
AndersonIctus 26:8c55aac7887f 141 } else {
AndersonIctus 26:8c55aac7887f 142 ev_queue.call_in(TX_INTERVAL, send_message);
AndersonIctus 26:8c55aac7887f 143 }
AndersonIctus 20:b25436619b59 144
AndersonIctus 26:8c55aac7887f 145 return;
AndersonIctus 26:8c55aac7887f 146 }
AndersonIctus 16:2b3715dd0f13 147
AndersonIctus 26:8c55aac7887f 148 ev_queue.call_in(TX_INTERVAL, send_message);
AndersonIctus 16:2b3715dd0f13 149
AndersonIctus 26:8c55aac7887f 150 receive_message();
AndersonIctus 26:8c55aac7887f 151 printf("%d bytes scheduled for transmission \r\n", retcode);
AndersonIctus 16:2b3715dd0f13 152 }
AndersonIctus 16:2b3715dd0f13 153
AndersonIctus 16:2b3715dd0f13 154 /**
AndersonIctus 16:2b3715dd0f13 155 * Event handler
AndersonIctus 16:2b3715dd0f13 156 */
AndersonIctus 20:b25436619b59 157 static void lora_event_handler(lorawan_event_t event) {
AndersonIctus 20:b25436619b59 158 switch (event) {
AndersonIctus 20:b25436619b59 159 case CONNECTED:
AndersonIctus 20:b25436619b59 160 printf("# Connection - Successful \r\n");
AndersonIctus 20:b25436619b59 161 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
AndersonIctus 20:b25436619b59 162 send_message();
AndersonIctus 20:b25436619b59 163 } else {
AndersonIctus 20:b25436619b59 164 ev_queue.call_in(TX_INTERVAL, send_message);
AndersonIctus 20:b25436619b59 165 }
AndersonIctus 20:b25436619b59 166 break;
AndersonIctus 16:2b3715dd0f13 167
AndersonIctus 20:b25436619b59 168 case DISCONNECTED:
AndersonIctus 20:b25436619b59 169 ev_queue.break_dispatch();
AndersonIctus 20:b25436619b59 170 printf("# Disconnected Successfully \r\n");
AndersonIctus 20:b25436619b59 171 break;
AndersonIctus 20:b25436619b59 172 case RX_DONE:
AndersonIctus 20:b25436619b59 173 printf("# Received message from Network Server \r\n");
AndersonIctus 20:b25436619b59 174 receive_message();
AndersonIctus 20:b25436619b59 175 break;
AndersonIctus 20:b25436619b59 176 case RX_TIMEOUT:
AndersonIctus 20:b25436619b59 177 case RX_ERROR:
AndersonIctus 20:b25436619b59 178 printf("# Error in reception - Code = %d \r\n", event);
AndersonIctus 20:b25436619b59 179 break;
AndersonIctus 20:b25436619b59 180 case TX_DONE:
AndersonIctus 20:b25436619b59 181 count_message++;
AndersonIctus 20:b25436619b59 182 printf("# Message Sent to Network Server - Count [%d] \r\n", count_message);
AndersonIctus 20:b25436619b59 183 break;
AndersonIctus 20:b25436619b59 184 case TX_TIMEOUT:
AndersonIctus 20:b25436619b59 185 case TX_ERROR:
AndersonIctus 20:b25436619b59 186 case TX_CRYPTO_ERROR:
AndersonIctus 20:b25436619b59 187 case TX_SCHEDULING_ERROR:
AndersonIctus 20:b25436619b59 188 printf("# Transmission Error - EventCode = %d \r\n", event);
AndersonIctus 20:b25436619b59 189 break;
AndersonIctus 20:b25436619b59 190 case JOIN_FAILURE:
AndersonIctus 20:b25436619b59 191 printf("# OTAA Failed - Check Keys \r\n");
AndersonIctus 20:b25436619b59 192 break;
AndersonIctus 20:b25436619b59 193 case UPLINK_REQUIRED:
AndersonIctus 20:b25436619b59 194 printf("# Uplink required by NS \r\n");
AndersonIctus 20:b25436619b59 195 send_message();
AndersonIctus 20:b25436619b59 196 break;
AndersonIctus 20:b25436619b59 197 default:
AndersonIctus 20:b25436619b59 198 printf("# Unknown Event \r\n");
AndersonIctus 20:b25436619b59 199 // MBED_ASSERT("# Unknown Event");
AndersonIctus 20:b25436619b59 200 }
AndersonIctus 16:2b3715dd0f13 201 }