18 #ifndef __igstkPulseGenerator_h
19 #define __igstkPulseGenerator_h
62 void RequestSetFrequency(
double frequency );
81 static void Sleep(
unsigned int milliseconds );
92 virtual void PrintSelf( std::ostream& os, itk::Indent indent )
const;
100 double m_FrequencyToBeSet;
104 igstkDeclareInputMacro( ValidFrequency );
105 igstkDeclareInputMacro( InvalidLowFrequency );
106 igstkDeclareInputMacro( InvalidHighFrequency );
107 igstkDeclareInputMacro( Stop );
108 igstkDeclareInputMacro( Start );
109 igstkDeclareInputMacro( Pulse );
110 igstkDeclareInputMacro( EventReturn );
113 igstkDeclareStateMacro( Initial );
114 igstkDeclareStateMacro( Stopped );
115 igstkDeclareStateMacro( Pulsing );
116 igstkDeclareStateMacro( WaitingEventReturn );
119 void SetFrequencyProcessing();
122 void ReportErrorConditionProcessing();
127 void ReportMissedPulseProcessing();
131 static double m_MaximumFrequency;
134 static void CallbackTimerGlobal(
void * );
137 void CallbackTimer();
141 void SetTimerProcessing();
144 void EmitPulseProcessing();
147 void StopPulsesProcessing();
165 typedef void (*TimeoutHandler)(
void*);
167 static void AddTimeout(
double time, TimeoutHandler cb,
void* data);
169 static void RepeatTimeout(
double time, TimeoutHandler cb,
void *argp);
171 static void RemoveTimeout( TimeoutHandler cb,
void *argp);
173 static void ElapseTimeouts();
175 static void InvokeTimeoutActions();
178 static double m_PreviousClock;
180 static Timeout * m_FirstTimeout;
182 static Timeout * m_FreeTimeout;
184 static unsigned int m_FreeTimeoutCount;
186 static unsigned int m_NumberOfPulseGenerators;
188 mutable itk::SimpleFastMutexLock m_NumberOfPulseGeneratorsLock;
190 static char m_ResetClock;
192 static double m_MissedTimeoutBy;
198 #endif //__igstk_PulseGenerator_h_