Exportable version of WizziLab's modem driver.

Dependents:   modem_ref_helper

Committer:
Jeej
Date:
Fri Feb 19 10:59:42 2021 +0000
Revision:
60:08efaaca0e83
Parent:
56:67e3d9608403
Fixed responses

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 56:67e3d9608403 55 #include "mbed.h"
Jeej 56:67e3d9608403 56
Jeej 19:701d5669f2e9 57 //======================================================================
Jeej 19:701d5669f2e9 58 // Common Types
Jeej 19:701d5669f2e9 59 //======================================================================
Jeej 56:67e3d9608403 60 typedef int32_t s32;
Jeej 56:67e3d9608403 61 typedef int16_t s16;
Jeej 56:67e3d9608403 62 typedef int8_t s8;
Jeej 19:701d5669f2e9 63
Jeej 56:67e3d9608403 64 typedef uint32_t u32;
Jeej 56:67e3d9608403 65 typedef uint16_t u16;
Jeej 56:67e3d9608403 66 typedef uint8_t u8;
Jeej 19:701d5669f2e9 67
Jeej 56:67e3d9608403 68 typedef volatile int32_t vs32;
Jeej 56:67e3d9608403 69 typedef volatile int16_t vs16;
Jeej 56:67e3d9608403 70 typedef volatile int8_t vs8;
Jeej 19:701d5669f2e9 71
Jeej 56:67e3d9608403 72 typedef volatile uint32_t vu32;
Jeej 56:67e3d9608403 73 typedef volatile uint16_t vu16;
Jeej 56:67e3d9608403 74 typedef volatile uint8_t vu8;
Jeej 19:701d5669f2e9 75
Jeej 56:67e3d9608403 76 typedef int32_t const sc32;
Jeej 56:67e3d9608403 77 typedef int16_t const sc16;
Jeej 56:67e3d9608403 78 typedef int8_t const sc8;
Jeej 19:701d5669f2e9 79
Jeej 56:67e3d9608403 80 typedef uint32_t const uc32;
Jeej 56:67e3d9608403 81 typedef uint16_t const uc16;
Jeej 56:67e3d9608403 82 typedef uint8_t const uc8;
Jeej 19:701d5669f2e9 83
Jeej 56:67e3d9608403 84 typedef volatile int32_t const vsc32;
Jeej 56:67e3d9608403 85 typedef volatile int16_t const vsc16;
Jeej 56:67e3d9608403 86 typedef volatile int8_t const vsc8;
Jeej 19:701d5669f2e9 87
Jeej 56:67e3d9608403 88 typedef volatile uint32_t const vuc32;
Jeej 56:67e3d9608403 89 typedef volatile uint16_t const vuc16;
Jeej 56:67e3d9608403 90 typedef volatile uint8_t const vuc8;
Jeej 19:701d5669f2e9 91
Jeej 19:701d5669f2e9 92 typedef unsigned int uint;
Jeej 19:701d5669f2e9 93 typedef int sint;
Jeej 19:701d5669f2e9 94
Jeej 19:701d5669f2e9 95 typedef volatile unsigned int vuint;
Jeej 19:701d5669f2e9 96 typedef volatile int vsint;
Jeej 19:701d5669f2e9 97
Jeej 19:701d5669f2e9 98 typedef unsigned int const cuint;
Jeej 19:701d5669f2e9 99 typedef int const csint;
Jeej 19:701d5669f2e9 100
Jeej 19:701d5669f2e9 101 //typedef unsigned int size_t;
Jeej 56:67e3d9608403 102 //typedef uint32_t int uint32_t;
Jeej 19:701d5669f2e9 103
Jeej 19:701d5669f2e9 104 typedef struct {
Jeej 19:701d5669f2e9 105 s16 I;
Jeej 19:701d5669f2e9 106 s16 Q;
Jeej 19:701d5669f2e9 107 } complex_t;
Jeej 19:701d5669f2e9 108
Jeej 19:701d5669f2e9 109 typedef struct {
Jeej 19:701d5669f2e9 110 u8 m;
Jeej 19:701d5669f2e9 111 u8 e;
Jeej 19:701d5669f2e9 112 } mant_exp_t;
Jeej 19:701d5669f2e9 113
Jeej 19:701d5669f2e9 114 typedef struct {
Jeej 19:701d5669f2e9 115 s16 x;
Jeej 19:701d5669f2e9 116 s16 y;
Jeej 19:701d5669f2e9 117 s16 z;
Jeej 19:701d5669f2e9 118 } v3d_t;
Jeej 19:701d5669f2e9 119
Jeej 19:701d5669f2e9 120 //======================================================================
Jeej 19:701d5669f2e9 121 // Common Enum / Defines
Jeej 19:701d5669f2e9 122 //======================================================================
Jeej 19:701d5669f2e9 123 #ifndef bool
Jeej 19:701d5669f2e9 124 //typedef u8 bool;
Jeej 19:701d5669f2e9 125 #endif
Jeej 19:701d5669f2e9 126
Jeej 19:701d5669f2e9 127 #ifndef false
Jeej 56:67e3d9608403 128 //#define false 0
Jeej 19:701d5669f2e9 129 #endif
Jeej 19:701d5669f2e9 130 #ifndef true
Jeej 56:67e3d9608403 131 //#define true 1
Jeej 19:701d5669f2e9 132 #endif
Jeej 19:701d5669f2e9 133 #ifndef FALSE
Jeej 56:67e3d9608403 134 #define FALSE false
Jeej 19:701d5669f2e9 135 #endif
Jeej 19:701d5669f2e9 136 #ifndef TRUE
Jeej 56:67e3d9608403 137 #define TRUE true
Jeej 19:701d5669f2e9 138 #endif
Jeej 19:701d5669f2e9 139
Jeej 19:701d5669f2e9 140 #ifndef NULL
Jeej 19:701d5669f2e9 141 #define NULL (void*)0
Jeej 19:701d5669f2e9 142 #endif
Jeej 19:701d5669f2e9 143
Jeej 19:701d5669f2e9 144 #define typeof(s) __typeof__(s)
Jeej 19:701d5669f2e9 145
Jeej 56:67e3d9608403 146 #define MIN_S8 ((s8 )(0x80))
Jeej 56:67e3d9608403 147 #define MAX_S8 ((s8 )(0x7F))
Jeej 56:67e3d9608403 148 #define MIN_U8 ((u8 )(0x0))
Jeej 56:67e3d9608403 149 #define MAX_U8 ((u8 )(0xFF))
Jeej 56:67e3d9608403 150 #define MIN_S12 ((s16)(0xF800))
Jeej 56:67e3d9608403 151 #define MAX_S12 ((s16)(0x7FF))
Jeej 56:67e3d9608403 152 #define MIN_U12 ((u16)(0x0))
Jeej 56:67e3d9608403 153 #define MAX_U12 ((u16)(0xFFF))
Jeej 56:67e3d9608403 154 #define MIN_S16 ((s16)(0x8000))
Jeej 56:67e3d9608403 155 #define MAX_S16 ((s16)(0x7FFF))
Jeej 56:67e3d9608403 156 #define MIN_U16 ((u16)(0x0))
Jeej 56:67e3d9608403 157 #define MAX_U16 ((u16)(0xFFFF))
Jeej 56:67e3d9608403 158 #define MIN_U32 ((u32)(0x0))
Jeej 56:67e3d9608403 159 #define MAX_U32 ((u32)(0xFFFFFFFF))
Jeej 56:67e3d9608403 160 #define MIN_S32 ((s32)(0x80000000))
Jeej 56:67e3d9608403 161 #define MAX_S32 ((s32)(0x7FFFFFFF))
Jeej 56:67e3d9608403 162
Jeej 56:67e3d9608403 163 #define _NEEDS_BIT(N, B) (((u32)N >> B) > 0)
Jeej 56:67e3d9608403 164 #define HAL_BITS_TO_REPRESENT(N) \
Jeej 56:67e3d9608403 165 (_NEEDS_BIT(N, 0) + _NEEDS_BIT(N, 1) + \
Jeej 56:67e3d9608403 166 _NEEDS_BIT(N, 2) + _NEEDS_BIT(N, 3) + \
Jeej 56:67e3d9608403 167 _NEEDS_BIT(N, 4) + _NEEDS_BIT(N, 5) + \
Jeej 56:67e3d9608403 168 _NEEDS_BIT(N, 6) + _NEEDS_BIT(N, 7) + \
Jeej 56:67e3d9608403 169 _NEEDS_BIT(N, 8) + _NEEDS_BIT(N, 9) + \
Jeej 56:67e3d9608403 170 _NEEDS_BIT(N, 10) + _NEEDS_BIT(N, 11) + \
Jeej 56:67e3d9608403 171 _NEEDS_BIT(N, 12) + _NEEDS_BIT(N, 13) + \
Jeej 56:67e3d9608403 172 _NEEDS_BIT(N, 14) + _NEEDS_BIT(N, 15) + \
Jeej 56:67e3d9608403 173 _NEEDS_BIT(N, 16) + _NEEDS_BIT(N, 17) + \
Jeej 56:67e3d9608403 174 _NEEDS_BIT(N, 18) + _NEEDS_BIT(N, 19) + \
Jeej 56:67e3d9608403 175 _NEEDS_BIT(N, 20) + _NEEDS_BIT(N, 21) + \
Jeej 56:67e3d9608403 176 _NEEDS_BIT(N, 22) + _NEEDS_BIT(N, 23) + \
Jeej 56:67e3d9608403 177 _NEEDS_BIT(N, 24) + _NEEDS_BIT(N, 25) + \
Jeej 56:67e3d9608403 178 _NEEDS_BIT(N, 26) + _NEEDS_BIT(N, 27) + \
Jeej 56:67e3d9608403 179 _NEEDS_BIT(N, 28) + _NEEDS_BIT(N, 29) + \
Jeej 56:67e3d9608403 180 _NEEDS_BIT(N, 30) + _NEEDS_BIT(N, 31) \
Jeej 56:67e3d9608403 181 )
Jeej 19:701d5669f2e9 182
Jeej 19:701d5669f2e9 183 //======================================================================
Jeej 19:701d5669f2e9 184 // Common Endianness cast & conversion Macros
Jeej 19:701d5669f2e9 185 //======================================================================
Jeej 19:701d5669f2e9 186 #define HAL_U16_B0(a) ((u8)(((u16)(a) >> 0) & 0xFF))
Jeej 19:701d5669f2e9 187 #define HAL_U16_B1(a) ((u8)(((u16)(a) >> 8) & 0xFF))
Jeej 19:701d5669f2e9 188 #define HAL_U16_LO(a) ((u8)((a) >> 0))
Jeej 19:701d5669f2e9 189 #define HAL_U16_HI(a) ((u8)((a) >> 8))
Jeej 19:701d5669f2e9 190 #define HAL_TO_U16(a,b) ((u16)((u16)(a) << 8)|(u16)(b))
Jeej 19:701d5669f2e9 191 #define HAL_TO_U32(a,b,c,d) ((u32)((u32)(a) <<24)|((u32)(b) <<16)|((u32)(c) << 8)|(u32)(d))
Jeej 56:67e3d9608403 192 #define HAL_U16_TO_U32(a,b) ((u32)((u32)(a) <<16)|(u32)(b))
Jeej 19:701d5669f2e9 193 #define HAL_U32_LO(a) ((u16)((a) >> 0))
Jeej 19:701d5669f2e9 194 #define HAL_U32_HI(a) ((u16)((a) >> 16))
Jeej 19:701d5669f2e9 195 #define HAL_U32_B0(a) ((u8)(((u32)(a) >> 0) & 0xFF))
Jeej 19:701d5669f2e9 196 #define HAL_U32_B1(a) ((u8)(((u32)(a) >> 8) & 0xFF))
Jeej 19:701d5669f2e9 197 #define HAL_U32_B2(a) ((u8)(((u32)(a) >> 16) & 0xFF))
Jeej 19:701d5669f2e9 198 #define HAL_U32_B3(a) ((u8)(((u32)(a) >> 24) & 0xFF))
Jeej 19:701d5669f2e9 199 // This should generate a REV instruction
Jeej 19:701d5669f2e9 200 #define HAL_U32_BYTE_SWAP(a) ( (((a) & 0x000000ff) << 24) | \
Jeej 19:701d5669f2e9 201 (((a) & 0x0000ff00) << 8) | \
Jeej 19:701d5669f2e9 202 (((a) & 0x00ff0000) >> 8) | \
Jeej 19:701d5669f2e9 203 (((a) & 0xff000000) >> 24))
Jeej 19:701d5669f2e9 204 // This should generate a REV16 instruction
Jeej 19:701d5669f2e9 205 #define HAL_U16_BYTE_SWAP(a) ((((a) & 0x00ff) << 8) | (((a) & 0xff00) >> 8))
Jeej 19:701d5669f2e9 206 // Byte array deposit
Jeej 19:701d5669f2e9 207 #define HAL_U16_DEPOSIT(a) HAL_U16_B0(a),HAL_U16_B1(a)
Jeej 19:701d5669f2e9 208 #define HAL_U24_DEPOSIT(a) HAL_U32_B0(a),HAL_U32_B1(a),HAL_U32_B2(a)
Jeej 19:701d5669f2e9 209 #define HAL_U32_DEPOSIT(a) HAL_U32_B0(a),HAL_U32_B1(a),HAL_U32_B2(a),HAL_U32_B3(a)
Jeej 19:701d5669f2e9 210 #define HAL_U16_BE_DEPOSIT(a) HAL_U16_B1(a),HAL_U16_B0(a)
Jeej 19:701d5669f2e9 211 #define HAL_U24_BE_DEPOSIT(a) HAL_U32_B2(a),HAL_U32_B1(a),HAL_U32_B0(a)
Jeej 19:701d5669f2e9 212 #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 213 #define HAL_U32_PUSH(p,a) do{ \
Jeej 19:701d5669f2e9 214 *(p)++ = HAL_U32_B0(a); \
Jeej 19:701d5669f2e9 215 *(p)++ = HAL_U32_B1(a); \
Jeej 19:701d5669f2e9 216 *(p)++ = HAL_U32_B2(a); \
Jeej 19:701d5669f2e9 217 *(p)++ = HAL_U32_B3(a); } while(0)
Jeej 19:701d5669f2e9 218 #define HAL_U16_PUSH(p,a) do{ \
Jeej 19:701d5669f2e9 219 *(p)++ = HAL_U16_B0(a); \
Jeej 19:701d5669f2e9 220 *(p)++ = HAL_U16_B1(a); } while(0)
Jeej 19:701d5669f2e9 221 #define HAL_U32_BE_PUSH(p,a) do{ \
Jeej 19:701d5669f2e9 222 *(p)++ = HAL_U32_B3(a); \
Jeej 19:701d5669f2e9 223 *(p)++ = HAL_U32_B2(a); \
Jeej 19:701d5669f2e9 224 *(p)++ = HAL_U32_B1(a); \
Jeej 19:701d5669f2e9 225 *(p)++ = HAL_U32_B0(a); } while(0)
Jeej 19:701d5669f2e9 226 #define HAL_U16_BE_PUSH(p,a) do{ \
Jeej 19:701d5669f2e9 227 *(p)++ = HAL_U16_B1(a); \
Jeej 19:701d5669f2e9 228 *(p)++ = HAL_U16_B0(a); } while(0)
Jeej 19:701d5669f2e9 229
Jeej 56:67e3d9608403 230 #define HAL_U32_DECODE(p) ( (((u32)((u8 *)p)[0]) << 0) |\
Jeej 56:67e3d9608403 231 (((u32)((u8 *)p)[1]) << 8) |\
Jeej 56:67e3d9608403 232 (((u32)((u8 *)p)[2]) << 16) |\
Jeej 56:67e3d9608403 233 (((u32)((u8 *)p)[3]) << 24 ))
Jeej 56:67e3d9608403 234 #define HAL_U24_DECODE(p) ( (((u32)((u8 *)p)[0]) << 0) |\
Jeej 56:67e3d9608403 235 (((u32)((u8 *)p)[1]) << 8) |\
Jeej 56:67e3d9608403 236 (((u32)((u8 *)p)[2]) << 16))
Jeej 56:67e3d9608403 237 #define HAL_U16_DECODE(p) ( (((u32)((u8 *)p)[0]) << 0) |\
Jeej 56:67e3d9608403 238 (((u32)((u8 *)p)[1]) << 8))
Jeej 56:67e3d9608403 239
Jeej 56:67e3d9608403 240 #define HAL_U32_BE_DECODE(p) ( (((u32)((u8 *)p)[3]) << 0) |\
Jeej 56:67e3d9608403 241 (((u32)((u8 *)p)[2]) << 8) |\
Jeej 56:67e3d9608403 242 (((u32)((u8 *)p)[1]) << 16) |\
Jeej 56:67e3d9608403 243 (((u32)((u8 *)p)[0]) << 24 ))
Jeej 56:67e3d9608403 244 #define HAL_U24_BE_DECODE(p) ( (((u32)((u8 *)p)[2]) << 0) |\
Jeej 56:67e3d9608403 245 (((u32)((u8 *)p)[1]) << 8) |\
Jeej 56:67e3d9608403 246 (((u32)((u8 *)p)[0]) << 16))
Jeej 56:67e3d9608403 247 #define HAL_U16_BE_DECODE(p) ( (((u32)((u8 *)p)[1]) << 0) |\
Jeej 56:67e3d9608403 248 (((u32)((u8 *)p)[0]) << 8))
Jeej 56:67e3d9608403 249
Jeej 56:67e3d9608403 250
Jeej 19:701d5669f2e9 251 // Aliases
Jeej 19:701d5669f2e9 252 //======================================================================
Jeej 19:701d5669f2e9 253 #define U32_BYTE_SWAP(a) HAL_U32_BYTE_SWAP(a)
Jeej 19:701d5669f2e9 254 #define U16_BYTE_SWAP(a) HAL_U16_BYTE_SWAP(a)
Jeej 19:701d5669f2e9 255 #define U16_MSB(a) HAL_U16_B1(a)
Jeej 19:701d5669f2e9 256 #define U16_LSB(a) HAL_U16_B0(a)
Jeej 19:701d5669f2e9 257 #define U32_MSB(a) HAL_U32_HI(a)
Jeej 19:701d5669f2e9 258 #define U32_LSB(a) HAL_U32_LO(a)
Jeej 19:701d5669f2e9 259 #define U16_TO_BE(a) U16_BYTE_SWAP(a)
Jeej 19:701d5669f2e9 260 #define U32_TO_BE(a) U32_BYTE_SWAP(a)
Jeej 19:701d5669f2e9 261
Jeej 19:701d5669f2e9 262 #ifndef htonl
Jeej 19:701d5669f2e9 263 #define htonl(a) U32_BYTE_SWAP(a)
Jeej 19:701d5669f2e9 264 #endif
Jeej 19:701d5669f2e9 265
Jeej 19:701d5669f2e9 266 #ifndef ntohl
Jeej 19:701d5669f2e9 267 #define ntohl(a) htonl((a))
Jeej 19:701d5669f2e9 268 #endif
Jeej 19:701d5669f2e9 269
Jeej 19:701d5669f2e9 270 #ifndef htons
Jeej 19:701d5669f2e9 271 #define htons(a) U16_BYTE_SWAP(a)
Jeej 19:701d5669f2e9 272 #endif
Jeej 19:701d5669f2e9 273
Jeej 19:701d5669f2e9 274 #ifndef ntohs
Jeej 19:701d5669f2e9 275 #define ntohs(a) htons((a))
Jeej 19:701d5669f2e9 276 #endif
Jeej 19:701d5669f2e9 277
Jeej 19:701d5669f2e9 278 # define weak_alias(name, aliasname) _weak_alias (name, aliasname)
Jeej 19:701d5669f2e9 279 # define _weak_alias(name, aliasname) \
Jeej 19:701d5669f2e9 280 extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
Jeej 19:701d5669f2e9 281
Jeej 19:701d5669f2e9 282 //======================================================================
Jeej 19:701d5669f2e9 283 // Attributes and macros
Jeej 19:701d5669f2e9 284 //======================================================================
Jeej 19:701d5669f2e9 285 #define TYPEDEF_STRUCT_PACKED typedef struct __attribute__((packed))
Jeej 19:701d5669f2e9 286
Jeej 19:701d5669f2e9 287 #define IN_SECTION(sec) __attribute__((section(#sec)))
Jeej 19:701d5669f2e9 288
Jeej 19:701d5669f2e9 289 #define WEAK_SYM __attribute__((weak))
Jeej 19:701d5669f2e9 290
Jeej 19:701d5669f2e9 291 #define IN_RAM __attribute__((section(".data"),no_instrument_function))
Jeej 19:701d5669f2e9 292
Jeej 19:701d5669f2e9 293 #define NOINSTRUMENT __attribute__((no_instrument_function))
Jeej 19:701d5669f2e9 294
Jeej 37:f5424d109c6d 295 #define _UNUSED __attribute__((unused))
Jeej 19:701d5669f2e9 296
Jeej 19:701d5669f2e9 297 #define NOINLINE __attribute__((noinline))
Jeej 19:701d5669f2e9 298 #define INLINE static inline __attribute__((always_inline,no_instrument_function))
Jeej 19:701d5669f2e9 299
Jeej 52:cce5347a94af 300 #define sizeofof(_s,_f) sizeof(((_s*)0)->_f) // size of structure field
Jeej 52:cce5347a94af 301 #define typeofof(_s,_f) typeof(((_s*)0)->_f) // type of structure field
Jeej 52:cce5347a94af 302
Jeej 19:701d5669f2e9 303 //======================================================================
Jeej 19:701d5669f2e9 304 // hal_callback_t
Jeej 19:701d5669f2e9 305 //----------------------------------------------------------------------
Jeej 19:701d5669f2e9 306 /// @typedef hal_callback_t
Jeej 19:701d5669f2e9 307 /// signal : an event enumerator
Jeej 19:701d5669f2e9 308 /// param : pointer to the parameter structure or buffer
Jeej 19:701d5669f2e9 309 /// looks like : void callback(u16 signal, u16 plen, void* param)
Jeej 19:701d5669f2e9 310 //======================================================================
Jeej 19:701d5669f2e9 311 typedef void (*hal_callback_t)(u16, void*);
Jeej 19:701d5669f2e9 312
Jeej 56:67e3d9608403 313 #define _private static
Jeej 56:67e3d9608403 314 #define _protected
Jeej 56:67e3d9608403 315 #define _public
Jeej 56:67e3d9608403 316 #define _global
Jeej 56:67e3d9608403 317
Jeej 56:67e3d9608403 318 INLINE u32 max_u32(u32 a, u32 b)
Jeej 56:67e3d9608403 319 {
Jeej 56:67e3d9608403 320 return (a > b)? a: b;
Jeej 56:67e3d9608403 321 }
Jeej 56:67e3d9608403 322
Jeej 56:67e3d9608403 323 INLINE u32 min_u32(u32 a, u32 b)
Jeej 56:67e3d9608403 324 {
Jeej 56:67e3d9608403 325 return (a < b)? a: b;
Jeej 56:67e3d9608403 326 }
Jeej 56:67e3d9608403 327
Jeej 56:67e3d9608403 328 INLINE s32 max_s32(s32 a, s32 b)
Jeej 56:67e3d9608403 329 {
Jeej 56:67e3d9608403 330 return (a > b)? a: b;
Jeej 56:67e3d9608403 331 }
Jeej 56:67e3d9608403 332
Jeej 56:67e3d9608403 333 INLINE s32 min_s32(s32 a, s32 b)
Jeej 56:67e3d9608403 334 {
Jeej 56:67e3d9608403 335 return (a < b)? a: b;
Jeej 56:67e3d9608403 336 }
Jeej 19:701d5669f2e9 337
Jeej 19:701d5669f2e9 338 /// @} HAL_TYPES
Jeej 19:701d5669f2e9 339
Jeej 47:cf4519ba56d9 340 #endif // __HAL_TYPES_H__