Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • danc/MicroCART
  • snawerdt/MicroCART_17-18
  • bbartels/MicroCART_17-18
  • jonahu/MicroCART
4 results
Show changes
Showing
with 543 additions and 597 deletions
File moved
#include <iostream> #include <iostream>
#include <algorithm> #include <algorithm>
#include <functional>
#include "vrpn_Tracker.h" #include "vrpn_Tracker.h"
#include "quat.h" #include "quat.h"
...@@ -9,28 +10,25 @@ ...@@ -9,28 +10,25 @@
namespace microcart namespace microcart
{ {
static void VRPN_CALLBACK vrpn_cb(void * param, const vrpn_TRACKERCB t); static void VRPN_CALLBACK vrpn_cb(void * param, const vrpn_TRACKERCB t);
TrackerData::TrackerData() :
x(0.0), y(0.0), z(0.0),
pitch(0.0), roll(0.0), yaw(0.0),
fps(0.0), timestamp()
{
}
Tracker::Tracker(std::string server) : Tracker(server.c_str()) Tracker::Tracker(std::string server) :
remote(server.c_str()),
stop_flag(0),
trackerData()
{ {
} }
Tracker::Tracker(const char * server) : Tracker::Tracker(const char * server) :
remote(server), remote(server),
stop_flag(0), stop_flag(0),
trackerData({ trackerData()
.x = 0.0,
.y = 0.0,
.z = 0.0,
.pitch = 0.0,
.roll = 0.0,
.yaw = 0.0,
.fps = 0.0,
.timestamp = {
.tv_sec = 0,
.tv_usec = 0
}
})
{ {
remote.register_change_handler(this, vrpn_cb); remote.register_change_handler(this, vrpn_cb);
...@@ -92,10 +90,9 @@ namespace microcart ...@@ -92,10 +90,9 @@ namespace microcart
trackerData.fps = 1.0 / elapsed_time_usec; trackerData.fps = 1.0 / elapsed_time_usec;
auto td = trackerData; auto td = trackerData;
std::for_each(cb_vector.begin(), cb_vector.end(), for(auto i = cb_vector.begin(); i != cb_vector.end(); ++i) {
[td](std::function<void(const TrackerData &)> &fn){ (*i)(td);
fn(td); }
});
} }
void Tracker::addCallback(std::function<void(const TrackerData&)> cb) void Tracker::addCallback(std::function<void(const TrackerData&)> cb)
...@@ -115,6 +112,20 @@ struct ucart_vrpn_tracker { ...@@ -115,6 +112,20 @@ struct ucart_vrpn_tracker {
microcart::Tracker * t; 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" extern "C"
{ {
struct ucart_vrpn_tracker * ucart_vrpn_tracker_createInstance( struct ucart_vrpn_tracker * ucart_vrpn_tracker_createInstance(
...@@ -123,6 +134,7 @@ extern "C" ...@@ -123,6 +134,7 @@ extern "C"
try { try {
auto inst = new struct ucart_vrpn_tracker; auto inst = new struct ucart_vrpn_tracker;
inst->t = new microcart::Tracker(server); inst->t = new microcart::Tracker(server);
return inst;
} catch(...) { } catch(...) {
return NULL; return NULL;
} }
...@@ -138,16 +150,8 @@ extern "C" ...@@ -138,16 +150,8 @@ extern "C"
void (*cb)(struct ucart_vrpn_TrackerData *)) void (*cb)(struct ucart_vrpn_TrackerData *))
{ {
try { try {
inst->t->addCallback([cb](const microcart::TrackerData & td) { auto new_cb = bind(cb_wrapper, cb, std::placeholders::_1);
struct ucart_vrpn_TrackerData data; inst->t->addCallback(new_cb);
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);
});
} catch(...) { } catch(...) {
return -1; return -1;
} }
......
...@@ -54,6 +54,7 @@ extern "C" ...@@ -54,6 +54,7 @@ extern "C"
namespace microcart namespace microcart
{ {
struct TrackerData { struct TrackerData {
public:
double x; double x;
double y; double y;
double z; double z;
...@@ -64,6 +65,8 @@ namespace microcart ...@@ -64,6 +65,8 @@ namespace microcart
double fps; double fps;
timeval timestamp; timeval timestamp;
TrackerData();
}; };
class Tracker { class Tracker {
......
#include <stdio.h>
#include <string.h>
#include <err.h>
#include <libgen.h>
#include "cli.h"
int main(int argc, char **argv)
{
int cmdID = -1;
char * command;
int i , useSymlink = 0;
struct backend_conn *conn;
command = basename(argv[0]);
for(i = 0; i < MAX_COMMANDS; ++i) {
if (strncmp(command, commandNames[i], strlen(commandNames[i])) == 0)
{
cmdID = i;
useSymlink = 1;
}
}
if(cmdID == -1) {
command = argv[1];
for(i = 0; i < MAX_COMMANDS; ++i) {
if (strncmp(command, commandNames[i], strlen(commandNames[i])) == 0)
{
cmdID = i;
}
}
}
if(cmdID == -1){
printf("Could not match input with a command. Please try again...\n");
return -1;
}
printf("Parsed Command : %s\n", commandNames[cmdID]);
conn = ucart_backendConnect();
if(conn == NULL) {
return -1;
}
if(useSymlink) {
(*cli_functions[cmdID]) (conn, argc, &argv[0]);
}else {
(*cli_functions[cmdID]) (conn, argc-1, &argv[1]);
}
ucart_backendDisconnect(conn);
return 0;
}
#ifndef __CLI_H
#define __CLI_H
#include "cli_monitor.h"
// #include "cli_setpid.h"
#include "cli_getpid.h"
// #include "cli_getimu.h"
enum CommandNameIds{
CMD_MONITOR,
CMD_SETPID,
CMD_GETPID,
CMD_GETIMU,
MAX_COMMANDS
};
typedef int (*cli_function_ptr)(struct backend_conn *, int, char **);
static cli_function_ptr cli_functions[2] = {
&cli_monitor,
&cli_getpid
// &cli_setpid,
// &cli_getimu
};
static char* commandNames[MAX_COMMANDS] = {
"monitor",
"getPid",
"setPid",
"getImu"
};
#endif
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Subproject commit 99c54dbefe04897cc7c146101a126f62c0e65f97
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.