#include "positioning.hpp" #include #ifdef SOCKTAP_WITH_GPSD # include "gps_position_provider.hpp" #endif using namespace vanetza; namespace po = boost::program_options; std::unique_ptr create_position_provider(boost::asio::io_context& io_context, const po::variables_map& vm, const Runtime& runtime) { std::unique_ptr positioning; if (vm["positioning"].as() == "gpsd") { #ifdef SOCKTAP_WITH_GPSD positioning.reset(new GpsPositionProvider { io_context, vm["gpsd-host"].as(), vm["gpsd-port"].as() }); #endif } else if (vm["positioning"].as() == "static") { std::unique_ptr stored { new StoredPositionProvider() }; PositionFix fix; fix.timestamp = runtime.now(); fix.latitude = vm["latitude"].as() * units::degree; fix.longitude = vm["longitude"].as() * units::degree; fix.confidence.semi_major = vm["pos_confidence"].as() * units::si::meter; fix.confidence.semi_minor = fix.confidence.semi_major; stored->position_fix(fix); positioning = std::move(stored); } return positioning; } void add_positioning_options(po::options_description& options) { #ifdef SOCKTAP_WITH_GPSD const char* default_positioning = "gpsd"; #else const char* default_positioning = "static"; #endif options.add_options() ("positioning,p", po::value()->default_value(default_positioning), "Select positioning provider") #ifdef SOCKTAP_WITH_GPSD ("gpsd-host", po::value()->default_value("localhost"), "gpsd's server hostname") ("gpsd-port", po::value()->default_value(gpsd::default_port), "gpsd's listening port") #endif ("latitude", po::value()->default_value(48.7668616), "Latitude of static position") ("longitude", po::value()->default_value(11.432068), "Longitude of static position") ("pos_confidence", po::value()->default_value(5.0), "95% circular confidence of static position") ; }