fota lib for mdot
mdot/Lora/Lora.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 namespace defines global settings, structures and enums for the lora library |
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 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 17 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 18 | #ifndef __LORA_H__ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 19 | #define __LORA_H__ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 20 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 21 | #include "mbed.h" |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 22 | #include <assert.h> |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 23 | #include "MTSLog.h" |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 24 | //#include <cstring> |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 25 | #include <inttypes.h> |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 26 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 27 | namespace lora { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 28 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 29 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 30 | * Frequency bandwidth of a Datarate, higher bandwidth gives higher datarate |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 31 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 32 | enum Bandwidth { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 33 | BW_125, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 34 | BW_250, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 35 | BW_500, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 36 | BW_FSK = 50 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 37 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 38 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 39 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 40 | * Spreading factor of a Datarate, lower spreading factor gives higher datarate |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 41 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 42 | enum SpreadingFactors { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 43 | SF_6 = 6, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 44 | SF_7, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 45 | SF_8, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 46 | SF_9, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 47 | SF_10, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 48 | SF_11, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 49 | SF_12, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 50 | SF_FSK, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 51 | SF_INVALID |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 52 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 53 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 54 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 55 | * Datarates for use with ChannelPlan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 56 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 57 | enum Datarates { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 58 | DR_0 = 0, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 59 | DR_1, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 60 | DR_2, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 61 | DR_3, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 62 | DR_4, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 63 | DR_5, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 64 | DR_6, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 65 | DR_7, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 66 | DR_8, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 67 | DR_9, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 68 | DR_10, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 69 | DR_11, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 70 | DR_12, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 71 | DR_13, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 72 | DR_14, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 73 | DR_15 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 74 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 75 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 76 | const uint8_t MIN_DATARATE = (uint8_t) DR_0; //!< Minimum datarate |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 77 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 78 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 79 | const uint8_t MAX_PHY_PACKET_SIZE = 255; //!< Maximum size for a packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 80 | const uint8_t MAX_APPS = 8; //!< Maximum number of apps sessions to save |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 81 | const uint8_t MAX_MULTICAST_SESSIONS = 8; //!< Maximum number of multicast sessions to save |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 82 | const uint8_t EUI_SIZE = 8; //!< Number of bytes in an EUI |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 83 | const uint8_t KEY_SIZE = 16; //!< Number of bytes in an AES key |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 84 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 85 | const uint8_t DEFAULT_NUM_CHANNELS = 16; //!< Default number of channels in a plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 86 | const uint8_t DEFAULT_RX1_DR_OFFSET = 0; //!< Default datarate offset for first rx window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 87 | const uint8_t DEFAULT_RX2_DATARATE = 0; //!< Default datarate for second rx window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 88 | const uint8_t DEFAULT_TX_POWER = 14; //!< Default transmit power |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 89 | const uint8_t DEFAULT_CODE_RATE = 1; //!< Default coding rate 1:4/5, 2:4/6, 3:4/7, 4:4/8 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 90 | const uint8_t DEFAULT_PREAMBLE_LEN = 8; //!< Default preamble length |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 91 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 92 | const int32_t MAX_FCNT_GAP = 16384; //!< Maximum allowed gap in sequence numbers before roll-over |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 93 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 94 | const uint16_t PRIVATE_JOIN_DELAY = 1000; //!< Default join delay used for private network |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 95 | const uint16_t PUBLIC_JOIN_DELAY = 5000; //!< Default join delay used for public network |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 96 | const uint16_t DEFAULT_JOIN_DELAY = PRIVATE_JOIN_DELAY; //!< Default join delay1 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 97 | const uint16_t DEFAULT_RX_DELAY = 1000; //!< Default delay for first receive window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 98 | const uint16_t DEFAULT_RX_TIMEOUT = 3000; //!< Default timeout for receive windows |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 99 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 100 | const uint8_t HI_DR_SYMBOL_TIMEOUT = 12; //!< Symbol timeout for receive at datarate with SF < 11 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 101 | const uint8_t LO_DR_SYMBOL_TIMEOUT = 8; //!< Symbol timeout for receive at datarate with SF > 10 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 102 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 103 | const uint16_t RX2_DELAY_OFFSET = 1000; //!< Delay between first and second window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 104 | const uint16_t RXC_OFFSET = 50; //!< Time between end of RXC after TX and RX1 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 105 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 106 | const uint8_t US915_125K_NUM_CHANS = 64; //!< Number of 125k channels in US915 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 107 | const uint8_t US915_500K_NUM_CHANS = 8; //!< Number of 500k channels in US915 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 108 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 109 | const uint32_t US915_125K_FREQ_BASE = 902300000; //!< Frequency base for 125k US915 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 110 | const uint32_t US915_125K_FREQ_STEP = 200000; //!< Frequency step for 125k US915 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 111 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 112 | const uint32_t US915_500K_FREQ_BASE = 903000000; //!< Frequency base for 500k US915 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 113 | const uint32_t US915_500K_FREQ_STEP = 1600000; //!< Frequency step for 500k US915 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 114 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 115 | const uint32_t US915_500K_DBASE = 923300000; //!< Frequency base for 500k US915 downlink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 116 | const uint32_t US915_500K_DSTEP = 600000; //!< Frequency step for 500k US915 downlink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 117 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 118 | const uint32_t US915_FREQ_MIN = 902000000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 119 | const uint32_t US915_FREQ_MAX = 928000000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 120 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 121 | const uint8_t US915_MIN_DATARATE = (uint8_t) DR_0; //!< Minimum transmit datarate for US915 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 122 | const uint8_t US915_MAX_DATARATE = (uint8_t) DR_4; //!< Maximum transmit datarate for US915 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 123 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 124 | const uint8_t US915_MIN_DATARATE_OFFSET = (uint8_t) 0; //!< Minimum transmit datarate for US915 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 125 | const uint8_t US915_MAX_DATARATE_OFFSET = (uint8_t) 3; //!< Maximum transmit datarate for US915 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 126 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 127 | const uint8_t AU915_125K_NUM_CHANS = 64; //!< Number of 125k channels in AU915 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 128 | const uint8_t AU915_500K_NUM_CHANS = 8; //!< Number of 500k channels in AU915 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 129 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 130 | const uint32_t AU915_125K_FREQ_BASE = 915200000; //!< Frequency base for 125k AU915 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 131 | const uint32_t AU915_125K_FREQ_STEP = 200000; //!< Frequency step for 125k AU915 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 132 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 133 | const uint32_t AU915_500K_FREQ_BASE = 915900000; //!< Frequency base for 500k AU915 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 134 | const uint32_t AU915_500K_FREQ_STEP = 1600000; //!< Frequency step for 500k AU915 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 135 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 136 | const uint32_t AU915_500K_DBASE = 923300000; //!< Frequency base for 500k AU915 downlink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 137 | const uint32_t AU915_500K_DSTEP = 600000; //!< Frequency step for 500k AU915 downlink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 138 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 139 | const uint32_t AU915_FREQ_MIN = 915000000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 140 | const uint32_t AU915_FREQ_MAX = 928000000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 141 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 142 | const uint8_t AU915_MIN_DATARATE = (uint8_t) DR_0; //!< Minimum transmit datarate for AU915 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 143 | const uint8_t AU915_MAX_DATARATE = (uint8_t) DR_6; //!< Maximum transmit datarate for AU915 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 144 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 145 | const uint8_t AU915_MIN_DATARATE_OFFSET = (uint8_t) 0; //!< Minimum transmit datarate for AU915 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 146 | const uint8_t AU915_MAX_DATARATE_OFFSET = (uint8_t) 5; //!< Maximum transmit datarate for AU915 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 147 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 148 | const uint8_t EU868_125K_NUM_CHANS = 16; //!< Number of 125k channels in EU868 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 149 | const uint8_t EU868_DEFAULT_NUM_CHANS = 3; //!< Number of default channels in EU868 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 150 | const uint32_t EU868_125K_FREQ_BASE = 868100000; //!< Frequency base for 125k EU868 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 151 | const uint32_t EU868_125K_FREQ_STEP = 200000; //!< Frequency step for 125k EU868 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 152 | const uint32_t EU868_RX2_FREQ = 869525000; //!< Frequency default for second rx window in EU868 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 153 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 154 | const uint8_t EU868_TX_POWER_MAX = 14; //!< Max power for EU868 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 155 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 156 | const uint8_t KR920_125K_NUM_CHANS = 16; //!< Number of 125k channels in KR920 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 157 | const uint8_t KR920_DEFAULT_NUM_CHANS = 3; //!< Number of default channels in KR920 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 158 | const uint32_t KR920_125K_FREQ_BASE = 868100000; //!< Frequency base for 125k KR920 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 159 | const uint32_t KR920_125K_FREQ_STEP = 200000; //!< Frequency step for 125k KR920 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 160 | const uint32_t KR920_RX2_FREQ = 869525000; //!< Frequency default for second rx window in KR920 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 161 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 162 | const uint8_t KR920_TX_POWER_MAX = 14; //!< Max power for KR920 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 163 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 164 | const uint8_t AS923_125K_NUM_CHANS = 16; //!< Number of 125k channels in AS923 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 165 | const uint8_t AS923_DEFAULT_NUM_CHANS = 2; //!< Number of default channels in AS923 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 166 | const uint32_t AS923_125K_FREQ_BASE = 868100000; //!< Frequency base for 125k AS923 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 167 | const uint32_t AS923_125K_FREQ_STEP = 200000; //!< Frequency step for 125k AS923 uplink channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 168 | const uint32_t AS923_RX2_FREQ = 869525000; //!< Frequency default for second rx window in AS923 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 169 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 170 | const uint8_t AS923_TX_POWER_MAX = 14; //!< Max power for AS923 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 171 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 172 | const uint8_t IN865_125K_NUM_CHANS = 16; //!< Number of 125k channels in IN865 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 173 | const uint8_t IN865_DEFAULT_NUM_CHANS = 3; //!< Number of default channels in IN865 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 174 | const uint32_t IN865_125K_DEF_FREQ_1 = 865062500; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 175 | const uint32_t IN865_125K_DEF_FREQ_2 = 865402500; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 176 | const uint32_t IN865_125K_DEF_FREQ_3 = 865985000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 177 | const uint32_t IN865_RX2_FREQ = 866550000; //!< Frequency default for second rx window in IN865 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 178 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 179 | const uint8_t IN865_TX_POWER_MAX = 30; //!< Max power for IN865 channel plan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 180 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 181 | // 0.1% duty cycle 863-868 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 182 | // Limiting to 865-868 allows for 1% duty cycle |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 183 | const uint32_t EU868_MILLI_FREQ_MIN = 865000000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 184 | const uint32_t EU868_MILLI_FREQ_MAX = 868000000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 185 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 186 | const uint32_t EU868_MILLI_1_FREQ_MIN = 868700000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 187 | const uint32_t EU868_MILLI_1_FREQ_MAX = 869200000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 188 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 189 | // 1% duty cycle |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 190 | const uint32_t EU868_CENTI_FREQ_MIN = 868000000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 191 | const uint32_t EU868_CENTI_FREQ_MAX = 868600000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 192 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 193 | // 10% duty cycle |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 194 | const uint32_t EU868_DECI_FREQ_MIN = 869400000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 195 | const uint32_t EU868_DECI_FREQ_MAX = 869650000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 196 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 197 | // Below 7dBm there is no duty cycle for these frequencies |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 198 | // Up to 14dBm there is 1% duty cycle |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 199 | const uint32_t EU868_VAR_FREQ_MIN = 869700000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 200 | const uint32_t EU868_VAR_FREQ_MAX = 870000000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 201 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 202 | const uint32_t EU868_FREQ_MIN = 863000000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 203 | const uint32_t EU868_FREQ_MAX = 870000000; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 204 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 205 | const uint8_t EU868_MIN_DATARATE = (uint8_t) DR_0; //!< Minimum transmit datarate for EU868 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 206 | const uint8_t EU868_MAX_DATARATE = (uint8_t) DR_7; //!< Maximum transmit datarate for EU868 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 207 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 208 | const uint8_t EU868_MIN_DATARATE_OFFSET = (uint8_t) 0; //!< Minimum transmit datarate for US915 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 209 | const uint8_t EU868_MAX_DATARATE_OFFSET = (uint8_t) 5; //!< Maximum transmit datarate for US915 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 210 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 211 | const int16_t DEFAULT_FREE_CHAN_RSSI_THRESHOLD = -90; //!< Threshold for channel activity detection (CAD) dBm |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 212 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 213 | const uint8_t CHAN_MASK_SIZE = 16; //!< Number of bits in a channel mask |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 214 | const uint8_t COMMANDS_BUFFER_SIZE = 15; //!< Size of Mac Command buffer |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 215 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 216 | const uint8_t PKT_HEADER = 0; //!< Index to packet mHdr field |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 217 | const uint8_t PKT_ADDRESS = 1; //!< Index to first byte of packet address field |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 218 | const uint8_t PKT_FRAME_CONTROL = PKT_ADDRESS + 4; //!< Index to packet fCtrl field @see UplinkControl |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 219 | const uint8_t PKT_FRAME_COUNTER = PKT_FRAME_CONTROL + 1; //!< Index to packet frame counter field |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 220 | const uint8_t PKT_OPTIONS_START = PKT_FRAME_COUNTER + 2; //!< Index to start of optional mac commands |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 221 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 222 | const uint8_t PKT_JOIN_APP_NONCE = 1; //!< Index to application nonce in Join Accept message |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 223 | const uint8_t PKT_JOIN_NETWORK_ID = 4; //!< Index to network id in Join Accept message |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 224 | const uint8_t PKT_JOIN_NETWORK_ADDRESS = 7; //!< Index to network address in Join Accept message |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 225 | const uint8_t PKT_JOIN_DL_SETTINGS = 11; //!< Index to downlink settings in Join Accept message |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 226 | const uint8_t PKT_JOIN_RX_DELAY = 12; //!< Index to rx delay in Join Accept message |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 227 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 228 | const uint8_t ADR_ACK_LIMIT = 64; //!< Number of packets without ADR ACK Request |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 229 | const uint8_t ADR_ACK_DELAY = 32; //!< Number of packets to expect ADR ACK Response within |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 230 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 231 | const uint16_t ACK_TIMEOUT = 2000; //!< Base millisecond timeout to resend after missed ACK |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 232 | const uint16_t ACK_TIMEOUT_RND = 1000; //!< Random millisecond adjustment to resend after missed ACK |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 233 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 234 | const uint8_t FRAME_OVERHEAD = 13; //!< Bytes of network info overhead in a frame |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 235 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 236 | const uint16_t MAX_OFF_AIR_WAIT = 5000U; //!< Max time in ms to block for a duty cycle restriction to expire before erroring out |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 237 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 238 | * Settings for type of network |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 239 | * |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 240 | * PRIVATE_MTS - Sync Word 0x12, US/AU Downlink frequencies per Frequency Sub Band |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 241 | * PUBLIC_LORAWAN - Sync Word 0x34 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 242 | * PRIVATE_LORAWAN - Sync Word 0x12 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 243 | * PEER_TO_PEER - Sync Word 0x56 used for Dot to Dot communication |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 244 | * |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 245 | * Join Delay window settings are independent of Network Type setting |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 246 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 247 | enum NetworkType { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 248 | PRIVATE_MTS = 0, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 249 | PUBLIC_LORAWAN = 1, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 250 | PRIVATE_LORAWAN = 2, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 251 | PEER_TO_PEER = 4 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 252 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 253 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 254 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 255 | * Enum for on/off settings |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 256 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 257 | enum Enabled { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 258 | OFF = 0, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 259 | ON = 1 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 260 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 261 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 262 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 263 | * Return status of mac functions |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 264 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 265 | enum MacStatus { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 266 | LORA_OK = 0, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 267 | LORA_ERROR = 1, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 268 | LORA_JOIN_ERROR = 2, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 269 | LORA_SEND_ERROR = 3, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 270 | LORA_MIC_ERROR = 4, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 271 | LORA_ADDRESS_ERROR = 5, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 272 | LORA_NO_CHANS_ENABLED = 6, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 273 | LORA_COMMAND_BUFFER_FULL = 7, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 274 | LORA_UNKNOWN_MAC_COMMAND = 8, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 275 | LORA_ADR_OFF = 9, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 276 | LORA_BUSY = 10, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 277 | LORA_LINK_BUSY = 11, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 278 | LORA_RADIO_BUSY = 12, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 279 | LORA_BUFFER_FULL = 13, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 280 | LORA_JOIN_BACKOFF = 14, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 281 | LORA_NO_FREE_CHAN = 15, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 282 | LORA_AGGREGATED_DUTY_CYCLE = 16, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 283 | LORA_MAC_COMMAND_ERROR = 17, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 284 | LORA_MAX_PAYLOAD_EXCEEDED = 18, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 285 | LORA_LBT_CHANNEL_BUSY = 19 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 286 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 287 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 288 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 289 | * State for Link |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 290 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 291 | enum LinkState { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 292 | LINK_IDLE = 0, //!< Link ready to send or receive |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 293 | LINK_TX, //!< Link is busy sending |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 294 | LINK_ACK_TX, //!< Link is busy resending after missed ACK |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 295 | LINK_REP_TX, //!< Link is busy repeating |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 296 | LINK_RX, //!< Link has receive window open |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 297 | LINK_RX1, //!< Link has first received window open |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 298 | LINK_RX2, //!< Link has second received window open |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 299 | LINK_RXC, //!< Link has class C received window open |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 300 | LINK_P2P, //!< Link is busy sending |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 301 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 302 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 303 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 304 | * State for MAC |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 305 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 306 | enum MacState { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 307 | MAC_IDLE, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 308 | MAC_RX1, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 309 | MAC_RX2, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 310 | MAC_RXC, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 311 | MAC_TX, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 312 | MAC_JOIN |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 313 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 314 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 315 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 316 | * Operation class for device |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 317 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 318 | enum MoteClass { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 319 | CLASS_A = 0x00, //!< Device can only receive in windows opened after a transmit |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 320 | CLASS_B = 0x01, //!< Device can receive in windows sychronized with gateway beacon |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 321 | CLASS_C = 0x02 //!< Device can receive any time when not transmitting |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 322 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 323 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 324 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 325 | * Direction of a packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 326 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 327 | enum Direction { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 328 | DIR_UP = 0, //!< Packet is sent from mote to gateway |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 329 | DIR_DOWN = 1, //!< Packet was received from gateway |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 330 | DIR_PEER = 2 //!< Packet was received from peer |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 331 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 332 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 333 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 334 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 335 | * Received window used by Link |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 336 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 337 | enum ReceiveWindows { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 338 | RX_1 = 1, //!< First receive window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 339 | RX_2, //!< Second receive window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 340 | RX_BEACON, //!< Beacon receive window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 341 | RX_SLOT, //!< Ping Slot receive window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 342 | RXC, //!< Class C continuous window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 343 | RX_TEST |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 344 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 345 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 346 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 347 | * Datarate range for a Channel |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 348 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 349 | typedef union { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 350 | int8_t Value; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 351 | struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 352 | int8_t Min :4; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 353 | int8_t Max :4; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 354 | } Fields; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 355 | } DatarateRange; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 356 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 357 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 358 | * Datarate used for transmitting and receiving |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 359 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 360 | typedef struct Datarate { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 361 | uint8_t Index; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 362 | uint8_t Bandwidth; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 363 | uint8_t Coderate; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 364 | uint8_t PreambleLength; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 365 | uint8_t SpreadingFactor; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 366 | uint8_t Crc; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 367 | uint8_t TxIQ; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 368 | uint8_t RxIQ; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 369 | uint8_t SymbolTimeout(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 370 | Datarate(); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 371 | } Datarate; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 372 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 373 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 374 | * Channel used for transmitting |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 375 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 376 | typedef struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 377 | uint8_t Index; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 378 | uint32_t Frequency; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 379 | DatarateRange DrRange; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 380 | } Channel; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 381 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 382 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 383 | * Receive window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 384 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 385 | typedef struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 386 | uint8_t Index; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 387 | uint32_t Frequency; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 388 | uint8_t DatarateIndex; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 389 | } RxWindow; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 390 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 391 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 392 | * Duty band for limiting time-on-air for regional regulations |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 393 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 394 | typedef struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 395 | uint8_t Index; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 396 | uint32_t FrequencyMin; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 397 | uint32_t FrequencyMax; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 398 | uint8_t PowerMax; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 399 | uint16_t DutyCycle; //!< Multiplier of time on air, 0:100%, 1:50%, 2:33%, 10:10%, 100:1%, 1000,0.1% |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 400 | uint32_t TimeOffEnd; //!< Timestamp when this band will be available |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 401 | } DutyBand; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 402 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 403 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 404 | * Device configuration |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 405 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 406 | typedef struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 407 | uint8_t FrequencyBand; //!< Used to choose ChannelPlan |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 408 | uint8_t EUI[8]; //!< Unique identifier assigned to device |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 409 | } DeviceConfig; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 410 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 411 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 412 | * Network configuration |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 413 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 414 | typedef struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 415 | uint8_t Mode; //!< PUBLIC, PRIVATE or PEER_TO_PEER network mode |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 416 | uint8_t Class; //!< Operating class of device |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 417 | uint8_t EUI[8]; //!< Network ID or AppEUI |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 418 | uint8_t Key[16]; //!< Network Key or AppKey |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 419 | uint8_t JoinDelay; //!< Number of seconds to wait before 1st RX Window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 420 | uint8_t RxDelay; //!< Number of seconds to wait before 1st RX Window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 421 | uint8_t FrequencySubBand; //!< FrequencySubBand used for US915 hybrid operation 0:72 channels, 1:1-8 channels ... |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 422 | uint8_t AckAttempts; //!< Number of attempts to send packet and receive an ACK from server |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 423 | uint8_t Retries; //!< Number of times to resend a packet without receiving an ACK, redundancy |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 424 | uint8_t ADREnabled; //!< Enable adaptive datarate |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 425 | uint8_t CADEnabled; //!< Enable listen before talk/channel activity detection |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 426 | uint8_t RepeaterMode; //!< Limit payloads to repeater compatible sizes |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 427 | uint8_t TxPower; //!< Default radio output power in dBm |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 428 | uint8_t TxPowerMax; //!< Max transmit power |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 429 | uint8_t TxDatarate; //!< Datarate for P2P transmit |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 430 | uint32_t TxFrequency; //!< Frequency for P2P transmit |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 431 | int8_t AntennaGain; //!< Antenna Gain |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 432 | uint8_t DisableEncryption; //!< Disable Encryption |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 433 | uint8_t DisableCRC; //!< Disable CRC on uplink packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 434 | uint16_t P2PACKTimeout; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 435 | uint16_t P2PACKBackoff; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 436 | uint8_t JoinRx1DatarateOffset; //!< Offset for datarate for first window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 437 | uint32_t JoinRx2Frequency; //!< Frequency used in second window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 438 | uint8_t JoinRx2DatarateIndex; //!< Datarate for second window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 439 | } NetworkConfig; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 440 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 441 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 442 | * Network session info |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 443 | * Some settings are acquired in join message and others may be changed through Mac Commands from server |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 444 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 445 | typedef struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 446 | uint8_t Joined; //!< State of session |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 447 | uint8_t Rx1DatarateOffset; //!< Offset for datarate for first window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 448 | uint32_t Rx2Frequency; //!< Frequency used in second window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 449 | uint8_t Rx2DatarateIndex; //!< Datarate for second window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 450 | uint8_t TxPower; //!< Current total radiated output power in dBm |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 451 | uint8_t TxDatarate; //!< Current datarate can be changed when ADR is enabled |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 452 | uint32_t Address; //!< Network address |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 453 | uint32_t NetworkID; //!< Network ID 24-bits |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 454 | uint8_t NetworkSessionKey[16]; //!< Network session key |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 455 | uint8_t ApplicationSessionKey[16]; //!< Data session key |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 456 | uint16_t ChannelMask[4]; //!< Current channel mask |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 457 | uint16_t ChannelMask500k; //!< Current channel mask for 500k channels |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 458 | uint32_t DownlinkCounter; //!< Downlink counter of last packet received from server |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 459 | uint32_t UplinkCounter; //!< Uplink counter of last packet received from server |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 460 | uint8_t Redundancy; //!< Number of time to repeat an uplink |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 461 | uint8_t MaxDutyCycle; //!< Current Max Duty Cycle value |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 462 | uint32_t JoinTimeOnAir; //!< Balance of time on air used during join attempts |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 463 | uint32_t JoinTimeOffEnd; //!< RTC time of next join attempt |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 464 | uint32_t JoinFirstAttempt; //!< RTC time of first failed join attempt |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 465 | uint32_t AggregatedTimeOffEnd; //!< Time off air expiration for aggregate duty cycle |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 466 | uint16_t AggregateDutyCycle; //!< Used for enforcing time-on-air |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 467 | uint8_t AckCounter; //!< Current number of packets sent without ACK from server |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 468 | uint8_t AdrCounter; //!< Current number of packets received without downlink from server |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 469 | uint8_t RxDelay; //!< Number of seconds to wait before 1st RX Window |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 470 | uint8_t CommandBuffer[COMMANDS_BUFFER_SIZE]; //!< Buffer to hold Mac Commands and parameters to be sent in next packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 471 | uint8_t CommandBufferIndex; //!< Index to place next Mac Command, also current size of Command Buffer |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 472 | bool SrvRequestedAck; //!< Indicator of ACK requested by server in last packet received |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 473 | bool DataPending; //!< Indicator of data pending at server |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 474 | uint8_t RxTimingSetupReqReceived; //!< Indicator that RxTimingSetupAns should be included in uplink |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 475 | uint8_t RxParamSetupReqAnswer; //!< Indicator that RxParamSetupAns should be included in uplink |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 476 | uint8_t DlChannelReqAnswer; //!< Indicator that DlChannelAns should be included in uplink |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 477 | uint8_t DownlinkDwelltime; //!< On air dwell time for downlink packets 0:NONE,1:400ms |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 478 | uint8_t UplinkDwelltime; //!< On air dwell time for uplink packets 0:NONE,1:400ms |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 479 | uint8_t Max_EIRP; //!< Maximum allowed EIRP for uplink |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 480 | } NetworkSession; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 481 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 482 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 483 | * Multicast session info |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 484 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 485 | typedef struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 486 | uint32_t Address; //!< Network address |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 487 | uint8_t NetworkSessionKey[16]; //!< Network session key |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 488 | uint8_t DataSessionKey[16]; //!< Data session key |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 489 | uint32_t DownlinkCounter; //!< Downlink counter of last packet received from server |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 490 | } MulticastSession; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 491 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 492 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 493 | * Application configuration |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 494 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 495 | typedef struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 496 | uint8_t Port; //!< Port used by application |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 497 | uint8_t AppEUI; //!< Application ID |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 498 | uint8_t AppKey[16]; //!< Application Key |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 499 | } ApplicationConfig; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 500 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 501 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 502 | * Statistics of current network session |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 503 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 504 | typedef struct Statistics { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 505 | uint32_t Up; //!< Number of uplink packets sent |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 506 | uint32_t Down; //!< Number of downlink packets received |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 507 | uint32_t Joins; //!< Number of join requests sent |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 508 | uint32_t JoinFails; //!< Number of join requests without response or invalid response |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 509 | uint32_t MissedAcks; //!< Number of missed acknowledgement attempts of confirmed packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 510 | uint32_t CRCErrors; //!< Number of CRC errors in received packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 511 | int32_t AvgCount; //!< Number of packets used to compute rolling average of RSSI and SNR |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 512 | int16_t Rssi; //!< RSSI of last packet received |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 513 | int16_t RssiMin; //!< Minimum RSSI of last AvgCount packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 514 | int16_t RssiMax; //!< Maximum RSSI of last AvgCount packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 515 | int16_t RssiAvg; //!< Rolling average RSSI of last AvgCount packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 516 | int16_t Snr; //!< SNR of last packet received |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 517 | int16_t SnrMin; //!< Minimum SNR of last AvgCount packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 518 | int16_t SnrMax; //!< Maximum SNR of last AvgCount packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 519 | int16_t SnrAvg; //!< Rolling average SNR of last AvgCount packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 520 | } Statistics; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 521 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 522 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 523 | * Testing settings |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 524 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 525 | typedef struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 526 | uint8_t TestMode; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 527 | uint8_t SkipMICCheck; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 528 | uint8_t DisableDutyCycle; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 529 | uint8_t DisableRx1; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 530 | uint8_t DisableRx2; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 531 | uint8_t FixedUplinkCounter; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 532 | uint8_t DisableRandomJoinDatarate; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 533 | } Testing; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 534 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 535 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 536 | * Combination of device, network, testing settings and statistics |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 537 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 538 | typedef struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 539 | DeviceConfig Device; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 540 | NetworkConfig Network; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 541 | NetworkSession Session; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 542 | ApplicationConfig Applications[MAX_APPS]; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 543 | MulticastSession Multicast[MAX_MULTICAST_SESSIONS]; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 544 | Statistics Stats; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 545 | Testing Test; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 546 | } Settings; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 547 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 548 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 549 | * Downlink settings sent in Join Accept message |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 550 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 551 | typedef union { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 552 | uint8_t Value; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 553 | struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 554 | uint8_t Rx2Datarate :4; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 555 | uint8_t Rx1Offset :3; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 556 | uint8_t RFU :1; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 557 | }; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 558 | } DownlinkSettings; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 559 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 560 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 561 | * Frame structure for Join Request |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 562 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 563 | typedef struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 564 | uint8_t Type; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 565 | uint8_t AppEUI[8]; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 566 | uint8_t DevEUI[8]; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 567 | uint8_t Nonce[2]; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 568 | uint8_t MIC[4]; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 569 | } JoinRequestFrame; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 570 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 571 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 572 | * Mac header of uplink and downlink packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 573 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 574 | typedef union { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 575 | uint8_t Value; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 576 | struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 577 | uint8_t Major :2; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 578 | uint8_t RFU :3; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 579 | uint8_t MType :3; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 580 | } Bits; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 581 | } MacHeader; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 582 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 583 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 584 | * Frame control field of uplink packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 585 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 586 | typedef union { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 587 | uint8_t Value; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 588 | struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 589 | uint8_t OptionsLength :4; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 590 | uint8_t ClassB :1; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 591 | uint8_t Ack :1; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 592 | uint8_t AdrAckReq :1; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 593 | uint8_t Adr :1; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 594 | } Bits; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 595 | } UplinkControl; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 596 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 597 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 598 | * Frame control field of downlink packets |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 599 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 600 | typedef union { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 601 | uint8_t Value; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 602 | struct { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 603 | uint8_t OptionsLength :4; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 604 | uint8_t FPending :1; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 605 | uint8_t Ack :1; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 606 | uint8_t RFU :1; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 607 | uint8_t Adr :1; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 608 | } Bits; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 609 | } DownlinkControl; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 610 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 611 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 612 | * Frame type of packet |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 613 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 614 | typedef enum { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 615 | FRAME_TYPE_JOIN_REQ = 0x00, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 616 | FRAME_TYPE_JOIN_ACCEPT = 0x01, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 617 | FRAME_TYPE_DATA_UNCONFIRMED_UP = 0x02, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 618 | FRAME_TYPE_DATA_UNCONFIRMED_DOWN = 0x03, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 619 | FRAME_TYPE_DATA_CONFIRMED_UP = 0x04, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 620 | FRAME_TYPE_DATA_CONFIRMED_DOWN = 0x05, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 621 | FRAME_TYPE_RFU = 0x06, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 622 | FRAME_TYPE_PROPRIETARY = 0x07, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 623 | } FrameType; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 624 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 625 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 626 | * LoRaWAN mote MAC commands |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 627 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 628 | typedef enum { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 629 | /* Class A */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 630 | MOTE_MAC_LINK_CHECK_REQ = 0x02, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 631 | MOTE_MAC_LINK_ADR_ANS = 0x03, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 632 | MOTE_MAC_DUTY_CYCLE_ANS = 0x04, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 633 | MOTE_MAC_RX_PARAM_SETUP_ANS = 0x05, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 634 | MOTE_MAC_DEV_STATUS_ANS = 0x06, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 635 | MOTE_MAC_NEW_CHANNEL_ANS = 0x07, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 636 | MOTE_MAC_RX_TIMING_SETUP_ANS = 0x08, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 637 | MOTE_MAC_TX_PARAM_SETUP_ANS = 0x09, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 638 | MOTE_MAC_DL_CHANNEL_ANS = 0x0A, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 639 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 640 | /* Class B */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 641 | MOTE_MAC_PING_SLOT_INFO_REQ = 0x0B, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 642 | MOTE_MAC_PING_SLOT_FREQ_ANS = 0x0C, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 643 | MOTE_MAC_PING_SLOT_CHANNEL_ANS = 0x0D, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 644 | MOTE_MAC_BEACON_TIMING_REQ = 0x0E, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 645 | MOTE_MAC_BEACON_FREQ_ANS = 0x0F, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 646 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 647 | /* Multitech */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 648 | MOTE_MAC_PING_REQ = 0x80, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 649 | MOTE_MAC_CHANGE_CLASS = 0x81, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 650 | MOTE_MAC_MULTIPART_START_REQ = 0x82, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 651 | MOTE_MAC_MULTIPART_START_ANS = 0x83, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 652 | MOTE_MAC_MULTIPART_CHUNK = 0x84, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 653 | MOTE_MAC_MULTIPART_END_REQ = 0x85, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 654 | MOTE_MAC_MULTIPART_END_ANS = 0x86 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 655 | } MoteCommand; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 656 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 657 | /*! |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 658 | * LoRaWAN server MAC commands |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 659 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 660 | typedef enum { |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 661 | /* Class A */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 662 | SRV_MAC_LINK_CHECK_ANS = 0x02, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 663 | SRV_MAC_LINK_ADR_REQ = 0x03, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 664 | SRV_MAC_DUTY_CYCLE_REQ = 0x04, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 665 | SRV_MAC_RX_PARAM_SETUP_REQ = 0x05, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 666 | SRV_MAC_DEV_STATUS_REQ = 0x06, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 667 | SRV_MAC_NEW_CHANNEL_REQ = 0x07, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 668 | SRV_MAC_RX_TIMING_SETUP_REQ = 0x08, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 669 | SRV_MAC_TX_PARAM_SETUP_REQ = 0x09, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 670 | SRV_MAC_DL_CHANNEL_REQ = 0x0A, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 671 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 672 | /* Class B */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 673 | SRV_MAC_PING_SLOT_INFO_ANS = 0x0B, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 674 | SRV_MAC_PING_SLOT_FREQ_REQ = 0x0C, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 675 | SRV_MAC_PING_SLOT_CHANNEL_REQ = 0x0D, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 676 | SRV_MAC_BEACON_TIMING_ANS = 0x0E, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 677 | SRV_MAC_BEACON_FREQ_REQ = 0x0F, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 678 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 679 | /* Multitech */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 680 | SRV_MAC_PING_ANS = 0x80, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 681 | SRV_MAC_CHANGE_CLASS = 0x81, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 682 | SRV_MAC_MULTIPART_START_REQ = 0x82, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 683 | SRV_MAC_MULTIPART_START_ANS = 0x83, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 684 | SRV_MAC_MULTIPART_CHUNK = 0x84, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 685 | SRV_MAC_MULTIPART_END_REQ = 0x85, |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 686 | SRV_MAC_MULTIPART_END_ANS = 0x86 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 687 | } ServerCommand; |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 688 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 689 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 690 | * Random seed for software RNG |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 691 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 692 | void srand(uint32_t seed); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 693 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 694 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 695 | * Software RNG for consistent results across differing hardware |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 696 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 697 | int rand(void); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 698 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 699 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 700 | * Generate random number bounded by min and max |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 701 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 702 | int32_t rand_r(int32_t min, int32_t max); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 703 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 704 | uint8_t CountBits(uint16_t mask); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 705 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 706 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 707 | * Copy 3-bytes network order from array into LSB of integer value |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 708 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 709 | void CopyNetIDtoInt(const uint8_t* arr, uint32_t& val); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 710 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 711 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 712 | * Copy LSB 3-bytes from integer value into array network order |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 713 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 714 | void CopyNetIDtoArray(uint32_t val, uint8_t* arr); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 715 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 716 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 717 | * Copy 4-bytes network order from array in to integer value |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 718 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 719 | void CopyAddrtoInt(const uint8_t* arr, uint32_t& val); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 720 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 721 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 722 | * Copy 4-bytes from integer in to array network order |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 723 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 724 | void CopyAddrtoArray(uint32_t val, uint8_t* arr); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 725 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 726 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 727 | * Copy 3-bytes network order from array into integer value and multiply by 100 |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 728 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 729 | void CopyFreqtoInt(const uint8_t* arr, uint32_t& freq); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 730 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 731 | /** |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 732 | * Reverse memory copy |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 733 | */ |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 734 | void memcpy_r(uint8_t *dst, const uint8_t *src, size_t n); |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 735 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 736 | } |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 737 | |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 738 | #endif |
Jenkins@KEILDM1.dc.multitech.prv | 3:63d10f2375ea | 739 |