vrpn 07.35
Virtual Reality Peripheral Network
|
This provides an interface to devices powered by Hillcrest Lab's Freespace. More...
#include <vrpn_Freespace.h>
Public Member Functions | |
virtual | ~vrpn_Freespace (void) |
virtual void | mainloop (void) |
Main loop. | |
![]() | |
vrpn_Tracker_Server (const char *name, vrpn_Connection *c, vrpn_int32 sensors=1) | |
virtual void | mainloop () |
This function should be called each time through app mainloop. | |
virtual int | report_pose (const int sensor, const struct timeval t, const vrpn_float64 position[3], const vrpn_float64 quaternion[4], const vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY) |
These functions should be called to report changes in state, once per sensor. | |
virtual int | report_pose_velocity (const int sensor, const struct timeval t, const vrpn_float64 position[3], const vrpn_float64 quaternion[4], const vrpn_float64 interval, const vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY) |
virtual int | report_pose_acceleration (const int sensor, const struct timeval t, const vrpn_float64 position[3], const vrpn_float64 quaternion[4], const vrpn_float64 interval, const vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY) |
![]() | |
vrpn_Tracker (const char *name, vrpn_Connection *c=NULL, const char *tracker_cfg_file_name=NULL) | |
virtual | ~vrpn_Tracker (void) |
int | read_config_file (FILE *config_file, const char *tracker_name) |
void | print_latest_report (void) |
int | register_server_handlers (void) |
void | get_local_t2r (vrpn_float64 *vec, vrpn_float64 *quat) |
void | get_local_u2s (vrpn_int32 sensor, vrpn_float64 *vec, vrpn_float64 *quat) |
![]() | |
vrpn_BaseClass (const char *name, vrpn_Connection *c=NULL) | |
Names the device and assigns or opens connection, calls registration methods. | |
virtual | ~vrpn_BaseClass () |
virtual void | mainloop ()=0 |
Called once through each main loop iteration to handle updates. Remote object mainloop() should call client_mainloop() and then call d_connection->mainloop(). Server object mainloop() should service the device and then call server_mainloop(), but should not normally call d_connection->mainloop(). | |
![]() | |
vrpn_BaseClassUnique () | |
virtual | ~vrpn_BaseClassUnique () |
Unregister all of the message handlers that were to be autodeleted. | |
vrpn_Connection * | connectionPtr () |
Returns a pointer to the connection this object is using. | |
![]() | |
virtual void | set_momentary (vrpn_int32 which_button) |
virtual void | set_toggle (vrpn_int32 which_button, vrpn_int32 current_state) |
virtual void | set_all_momentary (void) |
virtual void | set_all_toggle (vrpn_int32 default_state) |
void | set_alerts (vrpn_int32) |
![]() | |
vrpn_Button (const char *name, vrpn_Connection *c=NULL) | |
virtual | ~vrpn_Button (void) |
void | print (void) |
virtual void | set_momentary (vrpn_int32 which_button) |
virtual void | set_toggle (vrpn_int32 which_button, vrpn_int32 current_state) |
virtual void | set_all_momentary (void) |
virtual void | set_all_toggle (vrpn_int32 default_state) |
![]() | |
vrpn_Dial (const char *name, vrpn_Connection *c=NULL) | |
Static Public Member Functions | |
static vrpn_Freespace * | create (const char *name, vrpn_Connection *conn, int device_index=0, bool send_body_frames=false, bool send_user_frames=true) |
Create a freespace server using the given FreespaceDeviceId. | |
![]() | |
static int VRPN_CALLBACK | handle_t2r_request (void *userdata, vrpn_HANDLERPARAM p) |
static int VRPN_CALLBACK | handle_u2s_request (void *userdata, vrpn_HANDLERPARAM p) |
static int VRPN_CALLBACK | handle_workspace_request (void *userdata, vrpn_HANDLERPARAM p) |
Protected Attributes | |
FreespaceDeviceId | _freespaceDevice |
FreespaceDeviceInfo | _deviceInfo |
vrpn_float64 | _lastBodyFrameTime |
![]() | |
vrpn_int32 | position_m_id |
vrpn_int32 | velocity_m_id |
vrpn_int32 | accel_m_id |
vrpn_int32 | tracker2room_m_id |
vrpn_int32 | unit2sensor_m_id |
vrpn_int32 | request_t2r_m_id |
vrpn_int32 | request_u2s_m_id |
vrpn_int32 | request_workspace_m_id |
vrpn_int32 | workspace_m_id |
vrpn_int32 | update_rate_id |
vrpn_int32 | connection_dropped_m_id |
vrpn_int32 | reset_origin_m_id |
vrpn_int32 | d_sensor |
vrpn_float64 | pos [3] |
vrpn_float64 | d_quat [4] |
vrpn_float64 | vel [3] |
vrpn_float64 | vel_quat [4] |
vrpn_float64 | vel_quat_dt |
vrpn_float64 | acc [3] |
vrpn_float64 | acc_quat [4] |
vrpn_float64 | acc_quat_dt |
struct timeval | timestamp |
vrpn_int32 | frame_count |
struct timeval | watchdog_timestamp |
vrpn_float64 | tracker2room [3] |
vrpn_float64 | tracker2room_quat [4] |
vrpn_int32 | num_sensors |
vrpn_Tracker_Pos * | unit2sensor |
vrpn_Tracker_Quat * | unit2sensor_quat |
unsigned | num_unit2sensors |
vrpn_float64 | workspace_min [3] |
vrpn_float64 | workspace_max [3] |
int | status |
![]() | |
vrpn_Connection * | d_connection |
Connection that this object talks to. | |
char * | d_servicename |
Name of this device, not including the connection part. | |
vrpn_int32 | d_sender_id |
Sender ID registered with the connection. | |
vrpn_int32 | d_text_message_id |
ID for text messages. | |
vrpn_int32 | d_ping_message_id |
Ask the server if they are there. | |
vrpn_int32 | d_pong_message_id |
Server telling that it is there. | |
![]() | |
int | send_alerts |
vrpn_int32 | alert_message_id |
![]() | |
unsigned char | buttons [vrpn_BUTTON_MAX_BUTTONS] |
unsigned char | lastbuttons [vrpn_BUTTON_MAX_BUTTONS] |
vrpn_int32 | minrate [vrpn_BUTTON_MAX_BUTTONS] |
vrpn_int32 | num_buttons |
struct timeval | timestamp |
vrpn_int32 | change_message_id |
vrpn_int32 | states_message_id |
vrpn_int32 | admin_message_id |
![]() | |
vrpn_float64 | dials [vrpn_DIAL_MAX] |
vrpn_int32 | num_dials |
struct timeval | timestamp |
vrpn_int32 | change_m_id |
Additional Inherited Members | |
![]() | |
bool | shutup |
![]() | |
vrpn_int32 | buttonstate [vrpn_BUTTON_MAX_BUTTONS] |
![]() | |
bool | ensure_enough_unit2sensors (unsigned num) |
virtual int | register_types (void) |
Register the types of messages this device sends/receives. Return 0 on success, -1 on fail. | |
virtual int | encode_to (char *buf) |
virtual int | encode_vel_to (char *buf) |
virtual int | encode_acc_to (char *buf) |
virtual int | encode_tracker2room_to (char *buf) |
Encodes the "Tracker to Room" transformation into the buffer specified. | |
virtual int | encode_unit2sensor_to (char *buf) |
Encodes the "Unit to Sensor" transformation into the buffer specified. | |
virtual int | encode_workspace_to (char *buf) |
![]() | |
virtual int | init (void) |
Initialize things that the constructor can't. Returns 0 on success, -1 on failure. | |
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. | |
virtual int | register_types (void)=0 |
Register the types of messages this device sends/receives. Return 0 on success, -1 on fail. | |
![]() | |
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. | |
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. | |
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. | |
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() | |
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() | |
![]() | |
vrpn_Button_Filter (const char *, vrpn_Connection *c=NULL) | |
virtual vrpn_int32 | encode_states_to (char *buf) |
Encode a message describing the state of all buttons. | |
virtual void | report_changes (void) |
![]() | |
virtual int | register_types (void) |
Register the types of messages this device sends/receives. Return 0 on success, -1 on fail. | |
virtual void | report_changes (void) |
virtual void | report_states (void) |
virtual vrpn_int32 | encode_to (char *buf, vrpn_int32 button, vrpn_int32 state) |
Encode a message describing the new state of a button. | |
virtual vrpn_int32 | encode_states_to (char *buf) |
Encode a message describing the state of all buttons. | |
![]() | |
virtual int | register_types (void) |
Register the types of messages this device sends/receives. Return 0 on success, -1 on fail. | |
virtual vrpn_int32 | encode_to (char *buf, vrpn_int32 buflen, vrpn_int32 dial, vrpn_float64 delta) |
virtual void | report_changes (void) |
virtual void | report (void) |
![]() | |
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. | |
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. | |
![]() | |
static int VRPN_CALLBACK | handle_ping_message (void *userdata, vrpn_HANDLERPARAM p) |
This provides an interface to devices powered by Hillcrest Lab's Freespace.
Freespace is a sensor technology for tracking relative movement of a handheld device. A Freespace device exposes itself as a combination of 3 VRPN interfaces. as a tracker, with linear acceleration and angular velocity, as a Dial, with a single dial for an on-board scroll wheel (loop pointer) and as a Button for the various buttons on the device.
The implementation here uses the synchronous API to read data from the device, but could fairly easily be modified to use the asynchronous API. This may be desired as a cleaner way to provide access to multiple Freespace devices and/or handle hot-plugging of devices (such as the loop, which uses a USB dongle for communications).
More info on libfreespace can be found at https://launchpad.net/libfreespace or http://hillcrestlabs.com/products/tools/
Definition at line 33 of file vrpn_Freespace.h.
|
virtual |
Definition at line 206 of file vrpn_Freespace.C.
References _freespaceDevice.
|
static |
Create a freespace server using the given FreespaceDeviceId.
This factory will automatically initialize the libfreespace library as needed. This method will open the device and configure it to receive relavant messages. See the test_freespace.C, or libfreespace-examples, for steps to initialize the library and enumerate devices.
Definition at line 124 of file vrpn_Freespace.C.
|
virtual |
Main loop.
This will try to read data from the loop, and send appropriate messages to a VRPN client.
Reimplemented from vrpn_Tracker_Server.
Definition at line 166 of file vrpn_Freespace.C.
References _freespaceDevice, vrpn_BaseClassUnique::send_text_message(), vrpn_BaseClassUnique::server_mainloop(), vrpn_Dial::timestamp, vrpn_gettimeofday, and vrpn_TEXT_WARNING.
|
protected |
Definition at line 93 of file vrpn_Freespace.h.
|
protected |
Definition at line 92 of file vrpn_Freespace.h.
Referenced by mainloop(), and ~vrpn_Freespace().
|
protected |
Definition at line 94 of file vrpn_Freespace.h.