18 #ifndef LOCATION_SERVICE_COM_UBUNTU_LOCATION_PROVIDER_H_
19 #define LOCATION_SERVICE_COM_UBUNTU_LOCATION_PROVIDER_H_
21 #include "com/ubuntu/location/channel.h"
22 #include "com/ubuntu/location/criteria.h"
23 #include "com/ubuntu/location/heading.h"
24 #include "com/ubuntu/location/position.h"
25 #include "com/ubuntu/location/update.h"
26 #include "com/ubuntu/location/velocity.h"
41 typedef std::shared_ptr<Provider> Ptr;
43 enum class Feature : std::size_t
50 typedef std::bitset<3> FeatureFlags;
52 enum class Requirement : std::size_t
60 typedef std::bitset<4> RequirementFlags;
65 typedef std::shared_ptr<Controller> Ptr;
71 Cache() : d{ T{},
false }
74 const T& value()
const {
return d.value; }
75 void update(
const T& new_value) { d.value = new_value; d.is_valid =
true; }
76 bool is_valid()
const {
return d.is_valid; }
77 void invalidate() { d.is_valid =
false; }
91 virtual void start_position_updates();
92 virtual void stop_position_updates();
93 bool are_position_updates_running()
const;
95 virtual void start_heading_updates();
96 virtual void stop_heading_updates();
97 bool are_heading_updates_running()
const;
99 virtual void start_velocity_updates();
100 virtual void stop_velocity_updates();
101 bool are_velocity_updates_running()
const;
117 std::atomic<int> position_updates_counter;
118 std::atomic<int> heading_updates_counter;
119 std::atomic<int> velocity_updates_counter;
120 ScopedChannelConnection position_update_connection;
121 ScopedChannelConnection velocity_update_connection;
122 ScopedChannelConnection heading_update_connection;
136 virtual const Controller::Ptr& state_controller()
const;
138 virtual ChannelConnection subscribe_to_position_updates(std::function<
void(
const Update<Position>&)> f);
139 virtual ChannelConnection subscribe_to_heading_updates(std::function<
void(
const Update<Heading>&)> f);
140 virtual ChannelConnection subscribe_to_velocity_updates(std::function<
void(
const Update<Velocity>&)> f);
142 virtual bool supports(
const Feature& f)
const;
143 virtual bool requires(
const Requirement& r)
const;
145 virtual bool matches_criteria(
const Criteria&);
149 const FeatureFlags& feature_flags = FeatureFlags(),
150 const RequirementFlags& requirement_flags = RequirementFlags());
156 virtual void start_position_updates();
157 virtual void stop_position_updates();
159 virtual void start_heading_updates();
160 virtual void stop_heading_updates();
162 virtual void start_velocity_updates();
163 virtual void stop_velocity_updates();
166 FeatureFlags feature_flags;
167 RequirementFlags requirement_flags;
168 Channel<Update<Position>> position_updates_channel;
169 Channel<Update<Heading>> heading_updates_channel;
170 Channel<Update<Velocity>> velocity_updates_channel;
171 Controller::Ptr controller;
177 #endif // LOCATION_SERVICE_COM_UBUNTU_LOCATION_PROVIDER_H_