Exportable version of WizziLab's modem driver.
include/alp.h@46:9b83866cef2c, 2019-07-31 (annotated)
- 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?
User | Revision | Line number | New 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__ |