Exportable version of WizziLab's modem driver.

Dependents:   modem_ref_helper

Committer:
Jeej
Date:
Wed Jul 31 16:48:48 2019 +0000
Revision:
46:9b83866cef2c
Parent:
41:6f83174ffed4
Child:
47:cf4519ba56d9
Updated for mbed-os 5.13

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 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 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 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 19:701d5669f2e9 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 19:701d5669f2e9 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 19:701d5669f2e9 298 // =======================================================================
Jeej 19:701d5669f2e9 299 // d7a_qos_t
Jeej 19:701d5669f2e9 300 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 301 /// Bitfield structure of the D7ASP Quality of Service control byte
Jeej 19:701d5669f2e9 302 // =======================================================================
Jeej 19:701d5669f2e9 303 typedef union
Jeej 19:701d5669f2e9 304 {
Jeej 19:701d5669f2e9 305 // bit access fields
Jeej 19:701d5669f2e9 306 struct {
Jeej 19:701d5669f2e9 307 /// Response mode
Jeej 19:701d5669f2e9 308 u8 resp : 3;
Jeej 19:701d5669f2e9 309 /// Retry mode
Jeej 19:701d5669f2e9 310 u8 retry : 3;
Jeej 26:2c934a269914 311 /// RFU
Jeej 26:2c934a269914 312 u8 rfu : 2;
Jeej 19:701d5669f2e9 313 } bf;
Jeej 19:701d5669f2e9 314
Jeej 19:701d5669f2e9 315 // byte access
Jeej 19:701d5669f2e9 316 u8 byte;
Jeej 19:701d5669f2e9 317
Jeej 19:701d5669f2e9 318 } d7a_qos_t;
Jeej 19:701d5669f2e9 319
Jeej 19:701d5669f2e9 320 // =======================================================================
Jeej 19:701d5669f2e9 321 // d7a_sp_cfg_t
Jeej 19:701d5669f2e9 322 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 323 /// Structure of the D7ASP Configuration
Jeej 19:701d5669f2e9 324 // =======================================================================
Jeej 19:701d5669f2e9 325 TYPEDEF_STRUCT_PACKED
Jeej 19:701d5669f2e9 326 {
Jeej 19:701d5669f2e9 327 /// D7ASP QoS
Jeej 19:701d5669f2e9 328 d7a_qos_t qos;
Jeej 19:701d5669f2e9 329 /// Session Start timeout
Jeej 19:701d5669f2e9 330 d7a_ctf_t to;
Jeej 19:701d5669f2e9 331 /// Response execution delay
Jeej 19:701d5669f2e9 332 d7a_ctf_t te;
Jeej 19:701d5669f2e9 333 /// Addressee
Jeej 19:701d5669f2e9 334 d7a_addressee_t addressee;
Jeej 19:701d5669f2e9 335
Jeej 19:701d5669f2e9 336 } d7a_sp_cfg_t;
Jeej 19:701d5669f2e9 337
Jeej 19:701d5669f2e9 338 // =======================================================================
Jeej 19:701d5669f2e9 339 // d7a_sp_status_t
Jeej 19:701d5669f2e9 340 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 341 /// Bitfield structure of the D7ASP segment status byte
Jeej 19:701d5669f2e9 342 // =======================================================================
Jeej 19:701d5669f2e9 343 typedef union
Jeej 19:701d5669f2e9 344 {
Jeej 19:701d5669f2e9 345 // bit access fields
Jeej 19:701d5669f2e9 346 struct {
Jeej 19:701d5669f2e9 347 /// RFU
Jeej 19:701d5669f2e9 348 u8 rfu : 4;
Jeej 19:701d5669f2e9 349 /// Identifier type of the received segment
Jeej 19:701d5669f2e9 350 u8 idf : 2;
Jeej 19:701d5669f2e9 351 /// Current seqnum was already received
Jeej 19:701d5669f2e9 352 u8 retry : 1;
Jeej 19:701d5669f2e9 353 /// There are not received seqnums anterior to the current seqnum
Jeej 19:701d5669f2e9 354 u8 missed : 1;
Jeej 19:701d5669f2e9 355 } bf;
Jeej 19:701d5669f2e9 356
Jeej 19:701d5669f2e9 357 // byte access
Jeej 19:701d5669f2e9 358 u8 byte;
Jeej 19:701d5669f2e9 359
Jeej 19:701d5669f2e9 360 } d7a_sp_status_t;
Jeej 19:701d5669f2e9 361
Jeej 19:701d5669f2e9 362 // =======================================================================
Jeej 19:701d5669f2e9 363 // d7a_nwl_security_t
Jeej 19:701d5669f2e9 364 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 365 /// NWL Security File structure
Jeej 19:701d5669f2e9 366 // =======================================================================
Jeej 19:701d5669f2e9 367 TYPEDEF_STRUCT_PACKED
Jeej 19:701d5669f2e9 368 {
Jeej 19:701d5669f2e9 369 /// Key counter
Jeej 19:701d5669f2e9 370 u8 key_counter;
Jeej 19:701d5669f2e9 371 /// Frame counter
Jeej 19:701d5669f2e9 372 u32 frame_counter;
Jeej 19:701d5669f2e9 373
Jeej 19:701d5669f2e9 374 } d7a_nwl_security_t;
Jeej 19:701d5669f2e9 375
Jeej 19:701d5669f2e9 376 // =======================================================================
Jeej 19:701d5669f2e9 377 // d7a_sp_res_t
Jeej 19:701d5669f2e9 378 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 379 /// D7A specific segment metadata
Jeej 19:701d5669f2e9 380 // =======================================================================
Jeej 19:701d5669f2e9 381 TYPEDEF_STRUCT_PACKED
Jeej 19:701d5669f2e9 382 {
Jeej 19:701d5669f2e9 383 /// channel header
Jeej 19:701d5669f2e9 384 d7a_ch_header_t header;
Jeej 19:701d5669f2e9 385 /// channel index
Jeej 19:701d5669f2e9 386 u16 idx;
Jeej 19:701d5669f2e9 387 /// RSSI in -dBm
Jeej 33:62c1a26e7e84 388 u8 rxlev;
Jeej 19:701d5669f2e9 389 /// Link budget in dB
Jeej 33:62c1a26e7e84 390 u8 lb;
Jeej 19:701d5669f2e9 391 /// Signal-to-noise ratio in dB
Jeej 19:701d5669f2e9 392 s8 snr;
Jeej 19:701d5669f2e9 393 /// D7ASP status
Jeej 19:701d5669f2e9 394 d7a_sp_status_t status;
Jeej 19:701d5669f2e9 395 /// D7ASP Token
Jeej 19:701d5669f2e9 396 u8 token;
Jeej 19:701d5669f2e9 397 /// D7ASP Sequence number
Jeej 19:701d5669f2e9 398 u8 seq;
Jeej 19:701d5669f2e9 399 /// Response timeout
Jeej 19:701d5669f2e9 400 u32 resp_to;
Jeej 19:701d5669f2e9 401 /// Addressee
Jeej 19:701d5669f2e9 402 d7a_addressee_t addressee;
Jeej 19:701d5669f2e9 403 /// NLS security state (optional)
Jeej 19:701d5669f2e9 404 d7a_nwl_security_t nls_state;
Jeej 19:701d5669f2e9 405
Jeej 19:701d5669f2e9 406 } d7a_sp_res_t;
Jeej 19:701d5669f2e9 407
Jeej 19:701d5669f2e9 408 // =======================================================================
Jeej 19:701d5669f2e9 409 // d7a_res_t
Jeej 19:701d5669f2e9 410 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 411 /// Aggregate packet reception metadata
Jeej 19:701d5669f2e9 412 // =======================================================================
Jeej 19:701d5669f2e9 413 typedef struct
Jeej 19:701d5669f2e9 414 {
Jeej 19:701d5669f2e9 415 /// Handle
Jeej 19:701d5669f2e9 416 u8 id;
Jeej 19:701d5669f2e9 417 /// End reception date
Jeej 19:701d5669f2e9 418 u32 date;
Jeej 19:701d5669f2e9 419 /// frequency offset (frequency error)
Jeej 19:701d5669f2e9 420 s16 fei;
Jeej 19:701d5669f2e9 421 /// Size of the result (depends on origin Addresse ID)
Jeej 19:701d5669f2e9 422 u8 len;
Jeej 19:701d5669f2e9 423 /// Target RXLEV in -dBm
Jeej 35:ac940cf8ebe6 424 u8 target_rxlev;
Jeej 19:701d5669f2e9 425 /// segment metadata
Jeej 19:701d5669f2e9 426 d7a_sp_res_t sp;
Jeej 19:701d5669f2e9 427
Jeej 19:701d5669f2e9 428 } d7a_res_t;
Jeej 19:701d5669f2e9 429
Jeej 19:701d5669f2e9 430 // =======================================================================
Jeej 26:2c934a269914 431 // d7a_error_t
Jeej 26:2c934a269914 432 // -----------------------------------------------------------------------
Jeej 26:2c934a269914 433 /// Error types enumerator for D7A
Jeej 26:2c934a269914 434 // =======================================================================
Jeej 26:2c934a269914 435 typedef enum
Jeej 26:2c934a269914 436 {
Jeej 26:2c934a269914 437 /// No error
Jeej 41:6f83174ffed4 438 D7A_ERROR_NO = 0,
Jeej 26:2c934a269914 439 /// Resource busy
Jeej 41:6f83174ffed4 440 D7A_ERROR_BUSY = -1,
Jeej 26:2c934a269914 441 /// Bad parameter
Jeej 41:6f83174ffed4 442 D7A_ERROR_BAD_PARAM = -2,
Jeej 26:2c934a269914 443 /// Duty cycle limit overflow
Jeej 41:6f83174ffed4 444 D7A_ERROR_DUTY_CYCLE = -3,
Jeej 37:f5424d109c6d 445 /// CCA timeout
Jeej 41:6f83174ffed4 446 D7A_ERROR_CCA_TO = -4,
Jeej 26:2c934a269914 447 /// Security frame counter overflow
Jeej 41:6f83174ffed4 448 D7A_ERROR_NLS_KEY = -5,
Jeej 26:2c934a269914 449 /// TX stream underflow
Jeej 41:6f83174ffed4 450 D7A_ERROR_TX_UDF = -6,
Jeej 26:2c934a269914 451 /// RX stream overflow
Jeej 41:6f83174ffed4 452 D7A_ERROR_RX_OVF = -7,
Jeej 26:2c934a269914 453 /// RX checksum
Jeej 41:6f83174ffed4 454 D7A_ERROR_RX_CRC = -8,
Jeej 26:2c934a269914 455 /// Abort
Jeej 41:6f83174ffed4 456 D7A_ERROR_ABORT = -9,
Jeej 37:f5424d109c6d 457 /// No ACK received
Jeej 41:6f83174ffed4 458 D7A_ERROR_NO_ACK = -10,
Jeej 37:f5424d109c6d 459 /// RX timeout
Jeej 41:6f83174ffed4 460 D7A_ERROR_RX_TO = -11,
Jeej 41:6f83174ffed4 461 /// Not supported band
Jeej 41:6f83174ffed4 462 D7A_ERROR_NOT_SUPPORTED_BAND = -12,
Jeej 41:6f83174ffed4 463 /// Not supported channel
Jeej 41:6f83174ffed4 464 D7A_ERROR_NOT_SUPPORTED_CHANNEL = -13,
Jeej 41:6f83174ffed4 465 /// Not supported modulation
Jeej 41:6f83174ffed4 466 D7A_ERROR_NOT_SUPPORTED_MODULATION = -14,
Jeej 41:6f83174ffed4 467 /// No channels in list
Jeej 41:6f83174ffed4 468 D7A_ERROR_VOID_CHANNEL_LIST = -15,
Jeej 26:2c934a269914 469
Jeej 26:2c934a269914 470 } d7a_error_t;
Jeej 26:2c934a269914 471
Jeej 26:2c934a269914 472 // =======================================================================
Jeej 19:701d5669f2e9 473 // d7a_req_status_t
Jeej 19:701d5669f2e9 474 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 475 /// D7A session request status
Jeej 19:701d5669f2e9 476 // =======================================================================
Jeej 19:701d5669f2e9 477 typedef union
Jeej 19:701d5669f2e9 478 {
Jeej 19:701d5669f2e9 479 struct {
Jeej 19:701d5669f2e9 480 /// Fifo identifier (handle)
Jeej 19:701d5669f2e9 481 u32 id : 8;
Jeej 19:701d5669f2e9 482 /// Tag of the request
Jeej 19:701d5669f2e9 483 u32 tag : 8;
Jeej 19:701d5669f2e9 484 /// request flush status
Jeej 19:701d5669f2e9 485 u32 ok : 1;
Jeej 19:701d5669f2e9 486 /// RFU
Jeej 19:701d5669f2e9 487 u32 rfu : 7;
Jeej 19:701d5669f2e9 488 /// D7A error
Jeej 19:701d5669f2e9 489 u32 err : 8;
Jeej 19:701d5669f2e9 490 } bf;
Jeej 19:701d5669f2e9 491
Jeej 19:701d5669f2e9 492 /// word access
Jeej 19:701d5669f2e9 493 u32 word;
Jeej 19:701d5669f2e9 494
Jeej 19:701d5669f2e9 495 } d7a_req_status_t;
Jeej 19:701d5669f2e9 496
Jeej 19:701d5669f2e9 497 // =======================================================================
Jeej 19:701d5669f2e9 498 // d7a_status_t
Jeej 19:701d5669f2e9 499 // -----------------------------------------------------------------------
Jeej 19:701d5669f2e9 500 /// D7A session procedure status upon termination
Jeej 19:701d5669f2e9 501 // =======================================================================
Jeej 19:701d5669f2e9 502 typedef union
Jeej 19:701d5669f2e9 503 {
Jeej 19:701d5669f2e9 504 struct
Jeej 19:701d5669f2e9 505 {
Jeej 19:701d5669f2e9 506 /// Fifo identifier (handle)
Jeej 19:701d5669f2e9 507 u32 id : 8;
Jeej 19:701d5669f2e9 508 /// Flush status.
Jeej 19:701d5669f2e9 509 u32 ok : 1;
Jeej 19:701d5669f2e9 510 /// RFU
Jeej 19:701d5669f2e9 511 u32 rfu : 15;
Jeej 19:701d5669f2e9 512 /// D7A error
Jeej 19:701d5669f2e9 513 u32 err : 8;
Jeej 19:701d5669f2e9 514 } bf;
Jeej 19:701d5669f2e9 515
Jeej 19:701d5669f2e9 516 /// word access
Jeej 19:701d5669f2e9 517 u32 word;
Jeej 19:701d5669f2e9 518
Jeej 19:701d5669f2e9 519 } d7a_status_t;
Jeej 19:701d5669f2e9 520
Jeej 19:701d5669f2e9 521 #endif // __D7A_1X_H__