1 /* USER CODE BEGIN Header */ 2 /** 3 ****************************************************************************** 4 * @file app_common.h 5 * @author MCD Application Team 6 * @brief App Common application configuration file for STM32WPAN Middleware. 7 ****************************************************************************** 8 * @attention 9 * 10 * Copyright (c) 2024 STMicroelectronics. 11 * All rights reserved. 12 * 13 * This software is licensed under terms that can be found in the LICENSE file 14 * in the root directory of this software component. 15 * If no LICENSE file comes with this software, it is provided AS-IS. 16 * 17 ****************************************************************************** 18 */ 19 /* USER CODE END Header */ 20 /* Define to prevent recursive inclusion -------------------------------------*/ 21 #ifndef APP_COMMON_H 22 #define APP_COMMON_H 23 24 #ifdef __cplusplus 25 extern "C"{ 26 #endif 27 28 #include <stdint.h> 29 #include <string.h> 30 #include <stdio.h> 31 #include <stdlib.h> 32 #include <stdarg.h> 33 34 #include "app_conf.h" 35 36 /* -------------------------------- * 37 * Basic definitions * 38 * -------------------------------- */ 39 #undef NULL 40 #define NULL 0 41 42 #undef FALSE 43 #define FALSE 0 44 45 #undef TRUE 46 #define TRUE (!0) 47 48 /* -------------------------------- * 49 * Critical Section definition * 50 * -------------------------------- */ 51 #define ATOMIC_SECTION_BEGIN() uint32_t uwPRIMASK_Bit = __get_PRIMASK(); \ 52 __disable_irq(); 53 /* Must be called in the same or in a lower scope of ATOMIC_SECTION_BEGIN */ 54 #define ATOMIC_SECTION_END() __set_PRIMASK(uwPRIMASK_Bit) 55 56 /* -------------------------------- * 57 * Macro delimiters * 58 * -------------------------------- */ 59 #define M_BEGIN do { 60 61 #define M_END } while(0) 62 63 /* -------------------------------- * 64 * Some useful macro definitions * 65 * -------------------------------- */ 66 #ifndef MAX 67 #define MAX( x, y ) (((x)>(y))?(x):(y)) 68 #endif 69 70 #ifndef MIN 71 #define MIN( x, y ) (((x)<(y))?(x):(y)) 72 #endif 73 74 #define MODINC( a, m ) M_BEGIN (a)++; if ((a)>=(m)) (a)=0; M_END 75 76 #define MODDEC( a, m ) M_BEGIN if ((a)==0) (a)=(m); (a)--; M_END 77 78 #define MODADD( a, b, m ) M_BEGIN (a)+=(b); if ((a)>=(m)) (a)-=(m); M_END 79 80 #define MODSUB( a, b, m ) MODADD( a, (m)-(b), m ) 81 82 #define PAUSE( t ) M_BEGIN \ 83 __IO int _i; \ 84 for ( _i = t; _i > 0; _i -- ); \ 85 M_END 86 87 #define DIVF( x, y ) ((x)/(y)) 88 89 #define DIVC( x, y ) (((x)+(y)-1)/(y)) 90 91 #define DIVR( x, y ) (((x)+((y)/2))/(y)) 92 93 #define SHRR( x, n ) ((((x)>>((n)-1))+1)>>1) 94 95 #define BITN( w, n ) (((w)[(n)/32] >> ((n)%32)) & 1) 96 97 #define BITNSET( w, n, b ) M_BEGIN (w)[(n)/32] |= ((U32)(b))<<((n)%32); M_END 98 99 #define INT(x) ((int)(x)) 100 101 #define FRACTIONAL_1DIGIT(x) (x>0)? ((int) (((x) - INT(x)) * 10)) : ((int) ((INT(x) - (x)) * 10)) 102 103 #define FRACTIONAL_2DIGITS(x) (x>0)? ((int) (((x) - INT(x)) * 100)) : ((int) ((INT(x) - (x)) * 100)) 104 105 #define FRACTIONAL_3DIGITS(x) (x>0)? ((int) (((x) - INT(x)) * 1000)) : ((int) ((INT(x) - (x)) * 1000)) 106 107 /** @brief Macro that returns a 16-bit value from a buffer where the value is stored in Little Endian Format */ 108 #define LE_TO_HOST_16(ptr) (uint16_t) ( ((uint16_t)*((uint8_t *)(ptr))) | \ 109 ((uint16_t)*((uint8_t *)(ptr) + 1) << 8) ) 110 111 /** @brief Macro that stores a 16-bit value into a buffer in Little Endian Format (2 bytes) */ 112 #define HOST_TO_LE_16(buf, val) ( ((buf)[0] = (uint8_t) (val) ) , \ 113 ((buf)[1] = (uint8_t) ((val)>>8) ) ) 114 115 /** @brief Macro that returns a 32-bit value from a buffer where the value is stored in Little Endian Format */ 116 #define LE_TO_HOST_32(ptr) (uint32_t) ( ((uint32_t)*((uint8_t *)(ptr))) | \ 117 ((uint32_t)*((uint8_t *)(ptr) + 1) << 8) | \ 118 ((uint32_t)*((uint8_t *)(ptr) + 2) << 16) | \ 119 ((uint32_t)*((uint8_t *)(ptr) + 3) << 24) ) 120 121 /* -------------------------------- * 122 * Compiler * 123 * -------------------------------- */ 124 #define PLACE_IN_SECTION( __x__ ) __attribute__((used, section (__x__))) 125 126 #ifdef __cplusplus 127 } /* extern "C" */ 128 #endif 129 130 #endif /*APP_COMMON_H */ 131