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.
include/d7a_1x.h@56:67e3d9608403, 2021-01-27 (annotated)
- 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?
| 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 | 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__ |