Medical Imaging Interaction Toolkit  2018.4.99-3e3f1a6e
Medical Imaging Interaction Toolkit
mitk::IGTLDevice Class Referenceabstract

Interface for all OpenIGTLink Devices. More...

#include <mitkIGTLDevice.h>

Inheritance diagram for mitk::IGTLDevice:
Collaboration diagram for mitk::IGTLDevice:

Public Types

enum  IGTLDeviceState { Setup, Ready, Running }
 Type for state variable. The IGTLDevice is always in one of these states. More...
 

Public Member Functions

 mitkClassMacroItkParent (IGTLDevice, itk::Object)
 
 IGTLDevice (bool ReadFully)
 
virtual bool OpenConnection ()=0
 Opens a connection to the device. More...
 
virtual bool CloseConnection ()
 Closes the connection to the device. More...
 
virtual bool StopCommunication ()
 Stops the communication between the two devices. More...
 
bool StartCommunication ()
 Starts the communication between the two devices. More...
 
void RunCommunication (void(IGTLDevice::*ComFunction)(void), itk::FastMutexLock *mutex)
 Continuously calls the given function. More...
 
void SendMessage (mitk::IGTLMessage::Pointer msg)
 Adds the given message to the sending queue. More...
 
IGTLDeviceState GetState () const
 Returns current object state (Setup, Ready or Running) More...
 
igtl::MessageBase::Pointer GetNextCommand ()
 Returns the oldest message in the command queue. More...
 
igtl::ImageMessage::Pointer GetNextImage2dMessage ()
 Returns the oldest message in the receive queue. More...
 
igtl::ImageMessage::Pointer GetNextImage3dMessage ()
 
igtl::TransformMessage::Pointer GetNextTransformMessage ()
 
igtl::TrackingDataMessage::Pointer GetNextTrackingDataMessage ()
 
igtl::StringMessage::Pointer GetNextStringMessage ()
 
igtl::MessageBase::Pointer GetNextMiscMessage ()
 
virtual void SetPortNumber (int _arg)
 Sets the port number of the device. More...
 
virtual int GetPortNumber ()
 Returns the port number of the device. More...
 
virtual void SetHostname (std::string _arg)
 Sets the ip/hostname of the device. More...
 
virtual std::string GetHostname ()
 Returns the ip/hostname of the device. More...
 
virtual std::string GetName () const
 Returns the name of this device. More...
 
virtual void SetName (std::string _arg)
 Sets the name of this device. More...
 
virtual void SetReadFully (bool _arg)
 Advises this IGTL Device to always block until the whole message is read. More...
 
virtual mitk::IGTLMessageQueue::Pointer GetMessageQueue () const
 Returns a const reference to the receive queue. More...
 
virtual mitk::IGTLMessageFactory::Pointer GetMessageFactory ()
 Returns the message factory. More...
 
virtual bool TestConnection ()
 TestConnection() tries to connect to a IGTL device on the current ip and port. More...
 
bool SendRTSMessage (const char *type)
 Send RTS message of given type. More...
 
void EnableNoBufferingMode (mitk::IGTLMessageQueue::Pointer queue, bool enable=true)
 Sets the buffering mode of the given queue. More...
 
void EnableNoBufferingMode (bool enable=true)
 
virtual unsigned int GetNumberOfConnections ()=0
 Returns the number of connections of this device. More...
 
virtual bool GetLogMessages ()
 
virtual void SetLogMessages (bool _arg)
 

Static Public Member Functions

static ITK_THREAD_RETURN_TYPE ThreadStartSending (void *data)
 static start method for the sending thread. More...
 
static ITK_THREAD_RETURN_TYPE ThreadStartReceiving (void *data)
 static start method for the receiving thread. More...
 
static ITK_THREAD_RETURN_TYPE ThreadStartConnecting (void *data)
 static start method for the connection thread. More...
 

Protected Member Functions

