mirror of
https://github.com/koreader/koreader
synced 2024-11-18 03:25:46 +00:00
d7b747d6dd
Device:hasFrontlight always returned a true-like value because util.isEmulated was an integer. Fixed this, also, used a polymorphic object design to reduce FrontLight code, and adapted BaseFrontLight for the emulator.
253 lines
6.3 KiB
Lua
253 lines
6.3 KiB
Lua
Device = {
|
|
screen_saver_mode = false,
|
|
charging_mode = false,
|
|
survive_screen_saver = false,
|
|
touch_dev = nil,
|
|
model = nil,
|
|
firmware_rev = nil,
|
|
frontlight = nil,
|
|
}
|
|
|
|
BaseFrontLight = {
|
|
min = 1, max = 10,
|
|
intensity = nil,
|
|
}
|
|
|
|
KindleFrontLight = {
|
|
min = 0, max = 24,
|
|
kpw_fl = "/sys/devices/system/fl_tps6116x/fl_tps6116x0/fl_intensity",
|
|
intensity = nil,
|
|
lipc_handle = nil,
|
|
}
|
|
|
|
KoboFrontLight = {
|
|
min = 1, max = 100,
|
|
intensity = 20,
|
|
restore_settings = true,
|
|
fl = nil,
|
|
}
|
|
|
|
function Device:getModel()
|
|
if self.model then return self.model end
|
|
if util.isEmulated() then
|
|
self.model = "Emulator"
|
|
return self.model
|
|
end
|
|
local std_out = io.popen("grep 'MX' /proc/cpuinfo | cut -d':' -f2 | awk {'print $2'}", "r")
|
|
local cpu_mod = std_out:read()
|
|
if not cpu_mod then
|
|
local ret = os.execute("grep 'Hardware : Mario Platform' /proc/cpuinfo", "r")
|
|
if ret ~= 0 then
|
|
self.model = nil
|
|
else
|
|
self.model = "KindleDXG"
|
|
end
|
|
end
|
|
if cpu_mod == "MX50" then
|
|
-- for KPW
|
|
local pw_test_fd = lfs.attributes(KindleFrontLight.kpw_fl)
|
|
-- for Kobo
|
|
local kg_test_fd = lfs.attributes("/bin/kobo_config.sh")
|
|
-- for KT
|
|
local kt_test_fd = lfs.attributes("/sys/devices/platform/whitney-button")
|
|
-- another special file for KT is Neonode zForce touchscreen:
|
|
-- /sys/devices/platform/zforce.0/
|
|
if pw_test_fd then
|
|
self.model = "KindlePaperWhite"
|
|
elseif kg_test_fd then
|
|
local std_out = io.popen("/bin/kobo_config.sh", "r")
|
|
local codename = std_out:read()
|
|
self.model = "Kobo_" .. codename
|
|
local version_file = io.open("/mnt/onboard/.kobo/version", "r")
|
|
self.firmware_rev = string.sub(version_file:read(),24,28)
|
|
version_file:close()
|
|
elseif kt_test_fd then
|
|
self.model = "KindleTouch"
|
|
else
|
|
self.model = "Kindle4"
|
|
end
|
|
elseif cpu_mod == "MX35" then
|
|
-- check if we are running on Kindle 3 (additional volume input)
|
|
self.model = "Kindle3"
|
|
elseif cpu_mod == "MX3" then
|
|
self.model = "Kindle2"
|
|
else
|
|
self.model = nil
|
|
end
|
|
return self.model
|
|
end
|
|
|
|
function Device:getFirmVer()
|
|
if not self.model then self:getModel() end
|
|
return self.firmware_rev
|
|
end
|
|
|
|
function Device:isKindle4()
|
|
return (self:getModel() == "Kindle4")
|
|
end
|
|
|
|
function Device:isKindle3()
|
|
return (self:getModel() == "Kindle3")
|
|
end
|
|
|
|
function Device:isKindle2()
|
|
return (self:getModel() == "Kindle2")
|
|
end
|
|
|
|
function Device:isKobo()
|
|
return string.find(self:getModel(),"Kobo_") == 1
|
|
end
|
|
|
|
function Device:hasNoKeyboard()
|
|
return self:isTouchDevice() or (self:getModel() == "Kindle4")
|
|
end
|
|
|
|
function Device:hasKeyboard()
|
|
return not self:hasNoKeyboard()
|
|
end
|
|
|
|
function Device:isTouchDevice()
|
|
local model = self:getModel()
|
|
return (model == "KindlePaperWhite") or (model == "KindleTouch") or self:isKobo() or util.isEmulated()
|
|
end
|
|
|
|
function Device:hasFrontlight()
|
|
local model = self:getModel()
|
|
return (model == "KindlePaperWhite") or (model == "Kobo_dragon") or (model == "Kobo_kraken") or (model == "Kobo_phoenix") or util.isEmulated()
|
|
end
|
|
|
|
function Device:setTouchInputDev(dev)
|
|
self.touch_dev = dev
|
|
end
|
|
|
|
function Device:getTouchInputDev()
|
|
return self.touch_dev
|
|
end
|
|
|
|
function Device:intoScreenSaver()
|
|
--os.execute("echo 'screensaver in' >> /mnt/us/event_test.txt")
|
|
if self.charging_mode == false and self.screen_saver_mode == false then
|
|
Screen:saveCurrentBB()
|
|
--UIManager:show(InfoMessage:new{
|
|
--text = "Going into screensaver... ",
|
|
--timeout = 2,
|
|
--})
|
|
--util.sleep(1)
|
|
--os.execute("killall -cont cvm")
|
|
self.screen_saver_mode = true
|
|
end
|
|
end
|
|
|
|
function Device:outofScreenSaver()
|
|
--os.execute("echo 'screensaver out' >> /mnt/us/event_test.txt")
|
|
if self.screen_saver_mode == true and self.charging_mode == false then
|
|
-- wait for native system update screen before we recover saved
|
|
-- Blitbuffer.
|
|
util.usleep(1500000)
|
|
--os.execute("killall -stop cvm")
|
|
Screen:restoreFromSavedBB()
|
|
Screen:refresh(0)
|
|
self.survive_screen_saver = true
|
|
end
|
|
self.screen_saver_mode = false
|
|
end
|
|
|
|
function Device:usbPlugIn()
|
|
--os.execute("echo 'usb in' >> /mnt/us/event_test.txt")
|
|
if self.charging_mode == false and self.screen_saver_mode == false then
|
|
Screen:saveCurrentBB()
|
|
--UIManager:show(InfoMessage:new{
|
|
--text = "Going into USB mode... ",
|
|
--timeout = 2,
|
|
--})
|
|
--util.sleep(1)
|
|
--os.execute("killall -cont cvm")
|
|
end
|
|
self.charging_mode = true
|
|
end
|
|
|
|
function Device:usbPlugOut()
|
|
--os.execute("echo 'usb out' >> /mnt/us/event_test.txt")
|
|
if self.charging_mode == true and self.screen_saver_mode == false then
|
|
--util.usleep(1500000)
|
|
--os.execute("killall -stop cvm")
|
|
Screen:restoreFromSavedBB()
|
|
Screen:refresh(0)
|
|
end
|
|
|
|
--@TODO signal filemanager for file changes 13.06 2012 (houqp)
|
|
self.charging_mode = false
|
|
end
|
|
|
|
function Device:getFrontlight()
|
|
if self.frontlight ~= nil then
|
|
return self.frontlight
|
|
elseif self:hasFrontlight() then
|
|
if self:getModel() == "KindlePaperWhite" then
|
|
self.frontlight = KindleFrontLight
|
|
elseif self:isKobo() then
|
|
self.frontlight = KoboFrontLight
|
|
else -- emulated FrontLight
|
|
self.frontlight = BaseFrontLight
|
|
end
|
|
self.frontlight:init()
|
|
end
|
|
return self.frontlight
|
|
end
|
|
|
|
function BaseFrontLight:init() end
|
|
function BaseFrontLight:toggle() end
|
|
function BaseFrontLight:setIntensityHW() end
|
|
|
|
function BaseFrontLight:setIntensity(intensity)
|
|
intensity = intensity < self.min and self.min or intensity
|
|
intensity = intensity > self.max and self.max or intensity
|
|
self.intensity = intensity
|
|
self:setIntensityHW()
|
|
end
|
|
|
|
function KindleFrontLight:init()
|
|
require "liblipclua"
|
|
self.lipc_handle = lipc.init("com.github.koreader")
|
|
if self.lipc_handle then
|
|
self.intensity = self.lipc_handle:get_int_property("com.lab126.powerd", "flIntensity")
|
|
end
|
|
end
|
|
|
|
function KindleFrontLight:toggle()
|
|
local f = io.open(self.kpw_fl, "r")
|
|
local sysint = tonumber(f:read("*all"):match("%d+"))
|
|
f:close()
|
|
if sysint == 0 then
|
|
self:setIntensity(self.intensity)
|
|
else
|
|
os.execute("echo -n 0 > " .. self.kpw_fl)
|
|
end
|
|
end
|
|
|
|
KindleFrontLight.setIntensity = BaseFrontLight.setIntensity
|
|
|
|
function KindleFrontLight:setIntensityHW()
|
|
if self.lipc_handle ~= nil then
|
|
self.lipc_handle:set_int_property("com.lab126.powerd", "flIntensity", self.intensity)
|
|
end
|
|
end
|
|
|
|
function KoboFrontLight:init()
|
|
self.fl = kobolight.open()
|
|
end
|
|
|
|
function KoboFrontLight:toggle()
|
|
if self.fl ~= nil then
|
|
self.fl:toggle()
|
|
end
|
|
end
|
|
|
|
KoboFrontLight.setIntensity = BaseFrontLight.setIntensity
|
|
|
|
function KoboFrontLight:setIntensityHW()
|
|
if self.fl ~= nil then
|
|
self.fl:setBrightness(self.intensity)
|
|
end
|
|
end
|