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