unsigned int SendMessagePrivate (mitk::IGTLMessage::Pointer msg, igtl::Socket::Pointer socket)
 Sends a message. More...
 
virtual void Receive ()=0
 Call this method to receive a message. More...
 
unsigned int ReceivePrivate (igtl::Socket *device)
 Call this method to receive a message from the given device. More...
 
virtual void Send ()=0
 Call this method to send a message. The message will be read from the queue. More...
 
virtual void Connect ()
 Call this method to check for other devices that want to connect to this one. More...
 
virtual void StopCommunicationWithSocket (igtl::Socket *socket)=0
 Stops the communication with the given socket. More...
 
void SetState (IGTLDeviceState state)
 change object state More...
 
 IGTLDevice ()
 
 ~IGTLDevice () override
 

Protected Attributes

IGTLDeviceState m_State
 
std::string m_Name
 
bool m_StopCommunication
 
itk::FastMutexLock::Pointer m_StopCommunicationMutex
 
itk::FastMutexLock::Pointer m_SendingFinishedMutex
 
itk::FastMutexLock::Pointer m_ReceivingFinishedMutex
 
itk::FastMutexLock::Pointer m_ConnectingFinishedMutex
 
itk::FastMutexLock::Pointer m_StateMutex
 
std::string m_Hostname
 
int m_PortNumber
 
igtl::Socket::Pointer m_Socket
 
mitk::IGTLMessageQueue::Pointer m_MessageQueue
 
mitk::IGTLMessageFactory::Pointer m_MessageFactory
 
bool m_LogMessages
 

Detailed Description

Interface for all OpenIGTLink Devices.

Defines the methods that are common for all devices using OpenIGTLink. It can open/close a connection, start/stop a communication and send/receive messages.

It uses message queues to store the incoming and outgoing mails. They are configurable, you can set buffering on and off.

The device is in one of three different states: Setup, Ready or Running. Setup is the initial state. From this state on you can call OpenConnection() and arrive in the Ready state. From the Ready state you call StartCommunication() to arrive in the Running state. Now the device is continuosly checking for new connections, receiving messages and sending messages. This runs in a seperate thread. To stop the communication call StopCommunication() (to arrive in Ready state) or CloseConnection() (to arrive in the Setup state).

Definition at line 57 of file mitkIGTLDevice.h.

Member Enumeration Documentation

◆ IGTLDeviceState

Type for state variable. The IGTLDevice is always in one of these states.

Enumerator
Setup 
Ready 
Running 

Definition at line 69 of file mitkIGTLDevice.h.

Constructor & Destructor Documentation

◆ IGTLDevice() [1/2]

◆ IGTLDevice() [2/2]

mitk::IGTLDevice::IGTLDevice ( )
protected

◆ ~IGTLDevice()

mitk::IGTLDevice::~IGTLDevice ( )
overrideprotected

Definition at line 61 of file mitkIGTLDevice.cpp.

References CloseConnection(), GetState(), Ready, Running, and StopCommunication().

Member Function Documentation

◆ CloseConnection()

bool mitk::IGTLDevice::CloseConnection ( )
virtual

Closes the connection to the device.

This may only be called if there is currently a connection to the device, but device is not running (e.g. object is in Ready state)

Reimplemented in mitk::IGTLServer.

Definition at line 398 of file mitkIGTLDevice.cpp.

References GetState(), m_Socket, Running, SetState(), Setup, and StopCommunication().

Referenced by mitk::IGTLServer::CloseConnection(), and ~IGTLDevice().

◆ Connect()

void mitk::IGTLDevice::Connect ( )
protectedvirtual

Call this method to check for other devices that want to connect to this one.

In case of a client this method is doing nothing. In case of a server it is checking for other devices and if there is one it establishes a connection.

Reimplemented in mitk::IGTLServer.

Definition at line 441 of file mitkIGTLDevice.cpp.

References MITK_DEBUG.

Referenced by ThreadStartConnecting().

