Exportable version of WizziLab's modem driver.

Dependents:   modem_ref_helper

Committer:
Jeej
Date:
Wed Jul 31 16:48:48 2019 +0000
Revision:
46:9b83866cef2c
Parent:
37:f5424d109c6d
Child:
56:67e3d9608403
Updated for mbed-os 5.13

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jeej 0:027760f45e2c 1 /// @copyright
Jeej 0:027760f45e2c 2 /// ========================================================================={{{
Jeej 0:027760f45e2c 3 /// Copyright (c) 2012-2013 WizziLab /
Jeej 0:027760f45e2c 4 /// All rights reserved /
Jeej 0:027760f45e2c 5 /// /
Jeej 0:027760f45e2c 6 /// IMPORTANT: This Software may not be modified, copied or distributed unless /
Jeej 0:027760f45e2c 7 /// embedded on a WizziLab product. Other than for the foregoing purpose, this /
Jeej 0:027760f45e2c 8 /// Software and/or its documentation may not be used, reproduced, copied, /
Jeej 0:027760f45e2c 9 /// prepared derivative works of, modified, performed, distributed, displayed /
Jeej 0:027760f45e2c 10 /// or sold for any purpose. For the sole purpose of embedding this Software /
Jeej 0:027760f45e2c 11 /// on a WizziLab product, copy, modification and distribution of this /
Jeej 0:027760f45e2c 12 /// Software is granted provided that the following conditions are respected: /
Jeej 0:027760f45e2c 13 /// /
Jeej 0:027760f45e2c 14 /// * Redistributions of source code must retain the above copyright notice, /
Jeej 0:027760f45e2c 15 /// this list of conditions and the following disclaimer /
Jeej 0:027760f45e2c 16 /// /
Jeej 0:027760f45e2c 17 /// * Redistributions in binary form must reproduce the above copyright /
Jeej 0:027760f45e2c 18 /// notice, this list of conditions and the following disclaimer in the /
Jeej 0:027760f45e2c 19 /// documentation and/or other materials provided with the distribution. /
Jeej 0:027760f45e2c 20 /// /
Jeej 0:027760f45e2c 21 /// * The name of WizziLab can not be used to endorse or promote products /
Jeej 0:027760f45e2c 22 /// derived from this software without specific prior written permission. /
Jeej 0:027760f45e2c 23 /// /
Jeej 0:027760f45e2c 24 /// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS /
Jeej 0:027760f45e2c 25 /// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED /
Jeej 0:027760f45e2c 26 /// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR /
Jeej 0:027760f45e2c 27 /// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR /
Jeej 0:027760f45e2c 28 /// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, /
Jeej 0:027760f45e2c 29 /// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, /
Jeej 0:027760f45e2c 30 /// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, /
Jeej 0:027760f45e2c 31 /// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY /
Jeej 0:027760f45e2c 32 /// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING /
Jeej 0:027760f45e2c 33 /// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS /
Jeej 0:027760f45e2c 34 /// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /
Jeej 0:027760f45e2c 35 /// WIZZILAB HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, /
Jeej 0:027760f45e2c 36 /// ENHANCEMENTS OR MODIFICATIONS. /
Jeej 0:027760f45e2c 37 /// /
Jeej 0:027760f45e2c 38 /// Should you have any questions regarding your right to use this Software, /
Jeej 0:027760f45e2c 39 /// contact WizziLab at www.wizzilab.com. /
Jeej 0:027760f45e2c 40 /// /
Jeej 0:027760f45e2c 41 /// =========================================================================}}}
Jeej 0:027760f45e2c 42 /// @endcopyright
Jeej 0:027760f45e2c 43
Jeej 0:027760f45e2c 44 // =======================================================================
Jeej 0:027760f45e2c 45 /// @file alp.h
Jeej 0:027760f45e2c 46 /// @brief Wizzilab's specific ALP definitions
Jeej 0:027760f45e2c 47 /// @defgroup ALP
Jeej 0:027760f45e2c 48 // =======================================================================
Jeej 0:027760f45e2c 49
Jeej 0:027760f45e2c 50 #ifndef __ALP_H__
Jeej 0:027760f45e2c 51 #define __ALP_H__
Jeej 0:027760f45e2c 52
Jeej 0:027760f45e2c 53 // D7A spec
Jeej 0:027760f45e2c 54 #include "alp_spec.h"
Jeej 0:027760f45e2c 55 // helpers
Jeej 0:027760f45e2c 56 #include "alp_helpers.h"
Jeej 1:40ead20ecb14 57
Jeej 35:ac940cf8ebe6 58 // ALP_EVT_ITF_READY/CLOSED Event-param builder/splitter
Jeej 35:ac940cf8ebe6 59 #define ALP_ITF_EVP(itf,err) (evt_param_t)(int)(((u8)err << 8)|((u8)itf))
Jeej 35:ac940cf8ebe6 60 #define ALP_ITF_EVP2ITF(evp) ((evp) & 0xFF)
Jeej 35:ac940cf8ebe6 61 #define ALP_ITF_EVP2ERR(evp) ((evp >> 8) & 0xFF)
Jeej 35:ac940cf8ebe6 62
Jeej 0:027760f45e2c 63 // D7AActP Substitution modes:
Jeej 0:027760f45e2c 64 // ----------------------------------------------------------------------
Jeej 0:027760f45e2c 65 // MODE1: replace FID= actp.fid, offset=0, length=(actp.fid).length
Jeej 0:027760f45e2c 66 // MODE2: replace FID= actp.fid, offset=actp.offset, length=actp.length
Jeej 0:027760f45e2c 67 // ======================================================================
Jeej 0:027760f45e2c 68 typedef enum {
Jeej 0:027760f45e2c 69 ACTP_SUBST_NONE = 0,
Jeej 0:027760f45e2c 70 ACTP_SUBST_MODE1,
Jeej 0:027760f45e2c 71 ACTP_SUBST_MODE2,
Jeej 0:027760f45e2c 72 } alp_actp_substitution_mode_t;
Jeej 0:027760f45e2c 73
Jeej 0:027760f45e2c 74 typedef union {
Jeej 0:027760f45e2c 75 struct {
Jeej 0:027760f45e2c 76 u8 fid;
Jeej 0:027760f45e2c 77 u8 error;
Jeej 0:027760f45e2c 78 };
Jeej 0:027760f45e2c 79 } alp_evt_done_evp_t;
Jeej 0:027760f45e2c 80
Jeej 0:027760f45e2c 81 typedef enum {
Jeej 0:027760f45e2c 82 ALP_ITF_FID_COM0,
Jeej 0:027760f45e2c 83 ALP_ITF_FID_COM1,
Jeej 0:027760f45e2c 84 ALP_ITF_FID_COM2,
Jeej 35:ac940cf8ebe6 85 ALP_ITF_FID_COM_HACK_LIMIT = ALP_ITF_FID_COM2,
Jeej 0:027760f45e2c 86 ALP_ITF_FID_BLE,
Jeej 0:027760f45e2c 87 } alp_itf_fixed_fids_t;
Jeej 0:027760f45e2c 88
Jeej 0:027760f45e2c 89 typedef enum {
Jeej 0:027760f45e2c 90 ALP_ROLE_ROOT = 0xFF,
Jeej 0:027760f45e2c 91 ALP_ROLE_USER = 0x38,
Jeej 0:027760f45e2c 92 ALP_ROLE_GUEST = 0x07,
Jeej 0:027760f45e2c 93 } alp_role_t;
Jeej 0:027760f45e2c 94
Jeej 0:027760f45e2c 95 typedef enum {
Jeej 30:74aa36420c61 96 ALP_RPOL_ONESHOT = 0,
Jeej 30:74aa36420c61 97 ALP_RPOL_ONESHOT_RETRY = 1,
Jeej 30:74aa36420c61 98 ALP_RPOL_FIFO_FAST = 2,
Jeej 30:74aa36420c61 99 ALP_RPOL_FIFO_SLOW = 3,
Jeej 30:74aa36420c61 100 ALP_RPOL_SINGLE_FAST = 4,
Jeej 30:74aa36420c61 101 ALP_RPOL_SINGLE_SLOW = 5,
Jeej 30:74aa36420c61 102 ALP_RPOL_ONESHOT_STICKY = 6,
Jeej 30:74aa36420c61 103 ALP_RPOL_RFU_7 = 7,
Jeej 0:027760f45e2c 104 ALP_RPOL_QTY,
Jeej 0:027760f45e2c 105 } alp_rpol_t;
Jeej 0:027760f45e2c 106
Jeej 0:027760f45e2c 107 typedef enum {
Jeej 0:027760f45e2c 108 ALP_BOFF_NONE = 0,
Jeej 0:027760f45e2c 109 ALP_BOFF_LINEAR = 1,
Jeej 0:027760f45e2c 110 ALP_BOFF_EXP = 2,
Jeej 0:027760f45e2c 111
Jeej 0:027760f45e2c 112 ALP_BOFF_QTY
Jeej 0:027760f45e2c 113 } alp_rpol_backoff_proc_t;
Jeej 0:027760f45e2c 114
Jeej 0:027760f45e2c 115
Jeej 0:027760f45e2c 116 // Event parameter for ALP_EVT_URC
Jeej 0:027760f45e2c 117 typedef union {
Jeej 0:027760f45e2c 118 struct {
Jeej 0:027760f45e2c 119 u8 type;
Jeej 0:027760f45e2c 120 u8 ifid;
Jeej 0:027760f45e2c 121 u8 value;
Jeej 0:027760f45e2c 122 };
Jeej 0:027760f45e2c 123 } alp_urc_evp_t;
Jeej 0:027760f45e2c 124
Jeej 0:027760f45e2c 125 TYPEDEF_STRUCT_PACKED {
Jeej 0:027760f45e2c 126 u8 ifid;
Jeej 0:027760f45e2c 127 u8 report_freq;
Jeej 0:027760f45e2c 128 } alp_urc_lqual_params_t;
Jeej 0:027760f45e2c 129
Jeej 0:027760f45e2c 130 TYPEDEF_STRUCT_PACKED {
Jeej 0:027760f45e2c 131 u8 ifid;
Jeej 0:027760f45e2c 132 u8 max_consecutive_errors;
Jeej 0:027760f45e2c 133 } alp_urc_ldown_params_t;
Jeej 0:027760f45e2c 134
Jeej 0:027760f45e2c 135 // ALP D7 "Retry-policies" description
Jeej 0:027760f45e2c 136 // ----------------------------------------------------------------------
Jeej 0:027760f45e2c 137 // Retry-policies (also called QoS) are defining an application level
Jeej 0:027760f45e2c 138 // set of parameters such as automatic retry in case of failure, termination
Jeej 0:027760f45e2c 139 // messaging and other implementation dependent settings.
Jeej 0:027760f45e2c 140 // ======================================================================
Jeej 0:027760f45e2c 141 TYPEDEF_STRUCT_PACKED {
Jeej 30:74aa36420c61 142 /// Select between background of foreground tasks,
Jeej 30:74aa36420c61 143 /// - if '1': Session fifo remains opened for further messaging
Jeej 30:74aa36420c61 144 /// - if '0': Session fifo is closed/released
Jeej 30:74aa36420c61 145 /// Replaces the "persistant flag" ("background" = "persistant").
Jeej 30:74aa36420c61 146 /// Note : In the D7A stack, the BG fifos have lower priority.
Jeej 30:74aa36420c61 147 /// This field could be extended to be a priority level
Jeej 30:74aa36420c61 148 u8 bg;
Jeej 0:027760f45e2c 149 /// Number of "pushed" messages that will be internally buffered
Jeej 0:027760f45e2c 150 /// until they are successfully sent. In case of overflow, the oldest
Jeej 0:027760f45e2c 151 /// message is lost.
Jeej 0:027760f45e2c 152 u8 depth;
Jeej 0:027760f45e2c 153 /// Maximum number of retry steps
Jeej 0:027760f45e2c 154 u8 retries;
Jeej 30:74aa36420c61 155 /// Minimum unit of time (in second) used for Backoff time calculation
Jeej 30:74aa36420c61 156 u8 slot_min;
Jeej 30:74aa36420c61 157 /// Maximum unit of time (in second) used for Backoff time calculation
Jeej 30:74aa36420c61 158 u8 slot_max;
Jeej 0:027760f45e2c 159 } alp_retry_policy_t;
Jeej 0:027760f45e2c 160
Jeej 30:74aa36420c61 161 #define ALP_RPOL(_bg,_d,_r,_min,_max) \
Jeej 0:027760f45e2c 162 { \
Jeej 30:74aa36420c61 163 .bg = (_bg), \
Jeej 30:74aa36420c61 164 .depth = (_d), \
Jeej 30:74aa36420c61 165 .retries = (_r), \
Jeej 30:74aa36420c61 166 .slot_min = (_min), \
Jeej 30:74aa36420c61 167 .slot_max = (_max), \
Jeej 0:027760f45e2c 168 }
Jeej 0:027760f45e2c 169
Jeej 0:027760f45e2c 170 // Basic public container for ALP payload.
Jeej 0:027760f45e2c 171 typedef struct {
Jeej 0:027760f45e2c 172 u32 len;
Jeej 0:027760f45e2c 173 u8 d[1];
Jeej 0:027760f45e2c 174 } alp_pub_payload_t;
Jeej 0:027760f45e2c 175
Jeej 0:027760f45e2c 176 typedef enum {
Jeej 0:027760f45e2c 177 /// Unsollicited message
Jeej 0:027760f45e2c 178 ALP_MSG_UNS,
Jeej 0:027760f45e2c 179 /// Deprecated
Jeej 0:027760f45e2c 180 ALP_MSG_ERR,
Jeej 0:027760f45e2c 181 /// Command message XXX deprecated BUT (mis)used in ALP Interfaces.
Jeej 0:027760f45e2c 182 ALP_MSG_CMD,
Jeej 0:027760f45e2c 183 /// Response message
Jeej 0:027760f45e2c 184 ALP_MSG_RES,
Jeej 0:027760f45e2c 185 /// Interface Termination message (used for TAG EOP handing)
Jeej 0:027760f45e2c 186 ALP_MSG_DONE,
Jeej 0:027760f45e2c 187 } alp_msg_t;
Jeej 0:027760f45e2c 188
Jeej 1:40ead20ecb14 189
Jeej 1:40ead20ecb14 190 //======================================================================
Jeej 1:40ead20ecb14 191 //======================================================================
Jeej 1:40ead20ecb14 192 // D7A Interface
Jeej 1:40ead20ecb14 193 //======================================================================
Jeej 1:40ead20ecb14 194 //======================================================================
Jeej 1:40ead20ecb14 195
Jeej 35:ac940cf8ebe6 196 #include "d7a_1x.h"
Jeej 35:ac940cf8ebe6 197
Jeej 35:ac940cf8ebe6 198 //======================================================================
Jeej 35:ac940cf8ebe6 199 // alp_itf_d7a_cfg_t
Jeej 35:ac940cf8ebe6 200 //----------------------------------------------------------------------
Jeej 35:ac940cf8ebe6 201 // @brief ALP D7A interface configuration structure
Jeej 35:ac940cf8ebe6 202 //======================================================================
Jeej 35:ac940cf8ebe6 203 TYPEDEF_STRUCT_PACKED
Jeej 35:ac940cf8ebe6 204 {
Jeej 35:ac940cf8ebe6 205 u8 type;
Jeej 35:ac940cf8ebe6 206 d7a_sp_cfg_t cfg;
Jeej 35:ac940cf8ebe6 207
Jeej 35:ac940cf8ebe6 208 } alp_itf_d7a_cfg_t;
Jeej 35:ac940cf8ebe6 209
Jeej 1:40ead20ecb14 210 #define ALP_D7A_ISTAT_NONE 0
Jeej 1:40ead20ecb14 211 #define ALP_D7A_ISTAT_UNS (1<<0)
Jeej 1:40ead20ecb14 212 #define ALP_D7A_ISTAT_RESP (1<<1)
Jeej 37:f5424d109c6d 213 #define ALP_D7A_ISTAT_EOP (1<<2)
Jeej 1:40ead20ecb14 214
Jeej 30:74aa36420c61 215 #endif // __ALP_H__