mirror of
https://github.com/esphome/esphome.git
synced 2024-11-26 08:55:22 +01:00
Make some Action methods protected
Apparently play()/stop() etc. are not meant to be called directly by users of the class and if they're called directly that would not give the expected result for the classes that have an empty play(). Make all methods except play_complex, stop_comples and is_running protected. While there also make RemoteTransmitterActionBase::encode protected.
This commit is contained in:
parent
da390d32f8
commit
a62b6548d2
42 changed files with 250 additions and 203 deletions
|
@ -29,7 +29,9 @@ template<typename... Ts> class HomeAssistantServiceCallAction : public Action<Ts
|
|||
template<typename T> void add_variable(std::string key, T value) {
|
||||
this->variables_.push_back(TemplatableKeyValuePair<Ts...>(key, value));
|
||||
}
|
||||
void play(Ts... x) override {
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
HomeassistantServiceResponse resp;
|
||||
resp.service = this->service_.value(x...);
|
||||
resp.is_event = this->is_event_;
|
||||
|
@ -54,7 +56,6 @@ template<typename... Ts> class HomeAssistantServiceCallAction : public Action<Ts
|
|||
this->parent_->send_homeassistant_service_call(resp);
|
||||
}
|
||||
|
||||
protected:
|
||||
APIServer *parent_;
|
||||
bool is_event_;
|
||||
std::vector<TemplatableKeyValuePair<Ts...>> data_;
|
||||
|
|
|
@ -137,12 +137,13 @@ template<typename... Ts> class BinarySensorPublishAction : public Action<Ts...>
|
|||
public:
|
||||
explicit BinarySensorPublishAction(BinarySensor *sensor) : sensor_(sensor) {}
|
||||
TEMPLATABLE_VALUE(bool, state)
|
||||
void play(Ts... x) override {
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto val = this->state_.value(x...);
|
||||
this->sensor_->publish_state(val);
|
||||
}
|
||||
|
||||
protected:
|
||||
BinarySensor *sensor_;
|
||||
};
|
||||
|
||||
|
|
|
@ -18,7 +18,8 @@ template<typename... Ts> class ControlAction : public Action<Ts...> {
|
|||
TEMPLATABLE_VALUE(ClimateFanMode, fan_mode)
|
||||
TEMPLATABLE_VALUE(ClimateSwingMode, swing_mode)
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto call = this->climate_->make_call();
|
||||
call.set_mode(this->mode_.optional_value(x...));
|
||||
call.set_target_temperature(this->target_temperature_.optional_value(x...));
|
||||
|
@ -30,7 +31,6 @@ template<typename... Ts> class ControlAction : public Action<Ts...> {
|
|||
call.perform();
|
||||
}
|
||||
|
||||
protected:
|
||||
Climate *climate_;
|
||||
};
|
||||
|
||||
|
|
|
@ -11,9 +11,9 @@ template<typename... Ts> class OpenAction : public Action<Ts...> {
|
|||
public:
|
||||
explicit OpenAction(Cover *cover) : cover_(cover) {}
|
||||
|
||||
void play(Ts... x) override { this->cover_->open(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->cover_->open(); }
|
||||
|
||||
Cover *cover_;
|
||||
};
|
||||
|
||||
|
@ -21,9 +21,9 @@ template<typename... Ts> class CloseAction : public Action<Ts...> {
|
|||
public:
|
||||
explicit CloseAction(Cover *cover) : cover_(cover) {}
|
||||
|
||||
void play(Ts... x) override { this->cover_->close(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->cover_->close(); }
|
||||
|
||||
Cover *cover_;
|
||||
};
|
||||
|
||||
|
@ -31,9 +31,9 @@ template<typename... Ts> class StopAction : public Action<Ts...> {
|
|||
public:
|
||||
explicit StopAction(Cover *cover) : cover_(cover) {}
|
||||
|
||||
void play(Ts... x) override { this->cover_->stop(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->cover_->stop(); }
|
||||
|
||||
Cover *cover_;
|
||||
};
|
||||
|
||||
|
@ -41,7 +41,12 @@ template<typename... Ts> class ControlAction : public Action<Ts...> {
|
|||
public:
|
||||
explicit ControlAction(Cover *cover) : cover_(cover) {}
|
||||
|
||||
void play(Ts... x) override {
|
||||
TEMPLATABLE_VALUE(bool, stop)
|
||||
TEMPLATABLE_VALUE(float, position)
|
||||
TEMPLATABLE_VALUE(float, tilt)
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto call = this->cover_->make_call();
|
||||
if (this->stop_.has_value())
|
||||
call.set_stop(this->stop_.value(x...));
|
||||
|
@ -52,18 +57,18 @@ template<typename... Ts> class ControlAction : public Action<Ts...> {
|
|||
call.perform();
|
||||
}
|
||||
|
||||
TEMPLATABLE_VALUE(bool, stop)
|
||||
TEMPLATABLE_VALUE(float, position)
|
||||
TEMPLATABLE_VALUE(float, tilt)
|
||||
|
||||
protected:
|
||||
Cover *cover_;
|
||||
};
|
||||
|
||||
template<typename... Ts> class CoverPublishAction : public Action<Ts...> {
|
||||
public:
|
||||
CoverPublishAction(Cover *cover) : cover_(cover) {}
|
||||
void play(Ts... x) override {
|
||||
TEMPLATABLE_VALUE(float, position)
|
||||
TEMPLATABLE_VALUE(float, tilt)
|
||||
TEMPLATABLE_VALUE(CoverOperation, current_operation)
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
if (this->position_.has_value())
|
||||
this->cover_->position = this->position_.value(x...);
|
||||
if (this->tilt_.has_value())
|
||||
|
@ -73,11 +78,6 @@ template<typename... Ts> class CoverPublishAction : public Action<Ts...> {
|
|||
this->cover_->publish_state();
|
||||
}
|
||||
|
||||
TEMPLATABLE_VALUE(float, position)
|
||||
TEMPLATABLE_VALUE(float, tilt)
|
||||
TEMPLATABLE_VALUE(CoverOperation, current_operation)
|
||||
|
||||
protected:
|
||||
Cover *cover_;
|
||||
};
|
||||
|
||||
|
|
|
@ -85,9 +85,9 @@ template<typename... Ts> class EnterDeepSleepAction : public Action<Ts...> {
|
|||
public:
|
||||
EnterDeepSleepAction(DeepSleepComponent *deep_sleep) : deep_sleep_(deep_sleep) {}
|
||||
|
||||
void play(Ts... x) override { this->deep_sleep_->begin_sleep(true); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->deep_sleep_->begin_sleep(true); }
|
||||
|
||||
DeepSleepComponent *deep_sleep_;
|
||||
};
|
||||
|
||||
|
@ -95,9 +95,9 @@ template<typename... Ts> class PreventDeepSleepAction : public Action<Ts...> {
|
|||
public:
|
||||
PreventDeepSleepAction(DeepSleepComponent *deep_sleep) : deep_sleep_(deep_sleep) {}
|
||||
|
||||
void play(Ts... x) override { this->deep_sleep_->prevent_deep_sleep(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->deep_sleep_->prevent_deep_sleep(); }
|
||||
|
||||
DeepSleepComponent *deep_sleep_;
|
||||
};
|
||||
|
||||
|
|
|
@ -104,8 +104,8 @@ class DFPlayer : public uart::UARTDevice, public Component {
|
|||
|
||||
#define DFPLAYER_SIMPLE_ACTION(ACTION_CLASS, ACTION_METHOD) \
|
||||
template<typename... Ts> class ACTION_CLASS : public Action<Ts...>, public Parented<DFPlayer> { \
|
||||
public: \
|
||||
void play(Ts... x) override { this->parent_->ACTION_METHOD(); } \
|
||||
protected: \
|
||||
void play_(Ts... x) override { this->parent_->ACTION_METHOD(); } \
|
||||
};
|
||||
|
||||
DFPLAYER_SIMPLE_ACTION(NextAction, next)
|
||||
|
@ -115,7 +115,9 @@ template<typename... Ts> class PlayFileAction : public Action<Ts...>, public Par
|
|||
public:
|
||||
TEMPLATABLE_VALUE(uint16_t, file)
|
||||
TEMPLATABLE_VALUE(boolean, loop)
|
||||
void play(Ts... x) override {
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto file = this->file_.value(x...);
|
||||
auto loop = this->loop_.value(x...);
|
||||
if (loop) {
|
||||
|
@ -131,7 +133,9 @@ template<typename... Ts> class PlayFolderAction : public Action<Ts...>, public P
|
|||
TEMPLATABLE_VALUE(uint16_t, folder)
|
||||
TEMPLATABLE_VALUE(uint16_t, file)
|
||||
TEMPLATABLE_VALUE(boolean, loop)
|
||||
void play(Ts... x) override {
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto folder = this->folder_.value(x...);
|
||||
auto file = this->file_.value(x...);
|
||||
auto loop = this->loop_.value(x...);
|
||||
|
@ -146,7 +150,9 @@ template<typename... Ts> class PlayFolderAction : public Action<Ts...>, public P
|
|||
template<typename... Ts> class SetDeviceAction : public Action<Ts...>, public Parented<DFPlayer> {
|
||||
public:
|
||||
TEMPLATABLE_VALUE(Device, device)
|
||||
void play(Ts... x) override {
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto device = this->device_.value(x...);
|
||||
this->parent_->set_device(device);
|
||||
}
|
||||
|
@ -155,7 +161,9 @@ template<typename... Ts> class SetDeviceAction : public Action<Ts...>, public Pa
|
|||
template<typename... Ts> class SetVolumeAction : public Action<Ts...>, public Parented<DFPlayer> {
|
||||
public:
|
||||
TEMPLATABLE_VALUE(uint8_t, volume)
|
||||
void play(Ts... x) override {
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto volume = this->volume_.value(x...);
|
||||
this->parent_->set_volume(volume);
|
||||
}
|
||||
|
@ -164,7 +172,9 @@ template<typename... Ts> class SetVolumeAction : public Action<Ts...>, public Pa
|
|||
template<typename... Ts> class SetEqAction : public Action<Ts...>, public Parented<DFPlayer> {
|
||||
public:
|
||||
TEMPLATABLE_VALUE(EqPreset, eq)
|
||||
void play(Ts... x) override {
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto eq = this->eq_.value(x...);
|
||||
this->parent_->set_eq(eq);
|
||||
}
|
||||
|
|
|
@ -391,7 +391,9 @@ class Image {
|
|||
template<typename... Ts> class DisplayPageShowAction : public Action<Ts...> {
|
||||
public:
|
||||
TEMPLATABLE_VALUE(DisplayPage *, page)
|
||||
void play(Ts... x) override {
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto *page = this->page_.value(x...);
|
||||
if (page != nullptr) {
|
||||
page->show();
|
||||
|
@ -402,18 +404,20 @@ template<typename... Ts> class DisplayPageShowAction : public Action<Ts...> {
|
|||
template<typename... Ts> class DisplayPageShowNextAction : public Action<Ts...> {
|
||||
public:
|
||||
DisplayPageShowNextAction(DisplayBuffer *buffer) : buffer_(buffer) {}
|
||||
void play(Ts... x) override { this->buffer_->show_next_page(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->buffer_->show_next_page(); }
|
||||
|
||||
DisplayBuffer *buffer_;
|
||||
};
|
||||
|
||||
template<typename... Ts> class DisplayPageShowPrevAction : public Action<Ts...> {
|
||||
public:
|
||||
DisplayPageShowPrevAction(DisplayBuffer *buffer) : buffer_(buffer) {}
|
||||
void play(Ts... x) override { this->buffer_->show_prev_page(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->buffer_->show_prev_page(); }
|
||||
|
||||
DisplayBuffer *buffer_;
|
||||
};
|
||||
|
||||
|
|
|
@ -38,12 +38,12 @@ template<typename... Ts> class SetFrequencyAction : public Action<Ts...> {
|
|||
SetFrequencyAction(ESP8266PWM *parent) : parent_(parent) {}
|
||||
TEMPLATABLE_VALUE(float, frequency);
|
||||
|
||||
void play(Ts... x) {
|
||||
protected:
|
||||
void play_(Ts... x) {
|
||||
float freq = this->frequency_.value(x...);
|
||||
this->parent_->update_frequency(freq);
|
||||
}
|
||||
|
||||
protected:
|
||||
ESP8266PWM *parent_;
|
||||
};
|
||||
|
||||
|
|
|
@ -14,7 +14,8 @@ template<typename... Ts> class TurnOnAction : public Action<Ts...> {
|
|||
TEMPLATABLE_VALUE(bool, oscillating)
|
||||
TEMPLATABLE_VALUE(FanSpeed, speed)
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto call = this->state_->turn_on();
|
||||
if (this->oscillating_.has_value()) {
|
||||
call.set_oscillating(this->oscillating_.value(x...));
|
||||
|
@ -25,7 +26,6 @@ template<typename... Ts> class TurnOnAction : public Action<Ts...> {
|
|||
call.perform();
|
||||
}
|
||||
|
||||
protected:
|
||||
FanState *state_;
|
||||
};
|
||||
|
||||
|
@ -33,9 +33,9 @@ template<typename... Ts> class TurnOffAction : public Action<Ts...> {
|
|||
public:
|
||||
explicit TurnOffAction(FanState *state) : state_(state) {}
|
||||
|
||||
void play(Ts... x) override { this->state_->turn_off().perform(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->state_->turn_off().perform(); }
|
||||
|
||||
FanState *state_;
|
||||
};
|
||||
|
||||
|
@ -43,9 +43,9 @@ template<typename... Ts> class ToggleAction : public Action<Ts...> {
|
|||
public:
|
||||
explicit ToggleAction(FanState *state) : state_(state) {}
|
||||
|
||||
void play(Ts... x) override { this->state_->toggle().perform(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->state_->toggle().perform(); }
|
||||
|
||||
FanState *state_;
|
||||
};
|
||||
|
||||
|
|
|
@ -59,9 +59,9 @@ template<class C, typename... Ts> class GlobalVarSetAction : public Action<Ts...
|
|||
|
||||
TEMPLATABLE_VALUE(T, value);
|
||||
|
||||
void play(Ts... x) override { this->parent_->value() = this->value_.value(x...); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->parent_->value() = this->value_.value(x...); }
|
||||
|
||||
C *parent_;
|
||||
};
|
||||
|
||||
|
|
|
@ -71,7 +71,8 @@ template<typename... Ts> class HttpRequestSendAction : public Action<Ts...> {
|
|||
|
||||
void set_json(std::function<void(Ts..., JsonObject &)> json_func) { this->json_func_ = json_func; }
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
this->parent_->set_url(this->url_.value(x...));
|
||||
this->parent_->set_method(this->method_.value(x...));
|
||||
if (this->body_.has_value()) {
|
||||
|
@ -106,7 +107,6 @@ template<typename... Ts> class HttpRequestSendAction : public Action<Ts...> {
|
|||
this->parent_->close();
|
||||
}
|
||||
|
||||
protected:
|
||||
void encode_json_(Ts... x, JsonObject &root) {
|
||||
for (const auto &item : this->json_) {
|
||||
auto val = item.second;
|
||||
|
|
|
@ -76,9 +76,9 @@ template<typename... Ts> class ResetAction : public Action<Ts...> {
|
|||
public:
|
||||
explicit ResetAction(IntegrationSensor *parent) : parent_(parent) {}
|
||||
|
||||
void play(Ts... x) override { this->parent_->reset(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->parent_->reset(); }
|
||||
|
||||
IntegrationSensor *parent_;
|
||||
};
|
||||
|
||||
|
|
|
@ -43,12 +43,12 @@ template<typename... Ts> class SetFrequencyAction : public Action<Ts...> {
|
|||
SetFrequencyAction(LEDCOutput *parent) : parent_(parent) {}
|
||||
TEMPLATABLE_VALUE(float, frequency);
|
||||
|
||||
void play(Ts... x) {
|
||||
protected:
|
||||
void play_(Ts... x) {
|
||||
float freq = this->frequency_.value(x...);
|
||||
this->parent_->apply_frequency(freq);
|
||||
}
|
||||
|
||||
protected:
|
||||
LEDCOutput *parent_;
|
||||
};
|
||||
|
||||
|
|
|
@ -13,13 +13,13 @@ template<typename... Ts> class ToggleAction : public Action<Ts...> {
|
|||
|
||||
TEMPLATABLE_VALUE(uint32_t, transition_length)
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto call = this->state_->toggle();
|
||||
call.set_transition_length(this->transition_length_.optional_value(x...));
|
||||
call.perform();
|
||||
}
|
||||
|
||||
protected:
|
||||
LightState *state_;
|
||||
};
|
||||
|
||||
|
@ -38,7 +38,8 @@ template<typename... Ts> class LightControlAction : public Action<Ts...> {
|
|||
TEMPLATABLE_VALUE(float, color_temperature)
|
||||
TEMPLATABLE_VALUE(std::string, effect)
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto call = this->parent_->make_call();
|
||||
call.set_state(this->state_.optional_value(x...));
|
||||
call.set_brightness(this->brightness_.optional_value(x...));
|
||||
|
@ -53,7 +54,6 @@ template<typename... Ts> class LightControlAction : public Action<Ts...> {
|
|||
call.perform();
|
||||
}
|
||||
|
||||
protected:
|
||||
LightState *parent_;
|
||||
};
|
||||
|
||||
|
@ -64,7 +64,8 @@ template<typename... Ts> class DimRelativeAction : public Action<Ts...> {
|
|||
TEMPLATABLE_VALUE(float, relative_brightness)
|
||||
TEMPLATABLE_VALUE(uint32_t, transition_length)
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto call = this->parent_->make_call();
|
||||
float rel = this->relative_brightness_.value(x...);
|
||||
float cur;
|
||||
|
@ -77,7 +78,6 @@ template<typename... Ts> class DimRelativeAction : public Action<Ts...> {
|
|||
call.perform();
|
||||
}
|
||||
|
||||
protected:
|
||||
LightState *parent_;
|
||||
};
|
||||
|
||||
|
@ -143,7 +143,8 @@ template<typename... Ts> class AddressableSet : public Action<Ts...> {
|
|||
TEMPLATABLE_VALUE(uint8_t, blue)
|
||||
TEMPLATABLE_VALUE(uint8_t, white)
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto *out = (AddressableLight *) this->parent_->get_output();
|
||||
int32_t range_from = this->range_from_.value_or(x..., 0);
|
||||
int32_t range_to = this->range_to_.value_or(x..., out->size() - 1) + 1;
|
||||
|
@ -159,7 +160,6 @@ template<typename... Ts> class AddressableSet : public Action<Ts...> {
|
|||
out->schedule_show();
|
||||
}
|
||||
|
||||
protected:
|
||||
LightState *parent_;
|
||||
};
|
||||
|
||||
|
|
|
@ -37,27 +37,30 @@ class MHZ19Component : public PollingComponent, public uart::UARTDevice {
|
|||
template<typename... Ts> class MHZ19CalibrateZeroAction : public Action<Ts...> {
|
||||
public:
|
||||
MHZ19CalibrateZeroAction(MHZ19Component *mhz19) : mhz19_(mhz19) {}
|
||||
void play(Ts... x) override { this->mhz19_->calibrate_zero(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->mhz19_->calibrate_zero(); }
|
||||
|
||||
MHZ19Component *mhz19_;
|
||||
};
|
||||
|
||||
template<typename... Ts> class MHZ19ABCEnableAction : public Action<Ts...> {
|
||||
public:
|
||||
MHZ19ABCEnableAction(MHZ19Component *mhz19) : mhz19_(mhz19) {}
|
||||
void play(Ts... x) override { this->mhz19_->abc_enable(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->mhz19_->abc_enable(); }
|
||||
|
||||
MHZ19Component *mhz19_;
|
||||
};
|
||||
|
||||
template<typename... Ts> class MHZ19ABCDisableAction : public Action<Ts...> {
|
||||
public:
|
||||
MHZ19ABCDisableAction(MHZ19Component *mhz19) : mhz19_(mhz19) {}
|
||||
void play(Ts... x) override { this->mhz19_->abc_disable(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->mhz19_->abc_disable(); }
|
||||
|
||||
MHZ19Component *mhz19_;
|
||||
};
|
||||
|
||||
|
|
|
@ -299,12 +299,12 @@ template<typename... Ts> class MQTTPublishAction : public Action<Ts...> {
|
|||
TEMPLATABLE_VALUE(uint8_t, qos)
|
||||
TEMPLATABLE_VALUE(bool, retain)
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
this->parent_->publish(this->topic_.value(x...), this->payload_.value(x...), this->qos_.value(x...),
|
||||
this->retain_.value(x...));
|
||||
}
|
||||
|
||||
protected:
|
||||
MQTTClientComponent *parent_;
|
||||
};
|
||||
|
||||
|
@ -316,15 +316,15 @@ template<typename... Ts> class MQTTPublishJsonAction : public Action<Ts...> {
|
|||
TEMPLATABLE_VALUE(bool, retain)
|
||||
|
||||
void set_payload(std::function<void(Ts..., JsonObject &)> payload) { this->payload_ = payload; }
|
||||
void play(Ts... x) override {
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto f = std::bind(&MQTTPublishJsonAction<Ts...>::encode_, this, x..., std::placeholders::_1);
|
||||
auto topic = this->topic_.value(x...);
|
||||
auto qos = this->qos_.value(x...);
|
||||
auto retain = this->retain_.value(x...);
|
||||
this->parent_->publish_json(topic, f, qos, retain);
|
||||
}
|
||||
|
||||
protected:
|
||||
void encode_(Ts... x, JsonObject &root) { this->payload_(x..., root); }
|
||||
std::function<void(Ts..., JsonObject &)> payload_;
|
||||
MQTTClientComponent *parent_;
|
||||
|
|
|
@ -12,9 +12,9 @@ template<typename... Ts> class TurnOffAction : public Action<Ts...> {
|
|||
public:
|
||||
TurnOffAction(BinaryOutput *output) : output_(output) {}
|
||||
|
||||
void play(Ts... x) override { this->output_->turn_off(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->output_->turn_off(); }
|
||||
|
||||
BinaryOutput *output_;
|
||||
};
|
||||
|
||||
|
@ -22,9 +22,9 @@ template<typename... Ts> class TurnOnAction : public Action<Ts...> {
|
|||
public:
|
||||
TurnOnAction(BinaryOutput *output) : output_(output) {}
|
||||
|
||||
void play(Ts... x) override { this->output_->turn_on(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->output_->turn_on(); }
|
||||
|
||||
BinaryOutput *output_;
|
||||
};
|
||||
|
||||
|
@ -33,9 +33,10 @@ template<typename... Ts> class SetLevelAction : public Action<Ts...> {
|
|||
SetLevelAction(FloatOutput *output) : output_(output) {}
|
||||
|
||||
TEMPLATABLE_VALUE(float, level)
|
||||
void play(Ts... x) override { this->output_->set_level(this->level_.value(x...)); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->output_->set_level(this->level_.value(x...)); }
|
||||
|
||||
FloatOutput *output_;
|
||||
};
|
||||
|
||||
|
|
|
@ -71,7 +71,12 @@ template<typename... Ts> class PIDAutotuneAction : public Action<Ts...> {
|
|||
public:
|
||||
PIDAutotuneAction(PIDClimate *parent) : parent_(parent) {}
|
||||
|
||||
void play(Ts... x) {
|
||||
void set_noiseband(float noiseband) { noiseband_ = noiseband; }
|
||||
void set_positive_output(float positive_output) { positive_output_ = positive_output; }
|
||||
void set_negative_output(float negative_output) { negative_output_ = negative_output; }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) {
|
||||
auto tuner = make_unique<PIDAutotuner>();
|
||||
tuner->set_noiseband(this->noiseband_);
|
||||
tuner->set_output_negative(this->negative_output_);
|
||||
|
@ -79,11 +84,6 @@ template<typename... Ts> class PIDAutotuneAction : public Action<Ts...> {
|
|||
this->parent_->start_autotune(std::move(tuner));
|
||||
}
|
||||
|
||||
void set_noiseband(float noiseband) { noiseband_ = noiseband; }
|
||||
void set_positive_output(float positive_output) { positive_output_ = positive_output; }
|
||||
void set_negative_output(float negative_output) { negative_output_ = negative_output; }
|
||||
|
||||
protected:
|
||||
float noiseband_;
|
||||
float positive_output_;
|
||||
float negative_output_;
|
||||
|
|
|
@ -23,7 +23,9 @@ DECLARE_REMOTE_PROTOCOL(JVC)
|
|||
template<typename... Ts> class JVCAction : public RemoteTransmitterActionBase<Ts...> {
|
||||
public:
|
||||
TEMPLATABLE_VALUE(uint32_t, data)
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
JVCData data{};
|
||||
data.data = this->data_.value(x...);
|
||||
JVCProtocol().encode(dst, data);
|
||||
|
|
|
@ -26,7 +26,9 @@ template<typename... Ts> class LGAction : public RemoteTransmitterActionBase<Ts.
|
|||
public:
|
||||
TEMPLATABLE_VALUE(uint32_t, data)
|
||||
TEMPLATABLE_VALUE(uint8_t, nbits)
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
LGData data{};
|
||||
data.data = this->data_.value(x...);
|
||||
data.nbits = this->nbits_.value(x...);
|
||||
|
|
|
@ -25,7 +25,9 @@ template<typename... Ts> class NECAction : public RemoteTransmitterActionBase<Ts
|
|||
public:
|
||||
TEMPLATABLE_VALUE(uint16_t, address)
|
||||
TEMPLATABLE_VALUE(uint16_t, command)
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
NECData data{};
|
||||
data.address = this->address_.value(x...);
|
||||
data.command = this->command_.value(x...);
|
||||
|
|
|
@ -26,7 +26,9 @@ template<typename... Ts> class PanasonicAction : public RemoteTransmitterActionB
|
|||
public:
|
||||
TEMPLATABLE_VALUE(uint16_t, address)
|
||||
TEMPLATABLE_VALUE(uint32_t, command)
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
PanasonicData data{};
|
||||
data.address = this->address_.value(x...);
|
||||
data.command = this->command_.value(x...);
|
||||
|
|
|
@ -25,7 +25,9 @@ template<typename... Ts> class PioneerAction : public RemoteTransmitterActionBas
|
|||
public:
|
||||
TEMPLATABLE_VALUE(uint16_t, rc_code_1)
|
||||
TEMPLATABLE_VALUE(uint16_t, rc_code_2)
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
PioneerData data{};
|
||||
data.rc_code_1 = this->rc_code_1_.value(x...);
|
||||
data.rc_code_2 = this->rc_code_2_.value(x...);
|
||||
|
|
|
@ -46,7 +46,8 @@ template<typename... Ts> class RawAction : public RemoteTransmitterActionBase<Ts
|
|||
}
|
||||
TEMPLATABLE_VALUE(uint32_t, carrier_frequency);
|
||||
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
if (this->code_static_ != nullptr) {
|
||||
for (size_t i = 0; i < this->code_static_len_; i++) {
|
||||
auto val = this->code_static_[i];
|
||||
|
@ -61,7 +62,6 @@ template<typename... Ts> class RawAction : public RemoteTransmitterActionBase<Ts
|
|||
dst->set_carrier_frequency(this->carrier_frequency_.value(x...));
|
||||
}
|
||||
|
||||
protected:
|
||||
std::function<std::vector<int32_t>(Ts...)> code_func_{};
|
||||
const int32_t *code_static_{nullptr};
|
||||
int32_t code_static_len_{0};
|
||||
|
|
|
@ -26,7 +26,9 @@ template<typename... Ts> class RC5Action : public RemoteTransmitterActionBase<Ts
|
|||
public:
|
||||
TEMPLATABLE_VALUE(uint8_t, address)
|
||||
TEMPLATABLE_VALUE(uint8_t, command)
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
RC5Data data{};
|
||||
data.address = this->address_.value(x...);
|
||||
data.command = this->command_.value(x...);
|
||||
|
|
|
@ -71,7 +71,8 @@ template<typename... Ts> class RCSwitchRawAction : public RemoteTransmitterActio
|
|||
TEMPLATABLE_VALUE(RCSwitchBase, protocol);
|
||||
TEMPLATABLE_VALUE(std::string, code);
|
||||
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
auto code = this->code_.value(x...);
|
||||
uint64_t the_code = decode_binary_string(code);
|
||||
uint8_t nbits = code.size();
|
||||
|
@ -88,7 +89,8 @@ template<typename... Ts> class RCSwitchTypeAAction : public RemoteTransmitterAct
|
|||
TEMPLATABLE_VALUE(std::string, device);
|
||||
TEMPLATABLE_VALUE(bool, state);
|
||||
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
auto group = this->group_.value(x...);
|
||||
auto device = this->device_.value(x...);
|
||||
auto state = this->state_.value(x...);
|
||||
|
@ -111,7 +113,8 @@ template<typename... Ts> class RCSwitchTypeBAction : public RemoteTransmitterAct
|
|||
TEMPLATABLE_VALUE(uint8_t, channel);
|
||||
TEMPLATABLE_VALUE(bool, state);
|
||||
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
auto address = this->address_.value(x...);
|
||||
auto channel = this->channel_.value(x...);
|
||||
auto state = this->state_.value(x...);
|
||||
|
@ -133,7 +136,8 @@ template<typename... Ts> class RCSwitchTypeCAction : public RemoteTransmitterAct
|
|||
TEMPLATABLE_VALUE(uint8_t, device);
|
||||
TEMPLATABLE_VALUE(bool, state);
|
||||
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
auto family = this->family_.value(x...);
|
||||
auto group = this->group_.value(x...);
|
||||
auto device = this->device_.value(x...);
|
||||
|
@ -156,7 +160,8 @@ template<typename... Ts> class RCSwitchTypeDAction : public RemoteTransmitterAct
|
|||
TEMPLATABLE_VALUE(uint8_t, device);
|
||||
TEMPLATABLE_VALUE(bool, state);
|
||||
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
auto group = this->group_.value(x...);
|
||||
auto device = this->device_.value(x...);
|
||||
auto state = this->state_.value(x...);
|
||||
|
|
|
@ -323,20 +323,20 @@ template<typename... Ts> class RemoteTransmitterActionBase : public Action<Ts...
|
|||
public:
|
||||
void set_parent(RemoteTransmitterBase *parent) { this->parent_ = parent; }
|
||||
|
||||
void play(Ts... x) override {
|
||||
TEMPLATABLE_VALUE(uint32_t, send_times);
|
||||
TEMPLATABLE_VALUE(uint32_t, send_wait);
|
||||
|
||||
protected:
|
||||
virtual void encode_(RemoteTransmitData *dst, Ts... x) = 0;
|
||||
|
||||
void play_(Ts... x) override {
|
||||
auto call = this->parent_->transmit();
|
||||
this->encode(call.get_data(), x...);
|
||||
this->encode_(call.get_data(), x...);
|
||||
call.set_send_times(this->send_times_.value_or(x..., 1));
|
||||
call.set_send_wait(this->send_wait_.value_or(x..., 0));
|
||||
call.perform();
|
||||
}
|
||||
|
||||
virtual void encode(RemoteTransmitData *dst, Ts... x) = 0;
|
||||
|
||||
TEMPLATABLE_VALUE(uint32_t, send_times);
|
||||
TEMPLATABLE_VALUE(uint32_t, send_wait);
|
||||
|
||||
protected:
|
||||
RemoteTransmitterBase *parent_{};
|
||||
};
|
||||
|
||||
|
|
|
@ -24,7 +24,9 @@ DECLARE_REMOTE_PROTOCOL(Samsung)
|
|||
template<typename... Ts> class SamsungAction : public RemoteTransmitterActionBase<Ts...> {
|
||||
public:
|
||||
TEMPLATABLE_VALUE(uint32_t, data)
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
SamsungData data{};
|
||||
data.data = this->data_.value(x...);
|
||||
SamsungProtocol().encode(dst, data);
|
||||
|
|
|
@ -26,7 +26,9 @@ template<typename... Ts> class SonyAction : public RemoteTransmitterActionBase<T
|
|||
public:
|
||||
TEMPLATABLE_VALUE(uint32_t, data)
|
||||
TEMPLATABLE_VALUE(uint8_t, nbits)
|
||||
void encode(RemoteTransmitData *dst, Ts... x) override {
|
||||
|
||||
protected:
|
||||
void encode_(RemoteTransmitData *dst, Ts... x) override {
|
||||
SonyData data{};
|
||||
data.data = this->data_.value(x...);
|
||||
data.nbits = this->nbits_.value(x...);
|
||||
|
|
|
@ -68,7 +68,8 @@ template<typename... Ts> class RFBridgeSendCodeAction : public Action<Ts...> {
|
|||
TEMPLATABLE_VALUE(uint16_t, high)
|
||||
TEMPLATABLE_VALUE(uint32_t, code)
|
||||
|
||||
void play(Ts... x) {
|
||||
protected:
|
||||
void play_(Ts... x) {
|
||||
RFBridgeData data{};
|
||||
data.sync = this->sync_.value(x...);
|
||||
data.low = this->low_.value(x...);
|
||||
|
@ -77,7 +78,6 @@ template<typename... Ts> class RFBridgeSendCodeAction : public Action<Ts...> {
|
|||
this->parent_->send_code(data);
|
||||
}
|
||||
|
||||
protected:
|
||||
RFBridgeComponent *parent_;
|
||||
};
|
||||
|
||||
|
@ -85,9 +85,9 @@ template<typename... Ts> class RFBridgeLearnAction : public Action<Ts...> {
|
|||
public:
|
||||
RFBridgeLearnAction(RFBridgeComponent *parent) : parent_(parent) {}
|
||||
|
||||
void play(Ts... x) { this->parent_->learn(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) { this->parent_->learn(); }
|
||||
|
||||
RFBridgeComponent *parent_;
|
||||
};
|
||||
|
||||
|
|
|
@ -74,9 +74,9 @@ template<typename... Ts> class RotaryEncoderSetValueAction : public Action<Ts...
|
|||
public:
|
||||
RotaryEncoderSetValueAction(RotaryEncoderSensor *encoder) : encoder_(encoder) {}
|
||||
TEMPLATABLE_VALUE(int, value)
|
||||
void play(Ts... x) override { this->encoder_->set_value(this->value_.value(x...)); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->encoder_->set_value(this->value_.value(x...)); }
|
||||
RotaryEncoderSensor *encoder_;
|
||||
};
|
||||
|
||||
|
|
|
@ -23,9 +23,9 @@ template<typename... Ts> class ScriptExecuteAction : public Action<Ts...> {
|
|||
public:
|
||||
ScriptExecuteAction(Script *script) : script_(script) {}
|
||||
|
||||
void play(Ts... x) override { this->script_->trigger(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->script_->trigger(); }
|
||||
|
||||
Script *script_;
|
||||
};
|
||||
|
||||
|
@ -33,9 +33,9 @@ template<typename... Ts> class ScriptStopAction : public Action<Ts...> {
|
|||
public:
|
||||
ScriptStopAction(Script *script) : script_(script) {}
|
||||
|
||||
void play(Ts... x) override { this->script_->stop(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->script_->stop(); }
|
||||
|
||||
Script *script_;
|
||||
};
|
||||
|
||||
|
@ -53,14 +53,11 @@ template<typename... Ts> class ScriptWaitAction : public Action<Ts...>, public C
|
|||
public:
|
||||
ScriptWaitAction(Script *script) : script_(script) {}
|
||||
|
||||
void play(Ts... x) override { /* ignore - see play_complex */
|
||||
}
|
||||
|
||||
void play_complex(Ts... x) override {
|
||||
this->num_running_++;
|
||||
// Check if we can continue immediately.
|
||||
if (!this->script_->is_running()) {
|
||||
this->play_next(x...);
|
||||
this->play_next_(x...);
|
||||
return;
|
||||
}
|
||||
this->var_ = std::make_tuple(x...);
|
||||
|
@ -74,12 +71,15 @@ template<typename... Ts> class ScriptWaitAction : public Action<Ts...>, public C
|
|||
if (this->script_->is_running())
|
||||
return;
|
||||
|
||||
this->play_next_tuple(this->var_);
|
||||
this->play_next_tuple_(this->var_);
|
||||
}
|
||||
|
||||
float get_setup_priority() const override { return setup_priority::DATA; }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { /* ignore - see play_complex */
|
||||
}
|
||||
|
||||
Script *script_;
|
||||
std::tuple<Ts...> var_{};
|
||||
};
|
||||
|
|
|
@ -25,9 +25,9 @@ template<typename... Ts> class SensorPublishAction : public Action<Ts...> {
|
|||
public:
|
||||
SensorPublishAction(Sensor *sensor) : sensor_(sensor) {}
|
||||
TEMPLATABLE_VALUE(float, state)
|
||||
void play(Ts... x) override { this->sensor_->publish_state(this->state_.value(x...)); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->sensor_->publish_state(this->state_.value(x...)); }
|
||||
Sensor *sensor_;
|
||||
};
|
||||
|
||||
|
|
|
@ -64,18 +64,18 @@ template<typename... Ts> class ServoWriteAction : public Action<Ts...> {
|
|||
public:
|
||||
ServoWriteAction(Servo *servo) : servo_(servo) {}
|
||||
TEMPLATABLE_VALUE(float, value)
|
||||
void play(Ts... x) override { this->servo_->write(this->value_.value(x...)); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->servo_->write(this->value_.value(x...)); }
|
||||
Servo *servo_;
|
||||
};
|
||||
|
||||
template<typename... Ts> class ServoDetachAction : public Action<Ts...> {
|
||||
public:
|
||||
ServoDetachAction(Servo *servo) : servo_(servo) {}
|
||||
void play(Ts... x) override { this->servo_->detach(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->servo_->detach(); }
|
||||
Servo *servo_;
|
||||
};
|
||||
|
||||
|
|
|
@ -78,13 +78,13 @@ template<typename... Ts> class Sim800LSendSmsAction : public Action<Ts...> {
|
|||
TEMPLATABLE_VALUE(std::string, recipient)
|
||||
TEMPLATABLE_VALUE(std::string, message)
|
||||
|
||||
void play(Ts... x) {
|
||||
protected:
|
||||
void play_(Ts... x) {
|
||||
auto recipient = this->recipient_.value(x...);
|
||||
auto message = this->message_.value(x...);
|
||||
this->parent_->send_sms(recipient, message);
|
||||
}
|
||||
|
||||
protected:
|
||||
Sim800LComponent *parent_;
|
||||
};
|
||||
|
||||
|
|
|
@ -43,9 +43,9 @@ template<typename... Ts> class SetTargetAction : public Action<Ts...> {
|
|||
|
||||
TEMPLATABLE_VALUE(int32_t, target)
|
||||
|
||||
void play(Ts... x) override { this->parent_->set_target(this->target_.value(x...)); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->parent_->set_target(this->target_.value(x...)); }
|
||||
|
||||
Stepper *parent_;
|
||||
};
|
||||
|
||||
|
@ -55,9 +55,9 @@ template<typename... Ts> class ReportPositionAction : public Action<Ts...> {
|
|||
|
||||
TEMPLATABLE_VALUE(int32_t, position)
|
||||
|
||||
void play(Ts... x) override { this->parent_->report_position(this->position_.value(x...)); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->parent_->report_position(this->position_.value(x...)); }
|
||||
|
||||
Stepper *parent_;
|
||||
};
|
||||
|
||||
|
@ -67,13 +67,13 @@ template<typename... Ts> class SetSpeedAction : public Action<Ts...> {
|
|||
|
||||
TEMPLATABLE_VALUE(float, speed);
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
float speed = this->speed_.value(x...);
|
||||
this->parent_->set_max_speed(speed);
|
||||
this->parent_->on_update_speed();
|
||||
}
|
||||
|
||||
protected:
|
||||
Stepper *parent_;
|
||||
};
|
||||
|
||||
|
|
|
@ -11,9 +11,9 @@ template<typename... Ts> class TurnOnAction : public Action<Ts...> {
|
|||
public:
|
||||
explicit TurnOnAction(Switch *a_switch) : switch_(a_switch) {}
|
||||
|
||||
void play(Ts... x) override { this->switch_->turn_on(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->switch_->turn_on(); }
|
||||
|
||||
Switch *switch_;
|
||||
};
|
||||
|
||||
|
@ -21,9 +21,9 @@ template<typename... Ts> class TurnOffAction : public Action<Ts...> {
|
|||
public:
|
||||
explicit TurnOffAction(Switch *a_switch) : switch_(a_switch) {}
|
||||
|
||||
void play(Ts... x) override { this->switch_->turn_off(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->switch_->turn_off(); }
|
||||
|
||||
Switch *switch_;
|
||||
};
|
||||
|
||||
|
@ -31,9 +31,9 @@ template<typename... Ts> class ToggleAction : public Action<Ts...> {
|
|||
public:
|
||||
explicit ToggleAction(Switch *a_switch) : switch_(a_switch) {}
|
||||
|
||||
void play(Ts... x) override { this->switch_->toggle(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->switch_->toggle(); }
|
||||
|
||||
Switch *switch_;
|
||||
};
|
||||
|
||||
|
@ -73,9 +73,9 @@ template<typename... Ts> class SwitchPublishAction : public Action<Ts...> {
|
|||
public:
|
||||
SwitchPublishAction(Switch *a_switch) : switch_(a_switch) {}
|
||||
TEMPLATABLE_VALUE(bool, state)
|
||||
void play(Ts... x) override { this->switch_->publish_state(this->state_.value(x...)); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->switch_->publish_state(this->state_.value(x...)); }
|
||||
Switch *switch_;
|
||||
};
|
||||
|
||||
|
|
|
@ -30,9 +30,9 @@ template<typename... Ts> class TextSensorPublishAction : public Action<Ts...> {
|
|||
public:
|
||||
TextSensorPublishAction(TextSensor *sensor) : sensor_(sensor) {}
|
||||
TEMPLATABLE_VALUE(std::string, state)
|
||||
void play(Ts... x) override { this->sensor_->publish_state(this->state_.value(x...)); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->sensor_->publish_state(this->state_.value(x...)); }
|
||||
TextSensor *sensor_;
|
||||
};
|
||||
|
||||
|
|
|
@ -43,7 +43,8 @@ template<typename... Ts> class SetLevelPercentAction : public Action<Ts...>, pub
|
|||
public:
|
||||
TEMPLATABLE_VALUE(uint8_t, level_percent)
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto level_percent = this->level_percent_.value(x...);
|
||||
this->parent_->set_level_percent(level_percent);
|
||||
}
|
||||
|
@ -53,7 +54,8 @@ template<typename... Ts> class SetLevelAction : public Action<Ts...>, public Par
|
|||
public:
|
||||
TEMPLATABLE_VALUE(uint8_t, level)
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto level = this->level_.value(x...);
|
||||
this->parent_->set_level(level);
|
||||
}
|
||||
|
@ -63,20 +65,21 @@ template<typename... Ts> class SetBrightnessAction : public Action<Ts...>, publi
|
|||
public:
|
||||
TEMPLATABLE_VALUE(uint8_t, brightness)
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
auto brightness = this->brightness_.value(x...);
|
||||
this->parent_->set_brightness(brightness);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename... Ts> class TurnOnAction : public Action<Ts...>, public Parented<TM1651Display> {
|
||||
public:
|
||||
void play(Ts... x) override { this->parent_->turn_on(); }
|
||||
protected:
|
||||
void play_(Ts... x) override { this->parent_->turn_on(); }
|
||||
};
|
||||
|
||||
template<typename... Ts> class TurnOffAction : public Action<Ts...>, public Parented<TM1651Display> {
|
||||
public:
|
||||
void play(Ts... x) override { this->parent_->turn_off(); }
|
||||
protected:
|
||||
void play_(Ts... x) override { this->parent_->turn_off(); }
|
||||
};
|
||||
|
||||
} // namespace tm1651
|
||||
|
|
|
@ -17,7 +17,8 @@ template<typename... Ts> class UARTWriteAction : public Action<Ts...>, public Pa
|
|||
this->static_ = true;
|
||||
}
|
||||
|
||||
void play(Ts... x) override {
|
||||
protected:
|
||||
void play_(Ts... x) override {
|
||||
if (this->static_) {
|
||||
this->parent_->write_array(this->data_static_);
|
||||
} else {
|
||||
|
@ -25,8 +26,6 @@ template<typename... Ts> class UARTWriteAction : public Action<Ts...>, public Pa
|
|||
this->parent_->write_array(val);
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
bool static_{false};
|
||||
std::function<std::vector<uint8_t>(Ts...)> data_func_{};
|
||||
std::vector<uint8_t> data_static_{};
|
||||
|
|
|
@ -75,13 +75,25 @@ template<typename... Ts> class ActionList;
|
|||
|
||||
template<typename... Ts> class Action {
|
||||
public:
|
||||
virtual void play(Ts... x) = 0;
|
||||
virtual void play_complex(Ts... x) {
|
||||
this->num_running_++;
|
||||
this->play(x...);
|
||||
this->play_next(x...);
|
||||
this->play_(x...);
|
||||
this->play_next_(x...);
|
||||
}
|
||||
void play_next(Ts... x) {
|
||||
virtual void stop_complex() {
|
||||
if (num_running_) {
|
||||
this->stop_();
|
||||
this->num_running_ = 0;
|
||||
}
|
||||
this->stop_next_();
|
||||
}
|
||||
virtual bool is_running() { return this->num_running_ > 0 || this->is_running_next_(); }
|
||||
|
||||
protected:
|
||||
friend ActionList<Ts...>;
|
||||
|
||||
virtual void play_(Ts... x) = 0;
|
||||
void play_next_(Ts... x) {
|
||||
if (this->num_running_ > 0) {
|
||||
this->num_running_--;
|
||||
if (this->next_ != nullptr) {
|
||||
|
@ -89,37 +101,26 @@ template<typename... Ts> class Action {
|
|||
}
|
||||
}
|
||||
}
|
||||
virtual void stop() {}
|
||||
virtual void stop_complex() {
|
||||
if (num_running_) {
|
||||
this->stop();
|
||||
this->num_running_ = 0;
|
||||
}
|
||||
this->stop_next();
|
||||
template<int... S> void play_next_tuple_(const std::tuple<Ts...> &tuple, seq<S...>) {
|
||||
this->play_next_(std::get<S>(tuple)...);
|
||||
}
|
||||
void stop_next() {
|
||||
void play_next_tuple_(const std::tuple<Ts...> &tuple) {
|
||||
this->play_next_tuple_(tuple, typename gens<sizeof...(Ts)>::type());
|
||||
}
|
||||
|
||||
virtual void stop_() {}
|
||||
void stop_next_() {
|
||||
if (this->next_ != nullptr) {
|
||||
this->next_->stop_complex();
|
||||
}
|
||||
}
|
||||
virtual bool is_running() { return this->num_running_ > 0 || this->is_running_next(); }
|
||||
bool is_running_next() {
|
||||
|
||||
bool is_running_next_() {
|
||||
if (this->next_ == nullptr)
|
||||
return false;
|
||||
return this->next_->is_running();
|
||||
}
|
||||
|
||||
void play_next_tuple(const std::tuple<Ts...> &tuple) {
|
||||
this->play_next_tuple_(tuple, typename gens<sizeof...(Ts)>::type());
|
||||
}
|
||||
|
||||
protected:
|
||||
friend ActionList<Ts...>;
|
||||
|
||||
template<int... S> void play_next_tuple_(const std::tuple<Ts...> &tuple, seq<S...>) {
|
||||
this->play_next(std::get<S>(tuple)...);
|
||||
}
|
||||
|
||||
Action<Ts...> *next_ = nullptr;
|
||||
|
||||
int num_running_{0};
|
||||
|
|
|
@ -108,27 +108,29 @@ template<typename... Ts> class DelayAction : public Action<Ts...>, public Compon
|
|||
|
||||
TEMPLATABLE_VALUE(uint32_t, delay)
|
||||
|
||||
void stop() override {
|
||||
this->cancel_timeout("");
|
||||
}
|
||||
|
||||
void play(Ts... x) override { /* ignore - see play_complex */
|
||||
}
|
||||
|
||||
void play_complex(Ts... x) override {
|
||||
auto f = std::bind(&Action<Ts...>::play_next, this, x...);
|
||||
auto f = std::bind(&DelayAction<Ts...>::play_next_, this, x...);
|
||||
this->num_running_++;
|
||||
this->set_timeout(this->delay_.value(x...), f);
|
||||
}
|
||||
float get_setup_priority() const override { return setup_priority::HARDWARE; }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { /* ignore - see play_complex */
|
||||
}
|
||||
|
||||
void stop_() override {
|
||||
this->cancel_timeout("");
|
||||
}
|
||||
};
|
||||
|
||||
template<typename... Ts> class LambdaAction : public Action<Ts...> {
|
||||
public:
|
||||
explicit LambdaAction(std::function<void(Ts...)> &&f) : f_(std::move(f)) {}
|
||||
void play(Ts... x) override { this->f_(x...); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->f_(x...); }
|
||||
|
||||
std::function<void(Ts...)> f_;
|
||||
};
|
||||
|
||||
|
@ -138,15 +140,12 @@ template<typename... Ts> class IfAction : public Action<Ts...> {
|
|||
|
||||
void add_then(const std::vector<Action<Ts...> *> &actions) {
|
||||
this->then_.add_actions(actions);
|
||||
this->then_.add_action(new LambdaAction<Ts...>([this](Ts... x) { this->play_next(x...); }));
|
||||
this->then_.add_action(new LambdaAction<Ts...>([this](Ts... x) { this->play_next_(x...); }));
|
||||
}
|
||||
|
||||
void add_else(const std::vector<Action<Ts...> *> &actions) {
|
||||
this->else_.add_actions(actions);
|
||||
this->else_.add_action(new LambdaAction<Ts...>([this](Ts... x) { this->play_next(x...); }));
|
||||
}
|
||||
|
||||
void play(Ts... x) override { /* ignore - see play_complex */
|
||||
this->else_.add_action(new LambdaAction<Ts...>([this](Ts... x) { this->play_next_(x...); }));
|
||||
}
|
||||
|
||||
void play_complex(Ts... x) override {
|
||||
|
@ -154,25 +153,28 @@ template<typename... Ts> class IfAction : public Action<Ts...> {
|
|||
bool res = this->condition_->check(x...);
|
||||
if (res) {
|
||||
if (this->then_.empty()) {
|
||||
this->play_next(x...);
|
||||
this->play_next_(x...);
|
||||
} else if (this->num_running_ > 0) {
|
||||
this->then_.play(x...);
|
||||
}
|
||||
} else {
|
||||
if (this->else_.empty()) {
|
||||
this->play_next(x...);
|
||||
this->play_next_(x...);
|
||||
} else if (this->num_running_ > 0) {
|
||||
this->else_.play(x...);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void stop() override {
|
||||
protected:
|
||||
void play_(Ts... x) override { /* ignore - see play_complex */
|
||||
}
|
||||
|
||||
void stop_() override {
|
||||
this->then_.stop();
|
||||
this->else_.stop();
|
||||
}
|
||||
|
||||
protected:
|
||||
Condition<Ts...> *condition_;
|
||||
ActionList<Ts...> then_;
|
||||
ActionList<Ts...> else_;
|
||||
|
@ -192,14 +194,11 @@ template<typename... Ts> class WhileAction : public Action<Ts...> {
|
|||
}
|
||||
} else {
|
||||
// condition false, play next
|
||||
this->play_next_tuple(this->var_);
|
||||
this->play_next_tuple_(this->var_);
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
void play(Ts... x) override { /* ignore - see play_complex */
|
||||
}
|
||||
|
||||
void play_complex(Ts... x) override {
|
||||
this->num_running_++;
|
||||
// Store loop parameters
|
||||
|
@ -208,7 +207,7 @@ template<typename... Ts> class WhileAction : public Action<Ts...> {
|
|||
if (!this->condition_->check_tuple(this->var_)) {
|
||||
// If new condition check failed, stop loop if running
|
||||
this->then_.stop();
|
||||
this->play_next_tuple(this->var_);
|
||||
this->play_next_tuple_(this->var_);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -217,9 +216,12 @@ template<typename... Ts> class WhileAction : public Action<Ts...> {
|
|||
}
|
||||
}
|
||||
|
||||
void stop() override { this->then_.stop(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { /* ignore - see play_complex */
|
||||
}
|
||||
|
||||
void stop_() override { this->then_.stop(); }
|
||||
|
||||
Condition<Ts...> *condition_;
|
||||
ActionList<Ts...> then_;
|
||||
std::tuple<Ts...> var_{};
|
||||
|
@ -229,15 +231,12 @@ template<typename... Ts> class WaitUntilAction : public Action<Ts...>, public Co
|
|||
public:
|
||||
WaitUntilAction(Condition<Ts...> *condition) : condition_(condition) {}
|
||||
|
||||
void play(Ts... x) override { /* ignore - see play_complex */
|
||||
}
|
||||
|
||||
void play_complex(Ts... x) override {
|
||||
this->num_running_++;
|
||||
// Check if we can continue immediately.
|
||||
if (this->condition_->check(x...)) {
|
||||
if (this->num_running_ > 0) {
|
||||
this->play_next(x...);
|
||||
this->play_next_(x...);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
@ -253,12 +252,15 @@ template<typename... Ts> class WaitUntilAction : public Action<Ts...>, public Co
|
|||
return;
|
||||
}
|
||||
|
||||
this->play_next_tuple(this->var_);
|
||||
this->play_next_tuple_(this->var_);
|
||||
}
|
||||
|
||||
float get_setup_priority() const override { return setup_priority::DATA; }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { /* ignore - see play_complex */
|
||||
}
|
||||
|
||||
Condition<Ts...> *condition_;
|
||||
std::tuple<Ts...> var_{};
|
||||
};
|
||||
|
@ -266,9 +268,10 @@ template<typename... Ts> class WaitUntilAction : public Action<Ts...>, public Co
|
|||
template<typename... Ts> class UpdateComponentAction : public Action<Ts...> {
|
||||
public:
|
||||
UpdateComponentAction(PollingComponent *component) : component_(component) {}
|
||||
void play(Ts... x) override { this->component_->update(); }
|
||||
|
||||
protected:
|
||||
void play_(Ts... x) override { this->component_->update(); }
|
||||
|
||||
PollingComponent *component_;
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue