/** * @file levent.h * @brief Light event synchronization primitive [4.0.0+] * @author fincs * @copyright libnx Authors */ #pragma once #include "../types.h" #include "../result.h" #include "svc.h" /// User-mode light event structure. typedef struct LEvent { u32 counter; bool autoclear; } LEvent; /** * @brief Initializes a user-mode light event. * @param[out] le Pointer to \ref LEvent structure. * @param[in] signaled Whether the event starts off in signaled state. * @param[in] autoclear Autoclear flag. */ NX_CONSTEXPR void leventInit(LEvent* le, bool signaled, bool autoclear) { le->counter = signaled ? 2 : 0; le->autoclear = autoclear; } /** * @brief Waits on a user-mode light event. * @param[in] le Pointer to \ref LEvent structure. * @param[in] timeout_ns Timeout in nanoseconds (pass UINT64_MAX to wait indefinitely). * @return true if wait succeeded, false if wait timed out. */ bool leventWait(LEvent* le, u64 timeout_ns); /** * @brief Polls a user-mode light event. * @param[in] le Pointer to \ref LEvent structure. * @return true if event is signaled, false otherwise. */ bool leventTryWait(LEvent* le); /** * @brief Signals a user-mode light event. * @param[in] le Pointer to \ref LEvent structure. */ void leventSignal(LEvent* le); /** * @brief Clears a user-mode light event. * @param[in] le Pointer to \ref LEvent structure. */ void leventClear(LEvent* le);