Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MITKNDITRACKINGDEVICE_H_HEADER_INCLUDED_C1C2FCD2
00020 #define MITKNDITRACKINGDEVICE_H_HEADER_INCLUDED_C1C2FCD2
00021
00022 #include "mitkTrackingDevice.h"
00023
00024 #include <MitkIGTExports.h>
00025 #include <itkMultiThreader.h>
00026 #include "itkFastMutexLock.h"
00027 #include <vector>
00028
00029 #include "mitkTrackingTypes.h"
00030 #include "mitkNDIProtocol.h"
00031 #include "mitkNDIPassiveTool.h"
00032 #include "mitkSerialCommunication.h"
00033
00034
00035 namespace mitk
00036 {
00037 class NDIProtocol;
00038
00046 class MitkIGT_EXPORT NDITrackingDevice : public TrackingDevice
00047 {
00048 friend class NDIProtocol;
00049
00050 public:
00051 typedef std::vector<NDIPassiveTool::Pointer> Tool6DContainerType;
00052 typedef std::vector<int> TrackingVolumeDimensionType;
00053 typedef mitk::TrackingDeviceType NDITrackingDeviceType;
00054 typedef std::vector<NDITrackingVolume> NDITrackingVolumeContainerType;
00055 typedef mitk::SerialCommunication::PortNumber PortNumber;
00056 typedef mitk::SerialCommunication::BaudRate BaudRate;
00057 typedef mitk::SerialCommunication::DataBits DataBits;
00058 typedef mitk::SerialCommunication::Parity Parity;
00059 typedef mitk::SerialCommunication::StopBits StopBits;
00060 typedef mitk::SerialCommunication::HardwareHandshake HardwareHandshake;
00061 typedef mitk::NDIPassiveTool::TrackingPriority TrackingPriority;
00062
00063
00064 mitkClassMacro(NDITrackingDevice, TrackingDevice);
00065 itkNewMacro(Self);
00066
00070 itkSetMacro(Type, TrackingDeviceType);
00071
00082 virtual bool OpenConnection();
00083
00089 virtual bool CloseConnection();
00090
00091 bool InitializeWiredTools();
00092
00100 virtual mitk::TrackingDeviceType TestConnection();
00101
00109 bool DiscoverWiredTools();
00110
00119 virtual bool StartTracking();
00120
00124 virtual TrackingTool* GetTool(unsigned int toolNumber) const;
00125
00126 virtual mitk::TrackingTool* GetToolByName(std::string name) const;
00130 virtual unsigned int GetToolCount() const;
00131
00143 mitk::TrackingTool* AddTool(const char* toolName, const char* fileName, TrackingPriority p = NDIPassiveTool::Dynamic);
00144
00150 virtual bool RemoveTool(TrackingTool* tool);
00151
00155 virtual bool UpdateTool(mitk::TrackingTool* tool);
00156
00157 virtual void SetPortNumber(const PortNumber _arg);
00158 itkGetConstMacro(PortNumber, PortNumber);
00159 virtual void SetDeviceName(std::string _arg);
00160 itkGetStringMacro(DeviceName);
00161 virtual void SetBaudRate(const BaudRate _arg);
00162 itkGetConstMacro(BaudRate, BaudRate);
00163 virtual void SetDataBits(const DataBits _arg);
00164 itkGetConstMacro(DataBits, DataBits);
00165 virtual void SetParity(const Parity _arg);
00166 itkGetConstMacro(Parity, Parity);
00167 virtual void SetStopBits(const StopBits _arg);
00168 itkGetConstMacro(StopBits, StopBits);
00169 virtual void SetHardwareHandshake(const HardwareHandshake _arg);
00170 itkGetConstMacro(HardwareHandshake, HardwareHandshake);
00171 virtual void SetIlluminationActivationRate(const IlluminationActivationRate _arg);
00172 itkGetConstMacro(IlluminationActivationRate, IlluminationActivationRate);
00173 virtual void SetDataTransferMode(const DataTransferMode _arg);
00174 itkGetConstMacro(DataTransferMode, DataTransferMode);
00175 virtual bool Beep(unsigned char count);
00176
00177 NDIErrorCode GetErrorCode(const std::string* input);
00178
00179 virtual bool SetOperationMode(OperationMode mode);
00180 virtual OperationMode GetOperationMode();
00181
00185 virtual bool GetMarkerPositions(MarkerPointContainerType* markerpositions);
00186
00191 virtual int GetMajorFirmwareRevisionNumber();
00192
00197 virtual const char* GetFirmwareRevisionNumber();
00198
00199
00205 virtual bool GetSupportedVolumes(unsigned int* numberOfVolumes, NDITrackingVolumeContainerType* volumes, TrackingVolumeDimensionType* volumesDimensions);
00206
00210 virtual bool SetVolume(NDITrackingVolume volume);
00211
00212 protected:
00213
00219 virtual bool InternalAddTool(NDIPassiveTool* tool);
00220
00221
00222 virtual void InvalidateAll();
00223 NDIPassiveTool* GetInternalTool(std::string portHandle);
00224
00234 NDIErrorCode FreePortHandles();
00235
00236 NDIErrorCode Send(const std::string* message, bool addCRC = true);
00237 NDIErrorCode Receive(std::string* answer, unsigned int numberOfBytes);
00238 NDIErrorCode ReceiveByte(char* answer);
00239 NDIErrorCode ReceiveLine(std::string* answer);
00240 void ClearSendBuffer();
00241 void ClearReceiveBuffer();
00242 const std::string CalcCRC(const std::string* input);
00243
00244 public:
00245
00253 virtual void TrackTools();
00254
00262 virtual void TrackMarkerPositions();
00263
00271 virtual void TrackToolsAndMarkers();
00272
00276 static ITK_THREAD_RETURN_TYPE ThreadStartTracking(void* data);
00277
00278 protected:
00279 NDITrackingDevice();
00280 virtual ~NDITrackingDevice();
00281
00282 std::string m_DeviceName;
00283 PortNumber m_PortNumber;
00284 BaudRate m_BaudRate;
00285 DataBits m_DataBits;
00286 Parity m_Parity;
00287 StopBits m_StopBits;
00288 HardwareHandshake m_HardwareHandshake;
00289 NDITrackingVolume m_NDITrackingVolume;
00290 IlluminationActivationRate m_IlluminationActivationRate;
00291 DataTransferMode m_DataTransferMode;
00292 Tool6DContainerType m_6DTools;
00293
00294 itk::FastMutexLock::Pointer m_ToolsMutex;
00295 mitk::SerialCommunication::Pointer m_SerialCommunication;
00296 itk::FastMutexLock::Pointer m_SerialCommunicationMutex;
00297 NDIProtocol::Pointer m_DeviceProtocol;
00298
00299 itk::MultiThreader::Pointer m_MultiThreader;
00300 int m_ThreadID;
00301 OperationMode m_OperationMode;
00302 itk::FastMutexLock::Pointer m_MarkerPointsMutex;
00303 MarkerPointContainerType m_MarkerPoints;
00304 };
00305 }
00306 #endif