58
58
provider_config.update_period = std::chrono::milliseconds
60
config.get(dummy::Configuration::key_update_period(), 500)
62
provider_config.reference_position.latitude(wgs84::Latitude
64
config.get(dummy::Configuration::key_reference_position_lat(), 51.) * units::Degrees
66
provider_config.reference_position.longitude(wgs84::Longitude
68
config.get(dummy::Configuration::key_reference_position_lon(), 7.) * units::Degrees
60
config.get(dummy::Configuration::Keys::update_period, 500)
62
provider_config.reference_position.latitude = location::wgs84::Latitude
64
config.get(dummy::Configuration::Keys::reference_position_lat, 51.) * location::units::Degrees
66
provider_config.reference_position.longitude = location::wgs84::Longitude
68
config.get(dummy::Configuration::Keys::reference_position_lon, 7.) * location::units::Degrees
71
if (config.count(dummy::Configuration::Keys::reference_position_alt) > 0)
72
provider_config.reference_position.altitude = location::wgs84::Altitude
74
config.get(dummy::Configuration::Keys::reference_position_alt, 0.) * location::units::Meters
77
if (config.count(dummy::Configuration::Keys::reference_horizontal_accuracy) > 0)
78
provider_config.reference_position.accuracy.horizontal =
79
config.get(dummy::Configuration::Keys::reference_horizontal_accuracy, 0.) * location::units::Meters;
81
if (config.count(dummy::Configuration::Keys::reference_vertical_accuracy) > 0)
82
provider_config.reference_position.accuracy.vertical =
83
config.get(dummy::Configuration::Keys::reference_vertical_accuracy, 0.) * location::units::Meters;
85
provider_config.reference_velocity = location::Velocity
87
config.get(dummy::Configuration::Keys::reference_velocity, 9.) * location::units::MetersPerSecond
89
provider_config.reference_heading = location::Heading
91
config.get(dummy::Configuration::Keys::reference_heading, 127.) * location::units::Degrees
71
94
return location::Provider::Ptr{new dummy::Provider{provider_config}};
76
location::Provider::FeatureFlags features{"111"};
77
location::Provider::RequirementFlags requirements{"0000"};
80
97
dummy::Provider::Provider(const dummy::Configuration& config)
81
: location::Provider(features, requirements),
99
location::Provider::Features::position | location::Provider::Features::velocity | location::Provider::Features::heading,
100
location::Provider::Requirements::none),
82
101
d(new Private{config})
103
125
d->worker = std::move(std::thread([this]()
105
127
d->state.store(Private::State::started);
106
VLOG(1) << "dummy::Provider::start_position_updates: started";
128
VLOG(1) << __PRETTY_FUNCTION__ << ": started";
108
location::Update<location::Position> update
130
location::Update<location::Position> position_update
110
132
d->configuration.reference_position,
111
133
location::Clock::now()
114
timespec ts {0, d->configuration.update_period.count() * 1000 * 1000};
136
location::Update<location::Heading> heading_update
138
d->configuration.reference_heading,
139
location::Clock::now()
142
location::Update<location::Velocity> velocity_update
144
d->configuration.reference_velocity,
145
location::Clock::now()
116
148
while (!d->stop_requested)
118
update.when = location::Clock::now();
119
deliver_position_updates(update);
120
::nanosleep(&ts, nullptr);
150
position_update.when = location::Clock::now();
151
heading_update.when = location::Clock::now();
152
velocity_update.when = location::Clock::now();
154
mutable_updates().position(position_update);
155
mutable_updates().heading(heading_update);
156
mutable_updates().velocity(velocity_update);
158
std::this_thread::sleep_for(d->configuration.update_period);
161
d->state.store(Private::State::stopped);
124
d->state.store(Private::State::stopped);
125
VLOG(1) << "dummy::Provider::start_position_updates: stopped";
128
165
void dummy::Provider::stop_position_updates()
133
170
d->state.store(Private::State::stopping);
134
VLOG(1) << "dummy::Provider::stop_position_updates: stopping";
171
VLOG(1) << __PRETTY_FUNCTION__ << ": stopping";
173
d->stop_requested = true;
135
175
if (d->worker.joinable())
137
d->stop_requested = true;
138
176
d->worker.join();