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
main.cpp@18:b6197f50dce6, 2019-06-28 (annotated)
- Committer:
- AndersonIctus
- Date:
- Fri Jun 28 23:10:41 2019 -0300
- Revision:
- 18:b6197f50dce6
- Parent:
- 14:8ec6bdff6f67
- Child:
- 17:579f6353c6fb
- Child:
- 21:1a2ecd140da8
- modificacoes no aap.jason
Who changed what in which revision?
User | Revision | Line number | New 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 | 18:b6197f50dce6 | 9 | #include "LoRaWANInterface.h" |
AndersonIctus | 18:b6197f50dce6 | 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 | 18:b6197f50dce6 | 24 | // static uint32_t DEVADDR_1 = 0x2601177B; |
AndersonIctus | 18:b6197f50dce6 | 25 | // static uint8_t NWKSKEY_1[] = { 0x2A, 0xE9, 0x3F, 0x5E, 0x4C, 0x25, 0xDC, 0x34, 0x16, 0x82, 0x1B, 0xD1, 0x1A, 0x7F, 0xD0, 0xF6 }; |
AndersonIctus | 18:b6197f50dce6 | 26 | // static uint8_t APPSKEY_1[] = { 0x78, 0x59, 0x61, 0xBB, 0x6B, 0xB7, 0xDE, 0x57, 0x80, 0x74, 0xAF, 0xED, 0x10, 0xD7, 0x47, 0x18 }; |
AndersonIctus | 18:b6197f50dce6 | 27 | |
AndersonIctus | 18:b6197f50dce6 | 28 | static void lora_event_handler(lorawan_event_t event); |
AndersonIctus | 18:b6197f50dce6 | 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 | 18:b6197f50dce6 | 39 | //////////////////////////////////////////////////////////////////////////////////////////// |
AndersonIctus | 14:8ec6bdff6f67 | 40 | // 1 - configura os callbacks do loran WAN e inicializa !! |
AndersonIctus | 18:b6197f50dce6 | 41 | LoraData* data = new LoraData(LORAWAN_DEV_EUI, LORAWAN_APP_EUI, LORAWAN_APP_KEY, (LoRaRadio*)&radio); |
AndersonIctus | 10:cb7a807b5225 | 42 | |
AndersonIctus | 18:b6197f50dce6 | 43 | // TODO: |
AndersonIctus | 18:b6197f50dce6 | 44 | /** |
AndersonIctus | 18:b6197f50dce6 | 45 | * 1 - funcao de callbakc |
AndersonIctus | 18:b6197f50dce6 | 46 | * 2 - configuracoes de connecção |
AndersonIctus | 18:b6197f50dce6 | 47 | */ |
AndersonIctus | 14:8ec6bdff6f67 | 48 | |
AndersonIctus | 18:b6197f50dce6 | 49 | if( comm->initialize(data) != 1 ) { |
AndersonIctus | 18:b6197f50dce6 | 50 | D_LOG("Inicialização falhou !!\r\n"); |
AndersonIctus | 18:b6197f50dce6 | 51 | return -1; |
AndersonIctus | 18:b6197f50dce6 | 52 | } |
AndersonIctus | 18:b6197f50dce6 | 53 | |
AndersonIctus | 18:b6197f50dce6 | 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 | 18:b6197f50dce6 | 77 | |
AndersonIctus | 18:b6197f50dce6 | 78 | |
AndersonIctus | 18:b6197f50dce6 | 79 | |
AndersonIctus | 18:b6197f50dce6 | 80 | /** |
AndersonIctus | 18:b6197f50dce6 | 81 | * Receive a message from the Network Server |
AndersonIctus | 18:b6197f50dce6 | 82 | */ |
AndersonIctus | 18:b6197f50dce6 | 83 | static void receive_message() |
AndersonIctus | 18:b6197f50dce6 | 84 | { |
AndersonIctus | 18:b6197f50dce6 | 85 | printf("receive_message()\n"); |
AndersonIctus | 18:b6197f50dce6 | 86 | |
AndersonIctus | 18:b6197f50dce6 | 87 | // uint8_t rx_buffer[50] = { 0 }; |
AndersonIctus | 18:b6197f50dce6 | 88 | // int16_t retcode = lorawan.receive(MBED_CONF_LORA_APP_PORT, rx_buffer, |
AndersonIctus | 18:b6197f50dce6 | 89 | // sizeof(rx_buffer), |
AndersonIctus | 18:b6197f50dce6 | 90 | // MSG_CONFIRMED_FLAG|MSG_UNCONFIRMED_FLAG); |
AndersonIctus | 18:b6197f50dce6 | 91 | |
AndersonIctus | 18:b6197f50dce6 | 92 | // if (retcode < 0) { |
AndersonIctus | 18:b6197f50dce6 | 93 | // printf("receive() - Error code %d \r\n", retcode); |
AndersonIctus | 18:b6197f50dce6 | 94 | // return; |
AndersonIctus | 18:b6197f50dce6 | 95 | // } |
AndersonIctus | 18:b6197f50dce6 | 96 | |
AndersonIctus | 18:b6197f50dce6 | 97 | // printf("RX Data (%d bytes): ", retcode); |
AndersonIctus | 18:b6197f50dce6 | 98 | // for (uint8_t i = 0; i < retcode; i++) { |
AndersonIctus | 18:b6197f50dce6 | 99 | // printf("%02x ", rx_buffer[i]); |
AndersonIctus | 18:b6197f50dce6 | 100 | // } |
AndersonIctus | 18:b6197f50dce6 | 101 | printf("\r\n"); |
AndersonIctus | 18:b6197f50dce6 | 102 | } |
AndersonIctus | 18:b6197f50dce6 | 103 | |
AndersonIctus | 18:b6197f50dce6 | 104 | /** |
AndersonIctus | 18:b6197f50dce6 | 105 | * Sends a message to the Network Server |
AndersonIctus | 18:b6197f50dce6 | 106 | */ |
AndersonIctus | 18:b6197f50dce6 | 107 | static void send_message() { |
AndersonIctus | 18:b6197f50dce6 | 108 | //printf("send_message()\n"); |
AndersonIctus | 18:b6197f50dce6 | 109 | |
AndersonIctus | 18:b6197f50dce6 | 110 | // YOUR CODE HERE |
AndersonIctus | 18:b6197f50dce6 | 111 | // int16_t temperature = 10; |
AndersonIctus | 18:b6197f50dce6 | 112 | // //printf("temperature = (%d)\n", temperature); |
AndersonIctus | 18:b6197f50dce6 | 113 | // CayenneLPP payload(50); |
AndersonIctus | 18:b6197f50dce6 | 114 | // payload.addTemperature(1, temperature); |
AndersonIctus | 18:b6197f50dce6 | 115 | // int16_t retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, payload.getBuffer(), payload.getSize(), MSG_UNCONFIRMED_FLAG); |
AndersonIctus | 18:b6197f50dce6 | 116 | // //printf("lorawan.send = retcode [%d]\n",retcode); |
AndersonIctus | 18:b6197f50dce6 | 117 | |
AndersonIctus | 18:b6197f50dce6 | 118 | // if (retcode < 0) { |
AndersonIctus | 18:b6197f50dce6 | 119 | // retcode == LORAWAN_STATUS_WOULD_BLOCK ? printf("send - Duty cycle violation\r\n") |
AndersonIctus | 18:b6197f50dce6 | 120 | // : printf("send() - Error code %d \r\n", retcode); |
AndersonIctus | 18:b6197f50dce6 | 121 | |
AndersonIctus | 18:b6197f50dce6 | 122 | // if (retcode == LORAWAN_STATUS_NO_ACTIVE_SESSIONS) |
AndersonIctus | 18:b6197f50dce6 | 123 | // printf("\r\n|-1017 - LORAWAN_STATUS_NO_ACTIVE_SESSIONS"); |
AndersonIctus | 18:b6197f50dce6 | 124 | |
AndersonIctus | 18:b6197f50dce6 | 125 | // if (retcode == LORAWAN_STATUS_WOULD_BLOCK) { |
AndersonIctus | 18:b6197f50dce6 | 126 | // //retry in 3 seconds |
AndersonIctus | 18:b6197f50dce6 | 127 | // ev_queue.call_in(3000, send_message); |
AndersonIctus | 18:b6197f50dce6 | 128 | // } |
AndersonIctus | 18:b6197f50dce6 | 129 | // else { |
AndersonIctus | 18:b6197f50dce6 | 130 | // ev_queue.call_in(TX_INTERVAL, send_message); |
AndersonIctus | 18:b6197f50dce6 | 131 | // } |
AndersonIctus | 18:b6197f50dce6 | 132 | // return; |
AndersonIctus | 18:b6197f50dce6 | 133 | // } |
AndersonIctus | 18:b6197f50dce6 | 134 | |
AndersonIctus | 18:b6197f50dce6 | 135 | // ev_queue.call_in(TX_INTERVAL, send_message); |
AndersonIctus | 18:b6197f50dce6 | 136 | |
AndersonIctus | 18:b6197f50dce6 | 137 | //receive_message(); |
AndersonIctus | 18:b6197f50dce6 | 138 | //printf("%d bytes scheduled for transmission \r\n", retcode); |
AndersonIctus | 18:b6197f50dce6 | 139 | } |
AndersonIctus | 18:b6197f50dce6 | 140 | |
AndersonIctus | 18:b6197f50dce6 | 141 | /** |
AndersonIctus | 18:b6197f50dce6 | 142 | * Event handler |
AndersonIctus | 18:b6197f50dce6 | 143 | */ |
AndersonIctus | 18:b6197f50dce6 | 144 | static void lora_event_handler(lorawan_event_t event) |
AndersonIctus | 18:b6197f50dce6 | 145 | { |
AndersonIctus | 18:b6197f50dce6 | 146 | switch (event) { |
AndersonIctus | 18:b6197f50dce6 | 147 | case CONNECTED: |
AndersonIctus | 18:b6197f50dce6 | 148 | printf("# Connection - Successful \r\n"); |
AndersonIctus | 18:b6197f50dce6 | 149 | if (MBED_CONF_LORA_DUTY_CYCLE_ON) { |
AndersonIctus | 18:b6197f50dce6 | 150 | send_message(); |
AndersonIctus | 18:b6197f50dce6 | 151 | } else { |
AndersonIctus | 18:b6197f50dce6 | 152 | // ev_queue.call_in(TX_INTERVAL, send_message); |
AndersonIctus | 18:b6197f50dce6 | 153 | } |
AndersonIctus | 18:b6197f50dce6 | 154 | break; |
AndersonIctus | 18:b6197f50dce6 | 155 | |
AndersonIctus | 18:b6197f50dce6 | 156 | case DISCONNECTED: |
AndersonIctus | 18:b6197f50dce6 | 157 | // ev_queue.break_dispatch(); |
AndersonIctus | 18:b6197f50dce6 | 158 | printf("# Disconnected Successfully \r\n"); |
AndersonIctus | 18:b6197f50dce6 | 159 | break; |
AndersonIctus | 18:b6197f50dce6 | 160 | case RX_DONE: |
AndersonIctus | 18:b6197f50dce6 | 161 | printf("# Received message from Network Server \r\n"); |
AndersonIctus | 18:b6197f50dce6 | 162 | receive_message(); |
AndersonIctus | 18:b6197f50dce6 | 163 | break; |
AndersonIctus | 18:b6197f50dce6 | 164 | case RX_TIMEOUT: |
AndersonIctus | 18:b6197f50dce6 | 165 | case RX_ERROR: |
AndersonIctus | 18:b6197f50dce6 | 166 | printf("# Error in reception - Code = %d \r\n", event); |
AndersonIctus | 18:b6197f50dce6 | 167 | break; |
AndersonIctus | 18:b6197f50dce6 | 168 | case TX_DONE: |
AndersonIctus | 18:b6197f50dce6 | 169 | count_message++; |
AndersonIctus | 18:b6197f50dce6 | 170 | printf("# Message Sent to Network Server - Count [%d] \r\n", count_message); |
AndersonIctus | 18:b6197f50dce6 | 171 | break; |
AndersonIctus | 18:b6197f50dce6 | 172 | case TX_TIMEOUT: |
AndersonIctus | 18:b6197f50dce6 | 173 | case TX_ERROR: |
AndersonIctus | 18:b6197f50dce6 | 174 | case TX_CRYPTO_ERROR: |
AndersonIctus | 18:b6197f50dce6 | 175 | case TX_SCHEDULING_ERROR: |
AndersonIctus | 18:b6197f50dce6 | 176 | printf("# Transmission Error - EventCode = %d \r\n", event); |
AndersonIctus | 18:b6197f50dce6 | 177 | break; |
AndersonIctus | 18:b6197f50dce6 | 178 | case JOIN_FAILURE: |
AndersonIctus | 18:b6197f50dce6 | 179 | printf("# OTAA Failed - Check Keys \r\n"); |
AndersonIctus | 18:b6197f50dce6 | 180 | break; |
AndersonIctus | 18:b6197f50dce6 | 181 | case UPLINK_REQUIRED: |
AndersonIctus | 18:b6197f50dce6 | 182 | printf("# Uplink required by NS \r\n"); |
AndersonIctus | 18:b6197f50dce6 | 183 | send_message(); |
AndersonIctus | 18:b6197f50dce6 | 184 | break; |
AndersonIctus | 18:b6197f50dce6 | 185 | default: |
AndersonIctus | 18:b6197f50dce6 | 186 | printf("# Unknown Event \r\n"); |
AndersonIctus | 18:b6197f50dce6 | 187 | MBED_ASSERT("# Unknown Event"); |
AndersonIctus | 18:b6197f50dce6 | 188 | } |
AndersonIctus | 18:b6197f50dce6 | 189 | } |