vrpn  07.33
Virtual Reality Peripheral Network
vrpn_Saitek_Controller_Raw.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <stddef.h> // for size_t
4 
5 #include "vrpn_Analog.h" // for vrpn_Analog
6 #include "vrpn_BaseClass.h" // for vrpn_BaseClass
7 #include "vrpn_Button.h" // for vrpn_Button_Filter
8 #include "vrpn_Configure.h" // for VRPN_CALLBACK, VRPN_USE_HID
9 #include "vrpn_Connection.h" // for vrpn_CONNECTION_LOW_LATENCY, etc
10 #include "vrpn_Dial.h" // for vrpn_Dial
11 #include "vrpn_HumanInterface.h" // for vrpn_HidAcceptor (ptr only), etc
12 #include "vrpn_Shared.h" // for timeval
13 #include "vrpn_Types.h" // for vrpn_uint8, vrpn_uint32
14 
15 #if defined(VRPN_USE_HID)
16 
17 // Device drivers for the Saitek Controller Raw USB line of products
18 // Currently supported: ST290 Pro
19 //
20 // Exposes three major VRPN device classes: Button, Analog, Dial (as appropriate).
21 // All models expose Buttons for the keys on the device.
22 // Button 0 is the programming switch; it is set if the switch is in the "red" position.
23 //
24 
26 public:
27  vrpn_Saitek_Controller_Raw(vrpn_HidAcceptor *filter, const char *name, vrpn_Connection *c = 0);
28  virtual ~vrpn_Saitek_Controller_Raw(void);
29 
30  virtual void mainloop(void) = 0;
31 protected:
32  // Set up message handlers, etc.
33  void init_hid(void);
34  void on_data_received(size_t bytes, vrpn_uint8 *buffer);
35 
36  static int VRPN_CALLBACK on_connect(void *thisPtr, vrpn_HANDLERPARAM p);
37  static int VRPN_CALLBACK on_last_disconnect(void *thisPtr, vrpn_HANDLERPARAM p);
38 
39  virtual void decodePacket(size_t bytes, vrpn_uint8 *buffer) = 0;
40  struct timeval _timestamp;
42 
43  // No actual types to register, derived classes will be buttons, analogs, and/or dials
44  int register_types(void) { return (0); }
45 };
46 
48 {
49 public:
50  vrpn_Saitek_ST290_Pro(const char *name, vrpn_Connection *c = 0);
51  virtual ~vrpn_Saitek_ST290_Pro(void) {};
52 
53  virtual void mainloop(void);
54 protected:
55  // Send report iff changed
56  void report_changes (vrpn_uint32 class_of_service = vrpn_CONNECTION_LOW_LATENCY);
57  // Send report whether or not changed
58  void report (vrpn_uint32 class_of_service = vrpn_CONNECTION_LOW_LATENCY);
59 
60  void decodePacket(size_t bytes, vrpn_uint8 *buffer);
61 };
62 
63 // end of VRPN_USE_HID
64 #else
66 #endif
const vrpn_uint32 vrpn_CONNECTION_LOW_LATENCY
int register_types(void)
Register the types of messages this device sends/receives. Return 0 on success, -1 on fail...
vrpn_Saitek_Controller_Raw(vrpn_HidAcceptor *filter, const char *name, vrpn_Connection *c=0)
static int VRPN_CALLBACK on_last_disconnect(void *thisPtr, vrpn_HANDLERPARAM p)
vrpn_Saitek_ST290_Pro(const char *name, vrpn_Connection *c=0)
virtual void decodePacket(size_t bytes, vrpn_uint8 *buffer)=0
void decodePacket(size_t bytes, vrpn_uint8 *buffer)
void on_data_received(size_t bytes, vrpn_uint8 *buffer)
Derived class reimplements this callback.
Generic connection class not specific to the transport mechanism.
#define VRPN_CALLBACK
#define VRPN_API
All types of client/server/peer objects in VRPN should be derived from the vrpn_BaseClass type descri...
virtual void report_changes(void)
Definition: vrpn_Button.C:382
static int VRPN_CALLBACK on_connect(void *thisPtr, vrpn_HANDLERPARAM p)
virtual void report(void)
Definition: vrpn_Dial.C:82
This structure is what is passed to a vrpn_Connection message callback.
virtual void mainloop(void)=0
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
virtual void mainloop(void)
Called once through each main loop iteration to handle updates. Remote object mainloop() should call ...
Class from which all user-level (and other) classes that communicate with vrpn_Connections should der...
All button servers should derive from this class, which provides the ability to turn any of the butto...
Definition: vrpn_Button.h:65