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:
@@ -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()
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user