10#if defined(VRPN_USE_HID)
15static const vrpn_uint16 CONTOUR_VENDOR = 0x0b33;
16static const vrpn_uint16 CONTOUR_SHUTTLEXPRESS = 0x0020;
17static const vrpn_uint16 CONTOUR_SHUTTLEPROV2 = 0x0030;
19static void normalize_axis(
const unsigned int value,
const short deadzone,
const vrpn_float64 scale, vrpn_float64& channel) {
20 channel = (
static_cast<float>(value) - 128.0f);
21 if (fabs(channel) < deadzone)
30 if (channel < -1.0) { channel = -1.0; }
31 if (channel > 1.0) { channel = 1.0; }
35 vrpn_uint16 vendor, vrpn_uint16 product)
51 fprintf(stderr,
"vrpn_Contour::~vrpn_Contour(): delete failed\n");
99 struct timeval current_time;
180 normalize_axis((
unsigned int)((
static_cast<float>(
static_cast<vrpn_int8
>(buffer[0])) * 128.0f / 7.0f) + 128.0f), 0, 1.0f,
channel[0]);
187 for (
int btn = 0; btn < 4; btn++) {
188 vrpn_uint8 mask =
static_cast<vrpn_uint8
>((1 << (btn % 8)) << 4);
189 buttons[btn] = ((value & mask) != 0);
193 for (
int btn = 0; btn < 1; btn++) {
194 vrpn_uint8 mask =
static_cast<vrpn_uint8
>(1 << (btn % 8));
195 buttons[btn + 4] = ((value & mask) != 0);
198 fprintf(stderr,
"vrpn_Contour_ShuttleXpress: Found a corrupted report; # total bytes = %u\n",
static_cast<unsigned>(bytes));
225 struct timeval current_time;
316 normalize_axis((
unsigned int)((
static_cast<float>(
static_cast<vrpn_int8
>(buffer[0])) * 128.0f / 7.0f) + 128.0f), 0, 1.0f,
channel[0]);
328 for (
int btn = 0; btn <= 15; btn++) {
329 vrpn_uint8 *offset, mask;
331 offset = buffer + btn / 8 + 3;
332 mask =
static_cast<vrpn_uint8
>(1 << (btn % 8));
334 buttons[btn] = (*offset & mask) != 0;
338 fprintf(stderr,
"vrpn_Contour_ShuttlePROv2: Found a corrupted report; # total bytes = %u\n",
static_cast<unsigned>(bytes));
vrpn_float64 last[vrpn_CHANNEL_MAX]
vrpn_float64 channel[vrpn_CHANNEL_MAX]
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 ...
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 val...
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.
vrpn_Connection * d_connection
Connection that this object talks to.
void server_mainloop(void)
Handles functions that all servers should provide in their mainloop() (ping/pong, for example) Should...
Class from which all user-level (and other) classes that communicate with vrpn_Connections should der...
Generic connection class not specific to the transport mechanism.
virtual vrpn_int32 register_message_type(const char *name)
virtual void mainloop(void)
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
vrpn_Contour_ShuttlePROv2(const char *name, vrpn_Connection *c=0)
void decodePacket(size_t bytes, vrpn_uint8 *buffer)
vrpn_Contour_ShuttleXpress(const char *name, vrpn_Connection *c=0)
void decodePacket(size_t bytes, vrpn_uint8 *buffer)
virtual void mainloop(void)
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
virtual void decodePacket(size_t bytes, vrpn_uint8 *buffer)=0
virtual ~vrpn_Contour(void)
void on_data_received(size_t bytes, vrpn_uint8 *buffer)
Derived class reimplements this callback.
static int VRPN_CALLBACK on_last_disconnect(void *thisPtr, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK on_connect(void *thisPtr, vrpn_HANDLERPARAM p)
vrpn_Contour(vrpn_HidAcceptor *filter, const char *name, vrpn_Connection *c=0, vrpn_uint16 vendor=0, vrpn_uint16 product=0)
struct timeval _timestamp
vrpn_HidAcceptor * _filter
virtual void report_changes(void)
vrpn_float64 dials[vrpn_DIAL_MAX]
virtual void report(void)
virtual void update()
Polls the device buffers and causes on_data_received callbacks if appropriate You NEED to call this f...
Accepts any device with the given vendor and product IDs.
This structure is what is passed to a vrpn_Connection message callback.
const char * vrpn_dropped_last_connection
const char * vrpn_got_connection
unsigned long vrpn_TimevalDuration(struct timeval endT, struct timeval startT)
Return number of microseconds between startT and endT.
#define vrpn_gettimeofday