103 lines
2.5 KiB
C++
103 lines
2.5 KiB
C++
#pragma once
|
|
#include <mutex>
|
|
#include <string>
|
|
#include <boost/spirit/include/qi.hpp>
|
|
#include <boost/spirit/include/phoenix.hpp>
|
|
|
|
namespace qi = boost::spirit::qi;
|
|
|
|
enum InputCommands
|
|
{
|
|
no_cmd,
|
|
startcamera,
|
|
stopcamera,
|
|
setcamera,
|
|
setimagerate,
|
|
setgimbal,
|
|
setmotorcontrol,
|
|
setdebug
|
|
};
|
|
|
|
struct parser_data {
|
|
std::string command="";
|
|
std::string device = "";
|
|
std::string option = "";
|
|
double command_val=0.0;
|
|
};
|
|
|
|
struct Parser
|
|
{
|
|
parser_data p_data;
|
|
std::mutex mut;
|
|
void set_parser_data(parser_data& data) {
|
|
std::cout << "parser set data..." << std::endl;
|
|
std::lock_guard<std::mutex> lg(mut);
|
|
p_data = data;
|
|
}
|
|
|
|
void clear_parser_data() {
|
|
//std::cout << "parser clear data..." << std::endl;
|
|
std::lock_guard<std::mutex> lg(mut);
|
|
p_data.command = "";
|
|
}
|
|
|
|
parser_data get_parser_data() {
|
|
//std::cout << "parser get data..." << std::endl;
|
|
std::lock_guard<std::mutex> lg(mut);
|
|
parser_data temp= p_data;
|
|
//clear_parser_data();
|
|
return temp;
|
|
}
|
|
|
|
void parse_input(std::string input) {
|
|
parser_data temp_data;
|
|
qi::parse(
|
|
input.begin(), input.end(),
|
|
(*qi::char_("a-zA-Z") >> ' ' >> *qi::char_("a-zA-Z") >> ' ' >> *qi::char_("a-zA-Z") >> ' ' >> qi::double_),
|
|
temp_data.command, temp_data.device, temp_data.option, temp_data.command_val
|
|
);
|
|
std::cout << temp_data.command << " ... " << temp_data.device << " ... " << temp_data.option << " ... " << temp_data.command_val << std::endl;
|
|
set_parser_data(temp_data);
|
|
std::cout << "parser data set" << temp_data.command_val << std::endl;
|
|
}
|
|
};
|
|
|
|
struct CMD_eval {
|
|
InputCommands eval(Parser& parse) {
|
|
if (parse.p_data.command == "start") {
|
|
std::cout << "starting Camera" << std::endl;
|
|
parse.clear_parser_data();
|
|
return startcamera;
|
|
}
|
|
else if (parse.p_data.command == "stop") {
|
|
std::cout << "stopping Camera" << std::endl;
|
|
parse.clear_parser_data();
|
|
return stopcamera;
|
|
}
|
|
else if (parse.p_data.command == "debug") {
|
|
parse.clear_parser_data();
|
|
return setdebug;
|
|
}
|
|
else if (parse.p_data.command == "set") {
|
|
//std::cout << "setting" << std::endl;
|
|
if (parse.p_data.device == "camera") {
|
|
parse.clear_parser_data();
|
|
return setcamera;
|
|
}
|
|
else if (parse.p_data.device == "fps") {
|
|
parse.clear_parser_data();
|
|
return setimagerate;
|
|
}
|
|
else if (parse.p_data.device == "motorctl") {
|
|
parse.clear_parser_data();
|
|
return setmotorcontrol;
|
|
|
|
}
|
|
|
|
}
|
|
else {
|
|
return no_cmd;
|
|
}
|
|
}
|
|
};
|