1 /** 2 * @file hi_timer.h 3 * 4 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 /** 19 * @defgroup iot_systimer System Timer 20 * @ingroup osa 21 */ 22 #ifndef __INTERFACE_ROM_HI_TIMER_H__ 23 #define __INTERFACE_ROM_HI_TIMER_H__ 24 #include <hi_types_base.h> 25 26 27 /** 28 * @ingroup iot_systimer 29 * 30 * Specifies the type of the timer to be created.CNcomment:用于设置所创建的定时器类型。CNend 31 */ 32 typedef enum { 33 HI_TIMER_TYPE_ONCE, /**< Single-period timer.CNcomment:表示单次定时器 CNend */ 34 HI_TIMER_TYPE_PERIOD, /**< Periodic timer.CNcomment:表示周期定时器 CNend */ 35 HI_TIMER_TYPE_MAX /**< Maximum value, which cannot be used.CNcomment:最大值,不可使用 CNend */ 36 } hi_timer_type; 37 38 /** 39 * @ingroup iot_systimer 40 * @brief Defines the type of the timer callback function.CNcomment:定义定时器回调函数的类型。CNend 41 * 42 * @par 描述: 43 * Defines the type of the timer callback function.CNcomment:定义定时器回调函数的类型。CNend 44 * 45 * @attention None 46 * @param data [IN] type #hi_u32,callback input parameter.CNcomment:回调入参。CNend 47 * 48 * @retval None 49 * @par 依赖: 50 * @li hi_timer.h:Describes the timer APIs.CNcomment:文件用于描述定时器相关接口。CNend 51 * @see hi_timer_start | hi_timer_stop 52 */ 53 typedef hi_void (*hi_timer_callback_f)(hi_u32 data); 54 55 /** 56 * @ingroup iot_systimer 57 * @brief Creates the system timer.CNcomment:获取定时器句柄。CNend 58 * 59 * @par 描述: 60 * Creates the system timer.CNcomment:获取高精定时器句柄。CNend 61 * 62 * @attention None 63 * @param timer_handle [OUT] type #hi_u32*,handle.CNcomment:获取到的句柄。CNend 64 * 65 * @retval #0 Success. 66 * @retval #Other Failure. For details, see hi_errno.h. 67 * 68 * @par 依赖: 69 * @li hi_timer.h:Describes the timer APIs.CNcomment:文件用于描述定时器相关接口。CNend 70 * @see hi_timer_delete。 71 */ 72 hi_u32 hi_timer_create(hi_u32 *timer_handle); 73 74 /** 75 * @ingroup iot_systimer 76 * @brief Starts the system timer.CNcomment:启动系统定时器。CNend 77 * 78 * @par 描述: 79 * This API is used in the following scenarios:CNcomment:本API接口使用分为以下几个场景:CNend 80 * @li If no timer is created, create and start a timer. 81 CNcomment:如果未启动定时器,则直接启动。CNend 82 * @li If the timer expires and is called again, start the timer directly. 83 CNcomment:如果该定时器到期后调用,则直接启动定时器。CNend 84 * @li If the timer does not expire, stop and restart the timer. 85 CNcomment:如果定时器没有到期,则停止该定时器,重新启动定时器。CNend 86 * 87 * @attention This timer callback function is executed in the interrupt context. Therefore, the callback function should 88 * be as simple as possible and the functions such as sleep and wait semaphores that trigger scheduling 89 * cannot be used.CNcomment:本定时器回调函数执行于中断上下文,回调函数尽量简单,不能使用睡眠、 90 等待信号量等引起调度的函数。CNend 91 * 92 * @param timer_handle [IN] type #hi_u32,handle.CNcomment:句柄。CNend 93 * @param type [IN] type #hi_timer_type,timer type.CNcomment:定时器类型。CNend 94 * @param expire [IN] type #hi_u32,timeout period of the timer (unit: ms). If this parameter is set to 0, 95 * the default value is 10 ms.CNcomment:定时器超时时间(单位:ms)。配置为0时,默认为10ms。CNend 96 * @param timer_func [IN] type #timer_proc_func,timer callback function.CNcomment:定时器回调函数。CNend 97 * @param data [IN] type #hi_u32,callback input parameter.CNcomment:回调函数传参。CNend 98 * 99 * @retval #0 Success. 100 * @retval #Other Failure. For details, see hi_errno.h. 101 * 102 * @par 依赖: 103 * @li hi_timer.h:Describes the timer APIs.CNcomment:文件用于描述定时器相关接口。CNend 104 * @see hi_timer_stop 105 */ 106 hi_u32 hi_timer_start(hi_u32 timer_handle, hi_timer_type type, hi_u32 expire, 107 hi_timer_callback_f timer_func, hi_u32 data); 108 109 /** 110 * @ingroup iot_systimer 111 * @brief Stops the system timer.CNcomment:停止系统定时器。CNend 112 * 113 * @par 描述: 114 * Stops the system timer.CNcomment:停止系统定时器。CNend 115 * 116 * @attention This API only stops the timer and does not delete the timer.CNcomment:本接口仅停止定时器, 117 并不删除该定时器。CNend 118 * @param timer_handle [IN] type #hi_u32,handle.CNcomment:句柄。CNend 119 * 120 * @retval #0 Success. 121 * @retval #Other Failure. For details, see hi_errno.h. 122 * 123 * @par 依赖: 124 * @li hi_timer.h:Describes the timer APIs.CNcomment:文件用于描述定时器相关接口。CNend 125 * @see hi_timer_start | hi_timer_delete 126 */ 127 hi_u32 hi_timer_stop(hi_u32 timer_handle); 128 129 /** 130 * @ingroup iot_systimer 131 * @brief Deletes the timer.CNcomment:删除定时器。CNend 132 * 133 * @par 描述: 134 * Deletes the timer.CNcomment:删除定时器。CNend 135 * 136 * @attention 137 * @li If the timer does not expire, stop the timer before deleting it. 138 CNcomment:如果定时器未到期,则先停止该定时器再删除。CNend 139 * 140 * @param timer_handle [IN] type #hi_u32,handle.CNcomment:句柄。CNend 141 * 142 * @retval #0 Success. 143 * @retval #Other Failure. For details, see hi_errno.h. 144 * 145 * @par 依赖: 146 * @li hi_timer.h:Describes the timer APIs.CNcomment:文件用于描述定时器相关接口。CNend 147 * @see hi_timer_start | hi_timer_stop 148 */ 149 hi_u32 hi_timer_delete(hi_u32 timer_handle); 150 151 #endif 152