Exportable version of WizziLab's modem driver.

Dependents:   modem_ref_helper

Committer:
Jeej
Date:
Tue Dec 12 16:03:12 2017 +0000
Revision:
19:701d5669f2e9
Child:
26:2c934a269914
Updated for modem v4.13.x

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 19:701d5669f2e9 1 /// @copyright
Jeej 19:701d5669f2e9 2 /// ========================================================================={{{
Jeej 19:701d5669f2e9 3 /// Copyright (c) 2012-2013 WizziLab /
Jeej 19:701d5669f2e9 4 /// All rights reserved /
Jeej 19:701d5669f2e9 5 /// /
Jeej 19:701d5669f2e9 6 /// IMPORTANT: This Software may not be modified, copied or distributed unless /
Jeej 19:701d5669f2e9 7 /// embedded on a WizziLab product. Other than for the foregoing purpose, this /
Jeej 19:701d5669f2e9 8 /// Software and/or its documentation may not be used, reproduced, copied, /
Jeej 19:701d5669f2e9 9 /// prepared derivative works of, modified, performed, distributed, displayed /
Jeej 19:701d5669f2e9 10 /// or sold for any purpose. For the sole purpose of embedding this Software /
Jeej 19:701d5669f2e9 11 /// on a WizziLab product, copy, modification and distribution of this /
Jeej 19:701d5669f2e9 12 /// Software is granted provided that the following conditions are respected: /
Jeej 19:701d5669f2e9 13 /// /
Jeej 19:701d5669f2e9 14 /// * Redistributions of source code must retain the above copyright notice, /
Jeej 19:701d5669f2e9 15 /// this list of conditions and the following disclaimer /
Jeej 19:701d5669f2e9 16 /// /
Jeej 19:701d5669f2e9 17 /// * Redistributions in binary form must reproduce the above copyright /
Jeej 19:701d5669f2e9 18 /// notice, this list of conditions and the following disclaimer in the /
Jeej 19:701d5669f2e9 19 /// documentation and/or other materials provided with the distribution. /
Jeej 19:701d5669f2e9 20 /// /
Jeej 19:701d5669f2e9 21 /// * The name of WizziLab can not be used to endorse or promote products /
Jeej 19:701d5669f2e9 22 /// derived from this software without specific prior written permission. /
Jeej 19:701d5669f2e9 23 /// /
Jeej 19:701d5669f2e9 24 /// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS /
Jeej 19:701d5669f2e9 25 /// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED /
Jeej 19:701d5669f2e9 26 /// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR /
Jeej 19:701d5669f2e9 27 /// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR /
Jeej 19:701d5669f2e9 28 /// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, /
Jeej 19:701d5669f2e9 29 /// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, /
Jeej 19:701d5669f2e9 30 /// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, /
Jeej 19:701d5669f2e9 31 /// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY /
Jeej 19:701d5669f2e9 32 /// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING /
Jeej 19:701d5669f2e9 33 /// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS /
Jeej 19:701d5669f2e9 34 /// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /
Jeej 19:701d5669f2e9 35 /// WIZZILAB HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, /
Jeej 19:701d5669f2e9 36 /// ENHANCEMENTS OR MODIFICATIONS. /
Jeej 19:701d5669f2e9 37 /// /
Jeej 19:701d5669f2e9 38 /// Should you have any questions regarding your right to use this Software, /
Jeej 19:701d5669f2e9 39 /// contact WizziLab at www.wizzilab.com. /
Jeej 19:701d5669f2e9 40 /// /
Jeej 19:701d5669f2e9 41 /// =========================================================================}}}
Jeej 19:701d5669f2e9 42 /// @endcopyright
Jeej 19:701d5669f2e9 43
Jeej 19:701d5669f2e9 44 // =======================================================================
Jeej 19:701d5669f2e9 45 /// @file alp_spec.h
Jeej 19:701d5669f2e9 46 /// @defgroup ALP
Jeej 19:701d5669f2e9 47 /// @brief ALP definitions from D7A specification
Jeej 19:701d5669f2e9 48 // =======================================================================
Jeej 19:701d5669f2e9 49
Jeej 19:701d5669f2e9 50 #ifndef __ALP_SPEC_H__
Jeej 19:701d5669f2e9 51 #define __ALP_SPEC_H__
Jeej 19:701d5669f2e9 52
Jeej 19:701d5669f2e9 53 #include "hal_types.h"
Jeej 19:701d5669f2e9 54
Jeej 19:701d5669f2e9 55 // Opcode Modifiers / Preemption flags
Jeej 19:701d5669f2e9 56 #define ALP_OPCODE_RESP 0x40
Jeej 19:701d5669f2e9 57 #define ALP_OPCODE_GROUP 0x80
Jeej 19:701d5669f2e9 58 #define ALP_OPCODE_ERR 0x40
Jeej 19:701d5669f2e9 59 #define ALP_OPCODE_EOP 0x80
Jeej 19:701d5669f2e9 60 #define ALP_OPCODE_ITF 0x40
Jeej 19:701d5669f2e9 61 #define ALP_OPCODE_INDIRECT 0x40
Jeej 19:701d5669f2e9 62 #define ALP_OPCODE_OVERLOAD 0x80
Jeej 19:701d5669f2e9 63
Jeej 19:701d5669f2e9 64 typedef enum {
Jeej 19:701d5669f2e9 65 // OPCODE | OPERAND
Jeej 19:701d5669f2e9 66 ALP_OPCODE_NOP = 0, //| -
Jeej 19:701d5669f2e9 67
Jeej 19:701d5669f2e9 68 ALP_OPCODE_F_RD_DATA = 1, //| FDR
Jeej 19:701d5669f2e9 69 ALP_OPCODE_F_RD_PROP = 2, //| FID
Jeej 19:701d5669f2e9 70
Jeej 19:701d5669f2e9 71 ALP_OPCODE_F_WR_DATA = 4, //| FD
Jeej 19:701d5669f2e9 72 ALP_OPCODE_F_WR_FLUSH = 5, //| FD
Jeej 19:701d5669f2e9 73 ALP_OPCODE_F_WR_PROP = 6, //| FD
Jeej 19:701d5669f2e9 74 ALP_OPCODE_F_TOUCH = 7, //| FD
Jeej 19:701d5669f2e9 75
Jeej 19:701d5669f2e9 76 ALP_OPCODE_QUERY = 8, //| Q
Jeej 19:701d5669f2e9 77 ALP_OPCODE_QBREAK = 9, //| Q
Jeej 19:701d5669f2e9 78 ALP_OPCODE_PERM_REQ = 10, //| P
Jeej 19:701d5669f2e9 79
Jeej 19:701d5669f2e9 80 ALP_OPCODE_CRC_CHECK = 11, //| Q
Jeej 19:701d5669f2e9 81
Jeej 19:701d5669f2e9 82 ALP_OPCODE_F_EXIST = 16, //| FID
Jeej 19:701d5669f2e9 83 ALP_OPCODE_F_CREATE = 17, //| FD
Jeej 19:701d5669f2e9 84 ALP_OPCODE_F_DELETE = 18, //| FID
Jeej 19:701d5669f2e9 85 ALP_OPCODE_F_RESTORE = 19, //| FID
Jeej 19:701d5669f2e9 86 ALP_OPCODE_F_FLUSH = 20, //| FID
Jeej 19:701d5669f2e9 87 ALP_OPCODE_F_DECLARE = 21, //| FH XXX Deprecated DO NOT USE !!!
Jeej 19:701d5669f2e9 88 ALP_OPCODE_F_CLOSE = 22, //| FID
Jeej 19:701d5669f2e9 89 ALP_OPCODE_F_COPY = 23, //| 2xFID
Jeej 19:701d5669f2e9 90 ALP_OPCODE_F_EXECUTE = 31, //| FID
Jeej 19:701d5669f2e9 91
Jeej 19:701d5669f2e9 92 ALP_OPCODE_RSP_F_DATA = 32, //| FD
Jeej 19:701d5669f2e9 93 ALP_OPCODE_RSP_F_PROP = 33, //| FH
Jeej 19:701d5669f2e9 94 ALP_OPCODE_RSP_STATUS = 34, //| S
Jeej 19:701d5669f2e9 95 ALP_OPCODE_RSP_ISTATUS = ALP_OPCODE_RSP_STATUS + ALP_OPCODE_ITF, //| SI
Jeej 19:701d5669f2e9 96 ALP_OPCODE_RSP_TAG = 35, //| PID
Jeej 19:701d5669f2e9 97 ALP_OPCODE_RSP_EOPTAG = ALP_OPCODE_RSP_TAG + ALP_OPCODE_EOP, //| PID
Jeej 19:701d5669f2e9 98 ALP_OPCODE_RSP_ERRTAG = ALP_OPCODE_RSP_TAG + ALP_OPCODE_ERR, //| PID
Jeej 19:701d5669f2e9 99 ALP_OPCODE_RSP_URC = 36, //|
Jeej 19:701d5669f2e9 100
Jeej 19:701d5669f2e9 101 ALP_OPCODE_CHUNK = 48, //| -
Jeej 19:701d5669f2e9 102 ALP_OPCODE_LOGIC = 49, //| -
Jeej 19:701d5669f2e9 103 ALP_OPCODE_FORWARD = 50, //| I
Jeej 19:701d5669f2e9 104 ALP_OPCODE_IFORWARD = 51, //| IFID
Jeej 19:701d5669f2e9 105 ALP_OPCODE_TAG = 52, //| PID
Jeej 19:701d5669f2e9 106 ALP_OPCODE_URCC = 53, //|
Jeej 19:701d5669f2e9 107
Jeej 19:701d5669f2e9 108 ALP_OPCODE_EXT = 63, //| OP |ARGC| ARGS |
Jeej 19:701d5669f2e9 109 //| 1B | 1B | ARGC-bytes |
Jeej 19:701d5669f2e9 110 RFU
Jeej 19:701d5669f2e9 111
Jeej 19:701d5669f2e9 112
Jeej 19:701d5669f2e9 113 } alp_opcodes_t;
Jeej 19:701d5669f2e9 114 #define ALP_OPCODE_UNKNOWN (-1)
Jeej 19:701d5669f2e9 115
Jeej 19:701d5669f2e9 116 typedef enum {
Jeej 19:701d5669f2e9 117 ALP_ITF_TYPE_HOST = 0x00,
Jeej 19:701d5669f2e9 118 ALP_ITF_TYPE_BLE = 0xB0,
Jeej 19:701d5669f2e9 119 ALP_ITF_TYPE_COM = 0xC0,
Jeej 19:701d5669f2e9 120 ALP_ITF_TYPE_D7A = 0xD7, // Only this one actually in D7A Spec
Jeej 19:701d5669f2e9 121 ALP_ITF_TYPE_LWAN = 0x10,
Jeej 19:701d5669f2e9 122 } alp_itf_type_t;
Jeej 19:701d5669f2e9 123
Jeej 19:701d5669f2e9 124 // EXTOpcode Modifiers / Preemption flags
Jeej 19:701d5669f2e9 125 #define ALP_EXTOPCODE_DISTANT 0x40 // Used w/ EXTOPCODE_F_DECLARE
Jeej 19:701d5669f2e9 126
Jeej 19:701d5669f2e9 127 typedef enum {
Jeej 19:701d5669f2e9 128 // WIZZILAB OPCODE EXTENSION
Jeej 19:701d5669f2e9 129 ALP_EXTOPCODE_ITF_START = 0, //| 'ITF' activation operations:
Jeej 19:701d5669f2e9 130 ALP_EXTOPCODE_ITF_STOP = 1, //| TYPE | DEVQ | IFID | FLAGS |
Jeej 19:701d5669f2e9 131 ALP_EXTOPCODE_ITF_PAUSE = 2, //| 1B | 1B | 1B | 1B |
Jeej 19:701d5669f2e9 132 //| TYPE: ITF Type (D7A,LWAN,BLE...)
Jeej 19:701d5669f2e9 133 //| DEVQ: ITF Max Device number if applicable
Jeej 19:701d5669f2e9 134 //| IFID: ITF Config file if applicable
Jeej 19:701d5669f2e9 135 //| FLAG: Additional configuration flags if applicable
Jeej 19:701d5669f2e9 136 ALP_EXTOPCODE_F_DECLARE = 21, //| FH
Jeej 19:701d5669f2e9 137 } alp_ext_opcodes_t;
Jeej 19:701d5669f2e9 138
Jeej 19:701d5669f2e9 139 typedef enum
Jeej 19:701d5669f2e9 140 {
Jeej 19:701d5669f2e9 141 ALP_ERR_ITF_FULL = 2, // 0x02: For interfaces supporting buffering, indicates buffer reached maximum capacity (no data loss)
Jeej 19:701d5669f2e9 142 ALP_ERR_PARTIAL_COMPLETION = 1, // 0x01: Action received and partially completed at response. To be completed after response
Jeej 19:701d5669f2e9 143
Jeej 19:701d5669f2e9 144 ALP_ERR_NONE = 0, // 0x00: Action completed (OK)
Jeej 19:701d5669f2e9 145 ALP_ERR_FILE_NOT_FOUND = -1, // 0xFF: Error access file: File ID does not exist
Jeej 19:701d5669f2e9 146 ALP_ERR_FILE_EXIST = -2, // 0xFE: Error create file: File ID already exists
Jeej 19:701d5669f2e9 147 ALP_ERR_FILE_NOT_RESTORABLE = -3, // 0xFD: Error restore file: File is not restorable
Jeej 19:701d5669f2e9 148 ALP_ERR_PERMISSION_DENIED = -4, // 0xFC: Error access file: Insufficient permissions
Jeej 19:701d5669f2e9 149 ALP_ERR_LENGTH_OVERFLOW = -5, // 0xFB: Error create file: Supplied length (in header) is beyond file limits
Jeej 19:701d5669f2e9 150 ALP_ERR_ALLOC_OVERFLOW = -6, // 0xFA: Error create file: Supplied allocation (in header) is beyond file limits
Jeej 19:701d5669f2e9 151 ALP_ERR_OFFSET_OVERFLOW = -7, // 0xF9: Error write: Supplied start offset is out of bounds of file allocation
Jeej 19:701d5669f2e9 152 ALP_ERR_WRITE_OVERFLOW = -8, // 0xF8: Error complete write: Supplied data goes beyond file allocation
Jeej 19:701d5669f2e9 153 ALP_ERR_WRITE_ERROR = -9, // 0xF7: Error write: impossible to write in storage location
Jeej 19:701d5669f2e9 154 ALP_ERR_OPERATION_UNKNOWN = -10,// 0xF6: Error unknown Operation
Jeej 19:701d5669f2e9 155 ALP_ERR_OPERAND_INCOMPLETE = -11,// 0xF5: Error incomplete Operand
Jeej 19:701d5669f2e9 156 ALP_ERR_OPERAND_WRONG_FORMAT = -12,// 0xF4: Error wrong Operand format
Jeej 19:701d5669f2e9 157 ALP_ERR_ITF_INVALID = -13,// 0xF3: Error invalid interface
Jeej 19:701d5669f2e9 158 ALP_ERR_ITF_OVERFLOW = -14,// 0xF2: Error interface overflown (i.e. resources exhausted, buffer full with data discarded)
Jeej 19:701d5669f2e9 159 ALP_ERR_QUERY_FAIL = -15,// 0xF1: (Group of) Query result was false (Informative error code).
Jeej 19:701d5669f2e9 160
Jeej 19:701d5669f2e9 161 ALP_ERR_UNKNOWN = -128,// 0x80: Unknown error
Jeej 19:701d5669f2e9 162 ALP_ERR_FS_TIMEOUT, // 0x81: Internal FS Error
Jeej 19:701d5669f2e9 163 ALP_ERR_ITF_UNKNOWN, // 0x82: Unknown Interface
Jeej 19:701d5669f2e9 164 ALP_ERR_ITF_TIMEOUT, // 0x83: Internal ITF Error
Jeej 19:701d5669f2e9 165
Jeej 19:701d5669f2e9 166 } alp_errors_t;
Jeej 19:701d5669f2e9 167
Jeej 19:701d5669f2e9 168 typedef enum {
Jeej 19:701d5669f2e9 169 /// Disable all URCs on requesting ITF
Jeej 19:701d5669f2e9 170 ALP_URC_TYPE_NONE = 0xFF,
Jeej 19:701d5669f2e9 171 /// Enable Link Quality (on IFID) URCs on requesting ITF
Jeej 19:701d5669f2e9 172 ALP_URC_TYPE_LQUAL = 0,
Jeej 19:701d5669f2e9 173 /// Enable Link Down (on IFID) URCs on requesting ITF
Jeej 19:701d5669f2e9 174 ALP_URC_TYPE_LDOWN = 1,
Jeej 19:701d5669f2e9 175
Jeej 19:701d5669f2e9 176 ALP_URC_TYPE_QTY,
Jeej 19:701d5669f2e9 177
Jeej 19:701d5669f2e9 178 ALP_URC_TYPE_BUSY = 2, // XXX TODO this is awkward: BUSY is not an ITF-URC but a system/modem URC
Jeej 19:701d5669f2e9 179 } alp_urc_type_t;
Jeej 19:701d5669f2e9 180
Jeej 19:701d5669f2e9 181
Jeej 19:701d5669f2e9 182 TYPEDEF_STRUCT_PACKED {
Jeej 19:701d5669f2e9 183 u8 perm;
Jeej 19:701d5669f2e9 184 u8 prop;
Jeej 19:701d5669f2e9 185 u8 afid;
Jeej 19:701d5669f2e9 186 u8 ifid;
Jeej 19:701d5669f2e9 187 u32 size; // XXX Big Endian
Jeej 19:701d5669f2e9 188 u32 alloc;// XXX Big Endian
Jeej 19:701d5669f2e9 189 } alp_file_header_t;
Jeej 19:701d5669f2e9 190 #define ALP_FILE_HEADER_SIZE (sizeof(alp_file_header_t))
Jeej 19:701d5669f2e9 191
Jeej 19:701d5669f2e9 192 // RESPONSES Building helpers
Jeej 19:701d5669f2e9 193 // ======================================================================
Jeej 19:701d5669f2e9 194 #define ALP_RSP_STATUS_SIZE (3) // OPCODE + ACTION_ID + ERR
Jeej 19:701d5669f2e9 195 #define ALP_RSP_F_PROP_SIZE (2+ALP_FILE_HEADER_SIZE) // OPCODE + FID + 12xDATA
Jeej 19:701d5669f2e9 196 #define ALP_LFIELD_SIZE(a) (((a) <= 0x3F) ? 1 : \
Jeej 19:701d5669f2e9 197 (((a) <= 0x3FFF) ? 2 : \
Jeej 19:701d5669f2e9 198 (((a) <= 0x3FFFFF) ? 3 : 4)))
Jeej 19:701d5669f2e9 199
Jeej 19:701d5669f2e9 200 // ACTIONS Building helpers
Jeej 19:701d5669f2e9 201 // ----------------------------------------------------------------------
Jeej 19:701d5669f2e9 202 // Usual arguments:
Jeej 19:701d5669f2e9 203 // _p : pointer to the output string buffer (incremented by the macro)
Jeej 19:701d5669f2e9 204 // _r : ALP response Flag (true/false)
Jeej 19:701d5669f2e9 205 // _fid : File ID
Jeej 19:701d5669f2e9 206 // _o : Access Offset
Jeej 19:701d5669f2e9 207 // _l : Access Length
Jeej 19:701d5669f2e9 208 // ======================================================================
Jeej 19:701d5669f2e9 209 #define ALP_ACTION_NOP_SIZE (1)
Jeej 19:701d5669f2e9 210 #define ALP_ACTION_NOP(_p,_r) do {\
Jeej 19:701d5669f2e9 211 *(p)++ = (_r)?ALP_OPCODE_NOP+ALP_OPCODE_RESP:ALP_OPCODE_NOP;\
Jeej 19:701d5669f2e9 212 } while(0)
Jeej 19:701d5669f2e9 213
Jeej 19:701d5669f2e9 214 #define ALP_ACTION_TAG_SIZE (2)
Jeej 19:701d5669f2e9 215 #define ALP_ACTION_TAG(p,tag,eop) do {\
Jeej 19:701d5669f2e9 216 *(p)++ = (eop)?ALP_OPCODE_TAG+ALP_OPCODE_EOP:ALP_OPCODE_TAG;\
Jeej 19:701d5669f2e9 217 *(p)++ = (tag);\
Jeej 19:701d5669f2e9 218 } while(0)
Jeej 19:701d5669f2e9 219
Jeej 19:701d5669f2e9 220 #define ALP_ACTION_F_RD_DATA_SIZE(_o,_l) (2+ALP_LFIELD_SIZE(_o)+ALP_LFIELD_SIZE(_l))
Jeej 19:701d5669f2e9 221 #define ALP_ACTION_F_RD_DATA_SIZE_MAX (2+4+4)
Jeej 19:701d5669f2e9 222 #define ALP_ACTION_F_RD_DATA(_p,_r,_fid,_o,_l) do {\
Jeej 19:701d5669f2e9 223 *(_p)++ = (_r)?ALP_OPCODE_F_RD_DATA+ALP_OPCODE_RESP:ALP_OPCODE_F_RD_DATA;\
Jeej 19:701d5669f2e9 224 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 225 (_p) += alp_encode_length(_p,_o);\
Jeej 19:701d5669f2e9 226 (_p) += alp_encode_length(_p,_l);\
Jeej 19:701d5669f2e9 227 } while(0)
Jeej 19:701d5669f2e9 228
Jeej 19:701d5669f2e9 229 #define ALP_ACTION_F_RD_PROP_SIZE (2)
Jeej 19:701d5669f2e9 230 #define ALP_ACTION_F_RD_PROP(_p,_r,_fid) do {\
Jeej 19:701d5669f2e9 231 *(_p)++ = (_r)?ALP_OPCODE_F_RD_PROP+ALP_OPCODE_RESP:ALP_OPCODE_F_RD_PROP;\
Jeej 19:701d5669f2e9 232 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 233 } while(0)
Jeej 19:701d5669f2e9 234
Jeej 19:701d5669f2e9 235 #define ALP_ACTION_F_WR_DATA_SIZE(_o,_l) (2+ALP_LFIELD_SIZE(_o)+ALP_LFIELD_SIZE(_l)+(_l))
Jeej 19:701d5669f2e9 236 #define ALP_ACTION_F_WR_DATA_SIZE_MAX(_l) (2+4+4+(_l))
Jeej 19:701d5669f2e9 237 #define ALP_ACTION_F_WR_DATA(_p,_r,_fid,_o,_l,_data) do {\
Jeej 19:701d5669f2e9 238 *(_p)++ = (_r)?ALP_OPCODE_F_WR_DATA+ALP_OPCODE_RESP:ALP_OPCODE_F_WR_DATA;\
Jeej 19:701d5669f2e9 239 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 240 (_p) += alp_encode_length(_p,_o);\
Jeej 19:701d5669f2e9 241 (_p) += alp_encode_length(_p,_l);\
Jeej 19:701d5669f2e9 242 memcpy((_p),_data,_l);(_p) += (_l);\
Jeej 19:701d5669f2e9 243 } while(0)
Jeej 19:701d5669f2e9 244
Jeej 19:701d5669f2e9 245 #define ALP_ACTION_F_WR_FLUSH_SIZE(_o,_l) (2+ALP_LFIELD_SIZE(_o)+ALP_LFIELD_SIZE(_l)+(_l))
Jeej 19:701d5669f2e9 246 #define ALP_ACTION_F_WR_FLUSH_SIZE_MAX(_l) (2+4+(_l))
Jeej 19:701d5669f2e9 247 #define ALP_ACTION_F_WR_FLUSH(_p,_r,_fid,_o,_l,_data) do {\
Jeej 19:701d5669f2e9 248 *(_p)++ = (_r)?ALP_OPCODE_F_WR_FLUSH+ALP_OPCODE_RESP:ALP_OPCODE_F_WR_FLUSH;\
Jeej 19:701d5669f2e9 249 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 250 (_p) += alp_encode_length(_p,_o);\
Jeej 19:701d5669f2e9 251 (_p) += alp_encode_length(_p,_l);\
Jeej 19:701d5669f2e9 252 memcpy((_p),_data,_l);(_p) += (_l);\
Jeej 19:701d5669f2e9 253 } while(0)
Jeej 19:701d5669f2e9 254
Jeej 19:701d5669f2e9 255 #define ALP_ACTION_F_WR_PROP_SIZE_MAX (2+2+sizeof(alp_file_header_t))
Jeej 19:701d5669f2e9 256 #define ALP_ACTION_F_WR_PROP(_p,_r,_fid,_o,_l,_data) do {\
Jeej 19:701d5669f2e9 257 *(_p)++ = (_r)?ALP_OPCODE_F_WR_PROP+ALP_OPCODE_RESP:ALP_OPCODE_F_WR_PROP;\
Jeej 19:701d5669f2e9 258 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 259 *(_p)++ = (_o);\
Jeej 19:701d5669f2e9 260 *(_p)++ = (_l);\
Jeej 19:701d5669f2e9 261 memcpy((_p),(u8*)(_data),(_l));(_p) += (_l);\
Jeej 19:701d5669f2e9 262 } while(0)
Jeej 19:701d5669f2e9 263
Jeej 19:701d5669f2e9 264 #define ALP_ACTION_F_TOUCH_SIZE(_o,_l) (2+ALP_LFIELD_SIZE(_o)+ALP_LFIELD_SIZE(_l))
Jeej 19:701d5669f2e9 265 #define ALP_ACTION_F_TOUCH_SIZE_MAX (2+4+4)
Jeej 19:701d5669f2e9 266 #define ALP_ACTION_F_TOUCH(_p,_r,_fid,_o,_l) do {\
Jeej 19:701d5669f2e9 267 *(_p)++ = (_r)?ALP_OPCODE_F_TOUCH+ALP_OPCODE_RESP:ALP_OPCODE_F_TOUCH;\
Jeej 19:701d5669f2e9 268 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 269 (_p) += alp_encode_length(_p,_o);\
Jeej 19:701d5669f2e9 270 (_p) += alp_encode_length(_p,_l);\
Jeej 19:701d5669f2e9 271 } while(0)
Jeej 19:701d5669f2e9 272
Jeej 19:701d5669f2e9 273 #define ALP_ACTION_F_EXIST_SIZE (2)
Jeej 19:701d5669f2e9 274 #define ALP_ACTION_F_EXIST(_p,_r,_fid) do {\
Jeej 19:701d5669f2e9 275 *(_p)++ = (_r)?ALP_OPCODE_F_EXIST+ALP_OPCODE_RESP:ALP_OPCODE_F_EXIST;\
Jeej 19:701d5669f2e9 276 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 277 } while(0)
Jeej 19:701d5669f2e9 278
Jeej 19:701d5669f2e9 279 #define ALP_ACTION_F_DELETE_SIZE (2)
Jeej 19:701d5669f2e9 280 #define ALP_ACTION_F_DELETE(_p,_r,_fid) do {\
Jeej 19:701d5669f2e9 281 *(_p)++ = (_r)?ALP_OPCODE_F_DELETE+ALP_OPCODE_RESP:ALP_OPCODE_F_DELETE;\
Jeej 19:701d5669f2e9 282 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 283 } while(0)
Jeej 19:701d5669f2e9 284
Jeej 19:701d5669f2e9 285 #define ALP_ACTION_F_FLUSH_SIZE (2)
Jeej 19:701d5669f2e9 286 #define ALP_ACTION_F_FLUSH(_p,_r,_fid) do {\
Jeej 19:701d5669f2e9 287 *(_p)++ = (_r)?ALP_OPCODE_F_FLUSH+ALP_OPCODE_RESP:ALP_OPCODE_F_FLUSH;\
Jeej 19:701d5669f2e9 288 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 289 } while(0)
Jeej 19:701d5669f2e9 290
Jeej 19:701d5669f2e9 291 #define ALP_ACTION_F_CREATE_SIZE (2+sizeof(alp_file_header_t))
Jeej 19:701d5669f2e9 292 #define ALP_ACTION_F_CREATE(_p,_r,_fid,_hdr) do {\
Jeej 19:701d5669f2e9 293 *(_p)++ = (_r)?ALP_OPCODE_F_CREATE+ALP_OPCODE_RESP:ALP_OPCODE_F_CREATE;\
Jeej 19:701d5669f2e9 294 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 295 memcpy((_p),(u8*)(_hdr),sizeof(alp_file_header_t));(_p) += sizeof(alp_file_header_t);\
Jeej 19:701d5669f2e9 296 } while(0)
Jeej 19:701d5669f2e9 297
Jeej 19:701d5669f2e9 298 #define ALP_PERM_REQ_USER 0
Jeej 19:701d5669f2e9 299 #define ALP_PERM_REQ_ROOT 1
Jeej 19:701d5669f2e9 300 // Wizzilab's specific Authentication-Protocol-Id
Jeej 19:701d5669f2e9 301 #define ALP_WIZZILAB_AUTH_PROTOCOL_ID 42
Jeej 19:701d5669f2e9 302 #define ALP_WIZZILAB_AUTH_PROTOCOL_TOKEN_SIZE 8
Jeej 19:701d5669f2e9 303 #define ALP_ACTION_PERM_REQ_OFFSET (3+ALP_WIZZILAB_AUTH_PROTOCOL_TOKEN_SIZE)
Jeej 19:701d5669f2e9 304 #define ALP_ACTION_PERM_REQ_SIZE(_l) (ALP_ACTION_PERM_REQ_OFFSET+(_l))
Jeej 19:701d5669f2e9 305 #define ALP_ACTION_PERM_REQ(_p,_r,_role) do {\
Jeej 19:701d5669f2e9 306 *(_p)++ = (_r)?ALP_OPCODE_PERM_REQ+ALP_OPCODE_RESP:ALP_OPCODE_PERM_REQ;\
Jeej 19:701d5669f2e9 307 *(_p)++ = (_role);\
Jeej 19:701d5669f2e9 308 *(_p)++ = ALP_WIZZILAB_AUTH_PROTOCOL_ID;\
Jeej 19:701d5669f2e9 309 } while(0)
Jeej 19:701d5669f2e9 310
Jeej 19:701d5669f2e9 311 #define ALP_ACTION_URCC_SIZE(t) ((t==ALP_URC_TYPE_NONE)?2:4)
Jeej 19:701d5669f2e9 312 #define ALP_ACTION_URCC_EN(_p,_r,_type,_ifid,_cfg) do {\
Jeej 19:701d5669f2e9 313 *(_p)++ = (_r)?ALP_OPCODE_URCC+ALP_OPCODE_GROUP+ALP_OPCODE_RESP:ALP_OPCODE_URCC+ALP_OPCODE_GROUP;\
Jeej 19:701d5669f2e9 314 *(_p)++ = (_type);\
Jeej 19:701d5669f2e9 315 if((_type)!=ALP_URC_TYPE_NONE && (_type)!=ALP_URC_TYPE_BUSY)\
Jeej 19:701d5669f2e9 316 {\
Jeej 19:701d5669f2e9 317 *(_p)++ = (_ifid);\
Jeej 19:701d5669f2e9 318 *(_p)++ = (_cfg);\
Jeej 19:701d5669f2e9 319 }\
Jeej 19:701d5669f2e9 320 } while(0)
Jeej 19:701d5669f2e9 321
Jeej 19:701d5669f2e9 322 #define ALP_ACTION_URCC_DIS(_p,_r,_type,_ifid,_cfg) do {\
Jeej 19:701d5669f2e9 323 *(_p)++ = (_r)?ALP_OPCODE_URCC+ALP_OPCODE_RESP:ALP_OPCODE_URCC;\
Jeej 19:701d5669f2e9 324 *(_p)++ = (_type);\
Jeej 19:701d5669f2e9 325 if((_type)!=ALP_URC_TYPE_NONE && (_type)!=ALP_URC_TYPE_BUSY)\
Jeej 19:701d5669f2e9 326 {\
Jeej 19:701d5669f2e9 327 *(_p)++ = (_ifid);\
Jeej 19:701d5669f2e9 328 *(_p)++ = (_cfg);\
Jeej 19:701d5669f2e9 329 }\
Jeej 19:701d5669f2e9 330 } while(0)
Jeej 19:701d5669f2e9 331
Jeej 19:701d5669f2e9 332 #define ALP_ACTION_FORWARD_SIZE(s) (1+(s))
Jeej 19:701d5669f2e9 333 #define ALP_ACTION_FORWARD(p,itf,itfs) do {\
Jeej 19:701d5669f2e9 334 *(p)++ = ALP_OPCODE_FORWARD;\
Jeej 19:701d5669f2e9 335 memcpy((p),(itf),(itfs));(p) += (itfs);\
Jeej 19:701d5669f2e9 336 } while(0)
Jeej 19:701d5669f2e9 337
Jeej 19:701d5669f2e9 338 #define ALP_ACTION_RSP_F_DATA_SIZE(_o,_l) (2+ALP_LFIELD_SIZE(_o)+ALP_LFIELD_SIZE(_l)+(_l))
Jeej 19:701d5669f2e9 339 #define ALP_ACTION_RSP_F_DATA_SIZE_MAX(_l) (2+4+4+(_l))
Jeej 19:701d5669f2e9 340 #define ALP_ACTION_RSP_F_DATA(_p,_fid,_o,_l,_data) do {\
Jeej 19:701d5669f2e9 341 *(_p)++ = ALP_OPCODE_RSP_F_DATA;\
Jeej 19:701d5669f2e9 342 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 343 (_p) += alp_encode_length(_p,_o);\
Jeej 19:701d5669f2e9 344 (_p) += alp_encode_length(_p,_l);\
Jeej 19:701d5669f2e9 345 memcpy((_p),(u8*)(_data),(_l));(_p) += (_l);\
Jeej 19:701d5669f2e9 346 } while(0)
Jeej 19:701d5669f2e9 347
Jeej 19:701d5669f2e9 348 #define ALP_ACTION_RSP_F_PROP_SIZE (2+ALP_FILE_HEADER_SIZE)
Jeej 19:701d5669f2e9 349 #define ALP_ACTION_RSP_F_PROP(_p,_fid,_hdr) do {\
Jeej 19:701d5669f2e9 350 *(_p)++ = ALP_OPCODE_RSP_F_PROP;\
Jeej 19:701d5669f2e9 351 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 352 memcpy((_p),(u8*)(_hdr),ALP_FILE_HEADER_SIZE);(_p) += ALP_FILE_HEADER_SIZE;\
Jeej 19:701d5669f2e9 353 } while(0)
Jeej 19:701d5669f2e9 354
Jeej 19:701d5669f2e9 355 #define ALP_ACTION_RSP_STATUS_SIZE (2)
Jeej 19:701d5669f2e9 356 #define ALP_ACTION_RSP_STATUS(_p,_a,_s) do {\
Jeej 19:701d5669f2e9 357 *(_p)++ = ALP_OPCODE_RSP_STATUS;\
Jeej 19:701d5669f2e9 358 *(_p)++ = (_a);\
Jeej 19:701d5669f2e9 359 *(_p)++ = (_s);\
Jeej 19:701d5669f2e9 360 } while(0)
Jeej 19:701d5669f2e9 361
Jeej 19:701d5669f2e9 362 #define ALP_ACTION_RSP_TAG_SIZE (2)
Jeej 19:701d5669f2e9 363 #define ALP_ACTION_RSP_TAG(_p,_val,_eop,_err) do {\
Jeej 19:701d5669f2e9 364 u8 tmp = ALP_OPCODE_RSP_TAG;\
Jeej 19:701d5669f2e9 365 tmp += (_eop)?ALP_OPCODE_EOP:0;\
Jeej 19:701d5669f2e9 366 tmp += (_err)?ALP_OPCODE_ERR:0;\
Jeej 19:701d5669f2e9 367 *(_p)++ = tmp;\
Jeej 19:701d5669f2e9 368 *(_p)++ = (_val);\
Jeej 19:701d5669f2e9 369 } while(0)
Jeej 19:701d5669f2e9 370
Jeej 19:701d5669f2e9 371 #define ALP_ACTION_EXT_SIZE(_argc) (3+(_argc))
Jeej 19:701d5669f2e9 372 #define ALP_ACTION_EXT(_p,_r,_op,_argc) do {\
Jeej 19:701d5669f2e9 373 *(_p)++ = (_r)?ALP_OPCODE_EXT+ALP_OPCODE_RESP:ALP_OPCODE_EXT;\
Jeej 19:701d5669f2e9 374 *(_p)++ = (_op);\
Jeej 19:701d5669f2e9 375 *(_p)++ = (_argc);\
Jeej 19:701d5669f2e9 376 } while(0)
Jeej 19:701d5669f2e9 377
Jeej 19:701d5669f2e9 378 // WIZZILAB Specific Extensions
Jeej 19:701d5669f2e9 379 #define _ALP_ACTION_ACTIVATE_ITF_SIZE (4)
Jeej 19:701d5669f2e9 380 #define ALP_ACTION_ACTIVATE_ITF_SIZE (ALP_ACTION_EXT_SIZE(_ALP_ACTION_ACTIVATE_ITF_SIZE))
Jeej 19:701d5669f2e9 381 #define ALP_ACTION_ACTIVATE_ITF(_p,_r,_en,_type,_dev,_ifid,_flag) do {\
Jeej 19:701d5669f2e9 382 ALP_ACTION_EXT(_p,_r,(_en)?ALP_EXTOPCODE_ITF_START:ALP_EXTOPCODE_ITF_STOP,_ALP_ACTION_ACTIVATE_ITF_SIZE);\
Jeej 19:701d5669f2e9 383 *(p)++ = _type;\
Jeej 19:701d5669f2e9 384 *(p)++ = _dev;\
Jeej 19:701d5669f2e9 385 *(p)++ = _ifid;\
Jeej 19:701d5669f2e9 386 *(p)++ = _flag;\
Jeej 19:701d5669f2e9 387 } while(0)
Jeej 19:701d5669f2e9 388
Jeej 19:701d5669f2e9 389 #define _ALP_ACTION_F_DECLARE_SIZE (1+sizeof(alp_file_header_t))
Jeej 19:701d5669f2e9 390 #define ALP_ACTION_F_DECLARE_SIZE (ALP_ACTION_EXT_SIZE(_ALP_ACTION_F_DECLARE_SIZE))
Jeej 19:701d5669f2e9 391 #define ALP_ACTION_F_DECLARE(_p,_r,_fid,_hdr,_dist) do {\
Jeej 19:701d5669f2e9 392 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 393 *(_p)++ = (_fid);\
Jeej 19:701d5669f2e9 394 memcpy((_p),(u8*)(_hdr),sizeof(alp_file_header_t));(_p) += sizeof(alp_file_header_t);\
Jeej 19:701d5669f2e9 395 } while(0)
Jeej 19:701d5669f2e9 396
Jeej 19:701d5669f2e9 397
Jeej 19:701d5669f2e9 398 // Simple "report/notify" actions. For both, FID,Offset and size will be
Jeej 19:701d5669f2e9 399 // substituted thanks to specific Offset-Operand token
Jeej 19:701d5669f2e9 400 #define ALP_ACTION_REPORT_FULL_FILE { \
Jeej 19:701d5669f2e9 401 ALP_OPCODE_F_RD_DATA | ALP_OPCODE_RESP,\
Jeej 19:701d5669f2e9 402 0, HAL_U16_BE_DEPOSIT(0x4000), 0 }
Jeej 19:701d5669f2e9 403
Jeej 19:701d5669f2e9 404 #define ALP_ACTION_REPORT_PART_FILE { \
Jeej 19:701d5669f2e9 405 ALP_OPCODE_F_RD_DATA | ALP_OPCODE_RESP,\
Jeej 19:701d5669f2e9 406 0, HAL_U16_BE_DEPOSIT(0x8000), 0 }
Jeej 19:701d5669f2e9 407
Jeej 19:701d5669f2e9 408 #endif // __ALP_SPEC_H__