Exportable version of WizziLab's modem driver.

Dependents:   modem_ref_helper

Committer:
Jeej
Date:
Wed Jan 27 14:45:28 2021 +0000
Revision:
56:67e3d9608403
Parent:
47:cf4519ba56d9
Child:
60:08efaaca0e83
Sanity commit. Do not use.

Who changed what in which revision?

UserRevisionLine numberNew 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 19:701d5669f2e9 230 #define ALP_ACTION_NOP(_p,_r) do {\
Jeej 19:701d5669f2e9 231 *(p)++ = (_r)?ALP_OPCODE_NOP+ALP_OPCODE_RESP:ALP_OPCODE_NOP;\
Jeej 19:701d5669f2e9 232 } while(0)
Jeej 19:701d5669f2e9 233
Jeej 19:701d5669f2e9 234 #define ALP_ACTION_TAG_SIZE (2)
Jeej 19:701d5669f2e9 235 #define ALP_ACTION_TAG(p,tag,eop) do {\
Jeej 19:701d5669f2e9 236 *(p)++ = (eop)?ALP_OPCODE_TAG+ALP_OPCODE_EOP:ALP_OPCODE_TAG;\
Jeej 19:701d5669f2e9 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 19:701d5669f2e9 250 #define ALP_ACTION_F_RD_PROP(_p,_r,_fid) do {\
Jeej 19:701d5669f2e9 251 *(_p)++ = (_r)?ALP_OPCODE_F_RD_PROP+ALP_OPCODE_RESP:ALP_OPCODE_F_RD_PROP;\
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 19:701d5669f2e9 267 #define ALP_ACTION_F_WR_FLUSH(_p,_r,_fid,_o,_l,_data) do {\
Jeej 19:701d5669f2e9 268 *(_p)++ = (_r)?ALP_OPCODE_F_WR_FLUSH+ALP_OPCODE_RESP:ALP_OPCODE_F_WR_FLUSH;\
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 19:701d5669f2e9 276 #define ALP_ACTION_F_WR_PROP(_p,_r,_fid,_o,_l,_data) do {\
Jeej 19:701d5669f2e9 277 *(_p)++ = (_r)?ALP_OPCODE_F_WR_PROP+ALP_OPCODE_RESP:ALP_OPCODE_F_WR_PROP;\
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 19:701d5669f2e9 286 #define ALP_ACTION_F_TOUCH(_p,_r,_fid,_o,_l) do {\
Jeej 19:701d5669f2e9 287 *(_p)++ = (_r)?ALP_OPCODE_F_TOUCH+ALP_OPCODE_RESP:ALP_OPCODE_F_TOUCH;\
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 19:701d5669f2e9 294 #define ALP_ACTION_F_EXIST(_p,_r,_fid) do {\
Jeej 19:701d5669f2e9 295 *(_p)++ = (_r)?ALP_OPCODE_F_EXIST+ALP_OPCODE_RESP:ALP_OPCODE_F_EXIST;\
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 19:701d5669f2e9 300 #define ALP_ACTION_F_DELETE(_p,_r,_fid) do {\
Jeej 19:701d5669f2e9 301 *(_p)++ = (_r)?ALP_OPCODE_F_DELETE+ALP_OPCODE_RESP:ALP_OPCODE_F_DELETE;\
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 19:701d5669f2e9 312 #define ALP_ACTION_F_CREATE(_p,_r,_fid,_hdr) do {\
Jeej 19:701d5669f2e9 313 *(_p)++ = (_r)?ALP_OPCODE_F_CREATE+ALP_OPCODE_RESP:ALP_OPCODE_F_CREATE;\
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__