Level measurement using range finder and lora technology
Dependencies: Cayenne-LPP SDBlockDevice
inc/lorawan_network.h
- Committer:
- wamae
- Date:
- 2019-06-26
- Revision:
- 0:f930f0440fd5
File content as of revision 0:f930f0440fd5:
#ifndef _LORAWAN_NETWORK_H_ #define _LORAWAN_NETWORK_H_ #include "mbed.h" #include "mbed_trace.h" #include "mbed_events.h" #include "LoRaWANInterface.h" #include "SX1276_LoRaRadio.h" #include "CayenneLPP.h" #include "lora_radio_helper.h" #define MBED_CONF_LORA_APP_PORT 15 // EventQueue is required to dispatch events around EventQueue ev_queue; // Constructing Mbed LoRaWANInterface and passing it down the radio object. static LoRaWANInterface lorawan(radio); // Application specific callbacks static lorawan_app_callbacks_t callbacks; // LoRaWAN stack event handler static void lora_event_handler(lorawan_event_t event); static void lorawan_setup(uint32_t devAddr, uint8_t nwkSKey[16], uint8_t appSKey[16], Callback<void(lorawan_event_t)> lw_event_handler) { if (devAddr == 0x0) { printf("Set your LoRaWAN credentials first!\n"); return; } // Enable trace output for this demo, so we can see what the LoRaWAN stack does mbed_trace_init(); if (lorawan.initialize(&ev_queue) != LORAWAN_STATUS_OK) { printf("[LNWK][ERR ] LoRa initialization failed!\n"); return; } // prepare application callbacks callbacks.events = lw_event_handler; lorawan.add_app_callbacks(&callbacks); // Disable adaptive data rating if (lorawan.disable_adaptive_datarate() != LORAWAN_STATUS_OK) { printf("[LNWK][ERR ] disable_adaptive_datarate failed!\n"); return; } lorawan.set_datarate(0); // SF12BW125 lorawan_connect_t connect_params; connect_params.connect_type = LORAWAN_CONNECTION_ABP; // connect_params.connection_u.otaa.dev_eui = DEV_EUI; // connect_params.connection_u.otaa.app_eui = APP_EUI; // connect_params.connection_u.otaa.app_key = APP_KEY; // connect_params.connection_u.otaa.nb_trials = 3; connect_params.connection_u.abp.dev_addr = devAddr; connect_params.connection_u.abp.nwk_skey = nwkSKey; connect_params.connection_u.abp.app_skey = appSKey; lorawan_status_t retcode = lorawan.connect(connect_params); if (retcode == LORAWAN_STATUS_OK || retcode == LORAWAN_STATUS_CONNECT_IN_PROGRESS) { } else { printf("[LNWK][ERR ] Connection error, code = %d\n", retcode); return; } printf("[LNWK][INFO] Connection - In Progress...\n"); } // This is called from RX_DONE, so whenever a message came in static void receive_message() { uint8_t rx_buffer[50] = { 0 }; int16_t retcode; retcode = lorawan.receive(MBED_CONF_LORA_APP_PORT, rx_buffer, sizeof(rx_buffer), MSG_UNCONFIRMED_FLAG); if (retcode < 0) { printf("[LNWK][WARN] receive() - Error code %d\n", retcode); return; } printf("[LNWK][INFO] Data received on port %d (length %d): ", MBED_CONF_LORA_APP_PORT, retcode); for (uint8_t i = 0; i < retcode; i++) { printf("%02x ", rx_buffer[i]); } printf("\n"); } // Event handler bool lorawan_send(CayenneLPP *payload) { int16_t retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, payload->getBuffer(), payload->getSize(), MSG_UNCONFIRMED_FLAG); // for some reason send() ret\urns -1... I cannot find out why, the stack returns the right number. I feel that this is some weird Emscripten quirk if (retcode < 0) { retcode == LORAWAN_STATUS_WOULD_BLOCK ? printf("[LNWK][WARN] send - duty cycle violation\n") : printf("[LNWK][WARN] send() - Error code %d\n", retcode); return false; } printf("[LNWK][INFO] %d bytes scheduled for transmission\n", retcode); return true; } #endif // _LORAWAN_NETWORK_H_