/************************************************************************************************/
/**
* @file               std_irtim.h
* @author             MCU Ecosystem Development Team
* @brief              IRTIM STD库驱动头文件。
*                     提供IRTIM相关的STD库操作函数声明、数据类型以及常量的定义。                         
*
*
**************************************************************************************************
* @attention
* Copyright (c) CEC Huada Electronic Design Co.,Ltd. All rights reserved.
*
**************************************************************************************************
*/

/* 避免头文件重复引用 */
#ifndef STD_IRTIM_H
#define STD_IRTIM_H

/************************************************************************************************/
/** 
* @addtogroup STD_Driver
* @{
*/

/**
* @defgroup IRTIM IRTIM
* @brief 红外控制模块的STD库驱动
* @{
*/
/************************************************************************************************/

#ifdef __cplusplus
 extern "C" {
#endif

/*------------------------------------------includes--------------------------------------------*/
#include "std_common.h"

/*--------------------------------------------define--------------------------------------------*/
/************************************************************************************************/
/**
* @defgroup IRTIM_Constants  IRTIM Constants
* @brief    IRTIM常量定义及宏定义
* @{
*
*/
/************************************************************************************************/
/* IRTIM 载波信号源选择  */    
#define IRTIM_SIGNAL_CARRIER_TIM1_OC1                      IRTIM_CR_IR_CARSEL_TIM1_OC1             /**< 载波信号源于TIM1_OC1  */
#define IRTIM_SIGNAL_CARRIER_TIM3_OC1                      IRTIM_CR_IR_CARSEL_TIM3_OC1             /**< 载波信号源于TIM3_OC1  */

/* IRTIM 调制信号源选择  */    
#define IRTIM_SIGNAL_SOURCE_TIM3_OC1                       IRTIM_CR_IR_MODE_TIM3_OC1                /**< 调制信号源于TIM3_OC1  */
#define IRTIM_SIGNAL_SOURCE_UART1_TX                       IRTIM_CR_IR_MODE_UART1_TX                /**< 调制信号源于UART1_TX  */
#define IRTIM_SIGNAL_SOURCE_UART2_TX                       IRTIM_CR_IR_MODE_UART2_TX                /**< 调制信号源于UART2_TX  */

/* IRTIM 输出信号极性选择 */
#define IRTIM_POLARITY_DIRECT                              (0x00000000U)                            /**< IRTIM 输出信号未反相  */
#define IRTIM_POLARITY_INVERSE                             IRTIM_CR_IR_POL                          /**< IRTIM 输出信号反相    */

/** 
* @} 
*/

/*-------------------------------------------functions------------------------------------------*/

/************************************************************************************************/
/**
* @defgroup IRTIM_External_Functions IRTIM External Functions
* @brief    IRTIM对外函数
* @{
*
*/
/************************************************************************************************/
/** 
* @brief  配置IRTIM载波信号源
* @param  ir_carrier 载波信号源选择
*             @arg IRTIM_SIGNAL_CARRIER_TIM1_OC1： 载波信号源为TIM1的OC1
*             @arg IRTIM_SIGNAL_CARRIER_TIM3_OC1： 载波信号源为TIM3的OC1
* @retval 无
*/
__STATIC_INLINE void std_irtim_set_ir_signal_carrier(uint32_t ir_carrier)
{
    MODIFY_REG(IRTIM->CR, IRTIM_CR_IR_CARSEL, ir_carrier);
}

/**
* @brief  获取IRTIM载波信号源
* @retval uint32_t 载波信号源
*             @arg IRTIM_SIGNAL_CARRIER_TIM1_OC1： 载波信号源为TIM1的OC1
*             @arg IRTIM_SIGNAL_CARRIER_TIM3_OC1： 载波信号源为TIM3的OC1
*/
__STATIC_INLINE uint32_t std_irtim_get_ir_signal_carrier(void)
{
    return(IRTIM->CR & IRTIM_CR_IR_CARSEL);
}

/** 
* @brief  配置IRTIM调制信号源
* @param  ir_source 调制信号源选择
*             @arg IRTIM_SIGNAL_SOURCE_TIM3_OC1： 调制信号源为TIM3的OC1
*             @arg IRTIM_SIGNAL_SOURCE_UART1_TX： 调制信号源为UART1
*             @arg IRTIM_SIGNAL_SOURCE_UART2_TX： 调制信号源为UART2
* @retval 无
*/
__STATIC_INLINE void std_irtim_set_ir_signal_source(uint32_t ir_source)
{
    MODIFY_REG(IRTIM->CR, IRTIM_CR_IR_MODE, ir_source);
}

/**
* @brief  获取IRTIM调制信号源
* @retval uint32_t 调制信号源
*             @arg IRTIM_SIGNAL_SOURCE_TIM3_OC1： 调制信号源为TIM3的OC1
*             @arg IRTIM_SIGNAL_SOURCE_UART1_TX： 调制信号源为UART1
*             @arg IRTIM_SIGNAL_SOURCE_UART2_TX： 调制信号源为UART2
*/
__STATIC_INLINE uint32_t std_irtim_get_ir_signal_source(void)
{
    return(IRTIM->CR & IRTIM_CR_IR_MODE);
}

/**
* @brief  IR_OUT输出信号极性选择
* @param  ir_polarity 输出信号极性
*             @arg IRTIM_POLARITY_DIRECT:  输出信号未反相
*             @arg IRTIM_POLARITY_INVERSE: 输出信号反相
* @retval 无
*/
__STATIC_INLINE void std_irtim_set_ir_polarity(uint32_t ir_polarity)
{
    MODIFY_REG(IRTIM->CR, IRTIM_CR_IR_POL, ir_polarity);
}

/**
* @brief  获取IR_OUT输出信号极性状态
* @retval uint32_t 输出信号极性
*             @arg IRTIM_POLARITY_DIRECT:  输出信号未反相
*             @arg IRTIM_POLARITY_INVERSE: 输出信号反相
*/
__STATIC_INLINE uint32_t std_irtim_get_ir_polarity(void)
{
    return(IRTIM->CR & IRTIM_CR_IR_POL);
}


/**
* @}
*/

#ifdef __cplusplus
}
#endif

/**
* @}
*/

/**
* @}
*/

#endif /* STD_IRTIM_H */
