Exportable version of WizziLab's modem driver.
include/hal_types.h@60:08efaaca0e83, 2021-02-19 (annotated)
- 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?
User | Revision | Line number | New 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__ |