SafeDetect / serial_to_lora
Committer:
Jenkins@KEILDM1.dc.multitech.prv
Date:
Thu Aug 29 12:21:40 2019 -0500
Revision:
19:aa5b1fcd05be
Parent:
18:d7332302f5f1
Child:
21:bc12c888e7dc
xdot-library revision 3.2.1 and mbed-os revision mbed-os-5.13.4

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 1 /**********************************************************************
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 2 * COPYRIGHT 2015 MULTI-TECH SYSTEMS, INC.
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 3 *
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 4 * Redistribution and use in source and binary forms, with or without modification,
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 5 * are permitted provided that the following conditions are met:
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 6 * 1. Redistributions of source code must retain the above copyright notice,
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 7 * this list of conditions and the following disclaimer.
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 8 * 2. Redistributions in binary form must reproduce the above copyright notice,
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 9 * this list of conditions and the following disclaimer in the documentation
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 10 * and/or other materials provided with the distribution.
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 11 * 3. Neither the name of MULTI-TECH SYSTEMS, INC. nor the names of its contributors
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 12 * may be used to endorse or promote products derived from this software
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 13 * without specific prior written permission.
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 14 *
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 18 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 21 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 22 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 23 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 25 *
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 26 ******************************************************************************
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 27 */
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 28
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 29 #ifndef MDOT_EVENT_H
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 30 #define MDOT_EVENT_H
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 31
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 32 #include "mbed.h"
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 33 #include "mDot.h"
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 34 #include "MacEvents.h"
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 35 #include "MTSLog.h"
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 36 #include "MTSText.h"
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 37
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 38 typedef union {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 39 uint8_t Value;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 40 struct {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 41 uint8_t :1;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 42 uint8_t Tx :1;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 43 uint8_t Rx :1;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 44 uint8_t RxData :1;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 45 uint8_t RxSlot :2;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 46 uint8_t LinkCheck :1;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 47 uint8_t JoinAccept :1;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 48 } Bits;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 49 } LoRaMacEventFlags;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 50
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 51 typedef enum {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 52 LORAMAC_EVENT_INFO_STATUS_OK = 0,
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 53 LORAMAC_EVENT_INFO_STATUS_ERROR,
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 54 LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT,
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 55 LORAMAC_EVENT_INFO_STATUS_RX_TIMEOUT,
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 56 LORAMAC_EVENT_INFO_STATUS_RX_ERROR,
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 57 LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL,
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 58 LORAMAC_EVENT_INFO_STATUS_DOWNLINK_FAIL,
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 59 LORAMAC_EVENT_INFO_STATUS_ADDRESS_FAIL,
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 60 LORAMAC_EVENT_INFO_STATUS_MIC_FAIL,
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 61 } LoRaMacEventInfoStatus;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 62
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 63 /*!
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 64 * LoRaMAC event information
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 65 */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 66 typedef struct {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 67 LoRaMacEventInfoStatus Status;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 68 lora::DownlinkControl Ctrl;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 69 bool TxAckReceived;
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 70 bool DuplicateRx;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 71 uint8_t TxNbRetries;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 72 uint8_t TxDatarate;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 73 uint8_t RxPort;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 74 uint8_t *RxBuffer;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 75 uint8_t RxBufferSize;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 76 int16_t RxRssi;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 77 uint8_t RxSnr;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 78 uint16_t Energy;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 79 uint8_t DemodMargin;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 80 uint8_t NbGateways;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 81 } LoRaMacEventInfo;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 82
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 83 class mDotEvent: public lora::MacEvents {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 84 public:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 85
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 86 mDotEvent()
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 87 :
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 88 LinkCheckAnsReceived(false),
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 89 DemodMargin(0),
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 90 NbGateways(0),
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 91 PacketReceived(false),
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 92 RxPort(0),
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 93 RxPayloadSize(0),
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 94 BeaconLocked(false),
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 95 PongReceived(false),
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 96 PongRssi(0),
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 97 PongSnr(0),
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 98 ServerTimeReceived(false),
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 99 ServerTimeSeconds(0U),
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 100 AckReceived(false),
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 101 DuplicateRx(false),
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 102 TxNbRetries(0)
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 103 {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 104 memset(&_flags, 0, sizeof(LoRaMacEventFlags));
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 105 memset(&_info, 0, sizeof(LoRaMacEventInfo));
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 106 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 107
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 108 virtual ~mDotEvent() {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 109 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 110
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 111 virtual void MacEvent(LoRaMacEventFlags *flags, LoRaMacEventInfo *info) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 112 if (mts::MTSLog::getLogLevel() == mts::MTSLog::TRACE_LEVEL) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 113 std::string msg = "OK";
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 114 switch (info->Status) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 115 case LORAMAC_EVENT_INFO_STATUS_ERROR:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 116 msg = "ERROR";
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 117 break;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 118 case LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 119 msg = "TX_TIMEOUT";
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 120 break;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 121 case LORAMAC_EVENT_INFO_STATUS_RX_TIMEOUT:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 122 msg = "RX_TIMEOUT";
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 123 break;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 124 case LORAMAC_EVENT_INFO_STATUS_RX_ERROR:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 125 msg = "RX_ERROR";
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 126 break;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 127 case LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 128 msg = "JOIN_FAIL";
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 129 break;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 130 case LORAMAC_EVENT_INFO_STATUS_DOWNLINK_FAIL:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 131 msg = "DOWNLINK_FAIL";
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 132 break;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 133 case LORAMAC_EVENT_INFO_STATUS_ADDRESS_FAIL:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 134 msg = "ADDRESS_FAIL";
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 135 break;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 136 case LORAMAC_EVENT_INFO_STATUS_MIC_FAIL:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 137 msg = "MIC_FAIL";
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 138 break;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 139 default:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 140 break;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 141 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 142 logTrace("Event: %s", msg.c_str());
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 143
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 144 logTrace("Flags Tx: %d Rx: %d RxData: %d RxSlot: %d LinkCheck: %d JoinAccept: %d",
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 145 flags->Bits.Tx, flags->Bits.Rx, flags->Bits.RxData, flags->Bits.RxSlot, flags->Bits.LinkCheck, flags->Bits.JoinAccept);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 146 logTrace("Info: Status: %d ACK: %d Retries: %d TxDR: %d RxPort: %d RxSize: %d RSSI: %d SNR: %d Energy: %d Margin: %d Gateways: %d",
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 147 info->Status, info->TxAckReceived, info->TxNbRetries, info->TxDatarate, info->RxPort, info->RxBufferSize,
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 148 info->RxRssi, info->RxSnr, info->Energy, info->DemodMargin, info->NbGateways);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 149 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 150 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 151
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 152 virtual void TxStart() {
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 153 logDebug("mDotEvent - TxStart");
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 154
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 155 }
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 156
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 157 virtual void TxDone(uint8_t dr) {
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 158 _timeSinceTx.reset();
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 159 _timeSinceTx.start();
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 160
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 161 RxPayloadSize = 0;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 162 LinkCheckAnsReceived = false;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 163 PacketReceived = false;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 164 AckReceived = false;
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 165 DuplicateRx = false;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 166 PongReceived = false;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 167 TxNbRetries = 0;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 168
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 169 logDebug("mDotEvent - TxDone");
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 170 memset(&_flags, 0, sizeof(LoRaMacEventFlags));
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 171 memset(&_info, 0, sizeof(LoRaMacEventInfo));
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 172
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 173 _flags.Bits.Tx = 1;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 174 _info.TxDatarate = dr;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 175 _info.Status = LORAMAC_EVENT_INFO_STATUS_OK;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 176 Notify();
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 177
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 178 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 179
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 180 void Notify() {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 181 MacEvent(&_flags, &_info);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 182 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 183
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 184 virtual void TxTimeout(void) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 185 logDebug("mDotEvent - TxTimeout");
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 186
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 187 _flags.Bits.Tx = 1;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 188 _info.Status = LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 189 Notify();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 190 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 191
Jenkins@KEILDM1.dc.multitech.prv 19:aa5b1fcd05be 192 virtual void JoinAccept(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 193 logDebug("mDotEvent - JoinAccept");
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 194
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 195 _flags.Bits.Tx = 0;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 196 _flags.Bits.JoinAccept = 1;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 197 _info.Status = LORAMAC_EVENT_INFO_STATUS_OK;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 198 Notify();
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 199
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 200 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 201
Jenkins@KEILDM1.dc.multitech.prv 19:aa5b1fcd05be 202 virtual void JoinFailed(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 203 logDebug("mDotEvent - JoinFailed");
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 204
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 205 _flags.Bits.Tx = 0;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 206 _flags.Bits.JoinAccept = 1;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 207 _info.Status = LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 208 Notify();
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 209
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 210 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 211
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 212 virtual void MissedAck(uint8_t retries) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 213 logDebug("mDotEvent - MissedAck : retries %u", retries);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 214 TxNbRetries = retries;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 215 _info.TxNbRetries = retries;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 216 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 217
Jenkins@KEILDM1.dc.multitech.prv 19:aa5b1fcd05be 218 virtual void PacketRx(uint8_t port, uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr, lora::DownlinkControl ctrl, uint8_t slot, uint8_t retries, uint32_t address, bool dupRx) {
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 219 logDebug("mDotEvent - PacketRx ADDR: %08x", address);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 220 RxPort = port;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 221 PacketReceived = true;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 222
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 223 memcpy(RxPayload, payload, size);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 224 RxPayloadSize = size;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 225
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 226 if (ctrl.Bits.Ack) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 227 AckReceived = true;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 228 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 229
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 230 DuplicateRx = dupRx;
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 231
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 232 if (mts::MTSLog::getLogLevel() == mts::MTSLog::TRACE_LEVEL) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 233 std::string packet = mts::Text::bin2hexString(RxPayload, size);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 234 logTrace("Payload: %s", packet.c_str());
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 235 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 236
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 237 _flags.Bits.Tx = 0;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 238 _flags.Bits.Rx = 1;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 239 _flags.Bits.RxData = size > 0;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 240 _flags.Bits.RxSlot = slot;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 241 _info.RxBuffer = payload;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 242 _info.RxBufferSize = size;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 243 _info.RxPort = port;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 244 _info.RxRssi = rssi;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 245 _info.RxSnr = snr;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 246 _info.TxAckReceived = AckReceived;
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 247 _info.DuplicateRx = DuplicateRx;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 248 _info.TxNbRetries = retries;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 249 _info.Status = LORAMAC_EVENT_INFO_STATUS_OK;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 250 Notify();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 251 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 252
Jenkins@KEILDM1.dc.multitech.prv 19:aa5b1fcd05be 253 virtual void RxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr, lora::DownlinkControl ctrl, uint8_t slot) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 254 logDebug("mDotEvent - RxDone");
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 255
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 256 }
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 257
Jenkins@KEILDM1.dc.multitech.prv 19:aa5b1fcd05be 258 virtual void BeaconRx(const lora::BeaconData_t& beacon_data, int16_t rssi, int8_t snr) {
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 259 logDebug("mDotEvent - BeaconRx");
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 260 BeaconLocked = true;
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 261 BeaconData = beacon_data;
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 262 }
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 263
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 264 virtual void BeaconLost() {
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 265 logDebug("mDotEvent - BeaconLost");
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 266 BeaconLocked = false;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 267 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 268
Jenkins@KEILDM1.dc.multitech.prv 19:aa5b1fcd05be 269 virtual void Pong(int16_t m_rssi, int8_t m_snr, int16_t s_rssi, int8_t s_snr) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 270 logDebug("mDotEvent - Pong");
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 271 PongReceived = true;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 272 PongRssi = s_rssi;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 273 PongSnr = s_snr;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 274 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 275
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 276 virtual void ServerTime(uint32_t seconds, uint8_t sub_seconds) {
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 277 logDebug("mDotEvent - ServerTime");
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 278 ServerTimeReceived = true;
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 279
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 280 uint64_t current_server_time_ms = static_cast<uint64_t>(seconds) * 1000 +
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 281 static_cast<uint16_t>(sub_seconds) * 4 + _timeSinceTx.read_ms();
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 282
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 283 ServerTimeSeconds = static_cast<uint32_t>(current_server_time_ms / 1000);
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 284 ServerTimeMillis = static_cast<uint16_t>(current_server_time_ms % 1000);
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 285 }
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 286
Jenkins@KEILDM1.dc.multitech.prv 19:aa5b1fcd05be 287 virtual void NetworkLinkCheck(int16_t m_rssi, int8_t m_snr, int8_t s_snr, uint8_t s_gateways) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 288 logDebug("mDotEvent - NetworkLinkCheck");
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 289 LinkCheckAnsReceived = true;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 290 DemodMargin = s_snr;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 291 NbGateways = s_gateways;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 292
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 293 _flags.Bits.Tx = 0;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 294 _flags.Bits.LinkCheck = 1;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 295 _info.RxRssi = m_rssi;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 296 _info.RxSnr = m_snr;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 297 _info.DemodMargin = s_snr;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 298 _info.NbGateways = s_gateways;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 299 _info.Status = LORAMAC_EVENT_INFO_STATUS_OK;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 300 Notify();
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 301 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 302
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 303 virtual void RxTimeout(uint8_t slot) {
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 304 logDebug("mDotEvent - RxTimeout on Slot %d", slot);
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 305
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 306 _flags.Bits.Tx = 0;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 307 _flags.Bits.RxSlot = slot;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 308 _info.Status = LORAMAC_EVENT_INFO_STATUS_RX_TIMEOUT;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 309 Notify();
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 310
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 311 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 312
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 313 virtual void RxError(uint8_t slot) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 314 logDebug("mDotEvent - RxError");
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 315
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 316 memset(&_flags, 0, sizeof(LoRaMacEventFlags));
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 317 memset(&_info, 0, sizeof(LoRaMacEventInfo));
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 318
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 319 _flags.Bits.RxSlot = slot;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 320 _info.Status = LORAMAC_EVENT_INFO_STATUS_RX_ERROR;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 321 Notify();
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 322
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 323 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 324
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 325 virtual uint8_t MeasureBattery(void) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 326 return 255;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 327 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 328
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 329 bool LinkCheckAnsReceived;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 330 uint8_t DemodMargin;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 331 uint8_t NbGateways;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 332
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 333 bool PacketReceived;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 334 uint8_t RxPort;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 335 uint8_t RxPayload[255];
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 336 uint8_t RxPayloadSize;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 337
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 338 bool BeaconLocked;
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 339 lora::BeaconData_t BeaconData;
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 340
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 341 bool PongReceived;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 342 int16_t PongRssi;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 343 int16_t PongSnr;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 344
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 345 bool ServerTimeReceived;
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 346 uint32_t ServerTimeSeconds;
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 347 uint16_t ServerTimeMillis;
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 348
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 349 bool AckReceived;
Jenkins@KEILDM1.dc.multitech.prv 14:f0c24ce93427 350 bool DuplicateRx;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 351 uint8_t TxNbRetries;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 352
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 353 LoRaMacEventFlags& Flags() {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 354 return _flags;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 355 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 356 LoRaMacEventInfo& Info() {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 357 return _info;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 358 }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 359
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 360 private:
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 361
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 362 LoRaMacEventFlags _flags;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 363 LoRaMacEventInfo _info;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 364
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 365 Timer _timeSinceTx;
Jenkins@KEILDM1.dc.multitech.prv 16:4a382fe8f51b 366
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 367 //
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 368 // /*!
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 369 // * MAC layer event callback prototype.
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 370 // *
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 371 // * \param [IN] flags Bit field indicating the MAC events occurred
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 372 // * \param [IN] info Details about MAC events occurred
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 373 // */
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 374 // virtual void MacEvent(LoRaMacEventFlags *flags, LoRaMacEventInfo *info) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 375 // logDebug("mDotEvent");
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 376 //
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 377 // if (flags->Bits.Rx) {
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 378 // logDebug("Rx");
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 379 //
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 380 // // Event Object must delete RxBuffer
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 381 // delete[] info->RxBuffer;
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 382 // }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 383 // }
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 384 //
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 385
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 386 };
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 387
Jenkins@KEILDM1.dc.multitech.prv 2:4569491293d7 388 #endif // __MDOT_EVENT_H__