Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: modem_ref_helper_for_v5_3_217
include/d7a_1x.h@26:2c934a269914, 2018-03-05 (annotated)
- 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?
User | Revision | Line number | New 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__ |