xref: /btstack/port/stm32-wb55xx-nucleo-freertos/Middlewares/STM32_WPAN/utilities/utilities_common.h (revision 0561b2d8d5dba972c7daa57d5e677f7a1327edfd)
1*0561b2d8STREFOU Felix /**
2*0561b2d8STREFOU Felix  ******************************************************************************
3*0561b2d8STREFOU Felix  * @file    utilities_common.h
4*0561b2d8STREFOU Felix  * @author  MCD Application Team
5*0561b2d8STREFOU Felix  * @brief   Common file to utilities
6*0561b2d8STREFOU Felix  ******************************************************************************
7*0561b2d8STREFOU Felix   * @attention
8*0561b2d8STREFOU Felix   *
9*0561b2d8STREFOU Felix   * <h2><center>&copy; Copyright (c) 2019 STMicroelectronics.
10*0561b2d8STREFOU Felix   * All rights reserved.</center></h2>
11*0561b2d8STREFOU Felix   *
12*0561b2d8STREFOU Felix   * This software component is licensed by ST under BSD 3-Clause license,
13*0561b2d8STREFOU Felix   * the "License"; You may not use this file except in compliance with the
14*0561b2d8STREFOU Felix   * License. You may obtain a copy of the License at:
15*0561b2d8STREFOU Felix   *                        opensource.org/licenses/BSD-3-Clause
16*0561b2d8STREFOU Felix   *
17*0561b2d8STREFOU Felix   ******************************************************************************
18*0561b2d8STREFOU Felix  */
19*0561b2d8STREFOU Felix 
20*0561b2d8STREFOU Felix 
21*0561b2d8STREFOU Felix /* Define to prevent recursive inclusion -------------------------------------*/
22*0561b2d8STREFOU Felix #ifndef __UTILITIES_COMMON_H
23*0561b2d8STREFOU Felix #define __UTILITIES_COMMON_H
24*0561b2d8STREFOU Felix 
25*0561b2d8STREFOU Felix #ifdef __cplusplus
26*0561b2d8STREFOU Felix extern "C" {
27*0561b2d8STREFOU Felix #endif
28*0561b2d8STREFOU Felix 
29*0561b2d8STREFOU Felix #include <stdint.h>
30*0561b2d8STREFOU Felix #include <string.h>
31*0561b2d8STREFOU Felix #include <stdio.h>
32*0561b2d8STREFOU Felix #include <stdlib.h>
33*0561b2d8STREFOU Felix #include <stdarg.h>
34*0561b2d8STREFOU Felix 
35*0561b2d8STREFOU Felix #include "app_conf.h"
36*0561b2d8STREFOU Felix 
37*0561b2d8STREFOU Felix   /* -------------------------------- *
38*0561b2d8STREFOU Felix    *  Basic definitions               *
39*0561b2d8STREFOU Felix    * -------------------------------- */
40*0561b2d8STREFOU Felix 
41*0561b2d8STREFOU Felix #undef NULL
42*0561b2d8STREFOU Felix #define NULL                    0
43*0561b2d8STREFOU Felix 
44*0561b2d8STREFOU Felix #undef FALSE
45*0561b2d8STREFOU Felix #define FALSE                   0
46*0561b2d8STREFOU Felix 
47*0561b2d8STREFOU Felix #undef TRUE
48*0561b2d8STREFOU Felix #define TRUE                    (!0)
49*0561b2d8STREFOU Felix 
50*0561b2d8STREFOU Felix   /* -------------------------------- *
51*0561b2d8STREFOU Felix    *  Critical Section definition     *
52*0561b2d8STREFOU Felix    * -------------------------------- */
53*0561b2d8STREFOU Felix #undef BACKUP_PRIMASK
54*0561b2d8STREFOU Felix #define BACKUP_PRIMASK()    uint32_t primask_bit= __get_PRIMASK()
55*0561b2d8STREFOU Felix 
56*0561b2d8STREFOU Felix #undef DISABLE_IRQ
57*0561b2d8STREFOU Felix #define DISABLE_IRQ()       __disable_irq()
58*0561b2d8STREFOU Felix 
59*0561b2d8STREFOU Felix #undef RESTORE_PRIMASK
60*0561b2d8STREFOU Felix #define RESTORE_PRIMASK()   __set_PRIMASK(primask_bit)
61*0561b2d8STREFOU Felix 
62*0561b2d8STREFOU Felix   /* -------------------------------- *
63*0561b2d8STREFOU Felix    *  Macro delimiters                *
64*0561b2d8STREFOU Felix    * -------------------------------- */
65*0561b2d8STREFOU Felix #undef M_BEGIN
66*0561b2d8STREFOU Felix #define M_BEGIN     do {
67*0561b2d8STREFOU Felix 
68*0561b2d8STREFOU Felix #undef  M_END
69*0561b2d8STREFOU Felix #define M_END       } while(0)
70*0561b2d8STREFOU Felix 
71*0561b2d8STREFOU Felix   /* -------------------------------- *
72*0561b2d8STREFOU Felix    *  Some useful macro definitions   *
73*0561b2d8STREFOU Felix    * -------------------------------- */
74*0561b2d8STREFOU Felix #undef MAX
75*0561b2d8STREFOU Felix #define MAX( x, y )          (((x)>(y))?(x):(y))
76*0561b2d8STREFOU Felix 
77*0561b2d8STREFOU Felix #undef MIN
78*0561b2d8STREFOU Felix #define MIN( x, y )          (((x)<(y))?(x):(y))
79*0561b2d8STREFOU Felix 
80*0561b2d8STREFOU Felix #undef MODINC
81*0561b2d8STREFOU Felix #define MODINC( a, m )       M_BEGIN  (a)++;  if ((a)>=(m)) (a)=0;  M_END
82*0561b2d8STREFOU Felix 
83*0561b2d8STREFOU Felix #undef MODDEC
84*0561b2d8STREFOU Felix #define MODDEC( a, m )       M_BEGIN  if ((a)==0) (a)=(m);  (a)--;  M_END
85*0561b2d8STREFOU Felix 
86*0561b2d8STREFOU Felix #undef MODADD
87*0561b2d8STREFOU Felix #define MODADD( a, b, m )    M_BEGIN  (a)+=(b);  if ((a)>=(m)) (a)-=(m);  M_END
88*0561b2d8STREFOU Felix 
89*0561b2d8STREFOU Felix #undef MODSUB
90*0561b2d8STREFOU Felix #define MODSUB( a, b, m )    MODADD( a, (m)-(b), m )
91*0561b2d8STREFOU Felix 
92*0561b2d8STREFOU Felix #undef ALIGN
93*0561b2d8STREFOU Felix #ifdef WIN32
94*0561b2d8STREFOU Felix #define ALIGN(n)
95*0561b2d8STREFOU Felix #else
96*0561b2d8STREFOU Felix #define ALIGN(n)             __attribute__((aligned(n)))
97*0561b2d8STREFOU Felix #endif
98*0561b2d8STREFOU Felix 
99*0561b2d8STREFOU Felix #undef PAUSE
100*0561b2d8STREFOU Felix #define PAUSE( t )           M_BEGIN \
101*0561b2d8STREFOU Felix                                volatile int _i; \
102*0561b2d8STREFOU Felix                                for ( _i = t; _i > 0; _i -- ); \
103*0561b2d8STREFOU Felix                              M_END
104*0561b2d8STREFOU Felix #undef DIVF
105*0561b2d8STREFOU Felix #define DIVF( x, y )         ((x)/(y))
106*0561b2d8STREFOU Felix 
107*0561b2d8STREFOU Felix #undef DIVC
108*0561b2d8STREFOU Felix #define DIVC( x, y )         (((x)+(y)-1)/(y))
109*0561b2d8STREFOU Felix 
110*0561b2d8STREFOU Felix #undef DIVR
111*0561b2d8STREFOU Felix #define DIVR( x, y )         (((x)+((y)/2))/(y))
112*0561b2d8STREFOU Felix 
113*0561b2d8STREFOU Felix #undef SHRR
114*0561b2d8STREFOU Felix #define SHRR( x, n )         ((((x)>>((n)-1))+1)>>1)
115*0561b2d8STREFOU Felix 
116*0561b2d8STREFOU Felix #undef BITN
117*0561b2d8STREFOU Felix #define BITN( w, n )         (((w)[(n)/32] >> ((n)%32)) & 1)
118*0561b2d8STREFOU Felix 
119*0561b2d8STREFOU Felix #undef BITNSET
120*0561b2d8STREFOU Felix #define BITNSET( w, n, b )   M_BEGIN (w)[(n)/32] |= ((U32)(b))<<((n)%32); M_END
121*0561b2d8STREFOU Felix 
122*0561b2d8STREFOU Felix /* -------------------------------- *
123*0561b2d8STREFOU Felix  *  Section attribute               *
124*0561b2d8STREFOU Felix  * -------------------------------- */
125*0561b2d8STREFOU Felix #define PLACE_IN_SECTION( __x__ )  __attribute__((section (__x__)))
126*0561b2d8STREFOU Felix 
127*0561b2d8STREFOU Felix /* ----------------------------------- *
128*0561b2d8STREFOU Felix  *  Packed usage (compiler dependent)  *
129*0561b2d8STREFOU Felix  * ----------------------------------- */
130*0561b2d8STREFOU Felix #undef PACKED__
131*0561b2d8STREFOU Felix #undef PACKED_STRUCT
132*0561b2d8STREFOU Felix 
133*0561b2d8STREFOU Felix #if defined ( __CC_ARM )
134*0561b2d8STREFOU Felix   #if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)
135*0561b2d8STREFOU Felix     #define PACKED__ __attribute__((packed))
136*0561b2d8STREFOU Felix     #define PACKED_STRUCT struct PACKED__
137*0561b2d8STREFOU Felix   #else
138*0561b2d8STREFOU Felix     #define PACKED__(TYPE) __packed TYPE
139*0561b2d8STREFOU Felix     #define PACKED_STRUCT PACKED__(struct)
140*0561b2d8STREFOU Felix   #endif
141*0561b2d8STREFOU Felix #elif defined   ( __GNUC__ )
142*0561b2d8STREFOU Felix   #define PACKED__ __attribute__((packed))
143*0561b2d8STREFOU Felix   #define PACKED_STRUCT struct PACKED__
144*0561b2d8STREFOU Felix #elif defined (__ICCARM__)
145*0561b2d8STREFOU Felix   #define PACKED_STRUCT __packed struct
146*0561b2d8STREFOU Felix #elif
147*0561b2d8STREFOU Felix   #define PACKED_STRUCT __packed struct
148*0561b2d8STREFOU Felix #endif
149*0561b2d8STREFOU Felix 
150*0561b2d8STREFOU Felix #ifdef __cplusplus
151*0561b2d8STREFOU Felix }
152*0561b2d8STREFOU Felix #endif
153*0561b2d8STREFOU Felix 
154*0561b2d8STREFOU Felix #endif /*__UTILITIES_COMMON_H */
155*0561b2d8STREFOU Felix 
156*0561b2d8STREFOU Felix /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
157