11 #if defined(VRPN_USE_HID) 16 static const vrpn_uint16 GRIFFIN_VENDOR = 0x077d;
17 static const vrpn_uint16 GRIFFIN_POWERMATE = 0x0410;
19 static 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; }
34 static void normalize_axes(
const unsigned int x,
const unsigned int y,
const short deadzone,
const vrpn_float64 scale, vrpn_float64& channelX, vrpn_float64& channelY) {
35 normalize_axis(x, deadzone, scale, channelX);
36 normalize_axis(y, deadzone, scale, channelY);
89 memset(channel, 0,
sizeof(channel));
97 struct timeval current_time;
185 dials[0] =
static_cast<vrpn_int8
>(buffer[1]);
188 normalize_axis(buffer[1], 5, 1.0f, channel[0]);
195 for (
int btn = 0; btn < 1; btn++) {
196 vrpn_uint8 mask =
static_cast<vrpn_uint8
>(1 << (btn % 8));
197 buttons[btn] = ((value & mask) != 0);
200 fprintf(stderr,
"vrpn_Griffin_PowerMate: Found a corrupted report; # total bytes = %u\n", static_cast<unsigned>(bytes));
struct timeval _timestamp
void server_mainloop(void)
Handles functions that all servers should provide in their mainloop() (ping/pong, for example) Should...
vrpn_Griffin_PowerMate(const char *name, vrpn_Connection *c=0)
void decodePacket(size_t bytes, vrpn_uint8 *buffer)
vrpn_Griffin(vrpn_HidAcceptor *filter, const char *name, vrpn_Connection *c=0)
virtual void mainloop(void)
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
Accepts any device with the given vendor and product IDs.
Generic connection class not specific to the transport mechanism.
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 decodePacket(size_t bytes, vrpn_uint8 *buffer)=0
const char * vrpn_dropped_last_connection
static int VRPN_CALLBACK on_last_disconnect(void *thisPtr, vrpn_HANDLERPARAM p)
virtual void report(void)
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.
This structure is what is passed to a vrpn_Connection message callback.
void on_data_received(size_t bytes, vrpn_uint8 *buffer)
Derived class reimplements this callback.
const char * vrpn_got_connection
virtual ~vrpn_Griffin(void)
#define vrpn_gettimeofday
virtual void update()
Polls the device buffers and causes on_data_received callbacks if appropriate You NEED to call this f...
Class from which all user-level (and other) classes that communicate with vrpn_Connections should der...
unsigned long vrpn_TimevalDuration(struct timeval endT, struct timeval startT)
Return number of microseconds between startT and endT.
virtual vrpn_int32 register_message_type(const char *name)
vrpn_HidAcceptor * _filter
static int VRPN_CALLBACK on_connect(void *thisPtr, vrpn_HANDLERPARAM p)
vrpn_float64 last[vrpn_CHANNEL_MAX]
vrpn_float64 dials[vrpn_DIAL_MAX]