From 816d0a551acc9cc2d5cec987655397cc904be696 Mon Sep 17 00:00:00 2001 From: Qingping Hou Date: Sat, 22 Oct 2016 00:04:37 -0700 Subject: [PATCH] kobo: handle charging/uncharging event --- Makefile | 16 ++++--- base | 2 +- frontend/device/generic/device.lua | 72 +++--------------------------- frontend/device/kindle/device.lua | 62 +++++++++++++++++++++++++ frontend/device/kobo/device.lua | 4 +- frontend/ui/uimanager.lua | 4 +- 6 files changed, 86 insertions(+), 74 deletions(-) diff --git a/Makefile b/Makefile index fc5aa1e06..c2a1bf10c 100644 --- a/Makefile +++ b/Makefile @@ -143,6 +143,7 @@ dist-clean: clean $(MAKE) -C $(KOR_BASE) dist-clean $(MAKE) -C doc clean +ZIP_EXCLUDE=-x "*.swp" -x "*.swo" -x "*.orig" -x "*.un~" # Don't bundle launchpad on touch devices.. ifeq ($(TARGET), kindle-legacy) KINDLE_LEGACY_LAUNCHER:=launchpad @@ -164,7 +165,8 @@ kindleupdate: all ../koreader-$(DIST)-$(MACHINE)-$(VERSION).zip \ extensions koreader $(KINDLE_LEGACY_LAUNCHER) \ -x "koreader/resources/fonts/*" "koreader/ota/*" \ - "koreader/resources/icons/src/*" "koreader/spec/*" + "koreader/resources/icons/src/*" "koreader/spec/*" \ + $(ZIP_EXCLUDE) # generate kindleupdate package index file zipinfo -1 koreader-$(DIST)-$(MACHINE)-$(VERSION).zip > \ $(INSTALL_DIR)/koreader/ota/package.index @@ -196,7 +198,8 @@ koboupdate: all zip -9 -r \ ../koreader-kobo-$(MACHINE)-$(VERSION).zip \ koreader -x "koreader/resources/fonts/*" \ - "koreader/resources/icons/src/*" "koreader/spec/*" + "koreader/resources/icons/src/*" "koreader/spec/*" \ + $(ZIP_EXCLUDE) # generate koboupdate package index file zipinfo -1 koreader-kobo-$(MACHINE)-$(VERSION).zip > \ $(INSTALL_DIR)/koreader/ota/package.index @@ -228,7 +231,8 @@ pbupdate: all zip -9 -r \ ../koreader-pocketbook-$(MACHINE)-$(VERSION).zip \ applications -x "applications/koreader/resources/fonts/*" \ - "applications/koreader/resources/icons/src/*" "applications/koreader/spec/*" + "applications/koreader/resources/icons/src/*" "applications/koreader/spec/*" \ + $(ZIP_EXCLUDE) # generate koboupdate package index file zipinfo -1 koreader-pocketbook-$(MACHINE)-$(VERSION).zip > \ $(INSTALL_DIR)/applications/koreader/ota/package.index @@ -264,7 +268,8 @@ utupdate: all zip -9 -r \ ../koreader-$(DIST)-$(MACHINE)-$(VERSION).zip \ koreader -x "koreader/resources/fonts/*" "koreader/ota/*" \ - "koreader/resources/icons/src/*" "koreader/spec/*" + "koreader/resources/icons/src/*" "koreader/spec/*" \ + $(ZIP_EXCLUDE) # generate update package index file zipinfo -1 koreader-$(DIST)-$(MACHINE)-$(VERSION).zip > \ @@ -293,7 +298,8 @@ androidupdate: all cd $(INSTALL_DIR)/koreader && \ zip -9 -r \ ../../koreader-android-$(MACHINE)-$(VERSION).zip \ - * -x "resources/fonts/*" "resources/icons/src/*" "spec/*" + * -x "resources/fonts/*" "resources/icons/src/*" "spec/*" \ + $(ZIP_EXCLUDE) # generate android update package index file zipinfo -1 koreader-android-$(MACHINE)-$(VERSION).zip > \ $(INSTALL_DIR)/koreader/ota/package.index diff --git a/base b/base index 55032c87b..0f7eceea3 160000 --- a/base +++ b/base @@ -1 +1 @@ -Subproject commit 55032c87b2a7135819a20257b3b78c63a525a26b +Subproject commit 0f7eceea34b5c64a7ac968eb0ce208740930891c diff --git a/frontend/device/generic/device.lua b/frontend/device/generic/device.lua index 5d21a3ae6..e96d3accd 100644 --- a/frontend/device/generic/device.lua +++ b/frontend/device/generic/device.lua @@ -1,5 +1,4 @@ local Event = require("ui/event") -local util = require("ffi/util") local DEBUG = require("dbg") local function yes() return true end @@ -83,40 +82,6 @@ function Device:getPowerDevice() return self.powerd end --- ONLY used for Kindle devices -function Device:intoScreenSaver() - local UIManager = require("ui/uimanager") - if self.charging_mode == false and self.screen_saver_mode == false then - self.screen:saveCurrentBB() - self.screen_saver_mode = true - -- On FW >= 5.7.2, we sigstop awesome, but we need it to show stuff... - if os.getenv("AWESOME_STOPPED") == "yes" then - os.execute("killall -cont awesome") - end - end - UIManager:broadcastEvent(Event:new("FlushSettings")) -end - --- ONLY used for Kindle devices -function Device:outofScreenSaver() - if self.screen_saver_mode == true and self.charging_mode == false then - -- On FW >= 5.7.2, put awesome to sleep again... - if os.getenv("AWESOME_STOPPED") == "yes" then - os.execute("killall -stop awesome") - end - -- wait for native system update screen before we recover saved - -- Blitbuffer. - util.usleep(1500000) - self.screen:restoreFromSavedBB() - self:resume() - if self:needsScreenRefreshAfterResume() then - self.screen:refreshFull() - end - self.powerd:refreshCapacity() - end - self.screen_saver_mode = false -end - function Device:rescheduleSuspend() local UIManager = require("ui/uimanager") UIManager:unschedule(self.suspend) @@ -179,6 +144,12 @@ function Device:onPowerEvent(ev) end end +-- Hardware specific method to handle usb plug in event +function Device:usbPlugIn() end + +-- Hardware specific method to handle usb plug out event +function Device:usbPlugOut() end + -- Hardware specific method to suspend the device function Device:suspend() end @@ -188,37 +159,8 @@ function Device:resume() end -- Hardware specific method to power off the device function Device:powerOff() end -function Device:usbPlugIn() - if self.charging_mode == false and self.screen_saver_mode == false then - self.screen:saveCurrentBB() - -- On FW >= 5.7.2, we sigstop awesome, but we need it to show stuff... - if os.getenv("AWESOME_STOPPED") == "yes" then - os.execute("killall -cont awesome") - end - end - self.charging_mode = true -end - -function Device:usbPlugOut() - if self.charging_mode == true and self.screen_saver_mode == false then - -- On FW >= 5.7.2, put awesome to sleep again... - if os.getenv("AWESOME_STOPPED") == "yes" then - os.execute("killall -stop awesome") - end - -- Same as when going out of screensaver, wait for the native system - util.usleep(1500000) - self.screen:restoreFromSavedBB() - self.screen:refreshFull() - self.powerd:refreshCapacity() - end - - --@TODO signal filemanager for file changes 13.06 2012 (houqp) - self.charging_mode = false -end - -- Hardware specific method to initialize network manager module -function Device:initNetworkManager() -end +function Device:initNetworkManager() end --[[ prepare for application shutdown diff --git a/frontend/device/kindle/device.lua b/frontend/device/kindle/device.lua index 5da46de0c..2dae3e24b 100644 --- a/frontend/device/kindle/device.lua +++ b/frontend/device/kindle/device.lua @@ -1,4 +1,6 @@ local Generic = require("device/generic/device") +local util = require("ffi/util") +local Event = require("ui/event") local DEBUG = require("dbg") local function yes() return true end @@ -32,6 +34,66 @@ function Kindle:initNetworkManager(NetworkMgr) end end +function Kindle:usbPlugIn() + if self.charging_mode == false and self.screen_saver_mode == false then + self.screen:saveCurrentBB() + -- On FW >= 5.7.2, we sigstop awesome, but we need it to show stuff... + if os.getenv("AWESOME_STOPPED") == "yes" then + os.execute("killall -cont awesome") + end + end + self.charging_mode = true +end + +function Kindle:intoScreenSaver() + if self.charging_mode == false and self.screen_saver_mode == false then + self.screen:saveCurrentBB() + self.screen_saver_mode = true + -- On FW >= 5.7.2, we sigstop awesome, but we need it to show stuff... + if os.getenv("AWESOME_STOPPED") == "yes" then + os.execute("killall -cont awesome") + end + end + require("ui/uimanager"):broadcastEvent(Event:new("FlushSettings")) +end + +function Kindle:outofScreenSaver() + if self.screen_saver_mode == true and self.charging_mode == false then + -- On FW >= 5.7.2, put awesome to sleep again... + if os.getenv("AWESOME_STOPPED") == "yes" then + os.execute("killall -stop awesome") + end + -- wait for native system update screen before we recover saved + -- Blitbuffer. + util.usleep(1500000) + self.screen:restoreFromSavedBB() + self:resume() + if self:needsScreenRefreshAfterResume() then + self.screen:refreshFull() + end + self.powerd:refreshCapacity() + end + self.screen_saver_mode = false +end + +function Kindle:usbPlugOut() + if self.charging_mode == true and self.screen_saver_mode == false then + -- On FW >= 5.7.2, put awesome to sleep again... + if os.getenv("AWESOME_STOPPED") == "yes" then + os.execute("killall -stop awesome") + end + -- Same as when going out of screensaver, wait for the native system + util.usleep(1500000) + self.screen:restoreFromSavedBB() + self.screen:refreshFull() + self.powerd:refreshCapacity() + end + + --@TODO signal filemanager for file changes 13.06 2012 (houqp) + self.charging_mode = false +end + + local Kindle2 = Kindle:new{ model = "Kindle2", hasKeyboard = yes, diff --git a/frontend/device/kobo/device.lua b/frontend/device/kobo/device.lua index f3448f6fc..f13ed33b3 100644 --- a/frontend/device/kobo/device.lua +++ b/frontend/device/kobo/device.lua @@ -130,7 +130,6 @@ function Kobo:init() return "Light" end end, - -- NOTE: usb hotplug event is also available in /tmp/nickel-hardware-status [102] = "Home", [116] = "Power", } @@ -141,6 +140,9 @@ function Kobo:init() -- event2 is for MMA7660 sensor (3-Axis Orientation/Motion Detection) self.input.open("/dev/input/event0") -- Light button and sleep slider self.input.open("/dev/input/event1") + -- fake_events is only used for usb plug event so far + -- NOTE: usb hotplug event is also available in /tmp/nickel-hardware-status + self.input.open("fake_events") if not self.needsTouchScreenProbe() then self:initEventAdjustHooks() diff --git a/frontend/ui/uimanager.lua b/frontend/ui/uimanager.lua index 375120f61..72d06c5ac 100644 --- a/frontend/ui/uimanager.lua +++ b/frontend/ui/uimanager.lua @@ -108,12 +108,12 @@ function UIManager:init() self.event_handlers["Light"] = function() Device:getPowerDevice():toggleFrontlight() end - self.event_handlers["USBPlugIn"] = function() + self.event_handlers["Charging"] = function() if Device.screen_saver_mode then self.event_handlers["Suspend"]() end end - self.event_handlers["USBPlugOut"] = self.event_handlers["USBPlugIn"] + self.event_handlers["NotCharging"] = self.event_handlers["Charging"] self.event_handlers["__default__"] = function(input_event) if Device.screen_saver_mode then -- Suspension in Kobo can be interrupted by screen updates. We