MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / rt_ktime_hrtimer_control

Function rt_ktime_hrtimer_control

components/drivers/ktime/src/hrtimer.c:246–313  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

244}
245
246rt_err_t rt_ktime_hrtimer_control(rt_ktime_hrtimer_t timer, int cmd, void *arg)
247{
248 rt_base_t level;
249
250 /* parameter check */
251 RT_ASSERT(timer != RT_NULL);
252
253 level = rt_spin_lock_irqsave(&_spinlock);
254 switch (cmd)
255 {
256
257 case RT_TIMER_CTRL_GET_TIME:
258 *(unsigned long *)arg = timer->delay_cnt;
259 break;
260
261 case RT_TIMER_CTRL_SET_TIME:
262 RT_ASSERT((*(unsigned long *)arg) < (_HRTIMER_MAX_CNT / 2));
263 timer->delay_cnt = *(unsigned long *)arg;
264 timer->timeout_cnt = *(unsigned long *)arg + rt_ktime_cputimer_getcnt();
265 break;
266
267 case RT_TIMER_CTRL_SET_ONESHOT:
268 timer->flag &= ~RT_TIMER_FLAG_PERIODIC;
269 break;
270
271 case RT_TIMER_CTRL_SET_PERIODIC:
272 timer->flag |= RT_TIMER_FLAG_PERIODIC;
273 break;
274
275 case RT_TIMER_CTRL_GET_STATE:
276 if (timer->flag & RT_TIMER_FLAG_ACTIVATED)
277 {
278 /*timer is start and run*/
279 *(rt_uint32_t *)arg = RT_TIMER_FLAG_ACTIVATED;
280 }
281 else
282 {
283 /*timer is stop*/
284 *(rt_uint32_t *)arg = RT_TIMER_FLAG_DEACTIVATED;
285 }
286 break;
287
288 case RT_TIMER_CTRL_GET_REMAIN_TIME:
289 *(unsigned long *)arg = timer->timeout_cnt;
290 break;
291 case RT_TIMER_CTRL_GET_FUNC:
292 arg = (void *)timer->timeout_func;
293 break;
294
295 case RT_TIMER_CTRL_SET_FUNC:
296 timer->timeout_func = (void (*)(void *))arg;
297 break;
298
299 case RT_TIMER_CTRL_GET_PARM:
300 *(void **)arg = timer->parameter;
301 break;
302
303 case RT_TIMER_CTRL_SET_PARM:

Callers 2

timer_gettimeFunction · 0.85
timer_settimeFunction · 0.85

Calls 3

rt_ktime_cputimer_getcntFunction · 0.70
rt_spin_lock_irqsaveFunction · 0.50

Tested by

no test coverage detected