◆ EnableNoBufferingMode() [1/2]

void mitk::IGTLDevice::EnableNoBufferingMode ( mitk::IGTLMessageQueue::Pointer  queue,
bool  enable = true 
)

Sets the buffering mode of the given queue.

Definition at line 486 of file mitkIGTLDevice.cpp.

◆ EnableNoBufferingMode() [2/2]

void mitk::IGTLDevice::EnableNoBufferingMode ( bool  enable = true)

Definition at line 481 of file mitkIGTLDevice.cpp.

References m_MessageQueue.

◆ GetHostname()

virtual std::string mitk::IGTLDevice::GetHostname ( )
virtual

Returns the ip/hostname of the device.

Referenced by mitk::IGTLClient::OpenConnection().

◆ GetLogMessages()

virtual bool mitk::IGTLDevice::GetLogMessages ( )
virtual

◆ GetMessageFactory()

virtual mitk::IGTLMessageFactory::Pointer mitk::IGTLDevice::GetMessageFactory ( )
virtual

Returns the message factory.

◆ GetMessageQueue()

virtual mitk::IGTLMessageQueue::Pointer mitk::IGTLDevice::GetMessageQueue ( ) const
virtual

Returns a const reference to the receive queue.

◆ GetName()

virtual std::string mitk::IGTLDevice::GetName ( ) const
virtual

Returns the name of this device.

◆ GetNextCommand()

igtl::MessageBase::Pointer mitk::IGTLDevice::GetNextCommand ( )

Returns the oldest message in the command queue.

Returns
The oldest message from the command queue.

Definition at line 477 of file mitkIGTLDevice.cpp.

References m_MessageQueue.

◆ GetNextImage2dMessage()

igtl::ImageMessage::Pointer mitk::IGTLDevice::GetNextImage2dMessage ( )

Returns the oldest message in the receive queue.

Returns
The oldest message from the receive queue

Definition at line 446 of file mitkIGTLDevice.cpp.

References m_MessageQueue.

◆ GetNextImage3dMessage()

igtl::ImageMessage::Pointer mitk::IGTLDevice::GetNextImage3dMessage ( )

Definition at line 451 of file mitkIGTLDevice.cpp.

References m_MessageQueue.

◆ GetNextMiscMessage()

igtl::MessageBase::Pointer mitk::IGTLDevice::GetNextMiscMessage ( )

Definition at line 472 of file mitkIGTLDevice.cpp.

References m_MessageQueue.

◆ GetNextStringMessage()

igtl::StringMessage::Pointer mitk::IGTLDevice::GetNextStringMessage ( )

Definition at line 467 of file mitkIGTLDevice.cpp.

References m_MessageQueue.

◆ GetNextTrackingDataMessage()

igtl::TrackingDataMessage::Pointer mitk::IGTLDevice::GetNextTrackingDataMessage ( )

Definition at line 461 of file mitkIGTLDevice.cpp.

References m_MessageQueue.

◆ GetNextTransformMessage()

igtl::TransformMessage::Pointer mitk::IGTLDevice::GetNextTransformMessage ( )

Definition at line 456 of file mitkIGTLDevice.cpp.

References m_MessageQueue.

◆ GetNumberOfConnections()

virtual unsigned int mitk::IGTLDevice::GetNumberOfConnections ( )
pure virtual

Returns the number of connections of this device.

Implemented in mitk::IGTLServer, and mitk::IGTLClient.

◆ GetPortNumber()

virtual int mitk::IGTLDevice::GetPortNumber ( )
virtual

Returns the port number of the device.

Referenced by mitk::IGTLClient::OpenConnection(), and mitk::IGTLServer::OpenConnection().

◆ GetState()

mitk::IGTLDevice::IGTLDeviceState mitk::IGTLDevice::GetState ( ) const

Returns current object state (Setup, Ready or Running)

Definition at line 92 of file mitkIGTLDevice.cpp.

