86
86
return velocity_updates_counter > 0;
89
const cul::Provider::Controller::Cache<cul::Update<cul::Position>>& cul::Provider::Controller::cached_position_update() const
91
return cached.position;
94
const cul::Provider::Controller::Cache<cul::Update<cul::Heading>>& cul::Provider::Controller::cached_heading_update() const
96
return cached.heading;
99
const cul::Provider::Controller::Cache<cul::Update<cul::Velocity>>& cul::Provider::Controller::cached_velocity_update() const
101
return cached.velocity;
104
89
cul::Provider::Controller::Controller(cul::Provider& instance)
105
90
: instance(instance),
106
91
position_updates_counter(0),
107
92
heading_updates_counter(0),
108
velocity_updates_counter(0),
111
Cache<Update<Position>>{},
112
Cache<Update<Velocity>>{},
113
Cache<Update<Heading>>{}
116
position_update_connection =
117
instance.subscribe_to_position_updates(
118
std::bind(&Controller::on_position_updated,
120
std::placeholders::_1));
122
velocity_update_connection =
123
instance.subscribe_to_velocity_updates(
124
std::bind(&Controller::on_velocity_updated,
126
std::placeholders::_1));
128
heading_update_connection =
129
instance.subscribe_to_heading_updates(
130
std::bind(&Controller::on_heading_updated,
132
std::placeholders::_1));
135
void cul::Provider::Controller::on_position_updated(const cul::Update<cul::Position>& position)
137
cached.position.update(position);
140
void cul::Provider::Controller::on_velocity_updated(const cul::Update<cul::Velocity>& velocity)
142
cached.velocity.update(velocity);
145
void cul::Provider::Controller::on_heading_updated(const cul::Update<cul::Heading>& heading)
147
cached.heading.update(heading);
93
velocity_updates_counter(0)
150
97
const cul::Provider::Controller::Ptr& cul::Provider::state_controller() const
155
cul::ChannelConnection cul::Provider::subscribe_to_position_updates(std::function<void(const cul::Update<cul::Position>&)> f)
157
return position_updates_channel.connect(f);
160
cul::ChannelConnection cul::Provider::subscribe_to_heading_updates(std::function<void(const cul::Update<cul::Heading>&)> f)
162
return heading_updates_channel.connect(f);
165
cul::ChannelConnection cul::Provider::subscribe_to_velocity_updates(std::function<void(const cul::Update<cul::Velocity>&)> f)
167
return velocity_updates_channel.connect(f);
170
bool cul::Provider::supports(const cul::Provider::Feature& f) const
172
return feature_flags.test(static_cast<std::size_t>(f));
175
bool cul::Provider::requires(const cul::Provider::Requirement& r) const
177
return requirement_flags.test(static_cast<std::size_t>(r));
102
bool cul::Provider::supports(const cul::Provider::Features& f) const
104
return (d.features & f) != Features::none;
107
bool cul::Provider::requires(const cul::Provider::Requirements& r) const
109
return (d.requirements & r) != Requirements::none;
180
112
bool cul::Provider::matches_criteria(const cul::Criteria&)
117
const cul::Provider::Updates& cul::Provider::updates() const
185
122
cul::Provider::Provider(
186
const cul::Provider::FeatureFlags& feature_flags,
187
const cul::Provider::RequirementFlags& requirement_flags)
188
: feature_flags(feature_flags),
189
requirement_flags(requirement_flags),
190
controller(new Controller(*this))
194
void cul::Provider::deliver_position_updates(const cul::Update<cul::Position>& update)
196
position_updates_channel(update);
199
void cul::Provider::deliver_heading_updates(const cul::Update<cul::Heading>& update)
201
heading_updates_channel(update);
204
void cul::Provider::deliver_velocity_updates(const cul::Update<cul::Velocity>& update)
206
velocity_updates_channel(update);
123
const cul::Provider::Features& features,
124
const cul::Provider::Requirements& requirements)
126
d.features = features;
127
d.requirements = requirements;
128
d.controller = std::shared_ptr<Provider::Controller>(new Provider::Controller(*this));
131
cul::Provider::Updates& cul::Provider::mutable_updates()
136
void cul::Provider::on_wifi_and_cell_reporting_state_changed(cul::WifiAndCellIdReportingState)
140
void cul::Provider::on_reference_location_updated(const cul::Update<cul::Position>&)
144
void cul::Provider::on_reference_velocity_updated(const cul::Update<cul::Velocity>&)
148
void cul::Provider::on_reference_heading_updated(const cul::Update<cul::Heading>&)
209
152
void cul::Provider::start_position_updates() {}
212
155
void cul::Provider::stop_heading_updates() {}
213
156
void cul::Provider::start_velocity_updates() {}
214
157
void cul::Provider::stop_velocity_updates() {}
159
cul::Provider::Features cul::operator|(cul::Provider::Features lhs, cul::Provider::Features rhs)
161
return static_cast<cul::Provider::Features>(static_cast<unsigned int>(lhs) | static_cast<unsigned int>(rhs));
164
cul::Provider::Features cul::operator&(cul::Provider::Features lhs, cul::Provider::Features rhs)
166
return static_cast<cul::Provider::Features>(static_cast<unsigned int>(lhs) & static_cast<unsigned int>(rhs));
169
cul::Provider::Requirements cul::operator|(cul::Provider::Requirements lhs, cul::Provider::Requirements rhs)
171
return static_cast<cul::Provider::Requirements>(static_cast<unsigned int>(lhs) | static_cast<unsigned int>(rhs));
174
cul::Provider::Requirements cul::operator&(cul::Provider::Requirements lhs, cul::Provider::Requirements rhs)
176
return static_cast<cul::Provider::Requirements>(static_cast<unsigned int>(lhs) & static_cast<unsigned int>(rhs));