packages feed

vrpn-0.2.0.0: src/vrpn.cpp

#include <stdio.h>
#include <stdlib.h>
#include <vrpn_Analog.h>
#include <vrpn_Dial.h>
#include <vrpn_Button.h>
#include <vrpn_Tracker.h>


typedef void (PositionCallback)(long, long, int, double, double, double, double, double, double, double);


void VRPN_CALLBACK handle_tracker_pos_quat(void *callback, const vrpn_TRACKERCB tracker)
{
  ((PositionCallback*) callback)(
    tracker.msg_time.tv_sec
  , tracker.msg_time.tv_usec
  , tracker.sensor
  , tracker.pos[0]
  , tracker.pos[1]
  , tracker.pos[2]
  , tracker.quat[0]
  , tracker.quat[1]
  , tracker.quat[2]
  , tracker.quat[3]
  );
}


typedef void (VelocityCallback)(long, long, int, double, double, double, double, double, double, double, double);


void VRPN_CALLBACK handle_tracker_vel(void *callback, const vrpn_TRACKERVELCB tracker)
{
  ((VelocityCallback*) callback)(
    tracker.msg_time.tv_sec
  , tracker.msg_time.tv_usec
  , tracker.sensor
  , tracker.vel[0]
  , tracker.vel[1]
  , tracker.vel[2]
  , tracker.vel_quat[0]
  , tracker.vel_quat[1]
  , tracker.vel_quat[2]
  , tracker.vel_quat[3]
  , tracker.vel_quat_dt
  );
}


typedef void (AccelerationCallback)(long, long, int, double, double, double, double, double, double, double, double);


void VRPN_CALLBACK handle_tracker_acc(void *callback, const vrpn_TRACKERACCCB tracker)
{
  ((AccelerationCallback*) callback)(
    tracker.msg_time.tv_sec
  , tracker.msg_time.tv_usec
  , tracker.sensor
  , tracker.acc[0]
  , tracker.acc[1]
  , tracker.acc[2]
  , tracker.acc_quat[0]
  , tracker.acc_quat[1]
  , tracker.acc_quat[2]
  , tracker.acc_quat[3]
  , tracker.acc_quat_dt
  );
}


typedef void (ButtonCallback)(long, long, int, int);


void VRPN_CALLBACK handle_button(void *callback, const vrpn_BUTTONCB button)
{
  ((ButtonCallback*) callback)(
    button.msg_time.tv_sec
  , button.msg_time.tv_usec
  , button.button
  , button.state
  );
}


typedef void (AnalogCallback)(long, long, int, const double*);


void VRPN_CALLBACK handle_analog (void *callback, const vrpn_ANALOGCB analog)
{
  ((AnalogCallback*) callback)(
    analog.msg_time.tv_sec
  , analog.msg_time.tv_usec
  , analog.num_channel
  , analog.channel
  );
}


typedef void (DialCallback)(long, long, int, double);


void VRPN_CALLBACK handle_dial(void *callback, const vrpn_DIALCB dial)
{
  ((DialCallback*) callback)(
    dial.msg_time.tv_sec
  , dial.msg_time.tv_usec
  , dial.dial
  , dial.change
  );
}


extern "C" vrpn_Tracker_Remote* makeTracker(char* device, PositionCallback positionCallback, VelocityCallback velocityCallback, AccelerationCallback accelerationCallback)
{
  vrpn_Tracker_Remote* tracker = new vrpn_Tracker_Remote(device);
  if (tracker && positionCallback)
    tracker->register_change_handler((void*) positionCallback, handle_tracker_pos_quat);
  if (tracker && velocityCallback)
    tracker->register_change_handler((void*) velocityCallback, handle_tracker_vel);
  if (tracker && accelerationCallback)
    tracker->register_change_handler((void*) accelerationCallback, handle_tracker_acc);
  return tracker;
}


extern "C" void mainloopTracker(vrpn_Tracker_Remote* tracker)
{
  if (tracker)
    tracker->mainloop();
}


extern "C" void deleteTracker(vrpn_Tracker_Remote* tracker)
{
  delete tracker;
}


extern "C" vrpn_Button_Remote* makeButton(char* device, ButtonCallback buttonCallback)
{
  vrpn_Button_Remote* button = new vrpn_Button_Remote(device);
  if (button && buttonCallback)
    button->register_change_handler((void*) buttonCallback, handle_button);
  return button;
}


extern "C" void mainloopButton(vrpn_Button_Remote* button)
{
  if (button)
    button->mainloop();
}


extern "C" void deleteButton(vrpn_Button_Remote* button)
{
  delete button;
}


extern "C" vrpn_Analog_Remote* makeAnalog(char* device, AnalogCallback analogCallback)
{
  vrpn_Analog_Remote* analog = new vrpn_Analog_Remote(device);
  if (analog && analogCallback)
    analog->register_change_handler((void*) analogCallback, handle_analog);
  return analog;
} 


extern "C" void mainloopAnalog(vrpn_Analog_Remote* analog)
{
  if (analog)
    analog->mainloop();
}


extern "C" void deleteAnalog(vrpn_Analog_Remote* analog)
{
  delete analog;
}


extern "C" vrpn_Dial_Remote* makeDial(char* device, DialCallback dialCallback)
{
  vrpn_Dial_Remote* dial = new vrpn_Dial_Remote(device);
  if (dial && dialCallback)
    dial->register_change_handler((void*) dialCallback, handle_dial);
  return dial;
}


extern "C" void mainloopDial(vrpn_Dial_Remote* dial)
{
  if (dial)
    dial->mainloop();
}


extern "C" void deleteDial(vrpn_Dial_Remote* dial)
{
  delete dial;
}


extern "C" void vrpnSleep(long t)
{
  vrpn_SleepMsecs(t);
}