vrpn
07.33
Virtual Reality Peripheral Network
|
5th Dimension Technologies (5dt) "Ultra" USB data glove driver More...
#include <vrpn_Analog_5dtUSB.h>
Public Member Functions | |
virtual | ~vrpn_Analog_5dtUSB () |
Destructor. More... | |
virtual void | mainloop () |
Standard VRPN mainloop method. More... | |
std::string | get_description () const |
Returns a string description of the device we've connected to. Used internally, but also possibly useful externally. More... | |
bool | isLeftHand () const |
Accessor to know if this is a left hand glove. More... | |
bool | isRightHand () const |
Accessor to know if this is a right hand glove. More... | |
![]() | |
vrpn_Analog (const char *name, vrpn_Connection *c=NULL) | |
void | print (void) |
vrpn_int32 | getNumChannels (void) const |
![]() | |
vrpn_BaseClass (const char *name, vrpn_Connection *c=NULL) | |
Names the device and assigns or opens connection, calls registration methods. More... | |
virtual | ~vrpn_BaseClass () |
![]() | |
vrpn_BaseClassUnique () | |
virtual | ~vrpn_BaseClassUnique () |
Unregister all of the message handlers that were to be autodeleted. More... | |
vrpn_Connection * | connectionPtr () |
Returns a pointer to the connection this object is using. More... | |
Protected Member Functions | |
vrpn_Analog_5dtUSB (vrpn_HidAcceptor *filter, int num_sensors, bool isLeftHand, const char *name, vrpn_Connection *c=0) | |
Protected constructor: use a subclass to specify the glove variant to use. More... | |
void | on_data_received (size_t bytes, vrpn_uint8 *buffer) |
Extracts the sensor values from each report. More... | |
void | report_changes (vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY) |
Send report iff changed. More... | |
void | report (vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY) |
Send report whether or not changed. More... | |
![]() | |
virtual int | register_types (void) |
Register the types of messages this device sends/receives. Return 0 on success, -1 on fail. More... | |
virtual vrpn_int32 | encode_to (char *buf) |
virtual void | report_changes (vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY, const struct timeval time=vrpn_ANALOG_NOW) |
Send a report only if something has changed (for servers) Optionally, tell what time to stamp the value with. More... | |
virtual void | report (vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY, const struct timeval time=vrpn_ANALOG_NOW) |
Send a report whether something has changed or not (for servers) Optionally, tell what time to stamp the value with. More... | |
![]() | |
virtual int | init (void) |
Initialize things that the constructor can't. Returns 0 on success, -1 on failure. More... | |
virtual int | register_senders (void) |
Register the sender for this device (by default, the name of the device). Return 0 on success, -1 on fail. More... | |
![]() | |
int | register_autodeleted_handler (vrpn_int32 type, vrpn_MESSAGEHANDLER handler, void *userdata, vrpn_int32 sender=vrpn_ANY_SENDER) |
Registers a handler with the connection, and remembers to delete at destruction. More... | |
int | send_text_message (const char *msg, struct timeval timestamp, vrpn_TEXT_SEVERITY type=vrpn_TEXT_NORMAL, vrpn_uint32 level=0) |
Sends a NULL-terminated text message from the device d_sender_id. More... | |
SendTextMessageBoundCall | send_text_message (vrpn_TEXT_SEVERITY type=vrpn_TEXT_NORMAL) |
Returns an object you can stream into to send a text message from the device like send_text_message(vrpn_TEXT_WARNING) << "Value of i is: " << i; This use requires including vrpn_SendTextMessageStreamProxy.h. More... | |
void | server_mainloop (void) |
Handles functions that all servers should provide in their mainloop() (ping/pong, for example) Should be called by all servers in their mainloop() More... | |
void | client_mainloop (void) |
Handles functions that all clients should provide in their mainloop() (warning of no server, for example) Should be called by all clients in their mainloop() More... | |
![]() | |
void | send_data (size_t bytes, const vrpn_uint8 *buffer) |
Call this to send data to the device. More... | |
void | send_feature_report (size_t bytes, const vrpn_uint8 *buffer) |
Call this to send a feature report to the device - first byte must be Report ID (or 0x0 for devices without numbered reports) More... | |
int | get_feature_report (size_t bytes, vrpn_uint8 *buffer) |
Call this to get a feature report from the device - first byte must be Report ID (or 0x0 for devices without numbered reports) More... | |
vrpn_HidInterface (vrpn_HidAcceptor *acceptor) | |
virtual | ~vrpn_HidInterface () |
virtual bool | connected () const |
Returns true iff the last device I/O succeeded. More... | |
virtual void | update () |
Polls the device buffers and causes on_data_received callbacks if appropriate You NEED to call this frequently to ensure the OS doesn't drop data. More... | |
virtual bool | reconnect () |
Tries to reconnect to an acceptable device. Call this if you suspect a hotplug event has occurred. More... | |
vrpn_uint16 | vendor () const |
Returns USB vendor ID of connected device. More... | |
vrpn_uint16 | product () const |
Returns USB product ID of connected device. More... | |
int | interface_number () const |
Returns the USB interface number of connected device. More... | |
Protected Attributes | |
struct timeval | _timestamp |
Timestamp updated during mainloop() More... | |
double | _rawVals [16] |
The raw values extracted from the report: which ones we use to set analog channels varies based on the kind of device this is. More... | |
bool | _isLeftHand |
Flag for left handedness. More... | |
bool | _wasConnected |
Flag indicating whether we were connected last time through the mainloop. Used to send a "normal"-severity message when we connect with info on the device. More... | |
![]() | |
vrpn_float64 | channel [vrpn_CHANNEL_MAX] |
vrpn_float64 | last [vrpn_CHANNEL_MAX] |
vrpn_int32 | num_channel |
struct timeval | timestamp |
vrpn_int32 | channel_m_id |
int | status |
![]() | |
vrpn_Connection * | d_connection |
Connection that this object talks to. More... | |
char * | d_servicename |
Name of this device, not including the connection part. More... | |
vrpn_int32 | d_sender_id |
Sender ID registered with the connection. More... | |
vrpn_int32 | d_text_message_id |
ID for text messages. More... | |
vrpn_int32 | d_ping_message_id |
Ask the server if they are there. More... | |
vrpn_int32 | d_pong_message_id |
Server telling that it is there. More... | |
![]() | |
vrpn_HidAcceptor * | _acceptor |
This is the HidAcceptor we use when reconnecting. More... | |
bool | _working |
vrpn_uint16 | _vendor |
vrpn_uint16 | _product |
int | _interface |
Additional Inherited Members | |
![]() | |
bool | shutup |
vrpn_MESSAGEHANDLER | handler |
vrpn_int32 | sender |
vrpn_int32 | type |
void * | userdata |
![]() | |
static int | encode_text_message_to_buffer (char *buf, vrpn_TEXT_SEVERITY severity, vrpn_uint32 level, const char *msg) |
Encodes the body of the text message into a buffer, preparing for sending. More... | |
static int | decode_text_message_from_buffer (char *msg, vrpn_TEXT_SEVERITY *severity, vrpn_uint32 *level, const char *buf) |
Decodes the body of the text message from a buffer from the connection. More... | |
5th Dimension Technologies (5dt) "Ultra" USB data glove driver
This supports connecting to 5dt gloves over USB that present a HID device interface. This includes the 5DT Data Glove 5 Ultra and the 5DT Data Glove 14 Ultra, as well as either of those using the wireless kit. (I, Ryan Pavlik, have only tested this with the 5DT Data Glove 5 Ultras since that's all I have access to, but support based on what I would expect from a 14-sensor glove is included.)
Each sensor's raw values are exposed as an analog channel (5 or 14) between 0.0 and 1.0. Note that there is pretty significant need for calibration since the used range within the entire representable range is pretty small and seemingly device-dependent. Your code will probably have to at least perform some scaling based on establishing a "min" and "max" for each sensor.
For serial 5dt glove access, see the vrpn_5DT16 (for the 16-sensor model) and vrpn_5dt (for the 5-sensor wired or wireless model, in vrpn_Analog_5dt.h) classes.
The inherited method vrpn_Analog::getNumChannels()
This base class does all the work: the inherited classes just create the right filters and input for the base class.
Definition at line 51 of file vrpn_Analog_5dtUSB.h.
|
virtual |
Destructor.
Definition at line 77 of file vrpn_Analog_5dtUSB.C.
References vrpn_HidInterface::_acceptor.
|
protected |
Protected constructor: use a subclass to specify the glove variant to use.
Definition at line 53 of file vrpn_Analog_5dtUSB.C.
References _timestamp, vrpn_Analog::channel, vrpn_Analog::last, vrpn_Analog::num_channel, and vrpn_gettimeofday.
std::string vrpn_Analog_5dtUSB::get_description | ( | ) | const |
Returns a string description of the device we've connected to. Used internally, but also possibly useful externally.
Definition at line 80 of file vrpn_Analog_5dtUSB.C.
References vrpn_HidInterface::product().
Referenced by mainloop().
|
inline |
Accessor to know if this is a left hand glove.
Definition at line 64 of file vrpn_Analog_5dtUSB.h.
|
inline |
Accessor to know if this is a right hand glove.
Definition at line 67 of file vrpn_Analog_5dtUSB.h.
|
virtual |
Standard VRPN mainloop method.
Implements vrpn_BaseClass.
Definition at line 144 of file vrpn_Analog_5dtUSB.C.
References _timestamp, _wasConnected, vrpn_HidInterface::connected(), get_description(), vrpn_BaseClassUnique::send_text_message(), vrpn_BaseClassUnique::server_mainloop(), vrpn_HidInterface::update(), vrpn_gettimeofday, and vrpn_TEXT_NORMAL.
|
protectedvirtual |
Extracts the sensor values from each report.
Implements vrpn_HidInterface.
Definition at line 106 of file vrpn_Analog_5dtUSB.C.
References _rawVals, vrpn_Analog::channel, vrpn_Analog::num_channel, report_changes(), vrpn_BaseClassUnique::send_text_message(), vrpn_gettimeofday, and vrpn_TEXT_WARNING.
|
protected |
Send report whether or not changed.
Definition at line 165 of file vrpn_Analog_5dtUSB.C.
References _timestamp, vrpn_Analog::report(), and vrpn_Analog::timestamp.
|
protected |
Send report iff changed.
Definition at line 159 of file vrpn_Analog_5dtUSB.C.
References _timestamp, vrpn_Analog::report_changes(), and vrpn_Analog::timestamp.
Referenced by on_data_received().
|
protected |
Flag for left handedness.
Definition at line 84 of file vrpn_Analog_5dtUSB.h.
|
protected |
The raw values extracted from the report: which ones we use to set analog channels varies based on the kind of device this is.
Definition at line 81 of file vrpn_Analog_5dtUSB.h.
Referenced by on_data_received().
|
protected |
Timestamp updated during mainloop()
Definition at line 74 of file vrpn_Analog_5dtUSB.h.
Referenced by mainloop(), report(), report_changes(), and vrpn_Analog_5dtUSB().
|
protected |
Flag indicating whether we were connected last time through the mainloop. Used to send a "normal"-severity message when we connect with info on the device.
Definition at line 89 of file vrpn_Analog_5dtUSB.h.
Referenced by mainloop().