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; }
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]
vrpn_Analog(const char *name, vrpn_Connection *c=NULL)
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...
vrpn_BaseClass(const char *name, vrpn_Connection *c=NULL)
Names the device and assigns or opens connection, calls registration methods.
Generic connection class not specific to the transport mechanism.
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)
vrpn_Dial(const char *name, vrpn_Connection *c=NULL)
vrpn_uint16 product() const
Returns USB product ID of connected device May not contain valid if an already-open device was provid...
vrpn_HidInterface(vrpn_HidAcceptor *acceptor, vrpn_uint16 vendor=0, vrpn_uint16 product=0, hid_device *device=NULL)
Constructor If we already have a HID device from some other source, it can be passed and we'll take o...
virtual void update()
Polls the device buffers and causes on_data_received callbacks if appropriate You NEED to call this f...
vrpn_uint16 vendor() const
Returns USB vendor ID of connected device May not contain valid if an already-open device was provide...
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