contain lorawan with serial_rx enabled
Dependencies: pulga-lorawan-drv SPI_MX25R Si1133 BME280
lora_radio.cpp@64:ed68ddac6360, 2021-03-02 (annotated)
- Committer:
- ruschigo
- Date:
- Tue Mar 02 16:57:31 2021 +0000
- Revision:
- 64:ed68ddac6360
- Child:
- 65:4090220e19d2
testing Lora Splited
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ruschigo | 64:ed68ddac6360 | 1 | /** |
ruschigo | 64:ed68ddac6360 | 2 | * Copyright (c) 2017, Arm Limited and affiliates. |
ruschigo | 64:ed68ddac6360 | 3 | * SPDX-License-Identifier: Apache-2.0 |
ruschigo | 64:ed68ddac6360 | 4 | * |
ruschigo | 64:ed68ddac6360 | 5 | * Licensed under the Apache License, Version 2.0 (the "License"); |
ruschigo | 64:ed68ddac6360 | 6 | * you may not use this file except in compliance with the License. |
ruschigo | 64:ed68ddac6360 | 7 | * You may obtain a copy of the License at |
ruschigo | 64:ed68ddac6360 | 8 | * |
ruschigo | 64:ed68ddac6360 | 9 | * http://www.apache.org/licenses/LICENSE-2.0 |
ruschigo | 64:ed68ddac6360 | 10 | * |
ruschigo | 64:ed68ddac6360 | 11 | * Unless required by applicable law or agreed to in writing, software |
ruschigo | 64:ed68ddac6360 | 12 | * distributed under the License is distributed on an "AS IS" BASIS, |
ruschigo | 64:ed68ddac6360 | 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
ruschigo | 64:ed68ddac6360 | 14 | * See the License for the specific language governing permissions and |
ruschigo | 64:ed68ddac6360 | 15 | * limitations under the License. |
ruschigo | 64:ed68ddac6360 | 16 | */ |
ruschigo | 64:ed68ddac6360 | 17 | |
ruschigo | 64:ed68ddac6360 | 18 | #include "lora_radio.h" |
ruschigo | 64:ed68ddac6360 | 19 | #include "lora_radio_helper.h" |
ruschigo | 64:ed68ddac6360 | 20 | |
ruschigo | 64:ed68ddac6360 | 21 | //#include "serial.h" |
ruschigo | 64:ed68ddac6360 | 22 | |
ruschigo | 64:ed68ddac6360 | 23 | using namespace events; |
ruschigo | 64:ed68ddac6360 | 24 | |
ruschigo | 64:ed68ddac6360 | 25 | // Max payload size can be LORAMAC_PHY_MAXPAYLOAD. |
ruschigo | 64:ed68ddac6360 | 26 | // This example only communicates with much shorter messages (<30 bytes). |
ruschigo | 64:ed68ddac6360 | 27 | // If longer messages are used, these buffers must be changed accordingly. |
ruschigo | 64:ed68ddac6360 | 28 | |
ruschigo | 64:ed68ddac6360 | 29 | static uint8_t lora_rx_buffer[30]; |
ruschigo | 64:ed68ddac6360 | 30 | |
ruschigo | 64:ed68ddac6360 | 31 | |
ruschigo | 64:ed68ddac6360 | 32 | /** |
ruschigo | 64:ed68ddac6360 | 33 | * Constructing Mbed LoRaWANInterface and passing it the radio object from lora_radio_helper. |
ruschigo | 64:ed68ddac6360 | 34 | */ |
ruschigo | 64:ed68ddac6360 | 35 | static LoRaWANInterface lorawan(radio); |
ruschigo | 64:ed68ddac6360 | 36 | |
ruschigo | 64:ed68ddac6360 | 37 | |
ruschigo | 64:ed68ddac6360 | 38 | void lorawan_add_callbacks(lorawan_app_callbacks_t LoraWanCallbacks){ |
ruschigo | 64:ed68ddac6360 | 39 | lorawan.add_app_callbacks(&LoraWanCallbacks); |
ruschigo | 64:ed68ddac6360 | 40 | } |
ruschigo | 64:ed68ddac6360 | 41 | |
ruschigo | 64:ed68ddac6360 | 42 | int lorawan_connect(){ |
ruschigo | 64:ed68ddac6360 | 43 | lorawan_status_t retcode; |
ruschigo | 64:ed68ddac6360 | 44 | retcode = lorawan.connect(); |
ruschigo | 64:ed68ddac6360 | 45 | |
ruschigo | 64:ed68ddac6360 | 46 | if (retcode == LORAWAN_STATUS_OK || |
ruschigo | 64:ed68ddac6360 | 47 | retcode == LORAWAN_STATUS_CONNECT_IN_PROGRESS) { |
ruschigo | 64:ed68ddac6360 | 48 | return 0; |
ruschigo | 64:ed68ddac6360 | 49 | } else { |
ruschigo | 64:ed68ddac6360 | 50 | return -1; |
ruschigo | 64:ed68ddac6360 | 51 | } |
ruschigo | 64:ed68ddac6360 | 52 | } |
ruschigo | 64:ed68ddac6360 | 53 | |
ruschigo | 64:ed68ddac6360 | 54 | int lorawan_enable_adaptive_datarate(){ |
ruschigo | 64:ed68ddac6360 | 55 | if (lorawan.enable_adaptive_datarate() != LORAWAN_STATUS_OK) { |
ruschigo | 64:ed68ddac6360 | 56 | return -1; |
ruschigo | 64:ed68ddac6360 | 57 | }else{ |
ruschigo | 64:ed68ddac6360 | 58 | return 0; |
ruschigo | 64:ed68ddac6360 | 59 | } |
ruschigo | 64:ed68ddac6360 | 60 | } |
ruschigo | 64:ed68ddac6360 | 61 | |
ruschigo | 64:ed68ddac6360 | 62 | int lorawan_set_confirmed_msg_retries(unsigned int number_of_retries){ |
ruschigo | 64:ed68ddac6360 | 63 | if (lorawan.set_confirmed_msg_retries(number_of_retries) |
ruschigo | 64:ed68ddac6360 | 64 | != LORAWAN_STATUS_OK) { |
ruschigo | 64:ed68ddac6360 | 65 | return -1; |
ruschigo | 64:ed68ddac6360 | 66 | }else{ |
ruschigo | 64:ed68ddac6360 | 67 | return 0; |
ruschigo | 64:ed68ddac6360 | 68 | } |
ruschigo | 64:ed68ddac6360 | 69 | } |
ruschigo | 64:ed68ddac6360 | 70 | |
ruschigo | 64:ed68ddac6360 | 71 | int lorawan_initialize_stack(EventQueue *ev_queue){ |
ruschigo | 64:ed68ddac6360 | 72 | if(lorawan.initialize(ev_queue) != LORAWAN_STATUS_OK){ |
ruschigo | 64:ed68ddac6360 | 73 | return -1; |
ruschigo | 64:ed68ddac6360 | 74 | }else |
ruschigo | 64:ed68ddac6360 | 75 | return 0; |
ruschigo | 64:ed68ddac6360 | 76 | } |
ruschigo | 64:ed68ddac6360 | 77 | |
ruschigo | 64:ed68ddac6360 | 78 | /** |
ruschigo | 64:ed68ddac6360 | 79 | * Sends a message to the Network Server |
ruschigo | 64:ed68ddac6360 | 80 | */ |
ruschigo | 64:ed68ddac6360 | 81 | int lora_send_message(uint8_t *msg_to_transmit, uint16_t packet_len) |
ruschigo | 64:ed68ddac6360 | 82 | { |
ruschigo | 64:ed68ddac6360 | 83 | int16_t retcode; |
ruschigo | 64:ed68ddac6360 | 84 | int32_t sensor_value; |
ruschigo | 64:ed68ddac6360 | 85 | |
ruschigo | 64:ed68ddac6360 | 86 | retcode = lorawan.send(MBED_CONF_LORA_APP_PORT, msg_to_transmit, packet_len,MSG_UNCONFIRMED_FLAG); |
ruschigo | 64:ed68ddac6360 | 87 | |
ruschigo | 64:ed68ddac6360 | 88 | if (retcode < 0) { |
ruschigo | 64:ed68ddac6360 | 89 | /*retcode == LORAWAN_STATUS_WOULD_BLOCK ? PrintDebugMsg("send - WOULD BLOCK\r\n") |
ruschigo | 64:ed68ddac6360 | 90 | : PrintDebugMsg("\r\n send() Error \r\n"); |
ruschigo | 64:ed68ddac6360 | 91 | */ |
ruschigo | 64:ed68ddac6360 | 92 | /*if (retcode == LORAWAN_STATUS_WOULD_BLOCK) { |
ruschigo | 64:ed68ddac6360 | 93 | //retry in 3 seconds |
ruschigo | 64:ed68ddac6360 | 94 | if (MBED_CONF_LORA_DUTY_CYCLE_ON) { |
ruschigo | 64:ed68ddac6360 | 95 | ev_queue.call_in(10000, send_message); |
ruschigo | 64:ed68ddac6360 | 96 | } |
ruschigo | 64:ed68ddac6360 | 97 | }*/ |
ruschigo | 64:ed68ddac6360 | 98 | |
ruschigo | 64:ed68ddac6360 | 99 | } |
ruschigo | 64:ed68ddac6360 | 100 | return (int)retcode; |
ruschigo | 64:ed68ddac6360 | 101 | } |
ruschigo | 64:ed68ddac6360 | 102 | |
ruschigo | 64:ed68ddac6360 | 103 | /** |
ruschigo | 64:ed68ddac6360 | 104 | * Receive a message from the Network Server |
ruschigo | 64:ed68ddac6360 | 105 | */ |
ruschigo | 64:ed68ddac6360 | 106 | int lora_receive_message() |
ruschigo | 64:ed68ddac6360 | 107 | { |
ruschigo | 64:ed68ddac6360 | 108 | uint8_t port; |
ruschigo | 64:ed68ddac6360 | 109 | int flags; |
ruschigo | 64:ed68ddac6360 | 110 | int16_t retcode = lorawan.receive(lora_rx_buffer, sizeof(lora_rx_buffer), port, flags); |
ruschigo | 64:ed68ddac6360 | 111 | |
ruschigo | 64:ed68ddac6360 | 112 | if (retcode < 0) { |
ruschigo | 64:ed68ddac6360 | 113 | return (int)retcode; |
ruschigo | 64:ed68ddac6360 | 114 | } |
ruschigo | 64:ed68ddac6360 | 115 | |
ruschigo | 64:ed68ddac6360 | 116 | /*Justo for Debug |
ruschigo | 64:ed68ddac6360 | 117 | for (uint8_t i = 0; i < retcode; i++) { |
ruschigo | 64:ed68ddac6360 | 118 | pc.printf("%02x ", rx_buffer[i]); |
ruschigo | 64:ed68ddac6360 | 119 | } |
ruschigo | 64:ed68ddac6360 | 120 | pc.printf("\r\n"); |
ruschigo | 64:ed68ddac6360 | 121 | */ |
ruschigo | 64:ed68ddac6360 | 122 | /* |
ruschigo | 64:ed68ddac6360 | 123 | it clean the buffer, so useless |
ruschigo | 64:ed68ddac6360 | 124 | memset(rx_buffer, 0, sizeof(rx_buffer)); |
ruschigo | 64:ed68ddac6360 | 125 | */ |
ruschigo | 64:ed68ddac6360 | 126 | |
ruschigo | 64:ed68ddac6360 | 127 | return (int)retcode; |
ruschigo | 64:ed68ddac6360 | 128 | } |
ruschigo | 64:ed68ddac6360 | 129 | |
ruschigo | 64:ed68ddac6360 | 130 | |
ruschigo | 64:ed68ddac6360 | 131 | |
ruschigo | 64:ed68ddac6360 | 132 | // EOF |