#pragma once #include #include #include #include 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 lg(mut); p_data = data; } void clear_parser_data() { //std::cout << "parser clear data..." << std::endl; std::lock_guard lg(mut); p_data.command = ""; } parser_data get_parser_data() { //std::cout << "parser get data..." << std::endl; std::lock_guard 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; } } };