WizziLab / modem_ref_v5_3_217

Dependents:   modem_ref_helper_for_v5_3_217

Committer:
Jeej
Date:
Mon Mar 05 09:55:27 2018 +0000
Revision:
26:2c934a269914
Parent:
19:701d5669f2e9
Child:
30:74aa36420c61
Updated for 5.0.x

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