SensESP 2.7.2
Universal Signal K sensor toolkit ESP32
Loading...
Searching...
No Matches
ui_output.h
Go to the documentation of this file.
1#ifndef _SENSESP_UI_UI_OUTPUT_H_
2#define _SENSESP_UI_UI_OUTPUT_H_
3#include <ArduinoJson.h>
4
5#include <functional>
6#include <map>
7
8#include "Arduino.h"
12
13namespace sensesp {
14
15constexpr char kUIOutputDefaultGroup[] = "Default";
16constexpr int kUIOutputDefaultOrder = 1000;
17
18class UIOutputBase : virtual public Observable {
19 protected:
23 static std::map<String, UIOutputBase*> ui_outputs_;
24
25 public:
30
31 String& get_name() { return name_; }
32
33 virtual void set_json(const JsonObject& obj) {}
34
35 static const std::map<String, UIOutputBase*>* get_ui_outputs() {
36 return &ui_outputs_;
37 }
38};
39
40template <typename T>
42 private:
43 std::function<T()> value_function_;
44
45 public:
46 UILambdaOutput(String name, std::function<T()> function,
49 : UIOutputBase(name, group, order), value_function_(function) {}
50
51 T get() { return value_function_(); }
52
53 void set_json(const JsonObject& obj) override {
54 JsonObject output = obj.createNestedObject(name_);
55 output["Value"] = get();
56 output["Group"] = group_;
57 output["Order"] = order_;
58 }
59};
60
61extern std::map<String, UIOutputBase*> ui_outputs;
62
63template <typename T>
64class UIOutput : public UIOutputBase,
65 public ObservableValue<T>,
66 public ValueConsumer<T> {
67 public:
70
76
77 void set_json(const JsonObject& obj) override {
78 JsonObject output = obj.createNestedObject(name_);
80 output["Group"] = group_;
81 output["Order"] = order_;
82 }
83
84 void set_input(T new_value, uint8_t input_channel = 0) override {
85 this->ValueProducer<T>::emit(new_value);
86 }
87};
88} // namespace sensesp
89
90#endif
Construct a new transform based on a single function.
A base class which allow observers to attach callbacks to themselves. The callbacks will be called wh...
Definition observable.h:16
A value that notifies its observers if it gets changed.
UILambdaOutput(String name, std::function< T()> function, String group=kUIOutputDefaultGroup, int order=kUIOutputDefaultOrder)
Definition ui_output.h:46
void set_json(const JsonObject &obj) override
Definition ui_output.h:53
static const std::map< String, UIOutputBase * > * get_ui_outputs()
Definition ui_output.h:35
String & get_name()
Definition ui_output.h:31
UIOutputBase(String name, String group, int order)
Definition ui_output.h:26
static std::map< String, UIOutputBase * > ui_outputs_
Definition ui_output.h:23
virtual void set_json(const JsonObject &obj)
Definition ui_output.h:33
void set_json(const JsonObject &obj) override
Definition ui_output.h:77
void set_input(T new_value, uint8_t input_channel=0) override
Definition ui_output.h:84
UIOutput(String name)
Definition ui_output.h:68
UIOutput(String name, T value, String group=kUIOutputDefaultGroup, int order=kUIOutputDefaultOrder)
Definition ui_output.h:71
A base class for piece of code (like a transform) that accepts data for input. ValueConsumers can acc...
virtual const T & get() const
void emit(T new_value)
constexpr int kUIOutputDefaultOrder
Definition ui_output.h:16
constexpr char kUIOutputDefaultGroup[]
Definition ui_output.h:15
std::map< String, UIOutputBase * > ui_outputs