References m_State, and m_StateMutex.

Referenced by CloseConnection(), mitk::IGTLClient::OpenConnection(), mitk::IGTLServer::OpenConnection(), RunCommunication(), StartCommunication(), StopCommunication(), and ~IGTLDevice().

◆ mitkClassMacroItkParent()

mitk::IGTLDevice::mitkClassMacroItkParent ( IGTLDevice  ,
itk::Object   
)

◆ OpenConnection()

virtual bool mitk::IGTLDevice::OpenConnection ( )
pure virtual

Opens a connection to the device.

This may only be called if there is currently no connection to the device. If OpenConnection() is successful, the object will change from Setup state to Ready state.

Implemented in mitk::IGTLServer, and mitk::IGTLClient.

◆ Receive()

virtual void mitk::IGTLDevice::Receive ( )
protectedpure virtual

Call this method to receive a message.

The message will be saved in the receive queue.

Implemented in mitk::IGTLServer, and mitk::IGTLClient.

Referenced by ThreadStartReceiving().

◆ ReceivePrivate()

unsigned int mitk::IGTLDevice::ReceivePrivate ( igtl::Socket *  device)
protected

Call this method to receive a message from the given device.

The message will be saved in the receive queue.

Parameters
devicethe socket that connects this device with the other one.
Return values
IGTL_STATUS_OKa message or a command was received
IGTL_STATUS_NOT_PRESENTthe socket is not connected anymore
IGTL_STATUS_TIME_OUTthe socket timed out
IGTL_STATUS_CHECKSUM_ERRORthe checksum of the received msg was incorrect
IGTL_STATUS_UNKNOWN_ERRORan unknown error occurred

Definition at line 120 of file mitkIGTLDevice.cpp.

References m_LogMessages, m_MessageFactory, m_MessageQueue, MITK_INFO, MITK_WARN, and mitk::IGTLMessage::New().

Referenced by mitk::IGTLClient::Receive(), and mitk::IGTLServer::Receive().

◆ RunCommunication()

void mitk::IGTLDevice::RunCommunication ( void(IGTLDevice::*)(void)  ComFunction,
itk::FastMutexLock *  mutex 
)

Continuously calls the given function.

This may only be called if the device is in Running state and only from a seperate thread.

Parameters
ComFunctionfunction pointer that specifies the method to be executed
mutexthe mutex that corresponds to the function pointer

Definition at line 297 of file mitkIGTLDevice.cpp.

References GetState(), m_StopCommunication, m_StopCommunicationMutex, MITK_DEBUG, MITK_ERROR, Running, and StopCommunication().

Referenced by ThreadStartConnecting(), ThreadStartReceiving(), and ThreadStartSending().

◆ Send()

virtual void mitk::IGTLDevice::Send ( )
protectedpure virtual

Call this method to send a message. The message will be read from the queue.

Implemented in mitk::IGTLServer, and mitk::IGTLClient.

Referenced by ThreadStartSending().

◆ SendMessage()

void mitk::IGTLDevice::SendMessage ( mitk::IGTLMessage::Pointer  msg)

Adds the given message to the sending queue.

This may only be called after the connection to the device has been established with a call to OpenConnection(). Note that the message is not send directly. This method just adds it to the send queue.

Parameters
msgThe message to be added to the sending queue

Definition at line 262 of file mitkIGTLDevice.cpp.

References m_MessageQueue.

Referenced by mitk::IGTLMessageProvider::OnIncomingCommand(), and SendRTSMessage().

◆ SendMessagePrivate()

unsigned int mitk::IGTLDevice::SendMessagePrivate ( mitk::IGTLMessage::Pointer  msg,
igtl::Socket::Pointer  socket 
)
protected

Sends a message.

This may only be called after the connection to the device has been established with a call to OpenConnection(). This method uses the given socket to send the given MessageReceivedEvent

