WizziLab / modem_ref_v5_3_217

Dependents:   modem_ref_helper_for_v5_3_217

Committer:
Jeej
Date:
Mon Aug 27 11:05:33 2018 +0000
Revision:
33:62c1a26e7e84
Parent:
31:517fc900afba
Child:
35:ac940cf8ebe6
RXlev and link budget are now u8

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 19:701d5669f2e9 1 /// ======================================================================
Jeej 19:701d5669f2e9 2 ///
Jeej 19:701d5669f2e9 3 /// Copyright (C) 20XX WizziLab
Jeej 19:701d5669f2e9 4 /// All Rights Reserved
Jeej 19:701d5669f2e9 5 ///
Jeej 19:701d5669f2e9 6 /// =======================================================================
Jeej 19:701d5669f2e9 7 ///
Jeej 19:701d5669f2e9 8 /// @file d7a_1x.h
Jeej 19:701d5669f2e9 9 /// @brief D7A 1.x API (below ALP and FS)
Jeej 19:701d5669f2e9 10 /// @defgroup D7A D7A 1.x API
Jeej 19:701d5669f2e9 11 /// @{
Jeej 19:701d5669f2e9 12 /// =======================================================================
Jeej 19:701d5669f2e9 13
Jeej 19:701d5669f2e9 14 #ifndef __D7A_1X_H__
Jeej 19:701d5669f2e9 15 #define __D7A_1X_H__
Jeej 19:701d5669f2e9 16
Jeej 31:517fc900afba 17 #include "kal_math.h"
Jeej 31:517fc900afba 18
Jeej 19:701d5669f2e9 19 /// @ingroup D7A_API
Jeej 19:701d5669f2e9 20 /// @defgroup D7A_API_STR D7A API (all except APL)
Jeej 19:701d5669f2e9 21 /// @{
Jeej 19:701d5669f2e9 22
Jeej 19:701d5669f2e9 23 // =======================================================================
Jeej 19:701d5669f2e9 24 // d7a_buf_t
Jeej 19:701d5669f2e9 25 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 26 /// Generic D7A buffer structure
Jeej 19:701d5669f2e9 27 // =======================================================================
Jeej 19:701d5669f2e9 28 typedef struct
Jeej 19:701d5669f2e9 29 {
Jeej 19:701d5669f2e9 30 /// Buffer payload length
Jeej 19:701d5669f2e9 31 u8 len;
Jeej 19:701d5669f2e9 32 /// Payload start offset (Result length)
Jeej 19:701d5669f2e9 33 u8 pof;
Jeej 19:701d5669f2e9 34 /// Shadow buffer payload length (snap/restore)
Jeej 19:701d5669f2e9 35 u8 shadow_len;
Jeej 19:701d5669f2e9 36 /// Shadow Payload start offset (snap/restore)
Jeej 19:701d5669f2e9 37 u8 shadow_pof;
Jeej 19:701d5669f2e9 38 /// Data
Jeej 19:701d5669f2e9 39 u8 data[1];
Jeej 19:701d5669f2e9 40
Jeej 19:701d5669f2e9 41 } d7a_buf_t;
Jeej 19:701d5669f2e9 42
Jeej 19:701d5669f2e9 43 //======================================================================
Jeej 19:701d5669f2e9 44 // D7A_BUF_R_PTR
Jeej 19:701d5669f2e9 45 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 46 /// @brief Pointer to the metadata (result)
Jeej 19:701d5669f2e9 47 /// @param buf d7a_buf_t buffer
Jeej 19:701d5669f2e9 48 //======================================================================
Jeej 19:701d5669f2e9 49 #define D7A_BUF_R_PTR(buf) (void*)(((d7a_buf_t*)(buf))->data)
Jeej 19:701d5669f2e9 50
Jeej 19:701d5669f2e9 51 //======================================================================
Jeej 19:701d5669f2e9 52 // D7A_BUF_P_PTR
Jeej 19:701d5669f2e9 53 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 54 /// @brief Pointer to the payload
Jeej 19:701d5669f2e9 55 /// @param buf d7a_buf_t buffer
Jeej 19:701d5669f2e9 56 //======================================================================
Jeej 19:701d5669f2e9 57 #define D7A_BUF_P_PTR(buf) (void*)(((d7a_buf_t*)(buf))->data + ((d7a_buf_t*)(buf))->pof)
Jeej 19:701d5669f2e9 58
Jeej 19:701d5669f2e9 59 //======================================================================
Jeej 19:701d5669f2e9 60 // D7A_BUF_P_LEN
Jeej 19:701d5669f2e9 61 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 62 /// @brief Get the payload length
Jeej 19:701d5669f2e9 63 /// @param buf d7a_buf_t buffer
Jeej 19:701d5669f2e9 64 //======================================================================
Jeej 19:701d5669f2e9 65 #define D7A_BUF_P_LEN(buf) (((d7a_buf_t*)(buf))->len)
Jeej 19:701d5669f2e9 66
Jeej 19:701d5669f2e9 67 //======================================================================
Jeej 19:701d5669f2e9 68 // Special session identifiers
Jeej 19:701d5669f2e9 69 //======================================================================
Jeej 19:701d5669f2e9 70 #define D7A_RESP_ID (0xff)
Jeej 19:701d5669f2e9 71
Jeej 19:701d5669f2e9 72 // =======================================================================
Jeej 19:701d5669f2e9 73 // d7a_id_t
Jeej 19:701d5669f2e9 74 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 75 /// Identifier types enumerator
Jeej 19:701d5669f2e9 76 // =======================================================================
Jeej 19:701d5669f2e9 77 typedef enum
Jeej 19:701d5669f2e9 78 {
Jeej 19:701d5669f2e9 79 /// skipped Unicast identifier
Jeej 19:701d5669f2e9 80 D7A_ID_VOID = 0,
Jeej 19:701d5669f2e9 81 /// Void identifier (broadcast)
Jeej 19:701d5669f2e9 82 /// with indication of number of reached devices
Jeej 19:701d5669f2e9 83 D7A_ID_NBID = 0,
Jeej 19:701d5669f2e9 84 /// Void identifier (broadcast)
Jeej 19:701d5669f2e9 85 D7A_ID_NOID = 1,
Jeej 19:701d5669f2e9 86 /// Unique Identifier
Jeej 19:701d5669f2e9 87 D7A_ID_UID = 2,
Jeej 19:701d5669f2e9 88 /// Virtual identifier
Jeej 19:701d5669f2e9 89 D7A_ID_VID = 3,
Jeej 19:701d5669f2e9 90
Jeej 19:701d5669f2e9 91 } d7a_id_t;
Jeej 19:701d5669f2e9 92
Jeej 19:701d5669f2e9 93 // =======================================================================
Jeej 19:701d5669f2e9 94 // d7a_nls_t
Jeej 19:701d5669f2e9 95 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 96 /// Enumerator of the NWL security modes
Jeej 19:701d5669f2e9 97 // =======================================================================
Jeej 19:701d5669f2e9 98 typedef enum
Jeej 19:701d5669f2e9 99 {
Jeej 19:701d5669f2e9 100 /// No security enabled
Jeej 19:701d5669f2e9 101 D7A_NLS_NO = 0,
Jeej 19:701d5669f2e9 102 /// Encryption only, Counter Mode
Jeej 19:701d5669f2e9 103 D7A_NLS_AES_CTR,
Jeej 19:701d5669f2e9 104 /// No encryption, Authentication, Cipher-block chaining with 128 bit MAC
Jeej 19:701d5669f2e9 105 D7A_NLS_AES_CBC_MAC_128,
Jeej 19:701d5669f2e9 106 /// No encryption, Authentication, Cipher-block chaining with 64 bit MAC
Jeej 19:701d5669f2e9 107 D7A_NLS_AES_CBC_MAC_64,
Jeej 19:701d5669f2e9 108 /// No encryption, Authentication, Cipher-block chaining with 32 bit MAC
Jeej 19:701d5669f2e9 109 D7A_NLS_AES_CBC_MAC_32,
Jeej 19:701d5669f2e9 110 /// Authentication with CBC-MAC-128 and Encryption with Counter Mode
Jeej 19:701d5669f2e9 111 D7A_NLS_AES_CCM_128,
Jeej 19:701d5669f2e9 112 /// Authentication with CBC-MAC-128 and Encryption with Counter Mode
Jeej 19:701d5669f2e9 113 D7A_NLS_AES_CCM_64,
Jeej 19:701d5669f2e9 114 /// Authentication with CBC-MAC-128 and Encryption with Counter Mode
Jeej 19:701d5669f2e9 115 D7A_NLS_AES_CCM_32,
Jeej 19:701d5669f2e9 116 /// QTY
Jeej 19:701d5669f2e9 117 D7A_NLS_QTY
Jeej 19:701d5669f2e9 118
Jeej 19:701d5669f2e9 119 } d7a_nls_t;
Jeej 19:701d5669f2e9 120
Jeej 19:701d5669f2e9 121 //======================================================================
Jeej 19:701d5669f2e9 122 // ID manipulation macros
Jeej 19:701d5669f2e9 123 //======================================================================
Jeej 19:701d5669f2e9 124
Jeej 19:701d5669f2e9 125 /// Unique ID length
Jeej 19:701d5669f2e9 126 #define D7A_UID_LEN (8)
Jeej 19:701d5669f2e9 127 /// Virtual ID length
Jeej 19:701d5669f2e9 128 #define D7A_VID_LEN (2)
Jeej 19:701d5669f2e9 129 /// No identifier length
Jeej 19:701d5669f2e9 130 #define D7A_NOID_LEN (0)
Jeej 19:701d5669f2e9 131 /// Void (skipped) identifier length
Jeej 19:701d5669f2e9 132 #define D7A_VOID_LEN (0)
Jeej 19:701d5669f2e9 133 /// Void ID length with reached
Jeej 19:701d5669f2e9 134 /// devices number indicaiton
Jeej 19:701d5669f2e9 135 #define D7A_NBID_LEN (1)
Jeej 19:701d5669f2e9 136
Jeej 19:701d5669f2e9 137 /// Address is unicast (VID or UID)
Jeej 19:701d5669f2e9 138 #define D7A_ID_IS_UCAST(ctrl) ((D7A_ID_UID == (ctrl).bf.idf) || (D7A_ID_VID == (ctrl).bf.idf))
Jeej 19:701d5669f2e9 139
Jeej 19:701d5669f2e9 140 /// Address is broadcast (no identifier)
Jeej 19:701d5669f2e9 141 #define D7A_ID_IS_BCAST(ctrl) ((D7A_ID_NOID == (ctrl).bf.idf) || (D7A_ID_NBID == (ctrl).bf.idf))
Jeej 19:701d5669f2e9 142
Jeej 19:701d5669f2e9 143 /// Length of the Addressee identifier
Jeej 19:701d5669f2e9 144 #define D7A_ID_LEN(ctrl) (((ctrl).bf.idf == D7A_ID_VID) ? D7A_VID_LEN : \
Jeej 19:701d5669f2e9 145 ((ctrl).bf.idf == D7A_ID_UID) ? D7A_UID_LEN : \
Jeej 19:701d5669f2e9 146 ((ctrl).bf.idf == D7A_ID_NBID) ? D7A_NBID_LEN : \
Jeej 19:701d5669f2e9 147 D7A_NOID_LEN)
Jeej 19:701d5669f2e9 148
Jeej 19:701d5669f2e9 149 /// Length of the DLL identifier
Jeej 19:701d5669f2e9 150 #define D7A_DLL_ID_LEN(ctrl) (((ctrl).bf.idf == D7A_ID_VID) ? D7A_VID_LEN : \
Jeej 19:701d5669f2e9 151 ((ctrl).bf.idf == D7A_ID_UID) ? D7A_UID_LEN : \
Jeej 19:701d5669f2e9 152 ((ctrl).bf.idf == D7A_ID_VOID) ? D7A_VOID_LEN : \
Jeej 19:701d5669f2e9 153 D7A_NOID_LEN)
Jeej 19:701d5669f2e9 154 /// length of the Addressee
Jeej 19:701d5669f2e9 155 #define D7A_ADDR_LEN(ctrl) (D7A_ID_LEN(ctrl) + sizeof(d7a_addressee_t) - D7A_UID_LEN)
Jeej 19:701d5669f2e9 156
Jeej 19:701d5669f2e9 157 //======================================================================
Jeej 19:701d5669f2e9 158 // Compressed format conversions to use in declarations
Jeej 19:701d5669f2e9 159 //======================================================================
Jeej 19:701d5669f2e9 160
Jeej 19:701d5669f2e9 161 /// Decode e/m
Jeej 19:701d5669f2e9 162 #define D7A_CTF_D(e,m) ((1 << (2*(e))) * (m))
Jeej 19:701d5669f2e9 163
Jeej 19:701d5669f2e9 164 /// Encode e/m
Jeej 19:701d5669f2e9 165 #define D7A_CTF_E(e,v) ((((e) & 0x7) << 5) | (KAL_DIV_INT((v), D7A_CTF_D(e,1)) & 0x1f))
Jeej 19:701d5669f2e9 166
Jeej 19:701d5669f2e9 167 /// Encode unit to CTF
Jeej 19:701d5669f2e9 168 #define D7A_CTF_ENCODE(v) (((v) < D7A_CTF_D(0,32)) ? D7A_CTF_E(0,(v)) : \
Jeej 19:701d5669f2e9 169 ((v) < D7A_CTF_D(1,32)) ? D7A_CTF_E(1,(v)) : \
Jeej 19:701d5669f2e9 170 ((v) < D7A_CTF_D(2,32)) ? D7A_CTF_E(2,(v)) : \
Jeej 19:701d5669f2e9 171 ((v) < D7A_CTF_D(3,32)) ? D7A_CTF_E(3,(v)) : \
Jeej 19:701d5669f2e9 172 ((v) < D7A_CTF_D(4,32)) ? D7A_CTF_E(4,(v)) : \
Jeej 19:701d5669f2e9 173 ((v) < D7A_CTF_D(5,32)) ? D7A_CTF_E(5,(v)) : \
Jeej 19:701d5669f2e9 174 ((v) < D7A_CTF_D(6,32)) ? D7A_CTF_E(6,(v)) : \
Jeej 19:701d5669f2e9 175 ((v) < D7A_CTF_D(7,32)) ? D7A_CTF_E(7,(v)) : \
Jeej 19:701d5669f2e9 176 0xff)
Jeej 19:701d5669f2e9 177
Jeej 19:701d5669f2e9 178 /// Decode from CTF to unit
Jeej 19:701d5669f2e9 179 #define D7A_CTF_DECODE(ctf) D7A_CTF_D((ctf).bf.exp,(ctf).bf.mant)
Jeej 19:701d5669f2e9 180
Jeej 19:701d5669f2e9 181 // =======================================================================
Jeej 19:701d5669f2e9 182 // d7a_addressee_ctrl_t
Jeej 19:701d5669f2e9 183 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 184 /// Bitfield structure of the Addressee control byte
Jeej 19:701d5669f2e9 185 // =======================================================================
Jeej 19:701d5669f2e9 186 typedef union
Jeej 19:701d5669f2e9 187 {
Jeej 19:701d5669f2e9 188 // bit access fields
Jeej 19:701d5669f2e9 189 struct {
Jeej 19:701d5669f2e9 190 /// Network security method
Jeej 19:701d5669f2e9 191 u8 nls : 4;
Jeej 19:701d5669f2e9 192 /// ID type
Jeej 19:701d5669f2e9 193 u8 idf : 2;
Jeej 19:701d5669f2e9 194 /// RFU
Jeej 19:701d5669f2e9 195 u8 rfu_6 : 1;
Jeej 19:701d5669f2e9 196 u8 rfu_7 : 1;
Jeej 19:701d5669f2e9 197 } bf;
Jeej 19:701d5669f2e9 198
Jeej 19:701d5669f2e9 199 // byte access
Jeej 19:701d5669f2e9 200 u8 byte;
Jeej 19:701d5669f2e9 201
Jeej 19:701d5669f2e9 202 } d7a_addressee_ctrl_t;
Jeej 19:701d5669f2e9 203
Jeej 19:701d5669f2e9 204 // =======================================================================
Jeej 19:701d5669f2e9 205 // d7a_xcl_t
Jeej 19:701d5669f2e9 206 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 207 /// Bitfield structure of the Addressee Access Class
Jeej 19:701d5669f2e9 208 // =======================================================================
Jeej 19:701d5669f2e9 209 typedef union
Jeej 19:701d5669f2e9 210 {
Jeej 19:701d5669f2e9 211 // bit access fields
Jeej 19:701d5669f2e9 212 struct {
Jeej 19:701d5669f2e9 213 /// Subclass mask
Jeej 19:701d5669f2e9 214 u8 m : 4;
Jeej 19:701d5669f2e9 215 /// Specifier
Jeej 19:701d5669f2e9 216 u8 s : 4;
Jeej 19:701d5669f2e9 217 } bf;
Jeej 19:701d5669f2e9 218
Jeej 19:701d5669f2e9 219 // byte access
Jeej 19:701d5669f2e9 220 u8 byte;
Jeej 19:701d5669f2e9 221
Jeej 19:701d5669f2e9 222 } d7a_xcl_t;
Jeej 19:701d5669f2e9 223
Jeej 19:701d5669f2e9 224 // =======================================================================
Jeej 19:701d5669f2e9 225 // d7a_addressee_t
Jeej 19:701d5669f2e9 226 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 227 /// Structure of the D7ATP Addressee byte
Jeej 19:701d5669f2e9 228 // =======================================================================
Jeej 19:701d5669f2e9 229 TYPEDEF_STRUCT_PACKED
Jeej 19:701d5669f2e9 230 {
Jeej 19:701d5669f2e9 231 d7a_addressee_ctrl_t ctrl;
Jeej 19:701d5669f2e9 232 d7a_xcl_t xcl;
Jeej 19:701d5669f2e9 233 u8 id[D7A_UID_LEN];
Jeej 19:701d5669f2e9 234
Jeej 19:701d5669f2e9 235 } d7a_addressee_t;
Jeej 19:701d5669f2e9 236
Jeej 19:701d5669f2e9 237 // =======================================================================
Jeej 19:701d5669f2e9 238 // d7a_ctf_t
Jeej 19:701d5669f2e9 239 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 240 /// DLL compressed time format
Jeej 19:701d5669f2e9 241 // =======================================================================
Jeej 19:701d5669f2e9 242 typedef union
Jeej 19:701d5669f2e9 243 {
Jeej 19:701d5669f2e9 244 // bit access fields
Jeej 19:701d5669f2e9 245 struct {
Jeej 19:701d5669f2e9 246 /// Mantissa
Jeej 19:701d5669f2e9 247 u8 mant : 5;
Jeej 19:701d5669f2e9 248 /// Exponent
Jeej 19:701d5669f2e9 249 u8 exp : 3;
Jeej 19:701d5669f2e9 250 } bf;
Jeej 19:701d5669f2e9 251
Jeej 19:701d5669f2e9 252 // byte access
Jeej 19:701d5669f2e9 253 u8 byte;
Jeej 19:701d5669f2e9 254
Jeej 19:701d5669f2e9 255 } d7a_ctf_t;
Jeej 19:701d5669f2e9 256
Jeej 19:701d5669f2e9 257 // =======================================================================
Jeej 19:701d5669f2e9 258 // d7a_ch_header_t
Jeej 19:701d5669f2e9 259 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 260 /// Bitfield structure of the channel identifier
Jeej 19:701d5669f2e9 261 // =======================================================================
Jeej 19:701d5669f2e9 262 typedef union
Jeej 19:701d5669f2e9 263 {
Jeej 19:701d5669f2e9 264 // bit access fields
Jeej 19:701d5669f2e9 265 struct {
Jeej 19:701d5669f2e9 266 /// Coding scheme
Jeej 19:701d5669f2e9 267 u8 cs : 2;
Jeej 19:701d5669f2e9 268 /// Channel Class
Jeej 19:701d5669f2e9 269 u8 cl : 2;
Jeej 19:701d5669f2e9 270 /// Channel Band
Jeej 19:701d5669f2e9 271 u8 band : 3;
Jeej 19:701d5669f2e9 272 /// Extension
Jeej 19:701d5669f2e9 273 u8 ext : 1;
Jeej 19:701d5669f2e9 274 } bf;
Jeej 19:701d5669f2e9 275
Jeej 19:701d5669f2e9 276 // byte access
Jeej 19:701d5669f2e9 277 u8 byte;
Jeej 19:701d5669f2e9 278
Jeej 19:701d5669f2e9 279 } d7a_ch_header_t;
Jeej 19:701d5669f2e9 280
Jeej 19:701d5669f2e9 281 // =======================================================================
Jeej 19:701d5669f2e9 282 // d7a_resp_t
Jeej 19:701d5669f2e9 283 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 284 /// Enumerator of the D7ASP Response types
Jeej 19:701d5669f2e9 285 // =======================================================================
Jeej 19:701d5669f2e9 286 typedef enum
Jeej 19:701d5669f2e9 287 {
Jeej 19:701d5669f2e9 288 /// No response requested
Jeej 19:701d5669f2e9 289 D7A_RESP_NO = 0,
Jeej 30:74aa36420c61 290 /// Get all responses in response period.
Jeej 19:701d5669f2e9 291 D7A_RESP_ALL,
Jeej 30:74aa36420c61 292 /// Get at least one ACK per request during response period
Jeej 19:701d5669f2e9 293 D7A_RESP_ANY,
Jeej 30:74aa36420c61 294 /// Same as D7A_RESP_ALL, but responders respond only if upper layer payload is available
Jeej 30:74aa36420c61 295 /// It is suitable for cases when the smart addressing (queries) is used.
Jeej 30:74aa36420c61 296 D7A_RESP_ALL_ON_DATA,
Jeej 30:74aa36420c61 297 /// No response requested, repeat the number of times defined in the SEL configuration file
Jeej 19:701d5669f2e9 298 D7A_RESP_NO_RPT,
Jeej 30:74aa36420c61 299 /// Same as D7A_RESP_ANY, but responders respond only if upper layer payload is available
Jeej 30:74aa36420c61 300 /// It is suitable for cases when the smart addressing (queries) is used.
Jeej 30:74aa36420c61 301 D7A_RESP_ANY_ON_DATA,
Jeej 19:701d5669f2e9 302 /// Get at least one acknowledgement per request during response period.
Jeej 19:701d5669f2e9 303 /// Stick to a single responder when possible
Jeej 19:701d5669f2e9 304 D7A_RESP_PREFERRED,
Jeej 30:74aa36420c61 305 /// Same as D7A_RESP_PREFERRED, but responders respond only if upper layer payload is available
Jeej 30:74aa36420c61 306 /// It is suitable for cases when the smart addressing (queries) is used.
Jeej 30:74aa36420c61 307 D7A_RESP_PREFERRED_ON_DATA
Jeej 19:701d5669f2e9 308
Jeej 19:701d5669f2e9 309 } d7a_resp_t;
Jeej 19:701d5669f2e9 310
Jeej 19:701d5669f2e9 311 // =======================================================================
Jeej 19:701d5669f2e9 312 // d7a_qos_t
Jeej 19:701d5669f2e9 313 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 314 /// Bitfield structure of the D7ASP Quality of Service control byte
Jeej 19:701d5669f2e9 315 // =======================================================================
Jeej 19:701d5669f2e9 316 typedef union
Jeej 19:701d5669f2e9 317 {
Jeej 19:701d5669f2e9 318 // bit access fields
Jeej 19:701d5669f2e9 319 struct {
Jeej 19:701d5669f2e9 320 /// Response mode
Jeej 19:701d5669f2e9 321 u8 resp : 3;
Jeej 19:701d5669f2e9 322 /// Retry mode
Jeej 19:701d5669f2e9 323 u8 retry : 3;
Jeej 26:2c934a269914 324 /// RFU
Jeej 26:2c934a269914 325 u8 rfu : 2;
Jeej 19:701d5669f2e9 326 } bf;
Jeej 19:701d5669f2e9 327
Jeej 19:701d5669f2e9 328 // byte access
Jeej 19:701d5669f2e9 329 u8 byte;
Jeej 19:701d5669f2e9 330
Jeej 19:701d5669f2e9 331 } d7a_qos_t;
Jeej 19:701d5669f2e9 332
Jeej 19:701d5669f2e9 333 // =======================================================================
Jeej 19:701d5669f2e9 334 // d7a_sp_cfg_t
Jeej 19:701d5669f2e9 335 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 336 /// Structure of the D7ASP Configuration
Jeej 19:701d5669f2e9 337 // =======================================================================
Jeej 19:701d5669f2e9 338 TYPEDEF_STRUCT_PACKED
Jeej 19:701d5669f2e9 339 {
Jeej 19:701d5669f2e9 340 /// D7ASP QoS
Jeej 19:701d5669f2e9 341 d7a_qos_t qos;
Jeej 19:701d5669f2e9 342 /// Session Start timeout
Jeej 19:701d5669f2e9 343 d7a_ctf_t to;
Jeej 19:701d5669f2e9 344 /// Response execution delay
Jeej 19:701d5669f2e9 345 d7a_ctf_t te;
Jeej 19:701d5669f2e9 346 /// Addressee
Jeej 19:701d5669f2e9 347 d7a_addressee_t addressee;
Jeej 19:701d5669f2e9 348
Jeej 19:701d5669f2e9 349 } d7a_sp_cfg_t;
Jeej 19:701d5669f2e9 350
Jeej 19:701d5669f2e9 351 // =======================================================================
Jeej 19:701d5669f2e9 352 // d7a_sp_status_t
Jeej 19:701d5669f2e9 353 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 354 /// Bitfield structure of the D7ASP segment status byte
Jeej 19:701d5669f2e9 355 // =======================================================================
Jeej 19:701d5669f2e9 356 typedef union
Jeej 19:701d5669f2e9 357 {
Jeej 19:701d5669f2e9 358 // bit access fields
Jeej 19:701d5669f2e9 359 struct {
Jeej 19:701d5669f2e9 360 /// RFU
Jeej 19:701d5669f2e9 361 u8 rfu : 4;
Jeej 19:701d5669f2e9 362 /// Identifier type of the received segment
Jeej 19:701d5669f2e9 363 u8 idf : 2;
Jeej 19:701d5669f2e9 364 /// Current seqnum was already received
Jeej 19:701d5669f2e9 365 u8 retry : 1;
Jeej 19:701d5669f2e9 366 /// There are not received seqnums anterior to the current seqnum
Jeej 19:701d5669f2e9 367 u8 missed : 1;
Jeej 19:701d5669f2e9 368 } bf;
Jeej 19:701d5669f2e9 369
Jeej 19:701d5669f2e9 370 // byte access
Jeej 19:701d5669f2e9 371 u8 byte;
Jeej 19:701d5669f2e9 372
Jeej 19:701d5669f2e9 373 } d7a_sp_status_t;
Jeej 19:701d5669f2e9 374
Jeej 19:701d5669f2e9 375 // =======================================================================
Jeej 19:701d5669f2e9 376 // d7a_nwl_security_t
Jeej 19:701d5669f2e9 377 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 378 /// NWL Security File structure
Jeej 19:701d5669f2e9 379 // =======================================================================
Jeej 19:701d5669f2e9 380 TYPEDEF_STRUCT_PACKED
Jeej 19:701d5669f2e9 381 {
Jeej 19:701d5669f2e9 382 /// Key counter
Jeej 19:701d5669f2e9 383 u8 key_counter;
Jeej 19:701d5669f2e9 384 /// Frame counter
Jeej 19:701d5669f2e9 385 u32 frame_counter;
Jeej 19:701d5669f2e9 386
Jeej 19:701d5669f2e9 387 } d7a_nwl_security_t;
Jeej 19:701d5669f2e9 388
Jeej 19:701d5669f2e9 389 // =======================================================================
Jeej 19:701d5669f2e9 390 // d7a_sp_res_t
Jeej 19:701d5669f2e9 391 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 392 /// D7A specific segment metadata
Jeej 19:701d5669f2e9 393 // =======================================================================
Jeej 19:701d5669f2e9 394 TYPEDEF_STRUCT_PACKED
Jeej 19:701d5669f2e9 395 {
Jeej 19:701d5669f2e9 396 /// channel header
Jeej 19:701d5669f2e9 397 d7a_ch_header_t header;
Jeej 19:701d5669f2e9 398 /// channel index
Jeej 19:701d5669f2e9 399 u16 idx;
Jeej 19:701d5669f2e9 400 /// RSSI in -dBm
Jeej 33:62c1a26e7e84 401 u8 rxlev;
Jeej 19:701d5669f2e9 402 /// Link budget in dB
Jeej 33:62c1a26e7e84 403 u8 lb;
Jeej 19:701d5669f2e9 404 /// Signal-to-noise ratio in dB
Jeej 19:701d5669f2e9 405 s8 snr;
Jeej 19:701d5669f2e9 406 /// D7ASP status
Jeej 19:701d5669f2e9 407 d7a_sp_status_t status;
Jeej 19:701d5669f2e9 408 /// D7ASP Token
Jeej 19:701d5669f2e9 409 u8 token;
Jeej 19:701d5669f2e9 410 /// D7ASP Sequence number
Jeej 19:701d5669f2e9 411 u8 seq;
Jeej 19:701d5669f2e9 412 /// Response timeout
Jeej 19:701d5669f2e9 413 u32 resp_to;
Jeej 19:701d5669f2e9 414 /// Addressee
Jeej 19:701d5669f2e9 415 d7a_addressee_t addressee;
Jeej 19:701d5669f2e9 416 /// NLS security state (optional)
Jeej 19:701d5669f2e9 417 d7a_nwl_security_t nls_state;
Jeej 19:701d5669f2e9 418
Jeej 19:701d5669f2e9 419 } d7a_sp_res_t;
Jeej 19:701d5669f2e9 420
Jeej 19:701d5669f2e9 421 // =======================================================================
Jeej 19:701d5669f2e9 422 // d7a_res_t
Jeej 19:701d5669f2e9 423 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 424 /// Aggregate packet reception metadata
Jeej 19:701d5669f2e9 425 // =======================================================================
Jeej 19:701d5669f2e9 426 typedef struct
Jeej 19:701d5669f2e9 427 {
Jeej 19:701d5669f2e9 428 /// Handle
Jeej 19:701d5669f2e9 429 u8 id;
Jeej 19:701d5669f2e9 430 /// End reception date
Jeej 19:701d5669f2e9 431 u32 date;
Jeej 19:701d5669f2e9 432 /// frequency offset (frequency error)
Jeej 19:701d5669f2e9 433 s16 fei;
Jeej 19:701d5669f2e9 434 /// Size of the result (depends on origin Addresse ID)
Jeej 19:701d5669f2e9 435 u8 len;
Jeej 19:701d5669f2e9 436 /// Target RXLEV in -dBm
Jeej 19:701d5669f2e9 437 s8 target_rxlev;
Jeej 19:701d5669f2e9 438 /// segment metadata
Jeej 19:701d5669f2e9 439 d7a_sp_res_t sp;
Jeej 19:701d5669f2e9 440
Jeej 19:701d5669f2e9 441 } d7a_res_t;
Jeej 19:701d5669f2e9 442
Jeej 19:701d5669f2e9 443 // =======================================================================
Jeej 26:2c934a269914 444 // d7a_error_t
Jeej 26:2c934a269914 445 // -----------------------------------------------------------------------
Jeej 26:2c934a269914 446 /// Error types enumerator for D7A
Jeej 26:2c934a269914 447 // =======================================================================
Jeej 26:2c934a269914 448 typedef enum
Jeej 26:2c934a269914 449 {
Jeej 26:2c934a269914 450 /// No error
Jeej 26:2c934a269914 451 D7A_ERROR_NO = 0,
Jeej 26:2c934a269914 452 /// Resource busy
Jeej 26:2c934a269914 453 D7A_ERROR_BUSY = -1,
Jeej 26:2c934a269914 454 /// Bad parameter
Jeej 26:2c934a269914 455 D7A_ERROR_BAD_PARAM = -2,
Jeej 26:2c934a269914 456 /// Duty cycle limit overflow
Jeej 26:2c934a269914 457 D7A_ERROR_DUTY_CYCLE = -3,
Jeej 26:2c934a269914 458 /// Timeout
Jeej 26:2c934a269914 459 D7A_ERROR_TO = -4,
Jeej 26:2c934a269914 460 /// Security frame counter overflow
Jeej 26:2c934a269914 461 D7A_ERROR_NLS_KEY = -5,
Jeej 26:2c934a269914 462 /// TX stream underflow
Jeej 26:2c934a269914 463 D7A_ERROR_TX_UDF = -6,
Jeej 26:2c934a269914 464 /// RX stream overflow
Jeej 26:2c934a269914 465 D7A_ERROR_RX_OVF = -7,
Jeej 26:2c934a269914 466 /// RX checksum
Jeej 26:2c934a269914 467 D7A_ERROR_RX_CRC = -8,
Jeej 26:2c934a269914 468 /// Abort
Jeej 26:2c934a269914 469 D7A_ERROR_ABORT = -9,
Jeej 26:2c934a269914 470
Jeej 26:2c934a269914 471 } d7a_error_t;
Jeej 26:2c934a269914 472
Jeej 26:2c934a269914 473 // =======================================================================
Jeej 19:701d5669f2e9 474 // d7a_req_status_t
Jeej 19:701d5669f2e9 475 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 476 /// D7A session request status
Jeej 19:701d5669f2e9 477 // =======================================================================
Jeej 19:701d5669f2e9 478 typedef union
Jeej 19:701d5669f2e9 479 {
Jeej 19:701d5669f2e9 480 struct {
Jeej 19:701d5669f2e9 481 /// Fifo identifier (handle)
Jeej 19:701d5669f2e9 482 u32 id : 8;
Jeej 19:701d5669f2e9 483 /// Tag of the request
Jeej 19:701d5669f2e9 484 u32 tag : 8;
Jeej 19:701d5669f2e9 485 /// request flush status
Jeej 19:701d5669f2e9 486 u32 ok : 1;
Jeej 19:701d5669f2e9 487 /// RFU
Jeej 19:701d5669f2e9 488 u32 rfu : 7;
Jeej 19:701d5669f2e9 489 /// D7A error
Jeej 19:701d5669f2e9 490 u32 err : 8;
Jeej 19:701d5669f2e9 491 } bf;
Jeej 19:701d5669f2e9 492
Jeej 19:701d5669f2e9 493 /// word access
Jeej 19:701d5669f2e9 494 u32 word;
Jeej 19:701d5669f2e9 495
Jeej 19:701d5669f2e9 496 } d7a_req_status_t;
Jeej 19:701d5669f2e9 497
Jeej 19:701d5669f2e9 498 // =======================================================================
Jeej 19:701d5669f2e9 499 // d7a_status_t
Jeej 19:701d5669f2e9 500 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 501 /// D7A session procedure status upon termination
Jeej 19:701d5669f2e9 502 // =======================================================================
Jeej 19:701d5669f2e9 503 typedef union
Jeej 19:701d5669f2e9 504 {
Jeej 19:701d5669f2e9 505 struct
Jeej 19:701d5669f2e9 506 {
Jeej 19:701d5669f2e9 507 /// Fifo identifier (handle)
Jeej 19:701d5669f2e9 508 u32 id : 8;
Jeej 19:701d5669f2e9 509 /// Flush status.
Jeej 19:701d5669f2e9 510 u32 ok : 1;
Jeej 19:701d5669f2e9 511 /// RFU
Jeej 19:701d5669f2e9 512 u32 rfu : 15;
Jeej 19:701d5669f2e9 513 /// D7A error
Jeej 19:701d5669f2e9 514 u32 err : 8;
Jeej 19:701d5669f2e9 515 } bf;
Jeej 19:701d5669f2e9 516
Jeej 19:701d5669f2e9 517 /// word access
Jeej 19:701d5669f2e9 518 u32 word;
Jeej 19:701d5669f2e9 519
Jeej 19:701d5669f2e9 520 } d7a_status_t;
Jeej 19:701d5669f2e9 521
Jeej 19:701d5669f2e9 522 #endif // __D7A_1X_H__