mirror of
https://github.com/esphome/esphome.git
synced 2026-06-24 13:43:00 +00:00
Mark user-configurable classes as final (part 5/21)
Add the C++ `final` specifier to leaf, user-configurable component classes and automation action/trigger/condition primitives so that classes meant to be terminal cannot be subclassed by external components. Only classes never used as a base anywhere in the tree are marked. Part 5 of 21, split alphabetically by component (dfrobot_sen0395 .. esp32_ble_beacon).
This commit is contained in:
@@ -8,13 +8,13 @@
|
|||||||
namespace esphome::dfrobot_sen0395 {
|
namespace esphome::dfrobot_sen0395 {
|
||||||
|
|
||||||
template<typename... Ts>
|
template<typename... Ts>
|
||||||
class DfrobotSen0395ResetAction : public Action<Ts...>, public Parented<DfrobotSen0395Component> {
|
class DfrobotSen0395ResetAction final : public Action<Ts...>, public Parented<DfrobotSen0395Component> {
|
||||||
public:
|
public:
|
||||||
void play(const Ts &...x) { this->parent_->enqueue(make_unique<ResetSystemCommand>()); }
|
void play(const Ts &...x) { this->parent_->enqueue(make_unique<ResetSystemCommand>()); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts>
|
template<typename... Ts>
|
||||||
class DfrobotSen0395SettingsAction : public Action<Ts...>, public Parented<DfrobotSen0395Component> {
|
class DfrobotSen0395SettingsAction final : public Action<Ts...>, public Parented<DfrobotSen0395Component> {
|
||||||
public:
|
public:
|
||||||
TEMPLATABLE_VALUE(int8_t, factory_reset)
|
TEMPLATABLE_VALUE(int8_t, factory_reset)
|
||||||
TEMPLATABLE_VALUE(int8_t, start_after_power_on)
|
TEMPLATABLE_VALUE(int8_t, start_after_power_on)
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ class CircularCommandQueue {
|
|||||||
std::unique_ptr<Command> commands_[COMMAND_QUEUE_SIZE];
|
std::unique_ptr<Command> commands_[COMMAND_QUEUE_SIZE];
|
||||||
};
|
};
|
||||||
|
|
||||||
class DfrobotSen0395Component : public uart::UARTDevice, public Component {
|
class DfrobotSen0395Component final : public uart::UARTDevice, public Component {
|
||||||
#ifdef USE_SWITCH
|
#ifdef USE_SWITCH
|
||||||
SUB_SWITCH(sensor_active)
|
SUB_SWITCH(sensor_active)
|
||||||
SUB_SWITCH(turn_on_led)
|
SUB_SWITCH(turn_on_led)
|
||||||
|
|||||||
@@ -9,22 +9,22 @@ namespace esphome::dfrobot_sen0395 {
|
|||||||
|
|
||||||
class DfrobotSen0395Switch : public switch_::Switch, public Component, public Parented<DfrobotSen0395Component> {};
|
class DfrobotSen0395Switch : public switch_::Switch, public Component, public Parented<DfrobotSen0395Component> {};
|
||||||
|
|
||||||
class Sen0395PowerSwitch : public DfrobotSen0395Switch {
|
class Sen0395PowerSwitch final : public DfrobotSen0395Switch {
|
||||||
public:
|
public:
|
||||||
void write_state(bool state) override;
|
void write_state(bool state) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Sen0395LedSwitch : public DfrobotSen0395Switch {
|
class Sen0395LedSwitch final : public DfrobotSen0395Switch {
|
||||||
public:
|
public:
|
||||||
void write_state(bool state) override;
|
void write_state(bool state) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Sen0395UartPresenceSwitch : public DfrobotSen0395Switch {
|
class Sen0395UartPresenceSwitch final : public DfrobotSen0395Switch {
|
||||||
public:
|
public:
|
||||||
void write_state(bool state) override;
|
void write_state(bool state) override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class Sen0395StartAfterBootSwitch : public DfrobotSen0395Switch {
|
class Sen0395StartAfterBootSwitch final : public DfrobotSen0395Switch {
|
||||||
public:
|
public:
|
||||||
void write_state(bool state) override;
|
void write_state(bool state) override;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ enum DHTModel : uint8_t {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// Component for reading temperature/humidity measurements from DHT11/DHT22 sensors.
|
/// Component for reading temperature/humidity measurements from DHT11/DHT22 sensors.
|
||||||
class DHT : public PollingComponent {
|
class DHT final : public PollingComponent {
|
||||||
public:
|
public:
|
||||||
/** Manually select the DHT model.
|
/** Manually select the DHT model.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
namespace esphome::dht12 {
|
namespace esphome::dht12 {
|
||||||
|
|
||||||
class DHT12Component : public PollingComponent, public i2c::I2CDevice {
|
class DHT12Component final : public PollingComponent, public i2c::I2CDevice {
|
||||||
public:
|
public:
|
||||||
void setup() override;
|
void setup() override;
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
|
|||||||
@@ -796,7 +796,7 @@ class Display : public PollingComponent {
|
|||||||
bool show_test_card_{false};
|
bool show_test_card_{false};
|
||||||
};
|
};
|
||||||
|
|
||||||
class DisplayPage {
|
class DisplayPage final {
|
||||||
public:
|
public:
|
||||||
DisplayPage(display_writer_t writer);
|
DisplayPage(display_writer_t writer);
|
||||||
void show();
|
void show();
|
||||||
@@ -814,7 +814,7 @@ class DisplayPage {
|
|||||||
DisplayPage *next_{nullptr};
|
DisplayPage *next_{nullptr};
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class DisplayPageShowAction : public Action<Ts...> {
|
template<typename... Ts> class DisplayPageShowAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
TEMPLATABLE_VALUE(DisplayPage *, page)
|
TEMPLATABLE_VALUE(DisplayPage *, page)
|
||||||
|
|
||||||
@@ -826,7 +826,7 @@ template<typename... Ts> class DisplayPageShowAction : public Action<Ts...> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class DisplayPageShowNextAction : public Action<Ts...> {
|
template<typename... Ts> class DisplayPageShowNextAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
DisplayPageShowNextAction(Display *buffer) : buffer_(buffer) {}
|
DisplayPageShowNextAction(Display *buffer) : buffer_(buffer) {}
|
||||||
|
|
||||||
@@ -835,7 +835,7 @@ template<typename... Ts> class DisplayPageShowNextAction : public Action<Ts...>
|
|||||||
Display *buffer_;
|
Display *buffer_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class DisplayPageShowPrevAction : public Action<Ts...> {
|
template<typename... Ts> class DisplayPageShowPrevAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
DisplayPageShowPrevAction(Display *buffer) : buffer_(buffer) {}
|
DisplayPageShowPrevAction(Display *buffer) : buffer_(buffer) {}
|
||||||
|
|
||||||
@@ -844,7 +844,7 @@ template<typename... Ts> class DisplayPageShowPrevAction : public Action<Ts...>
|
|||||||
Display *buffer_;
|
Display *buffer_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class DisplayIsDisplayingPageCondition : public Condition<Ts...> {
|
template<typename... Ts> class DisplayIsDisplayingPageCondition final : public Condition<Ts...> {
|
||||||
public:
|
public:
|
||||||
DisplayIsDisplayingPageCondition(Display *parent) : parent_(parent) {}
|
DisplayIsDisplayingPageCondition(Display *parent) : parent_(parent) {}
|
||||||
|
|
||||||
@@ -856,7 +856,7 @@ template<typename... Ts> class DisplayIsDisplayingPageCondition : public Conditi
|
|||||||
DisplayPage *page_;
|
DisplayPage *page_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DisplayOnPageChangeTrigger : public Trigger<DisplayPage *, DisplayPage *> {
|
class DisplayOnPageChangeTrigger final : public Trigger<DisplayPage *, DisplayPage *> {
|
||||||
public:
|
public:
|
||||||
explicit DisplayOnPageChangeTrigger(Display *parent) { parent->add_on_page_change_trigger(this); }
|
explicit DisplayOnPageChangeTrigger(Display *parent) { parent->add_on_page_change_trigger(this); }
|
||||||
void process(DisplayPage *from, DisplayPage *to);
|
void process(DisplayPage *from, DisplayPage *to);
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
namespace esphome::display_menu_base {
|
namespace esphome::display_menu_base {
|
||||||
|
|
||||||
template<typename... Ts> class UpAction : public Action<Ts...> {
|
template<typename... Ts> class UpAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
explicit UpAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
explicit UpAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
||||||
|
|
||||||
@@ -15,7 +15,7 @@ template<typename... Ts> class UpAction : public Action<Ts...> {
|
|||||||
DisplayMenuComponent *menu_;
|
DisplayMenuComponent *menu_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class DownAction : public Action<Ts...> {
|
template<typename... Ts> class DownAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
explicit DownAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
explicit DownAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
||||||
|
|
||||||
@@ -25,7 +25,7 @@ template<typename... Ts> class DownAction : public Action<Ts...> {
|
|||||||
DisplayMenuComponent *menu_;
|
DisplayMenuComponent *menu_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class LeftAction : public Action<Ts...> {
|
template<typename... Ts> class LeftAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
explicit LeftAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
explicit LeftAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
||||||
|
|
||||||
@@ -35,7 +35,7 @@ template<typename... Ts> class LeftAction : public Action<Ts...> {
|
|||||||
DisplayMenuComponent *menu_;
|
DisplayMenuComponent *menu_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class RightAction : public Action<Ts...> {
|
template<typename... Ts> class RightAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
explicit RightAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
explicit RightAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ template<typename... Ts> class RightAction : public Action<Ts...> {
|
|||||||
DisplayMenuComponent *menu_;
|
DisplayMenuComponent *menu_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class EnterAction : public Action<Ts...> {
|
template<typename... Ts> class EnterAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
explicit EnterAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
explicit EnterAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
||||||
|
|
||||||
@@ -55,7 +55,7 @@ template<typename... Ts> class EnterAction : public Action<Ts...> {
|
|||||||
DisplayMenuComponent *menu_;
|
DisplayMenuComponent *menu_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class ShowAction : public Action<Ts...> {
|
template<typename... Ts> class ShowAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
explicit ShowAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
explicit ShowAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
||||||
|
|
||||||
@@ -65,7 +65,7 @@ template<typename... Ts> class ShowAction : public Action<Ts...> {
|
|||||||
DisplayMenuComponent *menu_;
|
DisplayMenuComponent *menu_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class HideAction : public Action<Ts...> {
|
template<typename... Ts> class HideAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
explicit HideAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
explicit HideAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
||||||
|
|
||||||
@@ -75,7 +75,7 @@ template<typename... Ts> class HideAction : public Action<Ts...> {
|
|||||||
DisplayMenuComponent *menu_;
|
DisplayMenuComponent *menu_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class ShowMainAction : public Action<Ts...> {
|
template<typename... Ts> class ShowMainAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
explicit ShowMainAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
explicit ShowMainAction(DisplayMenuComponent *menu) : menu_(menu) {}
|
||||||
|
|
||||||
@@ -84,7 +84,7 @@ template<typename... Ts> class ShowMainAction : public Action<Ts...> {
|
|||||||
protected:
|
protected:
|
||||||
DisplayMenuComponent *menu_;
|
DisplayMenuComponent *menu_;
|
||||||
};
|
};
|
||||||
template<typename... Ts> class IsActiveCondition : public Condition<Ts...> {
|
template<typename... Ts> class IsActiveCondition final : public Condition<Ts...> {
|
||||||
public:
|
public:
|
||||||
explicit IsActiveCondition(DisplayMenuComponent *menu) : menu_(menu) {}
|
explicit IsActiveCondition(DisplayMenuComponent *menu) : menu_(menu) {}
|
||||||
bool check(const Ts &...x) override { return this->menu_->is_active(); }
|
bool check(const Ts &...x) override { return this->menu_->is_active(); }
|
||||||
@@ -93,7 +93,7 @@ template<typename... Ts> class IsActiveCondition : public Condition<Ts...> {
|
|||||||
DisplayMenuComponent *menu_;
|
DisplayMenuComponent *menu_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DisplayMenuOnEnterTrigger : public Trigger<const MenuItem *> {
|
class DisplayMenuOnEnterTrigger final : public Trigger<const MenuItem *> {
|
||||||
public:
|
public:
|
||||||
explicit DisplayMenuOnEnterTrigger(MenuItem *parent) : parent_(parent) {
|
explicit DisplayMenuOnEnterTrigger(MenuItem *parent) : parent_(parent) {
|
||||||
parent->add_on_enter_callback([this]() { this->trigger(this->parent_); });
|
parent->add_on_enter_callback([this]() { this->trigger(this->parent_); });
|
||||||
@@ -103,7 +103,7 @@ class DisplayMenuOnEnterTrigger : public Trigger<const MenuItem *> {
|
|||||||
MenuItem *parent_;
|
MenuItem *parent_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DisplayMenuOnLeaveTrigger : public Trigger<const MenuItem *> {
|
class DisplayMenuOnLeaveTrigger final : public Trigger<const MenuItem *> {
|
||||||
public:
|
public:
|
||||||
explicit DisplayMenuOnLeaveTrigger(MenuItem *parent) : parent_(parent) {
|
explicit DisplayMenuOnLeaveTrigger(MenuItem *parent) : parent_(parent) {
|
||||||
parent->add_on_leave_callback([this]() { this->trigger(this->parent_); });
|
parent->add_on_leave_callback([this]() { this->trigger(this->parent_); });
|
||||||
@@ -113,7 +113,7 @@ class DisplayMenuOnLeaveTrigger : public Trigger<const MenuItem *> {
|
|||||||
MenuItem *parent_;
|
MenuItem *parent_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DisplayMenuOnValueTrigger : public Trigger<const MenuItem *> {
|
class DisplayMenuOnValueTrigger final : public Trigger<const MenuItem *> {
|
||||||
public:
|
public:
|
||||||
explicit DisplayMenuOnValueTrigger(MenuItem *parent) : parent_(parent) {
|
explicit DisplayMenuOnValueTrigger(MenuItem *parent) : parent_(parent) {
|
||||||
parent->add_on_value_callback([this]() { this->trigger(this->parent_); });
|
parent->add_on_value_callback([this]() { this->trigger(this->parent_); });
|
||||||
@@ -123,7 +123,7 @@ class DisplayMenuOnValueTrigger : public Trigger<const MenuItem *> {
|
|||||||
MenuItem *parent_;
|
MenuItem *parent_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DisplayMenuOnNextTrigger : public Trigger<const MenuItem *> {
|
class DisplayMenuOnNextTrigger final : public Trigger<const MenuItem *> {
|
||||||
public:
|
public:
|
||||||
explicit DisplayMenuOnNextTrigger(MenuItemCustom *parent) : parent_(parent) {
|
explicit DisplayMenuOnNextTrigger(MenuItemCustom *parent) : parent_(parent) {
|
||||||
parent->add_on_next_callback([this]() { this->trigger(this->parent_); });
|
parent->add_on_next_callback([this]() { this->trigger(this->parent_); });
|
||||||
@@ -133,7 +133,7 @@ class DisplayMenuOnNextTrigger : public Trigger<const MenuItem *> {
|
|||||||
MenuItemCustom *parent_;
|
MenuItemCustom *parent_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DisplayMenuOnPrevTrigger : public Trigger<const MenuItem *> {
|
class DisplayMenuOnPrevTrigger final : public Trigger<const MenuItem *> {
|
||||||
public:
|
public:
|
||||||
explicit DisplayMenuOnPrevTrigger(MenuItemCustom *parent) : parent_(parent) {
|
explicit DisplayMenuOnPrevTrigger(MenuItemCustom *parent) : parent_(parent) {
|
||||||
parent->add_on_prev_callback([this]() { this->trigger(this->parent_); });
|
parent->add_on_prev_callback([this]() { this->trigger(this->parent_); });
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ class MenuItem {
|
|||||||
CallbackManager<void()> on_value_callbacks_{};
|
CallbackManager<void()> on_value_callbacks_{};
|
||||||
};
|
};
|
||||||
|
|
||||||
class MenuItemMenu : public MenuItem {
|
class MenuItemMenu final : public MenuItem {
|
||||||
public:
|
public:
|
||||||
explicit MenuItemMenu() : MenuItem(MENU_ITEM_MENU) {}
|
explicit MenuItemMenu() : MenuItem(MENU_ITEM_MENU) {}
|
||||||
void add_item(MenuItem *item) {
|
void add_item(MenuItem *item) {
|
||||||
@@ -97,7 +97,7 @@ class MenuItemEditable : public MenuItem {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#ifdef USE_SELECT
|
#ifdef USE_SELECT
|
||||||
class MenuItemSelect : public MenuItemEditable {
|
class MenuItemSelect final : public MenuItemEditable {
|
||||||
public:
|
public:
|
||||||
explicit MenuItemSelect() : MenuItemEditable(MENU_ITEM_SELECT) {}
|
explicit MenuItemSelect() : MenuItemEditable(MENU_ITEM_SELECT) {}
|
||||||
void set_select_variable(select::Select *var) { this->select_var_ = var; }
|
void set_select_variable(select::Select *var) { this->select_var_ = var; }
|
||||||
@@ -114,7 +114,7 @@ class MenuItemSelect : public MenuItemEditable {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_NUMBER
|
#ifdef USE_NUMBER
|
||||||
class MenuItemNumber : public MenuItemEditable {
|
class MenuItemNumber final : public MenuItemEditable {
|
||||||
public:
|
public:
|
||||||
explicit MenuItemNumber() : MenuItemEditable(MENU_ITEM_NUMBER) {}
|
explicit MenuItemNumber() : MenuItemEditable(MENU_ITEM_NUMBER) {}
|
||||||
void set_number_variable(number::Number *var) { this->number_var_ = var; }
|
void set_number_variable(number::Number *var) { this->number_var_ = var; }
|
||||||
@@ -135,7 +135,7 @@ class MenuItemNumber : public MenuItemEditable {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_SWITCH
|
#ifdef USE_SWITCH
|
||||||
class MenuItemSwitch : public MenuItemEditable {
|
class MenuItemSwitch final : public MenuItemEditable {
|
||||||
public:
|
public:
|
||||||
explicit MenuItemSwitch() : MenuItemEditable(MENU_ITEM_SWITCH) {}
|
explicit MenuItemSwitch() : MenuItemEditable(MENU_ITEM_SWITCH) {}
|
||||||
void set_switch_variable(switch_::Switch *var) { this->switch_var_ = var; }
|
void set_switch_variable(switch_::Switch *var) { this->switch_var_ = var; }
|
||||||
@@ -158,7 +158,7 @@ class MenuItemSwitch : public MenuItemEditable {
|
|||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class MenuItemCommand : public MenuItem {
|
class MenuItemCommand final : public MenuItem {
|
||||||
public:
|
public:
|
||||||
explicit MenuItemCommand() : MenuItem(MENU_ITEM_COMMAND) {}
|
explicit MenuItemCommand() : MenuItem(MENU_ITEM_COMMAND) {}
|
||||||
|
|
||||||
@@ -166,7 +166,7 @@ class MenuItemCommand : public MenuItem {
|
|||||||
bool select_prev() override;
|
bool select_prev() override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class MenuItemCustom : public MenuItemEditable {
|
class MenuItemCustom final : public MenuItemEditable {
|
||||||
public:
|
public:
|
||||||
explicit MenuItemCustom() : MenuItemEditable(MENU_ITEM_CUSTOM) {}
|
explicit MenuItemCustom() : MenuItemEditable(MENU_ITEM_CUSTOM) {}
|
||||||
template<typename F> void add_on_next_callback(F &&cb) { this->on_next_callbacks_.add(std::forward<F>(cb)); }
|
template<typename F> void add_on_next_callback(F &&cb) { this->on_next_callbacks_.add(std::forward<F>(cb)); }
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ struct CustomPattern {
|
|||||||
std::optional<std::array<uint8_t, 6>> default_obis;
|
std::optional<std::array<uint8_t, 6>> default_obis;
|
||||||
};
|
};
|
||||||
|
|
||||||
class DlmsMeterComponent : public Component, public uart::UARTDevice {
|
class DlmsMeterComponent final : public Component, public uart::UARTDevice {
|
||||||
public:
|
public:
|
||||||
DlmsMeterComponent(uint32_t receive_timeout_ms, bool skip_crc_check,
|
DlmsMeterComponent(uint32_t receive_timeout_ms, bool skip_crc_check,
|
||||||
std::optional<std::array<uint8_t, 16>> decryption_key,
|
std::optional<std::array<uint8_t, 16>> decryption_key,
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ static const uint8_t DPS310_INIT_TIMEOUT = 20; // How long to wait for DPS
|
|||||||
static const uint8_t DPS310_NUM_COEF_REGS = 18; // Number of coefficients we need to read from the device
|
static const uint8_t DPS310_NUM_COEF_REGS = 18; // Number of coefficients we need to read from the device
|
||||||
static const int32_t DPS310_SCALE_FACTOR = 1572864; // Measurement compensation scale factor
|
static const int32_t DPS310_SCALE_FACTOR = 1572864; // Measurement compensation scale factor
|
||||||
|
|
||||||
class DPS310Component : public PollingComponent, public i2c::I2CDevice {
|
class DPS310Component final : public PollingComponent, public i2c::I2CDevice {
|
||||||
public:
|
public:
|
||||||
void setup() override;
|
void setup() override;
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
namespace esphome::ds1307 {
|
namespace esphome::ds1307 {
|
||||||
|
|
||||||
class DS1307Component : public time::RealTimeClock, public i2c::I2CDevice {
|
class DS1307Component final : public time::RealTimeClock, public i2c::I2CDevice {
|
||||||
public:
|
public:
|
||||||
void setup() override;
|
void setup() override;
|
||||||
void update() override;
|
void update() override;
|
||||||
@@ -55,12 +55,12 @@ class DS1307Component : public time::RealTimeClock, public i2c::I2CDevice {
|
|||||||
} ds1307_;
|
} ds1307_;
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class WriteAction : public Action<Ts...>, public Parented<DS1307Component> {
|
template<typename... Ts> class WriteAction final : public Action<Ts...>, public Parented<DS1307Component> {
|
||||||
public:
|
public:
|
||||||
void play(const Ts &...x) override { this->parent_->write_time(); }
|
void play(const Ts &...x) override { this->parent_->write_time(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class ReadAction : public Action<Ts...>, public Parented<DS1307Component> {
|
template<typename... Ts> class ReadAction final : public Action<Ts...>, public Parented<DS1307Component> {
|
||||||
public:
|
public:
|
||||||
void play(const Ts &...x) override { this->parent_->read_time(); }
|
void play(const Ts &...x) override { this->parent_->read_time(); }
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
namespace esphome::ds2484 {
|
namespace esphome::ds2484 {
|
||||||
|
|
||||||
class DS2484OneWireBus : public one_wire::OneWireBus, public i2c::I2CDevice, public Component {
|
class DS2484OneWireBus final : public one_wire::OneWireBus, public i2c::I2CDevice, public Component {
|
||||||
public:
|
public:
|
||||||
void setup() override;
|
void setup() override;
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ using MyData = dsmr_parser::ParsedData<DSMR_TEXT_SENSOR_LIST(DSMR_IDENTITY, DSMR
|
|||||||
using MyData = dsmr_parser::ParsedData<DSMR_SENSOR_LIST(DSMR_IDENTITY, DSMR_COMMA)>;
|
using MyData = dsmr_parser::ParsedData<DSMR_SENSOR_LIST(DSMR_IDENTITY, DSMR_COMMA)>;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
class Dsmr : public Component, public uart::UARTDevice {
|
class Dsmr final : public Component, public uart::UARTDevice {
|
||||||
public:
|
public:
|
||||||
Dsmr(uart::UARTComponent *uart, bool crc_check, size_t max_telegram_length, uint32_t request_interval,
|
Dsmr(uart::UARTComponent *uart, bool crc_check, size_t max_telegram_length, uint32_t request_interval,
|
||||||
uint32_t receive_timeout, GPIOPin *request_pin, const char *decryption_key)
|
uint32_t receive_timeout, GPIOPin *request_pin, const char *decryption_key)
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ struct DutyCycleSensorStore {
|
|||||||
static void gpio_intr(DutyCycleSensorStore *arg);
|
static void gpio_intr(DutyCycleSensorStore *arg);
|
||||||
};
|
};
|
||||||
|
|
||||||
class DutyCycleSensor : public sensor::Sensor, public PollingComponent {
|
class DutyCycleSensor final : public sensor::Sensor, public PollingComponent {
|
||||||
public:
|
public:
|
||||||
void set_pin(InternalGPIOPin *pin) { pin_ = pin; }
|
void set_pin(InternalGPIOPin *pin) { pin_ = pin; }
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
namespace esphome::duty_time_sensor {
|
namespace esphome::duty_time_sensor {
|
||||||
|
|
||||||
class DutyTimeSensor : public sensor::Sensor, public PollingComponent {
|
class DutyTimeSensor final : public sensor::Sensor, public PollingComponent {
|
||||||
public:
|
public:
|
||||||
void setup() override;
|
void setup() override;
|
||||||
void update() override;
|
void update() override;
|
||||||
@@ -61,7 +61,7 @@ template<typename... Ts> class ResetAction : public BaseAction<Ts...> {
|
|||||||
void play(const Ts &...x) override { this->parent_->reset(); }
|
void play(const Ts &...x) override { this->parent_->reset(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class RunningCondition : public Condition<Ts...>, public Parented<DutyTimeSensor> {
|
template<typename... Ts> class RunningCondition final : public Condition<Ts...>, public Parented<DutyTimeSensor> {
|
||||||
public:
|
public:
|
||||||
explicit RunningCondition(DutyTimeSensor *parent, bool state) : Parented(parent), state_(state) {}
|
explicit RunningCondition(DutyTimeSensor *parent, bool state) : Parented(parent), state_(state) {}
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ struct UniverseConsumer {
|
|||||||
uint16_t consumers;
|
uint16_t consumers;
|
||||||
};
|
};
|
||||||
|
|
||||||
class E131Component : public esphome::Component {
|
class E131Component final : public esphome::Component {
|
||||||
public:
|
public:
|
||||||
E131Component();
|
E131Component();
|
||||||
~E131Component();
|
~E131Component();
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
namespace esphome::ee895 {
|
namespace esphome::ee895 {
|
||||||
|
|
||||||
/// This class implements support for the ee895 of temperature i2c sensors.
|
/// This class implements support for the ee895 of temperature i2c sensors.
|
||||||
class EE895Component : public PollingComponent, public i2c::I2CDevice {
|
class EE895Component final : public PollingComponent, public i2c::I2CDevice {
|
||||||
public:
|
public:
|
||||||
void set_co2_sensor(sensor::Sensor *co2) { co2_sensor_ = co2; }
|
void set_co2_sensor(sensor::Sensor *co2) { co2_sensor_ = co2; }
|
||||||
void set_temperature_sensor(sensor::Sensor *temperature_sensor) { temperature_sensor_ = temperature_sensor; }
|
void set_temperature_sensor(sensor::Sensor *temperature_sensor) { temperature_sensor_ = temperature_sensor; }
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace esphome::ektf2232 {
|
|||||||
|
|
||||||
using namespace touchscreen;
|
using namespace touchscreen;
|
||||||
|
|
||||||
class EKTF2232Touchscreen : public Touchscreen, public i2c::I2CDevice {
|
class EKTF2232Touchscreen final : public Touchscreen, public i2c::I2CDevice {
|
||||||
public:
|
public:
|
||||||
void setup() override;
|
void setup() override;
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ enum Emc2101DACConversionRate {
|
|||||||
/// This class includes support for the EMC2101 i2c fan controller.
|
/// This class includes support for the EMC2101 i2c fan controller.
|
||||||
/// The device has an output (PWM or DAC) and several sensors and this
|
/// The device has an output (PWM or DAC) and several sensors and this
|
||||||
/// class is for the EMC2101 configuration.
|
/// class is for the EMC2101 configuration.
|
||||||
class Emc2101Component : public Component, public i2c::I2CDevice {
|
class Emc2101Component final : public Component, public i2c::I2CDevice {
|
||||||
public:
|
public:
|
||||||
/** Sets the mode of the output.
|
/** Sets the mode of the output.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
namespace esphome::emc2101 {
|
namespace esphome::emc2101 {
|
||||||
|
|
||||||
/// This class allows to control the EMC2101 output.
|
/// This class allows to control the EMC2101 output.
|
||||||
class EMC2101Output : public output::FloatOutput {
|
class EMC2101Output final : public output::FloatOutput {
|
||||||
public:
|
public:
|
||||||
EMC2101Output(Emc2101Component *parent) : parent_(parent) {}
|
EMC2101Output(Emc2101Component *parent) : parent_(parent) {}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
namespace esphome::emc2101 {
|
namespace esphome::emc2101 {
|
||||||
|
|
||||||
/// This class exposes the EMC2101 sensors.
|
/// This class exposes the EMC2101 sensors.
|
||||||
class EMC2101Sensor : public PollingComponent {
|
class EMC2101Sensor final : public PollingComponent {
|
||||||
public:
|
public:
|
||||||
EMC2101Sensor(Emc2101Component *parent) : parent_(parent) {}
|
EMC2101Sensor(Emc2101Component *parent) : parent_(parent) {}
|
||||||
/** Used by ESPHome framework. */
|
/** Used by ESPHome framework. */
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ struct EmmetiState {
|
|||||||
uint8_t checksum = 0;
|
uint8_t checksum = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class EmmetiClimate : public climate_ir::ClimateIR {
|
class EmmetiClimate final : public climate_ir::ClimateIR {
|
||||||
public:
|
public:
|
||||||
EmmetiClimate()
|
EmmetiClimate()
|
||||||
: climate_ir::ClimateIR(EMMETI_TEMP_MIN, EMMETI_TEMP_MAX, 1.0f, true, true,
|
: climate_ir::ClimateIR(EMMETI_TEMP_MIN, EMMETI_TEMP_MAX, 1.0f, true, true,
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ static constexpr size_t MAX_LINE_LENGTH = 1024;
|
|||||||
* The EmonTx processes incoming data frames via UART,
|
* The EmonTx processes incoming data frames via UART,
|
||||||
* extracts tags and values, and publishes them to registered sensors.
|
* extracts tags and values, and publishes them to registered sensors.
|
||||||
*/
|
*/
|
||||||
class EmonTx : public Component, public uart::UARTDevice {
|
class EmonTx final : public Component, public uart::UARTDevice {
|
||||||
public:
|
public:
|
||||||
EmonTx() = default;
|
EmonTx() = default;
|
||||||
|
|
||||||
@@ -59,7 +59,7 @@ class EmonTx : public Component, public uart::UARTDevice {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Action to send command to emonTx
|
// Action to send command to emonTx
|
||||||
template<typename... Ts> class EmonTxSendCommandAction : public Action<Ts...>, public Parented<EmonTx> {
|
template<typename... Ts> class EmonTxSendCommandAction final : public Action<Ts...>, public Parented<EmonTx> {
|
||||||
public:
|
public:
|
||||||
TEMPLATABLE_VALUE(std::string, command)
|
TEMPLATABLE_VALUE(std::string, command)
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
namespace esphome::emontx {
|
namespace esphome::emontx {
|
||||||
|
|
||||||
class EmonTxSensor : public sensor::Sensor, public Component {
|
class EmonTxSensor final : public sensor::Sensor, public Component {
|
||||||
public:
|
public:
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
namespace esphome::endstop {
|
namespace esphome::endstop {
|
||||||
|
|
||||||
class EndstopCover : public cover::Cover, public Component {
|
class EndstopCover final : public cover::Cover, public Component {
|
||||||
public:
|
public:
|
||||||
void setup() override;
|
void setup() override;
|
||||||
void loop() override;
|
void loop() override;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
namespace esphome::ens160_i2c {
|
namespace esphome::ens160_i2c {
|
||||||
|
|
||||||
class ENS160I2CComponent : public esphome::ens160_base::ENS160Component, public i2c::I2CDevice {
|
class ENS160I2CComponent final : public esphome::ens160_base::ENS160Component, public i2c::I2CDevice {
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
|
|
||||||
bool read_byte(uint8_t a_register, uint8_t *data) override;
|
bool read_byte(uint8_t a_register, uint8_t *data) override;
|
||||||
|
|||||||
@@ -5,9 +5,9 @@
|
|||||||
|
|
||||||
namespace esphome::ens160_spi {
|
namespace esphome::ens160_spi {
|
||||||
|
|
||||||
class ENS160SPIComponent : public esphome::ens160_base::ENS160Component,
|
class ENS160SPIComponent final : public esphome::ens160_base::ENS160Component,
|
||||||
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
|
public spi::SPIDevice<spi::BIT_ORDER_MSB_FIRST, spi::CLOCK_POLARITY_LOW,
|
||||||
spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_200KHZ> {
|
spi::CLOCK_PHASE_LEADING, spi::DATA_RATE_200KHZ> {
|
||||||
void setup() override;
|
void setup() override;
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
namespace esphome::ens210 {
|
namespace esphome::ens210 {
|
||||||
|
|
||||||
/// This class implements support for the ENS210 relative humidity and temperature i2c sensor.
|
/// This class implements support for the ENS210 relative humidity and temperature i2c sensor.
|
||||||
class ENS210Component : public PollingComponent, public i2c::I2CDevice {
|
class ENS210Component final : public PollingComponent, public i2c::I2CDevice {
|
||||||
public:
|
public:
|
||||||
void dump_config() override;
|
void dump_config() override;
|
||||||
void setup() override;
|
void setup() override;
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ enum ES7210BitsPerSample : uint8_t {
|
|||||||
ES7210_BITS_PER_SAMPLE_32 = 32,
|
ES7210_BITS_PER_SAMPLE_32 = 32,
|
||||||
};
|
};
|
||||||
|
|
||||||
class ES7210 : public audio_adc::AudioAdc, public Component, public i2c::I2CDevice {
|
class ES7210 final : public audio_adc::AudioAdc, public Component, public i2c::I2CDevice {
|
||||||
/* Class for configuring an ES7210 ADC for microphone input.
|
/* Class for configuring an ES7210 ADC for microphone input.
|
||||||
* Based on code from:
|
* Based on code from:
|
||||||
* - https://github.com/espressif/esp-bsp/ (accessed 20241219)
|
* - https://github.com/espressif/esp-bsp/ (accessed 20241219)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
namespace esphome::es7243e {
|
namespace esphome::es7243e {
|
||||||
|
|
||||||
class ES7243E : public audio_adc::AudioAdc, public Component, public i2c::I2CDevice {
|
class ES7243E final : public audio_adc::AudioAdc, public Component, public i2c::I2CDevice {
|
||||||
/* Class for configuring an ES7243E ADC for microphone input.
|
/* Class for configuring an ES7243E ADC for microphone input.
|
||||||
* Based on code from:
|
* Based on code from:
|
||||||
* - https://github.com/espressif/esp-adf/ (accessed 20250116)
|
* - https://github.com/espressif/esp-adf/ (accessed 20250116)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
namespace esphome::es8156 {
|
namespace esphome::es8156 {
|
||||||
|
|
||||||
class ES8156 : public audio_dac::AudioDac, public Component, public i2c::I2CDevice {
|
class ES8156 final : public audio_dac::AudioDac, public Component, public i2c::I2CDevice {
|
||||||
public:
|
public:
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
// Component overrides //
|
// Component overrides //
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ struct ES8311Coefficient {
|
|||||||
uint8_t dac_osr; // dac osr
|
uint8_t dac_osr; // dac osr
|
||||||
};
|
};
|
||||||
|
|
||||||
class ES8311 : public audio_dac::AudioDac, public Component, public i2c::I2CDevice {
|
class ES8311 final : public audio_dac::AudioDac, public Component, public i2c::I2CDevice {
|
||||||
public:
|
public:
|
||||||
/////////////////////////
|
/////////////////////////
|
||||||
// Component overrides //
|
// Component overrides //
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ enum AdcInputMicLine : uint8_t {
|
|||||||
ADC_INPUT_MIC_DIFFERENCE,
|
ADC_INPUT_MIC_DIFFERENCE,
|
||||||
};
|
};
|
||||||
|
|
||||||
class ES8388 : public audio_dac::AudioDac, public Component, public i2c::I2CDevice {
|
class ES8388 final : public audio_dac::AudioDac, public Component, public i2c::I2CDevice {
|
||||||
#ifdef USE_SELECT
|
#ifdef USE_SELECT
|
||||||
SUB_SELECT(dac_output)
|
SUB_SELECT(dac_output)
|
||||||
SUB_SELECT(adc_input_mic)
|
SUB_SELECT(adc_input_mic)
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
namespace esphome::es8388 {
|
namespace esphome::es8388 {
|
||||||
|
|
||||||
class ADCInputMicSelect : public select::Select, public Parented<ES8388> {
|
class ADCInputMicSelect final : public select::Select, public Parented<ES8388> {
|
||||||
protected:
|
protected:
|
||||||
void control(size_t index) override;
|
void control(size_t index) override;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
namespace esphome::es8388 {
|
namespace esphome::es8388 {
|
||||||
|
|
||||||
class DacOutputSelect : public select::Select, public Parented<ES8388> {
|
class DacOutputSelect final : public select::Select, public Parented<ES8388> {
|
||||||
protected:
|
protected:
|
||||||
void control(size_t index) override;
|
void control(size_t index) override;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ namespace esphome::esp32 {
|
|||||||
static_assert(GPIO_NUM_MAX <= 256, "gpio_num_t has too many values for uint8_t");
|
static_assert(GPIO_NUM_MAX <= 256, "gpio_num_t has too many values for uint8_t");
|
||||||
static_assert(GPIO_DRIVE_CAP_MAX <= 4, "gpio_drive_cap_t has too many values for 2-bit field");
|
static_assert(GPIO_DRIVE_CAP_MAX <= 4, "gpio_drive_cap_t has too many values for 2-bit field");
|
||||||
|
|
||||||
class ESP32InternalGPIOPin : public InternalGPIOPin {
|
class ESP32InternalGPIOPin final : public InternalGPIOPin {
|
||||||
public:
|
public:
|
||||||
void set_pin(gpio_num_t pin) { this->pin_ = static_cast<uint8_t>(pin); }
|
void set_pin(gpio_num_t pin) { this->pin_ = static_cast<uint8_t>(pin); }
|
||||||
void set_inverted(bool inverted) { this->pin_flags_.inverted = inverted; }
|
void set_inverted(bool inverted) { this->pin_flags_.inverted = inverted; }
|
||||||
|
|||||||
@@ -87,7 +87,7 @@ enum BLEComponentState : uint8_t {
|
|||||||
BLE_COMPONENT_STATE_ACTIVE,
|
BLE_COMPONENT_STATE_ACTIVE,
|
||||||
};
|
};
|
||||||
|
|
||||||
class ESP32BLE : public Component {
|
class ESP32BLE final : public Component {
|
||||||
public:
|
public:
|
||||||
void set_io_capability(IoCapability io_capability) { this->io_cap_ = (esp_ble_io_cap_t) io_capability; }
|
void set_io_capability(IoCapability io_capability) { this->io_cap_ = (esp_ble_io_cap_t) io_capability; }
|
||||||
|
|
||||||
@@ -236,12 +236,12 @@ class ESP32BLE : public Component {
|
|||||||
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-non-const-global-variables)
|
||||||
extern ESP32BLE *global_ble;
|
extern ESP32BLE *global_ble;
|
||||||
|
|
||||||
template<typename... Ts> class BLEEnabledCondition : public Condition<Ts...> {
|
template<typename... Ts> class BLEEnabledCondition final : public Condition<Ts...> {
|
||||||
public:
|
public:
|
||||||
bool check(const Ts &...x) override { return global_ble != nullptr && global_ble->is_active(); }
|
bool check(const Ts &...x) override { return global_ble != nullptr && global_ble->is_active(); }
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class BLEEnableAction : public Action<Ts...> {
|
template<typename... Ts> class BLEEnableAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
void play(const Ts &...x) override {
|
void play(const Ts &...x) override {
|
||||||
if (global_ble != nullptr)
|
if (global_ble != nullptr)
|
||||||
@@ -249,7 +249,7 @@ template<typename... Ts> class BLEEnableAction : public Action<Ts...> {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename... Ts> class BLEDisableAction : public Action<Ts...> {
|
template<typename... Ts> class BLEDisableAction final : public Action<Ts...> {
|
||||||
public:
|
public:
|
||||||
void play(const Ts &...x) override {
|
void play(const Ts &...x) override {
|
||||||
if (global_ble != nullptr)
|
if (global_ble != nullptr)
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ using esp_ble_ibeacon_t = struct {
|
|||||||
|
|
||||||
using namespace esp32_ble;
|
using namespace esp32_ble;
|
||||||
|
|
||||||
class ESP32BLEBeacon : public Component {
|
class ESP32BLEBeacon final : public Component {
|
||||||
public:
|
public:
|
||||||
explicit ESP32BLEBeacon(const std::array<uint8_t, 16> &uuid) : uuid_(uuid) {}
|
explicit ESP32BLEBeacon(const std::array<uint8_t, 16> &uuid) : uuid_(uuid) {}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user