1 /**
2   ******************************************************************************
3   * @file    stm32g4xx_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) 2019 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 STM32G4xx_HAL_IRDA_EX_H
21 #define STM32G4xx_HAL_IRDA_EX_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32g4xx_hal_def.h"
29 
30 /** @addtogroup STM32G4xx_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 /** @brief  Report the IRDA clock source.
68   * @param  __HANDLE__ specifies the IRDA Handle.
69   * @param  __CLOCKSOURCE__ output variable.
70   * @retval IRDA clocking source, written in __CLOCKSOURCE__.
71   */
72 #if defined(UART5) && !defined(USART3)
73 #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)        \
74   do {                                                         \
75     if((__HANDLE__)->Instance == USART1)                       \
76     {                                                          \
77       switch(__HAL_RCC_GET_USART1_SOURCE())                    \
78       {                                                        \
79         case RCC_USART1CLKSOURCE_PCLK2:                        \
80           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2;          \
81           break;                                               \
82         case RCC_USART1CLKSOURCE_HSI:                          \
83           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
84           break;                                               \
85         case RCC_USART1CLKSOURCE_SYSCLK:                       \
86           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
87           break;                                               \
88         case RCC_USART1CLKSOURCE_LSE:                          \
89           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
90           break;                                               \
91         default:                                               \
92           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
93           break;                                               \
94       }                                                        \
95     }                                                          \
96     else if((__HANDLE__)->Instance == USART2)                  \
97     {                                                          \
98       switch(__HAL_RCC_GET_USART2_SOURCE())                    \
99       {                                                        \
100         case RCC_USART2CLKSOURCE_PCLK1:                        \
101           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
102           break;                                               \
103         case RCC_USART2CLKSOURCE_HSI:                          \
104           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
105           break;                                               \
106         case RCC_USART2CLKSOURCE_SYSCLK:                       \
107           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
108           break;                                               \
109         case RCC_USART2CLKSOURCE_LSE:                          \
110           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
111           break;                                               \
112         default:                                               \
113           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
114           break;                                               \
115       }                                                        \
116     }                                                          \
117     else if((__HANDLE__)->Instance == UART4)                   \
118     {                                                          \
119       switch(__HAL_RCC_GET_UART4_SOURCE())                     \
120       {                                                        \
121         case RCC_UART4CLKSOURCE_PCLK1:                         \
122           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
123           break;                                               \
124         case RCC_UART4CLKSOURCE_HSI:                           \
125           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
126           break;                                               \
127         case RCC_UART4CLKSOURCE_SYSCLK:                        \
128           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
129           break;                                               \
130         case RCC_UART4CLKSOURCE_LSE:                           \
131           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
132           break;                                               \
133         default:                                               \
134           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
135           break;                                               \
136       }                                                        \
137     }                                                          \
138     else if((__HANDLE__)->Instance == UART5)                   \
139     {                                                          \
140       switch(__HAL_RCC_GET_UART5_SOURCE())                     \
141       {                                                        \
142         case RCC_UART5CLKSOURCE_PCLK1:                         \
143           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
144           break;                                               \
145         case RCC_UART5CLKSOURCE_HSI:                           \
146           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
147           break;                                               \
148         case RCC_UART5CLKSOURCE_SYSCLK:                        \
149           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
150           break;                                               \
151         case RCC_UART5CLKSOURCE_LSE:                           \
152           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
153           break;                                               \
154         default:                                               \
155           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
156           break;                                               \
157       }                                                        \
158     }                                                          \
159     else                                                       \
160     {                                                          \
161       (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;          \
162     }                                                          \
163   } while(0U)
164 #elif defined(UART5) && defined(USART3)
165 #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)        \
166   do {                                                         \
167     if((__HANDLE__)->Instance == USART1)                       \
168     {                                                          \
169       switch(__HAL_RCC_GET_USART1_SOURCE())                    \
170       {                                                        \
171         case RCC_USART1CLKSOURCE_PCLK2:                        \
172           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2;          \
173           break;                                               \
174         case RCC_USART1CLKSOURCE_HSI:                          \
175           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
176           break;                                               \
177         case RCC_USART1CLKSOURCE_SYSCLK:                       \
178           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
179           break;                                               \
180         case RCC_USART1CLKSOURCE_LSE:                          \
181           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
182           break;                                               \
183         default:                                               \
184           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
185           break;                                               \
186       }                                                        \
187     }                                                          \
188     else if((__HANDLE__)->Instance == USART2)                  \
189     {                                                          \
190       switch(__HAL_RCC_GET_USART2_SOURCE())                    \
191       {                                                        \
192         case RCC_USART2CLKSOURCE_PCLK1:                        \
193           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
194           break;                                               \
195         case RCC_USART2CLKSOURCE_HSI:                          \
196           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
197           break;                                               \
198         case RCC_USART2CLKSOURCE_SYSCLK:                       \
199           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
200           break;                                               \
201         case RCC_USART2CLKSOURCE_LSE:                          \
202           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
203           break;                                               \
204         default:                                               \
205           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
206           break;                                               \
207       }                                                        \
208     }                                                          \
209     else if((__HANDLE__)->Instance == USART3)                  \
210     {                                                          \
211       switch(__HAL_RCC_GET_USART3_SOURCE())                    \
212       {                                                        \
213         case RCC_USART3CLKSOURCE_PCLK1:                        \
214           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
215           break;                                               \
216         case RCC_USART3CLKSOURCE_HSI:                          \
217           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
218           break;                                               \
219         case RCC_USART3CLKSOURCE_SYSCLK:                       \
220           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
221           break;                                               \
222         case RCC_USART3CLKSOURCE_LSE:                          \
223           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
224           break;                                               \
225         default:                                               \
226           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
227           break;                                               \
228       }                                                        \
229     }                                                          \
230     else if((__HANDLE__)->Instance == UART4)                   \
231     {                                                          \
232       switch(__HAL_RCC_GET_UART4_SOURCE())                     \
233       {                                                        \
234         case RCC_UART4CLKSOURCE_PCLK1:                         \
235           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
236           break;                                               \
237         case RCC_UART4CLKSOURCE_HSI:                           \
238           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
239           break;                                               \
240         case RCC_UART4CLKSOURCE_SYSCLK:                        \
241           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
242           break;                                               \
243         case RCC_UART4CLKSOURCE_LSE:                           \
244           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
245           break;                                               \
246         default:                                               \
247           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
248           break;                                               \
249       }                                                        \
250     }                                                          \
251     else if((__HANDLE__)->Instance == UART5)                   \
252     {                                                          \
253       switch(__HAL_RCC_GET_UART5_SOURCE())                     \
254       {                                                        \
255         case RCC_UART5CLKSOURCE_PCLK1:                         \
256           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
257           break;                                               \
258         case RCC_UART5CLKSOURCE_HSI:                           \
259           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
260           break;                                               \
261         case RCC_UART5CLKSOURCE_SYSCLK:                        \
262           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
263           break;                                               \
264         case RCC_UART5CLKSOURCE_LSE:                           \
265           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
266           break;                                               \
267         default:                                               \
268           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
269           break;                                               \
270       }                                                        \
271     }                                                          \
272     else                                                       \
273     {                                                          \
274       (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;          \
275     }                                                          \
276   } while(0U)
277 #elif defined(UART4) && !defined(USART3)
278 #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)        \
279   do {                                                         \
280     if((__HANDLE__)->Instance == USART1)                       \
281     {                                                          \
282       switch(__HAL_RCC_GET_USART1_SOURCE())                    \
283       {                                                        \
284         case RCC_USART1CLKSOURCE_PCLK2:                        \
285           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2;          \
286           break;                                               \
287         case RCC_USART1CLKSOURCE_HSI:                          \
288           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
289           break;                                               \
290         case RCC_USART1CLKSOURCE_SYSCLK:                       \
291           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
292           break;                                               \
293         case RCC_USART1CLKSOURCE_LSE:                          \
294           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
295           break;                                               \
296         default:                                               \
297           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
298           break;                                               \
299       }                                                        \
300     }                                                          \
301     else if((__HANDLE__)->Instance == USART2)                  \
302     {                                                          \
303       switch(__HAL_RCC_GET_USART2_SOURCE())                    \
304       {                                                        \
305         case RCC_USART2CLKSOURCE_PCLK1:                        \
306           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
307           break;                                               \
308         case RCC_USART2CLKSOURCE_HSI:                          \
309           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
310           break;                                               \
311         case RCC_USART2CLKSOURCE_SYSCLK:                       \
312           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
313           break;                                               \
314         case RCC_USART2CLKSOURCE_LSE:                          \
315           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
316           break;                                               \
317         default:                                               \
318           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
319           break;                                               \
320       }                                                        \
321     }                                                          \
322     else if((__HANDLE__)->Instance == UART4)                   \
323     {                                                          \
324       switch(__HAL_RCC_GET_UART4_SOURCE())                     \
325       {                                                        \
326         case RCC_UART4CLKSOURCE_PCLK1:                         \
327           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
328           break;                                               \
329         case RCC_UART4CLKSOURCE_HSI:                           \
330           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
331           break;                                               \
332         case RCC_UART4CLKSOURCE_SYSCLK:                        \
333           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
334           break;                                               \
335         case RCC_UART4CLKSOURCE_LSE:                           \
336           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
337           break;                                               \
338         default:                                               \
339           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
340           break;                                               \
341       }                                                        \
342     }                                                          \
343     else                                                       \
344     {                                                          \
345       (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;          \
346     }                                                          \
347   } while(0U)
348 #elif defined(UART4) && defined(USART3)
349 #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)        \
350   do {                                                         \
351     if((__HANDLE__)->Instance == USART1)                       \
352     {                                                          \
353       switch(__HAL_RCC_GET_USART1_SOURCE())                    \
354       {                                                        \
355         case RCC_USART1CLKSOURCE_PCLK2:                        \
356           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2;          \
357           break;                                               \
358         case RCC_USART1CLKSOURCE_HSI:                          \
359           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
360           break;                                               \
361         case RCC_USART1CLKSOURCE_SYSCLK:                       \
362           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
363           break;                                               \
364         case RCC_USART1CLKSOURCE_LSE:                          \
365           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
366           break;                                               \
367         default:                                               \
368           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
369           break;                                               \
370       }                                                        \
371     }                                                          \
372     else if((__HANDLE__)->Instance == USART2)                  \
373     {                                                          \
374       switch(__HAL_RCC_GET_USART2_SOURCE())                    \
375       {                                                        \
376         case RCC_USART2CLKSOURCE_PCLK1:                        \
377           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
378           break;                                               \
379         case RCC_USART2CLKSOURCE_HSI:                          \
380           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
381           break;                                               \
382         case RCC_USART2CLKSOURCE_SYSCLK:                       \
383           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
384           break;                                               \
385         case RCC_USART2CLKSOURCE_LSE:                          \
386           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
387           break;                                               \
388         default:                                               \
389           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
390           break;                                               \
391       }                                                        \
392     }                                                          \
393     else if((__HANDLE__)->Instance == USART3)                  \
394     {                                                          \
395       switch(__HAL_RCC_GET_USART3_SOURCE())                    \
396       {                                                        \
397         case RCC_USART3CLKSOURCE_PCLK1:                        \
398           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
399           break;                                               \
400         case RCC_USART3CLKSOURCE_HSI:                          \
401           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
402           break;                                               \
403         case RCC_USART3CLKSOURCE_SYSCLK:                       \
404           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
405           break;                                               \
406         case RCC_USART3CLKSOURCE_LSE:                          \
407           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
408           break;                                               \
409         default:                                               \
410           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
411           break;                                               \
412       }                                                        \
413     }                                                          \
414     else if((__HANDLE__)->Instance == UART4)                   \
415     {                                                          \
416       switch(__HAL_RCC_GET_UART4_SOURCE())                     \
417       {                                                        \
418         case RCC_UART4CLKSOURCE_PCLK1:                         \
419           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
420           break;                                               \
421         case RCC_UART4CLKSOURCE_HSI:                           \
422           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
423           break;                                               \
424         case RCC_UART4CLKSOURCE_SYSCLK:                        \
425           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
426           break;                                               \
427         case RCC_UART4CLKSOURCE_LSE:                           \
428           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
429           break;                                               \
430         default:                                               \
431           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
432           break;                                               \
433       }                                                        \
434     }                                                          \
435     else                                                       \
436     {                                                          \
437       (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;          \
438     }                                                          \
439   } while(0U)
440 #elif defined(USART3)
441 #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)        \
442   do {                                                         \
443     if((__HANDLE__)->Instance == USART1)                       \
444     {                                                          \
445       switch(__HAL_RCC_GET_USART1_SOURCE())                    \
446       {                                                        \
447         case RCC_USART1CLKSOURCE_PCLK2:                        \
448           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2;          \
449           break;                                               \
450         case RCC_USART1CLKSOURCE_HSI:                          \
451           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
452           break;                                               \
453         case RCC_USART1CLKSOURCE_SYSCLK:                       \
454           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
455           break;                                               \
456         case RCC_USART1CLKSOURCE_LSE:                          \
457           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
458           break;                                               \
459         default:                                               \
460           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
461           break;                                               \
462       }                                                        \
463     }                                                          \
464     else if((__HANDLE__)->Instance == USART2)                  \
465     {                                                          \
466       switch(__HAL_RCC_GET_USART2_SOURCE())                    \
467       {                                                        \
468         case RCC_USART2CLKSOURCE_PCLK1:                        \
469           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
470           break;                                               \
471         case RCC_USART2CLKSOURCE_HSI:                          \
472           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
473           break;                                               \
474         case RCC_USART2CLKSOURCE_SYSCLK:                       \
475           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
476           break;                                               \
477         case RCC_USART2CLKSOURCE_LSE:                          \
478           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
479           break;                                               \
480         default:                                               \
481           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
482           break;                                               \
483       }                                                        \
484     }                                                          \
485     else if((__HANDLE__)->Instance == USART3)                  \
486     {                                                          \
487       switch(__HAL_RCC_GET_USART3_SOURCE())                    \
488       {                                                        \
489         case RCC_USART3CLKSOURCE_PCLK1:                        \
490           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
491           break;                                               \
492         case RCC_USART3CLKSOURCE_HSI:                          \
493           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
494           break;                                               \
495         case RCC_USART3CLKSOURCE_SYSCLK:                       \
496           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
497           break;                                               \
498         case RCC_USART3CLKSOURCE_LSE:                          \
499           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
500           break;                                               \
501         default:                                               \
502           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
503           break;                                               \
504       }                                                        \
505     }                                                          \
506     else                                                       \
507     {                                                          \
508       (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;          \
509     }                                                          \
510   } while(0U)
511 #else
512 #define IRDA_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__)        \
513   do {                                                         \
514     if((__HANDLE__)->Instance == USART1)                       \
515     {                                                          \
516       switch(__HAL_RCC_GET_USART1_SOURCE())                    \
517       {                                                        \
518         case RCC_USART1CLKSOURCE_PCLK2:                        \
519           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK2;          \
520           break;                                               \
521         case RCC_USART1CLKSOURCE_HSI:                          \
522           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
523           break;                                               \
524         case RCC_USART1CLKSOURCE_SYSCLK:                       \
525           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
526           break;                                               \
527         case RCC_USART1CLKSOURCE_LSE:                          \
528           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
529           break;                                               \
530         default:                                               \
531           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
532           break;                                               \
533       }                                                        \
534     }                                                          \
535     else if((__HANDLE__)->Instance == USART2)                  \
536     {                                                          \
537       switch(__HAL_RCC_GET_USART2_SOURCE())                    \
538       {                                                        \
539         case RCC_USART2CLKSOURCE_PCLK1:                        \
540           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_PCLK1;          \
541           break;                                               \
542         case RCC_USART2CLKSOURCE_HSI:                          \
543           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_HSI;            \
544           break;                                               \
545         case RCC_USART2CLKSOURCE_SYSCLK:                       \
546           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_SYSCLK;         \
547           break;                                               \
548         case RCC_USART2CLKSOURCE_LSE:                          \
549           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_LSE;            \
550           break;                                               \
551         default:                                               \
552           (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;      \
553           break;                                               \
554       }                                                        \
555     }                                                          \
556     else                                                       \
557     {                                                          \
558       (__CLOCKSOURCE__) = IRDA_CLOCKSOURCE_UNDEFINED;          \
559     }                                                          \
560   } while(0U)
561 #endif /* UART5 && !USART3 */
562 
563 /** @brief  Compute the mask to apply to retrieve the received data
564   *         according to the word length and to the parity bits activation.
565   * @param  __HANDLE__ specifies the IRDA Handle.
566   * @retval None, the mask to apply to the associated UART RDR register is stored in (__HANDLE__)->Mask field.
567   */
568 #define IRDA_MASK_COMPUTATION(__HANDLE__)                             \
569   do {                                                                \
570     if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_9B)          \
571     {                                                                 \
572       if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \
573       {                                                               \
574         (__HANDLE__)->Mask = 0x01FFU ;                                \
575       }                                                               \
576       else                                                            \
577       {                                                               \
578         (__HANDLE__)->Mask = 0x00FFU ;                                \
579       }                                                               \
580     }                                                                 \
581     else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_8B)     \
582     {                                                                 \
583       if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \
584       {                                                               \
585         (__HANDLE__)->Mask = 0x00FFU ;                                \
586       }                                                               \
587       else                                                            \
588       {                                                               \
589         (__HANDLE__)->Mask = 0x007FU ;                                \
590       }                                                               \
591     }                                                                 \
592     else if ((__HANDLE__)->Init.WordLength == IRDA_WORDLENGTH_7B)     \
593     {                                                                 \
594       if ((__HANDLE__)->Init.Parity == IRDA_PARITY_NONE)              \
595       {                                                               \
596         (__HANDLE__)->Mask = 0x007FU ;                                \
597       }                                                               \
598       else                                                            \
599       {                                                               \
600         (__HANDLE__)->Mask = 0x003FU ;                                \
601       }                                                               \
602     }                                                                 \
603     else                                                              \
604     {                                                                 \
605       (__HANDLE__)->Mask = 0x0000U;                                   \
606     }                                                                 \
607   } while(0U)
608 
609 /** @brief Ensure that IRDA frame length is valid.
610   * @param __LENGTH__ IRDA frame length.
611   * @retval SET (__LENGTH__ is valid) or RESET (__LENGTH__ is invalid)
612   */
613 #define IS_IRDA_WORD_LENGTH(__LENGTH__) (((__LENGTH__) == IRDA_WORDLENGTH_7B) || \
614                                          ((__LENGTH__) == IRDA_WORDLENGTH_8B) || \
615                                          ((__LENGTH__) == IRDA_WORDLENGTH_9B))
616 /**
617   * @}
618   */
619 
620 /* Exported functions --------------------------------------------------------*/
621 
622 /**
623   * @}
624   */
625 
626 /**
627   * @}
628   */
629 
630 #ifdef __cplusplus
631 }
632 #endif
633 
634 #endif /* STM32G4xx_HAL_IRDA_EX_H */
635 
636