1 /**
2   ******************************************************************************
3   * @file    stm32wb0x_hal_irda_ex.h
4   * @author  MCD Application Team
5   * @brief   Header file of IRDA HAL Extended module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2024 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   ******************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -------------------------------------*/
20 #ifndef STM32WB0x_HAL_IRDA_EX_H
21 #define STM32WB0x_HAL_IRDA_EX_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32wb0x_hal_def.h"
29 
30 /** @addtogroup STM32WB0x_HAL_Driver
31   * @{
32   */
33 
34 /** @defgroup IRDAEx IRDAEx
35   * @brief IRDA Extended HAL module driver
36   * @{
37   */
38 
39 /* Exported types ------------------------------------------------------------*/
40 /* Exported constants --------------------------------------------------------*/
41 /** @defgroup IRDAEx_Extended_Exported_Constants IRDAEx Extended Exported Constants
42   * @{
43   */
44 
45 /** @defgroup IRDAEx_Word_Length IRDAEx Word Length
46   * @{
47   */
48 #define IRDA_WORDLENGTH_7B                  USART_CR1_M1   /*!< 7-bit long frame */
49 #define IRDA_WORDLENGTH_8B                  0x00000000U    /*!< 8-bit long frame */
50 #define IRDA_WORDLENGTH_9B                  USART_CR1_M0   /*!< 9-bit long frame */
51 /**
52   * @}
53   */
54 
55 /**
56   * @}
57   */
58 
59 /* Exported macros -----------------------------------------------------------*/
60 
61 /* Private macros ------------------------------------------------------------*/
62 
63 /** @defgroup IRDAEx_Private_Macros IRDAEx Private Macros
64   * @{
65   */
66 
67 /* An always 16 MHz is requested by USART to maintain fixed baud rate while
68  * system clock is switching from a frequency to another)
69  */
70 #define IRDA_PERIPHCLK  (16000000U)
71 
72 /** @brief  Compute the mask to apply to retrieve the received data
73   *         according to the word length and to the parity bits activation.
74   * @param  __HANDLE__ specifies the IRDA Handle.
75   * @retval None, the mask to apply to the associated UART RDR register is stored in (__HANDLE__)->Mask field.
76   */
77 #define IRDA_MASK_COMPUTATION(__HANDLE__)                             \
78   do {                                                                \
79     if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_9B)          \
80     {                                                                 \
81       if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \
82       {                                                               \
83         (__HANDLE__)->Mask = 0x01FFU ;                                \
84       }                                                               \
85       else                                                            \
86       {                                                               \
87         (__HANDLE__)->Mask = 0x00FFU ;                                \
88       }                                                               \
89     }                                                                 \
90     else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_8B)     \
91     {                                                                 \
92       if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \
93       {                                                               \
94         (__HANDLE__)->Mask = 0x00FFU ;                                \
95       }                                                               \
96       else                                                            \
97       {                                                               \
98         (__HANDLE__)->Mask = 0x007FU ;                                \
99       }                                                               \
100     }                                                                 \
101     else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_7B)     \
102     {                                                                 \
103       if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \
104       {                                                               \
105         (__HANDLE__)->Mask = 0x007FU ;                                \
106       }                                                               \
107       else                                                            \
108       {                                                               \
109         (__HANDLE__)->Mask = 0x003FU ;                                \
110       }                                                               \
111     }                                                                 \
112     else                                                              \
113     {                                                                 \
114       (__HANDLE__)->Mask = 0x0000U;                                   \
115     }                                                                 \
116   } while(0U)
117 
118 /** @brief Ensure that IRDA frame length is valid.
119   * @param __LENGTH__ IRDA frame length.
120   * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
121   */
122 #define IS_IRDA_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == IRDA_WORDLENGTH_7B) || \
123                                          ((__LENGTH__) == IRDA_WORDLENGTH_8B) || \
124                                          ((__LENGTH__) == IRDA_WORDLENGTH_9B))
125 /**
126   * @}
127   */
128 
129 /* Exported functions --------------------------------------------------------*/
130 
131 /**
132   * @}
133   */
134 
135 /**
136   * @}
137   */
138 
139 #ifdef __cplusplus
140 }
141 #endif
142 
143 #endif /* STM32WB0x_HAL_IRDA_EX_H */
144