2019-04-17 12:06:00 +02:00
|
|
|
#include "power_supply.h"
|
|
|
|
#include "esphome/core/log.h"
|
|
|
|
|
|
|
|
namespace esphome {
|
|
|
|
namespace power_supply {
|
|
|
|
|
2021-06-10 22:19:44 +02:00
|
|
|
static const char *const TAG = "power_supply";
|
2019-04-17 12:06:00 +02:00
|
|
|
|
|
|
|
void PowerSupply::setup() {
|
|
|
|
ESP_LOGCONFIG(TAG, "Setting up Power Supply...");
|
|
|
|
|
|
|
|
this->pin_->setup();
|
|
|
|
this->pin_->digital_write(false);
|
|
|
|
this->enabled_ = false;
|
|
|
|
}
|
|
|
|
void PowerSupply::dump_config() {
|
|
|
|
ESP_LOGCONFIG(TAG, "Power Supply:");
|
|
|
|
LOG_PIN(" Pin: ", this->pin_);
|
|
|
|
ESP_LOGCONFIG(TAG, " Time to enable: %u ms", this->enable_time_);
|
|
|
|
ESP_LOGCONFIG(TAG, " Keep on time: %.1f s", this->keep_on_time_ / 1000.0f);
|
|
|
|
}
|
|
|
|
|
|
|
|
float PowerSupply::get_setup_priority() const { return setup_priority::IO; }
|
|
|
|
|
|
|
|
bool PowerSupply::is_enabled() const { return this->enabled_; }
|
|
|
|
|
|
|
|
void PowerSupply::request_high_power() {
|
|
|
|
this->cancel_timeout("power-supply-off");
|
|
|
|
this->pin_->digital_write(true);
|
|
|
|
|
|
|
|
if (this->active_requests_ == 0) {
|
|
|
|
// we need to enable the power supply.
|
|
|
|
// cancel old timeout if it exists because we now definitely have a high power mode.
|
|
|
|
ESP_LOGD(TAG, "Enabling power supply.");
|
|
|
|
delay(this->enable_time_);
|
|
|
|
}
|
|
|
|
this->enabled_ = true;
|
|
|
|
// increase active requests
|
|
|
|
this->active_requests_++;
|
|
|
|
}
|
|
|
|
|
|
|
|
void PowerSupply::unrequest_high_power() {
|
|
|
|
this->active_requests_--;
|
|
|
|
if (this->active_requests_ < 0) {
|
2021-08-31 04:18:16 +02:00
|
|
|
// we're just going to use 0 as our new counter.
|
2019-04-17 12:06:00 +02:00
|
|
|
this->active_requests_ = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (this->active_requests_ == 0) {
|
|
|
|
// set timeout for power supply off
|
|
|
|
this->set_timeout("power-supply-off", this->keep_on_time_, [this]() {
|
|
|
|
ESP_LOGD(TAG, "Disabling power supply.");
|
|
|
|
this->pin_->digital_write(false);
|
|
|
|
this->enabled_ = false;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|
|
|
|
void PowerSupply::on_shutdown() {
|
|
|
|
this->active_requests_ = 0;
|
|
|
|
this->pin_->digital_write(false);
|
|
|
|
}
|
|
|
|
|
|
|
|
} // namespace power_supply
|
|
|
|
} // namespace esphome
|