00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __igstkAscension3DGTracker_h
00019 #define __igstkAscension3DGTracker_h
00020
00021 #include "igstkAscension3DGTrackerTool.h"
00022 #include "igstkTracker.h"
00023
00024 namespace igstk
00025 {
00027 struct Ascension3DGEventErrorType {
00029 EventHelperType::StringType ErrorString;
00030
00032 int AscensionErrorCode;
00033 };
00034
00038 struct Ascension3DGToolEventStruct {
00039 enum ToolEvents{
00040 TOOL_DISCONNECTED,
00041 TOOL_CONNECTED,
00042 TOOL_SATURATED,
00043 TOOL_OUT_OF_SATURATION,
00044 TOOL_OUT_OF_MOTION_BOX,
00045 TOOL_IN_MOTION_BOX,
00046 TRANSMITTER_DETACHED,
00047 TRANSMITTER_ATTACHED,
00048 };
00049
00050 Ascension3DGToolEventStruct(){};
00051
00053 EventHelperType::StringType ToolIdentifier;
00054
00056 int toolID;
00057
00059 ToolEvents EventType;
00060 };
00061
00062 igstkLoadedEventMacro( Ascension3DGErrorEvent, IGSTKErrorEvent,
00063 Ascension3DGEventErrorType);
00064 igstkLoadedEventMacro( Ascension3DGToolEvent, IGSTKEvent,
00065 Ascension3DGToolEventStruct);
00066
00086 class Ascension3DGTracker : public Tracker
00087 {
00088 public:
00089
00091 igstkStandardClassTraitsMacro( Ascension3DGTracker, Tracker )
00092
00093
00094 igstkGetMacro( NumberOfTools, unsigned int )
00095
00096
00102 void RequestSensorAttached(int sensorID);
00103
00110 void RequestTransmitterAttached();
00111
00119 void RequestSensorSaturated(int sensorID);
00120
00127 void RequestSensorInMotionBox(int sensorID);
00128
00129 protected:
00131 Ascension3DGTracker(void);
00132 virtual ~Ascension3DGTracker(void);
00133
00135 typedef Tracker::ResultType ResultType;
00136
00138 virtual ResultType InternalOpen( void );
00139
00141 virtual ResultType InternalClose( void );
00142
00144 virtual ResultType InternalStartTracking( void );
00145
00147 virtual ResultType InternalStopTracking( void );
00148
00150 virtual ResultType InternalUpdateStatus( void );
00151
00154 virtual ResultType InternalThreadedUpdateStatus( void );
00155
00157 virtual ResultType VerifyTrackerToolInformation(
00158 const TrackerToolType * trackerTool );
00159
00161 virtual ResultType ValidateSpecifiedFrequency( double frequencyInHz );
00162
00164 virtual ResultType AddTrackerToolToInternalDataContainers( const
00165 TrackerToolType * trackerTool );
00166
00168 virtual ResultType RemoveTrackerToolFromInternalDataContainers(
00169 const TrackerToolType * trackerTool );
00170
00172 virtual ResultType InternalReset( void );
00173
00175 virtual void PrintSelf( std::ostream& os, ::itk::Indent indent ) const;
00176
00177 private:
00178
00179 Ascension3DGTracker(const Self&);
00180 void operator=(const Self&);
00181
00183 typedef igstk::Ascension3DGTrackerTool Ascension3DGTrackerToolType;
00184 typedef Ascension3DGTrackerToolType::Pointer Ascension3DGTrackerToolPointer;
00185 typedef Ascension3DGTrackerToolType::ConstPointer
00186 Ascension3DGTrackerToolConstPointer;
00187
00190 void EnableToolPorts( void );
00191
00193 void DisableToolPorts( void );
00194
00197 int CheckAPIReturnStatus(int status);
00198
00200 unsigned int m_NumberOfTools;
00201
00202 enum {TRANSMITTER_OFF = -1};
00203
00205 itk::MutexLock::Pointer m_BufferLock;
00206
00207 typedef std::map< std::string, std::vector < double > >
00208 TrackerToolTransformContainerType;
00210 TrackerToolTransformContainerType m_ToolTransformBuffer;
00211
00212 typedef std::map< unsigned int, std::string> ErrorCodeContainerType;
00214 static ErrorCodeContainerType m_ErrorCodeContainer;
00215
00216 enum ToolAvailabilityStatus {TOOL_UNAVAILABLE, TOOL_AVAILABLE};
00218 std::map< std::string, ToolAvailabilityStatus > m_ToolStatusContainer;
00219
00221 static unsigned short ConvertToolNameToSensorID(const std::string &name);
00223 static std::string ConvertSensorIDToToolName(unsigned short id);
00224
00225
00226
00227
00228
00229
00230
00231
00232 std::vector<bool> m_SensorSaturated;
00233 std::vector<bool> m_SensorAttached;
00234 std::vector<bool> m_SensorInMotionBox;
00235 bool m_TransmitterAttached;
00236
00238 void InvokeSensorToolEvent(std::string sensorName, int sensorID,
00239 Ascension3DGToolEventStruct::ToolEvents eventType);
00240
00242 void NoProcessing(){};
00243
00244 void ReportSensorSaturationProcessing();
00245 void ReportSensorAttachedProcessing();
00246 void ReportTransmitterAttachedProcessing();
00247 void ReportSensorInMotionBoxProcessing();
00248
00249
00250 int m_sensorID;
00251
00252
00253 igstkDeclareStateMacro(Idle);
00254 igstkDeclareStateMacro(Initialized);
00255 igstkDeclareStateMacro(AttemptingToGetSaturation);
00256 igstkDeclareStateMacro(AttemptingToGetSensorAttached);
00257 igstkDeclareStateMacro(AttemptingToGetTransmitterAttached);
00258 igstkDeclareStateMacro(AttemptingToGetSensorInMotionBox);
00259
00260
00261 igstkDeclareInputMacro(Initialize);
00262 igstkDeclareInputMacro(GetSensorSaturation);
00263 igstkDeclareInputMacro(GetSensorAttached);
00264 igstkDeclareInputMacro(GetTransmitterAttached);
00265 igstkDeclareInputMacro(GetSensorInMotionBox);
00266 };
00267
00268 }
00269
00270 #endif //__igstk_Ascension3DGTracker_h_