local BasePowerD = require("device/generic/powerd") local NickelConf = require("device/kobo/nickel_conf") local batt_state_folder = "/sys/devices/platform/pmic_battery.1/power_supply/mc13892_bat/" local KoboPowerD = BasePowerD:new{ -- Do not actively set front light to 0, it may confuse users -- pressing -- hardware button won't take any effect. fl_min = 1, fl_max = 100, fl_intensity = 20, restore_settings = true, fl = nil, -- We will set this value for all kobo models. but it will only be synced -- with nickel's FrontLightState config if the current nickel firmware -- supports this config. is_fl_on = false, batt_capacity_file = batt_state_folder .. "capacity", is_charging_file = batt_state_folder .. "status", } function KoboPowerD:init() if self.device.hasFrontlight() then local kobolight = require("ffi/kobolight") local ok, light = pcall(kobolight.open) if ok then self.fl = light if NickelConf.frontLightState.get() ~= nil then self.has_fl_state_cfg = true else self.has_fl_state_cfg = false end end end end function KoboPowerD:toggleFrontlight() if self.fl ~= nil then if self.is_fl_on then self.fl:setBrightness(0) else self.fl:setBrightness(self.fl_intensity) end self.is_fl_on = not self.is_fl_on if self.has_fl_state_cfg and KOBO_SYNC_BRIGHTNESS_WITH_NICKEL then NickelConf.frontLightState.set(self.is_fl_on) end end end function KoboPowerD:setIntensityHW() if self.fl ~= nil then self.fl:setBrightness(self.fl_intensity) -- Make sure we persist intensity config in reader setting G_reader_settings:saveSetting("frontlight_intensity", self.fl_intensity) if KOBO_SYNC_BRIGHTNESS_WITH_NICKEL then NickelConf.frontLightLevel.set(self.fl_intensity) end -- also keep self.is_fl_on in sync with intensity if needed local is_fl_on if self.fl_intensity > 0 then is_fl_on = true else is_fl_on = false end if self.is_fl_on ~= is_fl_on then self.is_fl_on = is_fl_on if self.has_fl_state_cfg and KOBO_SYNC_BRIGHTNESS_WITH_NICKEL then NickelConf.frontLightState.set(self.is_fl_on) end end end end function KoboPowerD:getCapacityHW() return self:read_int_file(self.batt_capacity_file) end function KoboPowerD:isChargingHW() return self:read_str_file(self.is_charging_file) == "Charging\n" end -- Turn off front light before suspend. function KoboPowerD:beforeSuspend() if self.fl ~= nil then self.fl:setBrightness(0) end end -- Restore front light state after resume. function KoboPowerD:afterResume() if self.fl ~= nil then if KOBO_LIGHT_ON_START and tonumber(KOBO_LIGHT_ON_START) > -1 then self:setIntensity(math.min(KOBO_LIGHT_ON_START, 100)) elseif self.is_fl_on then self.fl:setBrightness(self.fl_intensity) end end end return KoboPowerD