vrpn  07.33
Virtual Reality Peripheral Network
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 
16  vrpn_Connection *c)
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 
350  decode_clearTrimesh(p.buffer, p.payload_len, &objNum);
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 
465  decode_removeObject(p.buffer, p.payload_len, &objNum);
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 }
virtual bool setVertex(vrpn_int32 objNum, vrpn_int32 vertNum, vrpn_float32 x, vrpn_float32 y, vrpn_float32 z)=0
static vrpn_int32 decode_objectScale(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum, vrpn_float32 Scale[3])
vrpn_int32 removeObject_message_id
static int VRPN_CALLBACK handle_setVertex_message(void *userdata, vrpn_HANDLERPARAM p)
vrpn_int32 transformTrimesh_message_id
static vrpn_int32 decode_objectOrientation(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum, vrpn_float32 axis[3], vrpn_float32 *angle)
virtual bool setHapticScale(vrpn_float32 Scale)=0
virtual bool setObjectPosition(vrpn_int32 objNum, vrpn_float32 Pos[3])=0
static int VRPN_CALLBACK handle_transformTrimesh_message(void *userdata, vrpn_HANDLERPARAM p)
vrpn_int32 setObjectPosition_message_id
vrpn_int32 payload_len
virtual bool moveToParent(vrpn_int32 objNum, vrpn_int32 ParentNum)=0
Functions to organize the scene.
static int VRPN_CALLBACK handle_setObjectOrientation_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_moveToParent_message(void *userdata, vrpn_HANDLERPARAM p)
static vrpn_int32 decode_removeTriangle(const char *buffer, const vrpn_int32 len, vrpn_int32 *objNum, vrpn_int32 *triNum)
vrpn_float32 SurfaceFstatic
static int VRPN_CALLBACK handle_removeTriangle_message(void *userdata, vrpn_HANDLERPARAM p)
const char * buffer
virtual bool clearTrimesh(vrpn_int32 objNum)=0
virtual bool updateTrimeshChanges(vrpn_int32 objNum, vrpn_float32 kspring, vrpn_float32 kdamp, vrpn_float32 fdyn, vrpn_float32 fstat)=0
static vrpn_int32 decode_setObjectIsTouchable(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum, vrpn_bool *isTouchable)
vrpn_int32 addObjectExScene_message_id
virtual bool setTrimeshType(vrpn_int32 objNum, vrpn_int32 type)=0
static int VRPN_CALLBACK handle_setObjectPosition_message(void *userdata, vrpn_HANDLERPARAM p)
static vrpn_int32 decode_addObjectExScene(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum)
vrpn_int32 addObject_message_id
vrpn_int32 setHapticScale_message_id
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)
static int VRPN_CALLBACK handle_removeObject_message(void *userdata, vrpn_HANDLERPARAM p)
Generic connection class not specific to the transport mechanism.
vrpn_int32 setTrimeshType_message_id
vrpn_int32 setVertex_message_id
static vrpn_int32 decode_setTrimeshType(const char *buffer, const vrpn_int32 len, vrpn_int32 *objNum, vrpn_int32 *type)
vrpn_int32 removeTriangle_message_id
static vrpn_int32 decode_setHapticScale(const char *buffer, vrpn_int32 len, vrpn_float32 *Scale)
static int VRPN_CALLBACK handle_addObjectExScene_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_updateTrimeshChanges_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 removeObject(vrpn_int32 objNum)=0
virtual bool setNormal(vrpn_int32 objNum, vrpn_int32 normNum, vrpn_float32 x, vrpn_float32 y, vrpn_float32 z)=0
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.
virtual bool setTrimeshTransform(vrpn_int32 objNum, vrpn_float32 homMatrix[16])=0
static vrpn_int32 decode_moveToParent(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum, vrpn_int32 *parentNum)
vrpn_int32 setObjectScale_message_id
virtual bool setHapticOrigin(vrpn_float32 Pos[3], vrpn_float32 axis[3], vrpn_float32 angle)=0
static vrpn_int32 decode_trimeshTransform(const char *buffer, const vrpn_int32 len, vrpn_int32 *objNum, vrpn_float32 homMatrix[16])
vrpn_ForceDeviceServer(const char *name, vrpn_Connection *c)
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)
static int VRPN_CALLBACK handle_setHapticOrigin_message(void *userdata, vrpn_HANDLERPARAM p)
vrpn_int32 setHapticOrigin_message_id
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)
static vrpn_int32 decode_clearTrimesh(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum)
virtual bool removeTriangle(vrpn_int32 objNum, vrpn_int32 triNum)=0
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 bool setObjectIsTouchable(vrpn_int32 objNum, vrpn_bool IsTouchable=true)=0
vrpn_int32 updateTrimeshChanges_message_id
static int VRPN_CALLBACK handle_setObjectScale_message(void *userdata, vrpn_HANDLERPARAM p)
static vrpn_int32 decode_addObject(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum, vrpn_int32 *ParentNum)
vrpn_float32 SurfaceKspring
virtual bool setSceneOrigin(vrpn_float32 Pos[3], vrpn_float32 axis[3], vrpn_float32 angle)=0
static int VRPN_CALLBACK handle_clearTrimesh_message(void *userdata, vrpn_HANDLERPARAM p)
vrpn_int32 setSceneOrigin_message_id
virtual bool setObjectOrientation(vrpn_int32 objNum, vrpn_float32 axis[3], vrpn_float32 angle)=0
vrpn_int32 setObjectOrientation_message_id
virtual bool addObjectExScene(vrpn_int32 objNum)=0
static int VRPN_CALLBACK handle_setObjectIsTouchable_message(void *userdata, vrpn_HANDLERPARAM p)
#define vrpn_gettimeofday
Definition: vrpn_Shared.h:89
static vrpn_int32 decode_setSceneOrigin(const char *buffer, vrpn_int32 len, vrpn_float32 Pos[3], vrpn_float32 axis[3], vrpn_float32 *angle)
vrpn_int32 d_sender_id
Sender ID registered with the connection.
virtual bool addObject(vrpn_int32 objNum, vrpn_int32 ParentNum=-1)=0
static vrpn_int32 decode_setHapticOrigin(const char *buffer, vrpn_int32 len, vrpn_float32 Pos[3], vrpn_float32 axis[3], vrpn_float32 *angle)
virtual bool setObjectScale(vrpn_int32 objNum, vrpn_float32 Scale[3])=0
static vrpn_int32 decode_objectPosition(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum, vrpn_float32 Pos[3])
static int VRPN_CALLBACK handle_setSceneOrigin_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_setTriangle_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_setTrimeshType_message(void *userdata, vrpn_HANDLERPARAM p)
static int VRPN_CALLBACK handle_addObject_message(void *userdata, vrpn_HANDLERPARAM p)
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 moveToParent_message_id
vrpn_float32 SurfaceKdamping
vrpn_int32 setTriangle_message_id
vrpn_int32 setNormal_message_id
static int VRPN_CALLBACK handle_setNormal_message(void *userdata, vrpn_HANDLERPARAM p)
vrpn_float32 SurfaceFdynamic
static vrpn_int32 decode_removeObject(const char *buffer, vrpn_int32 len, vrpn_int32 *objNum)
static int VRPN_CALLBACK handle_setHapticScale_message(void *userdata, vrpn_HANDLERPARAM p)
vrpn_int32 setObjectIsTouchable_message_id
vrpn_int32 clearTrimesh_message_id