diff --git a/groundStation/src/vrpn_tracker.cpp b/groundStation/src/vrpn_tracker.cpp index df5d9eb49efb38f97c333441c130c90a7cfc61d6..7f9b56a9909ac1512d6d2164d313214200645e22 100644 --- a/groundStation/src/vrpn_tracker.cpp +++ b/groundStation/src/vrpn_tracker.cpp @@ -1,5 +1,6 @@ #include <iostream> #include <algorithm> +#include <functional> #include "vrpn_Tracker.h" #include "quat.h" @@ -111,6 +112,20 @@ struct ucart_vrpn_tracker { microcart::Tracker * t; }; +void cb_wrapper(void (*cb)(struct ucart_vrpn_TrackerData *), + const microcart::TrackerData &td) +{ + struct ucart_vrpn_TrackerData data; + data.x = td.x; + data.y = td.y; + data.z = td.z; + data.pitch = td.pitch; + data.roll = td.roll; + data.yaw = td.yaw; + data.fps = td.fps; + (*cb)(&data); +} + extern "C" { struct ucart_vrpn_tracker * ucart_vrpn_tracker_createInstance( @@ -135,16 +150,8 @@ extern "C" void (*cb)(struct ucart_vrpn_TrackerData *)) { try { - inst->t->addCallback([cb](const microcart::TrackerData & td) { - struct ucart_vrpn_TrackerData data; - data.x = td.x; - data.y = td.y; - data.z = td.z; - data.pitch = td.pitch; - data.roll = td.roll; - data.yaw = td.yaw; - (*cb)(&data); - }); + auto new_cb = bind(cb_wrapper, cb, std::placeholders::_1); + inst->t->addCallback(new_cb); } catch(...) { return -1; }