1#ifndef VRPN_DIRECTXFFJOYSTICK_H
2#define VRPN_DIRECTXFFJOYSTICK_H
4#include "vrpn_Configure.h"
6#if defined(_WIN32) && defined(VRPN_USE_DIRECTINPUT)
7#ifndef DIRECTINPUT_VERSION
8#define DIRECTINPUT_VERSION 0x0800
11#include "vrpn_Connection.h"
12#include "vrpn_Analog.h"
13#include "vrpn_Button.h"
14#include "vrpn_ForceDevice.h"
15#include "vrpn_ForceDeviceServer.h"
20class VRPN_API vrpn_DirectXFFJoystick:
public vrpn_Analog
27 double readRate = 60,
double forceRate = 200);
29 ~vrpn_DirectXFFJoystick ();
43 struct timeval _timestamp;
44 struct timeval _forcetime;
45 struct timeval _last_report;
53 virtual int get_report(
void);
54 void clear_values(
void);
58 = vrpn_CONNECTION_LOW_LATENCY);
60 virtual void report (vrpn_uint32 class_of_service
61 = vrpn_CONNECTION_LOW_LATENCY);
66 void send_normalized_force(
double fx,
double fy);
68 HRESULT InitDirectJoystick(
void );
69 LPDIRECTINPUT8 _DirectInput;
70 LPDIRECTINPUTDEVICE8 _Joystick;
71 LPDIRECTINPUTEFFECT _ForceEffect;
72 static BOOL CALLBACK EnumJoysticksCallback(
const DIDEVICEINSTANCE* pdidInstance, VOID* selfPtr );
73 static BOOL CALLBACK EnumObjectsCallback(
const DIDEVICEOBJECTINSTANCE* pdidoi, VOID* selfPtr );
75 static int VRPN_CALLBACK handle_last_connection_dropped(
void *selfPtr,
vrpn_HANDLERPARAM p);
76 static int VRPN_CALLBACK handle_plane_change_message(
void *selfPtr,
vrpn_HANDLERPARAM p);
77 static int VRPN_CALLBACK handle_forcefield_change_message(
void *selfPtr,
vrpn_HANDLERPARAM p);
84 virtual bool addObject(vrpn_int32 objNum, vrpn_int32 ParentNum=-1) {
86 vrpn_gettimeofday(&now, NULL);
87 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
92 virtual bool addObjectExScene(vrpn_int32 objNum) {
94 vrpn_gettimeofday(&now, NULL);
95 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
100 virtual bool setVertex(vrpn_int32 objNum, vrpn_int32 vertNum,vrpn_float32 x,vrpn_float32 y,vrpn_float32 z) {
102 vrpn_gettimeofday(&now, NULL);
103 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
109 virtual bool setNormal(vrpn_int32 objNum, vrpn_int32 normNum,vrpn_float32 x,vrpn_float32 y,vrpn_float32 z) {
111 vrpn_gettimeofday(&now, NULL);
112 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
116 virtual bool setTriangle(vrpn_int32 objNum, vrpn_int32 triNum,vrpn_int32 vert0,vrpn_int32 vert1,vrpn_int32 vert2,
117 vrpn_int32 norm0=-1,vrpn_int32 norm1=-1,vrpn_int32 norm2=-1) {
119 vrpn_gettimeofday(&now, NULL);
120 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
124 virtual bool removeTriangle(vrpn_int32 objNum, vrpn_int32 triNum) {
126 vrpn_gettimeofday(&now, NULL);
127 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
133 virtual bool updateTrimeshChanges(vrpn_int32 objNum,vrpn_float32 kspring, vrpn_float32 kdamp, vrpn_float32 fdyn, vrpn_float32 fstat) {
135 vrpn_gettimeofday(&now, NULL);
136 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
141 virtual bool setTrimeshType(vrpn_int32 objNum,vrpn_int32 type) {
143 vrpn_gettimeofday(&now, NULL);
144 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
149 virtual bool setTrimeshTransform(vrpn_int32 objNum, vrpn_float32 homMatrix[16]) {
151 vrpn_gettimeofday(&now, NULL);
152 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
157 virtual bool setObjectPosition(vrpn_int32 objNum, vrpn_float32 Pos[3]) {
159 vrpn_gettimeofday(&now, NULL);
160 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
165 virtual bool setObjectOrientation(vrpn_int32 objNum, vrpn_float32 axis[3], vrpn_float32 angle) {
167 vrpn_gettimeofday(&now, NULL);
168 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
173 virtual bool setObjectScale(vrpn_int32 objNum, vrpn_float32 Scale[3]) {
175 vrpn_gettimeofday(&now, NULL);
176 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
181 virtual bool removeObject(vrpn_int32 objNum) {
183 vrpn_gettimeofday(&now, NULL);
184 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
188 virtual bool clearTrimesh(vrpn_int32 objNum) {
190 vrpn_gettimeofday(&now, NULL);
191 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
197 virtual bool moveToParent(vrpn_int32 objNum, vrpn_int32 ParentNum) {
199 vrpn_gettimeofday(&now, NULL);
200 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
205 virtual bool setHapticOrigin(vrpn_float32 Pos[3], vrpn_float32 axis[3], vrpn_float32 angle) {
207 vrpn_gettimeofday(&now, NULL);
208 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
213 virtual bool setHapticScale(vrpn_float32 Scale) {
215 vrpn_gettimeofday(&now, NULL);
216 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
221 virtual bool setSceneOrigin(vrpn_float32 Pos[3], vrpn_float32 axis[3], vrpn_float32 angle) {
223 vrpn_gettimeofday(&now, NULL);
224 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
229 virtual bool setObjectIsTouchable(vrpn_int32 objNum, vrpn_bool IsTouchable=
true) {
231 vrpn_gettimeofday(&now, NULL);
232 send_text_message(
"vrpn_DirectXFFJoystick: Called a function not supported",now, vrpn_TEXT_ERROR);
virtual void report(vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY, const struct timeval time=vrpn_ANALOG_NOW)
virtual void report_changes(vrpn_uint32 class_of_service=vrpn_CONNECTION_LOW_LATENCY, const struct timeval time=vrpn_ANALOG_NOW)
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
virtual void mainloop()=0
Generic connection class not specific to the transport mechanism.
定义 vrpn_Connection.h:562
定义 vrpn_ForceDeviceServer.h:27
virtual bool moveToParent(vrpn_int32 objNum, vrpn_int32 ParentNum)=0
This structure is what is passed to a vrpn_Connection message callback.
定义 vrpn_Connection.h:41