fota lib for mdot
mdot/Lora/Mac.h@3:63d10f2375ea, 2018-09-14 (annotated)
- Committer:
- Jenkins@KEILDM1.dc.multitech.prv
- Date:
- Fri Sep 14 15:39:09 2018 -0500
- Revision:
- 3:63d10f2375ea
fota lib updates
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 1 | /** __ ___ ____ _ ______ __ ____ __ ____ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 2 | * / |/ /_ __/ / /_(_)__/_ __/__ ____/ / / __/_ _____ / /____ __ _ ___ / _/__ ____ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 3 | * / /|_/ / // / / __/ /___// / / -_) __/ _ \ _\ \/ // (_-</ __/ -_) ' \(_-< _/ // _ \/ __/ __ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 4 | * /_/ /_/\_,_/_/\__/_/ /_/ \__/\__/_//_/ /___/\_, /___/\__/\__/_/_/_/___/ /___/_//_/\__/ /_/ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 5 | * Copyright (C) 2015 by Multi-Tech Systems /___/ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 6 | * |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 7 | * |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 8 | * @author Jason Reiss |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 9 | * @date 10-31-2015 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 10 | * @brief lora::Mac implements the Mac layer providing mote addressing and packet encryption |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 11 | * |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 12 | * @details |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 13 | * |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 14 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 15 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 16 | #ifndef __LORA_MAC_H__ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 17 | #define __LORA_MAC_H__ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 18 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 19 | #include "Lora.h" |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 20 | #include "ChannelPlan.h" |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 21 | #include "SxRadio.h" |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 22 | #include "SxRadio1272.h" |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 23 | #include "SxRadioEvents.h" |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 24 | #include "MacEvents.h" |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 25 | #include "Crypto.h" |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 26 | #include "Link.h" |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 27 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 28 | namespace lora { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 29 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 30 | class Mac: public SxRadioEvents, public Crypto { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 31 | public: |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 32 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 33 | virtual ~Mac(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 34 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 35 | Mac(SxRadio& radio, MacEvents* events, ChannelPlan* plan, Settings& settings); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 36 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 37 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 38 | * Send a Join Request packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 39 | * @param devEUI |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 40 | * @param appEUI |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 41 | * @param appKey |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 42 | * @return LORA_OK if successful |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 43 | * @return LORA_LINK_BUSY |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 44 | * @return LORA_RADIO_BUSY |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 45 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 46 | uint8_t Join(const uint8_t* devEUI, const uint8_t* appEUI, const uint8_t* appKey); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 47 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 48 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 49 | * Send a packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 50 | * @param port app port to send with payload |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 51 | * @param payload data to send |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 52 | * @param size of payload |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 53 | * @param attempts number of attempts to receive an ACK |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 54 | * @param repeats number of times to repeat packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 55 | * @return LORA_OK if successful |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 56 | * @return LORA_MAX_PAYLOAD_EXCEEDED if payload size exceeds datarate maximum |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 57 | * @return LORA_NO_CHANS_ENABLED if there is not an available channel that supports the current datarate |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 58 | * @return LORA_LINK_BUSY if link was busy |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 59 | * @return LORA_RADIO_BUSY if radio was busy |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 60 | * @return LORA_BUFFER_FULL if mac commands filled the packet, client should resend the packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 61 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 62 | uint8_t Send(uint8_t port, const uint8_t* payload, uint16_t size, uint8_t attempts = 0, uint8_t repeats = 0); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 63 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 64 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 65 | * Prepare frame to be sent over link |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 66 | * @param port to send data to |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 67 | * @param payload to send |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 68 | * @param size of payload |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 69 | * @param attempts 0:Unconfirmed, 1-8:Confirmed |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 70 | * @return LORA_OK |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 71 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 72 | uint8_t PrepareFrame(uint8_t port, const uint8_t* payload, uint8_t size, uint8_t attempts); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 73 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 74 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 75 | * Reset the mac commands buffer |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 76 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 77 | void ResetMacCommands(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 78 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 79 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 80 | * Add a mac command to be sent with next packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 81 | * @param cmd id of command |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 82 | * @param pc number of parameters |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 83 | * @param pv array of parameters |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 84 | * @return LORA_OK if successful |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 85 | * @return LORA_COMMAND_BUFFER_FULL |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 86 | * @return LORA_UNKNOWN_MAC_COMMAND |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 87 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 88 | uint8_t AddMacCommand(uint8_t cmd, uint8_t pc, uint8_t* pv); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 89 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 90 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 91 | * Handle mac command received from server |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 92 | * @param payload received on radio |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 93 | * @param index of mac command id |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 94 | * @param size of mac command list |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 95 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 96 | uint8_t HandleMacCommands(uint8_t* payload, uint8_t index, uint8_t size); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 97 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 98 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 99 | * Handle Join Accept packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 100 | * @param payload received |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 101 | * @param size of payload |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 102 | * @return LORA_OK if successful |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 103 | * @return LORA_JOIN_ERROR if already joined or MIC fails |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 104 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 105 | uint8_t HandleJoinAccept(uint8_t* payload, uint8_t size); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 106 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 107 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 108 | * Handle Packet receipt |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 109 | * Verifies Address and MIC, checks the Frame Control bits for ACK |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 110 | * Then decrypts the payload and handles any Mac Commands |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 111 | * @param payload received |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 112 | * @param size of payload |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 113 | * @param[out] port data was received on |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 114 | * @param[out] length of user data in payload |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 115 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 116 | uint8_t HandleDownlinkPacket(uint8_t* payload, uint8_t size, uint8_t& port, uint8_t& length); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 117 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 118 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 119 | * Check for ACK from server in received packet and notifies Link if present |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 120 | * @param fCtrl frame control byte of packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 121 | * @return LORA_OK |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 122 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 123 | uint8_t CheckFrameControl(DownlinkControl fCtrl); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 124 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 125 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 126 | * Verify that packet address is intended for mote or in list of multicast addresses |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 127 | * @param payload received |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 128 | * @param size of payload |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 129 | * @param[out] address found in header of packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 130 | * @param[out] networkSessionKey associated with address |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 131 | * @param[out] dataSessionKey associated with address |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 132 | * @return LORA_OK if successful |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 133 | * @return LORA_ADDRESS_ERROR if address is not found |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 134 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 135 | uint8_t VerifyAddress(uint8_t* payload, uint8_t size, uint32_t& address, uint8_t* networkSessionKey, uint8_t* dataSessionKey); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 136 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 137 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 138 | * Verify that MIC can be computed with network session key |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 139 | * Frame counter is checked for reset and rollover |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 140 | * @param payload received |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 141 | * @param size of payload |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 142 | * @param address found in header of packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 143 | * @param networkSessionKey |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 144 | * @return LORA_OK if successful |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 145 | * @return LORA_MIC_ERROR |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 146 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 147 | uint8_t VerifyMIC(uint8_t* payload, uint8_t size, uint32_t address, uint8_t* networkSessionKey); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 148 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 149 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 150 | * Event called by Link on start of any tx |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 151 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 152 | virtual void TxStart(void); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 153 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 154 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 155 | * Event called by Link on tx done |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 156 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 157 | virtual void TxDone(void); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 158 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 159 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 160 | * Event called by Link on tx timeout |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 161 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 162 | virtual void TxTimeout(void); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 163 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 164 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 165 | * Event called by Link on rx done |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 166 | * @param payload of received packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 167 | * @param size of received packet in bytes |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 168 | * @param rssi of received packet in dBm |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 169 | * @param snr of received packet two's complement in 1/4 dB |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 170 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 171 | virtual void RxDone(uint8_t *payload, uint16_t size, int16_t rssi, int8_t snr); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 172 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 173 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 174 | * Event called by Link on rx timeout |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 175 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 176 | virtual void RxTimeout(void); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 177 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 178 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 179 | * Event called by Link on rx error |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 180 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 181 | virtual void RxError(void); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 182 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 183 | virtual void LinkIdle(void); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 184 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 185 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 186 | * Current join status |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 187 | * @return true if joined to lora network |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 188 | * @return false if not joined |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 189 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 190 | bool IsJoined(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 191 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 192 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 193 | * Set the dev nonce |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 194 | * The dev nonce is used for deriving session keys and part of the data send on a join request |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 195 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 196 | void SetDeviceNonce(uint16_t nonce); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 197 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 198 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 199 | * Get the dev nonce |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 200 | * The dev nonce is used for deriving session keys and part of the data send on a join request |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 201 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 202 | uint16_t GetDeviceNonce(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 203 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 204 | void SetLoraClass(MoteClass cls); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 205 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 206 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 207 | * Get the current device MoteClass |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 208 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 209 | MoteClass GetLoraClass(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 210 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 211 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 212 | * Get the SNR of the last received packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 213 | * @returns snr in dB |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 214 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 215 | int8_t GetSNR(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 216 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 217 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 218 | * Get the RSSI of the last received packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 219 | * @returns rssi in dB |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 220 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 221 | int16_t GetRSSI(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 222 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 223 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 224 | * Update the statistics with the last received RSSI and SNR |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 225 | * The avg, min and max RSSI and SNR will also be updated |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 226 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 227 | void UpdateStats(int16_t rssi, int16_t snr); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 228 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 229 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 230 | * Get the number of mac command bytes ready to be sent in the next packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 231 | * @return size of buffer in bytes |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 232 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 233 | uint8_t GetMacCommandBufferSize(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 234 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 235 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 236 | * Get the buffer for mac command bytes ready to be sent in the next packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 237 | * @return pointer to command buffer |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 238 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 239 | const uint8_t* GetMacCommandBuffer(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 240 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 241 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 242 | * Clear the buffer for mac command bytes to be sent in the next packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 243 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 244 | void ClearMacCommandBuffer(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 245 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 246 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 247 | * Get the size of the bytes ready to be sent in the next packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 248 | * @returns size of buffer in bytes |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 249 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 250 | uint8_t GetTxBufferSize(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 251 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 252 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 253 | * Get the buffer of bytes ready to be sent in the next packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 254 | * @return pointer to buffer |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 255 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 256 | const uint8_t* GetTxBuffer(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 257 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 258 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 259 | * Get the max duty cycle currently set for device |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 260 | * Aggregated duty cycle = 1 / 2 ^ MaxDutyCycle |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 261 | * Value of 255 should silence device |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 262 | * @return duty cycle 0-15 or 255 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 263 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 264 | uint8_t GetMaxDutyCycle(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 265 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 266 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 267 | * Get the Rx delay value currently used by the Link |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 268 | * @return rxDelay in seconds |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 269 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 270 | uint8_t GetRxDelay(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 271 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 272 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 273 | * Get the MCU sleep time between tx done and the Rx1 window opening |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 274 | * @return Time MCU sleeps between tx done and rx1 open in milliseconds |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 275 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 276 | uint32_t GetRx1SleepTime(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 277 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 278 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 279 | * Get the MCU sleep time between Rx1 window opening and the Rx2 window opening |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 280 | * @return Time MCU sleeps between rx1 open and rx2 open in milliseconds |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 281 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 282 | uint32_t GetRx2SleepTime(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 283 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 284 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 285 | * Get pong received indicator |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 286 | * @return true if pong was received |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 287 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 288 | bool GetPongReceived(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 289 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 290 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 291 | * Get the RSSI of the last received pong |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 292 | * The RSSI will be the strength of the signal received at the gateway |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 293 | * @return rssi in dB |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 294 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 295 | int16_t GetPongRssi(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 296 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 297 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 298 | * Get the SNR of the last received pong |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 299 | * The SNR will be the strength of the signal received at the gateway |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 300 | * @return snr in dB |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 301 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 302 | int16_t GetPongSnr(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 303 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 304 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 305 | * Get the current statistics for the device |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 306 | * @return Statistics |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 307 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 308 | Statistics& GetStats(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 309 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 310 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 311 | * Reset the current statistics for the device |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 312 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 313 | void ResetStats(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 314 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 315 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 316 | * Set the current channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 317 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 318 | void SetChannelPlan(ChannelPlan* plan); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 319 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 320 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 321 | * Set the delay for Rx1 window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 322 | * @param sec time to delay after end of tx, minimum 1 second |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 323 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 324 | uint8_t SetRxDelay(uint8_t sec); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 325 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 326 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 327 | * Set the MCU sleep time between tx done and the Rx1 window opening |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 328 | * @param ms time MCU sleeps between tx done and rx1 open |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 329 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 330 | void SetRx1SleepTime(uint32_t ms); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 331 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 332 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 333 | * Set the MCU sleep time between Rx1 window opening and the Rx2 window opening |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 334 | * @param ms time MCU sleeps between rx1 open and rx2 open |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 335 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 336 | void SetRx2SleepTime(uint32_t ms); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 337 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 338 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 339 | * Set the network mode |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 340 | * @param mode PRIVATE, PUBLIC or PEER_TO_PEER |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 341 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 342 | uint8_t SetNetworkMode(uint8_t mode); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 343 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 344 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 345 | * Get the current state of the MAC layer |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 346 | * @return MAC_IDLE, MAC_TX, MAC_RX |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 347 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 348 | MacState GetState(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 349 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 350 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 351 | * Get the time off air for the current datarate |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 352 | * @return time off air before next TX in ms |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 353 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 354 | uint32_t GetTimeOffAir(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 355 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 356 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 357 | * Open an RX Window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 358 | * @param timeout time in ms to hold window open, 0 for continuous |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 359 | * @param freq frequency to listen on |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 360 | * @param datarate to listen for |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 361 | * @return LORA_OK |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 362 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 363 | uint8_t OpenRxWindow(uint32_t timeout, uint32_t freq, uint8_t datarate); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 364 | uint8_t OpenRxWindow(uint32_t timeout, bool continuous); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 365 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 366 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 367 | * Close the open window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 368 | * @return LORA_OK |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 369 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 370 | uint8_t CloseRxWindow(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 371 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 372 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 373 | * Cancel pending rx windows |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 374 | * @return LORA_OK |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 375 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 376 | uint8_t CancelRxWindows(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 377 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 378 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 379 | * Get datarate properties of given index for current channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 380 | * @param index of datarate |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 381 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 382 | Datarate GetDatarate(uint8_t index); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 383 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 384 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 385 | * Get the max payload size available of current datarate for channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 386 | * @return bytes that can be sent |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 387 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 388 | uint8_t GetMaxPayloadSize(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 389 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 390 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 391 | * Call to wakeup mac layer |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 392 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 393 | void Wakeup(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 394 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 395 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 396 | * Set the event object to report to |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 397 | * @param events object inheriting from MacEvents |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 398 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 399 | void SetEventHandler(MacEvents* events); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 400 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 401 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 402 | * Get the channels in use by current channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 403 | * @return channel frequencies |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 404 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 405 | std::vector<uint32_t> GetChannels(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 406 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 407 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 408 | * Get the downlink channels in use by current channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 409 | * @return channel frequencies |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 410 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 411 | std::vector<uint32_t> GetDownlinkChannels(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 412 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 413 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 414 | * Get the channel datarate ranges in use by current channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 415 | * @return channel datarate ranges |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 416 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 417 | std::vector<uint8_t> GetChannelRanges(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 418 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 419 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 420 | * Enable the default channels of the channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 421 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 422 | void EnableDefaultChannels(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 423 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 424 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 425 | * Get the number of duty bands in the current channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 426 | * @return number of bands |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 427 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 428 | uint8_t GetNumDutyBands(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 429 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 430 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 431 | * Get the time off air for the given duty band |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 432 | * @param band index |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 433 | * @return time off air in ms |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 434 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 435 | uint32_t GetDutyBandTimeOff(uint8_t band); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 436 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 437 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 438 | * Set the time off air for the given duty band |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 439 | * @param band index |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 440 | * @param time off air in ms |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 441 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 442 | void SetDutyBandTimeOff(uint8_t band, uint32_t timeoff); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 443 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 444 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 445 | * Reset internal mac state if timeout or unforeseen error occurs |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 446 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 447 | void ResetState(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 448 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 449 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 450 | * Enable TX CW |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 451 | * return LORA_OK |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 452 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 453 | uint8_t SendContinuous(bool enable); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 454 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 455 | private: |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 456 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 457 | * Helper for clearing MAC commands which can be cleared upon successful uplink |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 458 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 459 | void PostTxMacPrune(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 460 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 461 | Link _link; //!< Link used to manage radio |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 462 | ChannelPlan* _plan; //!< Injected ChannelPlan used by Link to define parameters for tx/rx of packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 463 | SxRadio& _radio; //!< Injected SxRadio object |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 464 | MacEvents* _events; //!< Injected MaxEvents object for event notification to client |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 465 | Settings& _settings; //!< Settings used to configure the Mac |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 466 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 467 | bool _isMulticastPacket; //!< Indicator of multicast packet recieved |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 468 | uint8_t _multicastIndex; //!< Index of multicast session associated with last received packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 469 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 470 | uint8_t _rxBuffer[MAX_PHY_PACKET_SIZE]; //!< Buffer of last packet received |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 471 | uint8_t _rxBufferSize; //!< Size of the last packet received |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 472 | uint8_t _txBuffer[MAX_PHY_PACKET_SIZE]; //!< Buffer of packet to send |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 473 | uint8_t _txBufferSize; //!< Size of buffer to send |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 474 | bool _txBufferFull; //!< Indicates that buffer was filled with mac commands |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 475 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 476 | uint16_t _joinNonce; //!< Random nonce value used for Join Request and to derive session keys |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 477 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 478 | int16_t _rssi; //!< RSSI value of last received packet in dB |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 479 | int16_t _snr; //!< SNR value of last received packet in cB |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 480 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 481 | bool _pongReceived; //!< Indicator of pong received |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 482 | int16_t _pongRssi; //!< RSSI value of last received pong |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 483 | int16_t _pongSnr; //!< SNR value of last received pong |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 484 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 485 | MacState _state; //!< Current mac state |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 486 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 487 | uint32_t _downlinkCounter; //!< Temporary downlink counter |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 488 | bool _duplicateReceived; //!< Indication of duplicate packet received due to missed ack |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 489 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 490 | DownlinkControl _downlinkCtrl; //!< Downlink ctrl status of last rx packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 491 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 492 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 493 | } |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 494 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 495 | #endif // __LORA_MAC_H__ |