4 // Fraunhofer Institute for Open Communication Systems (FOKUS)
6 // The contents of this file are subject to the Fraunhofer FOKUS Public License
7 // Version 1.0 (the "License"); you may not use this file except in compliance
8 // with the License. You may obtain a copy of the License at
9 // http://senf.berlios.de/license.html
11 // The Fraunhofer FOKUS Public License Version 1.0 is based on,
12 // but modifies the Mozilla Public License Version 1.1.
13 // See the full license text for the amendments.
15 // Software distributed under the License is distributed on an "AS IS" basis,
16 // WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
17 // for the specific language governing rights and limitations under the License.
19 // The Original Code is Fraunhofer FOKUS code.
21 // The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V.
22 // (registered association), Hansastraße 27 c, 80686 Munich, Germany.
23 // All Rights Reserved.
26 // Stefan Bund <g0dil@berlios.de>
29 \brief IntervalTimer public header */
31 #ifndef HH_SENF_PPI_IntervalTimer_
32 #define HH_SENF_PPI_IntervalTimer_ 1
35 #include <senf/Scheduler/ClockService.hh>
36 #include <senf/Scheduler/TimerEvent.hh>
39 //#include "IntervalTimer.mpp"
40 //-/////////////////////////////////////////////////////////////////////////////////////////////////
45 /** \brief IntervalTimer event information
47 Information passed to the IntervalTimer event handler
49 struct IntervalTimerEventInfo
51 ClockService::clock_type expected; ///< Scheduled event time
52 ClockService::clock_type intervalStart; ///< Start of the current time interval
53 unsigned number; ///< Number of the current event within the interval
56 /** \brief High precision regularly signaled event.
58 An IntervalTimer signals an event \a eventsPerInterval times each \a interval
59 nanoseconds. The event counter and timer are reset, whenever the event is disabled.
61 \see IntervalTimerEventInfo
66 : public EventImplementation<IntervalTimerEventInfo>
69 //-////////////////////////////////////////////////////////////////////////
70 ///\name Structors and default members
73 explicit IntervalTimer(ClockService::clock_type interval,
74 unsigned eventsPerInterval=1);
78 //-////////////////////////////////////////////////////////////////////////
80 void interval(ClockService::clock_type interval, unsigned eventsPerInterval=1);
81 std::pair<ClockService::clock_type, unsigned> interval() const;
86 virtual void v_enable();
87 virtual void v_disable();
92 ClockService::clock_type interval_;
93 unsigned eventsPerInterval_;
94 IntervalTimerEventInfo info_;
95 scheduler::TimerEvent timer_;
100 //-/////////////////////////////////////////////////////////////////////////////////////////////////
101 #include "IntervalTimer.cci"
102 //#include "IntervalTimer.ct"
103 //#include "IntervalTimer.cti"
110 // comment-column: 40
111 // c-file-style: "senf"
112 // indent-tabs-mode: nil
113 // ispell-local-dictionary: "american"
114 // compile-command: "scons -u test"