Parameters
msgthe message to be sent
socketthe socket used to communicate with the other device
Return values
IGTL_STATUS_OKthe message was sent
IGTL_STATUS_UNKONWN_ERRORthe message was not sent because an unknown error occurred

Definition at line 267 of file mitkIGTLDevice.cpp.

References m_LogMessages, MITK_ERROR, and MITK_INFO.

Referenced by mitk::IGTLClient::Send(), and mitk::IGTLServer::Send().

◆ SendRTSMessage()

bool mitk::IGTLDevice::SendRTSMessage ( const char *  type)

Send RTS message of given type.

Definition at line 419 of file mitkIGTLDevice.cpp.

References m_MessageFactory, mitk::IGTLMessage::New(), and SendMessage().

Referenced by mitk::IGTLMessageProvider::OnIncomingCommand().

◆ SetHostname()

virtual void mitk::IGTLDevice::SetHostname ( std::string  _arg)
virtual

Sets the ip/hostname of the device.

◆ SetLogMessages()

virtual void mitk::IGTLDevice::SetLogMessages ( bool  _arg)
virtual

◆ SetName()

virtual void mitk::IGTLDevice::SetName ( std::string  _arg)
virtual

Sets the name of this device.

◆ SetPortNumber()

virtual void mitk::IGTLDevice::SetPortNumber ( int  _arg)
virtual

Sets the port number of the device.

◆ SetReadFully()

virtual void mitk::IGTLDevice::SetReadFully ( bool  _arg)
virtual

Advises this IGTL Device to always block until the whole message is read.

◆ SetState()

void mitk::IGTLDevice::SetState ( IGTLDeviceState  state)
protected

◆ StartCommunication()

bool mitk::IGTLDevice::StartCommunication ( )

◆ StopCommunication()

bool mitk::IGTLDevice::StopCommunication ( )
virtual

Stops the communication between the two devices.

This may only be called if the device is in Running state.

Definition at line 376 of file mitkIGTLDevice.cpp.

References GetState(), m_ConnectingFinishedMutex, m_ReceivingFinishedMutex, m_SendingFinishedMutex, m_StopCommunication, m_StopCommunicationMutex, Ready, Running, and SetState().

Referenced by CloseConnection(), RunCommunication(), and ~IGTLDevice().

◆ StopCommunicationWithSocket()

virtual void mitk::IGTLDevice::StopCommunicationWithSocket ( igtl::Socket *  socket)
protectedpure virtual

Stops the communication with the given socket.

Implemented in mitk::IGTLServer, and mitk::IGTLClient.

◆ TestConnection()

bool mitk::IGTLDevice::TestConnection ( )
virtual

TestConnection() tries to connect to a IGTL device on the current ip and port.

TestConnection() tries to connect to a IGTL server on the current ip and port and returns which device it has found.

Returns
It returns the type of the device that answers. Throws an exception if no device is available on that ip/port.
Exceptions
mitk::ExceptionThrows an exception if there are errors while connecting to the device.

Definition at line 115 of file mitkIGTLDevice.cpp.

◆ ThreadStartConnecting()

ITK_THREAD_RETURN_TYPE mitk::IGTLDevice::ThreadStartConnecting ( void *  data)
static

static start method for the connection thread.

Parameters
dataa void pointer to the IGTLDevice object.

Definition at line 538 of file mitkIGTLDevice.cpp.

References Connect(), m_ConnectingFinishedMutex, and RunCommunication().

Referenced by StartCommunication().

◆ ThreadStartReceiving()

ITK_THREAD_RETURN_TYPE mitk::IGTLDevice::ThreadStartReceiving ( void *  data)
static

static start method for the receiving thread.

Parameters
dataa void pointer to the IGTLDevice object.

Definition at line 515 of file mitkIGTLDevice.cpp.

References m_ReceivingFinishedMutex, Receive(), and RunCommunication().

Referenced by StartCommunication().

◆ ThreadStartSending()

