Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: modem_ref_helper_for_v5_3_217
Diff: include/alp_spec.h
- Revision:
- 30:74aa36420c61
- Parent:
- 26:2c934a269914
- Child:
- 35:ac940cf8ebe6
--- a/include/alp_spec.h Wed May 16 11:14:32 2018 +0000
+++ b/include/alp_spec.h Mon Jun 04 15:32:05 2018 +0000
@@ -1,6 +1,6 @@
/// @copyright
/// ========================================================================={{{
-/// Copyright (c) 2012-2013 WizziLab /
+/// Copyright (c) 2012-2018 WizziLab /
/// All rights reserved /
/// /
/// IMPORTANT: This Software may not be modified, copied or distributed unless /
@@ -53,87 +53,86 @@
#include "hal_types.h"
// Opcode Modifiers / Preemption flags
-#define ALP_OPCODE_RESP 0x40
-#define ALP_OPCODE_GROUP 0x80
-#define ALP_OPCODE_ERR 0x40
-#define ALP_OPCODE_EOP 0x80
-#define ALP_OPCODE_ITF 0x40
-#define ALP_OPCODE_INDIRECT 0x40
-#define ALP_OPCODE_OVERLOAD 0x80
+#define ALP_OPCODE_RESP 0x40
+#define ALP_OPCODE_GROUP 0x80
+#define ALP_OPCODE_ERR 0x40
+#define ALP_OPCODE_EOP 0x80
+#define ALP_OPCODE_ITF 0x40
+#define ALP_OPCODE_INDIRECT 0x40
+#define ALP_OPCODE_OVERLOAD 0x80
typedef enum {
-// OPCODE | OPERAND
- ALP_OPCODE_NOP = 0, //| -
+// OPCODE | OPERAND
+ ALP_OPCODE_NOP = 0, //| -
- ALP_OPCODE_F_RD_DATA = 1, //| FDR
- ALP_OPCODE_F_RD_PROP = 2, //| FID
+ ALP_OPCODE_F_RD_DATA = 1, //| FDR
+ ALP_OPCODE_F_RD_PROP = 2, //| FID
- ALP_OPCODE_F_WR_DATA = 4, //| FD
- ALP_OPCODE_F_WR_FLUSH = 5, //| FD
- ALP_OPCODE_F_WR_PROP = 6, //| FD
- ALP_OPCODE_F_TOUCH = 7, //| FD
+ ALP_OPCODE_F_WR_DATA = 4, //| FD
+ ALP_OPCODE_F_WR_FLUSH = 5, //| FD
+ ALP_OPCODE_F_WR_PROP = 6, //| FD
+ ALP_OPCODE_F_TOUCH = 7, //| FD
- ALP_OPCODE_QUERY = 8, //| Q
- ALP_OPCODE_QBREAK = 9, //| Q
- ALP_OPCODE_PERM_REQ = 10, //| P
+ ALP_OPCODE_QUERY = 8, //| Q
+ ALP_OPCODE_QBREAK = 9, //| Q
+ ALP_OPCODE_PERM_REQ = 10, //| P
- ALP_OPCODE_CRC_CHECK = 11, //| Q
+ ALP_OPCODE_CRC_CHECK = 11, //| Q
- ALP_OPCODE_F_EXIST = 16, //| FID
- ALP_OPCODE_F_CREATE = 17, //| FD
- ALP_OPCODE_F_DELETE = 18, //| FID
- ALP_OPCODE_F_RESTORE = 19, //| FID
- ALP_OPCODE_F_FLUSH = 20, //| FID
- ALP_OPCODE_F_DECLARE = 21, //| FH XXX Deprecated DO NOT USE !!!
- ALP_OPCODE_F_CLOSE = 22, //| FID
- ALP_OPCODE_F_COPY = 23, //| 2xFID
- ALP_OPCODE_F_EXECUTE = 31, //| FID
+ ALP_OPCODE_F_EXIST = 16, //| FID
+ ALP_OPCODE_F_CREATE = 17, //| FD
+ ALP_OPCODE_F_DELETE = 18, //| FID
+ ALP_OPCODE_F_RESTORE = 19, //| FID
+ ALP_OPCODE_F_FLUSH = 20, //| FID
+ ALP_OPCODE_F_DECLARE = 21, //| FH XXX Deprecated DO NOT USE !!!
+ ALP_OPCODE_F_CLOSE = 22, //| FID
+ ALP_OPCODE_F_COPY = 23, //| 2xFID
+ ALP_OPCODE_F_EXECUTE = 31, //| FID
- ALP_OPCODE_RSP_F_DATA = 32, //| FD
- ALP_OPCODE_RSP_F_PROP = 33, //| FH
- ALP_OPCODE_RSP_STATUS = 34, //| S
- ALP_OPCODE_RSP_ISTATUS = ALP_OPCODE_RSP_STATUS + ALP_OPCODE_ITF, //| SI
- ALP_OPCODE_RSP_TAG = 35, //| PID
- ALP_OPCODE_RSP_EOPTAG = ALP_OPCODE_RSP_TAG + ALP_OPCODE_EOP, //| PID
- ALP_OPCODE_RSP_ERRTAG = ALP_OPCODE_RSP_TAG + ALP_OPCODE_ERR, //| PID
- ALP_OPCODE_RSP_URC = 36, //|
+ ALP_OPCODE_RSP_F_DATA = 32, //| FD
+ ALP_OPCODE_RSP_F_PROP = 33, //| FH
+ ALP_OPCODE_RSP_STATUS = 34, //| S
+ ALP_OPCODE_RSP_ISTATUS = ALP_OPCODE_RSP_STATUS + ALP_OPCODE_ITF, //| SI
+ ALP_OPCODE_RSP_TAG = 35, //| PID
+ ALP_OPCODE_RSP_EOPTAG = ALP_OPCODE_RSP_TAG + ALP_OPCODE_EOP, //| PID
+ ALP_OPCODE_RSP_ERRTAG = ALP_OPCODE_RSP_TAG + ALP_OPCODE_ERR, //| PID
+ ALP_OPCODE_RSP_URC = 36, //|
- ALP_OPCODE_CHUNK = 48, //| -
- ALP_OPCODE_LOGIC = 49, //| -
- ALP_OPCODE_FORWARD = 50, //| I
- ALP_OPCODE_IFORWARD = 51, //| IFID
- ALP_OPCODE_TAG = 52, //| PID
- ALP_OPCODE_URCC = 53, //|
+ ALP_OPCODE_CHUNK = 48, //| -
+ ALP_OPCODE_LOGIC = 49, //| -
+ ALP_OPCODE_FORWARD = 50, //| I
+ ALP_OPCODE_IFORWARD = 51, //| IFID
+ ALP_OPCODE_TAG = 52, //| PID
+ ALP_OPCODE_URCC = 53, //|
- ALP_OPCODE_EXT = 63, //| OP |ARGC| ARGS |
- //| 1B | 1B | ARGC-bytes |
-RFU
-
-
+ ALP_OPCODE_EXT = 63, //| OP |ARGC| ARGS |
+ //| 1B | 1B | ARGC-bytes |
} alp_opcodes_t;
-#define ALP_OPCODE_UNKNOWN (-1)
+#define ALP_OPCODE_UNKNOWN (-1)
typedef enum {
- ALP_ITF_TYPE_HOST = 0x00,
- ALP_ITF_TYPE_BLE = 0xB0,
- ALP_ITF_TYPE_COM = 0xC0,
- ALP_ITF_TYPE_D7A = 0xD7, // Only this one actually in D7A Spec
- ALP_ITF_TYPE_LWAN = 0x10,
+ ALP_ITF_TYPE_HOST = 0x00,
+ ALP_ITF_TYPE_BLE = 0xB0,
+ ALP_ITF_TYPE_COM = 0xC0,
+ ALP_ITF_TYPE_D7A = 0xD7, // Only this one actually in D7A Spec
+ ALP_ITF_TYPE_LWAN = 0x10,
+
+ ALP_ITF_TYPE_NONE = 0xFF
} alp_itf_type_t;
// EXTOpcode Modifiers / Preemption flags
-#define ALP_EXTOPCODE_DISTANT 0x40 // Used w/ EXTOPCODE_F_DECLARE
+#define ALP_EXTOPCODE_DISTANT 0x40 // Used w/ EXTOPCODE_F_DECLARE
typedef enum {
// WIZZILAB OPCODE EXTENSION
- ALP_EXTOPCODE_ITF_START = 0, //| 'ITF' activation operations:
- ALP_EXTOPCODE_ITF_STOP = 1, //| TYPE | DEVQ | IFID | FLAGS |
- ALP_EXTOPCODE_ITF_PAUSE = 2, //| 1B | 1B | 1B | 1B |
- //| TYPE: ITF Type (D7A,LWAN,BLE...)
- //| DEVQ: ITF Max Device number if applicable
- //| IFID: ITF Config file if applicable
- //| FLAG: Additional configuration flags if applicable
- ALP_EXTOPCODE_F_DECLARE = 21, //| FH
+ ALP_EXTOPCODE_ITF_START = 0, //| 'ITF' activation operations:
+ ALP_EXTOPCODE_ITF_STOP = 1, //| TYPE | DEVQ | IFID | FLAGS |
+ ALP_EXTOPCODE_ITF_PAUSE = 2, //| 1B | 1B | 1B | 1B |
+ //| TYPE: ITF Type (D7A,LWAN,BLE...)
+ //| DEVQ: ITF Max Device number if applicable
+ //| IFID: ITF Config file if applicable
+ //| FLAG: Additional configuration flags if applicable
+ ALP_EXTOPCODE_F_DECLARE = 21, //| FH
} alp_ext_opcodes_t;
typedef enum
@@ -166,19 +165,54 @@
} alp_errors_t;
typedef enum {
+ ALP_QCOMP_NE = 0,
+ ALP_QCOMP_EQ = 1,
+ ALP_QCOMP_LT = 2,
+ ALP_QCOMP_LTE = 3,
+ ALP_QCOMP_GT = 4,
+ ALP_QCOMP_GTE = 5
+} alp_q_comp_t;
+#define ALP_QCOMP(v) (((v) & 7) << 0)
+
+typedef enum {
+ // This is not matching ALP's spec on purpose...
+ ALP_QLOGIC_AND = 0,
+ ALP_QLOGIC_OR = 1,
+ ALP_QLOGIC_XOR = 2,
+ ALP_QLOGIC_NOR = 3,
+ ALP_QLOGIC_NAND = 4,
+} alp_q_logic_t;
+
+typedef enum {
+ ALP_QDATA_SIGNED = 0,
+ ALP_QDATA_UNSIGNED = 1
+} alp_q_data_t;
+#define ALP_QDATA(v) (((v) & 1) << 3)
+#define ALP_QMASK(v) (((v) & 1) << 4)
+
+typedef enum {
+ ALP_QTYPE_NONVOID = 0, // This is better done by "EXIST"
+ ALP_QTYPE_ACOMP_ZERO = 1,
+ ALP_QTYPE_ACOMP_IMMEDIATE = 2,
+ ALP_QTYPE_ACOMP_FILE = 3,
+ ALP_QTYPE_INRANGE = 4,
+ ALP_QTYPE_STR_TOKEN = 7 //
+}alp_q_type_t;
+#define ALP_QTYPE(v) (((v) & 7) << 5)
+
+typedef enum {
/// Disable all URCs on requesting ITF
- ALP_URC_TYPE_NONE = 0xFF,
+ ALP_URC_TYPE_NONE = 0xFF,
/// Enable Link Quality (on IFID) URCs on requesting ITF
- ALP_URC_TYPE_LQUAL = 0,
+ ALP_URC_TYPE_LQUAL = 0,
/// Enable Link Down (on IFID) URCs on requesting ITF
- ALP_URC_TYPE_LDOWN = 1,
+ ALP_URC_TYPE_LDOWN = 1,
ALP_URC_TYPE_QTY,
- ALP_URC_TYPE_BUSY = 2, // XXX TODO this is awkward: BUSY is not an ITF-URC but a system/modem URC
+ ALP_URC_TYPE_BUSY = 2, // XXX TODO this is awkward: BUSY is not an ITF-URC but a system/modem URC
} alp_urc_type_t;
-
TYPEDEF_STRUCT_PACKED {
u8 perm;
u8 prop;
@@ -205,6 +239,8 @@
// _fid : File ID
// _o : Access Offset
// _l : Access Length
+// _m : Mask
+// _v : Immediate value
// ======================================================================
#define ALP_ACTION_NOP_SIZE (1)
#define ALP_ACTION_NOP(_p,_r) do {\
@@ -405,5 +441,33 @@
ALP_OPCODE_F_RD_DATA | ALP_OPCODE_RESP,\
0, HAL_U16_BE_DEPOSIT(0x8000), 0 }
+// Simple Query actions
+/// Match immediate value to file value
+#define ALP_ACTION_QUERY_EQVAL_SIZE(_o,_l,_mbit) (4+ALP_LFIELD_SIZE(_o)+(1+(_mbit))*(_l))
+#define ALP_ACTION_QUERY_EQVAL(_p,_m,_v,_fid,_o,_l) do {\
+ u8 _mbit = (_m) ? 1 : 0;\
+ *(_p)++ = ALP_OPCODE_QUERY;\
+ *(_p)++ = ALP_QCOMP(ALP_QCOMP_EQ) | ALP_QDATA(ALP_QDATA_UNSIGNED) | ALP_QMASK(_mbit) | ALP_QTYPE(ALP_QTYPE_ACOMP_IMMEDIATE);\
+ *(_p)++ = _l;\
+ if (_mbit) {memcpy((_p),&(_m),_l);(_p) += (_l);}\
+ memcpy((_p),&(_v),_l);(_p) += (_l);\
+ *(_p)++ = _fid;\
+ (_p) += alp_encode_length(_p,_o);\
+ } while(0)
+
+// Query with break actions
+/// Match immediate value to file value
+#define ALP_ACTION_QBREAK_EQVAL_SIZE(_o,_l,_mbit) (4+ALP_LFIELD_SIZE(_o)+(1+(_mbit))*(_l))
+#define ALP_ACTION_QBREAK_EQVAL(_p,_m,_v,_fid,_o,_l) do {\
+ u8 _mbit = (_m) ? 1 : 0;\
+ *(_p)++ = ALP_OPCODE_QBREAK;\
+ *(_p)++ = ALP_QCOMP(ALP_QCOMP_EQ) | ALP_QDATA(ALP_QDATA_UNSIGNED) | ALP_QMASK(_mbit) | ALP_QTYPE(ALP_QTYPE_ACOMP_IMMEDIATE);\
+ *(_p)++ = _l;\
+ if (_mbit) {memcpy((_p),&(_m),_l);(_p) += (_l);}\
+ memcpy((_p),&(_v),_l);(_p) += (_l);\
+ *(_p)++ = _fid;\
+ (_p) += alp_encode_length(_p,_o);\
+ } while(0)
+
#endif // __ALP_SPEC_H__