Skip to content

Commit a29afa6

Browse files
committed
speedometer: Implement data broker
1 parent e58c48f commit a29afa6

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed

plugins/speedometer/src/speedometer.cpp

+26-11
Original file line numberDiff line numberDiff line change
@@ -19,42 +19,57 @@
1919
* \file speedometer.cpp
2020
*/
2121

22+
#include <memory> // for shared_ptr<>
23+
24+
#include <fable/confable.hpp> // for Confable, CONFABLE_FRIENDS
25+
#include <fable/json.hpp> // for Json
26+
2227
#include <cloe/component.hpp> // for Component, ComponentFactory, ...
2328
#include <cloe/component/utility/ego_sensor_canon.hpp> // for EgoSensorCanon
29+
#include <cloe/data_broker.hpp> // for DataBroker
2430
#include <cloe/plugin.hpp> // for EXPORT_CLOE_PLUGIN
2531
#include <cloe/registrar.hpp> // for Registrar
2632
#include <cloe/trigger/evaluate_event.hpp> // for EvaluateCallback
2733
#include <cloe/vehicle.hpp> // for Vehicle
28-
using namespace cloe;
2934

30-
struct SpeedometerConf : public Confable {
35+
struct SpeedometerConf : public fable::Confable {
3136
CONFABLE_FRIENDS(SpeedometerConf)
3237
};
3338

34-
class Speedometer : public Component {
39+
class Speedometer : public cloe::Component {
3540
public:
36-
Speedometer(const std::string& name, const SpeedometerConf&, std::shared_ptr<EgoSensor> ego)
41+
Speedometer(const std::string& name, const SpeedometerConf&, std::shared_ptr<cloe::EgoSensor> ego)
3742
: Component(name, "provides an event trigger to evaluate speed in km/h"), sensor_(ego) {}
3843

3944
virtual ~Speedometer() noexcept = default;
4045

41-
void enroll(Registrar& r) override {
46+
void enroll(cloe::Registrar& r) override {
4247
callback_kmph_ =
43-
r.register_event<events::EvaluateFactory, double>("kmph", "vehicle speed in km/h");
48+
r.register_event<cloe::events::EvaluateFactory, double>("kmph", "vehicle speed in km/h");
49+
50+
auto& db = r.data_broker();
51+
{
52+
std::string signal_name = fmt::format("components.{}.kmph", name());
53+
auto signal = db.declare<double>(signal_name);
54+
signal->set_getter<double>(
55+
[this]() -> double { return cloe::utility::EgoSensorCanon(sensor_).velocity_as_kmph(); });
56+
}
4457
}
4558

46-
Duration process(const Sync& sync) override {
47-
auto ego = utility::EgoSensorCanon(sensor_);
59+
cloe::Duration process(const cloe::Sync& sync) override {
60+
auto ego = cloe::utility::EgoSensorCanon(sensor_);
4861
callback_kmph_->trigger(sync, ego.velocity_as_kmph());
4962
return sync.time();
5063
}
5164

52-
Json active_state() const override { return nullptr; }
65+
fable::Json active_state() const override {
66+
return fable::Json{{"kmph", utility::EgoSensorCanon(sensor_).velocity_as_kmph()}};
67+
}
5368

5469
private:
5570
// State:
56-
std::shared_ptr<events::EvaluateCallback> callback_kmph_;
57-
std::shared_ptr<EgoSensor> sensor_;
71+
std::shared_ptr<cloe::events::EvaluateCallback> callback_kmph_;
72+
std::shared_ptr<cloe::EgoSensor> sensor_;
5873
};
5974

6075
DEFINE_COMPONENT_FACTORY(SpeedometerFactory, SpeedometerConf, "speedometer",

0 commit comments

Comments
 (0)