WizziLab / modem_ref

Dependents:   modem_ref_helper

Committer:
Jeej
Date:
Mon May 25 15:43:37 2020 +0000
Revision:
47:cf4519ba56d9
Parent:
41:6f83174ffed4
Child:
56:67e3d9608403
Updated for v5.3.283

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 47:cf4519ba56d9 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 41:6f83174ffed4 17 #include "kal_codec.h"
Jeej 41:6f83174ffed4 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 47:cf4519ba56d9 79 /// skipped Unicast identifier
Jeej 19:701d5669f2e9 80 D7A_ID_VOID = 0,
Jeej 47:cf4519ba56d9 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 47:cf4519ba56d9 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 47:cf4519ba56d9 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 41:6f83174ffed4 242 typedef kal_ctf_t d7a_ctf_t;
Jeej 19:701d5669f2e9 243
Jeej 19:701d5669f2e9 244 // =======================================================================
Jeej 19:701d5669f2e9 245 // d7a_ch_header_t
Jeej 19:701d5669f2e9 246 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 247 /// Bitfield structure of the channel identifier
Jeej 19:701d5669f2e9 248 // =======================================================================
Jeej 19:701d5669f2e9 249 typedef union
Jeej 19:701d5669f2e9 250 {
Jeej 19:701d5669f2e9 251 // bit access fields
Jeej 19:701d5669f2e9 252 struct {
Jeej 19:701d5669f2e9 253 /// Coding scheme
Jeej 19:701d5669f2e9 254 u8 cs : 2;
Jeej 19:701d5669f2e9 255 /// Channel Class
Jeej 19:701d5669f2e9 256 u8 cl : 2;
Jeej 19:701d5669f2e9 257 /// Channel Band
Jeej 19:701d5669f2e9 258 u8 band : 3;
Jeej 47:cf4519ba56d9 259 /// Extension
Jeej 19:701d5669f2e9 260 u8 ext : 1;
Jeej 19:701d5669f2e9 261 } bf;
Jeej 19:701d5669f2e9 262
Jeej 19:701d5669f2e9 263 // byte access
Jeej 19:701d5669f2e9 264 u8 byte;
Jeej 19:701d5669f2e9 265
Jeej 19:701d5669f2e9 266 } d7a_ch_header_t;
Jeej 19:701d5669f2e9 267
Jeej 19:701d5669f2e9 268 // =======================================================================
Jeej 19:701d5669f2e9 269 // d7a_resp_t
Jeej 19:701d5669f2e9 270 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 271 /// Enumerator of the D7ASP Response types
Jeej 19:701d5669f2e9 272 // =======================================================================
Jeej 19:701d5669f2e9 273 typedef enum
Jeej 19:701d5669f2e9 274 {
Jeej 19:701d5669f2e9 275 /// No response requested
Jeej 19:701d5669f2e9 276 D7A_RESP_NO = 0,
Jeej 30:74aa36420c61 277 /// Get all responses in response period.
Jeej 19:701d5669f2e9 278 D7A_RESP_ALL,
Jeej 30:74aa36420c61 279 /// Get at least one ACK per request during response period
Jeej 19:701d5669f2e9 280 D7A_RESP_ANY,
Jeej 30:74aa36420c61 281 /// Same as D7A_RESP_ALL, but responders respond only if upper layer payload is available
Jeej 30:74aa36420c61 282 /// It is suitable for cases when the smart addressing (queries) is used.
Jeej 30:74aa36420c61 283 D7A_RESP_ALL_ON_DATA,
Jeej 30:74aa36420c61 284 /// No response requested, repeat the number of times defined in the SEL configuration file
Jeej 19:701d5669f2e9 285 D7A_RESP_NO_RPT,
Jeej 30:74aa36420c61 286 /// Same as D7A_RESP_ANY, but responders respond only if upper layer payload is available
Jeej 30:74aa36420c61 287 /// It is suitable for cases when the smart addressing (queries) is used.
Jeej 30:74aa36420c61 288 D7A_RESP_ANY_ON_DATA,
Jeej 47:cf4519ba56d9 289 /// Get at least one acknowledgement per request during response period.
Jeej 19:701d5669f2e9 290 /// Stick to a single responder when possible
Jeej 19:701d5669f2e9 291 D7A_RESP_PREFERRED,
Jeej 30:74aa36420c61 292 /// Same as D7A_RESP_PREFERRED, but responders respond only if upper layer payload is available
Jeej 30:74aa36420c61 293 /// It is suitable for cases when the smart addressing (queries) is used.
Jeej 30:74aa36420c61 294 D7A_RESP_PREFERRED_ON_DATA
Jeej 19:701d5669f2e9 295
Jeej 19:701d5669f2e9 296 } d7a_resp_t;
Jeej 19:701d5669f2e9 297
Jeej 47:cf4519ba56d9 298 //======================================================================
Jeej 47:cf4519ba56d9 299 // d7a_retry_t
Jeej 47:cf4519ba56d9 300 // -----------------------------------------------------------------------
Jeej 47:cf4519ba56d9 301 // D7A retry policies
Jeej 47:cf4519ba56d9 302 //======================================================================
Jeej 47:cf4519ba56d9 303 typedef enum
Jeej 47:cf4519ba56d9 304 {
Jeej 47:cf4519ba56d9 305 /// Single request, try once (context cleaned upon completion)
Jeej 47:cf4519ba56d9 306 /// Suitable for low QoS or QoS managed by the application
Jeej 47:cf4519ba56d9 307 D7A_RETRY_ONESHOT = 0,
Jeej 47:cf4519ba56d9 308 /// Single request, retry 3 times (context cleaned upon completion)
Jeej 47:cf4519ba56d9 309 /// Suitable for higher QoS or QoS managed by the application
Jeej 47:cf4519ba56d9 310 D7A_RETRY_ONESHOT_RETRY,
Jeej 47:cf4519ba56d9 311 /// FIFO mode with fast retry pattern (context kept on completion)
Jeej 47:cf4519ba56d9 312 /// Suitable for periodic frequent chart-type ActP notifications (< ~10s between messages)
Jeej 47:cf4519ba56d9 313 D7A_RETRY_FIFO_FAST,
Jeej 47:cf4519ba56d9 314 /// FIFO mode with slow retry pattern (context kept on completion)
Jeej 47:cf4519ba56d9 315 /// Suitable for periodic unfrequent chart-type ActP notifications (> ~10s between messages)
Jeej 47:cf4519ba56d9 316 D7A_RETRY_FIFO_SLOW,
Jeej 47:cf4519ba56d9 317 /// Single ("last-is-best") mode with fast retry pattern (context kept on completion)
Jeej 47:cf4519ba56d9 318 /// Suitable for periodic frequent state-type ActP notifications (< ~10s between messages)
Jeej 47:cf4519ba56d9 319 D7A_RETRY_SINGLE_FAST,
Jeej 47:cf4519ba56d9 320 /// Single ("last-is-best") mode with slow retry pattern (context kept on completion)
Jeej 47:cf4519ba56d9 321 /// Suitable for periodic unfrequent state-type ActP notifications (> ~10s between messages)
Jeej 47:cf4519ba56d9 322 D7A_RETRY_SINGLE_SLOW,
Jeej 47:cf4519ba56d9 323 /// Single request, retry 8 times or more (context cleaned upon completion)
Jeej 47:cf4519ba56d9 324 /// Suitable for rare ActP notifications with higher priority (revision, etc).
Jeej 47:cf4519ba56d9 325 /// Suitable for application requests where the QoS is managed by the stack
Jeej 47:cf4519ba56d9 326 /// or the completion is not expected synchronously (could be very long)
Jeej 47:cf4519ba56d9 327 D7A_RETRY_ONESHOT_STICKY,
Jeej 47:cf4519ba56d9 328 /// Reserved for future use
Jeej 47:cf4519ba56d9 329 D7A_RETRY_RFU_7
Jeej 47:cf4519ba56d9 330
Jeej 47:cf4519ba56d9 331 } d7a_retry_t;
Jeej 47:cf4519ba56d9 332
Jeej 19:701d5669f2e9 333 // =======================================================================
Jeej 19:701d5669f2e9 334 // d7a_qos_t
Jeej 19:701d5669f2e9 335 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 336 /// Bitfield structure of the D7ASP Quality of Service control byte
Jeej 19:701d5669f2e9 337 // =======================================================================
Jeej 19:701d5669f2e9 338 typedef union
Jeej 19:701d5669f2e9 339 {
Jeej 19:701d5669f2e9 340 // bit access fields
Jeej 19:701d5669f2e9 341 struct {
Jeej 19:701d5669f2e9 342 /// Response mode
Jeej 19:701d5669f2e9 343 u8 resp : 3;
Jeej 19:701d5669f2e9 344 /// Retry mode
Jeej 19:701d5669f2e9 345 u8 retry : 3;
Jeej 26:2c934a269914 346 /// RFU
Jeej 26:2c934a269914 347 u8 rfu : 2;
Jeej 19:701d5669f2e9 348 } bf;
Jeej 19:701d5669f2e9 349
Jeej 19:701d5669f2e9 350 // byte access
Jeej 19:701d5669f2e9 351 u8 byte;
Jeej 19:701d5669f2e9 352
Jeej 19:701d5669f2e9 353 } d7a_qos_t;
Jeej 19:701d5669f2e9 354
Jeej 19:701d5669f2e9 355 // =======================================================================
Jeej 19:701d5669f2e9 356 // d7a_sp_cfg_t
Jeej 19:701d5669f2e9 357 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 358 /// Structure of the D7ASP Configuration
Jeej 19:701d5669f2e9 359 // =======================================================================
Jeej 19:701d5669f2e9 360 TYPEDEF_STRUCT_PACKED
Jeej 19:701d5669f2e9 361 {
Jeej 19:701d5669f2e9 362 /// D7ASP QoS
Jeej 19:701d5669f2e9 363 d7a_qos_t qos;
Jeej 19:701d5669f2e9 364 /// Session Start timeout
Jeej 19:701d5669f2e9 365 d7a_ctf_t to;
Jeej 19:701d5669f2e9 366 /// Response execution delay
Jeej 19:701d5669f2e9 367 d7a_ctf_t te;
Jeej 19:701d5669f2e9 368 /// Addressee
Jeej 19:701d5669f2e9 369 d7a_addressee_t addressee;
Jeej 19:701d5669f2e9 370
Jeej 19:701d5669f2e9 371 } d7a_sp_cfg_t;
Jeej 19:701d5669f2e9 372
Jeej 19:701d5669f2e9 373 // =======================================================================
Jeej 19:701d5669f2e9 374 // d7a_sp_status_t
Jeej 19:701d5669f2e9 375 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 376 /// Bitfield structure of the D7ASP segment status byte
Jeej 19:701d5669f2e9 377 // =======================================================================
Jeej 19:701d5669f2e9 378 typedef union
Jeej 19:701d5669f2e9 379 {
Jeej 19:701d5669f2e9 380 // bit access fields
Jeej 19:701d5669f2e9 381 struct {
Jeej 19:701d5669f2e9 382 /// RFU
Jeej 19:701d5669f2e9 383 u8 rfu : 4;
Jeej 19:701d5669f2e9 384 /// Identifier type of the received segment
Jeej 47:cf4519ba56d9 385 u8 idf : 2;
Jeej 19:701d5669f2e9 386 /// Current seqnum was already received
Jeej 19:701d5669f2e9 387 u8 retry : 1;
Jeej 19:701d5669f2e9 388 /// There are not received seqnums anterior to the current seqnum
Jeej 19:701d5669f2e9 389 u8 missed : 1;
Jeej 19:701d5669f2e9 390 } bf;
Jeej 19:701d5669f2e9 391
Jeej 19:701d5669f2e9 392 // byte access
Jeej 19:701d5669f2e9 393 u8 byte;
Jeej 19:701d5669f2e9 394
Jeej 19:701d5669f2e9 395 } d7a_sp_status_t;
Jeej 19:701d5669f2e9 396
Jeej 19:701d5669f2e9 397 // =======================================================================
Jeej 19:701d5669f2e9 398 // d7a_nwl_security_t
Jeej 19:701d5669f2e9 399 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 400 /// NWL Security File structure
Jeej 19:701d5669f2e9 401 // =======================================================================
Jeej 19:701d5669f2e9 402 TYPEDEF_STRUCT_PACKED
Jeej 19:701d5669f2e9 403 {
Jeej 19:701d5669f2e9 404 /// Key counter
Jeej 19:701d5669f2e9 405 u8 key_counter;
Jeej 19:701d5669f2e9 406 /// Frame counter
Jeej 19:701d5669f2e9 407 u32 frame_counter;
Jeej 19:701d5669f2e9 408
Jeej 19:701d5669f2e9 409 } d7a_nwl_security_t;
Jeej 19:701d5669f2e9 410
Jeej 19:701d5669f2e9 411 // =======================================================================
Jeej 19:701d5669f2e9 412 // d7a_sp_res_t
Jeej 19:701d5669f2e9 413 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 414 /// D7A specific segment metadata
Jeej 19:701d5669f2e9 415 // =======================================================================
Jeej 19:701d5669f2e9 416 TYPEDEF_STRUCT_PACKED
Jeej 19:701d5669f2e9 417 {
Jeej 19:701d5669f2e9 418 /// channel header
Jeej 47:cf4519ba56d9 419 d7a_ch_header_t header;
Jeej 19:701d5669f2e9 420 /// channel index
Jeej 19:701d5669f2e9 421 u16 idx;
Jeej 19:701d5669f2e9 422 /// RSSI in -dBm
Jeej 33:62c1a26e7e84 423 u8 rxlev;
Jeej 19:701d5669f2e9 424 /// Link budget in dB
Jeej 33:62c1a26e7e84 425 u8 lb;
Jeej 19:701d5669f2e9 426 /// Signal-to-noise ratio in dB
Jeej 19:701d5669f2e9 427 s8 snr;
Jeej 19:701d5669f2e9 428 /// D7ASP status
Jeej 19:701d5669f2e9 429 d7a_sp_status_t status;
Jeej 19:701d5669f2e9 430 /// D7ASP Token
Jeej 19:701d5669f2e9 431 u8 token;
Jeej 19:701d5669f2e9 432 /// D7ASP Sequence number
Jeej 19:701d5669f2e9 433 u8 seq;
Jeej 19:701d5669f2e9 434 /// Response timeout
Jeej 19:701d5669f2e9 435 u32 resp_to;
Jeej 19:701d5669f2e9 436 /// Addressee
Jeej 19:701d5669f2e9 437 d7a_addressee_t addressee;
Jeej 19:701d5669f2e9 438 /// NLS security state (optional)
Jeej 19:701d5669f2e9 439 d7a_nwl_security_t nls_state;
Jeej 19:701d5669f2e9 440
Jeej 19:701d5669f2e9 441 } d7a_sp_res_t;
Jeej 19:701d5669f2e9 442
Jeej 19:701d5669f2e9 443 // =======================================================================
Jeej 19:701d5669f2e9 444 // d7a_res_t
Jeej 19:701d5669f2e9 445 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 446 /// Aggregate packet reception metadata
Jeej 19:701d5669f2e9 447 // =======================================================================
Jeej 19:701d5669f2e9 448 typedef struct
Jeej 19:701d5669f2e9 449 {
Jeej 19:701d5669f2e9 450 /// Handle
Jeej 19:701d5669f2e9 451 u8 id;
Jeej 19:701d5669f2e9 452 /// End reception date
Jeej 19:701d5669f2e9 453 u32 date;
Jeej 19:701d5669f2e9 454 /// frequency offset (frequency error)
Jeej 19:701d5669f2e9 455 s16 fei;
Jeej 19:701d5669f2e9 456 /// Size of the result (depends on origin Addresse ID)
Jeej 19:701d5669f2e9 457 u8 len;
Jeej 19:701d5669f2e9 458 /// Target RXLEV in -dBm
Jeej 35:ac940cf8ebe6 459 u8 target_rxlev;
Jeej 19:701d5669f2e9 460 /// segment metadata
Jeej 19:701d5669f2e9 461 d7a_sp_res_t sp;
Jeej 47:cf4519ba56d9 462
Jeej 19:701d5669f2e9 463 } d7a_res_t;
Jeej 19:701d5669f2e9 464
Jeej 19:701d5669f2e9 465 // =======================================================================
Jeej 26:2c934a269914 466 // d7a_error_t
Jeej 26:2c934a269914 467 // -----------------------------------------------------------------------
Jeej 26:2c934a269914 468 /// Error types enumerator for D7A
Jeej 26:2c934a269914 469 // =======================================================================
Jeej 26:2c934a269914 470 typedef enum
Jeej 26:2c934a269914 471 {
Jeej 26:2c934a269914 472 /// No error
Jeej 41:6f83174ffed4 473 D7A_ERROR_NO = 0,
Jeej 26:2c934a269914 474 /// Resource busy
Jeej 41:6f83174ffed4 475 D7A_ERROR_BUSY = -1,
Jeej 26:2c934a269914 476 /// Bad parameter
Jeej 41:6f83174ffed4 477 D7A_ERROR_BAD_PARAM = -2,
Jeej 26:2c934a269914 478 /// Duty cycle limit overflow
Jeej 41:6f83174ffed4 479 D7A_ERROR_DUTY_CYCLE = -3,
Jeej 37:f5424d109c6d 480 /// CCA timeout
Jeej 41:6f83174ffed4 481 D7A_ERROR_CCA_TO = -4,
Jeej 26:2c934a269914 482 /// Security frame counter overflow
Jeej 41:6f83174ffed4 483 D7A_ERROR_NLS_KEY = -5,
Jeej 26:2c934a269914 484 /// TX stream underflow
Jeej 41:6f83174ffed4 485 D7A_ERROR_TX_UDF = -6,
Jeej 26:2c934a269914 486 /// RX stream overflow
Jeej 41:6f83174ffed4 487 D7A_ERROR_RX_OVF = -7,
Jeej 26:2c934a269914 488 /// RX checksum
Jeej 41:6f83174ffed4 489 D7A_ERROR_RX_CRC = -8,
Jeej 26:2c934a269914 490 /// Abort
Jeej 41:6f83174ffed4 491 D7A_ERROR_ABORT = -9,
Jeej 37:f5424d109c6d 492 /// No ACK received
Jeej 41:6f83174ffed4 493 D7A_ERROR_NO_ACK = -10,
Jeej 37:f5424d109c6d 494 /// RX timeout
Jeej 41:6f83174ffed4 495 D7A_ERROR_RX_TO = -11,
Jeej 41:6f83174ffed4 496 /// Not supported band
Jeej 41:6f83174ffed4 497 D7A_ERROR_NOT_SUPPORTED_BAND = -12,
Jeej 41:6f83174ffed4 498 /// Not supported channel
Jeej 41:6f83174ffed4 499 D7A_ERROR_NOT_SUPPORTED_CHANNEL = -13,
Jeej 41:6f83174ffed4 500 /// Not supported modulation
Jeej 41:6f83174ffed4 501 D7A_ERROR_NOT_SUPPORTED_MODULATION = -14,
Jeej 41:6f83174ffed4 502 /// No channels in list
Jeej 41:6f83174ffed4 503 D7A_ERROR_VOID_CHANNEL_LIST = -15,
Jeej 26:2c934a269914 504
Jeej 26:2c934a269914 505 } d7a_error_t;
Jeej 26:2c934a269914 506
Jeej 26:2c934a269914 507 // =======================================================================
Jeej 19:701d5669f2e9 508 // d7a_req_status_t
Jeej 19:701d5669f2e9 509 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 510 /// D7A session request status
Jeej 19:701d5669f2e9 511 // =======================================================================
Jeej 19:701d5669f2e9 512 typedef union
Jeej 19:701d5669f2e9 513 {
Jeej 19:701d5669f2e9 514 struct {
Jeej 19:701d5669f2e9 515 /// Fifo identifier (handle)
Jeej 19:701d5669f2e9 516 u32 id : 8;
Jeej 19:701d5669f2e9 517 /// Tag of the request
Jeej 19:701d5669f2e9 518 u32 tag : 8;
Jeej 19:701d5669f2e9 519 /// request flush status
Jeej 19:701d5669f2e9 520 u32 ok : 1;
Jeej 19:701d5669f2e9 521 /// RFU
Jeej 19:701d5669f2e9 522 u32 rfu : 7;
Jeej 47:cf4519ba56d9 523 /// D7A error
Jeej 19:701d5669f2e9 524 u32 err : 8;
Jeej 19:701d5669f2e9 525 } bf;
Jeej 19:701d5669f2e9 526
Jeej 19:701d5669f2e9 527 /// word access
Jeej 19:701d5669f2e9 528 u32 word;
Jeej 19:701d5669f2e9 529
Jeej 19:701d5669f2e9 530 } d7a_req_status_t;
Jeej 19:701d5669f2e9 531
Jeej 19:701d5669f2e9 532 // =======================================================================
Jeej 19:701d5669f2e9 533 // d7a_status_t
Jeej 19:701d5669f2e9 534 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 535 /// D7A session procedure status upon termination
Jeej 19:701d5669f2e9 536 // =======================================================================
Jeej 19:701d5669f2e9 537 typedef union
Jeej 19:701d5669f2e9 538 {
Jeej 19:701d5669f2e9 539 struct
Jeej 19:701d5669f2e9 540 {
Jeej 19:701d5669f2e9 541 /// Fifo identifier (handle)
Jeej 19:701d5669f2e9 542 u32 id : 8;
Jeej 19:701d5669f2e9 543 /// Flush status.
Jeej 19:701d5669f2e9 544 u32 ok : 1;
Jeej 47:cf4519ba56d9 545 /// RFU
Jeej 19:701d5669f2e9 546 u32 rfu : 15;
Jeej 47:cf4519ba56d9 547 /// D7A error
Jeej 19:701d5669f2e9 548 u32 err : 8;
Jeej 19:701d5669f2e9 549 } bf;
Jeej 19:701d5669f2e9 550
Jeej 19:701d5669f2e9 551 /// word access
Jeej 19:701d5669f2e9 552 u32 word;
Jeej 19:701d5669f2e9 553
Jeej 19:701d5669f2e9 554 } d7a_status_t;
Jeej 19:701d5669f2e9 555
Jeej 19:701d5669f2e9 556 #endif // __D7A_1X_H__