/* * \brief Timer session interface * \author Norman Feske * \author Markus Partheymueller * \date 2006-08-15 */ /* * Copyright (C) 2006-2013 Genode Labs GmbH * Copyright (C) 2012 Intel Corporation * * This file is part of the Genode OS framework, which is distributed * under the terms of the GNU General Public License version 2. */ #ifndef _INCLUDE__TIMER_SESSION__TIMER_SESSION_H_ #define _INCLUDE__TIMER_SESSION__TIMER_SESSION_H_ #include #include namespace Timer { struct Session; } struct Timer::Session : Genode::Session { typedef Genode::Signal_context_capability Signal_context_capability; static const char *service_name() { return "Timer"; } virtual ~Session() { } /** * Program single timeout (relative from now in microseconds) */ virtual void trigger_once(unsigned us) = 0; /** * Program periodic timeout (in microseconds) * * The first period will be triggered after 'us' at the latest, * but it might be triggered earlier as well. */ virtual void trigger_periodic(unsigned us) = 0; /** * Register timeout signal handler */ virtual void sigh(Genode::Signal_context_capability sigh) = 0; /** * Return number of elapsed milliseconds since session creation */ virtual unsigned long elapsed_ms() const = 0; /** * Client-side convenience method for sleeping the specified number * of milliseconds */ virtual void msleep(unsigned ms) = 0; /** * Client-side convenience method for sleeping the specified number * of microseconds */ virtual void usleep(unsigned us) = 0; /********************* ** RPC declaration ** *********************/ GENODE_RPC(Rpc_trigger_once, void, trigger_once, unsigned); GENODE_RPC(Rpc_trigger_periodic, void, trigger_periodic, unsigned); GENODE_RPC(Rpc_sigh, void, sigh, Genode::Signal_context_capability); GENODE_RPC(Rpc_elapsed_ms, unsigned long, elapsed_ms); GENODE_RPC_INTERFACE(Rpc_trigger_once, Rpc_trigger_periodic, Rpc_sigh, Rpc_elapsed_ms); }; #endif /* _INCLUDE__TIMER_SESSION__TIMER_SESSION_H_ */