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 Jun 29 02:16:00 2019 +0000
Revision:
16:2b3715dd0f13
Parent:
14:8ec6bdff6f67
Child:
17:579f6353c6fb
Child:
21:1a2ecd140da8
- UP-TO-DATE (vr. 0.0.7)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AndersonIctus 12:2109a8bc8848 1 // #define DEBUG_SGAM
AndersonIctus 0:5d86284beacd 2
AndersonIctus 12:2109a8bc8848 3 #include "mbed.h"
AndersonIctus 7:cabeef41022a 4 #include "sgam_mdw.h"
AndersonIctus 10:cb7a807b5225 5
AndersonIctus 7:cabeef41022a 6 #include "ControlImpl.h"
AndersonIctus 7:cabeef41022a 7 #include "Gyroscope.h"
AndersonIctus 14:8ec6bdff6f67 8 #include "LoRAWanComm.h"
AndersonIctus 16:2b3715dd0f13 9 #include "LoRaWANInterface.h"
AndersonIctus 16:2b3715dd0f13 10 #include "lora_radio_helper.h"
AndersonIctus 7:cabeef41022a 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 0:5d86284beacd 31 int main() {
AndersonIctus 12:2109a8bc8848 32 D_LOG("=============== INICIO ===============\r\n");
AndersonIctus 7:cabeef41022a 33
AndersonIctus 7:cabeef41022a 34 Control* control = ctrl.getControler();
AndersonIctus 12:2109a8bc8848 35 control->initialize();
AndersonIctus 7:cabeef41022a 36
AndersonIctus 14:8ec6bdff6f67 37 Communication<LoraData>* comm = (Communication<LoraData>*)control->getCommunication("LoRAWAN");
AndersonIctus 14:8ec6bdff6f67 38
AndersonIctus 16:2b3715dd0f13 39 ////////////////////////////////////////////////////////////////////////////////////////////
AndersonIctus 14:8ec6bdff6f67 40 // 1 - configura os callbacks do loran WAN e inicializa !!
AndersonIctus 16:2b3715dd0f13 41 LoraData* data = new LoraData(LORAWAN_DEV_EUI, LORAWAN_APP_EUI, LORAWAN_APP_KEY, (LoRaRadio*)&radio);
AndersonIctus 10:cb7a807b5225 42
AndersonIctus 16:2b3715dd0f13 43 // TODO:
AndersonIctus 16:2b3715dd0f13 44 /**
AndersonIctus 16:2b3715dd0f13 45 * 1 - funcao de callbakc
AndersonIctus 16:2b3715dd0f13 46 * 2 - configuracoes de connecção
AndersonIctus 16:2b3715dd0f13 47 */
AndersonIctus 14:8ec6bdff6f67 48
AndersonIctus 16:2b3715dd0f13 49 if( comm->initialize(data) != 1 ) {
AndersonIctus 16:2b3715dd0f13 50 D_LOG("Inicialização falhou !!\r\n");
AndersonIctus 16:2b3715dd0f13 51 return -1;
AndersonIctus 16:2b3715dd0f13 52 }
AndersonIctus 16:2b3715dd0f13 53
AndersonIctus 16:2b3715dd0f13 54 ////////////////////////////////////////////////////////////////////////////////////////////
AndersonIctus 14:8ec6bdff6f67 55 // 2 - Tentar conectar !!
AndersonIctus 14:8ec6bdff6f67 56 if(comm->connect() != TRUE) {
AndersonIctus 14:8ec6bdff6f67 57 D_LOG("Não pode connectar ao lora wan !");
AndersonIctus 14:8ec6bdff6f67 58 return -1;
AndersonIctus 14:8ec6bdff6f67 59 }
AndersonIctus 7:cabeef41022a 60
AndersonIctus 14:8ec6bdff6f67 61 // int count = 0;
AndersonIctus 7:cabeef41022a 62
AndersonIctus 14:8ec6bdff6f67 63 // Sensor<float>* temp = (Sensor<float>*) control->getSensor("Temperature");
AndersonIctus 14:8ec6bdff6f67 64 // // Sensor<GyroscopeData>* gyro = (Sensor<GyroscopeData>*) control->getSensor("Gyroscope");
AndersonIctus 14:8ec6bdff6f67 65
AndersonIctus 14:8ec6bdff6f67 66 // while( count++ < 10) {
AndersonIctus 14:8ec6bdff6f67 67 // float* f = temp->getValue();
AndersonIctus 14:8ec6bdff6f67 68 // D_LOG("Temperatura => %f \r\n", *f);
AndersonIctus 14:8ec6bdff6f67 69
AndersonIctus 14:8ec6bdff6f67 70 // wait(1.5);
AndersonIctus 14:8ec6bdff6f67 71 // }
AndersonIctus 7:cabeef41022a 72
AndersonIctus 10:cb7a807b5225 73 control->finalize();
AndersonIctus 12:2109a8bc8848 74 D_LOG("=============== FINAL ===============\r\n");
AndersonIctus 7:cabeef41022a 75 return 1;
AndersonIctus 0:5d86284beacd 76 }
AndersonIctus 16:2b3715dd0f13 77
AndersonIctus 16:2b3715dd0f13 78
AndersonIctus 16:2b3715dd0f13 79
AndersonIctus 16:2b3715dd0f13 80 /**
AndersonIctus 16:2b3715dd0f13 81 * Receive a message from the Network Server
AndersonIctus 16:2b3715dd0f13 82 */
AndersonIctus 16:2b3715dd0f13 83 static void receive_message()
AndersonIctus 16:2b3715dd0f13 84 {
AndersonIctus 16:2b3715dd0f13 85 printf("receive_message()\n");
AndersonIctus 16:2b3715dd0f13 86
AndersonIctus 16:2b3715dd0f13 87 // uint8_t rx_buffer[50] = { 0 };
AndersonIctus 16:2b3715dd0f13 88 // int16_t retcode = lorawan.receive(MBED_CONF_LORA_APP_PORT, rx_buffer,
AndersonIctus 16:2b3715dd0f13 89 // sizeof(rx_buffer),
AndersonIctus 16:2b3715dd0f13 90 // MSG_CONFIRMED_FLAG|MSG_UNCONFIRMED_FLAG);
AndersonIctus 16:2b3715dd0f13 91
AndersonIctus 16:2b3715dd0f13 92 // if (retcode < 0) {
AndersonIctus 16:2b3715dd0f13 93 // printf("receive() - Error code %d \r\n", retcode);
AndersonIctus 16:2b3715dd0f13 94 // return;
AndersonIctus 16:2b3715dd0f13 95 // }
AndersonIctus 16:2b3715dd0f13 96
AndersonIctus 16:2b3715dd0f13 97 // printf("RX Data (%d bytes): ", retcode);
AndersonIctus 16:2b3715dd0f13 98 // for (uint8_t i = 0; i < retcode; i++) {
AndersonIctus 16:2b3715dd0f13 99 // printf("%02x ", rx_buffer[i]);
AndersonIctus 16:2b3715dd0f13 100 // }
AndersonIctus 16:2b3715dd0f13 101 printf("\r\n");
AndersonIctus 16:2b3715dd0f13 102 }
AndersonIctus 16:2b3715dd0f13 103
AndersonIctus 16:2b3715dd0f13 104 /**
AndersonIctus 16:2b3715dd0f13 105 * Sends a message to the Network Server
AndersonIctus 16:2b3715dd0f13 106 */
AndersonIctus 16:2b3715dd0f13 107 static void send_message() {
AndersonIctus 16:2b3715dd0f13 108 //printf("send_message()\n");
AndersonIctus 16:2b3715dd0f13 109
AndersonIctus 16:2b3715dd0f13 110 // YOUR CODE HERE
AndersonIctus 16:2b3715dd0f13 111 // int16_t temperature = 10;
AndersonIctus 16:2b3715dd0f13 112 // //printf("temperature = (%d)\n", temperature);
AndersonIctus 16:2b3715dd0f13 113 // CayenneLPP payload(50);
AndersonIctus 16:2b3715dd0f13 114 // payload.addTemperature(1, temperature);
AndersonIctus 16:2b3715dd0f13 115 // int16_t retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, payload.getBuffer(), payload.getSize(), MSG_UNCONFIRMED_FLAG);
AndersonIctus 16:2b3715dd0f13 116 // //printf("lorawan.send = retcode [%d]\n",retcode);
AndersonIctus 16:2b3715dd0f13 117
AndersonIctus 16:2b3715dd0f13 118 // if (retcode < 0) {
AndersonIctus 16:2b3715dd0f13 119 // retcode == LORAWAN_STATUS_WOULD_BLOCK ? printf("send - Duty cycle violation\r\n")
AndersonIctus 16:2b3715dd0f13 120 // : printf("send() - Error code %d \r\n", retcode);
AndersonIctus 16:2b3715dd0f13 121
AndersonIctus 16:2b3715dd0f13 122 // if (retcode == LORAWAN_STATUS_NO_ACTIVE_SESSIONS)
AndersonIctus 16:2b3715dd0f13 123 // printf("\r\n|-1017 - LORAWAN_STATUS_NO_ACTIVE_SESSIONS");
AndersonIctus 16:2b3715dd0f13 124
AndersonIctus 16:2b3715dd0f13 125 // if (retcode == LORAWAN_STATUS_WOULD_BLOCK) {
AndersonIctus 16:2b3715dd0f13 126 // //retry in 3 seconds
AndersonIctus 16:2b3715dd0f13 127 // ev_queue.call_in(3000, send_message);
AndersonIctus 16:2b3715dd0f13 128 // }
AndersonIctus 16:2b3715dd0f13 129 // else {
AndersonIctus 16:2b3715dd0f13 130 // ev_queue.call_in(TX_INTERVAL, send_message);
AndersonIctus 16:2b3715dd0f13 131 // }
AndersonIctus 16:2b3715dd0f13 132 // return;
AndersonIctus 16:2b3715dd0f13 133 // }
AndersonIctus 16:2b3715dd0f13 134
AndersonIctus 16:2b3715dd0f13 135 // ev_queue.call_in(TX_INTERVAL, send_message);
AndersonIctus 16:2b3715dd0f13 136
AndersonIctus 16:2b3715dd0f13 137 //receive_message();
AndersonIctus 16:2b3715dd0f13 138 //printf("%d bytes scheduled for transmission \r\n", retcode);
AndersonIctus 16:2b3715dd0f13 139 }
AndersonIctus 16:2b3715dd0f13 140
AndersonIctus 16:2b3715dd0f13 141 /**
AndersonIctus 16:2b3715dd0f13 142 * Event handler
AndersonIctus 16:2b3715dd0f13 143 */
AndersonIctus 16:2b3715dd0f13 144 static void lora_event_handler(lorawan_event_t event)
AndersonIctus 16:2b3715dd0f13 145 {
AndersonIctus 16:2b3715dd0f13 146 switch (event) {
AndersonIctus 16:2b3715dd0f13 147 case CONNECTED:
AndersonIctus 16:2b3715dd0f13 148 printf("# Connection - Successful \r\n");
AndersonIctus 16:2b3715dd0f13 149 if (MBED_CONF_LORA_DUTY_CYCLE_ON) {
AndersonIctus 16:2b3715dd0f13 150 send_message();
AndersonIctus 16:2b3715dd0f13 151 } else {
AndersonIctus 16:2b3715dd0f13 152 // ev_queue.call_in(TX_INTERVAL, send_message);
AndersonIctus 16:2b3715dd0f13 153 }
AndersonIctus 16:2b3715dd0f13 154 break;
AndersonIctus 16:2b3715dd0f13 155
AndersonIctus 16:2b3715dd0f13 156 case DISCONNECTED:
AndersonIctus 16:2b3715dd0f13 157 // ev_queue.break_dispatch();
AndersonIctus 16:2b3715dd0f13 158 printf("# Disconnected Successfully \r\n");
AndersonIctus 16:2b3715dd0f13 159 break;
AndersonIctus 16:2b3715dd0f13 160 case RX_DONE:
AndersonIctus 16:2b3715dd0f13 161 printf("# Received message from Network Server \r\n");
AndersonIctus 16:2b3715dd0f13 162 receive_message();
AndersonIctus 16:2b3715dd0f13 163 break;
AndersonIctus 16:2b3715dd0f13 164 case RX_TIMEOUT:
AndersonIctus 16:2b3715dd0f13 165 case RX_ERROR:
AndersonIctus 16:2b3715dd0f13 166 printf("# Error in reception - Code = %d \r\n", event);
AndersonIctus 16:2b3715dd0f13 167 break;
AndersonIctus 16:2b3715dd0f13 168 case TX_DONE:
AndersonIctus 16:2b3715dd0f13 169 count_message++;
AndersonIctus 16:2b3715dd0f13 170 printf("# Message Sent to Network Server - Count [%d] \r\n", count_message);
AndersonIctus 16:2b3715dd0f13 171 break;
AndersonIctus 16:2b3715dd0f13 172 case TX_TIMEOUT:
AndersonIctus 16:2b3715dd0f13 173 case TX_ERROR:
AndersonIctus 16:2b3715dd0f13 174 case TX_CRYPTO_ERROR:
AndersonIctus 16:2b3715dd0f13 175 case TX_SCHEDULING_ERROR:
AndersonIctus 16:2b3715dd0f13 176 printf("# Transmission Error - EventCode = %d \r\n", event);
AndersonIctus 16:2b3715dd0f13 177 break;
AndersonIctus 16:2b3715dd0f13 178 case JOIN_FAILURE:
AndersonIctus 16:2b3715dd0f13 179 printf("# OTAA Failed - Check Keys \r\n");
AndersonIctus 16:2b3715dd0f13 180 break;
AndersonIctus 16:2b3715dd0f13 181 case UPLINK_REQUIRED:
AndersonIctus 16:2b3715dd0f13 182 printf("# Uplink required by NS \r\n");
AndersonIctus 16:2b3715dd0f13 183 send_message();
AndersonIctus 16:2b3715dd0f13 184 break;
AndersonIctus 16:2b3715dd0f13 185 default:
AndersonIctus 16:2b3715dd0f13 186 printf("# Unknown Event \r\n");
AndersonIctus 16:2b3715dd0f13 187 MBED_ASSERT("# Unknown Event");
AndersonIctus 16:2b3715dd0f13 188 }
AndersonIctus 16:2b3715dd0f13 189 }