added missing stuff

This commit is contained in:
2016-09-07 11:51:56 +02:00
parent d283d9b326
commit 8136e9ec81
3 changed files with 147 additions and 1 deletions

View File

@@ -1,4 +1,100 @@
#ifndef DUMMYAPI_H
#define DUMMYAPI_H
#include "api.h"
class DummyAPI : public API {
private:
/** all attached listeners */
std::vector<APIListener*> listeners;
int dstID = -1;
bool enabled;
std::thread thread;
std::string dataFolder;
float speed = 1.0f;
std::vector<Point3> points;
public:
/** ctor with the folder where the data-files reside */
DummyAPI(const std::string& dataFolder) : dataFolder(dataFolder) {
;
}
void setSpeed(const float speed) {
this->speed = speed;
}
void setTarget(const Point3 p) override {
(void) p;
throw Exception("not yet implemented!");
}
void setTarget(const int id) override {
const std::string fileName = dataFolder + "/" + std::to_string(id) + ".dat";
std::ifstream in(fileName);
if (id == -1) {throw Exception("call setTarget(id) first!");}
if (!in.good()) {throw Exception("failed to load file: '" + fileName + "'");}
// load
while (in.good() && !in.eof()) {
float x, y, z;
in >> x;
in >> y;
in >> z;
points.push_back(Point3(x,y,z));
}
}
void startNavigation() override {
enabled = true;
dummySender();
}
void stopNavigation() override {
enabled = false;
thread.join();
}
void addListener(APIListener* l) override {
listeners.push_back(l);
}
Point3 getDst() {
return points[points.size() - 2];
}
private:
/** send dummy data using the given file */
void dummySender() {
// run-loop
auto run = [&] () {
std::vector<Point3> pts = points; // local copy
while(!pts.empty() && enabled) {
Point3 cur = pts.front();
pts.erase(pts.begin());
for (APIListener* l : listeners) {l->onPositionUpdate(cur);}
std::this_thread::sleep_for(std::chrono::milliseconds( (int)(500/speed) ));
}
};
// run
thread = std::thread(run);
}
};
#endif // DUMMYAPI_H

View File

@@ -1,4 +1,52 @@
#ifndef API_H
#define API_H
#include <vector>
#include <thread>
#include <chrono>
#include <fstream>
#include "../geo/Point3.h"
class APIListener {
public:
/** dtor */
virtual ~APIListener() {;}
/** the currently estimated path to the target has changed */
virtual void onPathUpdate(const std::vector<Point3>& curPath) = 0;
/** the currently estimated position has changed */
virtual void onPositionUpdate(const Point3 curPos) = 0;
};
class API {
public:
/** dtor */
virtual ~API() {;}
/** set the desired target by using the given position */
virtual void setTarget(const Point3 p) = 0;
/** set the desired target by using the given POI-ID */
virtual void setTarget(const int id) = 0;
/** start the navigation process */
virtual void startNavigation() = 0;
/** stop the navigation process */
virtual void stopNavigation() = 0;
/** attach as listener to the API */
virtual void addListener(APIListener* l) = 0;
};
#endif // API_H

View File

@@ -19,7 +19,9 @@ int main(int argc, char** argv) {
// skip all tests starting with LIVE_
::testing::GTEST_FLAG(filter) = "-*.LIVE_*";
::testing::GTEST_FLAG(filter) = "*Grid.*";
::testing::GTEST_FLAG(filter) = "*GridWalk2HeadingControl*";
//::testing::GTEST_FLAG(filter) = "*Grid.*";
//::testing::GTEST_FLAG(filter) = "*Dijkstra.*";
//::testing::GTEST_FLAG(filter) = "*LogDistanceCeilingModel*";