Exportable version of WizziLab's modem driver.
include/alp_spec.h@67:e458db8402dc, 2021-10-29 (annotated)
- Committer:
- marin_wizzi
- Date:
- Fri Oct 29 13:54:43 2021 +0000
- Revision:
- 67:e458db8402dc
- Parent:
- 60:08efaaca0e83
had to be commited for Scanner test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Jeej | 19:701d5669f2e9 | 1 | /// @copyright |
Jeej | 19:701d5669f2e9 | 2 | /// ========================================================================={{{ |
Jeej | 56:67e3d9608403 | 3 | /// Copyright (c) 2012-2020 WizziLab / |
Jeej | 19:701d5669f2e9 | 4 | /// All rights reserved / |
Jeej | 19:701d5669f2e9 | 5 | /// / |
Jeej | 19:701d5669f2e9 | 6 | /// Should you have any questions regarding your right to use this Software, / |
Jeej | 19:701d5669f2e9 | 7 | /// contact WizziLab at www.wizzilab.com. / |
Jeej | 19:701d5669f2e9 | 8 | /// / |
Jeej | 19:701d5669f2e9 | 9 | /// =========================================================================}}} |
Jeej | 19:701d5669f2e9 | 10 | /// @endcopyright |
Jeej | 19:701d5669f2e9 | 11 | |
Jeej | 19:701d5669f2e9 | 12 | // ======================================================================= |
Jeej | 19:701d5669f2e9 | 13 | /// @file alp_spec.h |
Jeej | 19:701d5669f2e9 | 14 | /// @defgroup ALP |
Jeej | 19:701d5669f2e9 | 15 | /// @brief ALP definitions from D7A specification |
Jeej | 19:701d5669f2e9 | 16 | // ======================================================================= |
Jeej | 19:701d5669f2e9 | 17 | |
Jeej | 19:701d5669f2e9 | 18 | #ifndef __ALP_SPEC_H__ |
Jeej | 19:701d5669f2e9 | 19 | #define __ALP_SPEC_H__ |
Jeej | 19:701d5669f2e9 | 20 | |
Jeej | 19:701d5669f2e9 | 21 | #include "hal_types.h" |
Jeej | 19:701d5669f2e9 | 22 | |
Jeej | 19:701d5669f2e9 | 23 | // Opcode Modifiers / Preemption flags |
Jeej | 30:74aa36420c61 | 24 | #define ALP_OPCODE_RESP 0x40 |
Jeej | 30:74aa36420c61 | 25 | #define ALP_OPCODE_GROUP 0x80 |
Jeej | 30:74aa36420c61 | 26 | #define ALP_OPCODE_ERR 0x40 |
Jeej | 30:74aa36420c61 | 27 | #define ALP_OPCODE_EOP 0x80 |
Jeej | 30:74aa36420c61 | 28 | #define ALP_OPCODE_ITF 0x40 |
Jeej | 30:74aa36420c61 | 29 | #define ALP_OPCODE_INDIRECT 0x40 |
Jeej | 30:74aa36420c61 | 30 | #define ALP_OPCODE_OVERLOAD 0x80 |
Jeej | 19:701d5669f2e9 | 31 | |
Jeej | 19:701d5669f2e9 | 32 | typedef enum { |
Jeej | 30:74aa36420c61 | 33 | // OPCODE | OPERAND |
Jeej | 30:74aa36420c61 | 34 | ALP_OPCODE_NOP = 0, //| - |
Jeej | 19:701d5669f2e9 | 35 | |
Jeej | 30:74aa36420c61 | 36 | ALP_OPCODE_F_RD_DATA = 1, //| FDR |
Jeej | 30:74aa36420c61 | 37 | ALP_OPCODE_F_RD_PROP = 2, //| FID |
Jeej | 19:701d5669f2e9 | 38 | |
Jeej | 30:74aa36420c61 | 39 | ALP_OPCODE_F_WR_DATA = 4, //| FD |
Jeej | 30:74aa36420c61 | 40 | ALP_OPCODE_F_WR_FLUSH = 5, //| FD |
Jeej | 30:74aa36420c61 | 41 | ALP_OPCODE_F_WR_PROP = 6, //| FD |
Jeej | 30:74aa36420c61 | 42 | ALP_OPCODE_F_TOUCH = 7, //| FD |
Jeej | 19:701d5669f2e9 | 43 | |
Jeej | 30:74aa36420c61 | 44 | ALP_OPCODE_QUERY = 8, //| Q |
Jeej | 30:74aa36420c61 | 45 | ALP_OPCODE_QBREAK = 9, //| Q |
Jeej | 30:74aa36420c61 | 46 | ALP_OPCODE_PERM_REQ = 10, //| P |
Jeej | 19:701d5669f2e9 | 47 | |
Jeej | 30:74aa36420c61 | 48 | ALP_OPCODE_CRC_CHECK = 11, //| Q |
Jeej | 19:701d5669f2e9 | 49 | |
Jeej | 30:74aa36420c61 | 50 | ALP_OPCODE_F_EXIST = 16, //| FID |
Jeej | 30:74aa36420c61 | 51 | ALP_OPCODE_F_CREATE = 17, //| FD |
Jeej | 30:74aa36420c61 | 52 | ALP_OPCODE_F_DELETE = 18, //| FID |
Jeej | 30:74aa36420c61 | 53 | ALP_OPCODE_F_RESTORE = 19, //| FID |
Jeej | 30:74aa36420c61 | 54 | ALP_OPCODE_F_FLUSH = 20, //| FID |
Jeej | 30:74aa36420c61 | 55 | ALP_OPCODE_F_DECLARE = 21, //| FH XXX Deprecated DO NOT USE !!! |
Jeej | 30:74aa36420c61 | 56 | ALP_OPCODE_F_CLOSE = 22, //| FID |
Jeej | 30:74aa36420c61 | 57 | ALP_OPCODE_F_COPY = 23, //| 2xFID |
Jeej | 30:74aa36420c61 | 58 | ALP_OPCODE_F_EXECUTE = 31, //| FID |
Jeej | 19:701d5669f2e9 | 59 | |
Jeej | 30:74aa36420c61 | 60 | ALP_OPCODE_RSP_F_DATA = 32, //| FD |
Jeej | 30:74aa36420c61 | 61 | ALP_OPCODE_RSP_F_PROP = 33, //| FH |
Jeej | 30:74aa36420c61 | 62 | ALP_OPCODE_RSP_STATUS = 34, //| S |
Jeej | 30:74aa36420c61 | 63 | ALP_OPCODE_RSP_ISTATUS = ALP_OPCODE_RSP_STATUS + ALP_OPCODE_ITF, //| SI |
Jeej | 37:f5424d109c6d | 64 | ALP_OPCODE_RSP_EOPISTATUS = ALP_OPCODE_RSP_STATUS + ALP_OPCODE_ITF + ALP_OPCODE_EOP, //| SI |
Jeej | 30:74aa36420c61 | 65 | ALP_OPCODE_RSP_TAG = 35, //| PID |
Jeej | 30:74aa36420c61 | 66 | ALP_OPCODE_RSP_EOPTAG = ALP_OPCODE_RSP_TAG + ALP_OPCODE_EOP, //| PID |
Jeej | 30:74aa36420c61 | 67 | ALP_OPCODE_RSP_ERRTAG = ALP_OPCODE_RSP_TAG + ALP_OPCODE_ERR, //| PID |
Jeej | 30:74aa36420c61 | 68 | ALP_OPCODE_RSP_URC = 36, //| |
Jeej | 56:67e3d9608403 | 69 | ALP_OPCODE_RSP_SECURED = 37, //| |
Jeej | 19:701d5669f2e9 | 70 | |
Jeej | 30:74aa36420c61 | 71 | ALP_OPCODE_CHUNK = 48, //| - |
Jeej | 30:74aa36420c61 | 72 | ALP_OPCODE_LOGIC = 49, //| - |
Jeej | 30:74aa36420c61 | 73 | ALP_OPCODE_FORWARD = 50, //| I |
Jeej | 30:74aa36420c61 | 74 | ALP_OPCODE_IFORWARD = 51, //| IFID |
Jeej | 30:74aa36420c61 | 75 | ALP_OPCODE_TAG = 52, //| PID |
Jeej | 30:74aa36420c61 | 76 | ALP_OPCODE_URCC = 53, //| |
Jeej | 19:701d5669f2e9 | 77 | |
Jeej | 30:74aa36420c61 | 78 | ALP_OPCODE_EXT = 63, //| OP |ARGC| ARGS | |
Jeej | 30:74aa36420c61 | 79 | //| 1B | 1B | ARGC-bytes | |
Jeej | 19:701d5669f2e9 | 80 | } alp_opcodes_t; |
Jeej | 30:74aa36420c61 | 81 | #define ALP_OPCODE_UNKNOWN (-1) |
Jeej | 19:701d5669f2e9 | 82 | |
Jeej | 19:701d5669f2e9 | 83 | typedef enum { |
Jeej | 30:74aa36420c61 | 84 | ALP_ITF_TYPE_HOST = 0x00, |
Jeej | 30:74aa36420c61 | 85 | ALP_ITF_TYPE_BLE = 0xB0, |
Jeej | 30:74aa36420c61 | 86 | ALP_ITF_TYPE_COM = 0xC0, |
Jeej | 30:74aa36420c61 | 87 | ALP_ITF_TYPE_D7A = 0xD7, // Only this one actually in D7A Spec |
Jeej | 30:74aa36420c61 | 88 | ALP_ITF_TYPE_LWAN = 0x10, |
Jeej | 30:74aa36420c61 | 89 | |
Jeej | 30:74aa36420c61 | 90 | ALP_ITF_TYPE_NONE = 0xFF |
Jeej | 19:701d5669f2e9 | 91 | } alp_itf_type_t; |
Jeej | 19:701d5669f2e9 | 92 | |
Jeej | 19:701d5669f2e9 | 93 | // EXTOpcode Modifiers / Preemption flags |
Jeej | 30:74aa36420c61 | 94 | #define ALP_EXTOPCODE_DISTANT 0x40 // Used w/ EXTOPCODE_F_DECLARE |
Jeej | 19:701d5669f2e9 | 95 | |
Jeej | 19:701d5669f2e9 | 96 | typedef enum { |
Jeej | 19:701d5669f2e9 | 97 | // WIZZILAB OPCODE EXTENSION |
Jeej | 30:74aa36420c61 | 98 | ALP_EXTOPCODE_ITF_START = 0, //| 'ITF' activation operations: |
Jeej | 30:74aa36420c61 | 99 | ALP_EXTOPCODE_ITF_STOP = 1, //| TYPE | DEVQ | IFID | FLAGS | |
Jeej | 30:74aa36420c61 | 100 | ALP_EXTOPCODE_ITF_PAUSE = 2, //| 1B | 1B | 1B | 1B | |
Jeej | 30:74aa36420c61 | 101 | //| TYPE: ITF Type (D7A,LWAN,BLE...) |
Jeej | 30:74aa36420c61 | 102 | //| DEVQ: ITF Max Device number if applicable |
Jeej | 30:74aa36420c61 | 103 | //| IFID: ITF Config file if applicable |
Jeej | 30:74aa36420c61 | 104 | //| FLAG: Additional configuration flags if applicable |
Jeej | 30:74aa36420c61 | 105 | ALP_EXTOPCODE_F_DECLARE = 21, //| FH |
Jeej | 19:701d5669f2e9 | 106 | } alp_ext_opcodes_t; |
Jeej | 19:701d5669f2e9 | 107 | |
Jeej | 19:701d5669f2e9 | 108 | typedef enum |
Jeej | 19:701d5669f2e9 | 109 | { |
Jeej | 19:701d5669f2e9 | 110 | ALP_ERR_ITF_FULL = 2, // 0x02: For interfaces supporting buffering, indicates buffer reached maximum capacity (no data loss) |
Jeej | 19:701d5669f2e9 | 111 | ALP_ERR_PARTIAL_COMPLETION = 1, // 0x01: Action received and partially completed at response. To be completed after response |
Jeej | 19:701d5669f2e9 | 112 | |
Jeej | 19:701d5669f2e9 | 113 | ALP_ERR_NONE = 0, // 0x00: Action completed (OK) |
Jeej | 19:701d5669f2e9 | 114 | ALP_ERR_FILE_NOT_FOUND = -1, // 0xFF: Error access file: File ID does not exist |
Jeej | 19:701d5669f2e9 | 115 | ALP_ERR_FILE_EXIST = -2, // 0xFE: Error create file: File ID already exists |
Jeej | 19:701d5669f2e9 | 116 | ALP_ERR_FILE_NOT_RESTORABLE = -3, // 0xFD: Error restore file: File is not restorable |
Jeej | 19:701d5669f2e9 | 117 | ALP_ERR_PERMISSION_DENIED = -4, // 0xFC: Error access file: Insufficient permissions |
Jeej | 19:701d5669f2e9 | 118 | ALP_ERR_LENGTH_OVERFLOW = -5, // 0xFB: Error create file: Supplied length (in header) is beyond file limits |
Jeej | 19:701d5669f2e9 | 119 | ALP_ERR_ALLOC_OVERFLOW = -6, // 0xFA: Error create file: Supplied allocation (in header) is beyond file limits |
Jeej | 19:701d5669f2e9 | 120 | ALP_ERR_OFFSET_OVERFLOW = -7, // 0xF9: Error write: Supplied start offset is out of bounds of file allocation |
Jeej | 19:701d5669f2e9 | 121 | ALP_ERR_WRITE_OVERFLOW = -8, // 0xF8: Error complete write: Supplied data goes beyond file allocation |
Jeej | 19:701d5669f2e9 | 122 | ALP_ERR_WRITE_ERROR = -9, // 0xF7: Error write: impossible to write in storage location |
Jeej | 19:701d5669f2e9 | 123 | ALP_ERR_OPERATION_UNKNOWN = -10,// 0xF6: Error unknown Operation |
Jeej | 19:701d5669f2e9 | 124 | ALP_ERR_OPERAND_INCOMPLETE = -11,// 0xF5: Error incomplete Operand |
Jeej | 19:701d5669f2e9 | 125 | ALP_ERR_OPERAND_WRONG_FORMAT = -12,// 0xF4: Error wrong Operand format |
Jeej | 19:701d5669f2e9 | 126 | ALP_ERR_ITF_INVALID = -13,// 0xF3: Error invalid interface |
Jeej | 19:701d5669f2e9 | 127 | ALP_ERR_ITF_OVERFLOW = -14,// 0xF2: Error interface overflown (i.e. resources exhausted, buffer full with data discarded) |
Jeej | 19:701d5669f2e9 | 128 | ALP_ERR_QUERY_FAIL = -15,// 0xF1: (Group of) Query result was false (Informative error code). |
Jeej | 41:6f83174ffed4 | 129 | ALP_ERR_ITF_NOT_READY = -16,// 0xF0: Error interface is not ready |
Jeej | 19:701d5669f2e9 | 130 | |
Jeej | 40:62b7f6d25772 | 131 | ALP_ERR_ITF_START = -64,// 0xC0: Interface specific error, start range |
Jeej | 39:bc4fccf2d84b | 132 | ALP_ERR_ITF_END = -96,// 0xA0: Interface specific error, end range |
Jeej | 40:62b7f6d25772 | 133 | ALP_ERR_ITF_NOT_SPECIFIED = ALP_ERR_ITF_END, // Not specified internal interface error. |
Jeej | 37:f5424d109c6d | 134 | |
Jeej | 19:701d5669f2e9 | 135 | ALP_ERR_UNKNOWN = -128,// 0x80: Unknown error |
Jeej | 19:701d5669f2e9 | 136 | ALP_ERR_FS_TIMEOUT, // 0x81: Internal FS Error |
Jeej | 19:701d5669f2e9 | 137 | ALP_ERR_ITF_UNKNOWN, // 0x82: Unknown Interface |
Jeej | 19:701d5669f2e9 | 138 | ALP_ERR_ITF_TIMEOUT, // 0x83: Internal ITF Error |
Jeej | 56:67e3d9608403 | 139 | ALP_ERR_CHAL_NOT_VALID // 0x84: Challenge has expired |
Jeej | 19:701d5669f2e9 | 140 | |
Jeej | 19:701d5669f2e9 | 141 | } alp_errors_t; |
Jeej | 19:701d5669f2e9 | 142 | |
Jeej | 19:701d5669f2e9 | 143 | typedef enum { |
Jeej | 30:74aa36420c61 | 144 | ALP_QCOMP_NE = 0, |
Jeej | 30:74aa36420c61 | 145 | ALP_QCOMP_EQ = 1, |
Jeej | 30:74aa36420c61 | 146 | ALP_QCOMP_LT = 2, |
Jeej | 30:74aa36420c61 | 147 | ALP_QCOMP_LTE = 3, |
Jeej | 30:74aa36420c61 | 148 | ALP_QCOMP_GT = 4, |
Jeej | 30:74aa36420c61 | 149 | ALP_QCOMP_GTE = 5 |
Jeej | 30:74aa36420c61 | 150 | } alp_q_comp_t; |
Jeej | 30:74aa36420c61 | 151 | #define ALP_QCOMP(v) (((v) & 7) << 0) |
Jeej | 47:cf4519ba56d9 | 152 | #define ALP_QSTR_PARAM(v) (((v) & 0x0F) << 0) |
Jeej | 30:74aa36420c61 | 153 | |
Jeej | 30:74aa36420c61 | 154 | typedef enum { |
Jeej | 30:74aa36420c61 | 155 | // This is not matching ALP's spec on purpose... |
Jeej | 30:74aa36420c61 | 156 | ALP_QLOGIC_AND = 0, |
Jeej | 30:74aa36420c61 | 157 | ALP_QLOGIC_OR = 1, |
Jeej | 30:74aa36420c61 | 158 | ALP_QLOGIC_XOR = 2, |
Jeej | 30:74aa36420c61 | 159 | ALP_QLOGIC_NOR = 3, |
Jeej | 30:74aa36420c61 | 160 | ALP_QLOGIC_NAND = 4, |
Jeej | 30:74aa36420c61 | 161 | } alp_q_logic_t; |
Jeej | 47:cf4519ba56d9 | 162 | #define ALP_QLOGIC(v) (((v-1) & 0x03) << 6) |
Jeej | 30:74aa36420c61 | 163 | |
Jeej | 30:74aa36420c61 | 164 | typedef enum { |
Jeej | 30:74aa36420c61 | 165 | ALP_QDATA_SIGNED = 0, |
Jeej | 30:74aa36420c61 | 166 | ALP_QDATA_UNSIGNED = 1 |
Jeej | 30:74aa36420c61 | 167 | } alp_q_data_t; |
Jeej | 30:74aa36420c61 | 168 | #define ALP_QDATA(v) (((v) & 1) << 3) |
Jeej | 30:74aa36420c61 | 169 | #define ALP_QMASK(v) (((v) & 1) << 4) |
Jeej | 30:74aa36420c61 | 170 | |
Jeej | 30:74aa36420c61 | 171 | typedef enum { |
Jeej | 30:74aa36420c61 | 172 | ALP_QTYPE_NONVOID = 0, // This is better done by "EXIST" |
Jeej | 30:74aa36420c61 | 173 | ALP_QTYPE_ACOMP_ZERO = 1, |
Jeej | 30:74aa36420c61 | 174 | ALP_QTYPE_ACOMP_IMMEDIATE = 2, |
Jeej | 30:74aa36420c61 | 175 | ALP_QTYPE_ACOMP_FILE = 3, |
Jeej | 30:74aa36420c61 | 176 | ALP_QTYPE_INRANGE = 4, |
Jeej | 30:74aa36420c61 | 177 | ALP_QTYPE_STR_TOKEN = 7 // |
Jeej | 30:74aa36420c61 | 178 | }alp_q_type_t; |
Jeej | 30:74aa36420c61 | 179 | #define ALP_QTYPE(v) (((v) & 7) << 5) |
Jeej | 30:74aa36420c61 | 180 | |
Jeej | 30:74aa36420c61 | 181 | typedef enum { |
Jeej | 19:701d5669f2e9 | 182 | /// Disable all URCs on requesting ITF |
Jeej | 30:74aa36420c61 | 183 | ALP_URC_TYPE_NONE = 0xFF, |
Jeej | 19:701d5669f2e9 | 184 | /// Enable Link Quality (on IFID) URCs on requesting ITF |
Jeej | 30:74aa36420c61 | 185 | ALP_URC_TYPE_LQUAL = 0, |
Jeej | 19:701d5669f2e9 | 186 | /// Enable Link Down (on IFID) URCs on requesting ITF |
Jeej | 30:74aa36420c61 | 187 | ALP_URC_TYPE_LDOWN = 1, |
Jeej | 56:67e3d9608403 | 188 | /// Enable system/modem URC |
Jeej | 41:6f83174ffed4 | 189 | /// XXX Could enable subtypes, but API does not allow it |
Jeej | 41:6f83174ffed4 | 190 | ALP_URC_TYPE_BUSY = 2, |
Jeej | 41:6f83174ffed4 | 191 | /// Enable Interface BUSY messages |
Jeej | 41:6f83174ffed4 | 192 | ALP_URC_TYPE_ITF_BUSY = 3, |
Jeej | 41:6f83174ffed4 | 193 | /// XXX system/modem URC with parameter |
Jeej | 41:6f83174ffed4 | 194 | // ALP_URC_TYPE_SYS |
Jeej | 19:701d5669f2e9 | 195 | |
Jeej | 19:701d5669f2e9 | 196 | ALP_URC_TYPE_QTY, |
Jeej | 19:701d5669f2e9 | 197 | |
Jeej | 19:701d5669f2e9 | 198 | } alp_urc_type_t; |
Jeej | 19:701d5669f2e9 | 199 | |
Jeej | 19:701d5669f2e9 | 200 | TYPEDEF_STRUCT_PACKED { |
Jeej | 19:701d5669f2e9 | 201 | u8 perm; |
Jeej | 19:701d5669f2e9 | 202 | u8 prop; |
Jeej | 19:701d5669f2e9 | 203 | u8 afid; |
Jeej | 19:701d5669f2e9 | 204 | u8 ifid; |
Jeej | 19:701d5669f2e9 | 205 | u32 size; // XXX Big Endian |
Jeej | 19:701d5669f2e9 | 206 | u32 alloc;// XXX Big Endian |
Jeej | 19:701d5669f2e9 | 207 | } alp_file_header_t; |
Jeej | 19:701d5669f2e9 | 208 | #define ALP_FILE_HEADER_SIZE (sizeof(alp_file_header_t)) |
Jeej | 19:701d5669f2e9 | 209 | |
Jeej | 19:701d5669f2e9 | 210 | // RESPONSES Building helpers |
Jeej | 19:701d5669f2e9 | 211 | // ====================================================================== |
Jeej | 19:701d5669f2e9 | 212 | #define ALP_RSP_STATUS_SIZE (3) // OPCODE + ACTION_ID + ERR |
Jeej | 19:701d5669f2e9 | 213 | #define ALP_RSP_F_PROP_SIZE (2+ALP_FILE_HEADER_SIZE) // OPCODE + FID + 12xDATA |
Jeej | 19:701d5669f2e9 | 214 | #define ALP_LFIELD_SIZE(a) (((a) <= 0x3F) ? 1 : \ |
Jeej | 19:701d5669f2e9 | 215 | (((a) <= 0x3FFF) ? 2 : \ |
Jeej | 19:701d5669f2e9 | 216 | (((a) <= 0x3FFFFF) ? 3 : 4))) |
Jeej | 19:701d5669f2e9 | 217 | |
Jeej | 19:701d5669f2e9 | 218 | // ACTIONS Building helpers |
Jeej | 19:701d5669f2e9 | 219 | // ---------------------------------------------------------------------- |
Jeej | 19:701d5669f2e9 | 220 | // Usual arguments: |
Jeej | 19:701d5669f2e9 | 221 | // _p : pointer to the output string buffer (incremented by the macro) |
Jeej | 19:701d5669f2e9 | 222 | // _r : ALP response Flag (true/false) |
Jeej | 19:701d5669f2e9 | 223 | // _fid : File ID |
Jeej | 19:701d5669f2e9 | 224 | // _o : Access Offset |
Jeej | 19:701d5669f2e9 | 225 | // _l : Access Length |
Jeej | 30:74aa36420c61 | 226 | // _m : Mask |
Jeej | 30:74aa36420c61 | 227 | // _v : Immediate value |
Jeej | 19:701d5669f2e9 | 228 | // ====================================================================== |
Jeej | 19:701d5669f2e9 | 229 | #define ALP_ACTION_NOP_SIZE (1) |
Jeej | 60:08efaaca0e83 | 230 | #define ALP_ACTION_NOP(_p,_r,_g) do {\ |
Jeej | 60:08efaaca0e83 | 231 | *(p)++ = ALP_OPCODE_NOP | ((_r)? ALP_OPCODE_RESP: 0) | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 19:701d5669f2e9 | 232 | } while(0) |
Jeej | 19:701d5669f2e9 | 233 | |
Jeej | 19:701d5669f2e9 | 234 | #define ALP_ACTION_TAG_SIZE (2) |
Jeej | 60:08efaaca0e83 | 235 | #define ALP_ACTION_TAG(_p,_tag,_eop) do {\ |
Jeej | 60:08efaaca0e83 | 236 | *(p)++ = ALP_OPCODE_TAG | ((_eop)? ALP_OPCODE_EOP: 0);\ |
Jeej | 60:08efaaca0e83 | 237 | *(p)++ = (_tag);\ |
Jeej | 19:701d5669f2e9 | 238 | } while(0) |
Jeej | 19:701d5669f2e9 | 239 | |
Jeej | 19:701d5669f2e9 | 240 | #define ALP_ACTION_F_RD_DATA_SIZE(_o,_l) (2+ALP_LFIELD_SIZE(_o)+ALP_LFIELD_SIZE(_l)) |
Jeej | 19:701d5669f2e9 | 241 | #define ALP_ACTION_F_RD_DATA_SIZE_MAX (2+4+4) |
Jeej | 56:67e3d9608403 | 242 | #define ALP_ACTION_F_RD_DATA(_p,_r,_fid,_o,_l,_g) do {\ |
Jeej | 56:67e3d9608403 | 243 | *(_p)++ = ALP_OPCODE_F_RD_DATA | ((_r)? ALP_OPCODE_RESP: 0) | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 19:701d5669f2e9 | 244 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 245 | (_p) += alp_encode_length(_p,_o);\ |
Jeej | 19:701d5669f2e9 | 246 | (_p) += alp_encode_length(_p,_l);\ |
Jeej | 19:701d5669f2e9 | 247 | } while(0) |
Jeej | 19:701d5669f2e9 | 248 | |
Jeej | 19:701d5669f2e9 | 249 | #define ALP_ACTION_F_RD_PROP_SIZE (2) |
Jeej | 60:08efaaca0e83 | 250 | #define ALP_ACTION_F_RD_PROP(_p,_r,_fid,_g) do {\ |
Jeej | 60:08efaaca0e83 | 251 | *(_p)++ = ALP_OPCODE_F_RD_PROP | ((_r)? ALP_OPCODE_RESP: 0) | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 19:701d5669f2e9 | 252 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 253 | } while(0) |
Jeej | 19:701d5669f2e9 | 254 | |
Jeej | 19:701d5669f2e9 | 255 | #define ALP_ACTION_F_WR_DATA_SIZE(_o,_l) (2+ALP_LFIELD_SIZE(_o)+ALP_LFIELD_SIZE(_l)+(_l)) |
Jeej | 19:701d5669f2e9 | 256 | #define ALP_ACTION_F_WR_DATA_SIZE_MAX(_l) (2+4+4+(_l)) |
Jeej | 56:67e3d9608403 | 257 | #define ALP_ACTION_F_WR_DATA(_p,_r,_fid,_o,_l,_data,_g) do {\ |
Jeej | 56:67e3d9608403 | 258 | *(_p)++ = ALP_OPCODE_F_WR_DATA | ((_r)? ALP_OPCODE_RESP: 0) | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 19:701d5669f2e9 | 259 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 260 | (_p) += alp_encode_length(_p,_o);\ |
Jeej | 19:701d5669f2e9 | 261 | (_p) += alp_encode_length(_p,_l);\ |
Jeej | 19:701d5669f2e9 | 262 | memcpy((_p),_data,_l);(_p) += (_l);\ |
Jeej | 19:701d5669f2e9 | 263 | } while(0) |
Jeej | 19:701d5669f2e9 | 264 | |
Jeej | 19:701d5669f2e9 | 265 | #define ALP_ACTION_F_WR_FLUSH_SIZE(_o,_l) (2+ALP_LFIELD_SIZE(_o)+ALP_LFIELD_SIZE(_l)+(_l)) |
Jeej | 19:701d5669f2e9 | 266 | #define ALP_ACTION_F_WR_FLUSH_SIZE_MAX(_l) (2+4+(_l)) |
Jeej | 60:08efaaca0e83 | 267 | #define ALP_ACTION_F_WR_FLUSH(_p,_r,_fid,_o,_l,_data,_g) do {\ |
Jeej | 60:08efaaca0e83 | 268 | *(_p)++ = ALP_OPCODE_F_WR_FLUSH | ((_r)? ALP_OPCODE_RESP: 0) | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 19:701d5669f2e9 | 269 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 270 | (_p) += alp_encode_length(_p,_o);\ |
Jeej | 19:701d5669f2e9 | 271 | (_p) += alp_encode_length(_p,_l);\ |
Jeej | 19:701d5669f2e9 | 272 | memcpy((_p),_data,_l);(_p) += (_l);\ |
Jeej | 19:701d5669f2e9 | 273 | } while(0) |
Jeej | 19:701d5669f2e9 | 274 | |
Jeej | 19:701d5669f2e9 | 275 | #define ALP_ACTION_F_WR_PROP_SIZE_MAX (2+2+sizeof(alp_file_header_t)) |
Jeej | 60:08efaaca0e83 | 276 | #define ALP_ACTION_F_WR_PROP(_p,_r,_fid,_o,_l,_data,_g) do {\ |
Jeej | 60:08efaaca0e83 | 277 | *(_p)++ = ALP_OPCODE_F_WR_PROP | ((_r)? ALP_OPCODE_RESP: 0) | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 19:701d5669f2e9 | 278 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 279 | *(_p)++ = (_o);\ |
Jeej | 19:701d5669f2e9 | 280 | *(_p)++ = (_l);\ |
Jeej | 19:701d5669f2e9 | 281 | memcpy((_p),(u8*)(_data),(_l));(_p) += (_l);\ |
Jeej | 19:701d5669f2e9 | 282 | } while(0) |
Jeej | 19:701d5669f2e9 | 283 | |
Jeej | 19:701d5669f2e9 | 284 | #define ALP_ACTION_F_TOUCH_SIZE(_o,_l) (2+ALP_LFIELD_SIZE(_o)+ALP_LFIELD_SIZE(_l)) |
Jeej | 19:701d5669f2e9 | 285 | #define ALP_ACTION_F_TOUCH_SIZE_MAX (2+4+4) |
Jeej | 60:08efaaca0e83 | 286 | #define ALP_ACTION_F_TOUCH(_p,_r,_fid,_o,_l,_g) do {\ |
Jeej | 60:08efaaca0e83 | 287 | *(_p)++ = ALP_OPCODE_F_TOUCH | ((_r)? ALP_OPCODE_RESP: 0) | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 19:701d5669f2e9 | 288 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 289 | (_p) += alp_encode_length(_p,_o);\ |
Jeej | 19:701d5669f2e9 | 290 | (_p) += alp_encode_length(_p,_l);\ |
Jeej | 19:701d5669f2e9 | 291 | } while(0) |
Jeej | 19:701d5669f2e9 | 292 | |
Jeej | 19:701d5669f2e9 | 293 | #define ALP_ACTION_F_EXIST_SIZE (2) |
Jeej | 60:08efaaca0e83 | 294 | #define ALP_ACTION_F_EXIST(_p,_r,_fid,_g) do {\ |
Jeej | 60:08efaaca0e83 | 295 | *(_p)++ = ALP_OPCODE_F_EXIST | ((_r)? ALP_OPCODE_RESP: 0) | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 19:701d5669f2e9 | 296 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 297 | } while(0) |
Jeej | 19:701d5669f2e9 | 298 | |
Jeej | 19:701d5669f2e9 | 299 | #define ALP_ACTION_F_DELETE_SIZE (2) |
Jeej | 60:08efaaca0e83 | 300 | #define ALP_ACTION_F_DELETE(_p,_r,_fid,_g) do {\ |
Jeej | 60:08efaaca0e83 | 301 | *(_p)++ = ALP_OPCODE_F_DELETE | ((_r)? ALP_OPCODE_RESP: 0) | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 19:701d5669f2e9 | 302 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 303 | } while(0) |
Jeej | 19:701d5669f2e9 | 304 | |
Jeej | 19:701d5669f2e9 | 305 | #define ALP_ACTION_F_FLUSH_SIZE (2) |
Jeej | 56:67e3d9608403 | 306 | #define ALP_ACTION_F_FLUSH(_p,_r,_fid,_g) do {\ |
Jeej | 56:67e3d9608403 | 307 | *(_p)++ = ALP_OPCODE_F_FLUSH | ((_r)? ALP_OPCODE_RESP: 0) | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 19:701d5669f2e9 | 308 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 309 | } while(0) |
Jeej | 19:701d5669f2e9 | 310 | |
Jeej | 19:701d5669f2e9 | 311 | #define ALP_ACTION_F_CREATE_SIZE (2+sizeof(alp_file_header_t)) |
Jeej | 60:08efaaca0e83 | 312 | #define ALP_ACTION_F_CREATE(_p,_r,_fid,_hdr,_g) do {\ |
Jeej | 60:08efaaca0e83 | 313 | *(_p)++ = ALP_OPCODE_F_CREATE | ((_r)? ALP_OPCODE_RESP: 0) | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 19:701d5669f2e9 | 314 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 315 | memcpy((_p),(u8*)(_hdr),sizeof(alp_file_header_t));(_p) += sizeof(alp_file_header_t);\ |
Jeej | 19:701d5669f2e9 | 316 | } while(0) |
Jeej | 19:701d5669f2e9 | 317 | |
Jeej | 19:701d5669f2e9 | 318 | #define ALP_PERM_REQ_USER 0 |
Jeej | 19:701d5669f2e9 | 319 | #define ALP_PERM_REQ_ROOT 1 |
Jeej | 56:67e3d9608403 | 320 | #define ALP_PERM_REQ_APP 2 |
Jeej | 35:ac940cf8ebe6 | 321 | |
Jeej | 56:67e3d9608403 | 322 | // Authentication Protocol without initialization data |
Jeej | 19:701d5669f2e9 | 323 | #define ALP_WIZZILAB_AUTH_PROTOCOL_ID 42 |
Jeej | 56:67e3d9608403 | 324 | // Challenge Encryption-Authentication Protocol |
Jeej | 56:67e3d9608403 | 325 | #define ALP_WIZZILAB_CHAL_PROTOCOL_ID 43 |
Jeej | 56:67e3d9608403 | 326 | // Authentication Protocol with initialization data |
Jeej | 56:67e3d9608403 | 327 | #define ALP_WIZZILAB_SIGN_PROTOCOL_ID 44 |
Jeej | 56:67e3d9608403 | 328 | |
Jeej | 56:67e3d9608403 | 329 | #define ALP_ACTION_PERM_REQ_TOKEN_SIZE 8 |
Jeej | 56:67e3d9608403 | 330 | #define ALP_ACTION_PERM_REQ_OFFSET (3+ALP_ACTION_PERM_REQ_TOKEN_SIZE) |
Jeej | 19:701d5669f2e9 | 331 | #define ALP_ACTION_PERM_REQ_SIZE(_l) (ALP_ACTION_PERM_REQ_OFFSET+(_l)) |
Jeej | 56:67e3d9608403 | 332 | #define ALP_ACTION_PERM_REQ(_p,_r,_role, _protocol) do {\ |
Jeej | 19:701d5669f2e9 | 333 | *(_p)++ = (_r)?ALP_OPCODE_PERM_REQ+ALP_OPCODE_RESP:ALP_OPCODE_PERM_REQ;\ |
Jeej | 19:701d5669f2e9 | 334 | *(_p)++ = (_role);\ |
Jeej | 56:67e3d9608403 | 335 | *(_p)++ = (_protocol);\ |
Jeej | 19:701d5669f2e9 | 336 | } while(0) |
Jeej | 19:701d5669f2e9 | 337 | |
Jeej | 56:67e3d9608403 | 338 | #define ALP_SECURED_USER ALP_PERM_REQ_USER |
Jeej | 56:67e3d9608403 | 339 | #define ALP_SECURED_ROOT ALP_PERM_REQ_ROOT |
Jeej | 56:67e3d9608403 | 340 | #define ALP_SECURED_APP ALP_PERM_REQ_APP |
Jeej | 56:67e3d9608403 | 341 | |
Jeej | 56:67e3d9608403 | 342 | #define ALP_ACTION_SECURED_IV_SIZE 8 |
Jeej | 56:67e3d9608403 | 343 | #define ALP_ACTION_SECURED_TOKEN_SIZE 8 |
Jeej | 56:67e3d9608403 | 344 | #define ALP_ACTION_SECURED_OFFSET (3+ALP_ACTION_SECURED_IV_SIZE+ALP_ACTION_SECURED_TOKEN_SIZE) |
Jeej | 56:67e3d9608403 | 345 | #define ALP_ACTION_SECURED_SIZE(_l) (ALP_ACTION_SECURED_OFFSET+(_l)) |
Jeej | 56:67e3d9608403 | 346 | #define ALP_ACTION_SECURED(_p,_role, _protocol) do {\ |
Jeej | 56:67e3d9608403 | 347 | *(_p)++ = ALP_OPCODE_RSP_SECURED;\ |
Jeej | 56:67e3d9608403 | 348 | *(_p)++ = (_role);\ |
Jeej | 56:67e3d9608403 | 349 | *(_p)++ = (_protocol);\ |
Jeej | 56:67e3d9608403 | 350 | } while(0) |
Jeej | 35:ac940cf8ebe6 | 351 | |
Jeej | 19:701d5669f2e9 | 352 | #define ALP_ACTION_URCC_SIZE(t) ((t==ALP_URC_TYPE_NONE)?2:4) |
Jeej | 19:701d5669f2e9 | 353 | #define ALP_ACTION_URCC_EN(_p,_r,_type,_ifid,_cfg) do {\ |
Jeej | 19:701d5669f2e9 | 354 | *(_p)++ = (_r)?ALP_OPCODE_URCC+ALP_OPCODE_GROUP+ALP_OPCODE_RESP:ALP_OPCODE_URCC+ALP_OPCODE_GROUP;\ |
Jeej | 19:701d5669f2e9 | 355 | *(_p)++ = (_type);\ |
Jeej | 41:6f83174ffed4 | 356 | if((_type)==ALP_URC_TYPE_LQUAL || (_type)==ALP_URC_TYPE_LDOWN)\ |
Jeej | 19:701d5669f2e9 | 357 | {\ |
Jeej | 19:701d5669f2e9 | 358 | *(_p)++ = (_ifid);\ |
Jeej | 19:701d5669f2e9 | 359 | *(_p)++ = (_cfg);\ |
Jeej | 19:701d5669f2e9 | 360 | }\ |
Jeej | 41:6f83174ffed4 | 361 | else if((_type)==ALP_URC_TYPE_ITF_BUSY)\ |
Jeej | 41:6f83174ffed4 | 362 | {\ |
Jeej | 41:6f83174ffed4 | 363 | *(_p)++ = (_ifid);\ |
Jeej | 41:6f83174ffed4 | 364 | }\ |
Jeej | 19:701d5669f2e9 | 365 | } while(0) |
Jeej | 19:701d5669f2e9 | 366 | |
Jeej | 19:701d5669f2e9 | 367 | #define ALP_ACTION_URCC_DIS(_p,_r,_type,_ifid,_cfg) do {\ |
Jeej | 19:701d5669f2e9 | 368 | *(_p)++ = (_r)?ALP_OPCODE_URCC+ALP_OPCODE_RESP:ALP_OPCODE_URCC;\ |
Jeej | 19:701d5669f2e9 | 369 | *(_p)++ = (_type);\ |
Jeej | 41:6f83174ffed4 | 370 | if((_type)==ALP_URC_TYPE_LQUAL || (_type)==ALP_URC_TYPE_LDOWN)\ |
Jeej | 19:701d5669f2e9 | 371 | {\ |
Jeej | 19:701d5669f2e9 | 372 | *(_p)++ = (_ifid);\ |
Jeej | 19:701d5669f2e9 | 373 | *(_p)++ = (_cfg);\ |
Jeej | 19:701d5669f2e9 | 374 | }\ |
Jeej | 41:6f83174ffed4 | 375 | else if((_type)==ALP_URC_TYPE_ITF_BUSY)\ |
Jeej | 41:6f83174ffed4 | 376 | {\ |
Jeej | 41:6f83174ffed4 | 377 | *(_p)++ = (_ifid);\ |
Jeej | 41:6f83174ffed4 | 378 | }\ |
Jeej | 19:701d5669f2e9 | 379 | } while(0) |
Jeej | 19:701d5669f2e9 | 380 | |
Jeej | 19:701d5669f2e9 | 381 | #define ALP_ACTION_FORWARD_SIZE(s) (1+(s)) |
Jeej | 19:701d5669f2e9 | 382 | #define ALP_ACTION_FORWARD(p,itf,itfs) do {\ |
Jeej | 47:cf4519ba56d9 | 383 | *(p)++ = ALP_OPCODE_FORWARD | ALP_OPCODE_RESP;\ |
Jeej | 19:701d5669f2e9 | 384 | memcpy((p),(itf),(itfs));(p) += (itfs);\ |
Jeej | 19:701d5669f2e9 | 385 | } while(0) |
Jeej | 19:701d5669f2e9 | 386 | |
Jeej | 19:701d5669f2e9 | 387 | #define ALP_ACTION_RSP_F_DATA_SIZE(_o,_l) (2+ALP_LFIELD_SIZE(_o)+ALP_LFIELD_SIZE(_l)+(_l)) |
Jeej | 19:701d5669f2e9 | 388 | #define ALP_ACTION_RSP_F_DATA_SIZE_MAX(_l) (2+4+4+(_l)) |
Jeej | 19:701d5669f2e9 | 389 | #define ALP_ACTION_RSP_F_DATA(_p,_fid,_o,_l,_data) do {\ |
Jeej | 19:701d5669f2e9 | 390 | *(_p)++ = ALP_OPCODE_RSP_F_DATA;\ |
Jeej | 19:701d5669f2e9 | 391 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 392 | (_p) += alp_encode_length(_p,_o);\ |
Jeej | 19:701d5669f2e9 | 393 | (_p) += alp_encode_length(_p,_l);\ |
Jeej | 19:701d5669f2e9 | 394 | memcpy((_p),(u8*)(_data),(_l));(_p) += (_l);\ |
Jeej | 19:701d5669f2e9 | 395 | } while(0) |
Jeej | 19:701d5669f2e9 | 396 | |
Jeej | 19:701d5669f2e9 | 397 | #define ALP_ACTION_RSP_F_PROP_SIZE (2+ALP_FILE_HEADER_SIZE) |
Jeej | 19:701d5669f2e9 | 398 | #define ALP_ACTION_RSP_F_PROP(_p,_fid,_hdr) do {\ |
Jeej | 19:701d5669f2e9 | 399 | *(_p)++ = ALP_OPCODE_RSP_F_PROP;\ |
Jeej | 19:701d5669f2e9 | 400 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 401 | memcpy((_p),(u8*)(_hdr),ALP_FILE_HEADER_SIZE);(_p) += ALP_FILE_HEADER_SIZE;\ |
Jeej | 19:701d5669f2e9 | 402 | } while(0) |
Jeej | 19:701d5669f2e9 | 403 | |
Jeej | 42:87bf0654cb7b | 404 | #define ALP_ACTION_RSP_STATUS_SIZE (3) |
Jeej | 19:701d5669f2e9 | 405 | #define ALP_ACTION_RSP_STATUS(_p,_a,_s) do {\ |
Jeej | 19:701d5669f2e9 | 406 | *(_p)++ = ALP_OPCODE_RSP_STATUS;\ |
Jeej | 19:701d5669f2e9 | 407 | *(_p)++ = (_a);\ |
Jeej | 19:701d5669f2e9 | 408 | *(_p)++ = (_s);\ |
Jeej | 19:701d5669f2e9 | 409 | } while(0) |
Jeej | 19:701d5669f2e9 | 410 | |
Jeej | 19:701d5669f2e9 | 411 | #define ALP_ACTION_RSP_TAG_SIZE (2) |
Jeej | 19:701d5669f2e9 | 412 | #define ALP_ACTION_RSP_TAG(_p,_val,_eop,_err) do {\ |
Jeej | 19:701d5669f2e9 | 413 | u8 tmp = ALP_OPCODE_RSP_TAG;\ |
Jeej | 56:67e3d9608403 | 414 | tmp |= (_eop)? ALP_OPCODE_EOP: 0;\ |
Jeej | 56:67e3d9608403 | 415 | tmp |= (_err)? ALP_OPCODE_ERR: 0;\ |
Jeej | 19:701d5669f2e9 | 416 | *(_p)++ = tmp;\ |
Jeej | 19:701d5669f2e9 | 417 | *(_p)++ = (_val);\ |
Jeej | 19:701d5669f2e9 | 418 | } while(0) |
Jeej | 19:701d5669f2e9 | 419 | |
Jeej | 19:701d5669f2e9 | 420 | #define ALP_ACTION_EXT_SIZE(_argc) (3+(_argc)) |
Jeej | 19:701d5669f2e9 | 421 | #define ALP_ACTION_EXT(_p,_r,_op,_argc) do {\ |
Jeej | 19:701d5669f2e9 | 422 | *(_p)++ = (_r)?ALP_OPCODE_EXT+ALP_OPCODE_RESP:ALP_OPCODE_EXT;\ |
Jeej | 19:701d5669f2e9 | 423 | *(_p)++ = (_op);\ |
Jeej | 19:701d5669f2e9 | 424 | *(_p)++ = (_argc);\ |
Jeej | 19:701d5669f2e9 | 425 | } while(0) |
Jeej | 19:701d5669f2e9 | 426 | |
Jeej | 19:701d5669f2e9 | 427 | // WIZZILAB Specific Extensions |
Jeej | 19:701d5669f2e9 | 428 | #define _ALP_ACTION_ACTIVATE_ITF_SIZE (4) |
Jeej | 19:701d5669f2e9 | 429 | #define ALP_ACTION_ACTIVATE_ITF_SIZE (ALP_ACTION_EXT_SIZE(_ALP_ACTION_ACTIVATE_ITF_SIZE)) |
Jeej | 19:701d5669f2e9 | 430 | #define ALP_ACTION_ACTIVATE_ITF(_p,_r,_en,_type,_dev,_ifid,_flag) do {\ |
Jeej | 19:701d5669f2e9 | 431 | ALP_ACTION_EXT(_p,_r,(_en)?ALP_EXTOPCODE_ITF_START:ALP_EXTOPCODE_ITF_STOP,_ALP_ACTION_ACTIVATE_ITF_SIZE);\ |
Jeej | 19:701d5669f2e9 | 432 | *(p)++ = _type;\ |
Jeej | 19:701d5669f2e9 | 433 | *(p)++ = _dev;\ |
Jeej | 19:701d5669f2e9 | 434 | *(p)++ = _ifid;\ |
Jeej | 19:701d5669f2e9 | 435 | *(p)++ = _flag;\ |
Jeej | 19:701d5669f2e9 | 436 | } while(0) |
Jeej | 19:701d5669f2e9 | 437 | |
Jeej | 19:701d5669f2e9 | 438 | #define _ALP_ACTION_F_DECLARE_SIZE (1+sizeof(alp_file_header_t)) |
Jeej | 19:701d5669f2e9 | 439 | #define ALP_ACTION_F_DECLARE_SIZE (ALP_ACTION_EXT_SIZE(_ALP_ACTION_F_DECLARE_SIZE)) |
Jeej | 19:701d5669f2e9 | 440 | #define ALP_ACTION_F_DECLARE(_p,_r,_fid,_hdr,_dist) do {\ |
Jeej | 19:701d5669f2e9 | 441 | ALP_ACTION_EXT(_p,_r,(_dist)?ALP_EXTOPCODE_F_DECLARE+ALP_EXTOPCODE_DISTANT:ALP_EXTOPCODE_F_DECLARE,_ALP_ACTION_F_DECLARE_SIZE);\ |
Jeej | 19:701d5669f2e9 | 442 | *(_p)++ = (_fid);\ |
Jeej | 19:701d5669f2e9 | 443 | memcpy((_p),(u8*)(_hdr),sizeof(alp_file_header_t));(_p) += sizeof(alp_file_header_t);\ |
Jeej | 19:701d5669f2e9 | 444 | } while(0) |
Jeej | 19:701d5669f2e9 | 445 | |
Jeej | 19:701d5669f2e9 | 446 | |
Jeej | 19:701d5669f2e9 | 447 | // Simple "report/notify" actions. For both, FID,Offset and size will be |
Jeej | 19:701d5669f2e9 | 448 | // substituted thanks to specific Offset-Operand token |
Jeej | 19:701d5669f2e9 | 449 | #define ALP_ACTION_REPORT_FULL_FILE { \ |
Jeej | 19:701d5669f2e9 | 450 | ALP_OPCODE_F_RD_DATA | ALP_OPCODE_RESP,\ |
Jeej | 19:701d5669f2e9 | 451 | 0, HAL_U16_BE_DEPOSIT(0x4000), 0 } |
Jeej | 19:701d5669f2e9 | 452 | |
Jeej | 19:701d5669f2e9 | 453 | #define ALP_ACTION_REPORT_PART_FILE { \ |
Jeej | 19:701d5669f2e9 | 454 | ALP_OPCODE_F_RD_DATA | ALP_OPCODE_RESP,\ |
Jeej | 19:701d5669f2e9 | 455 | 0, HAL_U16_BE_DEPOSIT(0x8000), 0 } |
Jeej | 19:701d5669f2e9 | 456 | |
Jeej | 30:74aa36420c61 | 457 | // Simple Query actions |
Jeej | 30:74aa36420c61 | 458 | /// Match immediate value to file value |
Jeej | 30:74aa36420c61 | 459 | #define ALP_ACTION_QUERY_EQVAL_SIZE(_o,_l,_mbit) (4+ALP_LFIELD_SIZE(_o)+(1+(_mbit))*(_l)) |
Jeej | 56:67e3d9608403 | 460 | #define ALP_ACTION_QUERY_EQVAL(_p,_m,_v,_fid,_o,_l,_g) do {\ |
Jeej | 30:74aa36420c61 | 461 | u8 _mbit = (_m) ? 1 : 0;\ |
Jeej | 56:67e3d9608403 | 462 | *(_p)++ = ALP_OPCODE_QUERY | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 30:74aa36420c61 | 463 | *(_p)++ = ALP_QCOMP(ALP_QCOMP_EQ) | ALP_QDATA(ALP_QDATA_UNSIGNED) | ALP_QMASK(_mbit) | ALP_QTYPE(ALP_QTYPE_ACOMP_IMMEDIATE);\ |
Jeej | 30:74aa36420c61 | 464 | *(_p)++ = _l;\ |
Jeej | 30:74aa36420c61 | 465 | if (_mbit) {memcpy((_p),&(_m),_l);(_p) += (_l);}\ |
Jeej | 30:74aa36420c61 | 466 | memcpy((_p),&(_v),_l);(_p) += (_l);\ |
Jeej | 56:67e3d9608403 | 467 | *(_p)++ = (_fid);\ |
Jeej | 56:67e3d9608403 | 468 | (_p) += alp_encode_length((_p),(_o));\ |
Jeej | 56:67e3d9608403 | 469 | } while(0) |
Jeej | 56:67e3d9608403 | 470 | |
Jeej | 56:67e3d9608403 | 471 | #define ALP_ACTION_QUERY_SIZE(_o,_l,_mbit) (4+ALP_LFIELD_SIZE(_o)+(1+(_mbit))*(_l)) |
Jeej | 56:67e3d9608403 | 472 | |
Jeej | 56:67e3d9608403 | 473 | /// Match array XXX pass data pointer |
Jeej | 56:67e3d9608403 | 474 | #define ALP_ACTION_QUERY_STRTOK(_p,_m,_d,_fid,_o,_l,_g) do {\ |
Jeej | 56:67e3d9608403 | 475 | u8 _mbit = (_m) ? 1 : 0;\ |
Jeej | 56:67e3d9608403 | 476 | *(_p)++ = ALP_OPCODE_QUERY | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 56:67e3d9608403 | 477 | *(_p)++ = ALP_QMASK(_mbit) | ALP_QTYPE(ALP_QTYPE_STR_TOKEN) | ALP_QSTR_PARAM(0);\ |
Jeej | 56:67e3d9608403 | 478 | *(_p)++ = (_l);\ |
Jeej | 56:67e3d9608403 | 479 | if (_mbit) {memcpy((_p),&(_m),(_l)); (_p) += (_l);}\ |
Jeej | 56:67e3d9608403 | 480 | memcpy((_p),(_d),(_l)); (_p) += (_l);\ |
Jeej | 56:67e3d9608403 | 481 | *(_p)++ = (_fid);\ |
Jeej | 56:67e3d9608403 | 482 | (_p) += alp_encode_length((_p),(_o));\ |
Jeej | 30:74aa36420c61 | 483 | } while(0) |
Jeej | 30:74aa36420c61 | 484 | |
Jeej | 30:74aa36420c61 | 485 | // Query with break actions |
Jeej | 47:cf4519ba56d9 | 486 | #define ALP_ACTION_QBREAK_SIZE(_o,_l,_mbit) (4+ALP_LFIELD_SIZE(_o)+(1+(_mbit))*(_l)) |
Jeej | 47:cf4519ba56d9 | 487 | |
Jeej | 47:cf4519ba56d9 | 488 | /// Compare immediate value to file value |
Jeej | 47:cf4519ba56d9 | 489 | #define ALP_ACTION_QBREAK_COMP(_p,_m,_v,_c,_fid,_o,_l,_g) do {\ |
Jeej | 30:74aa36420c61 | 490 | u8 _mbit = (_m) ? 1 : 0;\ |
Jeej | 47:cf4519ba56d9 | 491 | *(_p)++ = ALP_OPCODE_QBREAK | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 47:cf4519ba56d9 | 492 | *(_p)++ = ALP_QCOMP(_c) | ALP_QDATA(ALP_QDATA_UNSIGNED) | ALP_QMASK(_mbit) | ALP_QTYPE(ALP_QTYPE_ACOMP_IMMEDIATE);\ |
Jeej | 56:67e3d9608403 | 493 | *(_p)++ = (_l);\ |
Jeej | 56:67e3d9608403 | 494 | if (_mbit) {memcpy((_p),&(_m),(_l));(_p) += (_l);}\ |
Jeej | 56:67e3d9608403 | 495 | memcpy((_p),&(_v),(_l));(_p) += (_l);\ |
Jeej | 30:74aa36420c61 | 496 | *(_p)++ = _fid;\ |
Jeej | 56:67e3d9608403 | 497 | (_p) += alp_encode_length((_p),(_o));\ |
Jeej | 30:74aa36420c61 | 498 | } while(0) |
Jeej | 30:74aa36420c61 | 499 | |
Jeej | 56:67e3d9608403 | 500 | /// Match array XXX pass data pointer |
Jeej | 56:67e3d9608403 | 501 | #define ALP_ACTION_QBREAK_STRTOK(_p,_m,_d,_fid,_o,_l,_g) do {\ |
Jeej | 47:cf4519ba56d9 | 502 | u8 _mbit = (_m) ? 1 : 0;\ |
Jeej | 47:cf4519ba56d9 | 503 | *(_p)++ = ALP_OPCODE_QBREAK | ((_g)? ALP_OPCODE_GROUP: 0);\ |
Jeej | 47:cf4519ba56d9 | 504 | *(_p)++ = ALP_QMASK(_mbit) | ALP_QTYPE(ALP_QTYPE_STR_TOKEN) | ALP_QSTR_PARAM(0);\ |
Jeej | 56:67e3d9608403 | 505 | *(_p)++ = (_l);\ |
Jeej | 56:67e3d9608403 | 506 | if (_mbit) {memcpy((_p),&(_m),(_l)); (_p) += (_l);}\ |
Jeej | 56:67e3d9608403 | 507 | memcpy((_p),(_d),(_l)); (_p) += (_l);\ |
Jeej | 56:67e3d9608403 | 508 | *(_p)++ = (_fid);\ |
Jeej | 56:67e3d9608403 | 509 | (_p) += alp_encode_length((_p),(_o));\ |
Jeej | 47:cf4519ba56d9 | 510 | } while(0) |
Jeej | 47:cf4519ba56d9 | 511 | |
Jeej | 47:cf4519ba56d9 | 512 | #define ALP_ACTION_QLOGIC_SIZE 1 |
Jeej | 47:cf4519ba56d9 | 513 | #define ALP_ACTION_QLOGIC(_p,_l) do {\ |
Jeej | 47:cf4519ba56d9 | 514 | *(_p)++ = ALP_OPCODE_LOGIC | ALP_QLOGIC(_l);\ |
Jeej | 47:cf4519ba56d9 | 515 | } while(0) |
Jeej | 47:cf4519ba56d9 | 516 | |
Jeej | 26:2c934a269914 | 517 | #endif // __ALP_SPEC_H__ |