WizziLab / modem_ref

Dependents:   modem_ref_helper

Committer:
Jeej
Date:
Wed Jan 27 14:45:28 2021 +0000
Revision:
56:67e3d9608403
Parent:
47:cf4519ba56d9
Sanity commit. Do not use.

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