Jonathann Jacobs - Van Poucke

ajout bibliothèque vrpn

<!-- ALX File skeleton generated by ARCSLibMaker -->
<library>
<!-- Headers section -->
<!-- Put here all the needed headers of your components/families/types -->
<headers>
<header name="vrpnanalog.h"/>
<header name="vrpnbutton.h"/>
</headers>
<!-- Components section -->
<!-- Put here all the native components your library should export -->
<components>
<component name="VrpnAnalog"/>
<component name="VrpnButton"/>
</components>
<!-- Families section -->
<!-- Put here all the exogeneous component families your library should export -->
<families>
<!--family name="MyComponent"/-->
</families>
<!-- Types section -->
<!-- Put here all the new types your library should export -->
<types>
<!--type name="MyType"/-->
</types>
</library>
unix: TEMPLATE = lib
win32: TEMPLATE = vclib
INCLUDEPATH += $$(ARCSDIR)/include
LIBS += -L$$(ARCSDIR)/lib -larcs
CONFIG += dll
QT = core
HEADERS += vrpnanalog.h
HEADERS += vrpnbutton.h
HEADERS += vrpncommon.h
HEADERS += vrpndial.h
HEADERS += vrpnforcedevice.h
HEADERS += vrpnsound.h
HEADERS += vrpntext.h
HEADERS += vrpntracker.h
SOURCES += vrpnanalog.cpp
SOURCES += vrpnbutton.cpp
SOURCES += vrpndial.cpp
SOURCES += vrpnforcedevice.cpp
SOURCES += vrpnsound.cpp
SOURCES += vrpntext.cpp
SOURCES += vrpntracker.cpp
ALXFILE = libvrpn.alx
OTHER_FILES += libvrpn.alx
arcslibrary.output = alm_${QMAKE_FILE_BASE}.cpp
arcslibrary.input = ALXFILE
arcslibrary.commands = arcslibmaker ${QMAKE_FILE_NAME}
arcslibrary.variable_out = SOURCES
QMAKE_EXTRA_COMPILERS += arcslibrary
// Jonathann Jacobs : 11/06/2013
#include "vrpnanalog.h"
// Constructor
VrpnAnalog::VrpnAnalog(QString name,QString host,QObject *parent ) :
VrpnCommon(name,host,parent)
{ device = new vrpn_Analog_Remote(qPrintable(m_full));
device->register_change_handler(this,VrpnAnalog::callback);
}
// Protected methods
void VRPN_CALLBACK VrpnAnalog::callback(void* userData, const vrpn_ANALOGCB cb )
{ int i;
float t[cb.num_channel];
VrpnAnalog* Me = static_cast <VrpnAnalog*>(userData);
std::cout << Me->getName().toStdString() << " | Analog : NumChannel : " << cb.num_channel << " t = " << static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0) << " \t " ;
for ( i = 0 ; i < cb.num_channel ; i++)
{ t[i] = (float) cb.channel[i];
std::cout << t[i] << "\t";
} std::cout << std::endl;
Me->sendChannel (t);
Me->sendTime (static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0));
Me->sendNumChannel(static_cast <int> (cb.num_channel));
}
void VrpnAnalog::reset()
{ reform();
delete device;
device = new vrpn_Analog_Remote(qPrintable(m_full));
device->register_change_handler(this,VrpnAnalog::callback);
}
// Jonathann Jacobs : 11/06/2013
#ifndef VRPNANALOG_H
#define VRPNANALOG_H
#include "vrpncommon.h"
#include "vrpn_Analog.h"
class VrpnAnalog : public VrpnCommon
{ Q_OBJECT
/// Constructor__________________________________________________
public:
explicit VrpnAnalog(QString name = "Analog0", QString host = "localhost" , QObject *parent = 0);
/// Signals______________________________________________________
signals:
void sendChannel(float*);
void sendTime(double);
void sendNumChannel(int);
/// Slots________________________________________________________
public slots:
inline void refresh() {device->mainloop();} // Update data from the server then activate signals
inline void setName(QString newName = "Analog0") {m_name = newName; reset();}
inline void setHost(QString newHost = "localhost"){m_host = newHost; reset();}
/// Attributes___________________________________________________
protected :
vrpn_Analog_Remote* device; // Vrpn client object for recovering data from the vrpn server
/// Methods______________________________________________________
void reset();
static void VRPN_CALLBACK callback(void* userData, const vrpn_ANALOGCB cb ); // Used by the device->mainloop for returning data
};
#endif // VRPNANALOG_H
// Jonathann Jacobs : 11/06/2013
#include "vrpnbutton.h"
// Constructor
VrpnButton::VrpnButton(QString name,QString host,QObject *parent ) :
VrpnCommon(name,host,parent)
{ device = new vrpn_Button_Remote(qPrintable(m_full));
device->register_change_handler(this,VrpnButton::callback);
}
// Protected methods
void VRPN_CALLBACK VrpnButton::callback(void* userData, const vrpn_BUTTONCB cb )
{ VrpnButton* Me = static_cast <VrpnButton*>(userData);
std::cout << Me->getName().toStdString() << " | Button : " << cb.button << " \t State : " << cb.state << " \t t = " << static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0) << std::endl;
Me->sendButton(static_cast <int> (cb.button));
Me->sendTime (static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0));
Me->sendState (static_cast <int> (cb.state));
}
void VrpnButton::reset()
{ reform();
delete device;
device = new vrpn_Button_Remote(qPrintable(m_full));
device->register_change_handler(this,VrpnButton::callback);
}
// Jonathann Jacobs : 11/06/2013
#ifndef VRPNBUTTON_H
#define VRPNBUTTON_H
#include "vrpncommon.h"
#include "vrpn_Button.h"
class VrpnButton : public VrpnCommon
{ Q_OBJECT
/// Constructor__________________________________________________
public:
explicit VrpnButton(QString name = "Button0", QString host = "localhost" , QObject *parent = 0);
/// Signals______________________________________________________
signals:
void sendButton(int);
void sendTime(double);
void sendState(int);
/// Slots________________________________________________________
public slots:
inline void refresh() {device->mainloop();} // Update data from the server then activate signals
inline void setName(QString newName = "Button0") {m_name = newName; reset();}
inline void setHost(QString newHost = "localhost"){m_host = newHost; reset();}
/// Attributes___________________________________________________
protected :
vrpn_Button_Remote* device; // Vrpn client object for recovering data from the vrpn server
/// Methods______________________________________________________
void reset();
static void VRPN_CALLBACK callback(void* userData, const vrpn_BUTTONCB cb ); // Used by the device->mainloop for returning data
};
#endif // VRPNBUTTON_H
// Jonathann Jacobs : 11/06/2013
#ifndef VRPNCOMMON_H
#define VRPNCOMMON_H
#include <iostream>
#include <QObject>
#include <QString>
class VrpnCommon : public QObject
{ Q_OBJECT
/// Constructor__________________________________________________
public:
inline explicit VrpnCommon(QString name = "Device0", QString host = "localhost" , QObject *parent = 0) :
QObject(parent) , m_name(name) , m_host(host) {reform();}
/// Getters______________________________________________________
inline QString getName() { return m_name; }
inline QString getHost() { return m_host; }
/// Signals______________________________________________________
signals:
inline void sendName(QString m_name);
inline void sendHost(QString m_host);
/// Attributes___________________________________________________
protected :
QString m_name;
QString m_host;
QString m_full;
/// Methods______________________________________________________
inline void reform(){ m_full = QString(m_name+'@'+m_host);}
};
#endif // VRPNCOMMON_H
// Jonathann Jacobs : 12/06/2013
#include "vrpndial.h"
// Constructor
VrpnDial::VrpnDial(QString name,QString host,QObject *parent ) :
VrpnCommon(name,host,parent)
{ device = new vrpn_Dial_Remote(qPrintable(m_full));
device->register_change_handler(this,VrpnDial::callback);
}
// Protected methods
void VRPN_CALLBACK VrpnDial::callback(void* userData, const vrpn_DIALCB cb )
{ VrpnDial* Me = static_cast <VrpnDial*>(userData);
std::cout << Me->getName().toStdString() << " | Dial : " << cb.dial << " Change : " << cb.change <<
"\t t = " << static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0) << std::endl;
Me->sendTime (static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0));
Me->sendDial (static_cast <int>(cb.dial));
Me->sendChange (static_cast <float>(cb.change));
}
void VrpnDial::reset()
{ reform();
delete device;
device = new vrpn_Dial_Remote(qPrintable(m_full));
device->register_change_handler(this,VrpnDial::callback);
}
// Jonathann Jacobs : 12/06/2013
#ifndef VRPNDIAL_H
#define VRPNDIAL_H
#include "vrpncommon.h"
#include "vrpn_Dial.h"
class VrpnDial : public VrpnCommon
{ Q_OBJECT
/// Constructor__________________________________________________
public:
explicit VrpnDial(QString name = "Dial0", QString host = "localhost" , QObject *parent = 0);
/// Signals______________________________________________________
signals:
void sendTime (double);
void sendDial (int);
void sendChange (float);
/// Slots________________________________________________________
public slots:
inline void refresh() {device->mainloop();} // Update data from the server then activate signals
inline void setName(QString newName = "Dial0") {m_name = newName; reset();}
inline void setHost(QString newHost = "localhost") {m_host = newHost; reset();}
/// Attributes___________________________________________________
protected :
vrpn_Dial_Remote* device; // Vrpn client object for recovering data from the vrpn server
/// Methods______________________________________________________
void reset();
static void VRPN_CALLBACK callback(void* userData, const vrpn_DIALCB cb ); // Used by the device->mainloop for returning data
};
#endif // VRPNDIAL_H
// Jonathann Jacobs : 12/06/2013
#include "vrpnforcedevice.h"
// Constructor
VrpnForceDevice::VrpnForceDevice(QString name,QString host,QObject *parent ) :
VrpnCommon(name,host,parent)
{ device = new vrpn_ForceDevice_Remote(qPrintable(m_full));
device->register_force_change_handler(this,VrpnForceDevice::callback);
}
// Protected methods
void VRPN_CALLBACK VrpnForceDevice::callback(void* userData, const vrpn_FORCECB cb )
{ int i;
float p[3] = {static_cast <float>(cb.force[0]),static_cast <float>(cb.force[1]),static_cast <float>(cb.force[2])};
VrpnForceDevice* Me = static_cast <VrpnForceDevice*>(userData);
std::cout << Me->getName().toStdString() << " | \t t = " << static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0) << " \t";
for( i = 0 ; i < 3 ; i++) std::cout << cb.force[i] << " "; std::cout << std::endl;
Me->sendTime (static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0));
Me->sendForce (p);
}
void VrpnForceDevice::reset()
{ reform();
delete device;
device = new vrpn_ForceDevice_Remote(qPrintable(m_full));
device->register_force_change_handler(this,VrpnForceDevice::callback);
}
// Jonathann Jacobs : 12/06/2013
#ifndef VRPNFORCEDEVICE_H
#define VRPNFORCEDEVICE_H
#include "vrpncommon.h"
#include "vrpn_ForceDevice.h"
class VrpnForceDevice : public VrpnCommon
{ Q_OBJECT
/// Constructor__________________________________________________
public:
explicit VrpnForceDevice(QString name = "ForceDevice0", QString host = "localhost" , QObject *parent = 0);
/// Signals______________________________________________________
signals:
void sendTime (double);
void sendForce (const float*);
/// Slots________________________________________________________
public slots:
inline void refresh() {device->mainloop();} // Update data from the server then activate signals
inline void setName(QString newName = "ForceDevice0") {m_name = newName; reset();}
inline void setHost(QString newHost = "localhost") {m_host = newHost; reset();}
/// Attributes___________________________________________________
protected :
vrpn_ForceDevice_Remote* device; // Vrpn client object for recovering data from the vrpn server
/// Methods______________________________________________________
void reset();
static void VRPN_CALLBACK callback(void* userData, const vrpn_FORCECB cb ); // Used by the device->mainloop for returning data
};
#endif // VRPNFORCEDEVICE_H
// Jonathann Jacobs : 12/06/2013
#include "vrpnsound.h"
// MOST CHANCES IT JUST DOESN'T WORK AT ALL
// Constructor
VrpnSound::VrpnSound(QString name,QString host,QObject *parent ) :
VrpnCommon(name,host,parent)
{ device = new vrpn_Sound_Client(qPrintable(m_full),NULL); // Probably incorrect about NULL
device->register_message_handler(this,VrpnSound::callback);
}
// Protected methods
void VRPN_CALLBACK VrpnSound::callback(void* userData, const vrpn_TEXTCB cb )
{ VrpnSound* Me = static_cast <VrpnSound*>(userData);
std::cout << Me->getName().toStdString() << " | \t t = " << static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0) <<
" level : " << cb.level << " type : " << cb.type << std::endl;
for (unsigned int i = 0 ; i < vrpn_MAX_TEXT_LEN ; i++)
std::cout << cb.message[i] << "\t"; std::cout << std::endl;
Me->sendLevel (static_cast <int> (cb.level));
Me->sendTime (static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0));
Me->sendType (static_cast <int> (cb.type));
Me->sendMessage (cb.message);
}
void VrpnSound::reset()
{ reform();
delete device;
device = new vrpn_Sound_Client(qPrintable(m_full),NULL); // Same here
device->register_message_handler(this,VrpnSound::callback);
}
// Jonathann Jacobs : 12/06/2013
#ifndef VRPNSOUND_H
#define VRPNSOUND_H
#include "vrpncommon.h"
#include "vrpn_Sound.h"
class VrpnSound : public VrpnCommon
{ Q_OBJECT
/// Constructor__________________________________________________
public:
explicit VrpnSound(QString name = "Sound0", QString host = "localhost" , QObject *parent = 0);
/// Signals______________________________________________________
signals:
void sendLevel (int);
void sendTime (double);
void sendType (int);
void sendMessage (const char*);
/// Slots________________________________________________________
public slots:
inline void refresh() {device->mainloop();} // Update data from the server then activate signals
inline void setName(QString newName = "Sound0") {m_name = newName; reset();}
inline void setHost(QString newHost = "localhost"){m_host = newHost; reset();}
/// Attributes___________________________________________________
protected :
vrpn_Sound_Client* device; // Vrpn client object for recovering data from the vrpn server
/// Methods______________________________________________________
void reset();
static void VRPN_CALLBACK callback(void* userData, const vrpn_TEXTCB cb ); // Used by the device->mainloop for returning data
};
#endif // VRPNSOUND_H
// Jonathann Jacobs : 12/06/2013
#include "vrpntext.h"
// Constructor
VrpnText::VrpnText(QString name,QString host,QObject *parent ) :
VrpnCommon(name,host,parent)
{ device = new vrpn_Text_Receiver(qPrintable(m_full));
device->register_message_handler(this,VrpnText::callback);
}
// Protected methods
void VRPN_CALLBACK VrpnText::callback(void* userData, const vrpn_TEXTCB cb )
{ VrpnText* Me = static_cast <VrpnText*>(userData);
std::cout << Me->getName().toStdString() << " | \t t = " << static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0) <<
" level : " << cb.level << " type : " << cb.type << std::endl;
for (unsigned int i = 0 ; i < vrpn_MAX_TEXT_LEN ; i++)
std::cout << cb.message[i] << "\t"; std::cout << std::endl;
Me->sendLevel (static_cast <int> (cb.level));
Me->sendTime (static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0));
Me->sendType (static_cast <int> (cb.type));
Me->sendMessage (cb.message);
}
void VrpnText::reset()
{ reform();
delete device;
device = new vrpn_Text_Receiver(qPrintable(m_full));
device->register_message_handler(this,VrpnText::callback);
}
// Jonathann Jacobs : 12/06/2013
#ifndef VRPNTEXT_H
#define VRPNTEXT_H
#include "vrpncommon.h"
#include "vrpn_Text.h"
class VrpnText : public VrpnCommon
{ Q_OBJECT
/// Constructor__________________________________________________
public:
explicit VrpnText(QString name = "Text0", QString host = "localhost" , QObject *parent = 0);
/// Signals______________________________________________________
signals:
void sendLevel (int);
void sendTime (double);
void sendType (int);
void sendMessage (const char*);
/// Slots________________________________________________________
public slots:
inline void refresh() {device->mainloop();} // Update data from the server then activate signals
inline void setName(QString newName = "Text0") {m_name = newName; reset();}
inline void setHost(QString newHost = "localhost"){m_host = newHost; reset();}
/// Attributes___________________________________________________
protected :
vrpn_Text_Receiver* device; // Vrpn client object for recovering data from the vrpn server
/// Methods______________________________________________________
void reset();
static void VRPN_CALLBACK callback(void* userData, const vrpn_TEXTCB cb ); // Used by the device->mainloop for returning data
};
#endif // VRPNTEXT_H
// Jonathann Jacobs : 10/06/2013
#include "vrpntracker.h"
// Constructor
VrpnTracker::VrpnTracker(QString name,QString host,QObject *parent ) :
VrpnCommon(name,host,parent)
{ device = new vrpn_Tracker_Remote(qPrintable(m_full));
device->register_change_handler(this,VrpnTracker::callback);
}
// Protected methods
void VRPN_CALLBACK VrpnTracker::callback(void* userData, const vrpn_TRACKERCB cb )
{ VrpnTracker* Me = static_cast <VrpnTracker*>(userData);
std::cout << Me->getName().toStdString() << " | Tracker x:" << cb.pos[0] << " y:" << cb.pos[1] << " z:" << cb.pos[2]
<< "\t xq:" << cb.quat[0] << " yq:" << cb.quat[1] << " zq:" << cb.quat[2] << " wq:" << cb.quat[3]
<< "\t s:" << static_cast <int>(cb.sensor) << " t:" << static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0) << std::endl;
Me->sendSensor(static_cast <int>(cb.sensor));
Me->sendTime(static_cast <double> (cb.msg_time.tv_sec + cb.msg_time.tv_usec/1000000.0));
float p[3] = {static_cast <float>(cb.pos[0]),static_cast <float>(cb.pos[1]),static_cast <float>(cb.pos[2])};
float q[4] = {static_cast <float>(cb.quat[0]),static_cast <float>(cb.quat[1]),static_cast <float>(cb.quat[2]),static_cast <float>(cb.quat[3])};
Me->sendPosition(p);
Me->sendQuat(q);
}
void VrpnTracker::reset()
{ reform();
delete device;
device = new vrpn_Tracker_Remote(qPrintable(m_full));
device->register_change_handler(this,VrpnTracker::callback);
}
// Jonathann Jacobs : 10/06/2013
#ifndef VRPNTRACKER_H
#define VRPNTRACKER_H
#include "vrpncommon.h"
#include "vrpn_Tracker.h"
class VrpnTracker : public VrpnCommon
{ Q_OBJECT
/// Constructor__________________________________________________
public:
explicit VrpnTracker(QString name = "Tracker0", QString host = "localhost" , QObject *parent = 0);
/// Signals______________________________________________________
signals:
void sendPosition(float* t); // Send three 64-bits float about coordinates of the tracker
void sendQuat(float* t); // Send four 64-bits float about orientation of the tracker
void sendSensor(int); // Send Id code of the device sending data
void sendTime(double); // Send time value of when data were recorded by the device
/// Slots________________________________________________________
public slots:
inline void refresh() {device->mainloop();} // Update data from the server then activate signals
inline void setName(QString newName = "Tracker0") {m_name = newName; reset();}
inline void setHost(QString newHost = "localhost"){m_host = newHost; reset();}
/// Attributes___________________________________________________
protected :
vrpn_Tracker_Remote* device; // Vrpn client object for recovering data from the vrpn server
/// Methods______________________________________________________
void reset();
static void VRPN_CALLBACK callback(void* userData, const vrpn_TRACKERCB cb ); // Used by the device->mainloop for returning data
};
#endif // VRPNTRACKER_H