1 /**
2   ******************************************************************************
3   * @file    stm32f1xx_hal_cec.h
4   * @author  MCD Application Team
5   * @brief   Header file of CEC HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2016 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 __STM32F1xx_HAL_CEC_H
21 #define __STM32F1xx_HAL_CEC_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ------------------------------------------------------------------*/
28 #include "stm32f1xx_hal_def.h"
29 
30 #if defined (CEC)
31 
32 /** @addtogroup STM32F1xx_HAL_Driver
33   * @{
34   */
35 
36 /** @addtogroup CEC
37   * @{
38   */
39 
40 /* Exported types ------------------------------------------------------------*/
41 /** @defgroup CEC_Exported_Types CEC Exported Types
42   * @{
43   */
44 
45 /**
46   * @brief CEC Init Structure definition
47   */
48 typedef struct
49 {
50   uint32_t  TimingErrorFree;             /*!< Configures the CEC Bit Timing Error Mode.
51                                               This parameter can be a value of CEC_BitTimingErrorMode */
52 
53   uint32_t  PeriodErrorFree;             /*!< Configures the CEC Bit Period Error Mode.
54                                               This parameter can be a value of CEC_BitPeriodErrorMode */
55 
56   uint16_t  OwnAddress;                  /*!< Own addresses configuration
57                                               This parameter can be a value of @ref CEC_OWN_ADDRESS */
58 
59   uint8_t  *RxBuffer;                    /*!< CEC Rx buffer pointer */
60 } CEC_InitTypeDef;
61 
62 /**
63   * @brief HAL CEC State definition
64   * @note  HAL CEC State value is a combination of 2 different substates: gState and RxState
65            (see @ref CEC_State_Definition).
66   *        - gState contains CEC state information related to global Handle management
67   *          and also information related to Tx operations.
68   *          gState value coding follow below described bitmap :
69   *          b7 (not used)
70   *             x  : Should be set to 0
71   *          b6  Error information
72   *             0  : No Error
73   *             1  : Error
74   *          b5     CEC peripheral initialization status
75   *             0  : Reset (peripheral not initialized)
76   *             1  : Init done (peripheral initialized. HAL CEC Init function already called)
77   *          b4-b3  (not used)
78   *             xx : Should be set to 00
79   *          b2     Intrinsic process state
80   *             0  : Ready
81   *             1  : Busy (peripheral busy with some configuration or internal operations)
82   *          b1     (not used)
83   *             x  : Should be set to 0
84   *          b0     Tx state
85   *             0  : Ready (no Tx operation ongoing)
86   *             1  : Busy (Tx operation ongoing)
87   *        - RxState contains information related to Rx operations.
88   *          RxState value coding follow below described bitmap :
89   *          b7-b6  (not used)
90   *             xx : Should be set to 00
91   *          b5     CEC peripheral initialization status
92   *             0  : Reset (peripheral not initialized)
93   *             1  : Init done (peripheral initialized)
94   *          b4-b2  (not used)
95   *            xxx : Should be set to 000
96   *          b1     Rx state
97   *             0  : Ready (no Rx operation ongoing)
98   *             1  : Busy (Rx operation ongoing)
99   *          b0     (not used)
100   *             x  : Should be set to 0.
101   */
102 typedef enum
103 {
104   HAL_CEC_STATE_RESET             = 0x00U,    /*!< Peripheral is not yet Initialized
105                                                    Value is allowed for gState and RxState             */
106   HAL_CEC_STATE_READY             = 0x20U,    /*!< Peripheral Initialized and ready for use
107                                                    Value is allowed for gState and RxState             */
108   HAL_CEC_STATE_BUSY              = 0x24U,    /*!< an internal process is ongoing
109                                                    Value is allowed for gState only                    */
110   HAL_CEC_STATE_BUSY_RX           = 0x22U,    /*!< Data Reception process is ongoing
111                                                    Value is allowed for RxState only                   */
112   HAL_CEC_STATE_BUSY_TX           = 0x21U,    /*!< Data Transmission process is ongoing
113                                                    Value is allowed for gState only                    */
114   HAL_CEC_STATE_BUSY_RX_TX        = 0x23U,    /*!< an internal process is ongoing
115                                                    Value is allowed for gState only                    */
116   HAL_CEC_STATE_ERROR             = 0x60U     /*!< Error Value is allowed for gState only              */
117 } HAL_CEC_StateTypeDef;
118 
119 /**
120   * @brief  CEC handle Structure definition
121   */
122 typedef struct __CEC_HandleTypeDef
123 {
124   CEC_TypeDef             *Instance;      /*!< CEC registers base address */
125 
126   CEC_InitTypeDef         Init;           /*!< CEC communication parameters */
127 
128   const uint8_t           *pTxBuffPtr;    /*!< Pointer to CEC Tx transfer Buffer */
129 
130   uint16_t                TxXferCount;    /*!< CEC Tx Transfer Counter */
131 
132   uint16_t                RxXferSize;     /*!< CEC Rx Transfer size, 0: header received only */
133 
134   HAL_LockTypeDef         Lock;           /*!< Locking object */
135 
136   HAL_CEC_StateTypeDef    gState;         /*!< CEC state information related to global Handle management
137                                                and also related to Tx operations.
138                                                This parameter can be a value of @ref HAL_CEC_StateTypeDef */
139 
140   HAL_CEC_StateTypeDef    RxState;        /*!< CEC state information related to Rx operations.
141                                                This parameter can be a value of @ref HAL_CEC_StateTypeDef */
142 
143   uint32_t                ErrorCode;      /*!< For errors handling purposes, copy of ISR register
144                                                in case error is reported */
145 
146 #if (USE_HAL_CEC_REGISTER_CALLBACKS == 1)
147   void (* TxCpltCallback)(struct __CEC_HandleTypeDef *hcec); /*!< CEC Tx Transfer completed callback */
148   void (* RxCpltCallback)(struct __CEC_HandleTypeDef *hcec,
149                           uint32_t RxFrameSize);          /*!< CEC Rx Transfer completed callback    */
150   void (* ErrorCallback)(struct __CEC_HandleTypeDef *hcec); /*!< CEC error callback                  */
151 
152   void (* MspInitCallback)(struct __CEC_HandleTypeDef *hcec);               /*!< CEC Msp Init callback              */
153   void (* MspDeInitCallback)(struct __CEC_HandleTypeDef *hcec);             /*!< CEC Msp DeInit callback            */
154 
155 #endif /* (USE_HAL_CEC_REGISTER_CALLBACKS) */
156 } CEC_HandleTypeDef;
157 
158 #if (USE_HAL_CEC_REGISTER_CALLBACKS == 1)
159 /**
160   * @brief  HAL CEC Callback ID enumeration definition
161   */
162 typedef enum
163 {
164   HAL_CEC_TX_CPLT_CB_ID      = 0x00U,    /*!< CEC Tx Transfer completed callback ID  */
165   HAL_CEC_RX_CPLT_CB_ID      = 0x01U,    /*!< CEC Rx Transfer completed callback ID  */
166   HAL_CEC_ERROR_CB_ID        = 0x02U,    /*!< CEC error callback ID                  */
167   HAL_CEC_MSPINIT_CB_ID      = 0x03U,    /*!< CEC Msp Init callback ID               */
168   HAL_CEC_MSPDEINIT_CB_ID    = 0x04U     /*!< CEC Msp DeInit callback ID             */
169 } HAL_CEC_CallbackIDTypeDef;
170 
171 /**
172   * @brief  HAL CEC Callback pointer definition
173   */
174 typedef  void (*pCEC_CallbackTypeDef)(CEC_HandleTypeDef *hcec);  /*!< pointer to an CEC callback function */
175 typedef  void (*pCEC_RxCallbackTypeDef)(CEC_HandleTypeDef *hcec,
176                                         uint32_t RxFrameSize);  /*!< pointer to an Rx Transfer completed
177                                                                      callback function */
178 #endif /* USE_HAL_CEC_REGISTER_CALLBACKS */
179 /**
180   * @}
181   */
182 
183 /* Exported constants --------------------------------------------------------*/
184 /** @defgroup CEC_Exported_Constants CEC Exported Constants
185   * @{
186   */
187 
188 /** @defgroup CEC_Error_Code CEC Error Code
189   * @{
190   */
191 #define HAL_CEC_ERROR_NONE   0x00000000U    /*!< no error */
192 #define HAL_CEC_ERROR_BTE    CEC_ESR_BTE    /*!< Bit Timing Error */
193 #define HAL_CEC_ERROR_BPE    CEC_ESR_BPE    /*!< Bit Period Error */
194 #define HAL_CEC_ERROR_RBTFE  CEC_ESR_RBTFE  /*!< Rx Block Transfer Finished Error */
195 #define HAL_CEC_ERROR_SBE    CEC_ESR_SBE    /*!< Start Bit Error */
196 #define HAL_CEC_ERROR_ACKE   CEC_ESR_ACKE   /*!< Block Acknowledge Error */
197 #define HAL_CEC_ERROR_LINE   CEC_ESR_LINE   /*!< Line Error */
198 #define HAL_CEC_ERROR_TBTFE  CEC_ESR_TBTFE  /*!< Tx Block Transfer Finished Error */
199 #if (USE_HAL_CEC_REGISTER_CALLBACKS == 1)
200 #define  HAL_CEC_ERROR_INVALID_CALLBACK ((uint32_t)0x00000080U) /*!< Invalid Callback Error  */
201 #endif /* USE_HAL_CEC_REGISTER_CALLBACKS */
202 /**
203   * @}
204   */
205 
206 /** @defgroup CEC_BitTimingErrorMode Bit Timing Error Mode
207   * @{
208   */
209 #define CEC_BIT_TIMING_ERROR_MODE_STANDARD  0x00000000U      /*!< Bit timing error Standard Mode */
210 #define CEC_BIT_TIMING_ERROR_MODE_ERRORFREE CEC_CFGR_BTEM    /*!< Bit timing error Free Mode */
211 /**
212   * @}
213   */
214 
215 /** @defgroup CEC_BitPeriodErrorMode Bit Period Error Mode
216   * @{
217   */
218 #define CEC_BIT_PERIOD_ERROR_MODE_STANDARD 0x00000000U      /*!< Bit period error Standard Mode */
219 #define CEC_BIT_PERIOD_ERROR_MODE_FLEXIBLE CEC_CFGR_BPEM    /*!< Bit period error Flexible Mode */
220 /**
221   * @}
222   */
223 
224 /** @defgroup CEC_Initiator_Position   CEC Initiator logical address position in message header
225   * @{
226   */
227 #define CEC_INITIATOR_LSB_POS                  4U
228 /**
229   * @}
230   */
231 
232 /** @defgroup CEC_OWN_ADDRESS   CEC Own Address
233   * @{
234   */
235 #define CEC_OWN_ADDRESS_NONE            CEC_OWN_ADDRESS_0    /* Reset value */
236 #define CEC_OWN_ADDRESS_0              ((uint16_t)0x0000U)   /* Logical Address 0 */
237 #define CEC_OWN_ADDRESS_1              ((uint16_t)0x0001U)   /* Logical Address 1 */
238 #define CEC_OWN_ADDRESS_2              ((uint16_t)0x0002U)   /* Logical Address 2 */
239 #define CEC_OWN_ADDRESS_3              ((uint16_t)0x0003U)   /* Logical Address 3 */
240 #define CEC_OWN_ADDRESS_4              ((uint16_t)0x0004U)   /* Logical Address 4 */
241 #define CEC_OWN_ADDRESS_5              ((uint16_t)0x0005U)   /* Logical Address 5 */
242 #define CEC_OWN_ADDRESS_6              ((uint16_t)0x0006U)   /* Logical Address 6 */
243 #define CEC_OWN_ADDRESS_7              ((uint16_t)0x0007U)   /* Logical Address 7 */
244 #define CEC_OWN_ADDRESS_8              ((uint16_t)0x0008U)   /* Logical Address 8 */
245 #define CEC_OWN_ADDRESS_9              ((uint16_t)0x0009U)   /* Logical Address 9 */
246 #define CEC_OWN_ADDRESS_10             ((uint16_t)0x000AU)   /* Logical Address 10 */
247 #define CEC_OWN_ADDRESS_11             ((uint16_t)0x000BU)   /* Logical Address 11 */
248 #define CEC_OWN_ADDRESS_12             ((uint16_t)0x000CU)   /* Logical Address 12 */
249 #define CEC_OWN_ADDRESS_13             ((uint16_t)0x000DU)   /* Logical Address 13 */
250 #define CEC_OWN_ADDRESS_14             ((uint16_t)0x000EU)   /* Logical Address 14 */
251 #define CEC_OWN_ADDRESS_15             ((uint16_t)0x000FU)   /* Logical Address 15 */
252 /**
253   * @}
254   */
255 
256 /** @defgroup CEC_Interrupts_Definitions  Interrupts definition
257   * @{
258   */
259 #define CEC_IT_IE CEC_CFGR_IE
260 /**
261   * @}
262   */
263 
264 /** @defgroup CEC_Flags_Definitions  Flags definition
265   * @{
266   */
267 #define CEC_FLAG_TSOM  CEC_CSR_TSOM
268 #define CEC_FLAG_TEOM  CEC_CSR_TEOM
269 #define CEC_FLAG_TERR  CEC_CSR_TERR
270 #define CEC_FLAG_TBTRF CEC_CSR_TBTRF
271 #define CEC_FLAG_RSOM  CEC_CSR_RSOM
272 #define CEC_FLAG_REOM  CEC_CSR_REOM
273 #define CEC_FLAG_RERR  CEC_CSR_RERR
274 #define CEC_FLAG_RBTF  CEC_CSR_RBTF
275 /**
276   * @}
277   */
278 
279 /**
280   * @}
281   */
282 
283 /* Exported macros -----------------------------------------------------------*/
284 /** @defgroup CEC_Exported_Macros CEC Exported Macros
285   * @{
286   */
287 
288 /** @brief  Reset CEC handle gstate & RxState
289   * @param  __HANDLE__ CEC handle.
290   * @retval None
291   */
292 #if (USE_HAL_CEC_REGISTER_CALLBACKS == 1)
293 #define __HAL_CEC_RESET_HANDLE_STATE(__HANDLE__) do{                                                   \
294                                                        (__HANDLE__)->gState = HAL_CEC_STATE_RESET;     \
295                                                        (__HANDLE__)->RxState = HAL_CEC_STATE_RESET;    \
296                                                        (__HANDLE__)->MspInitCallback = NULL;           \
297                                                        (__HANDLE__)->MspDeInitCallback = NULL;         \
298                                                      } while(0)
299 #else
300 #define __HAL_CEC_RESET_HANDLE_STATE(__HANDLE__) do{                                                   \
301                                                        (__HANDLE__)->gState = HAL_CEC_STATE_RESET;     \
302                                                        (__HANDLE__)->RxState = HAL_CEC_STATE_RESET;    \
303                                                      } while(0)
304 #endif /* USE_HAL_CEC_REGISTER_CALLBACKS */
305 
306 /** @brief  Checks whether or not the specified CEC interrupt flag is set.
307   * @param  __HANDLE__ specifies the CEC Handle.
308   * @param  __FLAG__ specifies the flag to check.
309   *     @arg CEC_FLAG_TERR: Tx Error
310   *     @arg CEC_FLAG_TBTRF:Tx Block Transfer Finished
311   *     @arg CEC_FLAG_RERR: Rx Error
312   *     @arg CEC_FLAG_RBTF: Rx Block Transfer Finished
313   * @retval ITStatus
314   */
315 #define __HAL_CEC_GET_FLAG(__HANDLE__, __FLAG__) READ_BIT((__HANDLE__)->Instance->CSR,(__FLAG__))
316 
317 /** @brief  Clears the CEC's pending flags.
318   * @param  __HANDLE__ specifies the CEC Handle.
319   * @param  __FLAG__ specifies the flag to clear.
320   *   This parameter can be any combination of the following values:
321   *     @arg CEC_CSR_TERR: Tx Error
322   *     @arg CEC_FLAG_TBTRF: Tx Block Transfer Finished
323   *     @arg CEC_CSR_RERR: Rx Error
324   *     @arg CEC_CSR_RBTF: Rx Block Transfer Finished
325   * @retval none
326   */
327 #define __HAL_CEC_CLEAR_FLAG(__HANDLE__, __FLAG__)                                                                   \
328   do {                                                                                       \
329     uint32_t tmp = 0x0U;                                                                     \
330     tmp = (__HANDLE__)->Instance->CSR & 0x00000002U;                                         \
331     (__HANDLE__)->Instance->CSR &= (uint32_t)(((~(uint32_t)(__FLAG__)) & 0xFFFFFFFCU) | tmp);\
332   } while(0U)
333 
334 /** @brief  Enables the specified CEC interrupt.
335   * @param  __HANDLE__ specifies the CEC Handle.
336   * @param  __INTERRUPT__ specifies the CEC interrupt to enable.
337   *          This parameter can be one of the following values:
338   *            @arg CEC_IT_IE         : Interrupt Enable.
339   * @retval none
340   */
341 #define __HAL_CEC_ENABLE_IT(__HANDLE__, __INTERRUPT__) SET_BIT((__HANDLE__)->Instance->CFGR, (__INTERRUPT__))
342 
343 /** @brief  Disables the specified CEC interrupt.
344   * @param  __HANDLE__ specifies the CEC Handle.
345   * @param  __INTERRUPT__ specifies the CEC interrupt to disable.
346   *          This parameter can be one of the following values:
347   *            @arg CEC_IT_IE         : Interrupt Enable
348   * @retval none
349   */
350 #define __HAL_CEC_DISABLE_IT(__HANDLE__, __INTERRUPT__) CLEAR_BIT((__HANDLE__)->Instance->CFGR, (__INTERRUPT__))
351 
352 /** @brief  Checks whether or not the specified CEC interrupt is enabled.
353   * @param  __HANDLE__ specifies the CEC Handle.
354   * @param  __INTERRUPT__ specifies the CEC interrupt to check.
355   *          This parameter can be one of the following values:
356   *            @arg CEC_IT_IE         : Interrupt Enable
357   * @retval FlagStatus
358   */
359 #define __HAL_CEC_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) READ_BIT((__HANDLE__)->Instance->CFGR, (__INTERRUPT__))
360 
361 /** @brief  Enables the CEC device
362   * @param  __HANDLE__ specifies the CEC Handle.
363   * @retval none
364   */
365 #define __HAL_CEC_ENABLE(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CFGR, CEC_CFGR_PE)
366 
367 /** @brief  Disables the CEC device
368   * @param  __HANDLE__ specifies the CEC Handle.
369   * @retval none
370   */
371 #define __HAL_CEC_DISABLE(__HANDLE__) CLEAR_BIT((__HANDLE__)->Instance->CFGR, CEC_CFGR_PE)
372 
373 /** @brief  Set Transmission Start flag
374   * @param  __HANDLE__ specifies the CEC Handle.
375   * @retval none
376   */
377 #define __HAL_CEC_FIRST_BYTE_TX_SET(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CSR, CEC_CSR_TSOM)
378 
379 /** @brief  Set Transmission End flag
380   * @param  __HANDLE__ specifies the CEC Handle.
381   * @retval none
382   */
383 #define __HAL_CEC_LAST_BYTE_TX_SET(__HANDLE__) SET_BIT((__HANDLE__)->Instance->CSR, CEC_CSR_TEOM)
384 
385 /** @brief  Get Transmission Start flag
386   * @param  __HANDLE__ specifies the CEC Handle.
387   * @retval FlagStatus
388   */
389 #define __HAL_CEC_GET_TRANSMISSION_START_FLAG(__HANDLE__) READ_BIT((__HANDLE__)->Instance->CSR, CEC_CSR_TSOM)
390 
391 /** @brief  Get Transmission End flag
392   * @param  __HANDLE__ specifies the CEC Handle.
393   * @retval FlagStatus
394   */
395 #define __HAL_CEC_GET_TRANSMISSION_END_FLAG(__HANDLE__) READ_BIT((__HANDLE__)->Instance->CSR, CEC_CSR_TEOM)
396 
397 /** @brief  Clear OAR register
398   * @param  __HANDLE__ specifies the CEC Handle.
399   * @retval none
400   */
401 #define __HAL_CEC_CLEAR_OAR(__HANDLE__)   CLEAR_BIT((__HANDLE__)->Instance->OAR, CEC_OAR_OA)
402 
403 /** @brief  Set OAR register
404   * @param  __HANDLE__ specifies the CEC Handle.
405   * @param  __ADDRESS__ Own Address value.
406   * @retval none
407   */
408 #define __HAL_CEC_SET_OAR(__HANDLE__,__ADDRESS__) MODIFY_REG((__HANDLE__)->Instance->OAR, CEC_OAR_OA, (__ADDRESS__));
409 
410 /**
411   * @}
412   */
413 
414 /* Exported functions --------------------------------------------------------*/
415 /** @addtogroup CEC_Exported_Functions CEC Exported Functions
416   * @{
417   */
418 
419 /** @addtogroup CEC_Exported_Functions_Group1 Initialization and de-initialization functions
420   *  @brief    Initialization and Configuration functions
421   * @{
422   */
423 /* Initialization and de-initialization functions  ****************************/
424 HAL_StatusTypeDef HAL_CEC_Init(CEC_HandleTypeDef *hcec);
425 HAL_StatusTypeDef HAL_CEC_DeInit(CEC_HandleTypeDef *hcec);
426 HAL_StatusTypeDef HAL_CEC_SetDeviceAddress(CEC_HandleTypeDef *hcec, uint16_t CEC_OwnAddress);
427 void HAL_CEC_MspInit(CEC_HandleTypeDef *hcec);
428 void HAL_CEC_MspDeInit(CEC_HandleTypeDef *hcec);
429 
430 #if (USE_HAL_CEC_REGISTER_CALLBACKS == 1)
431 HAL_StatusTypeDef HAL_CEC_RegisterCallback(CEC_HandleTypeDef *hcec, HAL_CEC_CallbackIDTypeDef CallbackID,
432                                            pCEC_CallbackTypeDef pCallback);
433 HAL_StatusTypeDef HAL_CEC_UnRegisterCallback(CEC_HandleTypeDef *hcec, HAL_CEC_CallbackIDTypeDef CallbackID);
434 
435 HAL_StatusTypeDef HAL_CEC_RegisterRxCpltCallback(CEC_HandleTypeDef *hcec, pCEC_RxCallbackTypeDef pCallback);
436 HAL_StatusTypeDef HAL_CEC_UnRegisterRxCpltCallback(CEC_HandleTypeDef *hcec);
437 #endif /* USE_HAL_CEC_REGISTER_CALLBACKS */
438 /**
439   * @}
440   */
441 
442 /** @addtogroup CEC_Exported_Functions_Group2 Input and Output operation functions
443   *  @brief CEC Transmit/Receive functions
444   * @{
445   */
446 /* I/O operation functions  ***************************************************/
447 HAL_StatusTypeDef HAL_CEC_Transmit_IT(CEC_HandleTypeDef *hcec, uint8_t InitiatorAddress, uint8_t DestinationAddress,
448                                       const uint8_t *pData, uint32_t Size);
449 uint32_t HAL_CEC_GetLastReceivedFrameSize(const CEC_HandleTypeDef *hcec);
450 void HAL_CEC_ChangeRxBuffer(CEC_HandleTypeDef *hcec, uint8_t *Rxbuffer);
451 void HAL_CEC_IRQHandler(CEC_HandleTypeDef *hcec);
452 void HAL_CEC_TxCpltCallback(CEC_HandleTypeDef *hcec);
453 void HAL_CEC_RxCpltCallback(CEC_HandleTypeDef *hcec, uint32_t RxFrameSize);
454 void HAL_CEC_ErrorCallback(CEC_HandleTypeDef *hcec);
455 /**
456   * @}
457   */
458 
459 /** @defgroup CEC_Exported_Functions_Group3 Peripheral Control functions
460   *  @brief   CEC control functions
461   * @{
462   */
463 /* Peripheral State functions  ************************************************/
464 HAL_CEC_StateTypeDef HAL_CEC_GetState(const CEC_HandleTypeDef *hcec);
465 uint32_t HAL_CEC_GetError(const CEC_HandleTypeDef *hcec);
466 /**
467   * @}
468   */
469 
470 /**
471   * @}
472   */
473 
474 /* Private types -------------------------------------------------------------*/
475 /** @defgroup CEC_Private_Types CEC Private Types
476   * @{
477   */
478 
479 /**
480   * @}
481   */
482 
483 /* Private variables ---------------------------------------------------------*/
484 /** @defgroup CEC_Private_Variables CEC Private Variables
485   * @{
486   */
487 
488 /**
489   * @}
490   */
491 
492 /* Private constants ---------------------------------------------------------*/
493 /** @defgroup CEC_Private_Constants CEC Private Constants
494   * @{
495   */
496 
497 /**
498   * @}
499   */
500 
501 /* Private macros ------------------------------------------------------------*/
502 /** @defgroup CEC_Private_Macros CEC Private Macros
503   * @{
504   */
505 #define IS_CEC_BIT_TIMING_ERROR_MODE(MODE) (((MODE) == CEC_BIT_TIMING_ERROR_MODE_STANDARD) || \
506                                             ((MODE) == CEC_BIT_TIMING_ERROR_MODE_ERRORFREE))
507 
508 #define IS_CEC_BIT_PERIOD_ERROR_MODE(MODE) (((MODE) == CEC_BIT_PERIOD_ERROR_MODE_STANDARD) || \
509                                             ((MODE) == CEC_BIT_PERIOD_ERROR_MODE_FLEXIBLE))
510 
511 /** @brief Check CEC message size.
512   *       The message size is the payload size: without counting the header,
513   *       it varies from 0 byte (ping operation, one header only, no payload) to
514   *       15 bytes (1 opcode and up to 14 operands following the header).
515   * @param  __SIZE__ CEC message size.
516   * @retval Test result (TRUE or FALSE).
517   */
518 #define IS_CEC_MSGSIZE(__SIZE__) ((__SIZE__) <= 0x10U)
519 
520 /** @brief Check CEC device Own Address Register (OAR) setting.
521   * @param  __ADDRESS__ CEC own address.
522   * @retval Test result (TRUE or FALSE).
523   */
524 #define IS_CEC_OWN_ADDRESS(__ADDRESS__) ((__ADDRESS__) <= 0x0000000FU)
525 
526 /** @brief Check CEC initiator or destination logical address setting.
527   *        Initiator and destination addresses are coded over 4 bits.
528   * @param  __ADDRESS__ CEC initiator or logical address.
529   * @retval Test result (TRUE or FALSE).
530   */
531 #define IS_CEC_ADDRESS(__ADDRESS__) ((__ADDRESS__) <= 0x0000000FU)
532 /**
533   * @}
534   */
535 /* Private functions ---------------------------------------------------------*/
536 /** @defgroup CEC_Private_Functions CEC Private Functions
537   * @{
538   */
539 
540 /**
541   * @}
542   */
543 
544 /**
545   * @}
546   */
547 
548 /**
549   * @}
550   */
551 
552 #endif /* CEC */
553 
554 #ifdef __cplusplus
555 }
556 #endif
557 
558 #endif /* __STM32F1xx_HAL_CEC_H */
559 
560