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__ |