mirror of
https://github.com/HASwitchPlate/openHASP.git
synced 2025-07-25 20:26:41 +00:00
Merge pull request #641 from presslab-us/backlight_fade_cb
Use callback for backlight fade
This commit is contained in:
commit
2fe7bcc1a2
@ -110,6 +110,8 @@ Esp32Device::Esp32Device()
|
|||||||
_backlight_power = 1;
|
_backlight_power = 1;
|
||||||
_backlight_level = 255;
|
_backlight_level = 255;
|
||||||
_backlight_pin = 255; // not TFT_BCKL because it is unknown at this stage
|
_backlight_pin = 255; // not TFT_BCKL because it is unknown at this stage
|
||||||
|
_backlight_pending = false;
|
||||||
|
_backlight_fading = false;
|
||||||
|
|
||||||
/* fill unique identifier with wifi mac */
|
/* fill unique identifier with wifi mac */
|
||||||
byte mac[6];
|
byte mac[6];
|
||||||
@ -241,6 +243,22 @@ const char* Esp32Device::get_hardware_id()
|
|||||||
return _hardware_id.c_str();
|
return _hardware_id.c_str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Esp32Device::cb_backlight(const ledc_cb_param_t *param, void *user_arg) {
|
||||||
|
reinterpret_cast<Esp32Device*>(user_arg)->end_backlight_fade();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Esp32Device::end_backlight_fade()
|
||||||
|
{
|
||||||
|
if (_backlight_pending) {
|
||||||
|
_backlight_pending = false;
|
||||||
|
_backlight_fading = false;
|
||||||
|
update_backlight(_backlight_fade);
|
||||||
|
} else {
|
||||||
|
_backlight_fading = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Esp32Device::set_backlight_pin(uint8_t pin)
|
void Esp32Device::set_backlight_pin(uint8_t pin)
|
||||||
{
|
{
|
||||||
_backlight_pin = pin;
|
_backlight_pin = pin;
|
||||||
@ -255,6 +273,8 @@ void Esp32Device::set_backlight_pin(uint8_t pin)
|
|||||||
#endif
|
#endif
|
||||||
ledcAttachPin(pin, BACKLIGHT_CHANNEL);
|
ledcAttachPin(pin, BACKLIGHT_CHANNEL);
|
||||||
ledc_fade_func_install(0);
|
ledc_fade_func_install(0);
|
||||||
|
ledc_cbs_t cbs = {cb_backlight};
|
||||||
|
ledc_cb_register(LEDC_LOW_SPEED_MODE, (ledc_channel_t) BACKLIGHT_CHANNEL, &cbs, this);
|
||||||
update_backlight(false);
|
update_backlight(false);
|
||||||
} else {
|
} else {
|
||||||
LOG_VERBOSE(TAG_GUI, F("Backlight : Pin not set"));
|
LOG_VERBOSE(TAG_GUI, F("Backlight : Pin not set"));
|
||||||
@ -275,8 +295,7 @@ bool Esp32Device::get_backlight_invert()
|
|||||||
void Esp32Device::set_backlight_level(uint8_t level)
|
void Esp32Device::set_backlight_level(uint8_t level)
|
||||||
{
|
{
|
||||||
_backlight_level = level;
|
_backlight_level = level;
|
||||||
// update_backlight(true);
|
update_backlight(true);
|
||||||
update_backlight(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t Esp32Device::get_backlight_level()
|
uint8_t Esp32Device::get_backlight_level()
|
||||||
@ -287,8 +306,7 @@ uint8_t Esp32Device::get_backlight_level()
|
|||||||
void Esp32Device::set_backlight_power(bool power)
|
void Esp32Device::set_backlight_power(bool power)
|
||||||
{
|
{
|
||||||
_backlight_power = power;
|
_backlight_power = power;
|
||||||
// update_backlight(true);
|
update_backlight(true);
|
||||||
update_backlight(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Esp32Device::get_backlight_power()
|
bool Esp32Device::get_backlight_power()
|
||||||
@ -298,28 +316,36 @@ bool Esp32Device::get_backlight_power()
|
|||||||
|
|
||||||
void Esp32Device::update_backlight(bool fade)
|
void Esp32Device::update_backlight(bool fade)
|
||||||
{
|
{
|
||||||
static uint32_t last_duty = 0;
|
|
||||||
if(_backlight_pin < GPIO_NUM_MAX) {
|
if(_backlight_pin < GPIO_NUM_MAX) {
|
||||||
#if !defined(CONFIG_IDF_TARGET_ESP32S2)
|
#if !defined(CONFIG_IDF_TARGET_ESP32S2)
|
||||||
uint32_t duty = _backlight_power ? map(_backlight_level, 0, 255, 0, 1023) : 0;
|
uint32_t duty = _backlight_power ? map(_backlight_level, 0, 255, 0, 1023) : 0;
|
||||||
if(_backlight_invert) duty = 1023 - duty;
|
if(_backlight_invert) duty = 1023 - duty;
|
||||||
if(fade) {
|
if(_backlight_fading) {
|
||||||
ledcWrite(BACKLIGHT_CHANNEL, last_duty); // this will stop an in-progress fade
|
_backlight_fade = fade;
|
||||||
ledc_set_fade_time_and_start(LEDC_LOW_SPEED_MODE, (ledc_channel_t) BACKLIGHT_CHANNEL, duty, BACKLIGHT_FADEMS, LEDC_FADE_NO_WAIT);
|
_backlight_pending = true;
|
||||||
} else {
|
} else {
|
||||||
ledcWrite(BACKLIGHT_CHANNEL, duty); // ledChannel and value
|
if(fade) {
|
||||||
|
_backlight_fading = true;
|
||||||
|
ledc_set_fade_time_and_start(LEDC_LOW_SPEED_MODE, (ledc_channel_t) BACKLIGHT_CHANNEL, duty, BACKLIGHT_FADEMS, LEDC_FADE_NO_WAIT);
|
||||||
|
} else {
|
||||||
|
ledcWrite(BACKLIGHT_CHANNEL, duty); // ledChannel and value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
uint32_t duty = _backlight_power ? map(_backlight_level, 0, 255, 0, 1023) : 0;
|
uint32_t duty = _backlight_power ? map(_backlight_level, 0, 255, 0, 1023) : 0;
|
||||||
if(_backlight_invert) duty = 1023 - duty;
|
if(_backlight_invert) duty = 1023 - duty;
|
||||||
if(fade) {
|
if(_backlight_fading) {
|
||||||
ledcWrite(BACKLIGHT_CHANNEL, last_duty); // this will stop an in-progress fade
|
_backlight_fade = fade;
|
||||||
ledc_set_fade_time_and_start(LEDC_LOW_SPEED_MODE, (ledc_channel_t) BACKLIGHT_CHANNEL, duty, BACKLIGHT_FADEMS, LEDC_FADE_NO_WAIT);
|
_backlight_pending = true;
|
||||||
} else {
|
} else {
|
||||||
ledcWrite(BACKLIGHT_CHANNEL, duty); // ledChannel and value
|
if(fade) {
|
||||||
|
_backlight_fading = true;
|
||||||
|
ledc_set_fade_time_and_start(LEDC_LOW_SPEED_MODE, (ledc_channel_t) BACKLIGHT_CHANNEL, duty, BACKLIGHT_FADEMS, LEDC_FADE_NO_WAIT);
|
||||||
|
} else {
|
||||||
|
ledcWrite(BACKLIGHT_CHANNEL, duty); // ledChannel and value
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
last_duty = duty;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// haspTft.tft.writecommand(0x53); // Write CTRL Display
|
// haspTft.tft.writecommand(0x53); // Write CTRL Display
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
#include "hasp_conf.h"
|
#include "hasp_conf.h"
|
||||||
#include "../device.h"
|
#include "../device.h"
|
||||||
|
#include "driver/ledc.h"
|
||||||
|
|
||||||
#if defined(ESP32)
|
#if defined(ESP32)
|
||||||
|
|
||||||
@ -68,8 +69,13 @@ class Esp32Device : public BaseDevice {
|
|||||||
uint8_t _backlight_level;
|
uint8_t _backlight_level;
|
||||||
uint8_t _backlight_power;
|
uint8_t _backlight_power;
|
||||||
uint8_t _backlight_invert;
|
uint8_t _backlight_invert;
|
||||||
|
bool _backlight_pending;
|
||||||
|
bool _backlight_fading;
|
||||||
|
bool _backlight_fade;
|
||||||
|
|
||||||
void update_backlight(bool fade);
|
void update_backlight(bool fade);
|
||||||
|
static bool cb_backlight(const ledc_cb_param_t *param, void *user_arg);
|
||||||
|
void end_backlight_fade();
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace dev
|
} // namespace dev
|
||||||
|
Loading…
x
Reference in New Issue
Block a user