vrpn 07.35
Virtual Reality Peripheral Network
Loading...
Searching...
No Matches
vrpn_ForceDeviceServer.C
Go to the documentation of this file.
1// vrpn_ForceDeviceServer.cpp: implementation of the vrpn_ForceDeviceServer
2// class.
3//
5
6#include <stdio.h> // for fprintf, stderr, NULL
7
8#include "vrpn_Connection.h" // for vrpn_HANDLERPARAM, etc
10
12// Construction/Destruction
14
17 : vrpn_ForceDevice(name, c)
18{
22 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
24 }
28 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
30 }
34 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
36 }
40 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
42 }
46 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
48 }
52 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
54 }
58 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
60 }
64 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
66 }
70 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
72 }
76 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
78 }
82 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
84 }
88 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
90 }
94 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
96 }
100 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
102 }
106 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
108 }
112 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
114 }
118 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
120 }
124 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
126 }
130 fprintf(stderr, "vrpn_Phantom:can't register handler\n");
132 }
133}
134
136
139{
141
142 vrpn_int32 objNum, parentNum;
143 decode_addObject(p.buffer, p.payload_len, &objNum, &parentNum);
144
145#ifdef VRPN_USE_HDAPI
146 struct timeval now;
147 vrpn_gettimeofday(&now, NULL);
148 me->send_text_message("Trimesh not supported under HDAPI", now,
150 return 0;
151#else
152 if (me->addObject(objNum, parentNum)) {
153 return 0;
154 }
155 else {
156 fprintf(stderr, "vrpn_Phantom: error in trimesh::addObject\n");
157 return -1;
158 }
159#endif
160}
161
164{
166
167 vrpn_int32 objNum;
169
170#ifdef VRPN_USE_HDAPI
171 struct timeval now;
172 vrpn_gettimeofday(&now, NULL);
173 me->send_text_message("Trimesh not supported under HDAPI", now,
175 return 0;
176#else
177 if (me->addObjectExScene(objNum)) {
178 return 0;
179 }
180 else {
181 fprintf(stderr, "vrpn_Phantom: error in trimesh::addObjectExScene\n");
182 return -1;
183 }
184#endif
185}
186
189{
191
192 vrpn_int32 temp;
193 vrpn_int32 objNum;
194 int vertNum;
195 float x, y, z;
196 decode_vertex(p.buffer, p.payload_len, &objNum, &temp, &x, &y, &z);
197 vertNum = temp;
198
199#ifdef VRPN_USE_HDAPI
200 struct timeval now;
201 vrpn_gettimeofday(&now, NULL);
202 me->send_text_message("Trimesh not supported under HDAPI", now,
204 return 0;
205#else
206 if (me->setVertex(objNum, vertNum, x, y, z)) {
207 return 0;
208 }
209 else {
210 fprintf(stderr, "vrpn_Phantom: error in trimesh::setVertex\n");
211 return -1;
212 }
213#endif
214}
215
218{
220
221 vrpn_int32 temp;
222 vrpn_int32 objNum;
223 int normNum;
224 float x, y, z;
225
226 decode_normal(p.buffer, p.payload_len, &objNum, &temp, &x, &y, &z);
227 normNum = temp;
228
229#ifdef VRPN_USE_HDAPI
230 struct timeval now;
231 vrpn_gettimeofday(&now, NULL);
232 me->send_text_message("Trimesh not supported under HDAPI", now,
234 return 0;
235#else
236 if (me->setNormal(objNum, normNum, x, y, z))
237 return 0;
238 else {
239 fprintf(stderr, "vrpn_Phantom: error in trimesh::setNormal\n");
240 return -1;
241 }
242#endif
243}
244
247{
249
250 vrpn_int32 triNum, v0, v1, v2, n0, n1, n2;
251 vrpn_int32 objNum;
252 decode_triangle(p.buffer, p.payload_len, &objNum, &triNum, &v0, &v1, &v2,
253 &n0, &n1, &n2);
254#ifdef VRPN_USE_HDAPI
255 struct timeval now;
256 vrpn_gettimeofday(&now, NULL);
257 me->send_text_message("Trimesh not supported under HDAPI", now,
259 return 0;
260#else
261 if (me->setTriangle(objNum, triNum, v0, v1, v2, n0, n1, n2))
262 return 0;
263 else {
264 fprintf(stderr, "vrpn_Phantom: error in trimesh::setTriangle\n");
265 return -1;
266 }
267#endif
268}
269
272{
274
275 vrpn_int32 triNum;
276 vrpn_int32 objNum;
277
278 decode_removeTriangle(p.buffer, p.payload_len, &objNum, &triNum);
279
280#ifdef VRPN_USE_HDAPI
281 struct timeval now;
282 vrpn_gettimeofday(&now, NULL);
283 me->send_text_message("Trimesh not supported under HDAPI", now,
285 return 0;
286#else
287 if (me->removeTriangle(objNum, triNum))
288 return 0;
289 else {
290 fprintf(stderr, "vrpn_Phantom: error in trimesh::removeTriangle\n");
291 return -1;
292 }
293#endif
294}
295
297 void *userdata, vrpn_HANDLERPARAM p)
298{
301 vrpn_int32 objNum;
302
306
307#ifdef VRPN_USE_HDAPI
308 struct timeval now;
309 vrpn_gettimeofday(&now, NULL);
310 me->send_text_message("Trimesh not supported under HDAPI", now,
312 return 0;
313#else
316
317 return 0;
318#endif
319}
320
323{
325
326 vrpn_int32 temp;
327 vrpn_int32 objNum;
328
329 decode_setTrimeshType(p.buffer, p.payload_len, &objNum, &temp);
330
331#ifdef VRPN_USE_HDAPI
332 struct timeval now;
333 vrpn_gettimeofday(&now, NULL);
334 me->send_text_message("Trimesh not supported under HDAPI", now,
336 return 0;
337#else
338 me->setTrimeshType(objNum, temp);
339 return 0;
340#endif
341}
342
345{
347
348 vrpn_int32 objNum;
349
351
352#ifdef VRPN_USE_HDAPI
353 struct timeval now;
354 vrpn_gettimeofday(&now, NULL);
355 me->send_text_message("Trimesh not supported under HDAPI", now,
357 return 0;
358#else
359 me->clearTrimesh(objNum);
360 return 0;
361#endif
362}
363
366{
367
369
370 float xformMatrix[16];
371 vrpn_int32 objNum;
372
373 decode_trimeshTransform(p.buffer, p.payload_len, &objNum, xformMatrix);
374
375#ifdef VRPN_USE_HDAPI
376 struct timeval now;
377 vrpn_gettimeofday(&now, NULL);
378 me->send_text_message("Trimesh not supported under HDAPI", now,
380 return 0;
381#else
382 me->setTrimeshTransform(objNum, xformMatrix);
383 return 0;
384#endif
385}
386
388 void *userdata, vrpn_HANDLERPARAM p)
389{
390
392
393 vrpn_int32 objNum;
394 vrpn_float32 pos[3];
395
396 decode_objectPosition(p.buffer, p.payload_len, &objNum, pos);
397
398#ifdef VRPN_USE_HDAPI
399 struct timeval now;
400 vrpn_gettimeofday(&now, NULL);
401 me->send_text_message("Trimesh not supported under HDAPI", now,
403 return 0;
404#else
405 me->setObjectPosition(objNum, pos);
406 return 0;
407#endif
408}
409
411 void *userdata, vrpn_HANDLERPARAM p)
412{
413
415
416 vrpn_int32 objNum;
417 vrpn_float32 axis[3];
418 vrpn_float32 angle;
419
420 decode_objectOrientation(p.buffer, p.payload_len, &objNum, axis, &angle);
421
422#ifdef VRPN_USE_HDAPI
423 struct timeval now;
424 vrpn_gettimeofday(&now, NULL);
425 me->send_text_message("Trimesh not supported under HDAPI", now,
427 return 0;
428#else
429 me->setObjectOrientation(objNum, axis, angle);
430 return 0;
431#endif
432}
433
436{
437
439
440 vrpn_float32 scale[3];
441 vrpn_int32 objNum;
442
443 decode_objectScale(p.buffer, p.payload_len, &objNum, scale);
444
445#ifdef VRPN_USE_HDAPI
446 struct timeval now;
447 vrpn_gettimeofday(&now, NULL);
448 me->send_text_message("Trimesh not supported under HDAPI", now,
450 return 0;
451#else
452 me->setObjectScale(objNum, scale);
453 return 0;
454#endif
455}
456
459{
460
462
463 vrpn_int32 objNum;
464
466
467#ifdef VRPN_USE_HDAPI
468 struct timeval now;
469 vrpn_gettimeofday(&now, NULL);
470 me->send_text_message("Trimesh not supported under HDAPI", now,
472 return 0;
473#else
474 me->removeObject(objNum);
475 return 0;
476#endif
477}
478
481{
482
484
485 vrpn_int32 objNum, parentNum;
486
487 decode_moveToParent(p.buffer, p.payload_len, &objNum, &parentNum);
488
489#ifdef VRPN_USE_HDAPI
490 struct timeval now;
491 vrpn_gettimeofday(&now, NULL);
492 me->send_text_message("Trimesh not supported under HDAPI", now,
494 return 0;
495#else
496 me->moveToParent(objNum, parentNum);
497 return 0;
498#endif
499}
500
503{
504
506
507 vrpn_float32 pos[3];
508 vrpn_float32 axis[3], angle;
509
510 decode_setHapticOrigin(p.buffer, p.payload_len, pos, axis, &angle);
511
512#ifdef VRPN_USE_HDAPI
513 struct timeval now;
514 vrpn_gettimeofday(&now, NULL);
515 me->send_text_message("Trimesh not supported under HDAPI", now,
517 return 0;
518#else
519 me->setHapticOrigin(pos, axis, angle);
520 return 0;
521#endif
522}
525{
526
528
529 vrpn_float32 scale;
530
532
533#ifdef VRPN_USE_HDAPI
534 struct timeval now;
535 vrpn_gettimeofday(&now, NULL);
536 me->send_text_message("Trimesh not supported under HDAPI", now,
538 return 0;
539#else
540 me->setHapticScale(scale);
541 return 0;
542#endif
543}
546{
547
549
550 vrpn_float32 pos[3];
551 vrpn_float32 axis[3], angle;
552
553 decode_setSceneOrigin(p.buffer, p.payload_len, pos, axis, &angle);
554
555#ifdef VRPN_USE_HDAPI
556 struct timeval now;
557 vrpn_gettimeofday(&now, NULL);
558 me->send_text_message("Trimesh not supported under HDAPI", now,
560 return 0;
561#else
562 me->setSceneOrigin(pos, axis, angle);
563 return 0;
564#endif
565}
567 void *userdata, vrpn_HANDLERPARAM p)
568{
569
571
572 vrpn_bool touch;
573 vrpn_int32 objNum;
574
575 decode_setObjectIsTouchable(p.buffer, p.payload_len, &objNum, &touch);
576
577#ifdef VRPN_USE_HDAPI
578 struct timeval now;
579 vrpn_gettimeofday(&now, NULL);
580 me->send_text_message("Trimesh not supported under HDAPI", now,
582 return 0;
583#else
584 me->setObjectIsTouchable(objNum, touch);
585 return 0;
586#endif
587}
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.
vrpn_int32 d_sender_id
Sender ID registered with the connection.
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.
Generic connection class not specific to the transport mechanism.
static int VRPN_CALLBACK handle_updateTrimeshChanges_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_setVertex_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_setObjectScale_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_addObject_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_setHapticOrigin_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_setHapticScale_message(void *userdata, vrpn_HANDLERPARAM p)
virtual bool setTriangle(vrpn_int32 objNum, vrpn_int32 triNum, vrpn_int32 vert0, vrpn_int32 vert1, vrpn_int32 vert2, vrpn_int32 norm0=-1, vrpn_int32 norm1=-1, vrpn_int32 norm2=-1)=0
virtual bool setTrimeshTransform(vrpn_int32 objNum, vrpn_float32 homMatrix[16])=0
virtual bool setVertex(vrpn_int32 objNum, vrpn_int32 vertNum, vrpn_float32 x, vrpn_float32 y, vrpn_float32 z)=0
static int VRPN_CALLBACK handle_transformTrimesh_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_setTriangle_message(void *userdata, vrpn_HANDLERPARAM p)
virtual bool addObject(vrpn_int32 objNum, vrpn_int32 ParentNum=-1)=0
static int VRPN_CALLBACK handle_moveToParent_message(void *userdata, vrpn_HANDLERPARAM p)
virtual bool addObjectExScene(vrpn_int32 objNum)=0
virtual bool setSceneOrigin(vrpn_float32 Pos[3], vrpn_float32 axis[3], vrpn_float32 angle)=0
virtual bool setHapticOrigin(vrpn_float32 Pos[3], vrpn_float32 axis[3], vrpn_float32 angle)=0
virtual bool removeObject(vrpn_int32 objNum)=0
virtual bool moveToParent(vrpn_int32 objNum, vrpn_int32 ParentNum)=0
Functions to organize the scene.
static int VRPN_CALLBACK handle_addObjectExScene_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_setSceneOrigin_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_removeObject_message(void *userdata, vrpn_HANDLERPARAM p)
virtual bool setTrimeshType(vrpn_int32 objNum, vrpn_int32 type)=0
virtual bool clearTrimesh(vrpn_int32 objNum)=0
virtual bool setObjectPosition(vrpn_int32 objNum, vrpn_float32 Pos[3])=0
static int VRPN_CALLBACK handle_setObjectIsTouchable_message(void *userdata, vrpn_HANDLERPARAM p)
virtual bool setObjectOrientation(vrpn_int32 objNum, vrpn_float32 axis[3], vrpn_float32 angle)=0
static int VRPN_CALLBACK handle_setNormal_message(void *userdata, vrpn_HANDLERPARAM p)
virtual bool setObjectIsTouchable(vrpn_int32 objNum, vrpn_bool IsTouchable=true)=0
static int VRPN_CALLBACK handle_clearTrimesh_message(void *userdata, vrpn_HANDLERPARAM p)
vrpn_ForceDeviceServer(const char *name, vrpn_Connection *c)
virtual bool setObjectScale(vrpn_int32 objNum, vrpn_float32 Scale[3])=0
virtual bool removeTriangle(vrpn_int32 objNum, vrpn_int32 triNum)=0
static int VRPN_CALLBACK handle_setObjectPosition_message(void *userdata, vrpn_HANDLERPARAM p)
virtual bool setNormal(vrpn_int32 objNum, vrpn_int32 normNum, vrpn_float32 x, vrpn_float32 y, vrpn_float32 z)=0
virtual bool updateTrimeshChanges(vrpn_int32 objNum, vrpn_float32 kspring, vrpn_float32 kdamp, vrpn_float32 fdyn, vrpn_float32 fstat)=0
static int VRPN_CALLBACK handle_setTrimeshType_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_setObjectOrientation_message(void *userdata, vrpn_HANDLERPARAM p)
virtual bool setHapticScale(vrpn_float32 Scale)=0
static int VRPN_CALLBACK handle_removeTriangle_message(void *userdata, vrpn_HANDLERPARAM p)
static vrpn_int32 decode_objectScale(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum, vrpn_float32 Scale[3])
static vrpn_int32 decode_trimeshTransform(const char *buffer, const vrpn_int32 len, vrpn_int32 *objNum, vrpn_float32 homMatrix[16])
static vrpn_int32 decode_setHapticOrigin(const char *buffer, vrpn_int32 len, vrpn_float32 Pos[3], vrpn_float32 axis[3], vrpn_float32 *angle)
vrpn_float32 SurfaceKspring
static vrpn_int32 decode_objectPosition(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum, vrpn_float32 Pos[3])
static vrpn_int32 decode_normal(const char *buffer, const vrpn_int32 len, vrpn_int32 *objNum, vrpn_int32 *vertNum, vrpn_float32 *x, vrpn_float32 *y, vrpn_float32 *z)
vrpn_int32 addObject_message_id
vrpn_int32 setObjectScale_message_id
vrpn_float32 SurfaceKdamping
vrpn_int32 setHapticOrigin_message_id
vrpn_int32 moveToParent_message_id
static vrpn_int32 decode_addObjectExScene(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum)
vrpn_int32 setSceneOrigin_message_id
static vrpn_int32 decode_setSceneOrigin(const char *buffer, vrpn_int32 len, vrpn_float32 Pos[3], vrpn_float32 axis[3], vrpn_float32 *angle)
static vrpn_int32 decode_removeTriangle(const char *buffer, const vrpn_int32 len, vrpn_int32 *objNum, vrpn_int32 *triNum)
static vrpn_int32 decode_updateTrimeshChanges(const char *buffer, const vrpn_int32 len, vrpn_int32 *objNum, vrpn_float32 *kspring, vrpn_float32 *kdamp, vrpn_float32 *fdyn, vrpn_float32 *fstat)
vrpn_int32 setObjectPosition_message_id
vrpn_int32 clearTrimesh_message_id
vrpn_int32 setTriangle_message_id
static vrpn_int32 decode_addObject(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum, vrpn_int32 *ParentNum)
static vrpn_int32 decode_setTrimeshType(const char *buffer, const vrpn_int32 len, vrpn_int32 *objNum, vrpn_int32 *type)
static vrpn_int32 decode_setObjectIsTouchable(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum, vrpn_bool *isTouchable)
vrpn_int32 updateTrimeshChanges_message_id
static vrpn_int32 decode_objectOrientation(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum, vrpn_float32 axis[3], vrpn_float32 *angle)
static vrpn_int32 decode_clearTrimesh(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum)
vrpn_int32 setHapticScale_message_id
static vrpn_int32 decode_triangle(const char *buffer, const vrpn_int32 len, vrpn_int32 *objNum, vrpn_int32 *triNum, vrpn_int32 *vert0, vrpn_int32 *vert1, vrpn_int32 *vert2, vrpn_int32 *norm0, vrpn_int32 *norm1, vrpn_int32 *norm2)
vrpn_int32 addObjectExScene_message_id
vrpn_int32 transformTrimesh_message_id
vrpn_int32 setObjectOrientation_message_id
vrpn_int32 removeTriangle_message_id
static vrpn_int32 decode_moveToParent(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum, vrpn_int32 *parentNum)
vrpn_int32 setNormal_message_id
vrpn_int32 setTrimeshType_message_id
vrpn_float32 SurfaceFdynamic
vrpn_float32 SurfaceFstatic
vrpn_int32 removeObject_message_id
static vrpn_int32 decode_vertex(const char *buffer, const vrpn_int32 len, vrpn_int32 *objNum, vrpn_int32 *vertNum, vrpn_float32 *x, vrpn_float32 *y, vrpn_float32 *z)
vrpn_int32 setVertex_message_id
static vrpn_int32 decode_removeObject(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum)
static vrpn_int32 decode_setHapticScale(const char *buffer, vrpn_int32 len, vrpn_float32 *Scale)
vrpn_int32 setObjectIsTouchable_message_id
This structure is what is passed to a vrpn_Connection message callback.
const char * buffer
@ vrpn_TEXT_ERROR
#define vrpn_gettimeofday
Definition vrpn_Shared.h:99