Add brightness config support

This is far from perfect, but its a start. Ideally, the value would be
set in the display component instead.
This commit is contained in:
abmantis
2020-03-07 00:37:57 +00:00
parent a479ec8241
commit 6a77ae993a
3 changed files with 28 additions and 8 deletions

View File

@@ -33,6 +33,8 @@ void AXP192Component::update() {
}
this->batterylevel_sensor_->publish_state(batterylevel);
}
UpdateBrightness();
}
@@ -157,14 +159,25 @@ void AXP192Component::ReadBuff( uint8_t Addr , uint8_t Size , uint8_t *Buff )
this->read_bytes(Addr, Buff, Size);
}
void AXP192Component::ScreenBreath(uint8_t brightness)
void AXP192Component::UpdateBrightness()
{
if (brightness > 12)
ESP_LOGD(TAG, "Brightness=%f (Curr: %f)", brightness_, curr_brightness_);
if (brightness_ == curr_brightness_)
{
brightness = 12;
return;
}
curr_brightness_ = brightness_;
const uint8_t c_min = 7;
const uint8_t c_max = 12;
auto ubri = c_min + static_cast<uint8_t>(brightness_ * (c_max - c_min));
if (ubri > c_max)
{
ubri = c_max;
}
uint8_t buf = Read8bit( 0x28 );
Write1Byte( 0x28 , ((buf & 0x0f) | (brightness << 4)) );
Write1Byte( 0x28 , ((buf & 0x0f) | (ubri << 4)) );
}
bool AXP192Component::GetBatState()

View File

@@ -25,6 +25,7 @@ namespace axp192 {
class AXP192Component : public PollingComponent, public i2c::I2CDevice {
public:
void set_batterylevel_sensor(sensor::Sensor *batterylevel_sensor) { batterylevel_sensor_ = batterylevel_sensor; }
void set_brightness(float brightness) { brightness_ = brightness; }
// ========== INTERNAL METHODS ==========
// (In most use cases you won't need these)
@@ -35,6 +36,8 @@ public:
protected:
sensor::Sensor *batterylevel_sensor_;
float brightness_{1.0f};
float curr_brightness_{-1.0f};
/**
* LDO2: Display backlight
@@ -44,7 +47,7 @@ protected:
* DCDC3: Use unknown
*/
void begin(bool disableLDO2 = false, bool disableLDO3 = false, bool disableRTC = false, bool disableDCDC1 = false, bool disableDCDC3 = false);
void ScreenBreath(uint8_t brightness);
void UpdateBrightness();
bool GetBatState();
uint8_t GetBatData();

View File

@@ -1,9 +1,8 @@
import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.components import i2c, sensor
from esphome.const import CONF_HUMIDITY, CONF_ID,\
CONF_BATTERY_LEVEL, CONF_TEMPERATURE, ICON_THERMOMETER, \
UNIT_PERCENT, UNIT_HECTOPASCAL, ICON_GAUGE, ICON_WATER_PERCENT, ICON_BATTERY
from esphome.const import CONF_ID,\
CONF_BATTERY_LEVEL, CONF_BRIGHTNESS, UNIT_PERCENT, ICON_BATTERY
DEPENDENCIES = ['i2c']
@@ -16,6 +15,7 @@ CONFIG_SCHEMA = cv.Schema({
cv.Optional(CONF_BATTERY_LEVEL):
sensor.sensor_schema(UNIT_PERCENT, ICON_BATTERY, 1).extend({
}),
cv.Optional(CONF_BRIGHTNESS, default=1.0): cv.percentage,
}).extend(cv.polling_component_schema('60s')).extend(i2c.i2c_device_schema(0x77))
@@ -28,3 +28,7 @@ def to_code(config):
conf = config[CONF_BATTERY_LEVEL]
sens = yield sensor.new_sensor(conf)
cg.add(var.set_batterylevel_sensor(sens))
if CONF_BRIGHTNESS in config:
conf = config[CONF_BRIGHTNESS]
cg.add(var.set_brightness(conf))