libnx v4.9.0
Loading...
Searching...
No Matches
utimer.h
Go to the documentation of this file.
1/**
2 * @file utimer.h
3 * @brief User-mode timer synchronization primitive.
4 * @author plutoo
5 * @copyright libnx Authors
6 */
7#pragma once
8#include "wait.h"
9
10typedef struct UTimer UTimer;
11
12/// Valid types for a user-mode timer.
13typedef enum {
14 TimerType_OneShot, ///< Timers of this kind fire once and then stop automatically.
15 TimerType_Repeating, ///< Timers of this kind fire periodically.
16} TimerType;
17
18/// User-mode timer object.
19struct UTimer {
20 Waitable waitable;
21 TimerType type : 8;
22 bool started : 1;
23 u64 next_tick;
24 u64 interval;
25};
26
27/// Creates a waiter for a user-mode timer.
28static inline Waiter waiterForUTimer(UTimer* t)
29{
30 Waiter wait_obj;
31 wait_obj.type = WaiterType_Waitable;
32 wait_obj.waitable = &t->waitable;
33 return wait_obj;
34}
35
36/**
37 * @brief Creates a user-mode timer.
38 * @param[out] t UTimer object.
39 * @param[in] interval Interval (in nanoseconds).
40 * @param[in] type Type of timer to create (see \ref TimerType).
41 * @note The timer is stopped when it is created. Use \ref utimerStart to start it.
42 * @note It is safe to wait on this timer with several threads simultaneously.
43 * @note If more than one thread is listening on it, at least one thread will get the signal. No other guarantees.
44 * @note For a repeating timer: If the timer triggers twice before you wait on it, you will only get one signal.
45 */
46void utimerCreate(UTimer* t, u64 interval, TimerType type);
47
48/**
49 * @brief Starts the timer.
50 * @param[in] t UTimer object.
51 */
53
54/**
55 * @brief Stops the timer.
56 * @param[in] t UTimer object.
57 */
User-mode timer object.
Definition utimer.h:19
Definition wait.h:21
Waiter structure, representing any generic waitable synchronization object; both kernel-mode and user...
Definition wait.h:36
uint64_t u64
64-bit unsigned integer.
Definition types.h:22
void utimerStart(UTimer *t)
Starts the timer.
void utimerCreate(UTimer *t, u64 interval, TimerType type)
Creates a user-mode timer.
static Waiter waiterForUTimer(UTimer *t)
Creates a waiter for a user-mode timer.
Definition utimer.h:28
void utimerStop(UTimer *t)
Stops the timer.
TimerType
Valid types for a user-mode timer.
Definition utimer.h:13
@ TimerType_OneShot
Timers of this kind fire once and then stop automatically.
Definition utimer.h:14
@ TimerType_Repeating
Timers of this kind fire periodically.
Definition utimer.h:15
User mode synchronization primitive waiting operations.