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:
47:cf4519ba56d9
Updated for mbed-os 5.13

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 hal_types.h
Jeej 19:701d5669f2e9 46 /// @brief platform types definitions
Jeej 19:701d5669f2e9 47 /// @ingroup HAL
Jeej 19:701d5669f2e9 48 /// @defgroup HAL_TYPES HAL Types
Jeej 19:701d5669f2e9 49 /// @{
Jeej 19:701d5669f2e9 50 // ====================================================================
Jeej 19:701d5669f2e9 51
Jeej 19:701d5669f2e9 52 #ifndef __HAL_TYPES_H__
Jeej 19:701d5669f2e9 53 #define __HAL_TYPES_H__
Jeej 19:701d5669f2e9 54
Jeej 19:701d5669f2e9 55 //======================================================================
Jeej 19:701d5669f2e9 56 // Common Types
Jeej 19:701d5669f2e9 57 //======================================================================
Jeej 19:701d5669f2e9 58 typedef signed long s32;
Jeej 19:701d5669f2e9 59 typedef signed short s16;
Jeej 19:701d5669f2e9 60 typedef signed char s8;
Jeej 19:701d5669f2e9 61
Jeej 19:701d5669f2e9 62 typedef unsigned long u32;
Jeej 19:701d5669f2e9 63 typedef unsigned short u16;
Jeej 19:701d5669f2e9 64 typedef unsigned char u8;
Jeej 19:701d5669f2e9 65
Jeej 19:701d5669f2e9 66 typedef volatile signed long vs32;
Jeej 19:701d5669f2e9 67 typedef volatile signed short vs16;
Jeej 19:701d5669f2e9 68 typedef volatile signed char vs8;
Jeej 19:701d5669f2e9 69
Jeej 19:701d5669f2e9 70 typedef volatile unsigned long vu32;
Jeej 19:701d5669f2e9 71 typedef volatile unsigned short vu16;
Jeej 19:701d5669f2e9 72 typedef volatile unsigned char vu8;
Jeej 19:701d5669f2e9 73
Jeej 19:701d5669f2e9 74 typedef signed long const sc32;
Jeej 19:701d5669f2e9 75 typedef signed short const sc16;
Jeej 19:701d5669f2e9 76 typedef signed char const sc8;
Jeej 19:701d5669f2e9 77
Jeej 19:701d5669f2e9 78 typedef unsigned long const uc32;
Jeej 19:701d5669f2e9 79 typedef unsigned short const uc16;
Jeej 19:701d5669f2e9 80 typedef unsigned char const uc8;
Jeej 19:701d5669f2e9 81
Jeej 19:701d5669f2e9 82 typedef volatile signed long const vsc32;
Jeej 19:701d5669f2e9 83 typedef volatile signed short const vsc16;
Jeej 19:701d5669f2e9 84 typedef volatile signed char const vsc8;
Jeej 19:701d5669f2e9 85
Jeej 19:701d5669f2e9 86 typedef volatile unsigned long const vuc32;
Jeej 19:701d5669f2e9 87 typedef volatile unsigned short const vuc16;
Jeej 19:701d5669f2e9 88 typedef volatile unsigned char const vuc8;
Jeej 19:701d5669f2e9 89
Jeej 19:701d5669f2e9 90 typedef unsigned int uint;
Jeej 19:701d5669f2e9 91 typedef int sint;
Jeej 19:701d5669f2e9 92
Jeej 19:701d5669f2e9 93 typedef volatile unsigned int vuint;
Jeej 19:701d5669f2e9 94 typedef volatile int vsint;
Jeej 19:701d5669f2e9 95
Jeej 19:701d5669f2e9 96 typedef unsigned int const cuint;
Jeej 19:701d5669f2e9 97 typedef int const csint;
Jeej 19:701d5669f2e9 98
Jeej 19:701d5669f2e9 99 //typedef unsigned int size_t;
Jeej 19:701d5669f2e9 100 //typedef unsigned long int uint32_t;
Jeej 19:701d5669f2e9 101
Jeej 19:701d5669f2e9 102 typedef struct {
Jeej 19:701d5669f2e9 103 s16 I;
Jeej 19:701d5669f2e9 104 s16 Q;
Jeej 19:701d5669f2e9 105 } complex_t;
Jeej 19:701d5669f2e9 106
Jeej 19:701d5669f2e9 107 typedef struct {
Jeej 19:701d5669f2e9 108 u8 m;
Jeej 19:701d5669f2e9 109 u8 e;
Jeej 19:701d5669f2e9 110 } mant_exp_t;
Jeej 19:701d5669f2e9 111
Jeej 19:701d5669f2e9 112 typedef struct {
Jeej 19:701d5669f2e9 113 s16 x;
Jeej 19:701d5669f2e9 114 s16 y;
Jeej 19:701d5669f2e9 115 s16 z;
Jeej 19:701d5669f2e9 116 } v3d_t;
Jeej 19:701d5669f2e9 117
Jeej 19:701d5669f2e9 118 //======================================================================
Jeej 19:701d5669f2e9 119 // Common Enum / Defines
Jeej 19:701d5669f2e9 120 //======================================================================
Jeej 19:701d5669f2e9 121 #ifndef bool
Jeej 19:701d5669f2e9 122 //typedef u8 bool;
Jeej 19:701d5669f2e9 123 #endif
Jeej 19:701d5669f2e9 124
Jeej 19:701d5669f2e9 125 #ifndef false
Jeej 19:701d5669f2e9 126 #define false 0
Jeej 19:701d5669f2e9 127 #endif
Jeej 19:701d5669f2e9 128 #ifndef true
Jeej 19:701d5669f2e9 129 #define true 1
Jeej 19:701d5669f2e9 130 #endif
Jeej 19:701d5669f2e9 131 #ifndef FALSE
Jeej 19:701d5669f2e9 132 #define FALSE 0
Jeej 19:701d5669f2e9 133 #endif
Jeej 19:701d5669f2e9 134 #ifndef TRUE
Jeej 19:701d5669f2e9 135 #define TRUE 1
Jeej 19:701d5669f2e9 136 #endif
Jeej 19:701d5669f2e9 137
Jeej 19:701d5669f2e9 138 #ifndef NULL
Jeej 19:701d5669f2e9 139 #define NULL (void*)0
Jeej 19:701d5669f2e9 140 #endif
Jeej 19:701d5669f2e9 141
Jeej 19:701d5669f2e9 142 #define typeof(s) __typeof__(s)
Jeej 19:701d5669f2e9 143
Jeej 19:701d5669f2e9 144 #define U8_MAX ((u8)255)
Jeej 19:701d5669f2e9 145 #define S8_MAX ((s8)127)
Jeej 19:701d5669f2e9 146 #define S8_MIN ((s8)-128)
Jeej 19:701d5669f2e9 147 #define U16_MAX ((u16)65535u)
Jeej 19:701d5669f2e9 148 #define S16_MAX ((s16)32767)
Jeej 19:701d5669f2e9 149 #define S16_MIN ((s16)-32768)
Jeej 19:701d5669f2e9 150 #define U32_MAX ((u32)4294967295uL)
Jeej 19:701d5669f2e9 151 #define S32_MAX ((s32)2147483647)
Jeej 19:701d5669f2e9 152 #define S32_MIN ((s32)-2147483648)
Jeej 19:701d5669f2e9 153
Jeej 19:701d5669f2e9 154 //======================================================================
Jeej 19:701d5669f2e9 155 // Common Endianness cast & conversion Macros
Jeej 19:701d5669f2e9 156 //======================================================================
Jeej 19:701d5669f2e9 157 #define HAL_U16_B0(a) ((u8)(((u16)(a) >> 0) & 0xFF))
Jeej 19:701d5669f2e9 158 #define HAL_U16_B1(a) ((u8)(((u16)(a) >> 8) & 0xFF))
Jeej 19:701d5669f2e9 159 #define HAL_U16_LO(a) ((u8)((a) >> 0))
Jeej 19:701d5669f2e9 160 #define HAL_U16_HI(a) ((u8)((a) >> 8))
Jeej 19:701d5669f2e9 161 #define HAL_TO_U16(a,b) ((u16)((u16)(a) << 8)|(u16)(b))
Jeej 19:701d5669f2e9 162 #define HAL_TO_U32(a,b,c,d) ((u32)((u32)(a) <<24)|((u32)(b) <<16)|((u32)(c) << 8)|(u32)(d))
Jeej 19:701d5669f2e9 163 #define HAL_U32_LO(a) ((u16)((a) >> 0))
Jeej 19:701d5669f2e9 164 #define HAL_U32_HI(a) ((u16)((a) >> 16))
Jeej 19:701d5669f2e9 165 #define HAL_U32_B0(a) ((u8)(((u32)(a) >> 0) & 0xFF))
Jeej 19:701d5669f2e9 166 #define HAL_U32_B1(a) ((u8)(((u32)(a) >> 8) & 0xFF))
Jeej 19:701d5669f2e9 167 #define HAL_U32_B2(a) ((u8)(((u32)(a) >> 16) & 0xFF))
Jeej 19:701d5669f2e9 168 #define HAL_U32_B3(a) ((u8)(((u32)(a) >> 24) & 0xFF))
Jeej 19:701d5669f2e9 169 // This should generate a REV instruction
Jeej 19:701d5669f2e9 170 #define HAL_U32_BYTE_SWAP(a) ( (((a) & 0x000000ff) << 24) | \
Jeej 19:701d5669f2e9 171 (((a) & 0x0000ff00) << 8) | \
Jeej 19:701d5669f2e9 172 (((a) & 0x00ff0000) >> 8) | \
Jeej 19:701d5669f2e9 173 (((a) & 0xff000000) >> 24))
Jeej 19:701d5669f2e9 174 // This should generate a REV16 instruction
Jeej 19:701d5669f2e9 175 #define HAL_U16_BYTE_SWAP(a) ((((a) & 0x00ff) << 8) | (((a) & 0xff00) >> 8))
Jeej 19:701d5669f2e9 176 // Byte array deposit
Jeej 19:701d5669f2e9 177 #define HAL_U16_DEPOSIT(a) HAL_U16_B0(a),HAL_U16_B1(a)
Jeej 19:701d5669f2e9 178 #define HAL_U24_DEPOSIT(a) HAL_U32_B0(a),HAL_U32_B1(a),HAL_U32_B2(a)
Jeej 19:701d5669f2e9 179 #define HAL_U32_DEPOSIT(a) HAL_U32_B0(a),HAL_U32_B1(a),HAL_U32_B2(a),HAL_U32_B3(a)
Jeej 19:701d5669f2e9 180 #define HAL_U16_BE_DEPOSIT(a) HAL_U16_B1(a),HAL_U16_B0(a)
Jeej 19:701d5669f2e9 181 #define HAL_U24_BE_DEPOSIT(a) HAL_U32_B2(a),HAL_U32_B1(a),HAL_U32_B0(a)
Jeej 19:701d5669f2e9 182 #define HAL_U32_BE_DEPOSIT(a) HAL_U32_B3(a),HAL_U32_B2(a),HAL_U32_B1(a),HAL_U32_B0(a)
Jeej 19:701d5669f2e9 183 #define HAL_U32_PUSH(p,a) do{ \
Jeej 19:701d5669f2e9 184 *(p)++ = HAL_U32_B0(a); \
Jeej 19:701d5669f2e9 185 *(p)++ = HAL_U32_B1(a); \
Jeej 19:701d5669f2e9 186 *(p)++ = HAL_U32_B2(a); \
Jeej 19:701d5669f2e9 187 *(p)++ = HAL_U32_B3(a); } while(0)
Jeej 19:701d5669f2e9 188 #define HAL_U16_PUSH(p,a) do{ \
Jeej 19:701d5669f2e9 189 *(p)++ = HAL_U16_B0(a); \
Jeej 19:701d5669f2e9 190 *(p)++ = HAL_U16_B1(a); } while(0)
Jeej 19:701d5669f2e9 191 #define HAL_U32_BE_PUSH(p,a) do{ \
Jeej 19:701d5669f2e9 192 *(p)++ = HAL_U32_B3(a); \
Jeej 19:701d5669f2e9 193 *(p)++ = HAL_U32_B2(a); \
Jeej 19:701d5669f2e9 194 *(p)++ = HAL_U32_B1(a); \
Jeej 19:701d5669f2e9 195 *(p)++ = HAL_U32_B0(a); } while(0)
Jeej 19:701d5669f2e9 196 #define HAL_U16_BE_PUSH(p,a) do{ \
Jeej 19:701d5669f2e9 197 *(p)++ = HAL_U16_B1(a); \
Jeej 19:701d5669f2e9 198 *(p)++ = HAL_U16_B0(a); } while(0)
Jeej 19:701d5669f2e9 199
Jeej 19:701d5669f2e9 200 // Aliases
Jeej 19:701d5669f2e9 201 //======================================================================
Jeej 19:701d5669f2e9 202 #define U32_BYTE_SWAP(a) HAL_U32_BYTE_SWAP(a)
Jeej 19:701d5669f2e9 203 #define U16_BYTE_SWAP(a) HAL_U16_BYTE_SWAP(a)
Jeej 19:701d5669f2e9 204 #define U16_MSB(a) HAL_U16_B1(a)
Jeej 19:701d5669f2e9 205 #define U16_LSB(a) HAL_U16_B0(a)
Jeej 19:701d5669f2e9 206 #define U32_MSB(a) HAL_U32_HI(a)
Jeej 19:701d5669f2e9 207 #define U32_LSB(a) HAL_U32_LO(a)
Jeej 19:701d5669f2e9 208 #define U16_TO_BE(a) U16_BYTE_SWAP(a)
Jeej 19:701d5669f2e9 209 #define U32_TO_BE(a) U32_BYTE_SWAP(a)
Jeej 19:701d5669f2e9 210
Jeej 19:701d5669f2e9 211 #ifndef htonl
Jeej 19:701d5669f2e9 212 #define htonl(a) U32_BYTE_SWAP(a)
Jeej 19:701d5669f2e9 213 #endif
Jeej 19:701d5669f2e9 214
Jeej 19:701d5669f2e9 215 #ifndef ntohl
Jeej 19:701d5669f2e9 216 #define ntohl(a) htonl((a))
Jeej 19:701d5669f2e9 217 #endif
Jeej 19:701d5669f2e9 218
Jeej 19:701d5669f2e9 219 #ifndef htons
Jeej 19:701d5669f2e9 220 #define htons(a) U16_BYTE_SWAP(a)
Jeej 19:701d5669f2e9 221 #endif
Jeej 19:701d5669f2e9 222
Jeej 19:701d5669f2e9 223 #ifndef ntohs
Jeej 19:701d5669f2e9 224 #define ntohs(a) htons((a))
Jeej 19:701d5669f2e9 225 #endif
Jeej 19:701d5669f2e9 226
Jeej 19:701d5669f2e9 227 # define weak_alias(name, aliasname) _weak_alias (name, aliasname)
Jeej 19:701d5669f2e9 228 # define _weak_alias(name, aliasname) \
Jeej 19:701d5669f2e9 229 extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
Jeej 19:701d5669f2e9 230
Jeej 19:701d5669f2e9 231 //======================================================================
Jeej 19:701d5669f2e9 232 // Attributes and macros
Jeej 19:701d5669f2e9 233 //======================================================================
Jeej 19:701d5669f2e9 234 #define TYPEDEF_STRUCT_PACKED typedef struct __attribute__((packed))
Jeej 19:701d5669f2e9 235
Jeej 19:701d5669f2e9 236 #define IN_SECTION(sec) __attribute__((section(#sec)))
Jeej 19:701d5669f2e9 237
Jeej 19:701d5669f2e9 238 #define WEAK_SYM __attribute__((weak))
Jeej 19:701d5669f2e9 239
Jeej 19:701d5669f2e9 240 #define IN_RAM __attribute__((section(".data"),no_instrument_function))
Jeej 19:701d5669f2e9 241
Jeej 19:701d5669f2e9 242 #define NOINSTRUMENT __attribute__((no_instrument_function))
Jeej 19:701d5669f2e9 243
Jeej 37:f5424d109c6d 244 #define _UNUSED __attribute__((unused))
Jeej 19:701d5669f2e9 245
Jeej 19:701d5669f2e9 246 #define NOINLINE __attribute__((noinline))
Jeej 19:701d5669f2e9 247 #define INLINE static inline __attribute__((always_inline,no_instrument_function))
Jeej 19:701d5669f2e9 248
Jeej 19:701d5669f2e9 249 //======================================================================
Jeej 19:701d5669f2e9 250 // hal_callback_t
Jeej 19:701d5669f2e9 251 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 252 /// @typedef hal_callback_t
Jeej 19:701d5669f2e9 253 /// signal : an event enumerator
Jeej 19:701d5669f2e9 254 /// param : pointer to the parameter structure or buffer
Jeej 19:701d5669f2e9 255 /// looks like : void callback(u16 signal, u16 plen, void* param)
Jeej 19:701d5669f2e9 256 //======================================================================
Jeej 19:701d5669f2e9 257 typedef void (*hal_callback_t)(u16, void*);
Jeej 19:701d5669f2e9 258
Jeej 19:701d5669f2e9 259 #define private static
Jeej 19:701d5669f2e9 260 #define protected
Jeej 19:701d5669f2e9 261 #define public
Jeej 19:701d5669f2e9 262 #define global
Jeej 19:701d5669f2e9 263
Jeej 19:701d5669f2e9 264 /// @} HAL_TYPES
Jeej 19:701d5669f2e9 265
Jeej 19:701d5669f2e9 266 #endif // __HAL_TYPES_H__
Jeej 19:701d5669f2e9 267