#ifndef ITTIMER_PAL_ADP_H__
#define ITTIMER_PAL_ADP_H__

#include "platmacro.h"
#include <stdint.h>

typedef void (*TimerIf_Callback)(Std_Base_Type timerId, void* para);

/*-----------------------------------------------------------------------------------------
 Discription:  初始化定时器接口
 Param:
 Return:       Std_Ret_Ok:成功
               Std_Ret_Err:失败
 Author:       DFS
 Create:       2018-8-31
 Modify:
*-----------------------------------------------------------------------------------------*/
Std_Ret_Type TimerIf_Init(void);

/*-----------------------------------------------------------------------------------------
 Discription:  初始化一个单次超时
               单次超时后自动停止
 Param:        @param1:超时时间(us)
               @param2:超时回调函数
               @param3:携带参数
 Return:       >=0 返回当前的timerObjId
               <0  失败
 Author:       DFS
 Create:       2018-8-31
 Modify:
*-----------------------------------------------------------------------------------------*/
Std_Base_Type TimerIf_CreateOneRunTimer(Std_Base_Type timeout,TimerIf_Callback pfTimerCallback, void* withParam);

/*-----------------------------------------------------------------------------------------
 Discription:  初始化一个定时超时循环定时器
               系统使用的为硬件定时器的通道，因此数量有限，每次不再需要时，
               请立即停止，方便其他人使用。如果停止后则需要重新申请。
 Param:        @param1:超时时间(us)
               @param2:超时回调函数
               @param3:携带参数
 Return:       >=0 返回当前的timerObjId
               <0  失败
 Author:       DFS
 Create:       2018-8-31
 Modify:
*-----------------------------------------------------------------------------------------*/
Std_Base_Type TimerIf_CreateLoopTimer(Std_Base_Type timeout,TimerIf_Callback pfTimerCallback, void* withParam);

/*-----------------------------------------------------------------------------------------
 Discription:  重新启动计数
 Param:        @param1:timeObjId
 Return:       无
 Author:       JHC
 Create:       2018-8-31
 Modify:
               DFS 2018-8-31 重构
*-----------------------------------------------------------------------------------------*/
void TimerIf_ResetCounter(Std_Base_Type handleId);

/*-----------------------------------------------------------------------------------------
 Discription:  释放一个定时硬件定时器
               当一个循环的定时器想要停止时调用该接口停止；
               单次触发的定时器会自动停止
 Param:        @param1:timeObjId
 Return:       无
 Author:       DFS
 Create:       2018-8-31
 Modify:
*-----------------------------------------------------------------------------------------*/
void TimerIf_FreeOneTimer(Std_Base_Type handleId);

/*-----------------------------------------------------------------------------------------
 Discription:  暂停一个定时硬件定时器
 Param:        @param1:timeObjId
 Return:       无
 Author:       DFS
 Create:       2018-8-31
 Modify:
*-----------------------------------------------------------------------------------------*/
void TimerIf_PauseOneTimer(Std_Base_Type handleId);

/**@brief       设置定时器中断优先级
 * @param[in]   timerObjId 定时器ID
 * @param[in]   priority   中断抢占优先级       
 * @return      void
 * @retval      void
 * @par         修改日志:
 * Date         Author      Description           \n
 * 2021-11-19   zwq         创建初始版本    \n
 */
void TimerIf_SetIrqPriority(uint32_t timerObjId, int32_t priority);


#endif