ITK_THREAD_RETURN_TYPE mitk::IGTLDevice::ThreadStartSending ( void *  data)
static

static start method for the sending thread.

Parameters
dataa void pointer to the IGTLDevice object.

Definition at line 493 of file mitkIGTLDevice.cpp.

References m_SendingFinishedMutex, RunCommunication(), and Send().

Referenced by StartCommunication().

Member Data Documentation

◆ m_ConnectingFinishedMutex

itk::FastMutexLock::Pointer mitk::IGTLDevice::m_ConnectingFinishedMutex
protected

mutex used to make sure that the connect thread is just started once

Definition at line 336 of file mitkIGTLDevice.h.

Referenced by IGTLDevice(), StartCommunication(), StopCommunication(), and ThreadStartConnecting().

◆ m_Hostname

std::string mitk::IGTLDevice::m_Hostname
protected

the hostname or ip of the device

Definition at line 341 of file mitkIGTLDevice.h.

◆ m_LogMessages

bool mitk::IGTLDevice::m_LogMessages
protected

Definition at line 353 of file mitkIGTLDevice.h.

Referenced by ReceivePrivate(), and SendMessagePrivate().

◆ m_MessageFactory

mitk::IGTLMessageFactory::Pointer mitk::IGTLDevice::m_MessageFactory
protected

A message factory that provides the New() method for all msg types

Definition at line 351 of file mitkIGTLDevice.h.

Referenced by IGTLDevice(), ReceivePrivate(), and SendRTSMessage().

◆ m_MessageQueue

◆ m_Name

std::string mitk::IGTLDevice::m_Name
protected

the name of this device

Definition at line 325 of file mitkIGTLDevice.h.

◆ m_PortNumber

int mitk::IGTLDevice::m_PortNumber
protected

the port number of the device

Definition at line 343 of file mitkIGTLDevice.h.

◆ m_ReceivingFinishedMutex

itk::FastMutexLock::Pointer mitk::IGTLDevice::m_ReceivingFinishedMutex
protected

mutex used to make sure that the receive thread is just started once

Definition at line 334 of file mitkIGTLDevice.h.

Referenced by IGTLDevice(), StartCommunication(), StopCommunication(), and ThreadStartReceiving().

◆ m_SendingFinishedMutex

itk::FastMutexLock::Pointer mitk::IGTLDevice::m_SendingFinishedMutex
protected

mutex used to make sure that the send thread is just started once

Definition at line 332 of file mitkIGTLDevice.h.

Referenced by IGTLDevice(), StartCommunication(), StopCommunication(), and ThreadStartSending().

◆ m_Socket

igtl::Socket::Pointer mitk::IGTLDevice::m_Socket
protected

◆ m_State

IGTLDeviceState mitk::IGTLDevice::m_State
protected

current object state (Setup, Ready or Running)

Definition at line 323 of file mitkIGTLDevice.h.

Referenced by GetState(), and SetState().

◆ m_StateMutex

itk::FastMutexLock::Pointer mitk::IGTLDevice::m_StateMutex
protected

mutex to control access to m_State

Definition at line 338 of file mitkIGTLDevice.h.

Referenced by GetState(), IGTLDevice(), and SetState().

◆ m_StopCommunication

bool mitk::IGTLDevice::m_StopCommunication
protected

signal used to stop the thread

Definition at line 328 of file mitkIGTLDevice.h.

Referenced by RunCommunication(), StartCommunication(), StopCommunication(), and mitk::IGTLClient::StopCommunicationWithSocket().

◆ m_StopCommunicationMutex

itk::FastMutexLock::Pointer mitk::IGTLDevice::m_StopCommunicationMutex
protected

mutex to control access to m_StopCommunication

Definition at line 330 of file mitkIGTLDevice.h.

Referenced by IGTLDevice(), RunCommunication(), StartCommunication(), StopCommunication(), and mitk::IGTLClient::StopCommunicationWithSocket().


The documentation for this class was generated from the following files: