18 #ifndef __igstkTracker_h
19 #define __igstkTracker_h
24 #include "itkMutexLock.h"
25 #include "itkConditionVariable.h"
26 #include "itkMultiThreader.h"
206 virtual void PrintSelf( std::ostream& os, itk::Indent indent )
const;
282 void operator=(
const Self&);
288 typedef itk::SimpleMemberCommand< Self > ObserverType;
289 ObserverType::Pointer m_PulseObserver;
296 typedef TrackerToolType::Pointer TrackerToolPointer;
299 bool m_ApplyingReferenceTool;
300 TrackerToolPointer m_ReferenceTool;
307 bool m_ThreadingEnabled;
311 bool m_TrackingThreadStarted;
314 itk::MultiThreader::Pointer m_Threader;
321 itk::ConditionVariable::Pointer m_ConditionNextTransformReceived;
325 itk::SimpleMutexLock m_LockForConditionNextTransformReceived;
328 igstkDeclareStateMacro( Idle );
329 igstkDeclareStateMacro( AttemptingToEstablishCommunication );
330 igstkDeclareStateMacro( AttemptingToCloseCommunication );
331 igstkDeclareStateMacro( CommunicationEstablished );
332 igstkDeclareStateMacro( AttemptingToAttachTrackerTool );
333 igstkDeclareStateMacro( TrackerToolAttached );
334 igstkDeclareStateMacro( AttemptingToTrack );
335 igstkDeclareStateMacro( Tracking );
336 igstkDeclareStateMacro( AttemptingToUpdate );
337 igstkDeclareStateMacro( AttemptingToStopTracking );
340 igstkDeclareInputMacro( EstablishCommunication );
341 igstkDeclareInputMacro( StartTracking );
342 igstkDeclareInputMacro( AttachTrackerTool );
343 igstkDeclareInputMacro( UpdateStatus );
344 igstkDeclareInputMacro( StopTracking );
345 igstkDeclareInputMacro( Reset );
346 igstkDeclareInputMacro( CloseCommunication );
347 igstkDeclareInputMacro( ValidFrequency );
349 igstkDeclareInputMacro( Success );
350 igstkDeclareInputMacro( Failure );
360 static ITK_THREAD_RETURN_TYPE TrackingThreadFunction(
void* pInfoStruct);
365 void UpdateStatus(
void );
369 void AttemptToOpenProcessing(
void );
373 void AttemptToStartTrackingProcessing(
void );
376 void AttemptToStopTrackingProcessing(
void );
380 void AttemptToAttachTrackerToolProcessing(
void );
384 void AttemptToUpdateStatusProcessing(
void );
388 void UpdateStatusSuccessProcessing(
void );
392 void UpdateStatusFailureProcessing(
void );
396 void CloseFromTrackingStateProcessing(
void );
400 void CloseFromCommunicatingStateProcessing(
void );
404 void ResetFromTrackingStateProcessing(
void );
408 void ResetFromToolsActiveStateProcessing(
void);
412 void ResetFromCommunicatingStateProcessing(
void );
415 void CommunicationEstablishmentSuccessProcessing(
void );
418 void CommunicationEstablishmentFailureProcessing(
void );
421 void ToolsActivationSuccessProcessing(
void );
424 void ToolsActivationFailureProcessing(
void );
427 void StartTrackingSuccessProcessing(
void );
430 void StartTrackingFailureProcessing(
void );
434 void AttachingTrackerToolSuccessProcessing(
void );
438 void AttachingTrackerToolFailureProcessing(
void );
441 void StopTrackingSuccessProcessing(
void );
444 void StopTrackingFailureProcessing(
void );
447 void CloseCommunicationSuccessProcessing(
void );
450 void CloseCommunicationFailureProcessing(
void );
453 void EnterTrackingStateProcessing(
void );
456 void DetachAllTrackerToolsFromTracker();
459 void ReportInvalidRequestProcessing(
void );
462 void SetFrequencyProcessing(
void );
466 igstkCoordinateSystemClassInterfaceMacro();
470 double m_FrequencyToBeSet;
475 #endif //__igstk_Tracker_h_