Author: titmuss
Date: Tue Jan 22 13:55:56 2008
New Revision: 1560
URL: http://svn.slimdevices.com?rev=1560&root=Jive&view=rev
Log:
[EMAIL PROTECTED] (orig r1545): titmuss | 2008-01-21 21:59:10 +0000
Bug: 6624
Description:
Close network connections before rebooting/powering off. This is done for
Power Off, Firmware Upgrade, Factory Reset and
the desktop Quit applets.
Bug: 6651
Description:
Allow the user to power off with the home key when battery low warning is
visible (untested).
Bug: 6682
Description:
Don't allow SC or the user to interrupt firmware updates. Disconnect from SC
before starting the update, and ignore all
user input. Any key/scroll will still wakeup the screen. Also correctly detect
errors when downloading firmware, and
display the error window. This had broken when converting to use co-routines.
Modified:
trunk/ (props changed)
trunk/jive/src/pkg/jive/share/jive/ui/Framework.lua
trunk/jive/src/pkg/jive/src/ui/jive.h
trunk/jive/src/pkg/jive/src/ui/lua_jiveui.c
trunk/jive/src/pkg/jive/src/ui/lua_jiveui.pkg
trunk/jive/src/pkg/jive_desktop/share/applets/Quit/QuitMeta.lua
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFactoryReset/SetupFactoryResetApplet.lua
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFirmwareUpgrade/SetupFirmwareUpgradeApplet.lua
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFirmwareUpgrade/Upgrade.lua
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
Propchange: trunk/
------------------------------------------------------------------------------
--- svk:merge (original)
+++ svk:merge Tue Jan 22 13:55:56 2008
@@ -1,3 +1,3 @@
-bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/7.0:1544
+bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/7.0:1545
bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/SN:1083
bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/scrolling:1378
Modified: trunk/jive/src/pkg/jive/share/jive/ui/Framework.lua
URL:
http://svn.slimdevices.com/trunk/jive/src/pkg/jive/share/jive/ui/Framework.lua?rev=1560&root=Jive&r1=1559&r2=1560&view=diff
==============================================================================
--- trunk/jive/src/pkg/jive/share/jive/ui/Framework.lua (original)
+++ trunk/jive/src/pkg/jive/share/jive/ui/Framework.lua Tue Jan 22 13:55:56 2008
@@ -271,6 +271,32 @@
--[[
+=head2 jive.ui.Framework:wakeup()
+
+Power management wakeup.
+
+=cut
+--]]
+function wakeup(self)
+end
+
+
+--[[
+
+=head2 jive.ui.Framework:registerWakeup()
+
+Register a power management wakeup function.
+
+=cut
+--]]
+function registerWakeup(self, wakeup)
+ _assert(type(wakeup) == "function")
+ self.wakeup = wakeup
+end
+
+
+--[[
+
=head2 jive.ui.Framework:addWidget(widget)
Add a global widget I<widget> to the screen. The global widgets are shown on
all windows.
Modified: trunk/jive/src/pkg/jive/src/ui/jive.h
URL:
http://svn.slimdevices.com/trunk/jive/src/pkg/jive/src/ui/jive.h?rev=1560&root=Jive&r1=1559&r2=1560&view=diff
==============================================================================
--- trunk/jive/src/pkg/jive/src/ui/jive.h (original)
+++ trunk/jive/src/pkg/jive/src/ui/jive.h Tue Jan 22 13:55:56 2008
@@ -102,6 +102,8 @@
JIVE_EVENT_KEY_ALL = ( JIVE_EVENT_KEY_DOWN |
JIVE_EVENT_KEY_UP | JIVE_EVENT_KEY_PRESS | JIVE_EVENT_KEY_HOLD ),
JIVE_EVENT_MOUSE_ALL = ( JIVE_EVENT_MOUSE_DOWN |
JIVE_EVENT_MOUSE_PRESS | JIVE_EVENT_MOUSE_HOLD ),
+ JIVE_EVENT_ALL_INPUT = ( JIVE_EVENT_KEY_ALL |
JIVE_EVENT_MOUSE_ALL | JIVE_EVENT_SCROLL),
+
JIVE_EVENT_VISIBLE_ALL = ( JIVE_EVENT_SHOW | JIVE_EVENT_HIDE ),
JIVE_EVENT_ALL = 0xFFFFFF,
} JiveEventType;
Modified: trunk/jive/src/pkg/jive/src/ui/lua_jiveui.c
URL:
http://svn.slimdevices.com/trunk/jive/src/pkg/jive/src/ui/lua_jiveui.c?rev=1560&root=Jive&r1=1559&r2=1560&view=diff
==============================================================================
--- trunk/jive/src/pkg/jive/src/ui/lua_jiveui.c (original)
+++ trunk/jive/src/pkg/jive/src/ui/lua_jiveui.c Tue Jan 22 13:55:56 2008
@@ -2068,6 +2068,7 @@
tolua_constant(tolua_S,"EVENT_MOTION",JIVE_EVENT_MOTION);
tolua_constant(tolua_S,"EVENT_KEY_ALL",JIVE_EVENT_KEY_ALL);
tolua_constant(tolua_S,"EVENT_MOUSE_ALL",JIVE_EVENT_MOUSE_ALL);
+ tolua_constant(tolua_S,"EVENT_ALL_INPUT",JIVE_EVENT_ALL_INPUT);
tolua_constant(tolua_S,"EVENT_VISIBLE_ALL",JIVE_EVENT_VISIBLE_ALL);
tolua_constant(tolua_S,"EVENT_ALL",JIVE_EVENT_ALL);
tolua_constant(tolua_S,"EVENT_UNUSED",JIVE_EVENT_UNUSED);
Modified: trunk/jive/src/pkg/jive/src/ui/lua_jiveui.pkg
URL:
http://svn.slimdevices.com/trunk/jive/src/pkg/jive/src/ui/lua_jiveui.pkg?rev=1560&root=Jive&r1=1559&r2=1560&view=diff
==============================================================================
--- trunk/jive/src/pkg/jive/src/ui/lua_jiveui.pkg (original)
+++ trunk/jive/src/pkg/jive/src/ui/lua_jiveui.pkg Tue Jan 22 13:55:56 2008
@@ -107,6 +107,7 @@
JIVE_EVENT_KEY_ALL @ EVENT_KEY_ALL = ( JIVE_EVENT_KEY_DOWN
| JIVE_EVENT_KEY_UP | JIVE_EVENT_KEY_PRESS | JIVE_EVENT_KEY_HOLD ),
JIVE_EVENT_MOUSE_ALL @ EVENT_MOUSE_ALL = (
JIVE_EVENT_MOUSE_DOWN | JIVE_EVENT_MOUSE_PRESS | JIVE_EVENT_MOUSE_HOLD ),
+ JIVE_EVENT_ALL_INPUT @ EVENT_ALL_INPUT = ( JIVE_EVENT_KEY_ALL
| JIVE_EVENT_MOUSE_ALL | JIVE_EVENT_SCROLL),
JIVE_EVENT_VISIBLE_ALL @ EVENT_VISIBLE_ALL = (
JIVE_EVENT_SHOW | JIVE_EVENT_HIDE ),
JIVE_EVENT_ALL @ EVENT_ALL = 0xFFFFFF,
} EventType;
Modified: trunk/jive/src/pkg/jive_desktop/share/applets/Quit/QuitMeta.lua
URL:
http://svn.slimdevices.com/trunk/jive/src/pkg/jive_desktop/share/applets/Quit/QuitMeta.lua?rev=1560&root=Jive&r1=1559&r2=1560&view=diff
==============================================================================
--- trunk/jive/src/pkg/jive_desktop/share/applets/Quit/QuitMeta.lua (original)
+++ trunk/jive/src/pkg/jive_desktop/share/applets/Quit/QuitMeta.lua Tue Jan 22
13:55:56 2008
@@ -43,6 +43,10 @@
node = 'home',
text = self:string("QUIT"),
callback = function()
+ -- disconnect from SqueezeCenter
+ local slimDiscovery =
appletManager:loadApplet("SlimDiscovery")
+ slimDiscovery.serversObj:disconnect()
+
return (EVENT_CONSUME | EVENT_QUIT)
end,
weight = 1000,
Modified:
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFactoryReset/SetupFactoryResetApplet.lua
URL:
http://svn.slimdevices.com/trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFactoryReset/SetupFactoryResetApplet.lua?rev=1560&root=Jive&r1=1559&r2=1560&view=diff
==============================================================================
---
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFactoryReset/SetupFactoryResetApplet.lua
(original)
+++
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFactoryReset/SetupFactoryResetApplet.lua
Tue Jan 22 13:55:56 2008
@@ -5,6 +5,7 @@
local os = require("os")
local Applet = require("jive.Applet")
+local Framework = require("jive.ui.Framework")
local Icon = require("jive.ui.Icon")
local Label = require("jive.ui.Label")
local Popup = require("jive.ui.Popup")
@@ -14,6 +15,11 @@
local Window = require("jive.ui.Window")
local log =
require("jive.utils.log").logger("applets.setup")
+
+local EVENT_ALL_INPUT = jive.ui.EVENT_ALL_INPUT
+local EVENT_CONSUME = jive.ui.EVENT_CONSUME
+
+local appletManager = appletManager
module(...)
@@ -48,19 +54,35 @@
function _factoryReset(self)
- local window = Popup("popupIcon")
- window:addWidget(Icon("iconConnected"))
- window:addWidget(Label("text", self:string("RESET_RESETTING")))
+ -- disconnect from SqueezeCenter
+ local slimDiscovery = appletManager:loadApplet("SlimDiscovery")
+ slimDiscovery.serversObj:disconnect()
- window:addTimer(2000, function()
- log:warn("Factory reset...")
+ local popup = Popup("popupIcon")
+ popup:addWidget(Icon("iconConnected"))
+ popup:addWidget(Label("text", self:string("RESET_RESETTING")))
- -- touch .factoryreset and reboot
- io.open("/.factoryreset", "w"):close()
- os.execute("/bin/busybox reboot -f")
+ -- make sure this popup remains on screen
+ popup:setAllowScreensaver(false)
+ popup:setAlwaysOnTop(true)
+ popup:setAutoHide(false)
+
+ -- we're shutting down, so prohibit any key presses or holds
+ Framework:addListener(EVENT_ALL_INPUT,
+ function ()
+ return EVENT_CONSUME
+ end,
+ true)
+
+ popup:addTimer(2000, function()
+ log:info("Factory reset...")
+
+ -- touch .factoryreset and reboot
+ io.open("/.factoryreset", "w"):close()
+ os.execute("/bin/busybox reboot -f")
end)
- self:tieAndShowWindow(window)
+ self:tieAndShowWindow(popup)
end
Modified:
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFirmwareUpgrade/SetupFirmwareUpgradeApplet.lua
URL:
http://svn.slimdevices.com/trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFirmwareUpgrade/SetupFirmwareUpgradeApplet.lua?rev=1560&root=Jive&r1=1559&r2=1560&view=diff
==============================================================================
---
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFirmwareUpgrade/SetupFirmwareUpgradeApplet.lua
(original)
+++
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFirmwareUpgrade/SetupFirmwareUpgradeApplet.lua
Tue Jan 22 13:55:56 2008
@@ -36,6 +36,7 @@
local log =
require("jive.utils.log").logger("applets.setup")
local jnt = jnt
+local appletManager = appletManager
local upgradeUrl = upgradeUrl
local EVENT_ACTION = jive.ui.EVENT_ACTION
@@ -50,6 +51,7 @@
local LAYOUT_CENTER = jive.ui.LAYOUT_CENTER
local LAYOUT_NONE = jive.ui.LAYOUT_NONE
+local EVENT_ALL_INPUT = jive.ui.EVENT_ALL_INPUT
local EVENT_KEY_PRESS = jive.ui.EVENT_KEY_PRESS
local EVENT_KEY_HOLD = jive.ui.EVENT_KEY_HOLD
local EVENT_WINDOW_ACTIVE = jive.ui.EVENT_WINDOW_ACTIVE
@@ -229,31 +231,51 @@
return self:_chargeBattery()
end
- local window = Popup("popupIcon")
+ local popup = Popup("popupIcon")
self.icon = Icon("iconConnecting")
- window:addWidget(self.icon)
+ popup:addWidget(self.icon)
self.textarea = Label("text", self:string("UPDATE_DOWNLOAD", ""))
- window:addWidget(self.textarea)
-
- -- no way to exit this window
- -- FIXME add global handler to block all key events
- window:addListener(EVENT_KEY_PRESS,
- function(event)
- return EVENT_CONSUME
- end)
+ popup:addWidget(self.textarea)
+
+ -- make sure this popup remains on screen
+ popup:setAllowScreensaver(false)
+ popup:setAlwaysOnTop(true)
+ popup:setAutoHide(false)
+
+ -- no way to exit this popup
+ self.upgradeListener =
+ Framework:addListener(EVENT_ALL_INPUT,
+ function()
+ Framework.wakeup()
+ return EVENT_CONSUME
+ end,
+ true)
+
+ -- disconnect from SqueezeCenter, we don't want to up
+ -- interrupted during the firmware upgrade.
+ local slimDiscovery = appletManager:loadApplet("SlimDiscovery")
+ slimDiscovery.serversObj:disconnect()
-- start the upgrade
self.upgrade = Upgrade(self.url)
Task("upgrade", self, _t_upgrade, _upgradeFailed):addTask()
- self:tieAndShowWindow(window)
+ self:tieAndShowWindow(popup)
return window
end
function _upgradeFailed(self)
+ -- unblock keys
+ Framework:removeListener(self.upgradeListener)
+ self.upgradeListener = nil
+
+ -- reconnect to server
+ local slimDiscovery = appletManager:loadApplet("SlimDiscovery")
+ slimDiscovery.serversObj:connect()
+
local window = Window("window", self:string("UPDATE_FAILURE"))
local menu = SimpleMenu("menu",
Modified:
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFirmwareUpgrade/Upgrade.lua
URL:
http://svn.slimdevices.com/trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFirmwareUpgrade/Upgrade.lua?rev=1560&root=Jive&r1=1559&r2=1560&view=diff
==============================================================================
---
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFirmwareUpgrade/Upgrade.lua
(original)
+++
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SetupFirmwareUpgrade/Upgrade.lua
Tue Jan 22 13:55:56 2008
@@ -166,7 +166,13 @@
local length = 0
local part = nil
- return function(chunk)
+ return function(chunk, err)
+ if err then
+ log:info("sinkErr=", err)
+ self.sinkErr = err
+ return 0
+ end
+
Task:yield(true)
if type(chunk) == "string" then
@@ -376,6 +382,7 @@
local parsedUrl = url.parse(self.url)
self.downloadBytes = 0
+ self.sinkErr = false
local t, err
if parsedUrl.scheme == "file" then
@@ -396,7 +403,7 @@
Task:yield()
if not t then
- return not err, err
+ return false, err
end
end
@@ -409,12 +416,17 @@
local http = SocketHttp(jnt, uri.host, uri.port, uri.host)
http:fetch(req)
- while not self.downloadClose do
+ while not self.sinkErr and not self.downloadClose do
local totalBytes =
req:t_getResponseHeader("Content-Length")
if totalBytes then
callback(false, "UPDATE_DOWNLOAD",
math.floor((self.downloadBytes / totalBytes) * 100) .. "%")
end
Task:yield(true)
+ end
+
+ if self.sinkErr then
+ log:info("sinkErr=", sinkErr)
+ return false, self.sinkErr
end
return true
Modified:
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
URL:
http://svn.slimdevices.com/trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua?rev=1560&root=Jive&r1=1559&r2=1560&view=diff
==============================================================================
---
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
(original)
+++
trunk/jive/src/pkg/jive_squeezeboxjive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
Tue Jan 22 13:55:56 2008
@@ -35,6 +35,7 @@
local jnt = jnt
local iconbar = iconbar
+local appletManager = appletManager
local EVENT_ACTION = jive.ui.EVENT_ACTION
local EVENT_CONSUME = jive.ui.EVENT_CONSUME
@@ -52,6 +53,7 @@
local EVENT_KEY_DOWN = jive.ui.EVENT_KEY_DOWN
local EVENT_KEY_PRESS = jive.ui.EVENT_KEY_PRESS
local EVENT_KEY_HOLD = jive.ui.EVENT_KEY_HOLD
+local EVENT_ALL_INPUT = jive.ui.EVENT_ALL_INPUT
local EVENT_SCROLL = jive.ui.EVENT_SCROLL
local EVENT_SWITCH = 0x400000 -- XXXX fixme when public
local EVENT_MOTION = 0x800000 -- XXXX fixme when public
@@ -110,6 +112,11 @@
log:warn("Watchdog timer is disabled")
end
+ -- register wakeup function
+ Framework:registerWakeup(function()
+ wakeup(self)
+ end)
+
-- wireless
self.Wireless = Wireless(jnt, "eth0")
@@ -124,7 +131,7 @@
local sw,val = event:getSwitch()
if sw == SW_AC_POWER then
- log:warn("acpower=", val)
+ log:info("acpower=", val)
self.acpower = (val == 0)
self:update()
@@ -245,13 +252,11 @@
-- FIXME schedule updates from server
end
- if( player) then
+ if player then
player.slimServer.comet:request(sink,
player:getId(),
{ 'date' }
)
- else
- log:warn("player is nil")
end
end
@@ -260,8 +265,7 @@
-- matches date format 2007-09-08T20:40:42+00:00
local CCYY, MM, DD, hh, mm, ss, TZ = string.match(date,
"(%d%d%d%d)%-(%d%d)%-(%d%d)T(%d%d):(%d%d):(%d%d)([-+]%d%d:%d%d)")
- log:warn("date=", date)
- log:warn("CCYY=", CCYY, " MM=", MM, " DD=", DD, " hh=", hh, " mm=", mm,
" ss=", ss, " TZ=", TZ)
+ log:info("CCYY=", CCYY, " MM=", MM, " DD=", DD, " hh=", hh, " mm=", mm,
" ss=", ss, " TZ=", TZ)
-- set system date
os.execute("date " .. MM..DD..hh..mm..CCYY.."."..ss)
@@ -397,7 +401,6 @@
local window = Window("window", menuItem.text, squeezeboxjiveTitleStyle)
local level = jiveBSP.ioctl(12) / 2047
- log:warn("level is ", level);
local slider = Slider("slider", 1, 32, level,
function(slider, value, done)
@@ -521,7 +524,7 @@
function setPowerState(self, state)
local settings = self:getSettings()
- log:warn("setPowerState=", state, " acpower=", self.acpower)
+ log:info("setPowerState=", state, " acpower=", self.acpower)
self.powerState = state
-- kill the timer
@@ -591,7 +594,6 @@
end
if interval > 0 then
- log:warn("interval=", interval)
self.powerTimer:setInterval(interval)
self.powerTimer:start()
end
@@ -599,8 +601,6 @@
function lockScreen(self)
- log:warn("lock screen")
-
-- lock
local popup = Popup("popupIcon")
-- FIXME change icon and text
@@ -635,8 +635,6 @@
function unlockScreen(self)
- log:warn("unlock screen")
-
if self.lockedPopup then
-- unlock
Framework:removeListener(self.lockedListener)
@@ -661,6 +659,11 @@
popup:addWidget(Icon("iconBatteryLow"))
popup:addWidget(Label("text", self:string("BATTERY_LOW")))
+ -- make sure this popup remains on screen
+ popup:setAllowScreensaver(false)
+ popup:setAlwaysOnTop(true)
+ popup:setAutoHide(false)
+
self.batteryPopup = popup
popup:addTimer(30000,
@@ -670,11 +673,16 @@
true)
-- consume all key and scroll events
- self.batteryListener= Framework:addListener(EVENT_SCROLL |
EVENT_KEY_DOWN | EVENT_KEY_PRESS,
- function(event)
- return EVENT_CONSUME
- end,
- true)
+ self.batteryListener
+ = Framework:addListener(EVENT_SCROLL | EVENT_KEY_PRESS |
EVENT_KEY_DOWN | EVENT_KEY_HOLD,
+ function(event)
+ -- allow power off
+ if event:getType() ==
EVENT_KEY_HOLD and event:getKeyCode() == KEY_HOME then
+ self:settingsPowerOff()
+ end
+ return EVENT_CONSUME
+ end,
+ true)
-- make sure the display is on
self:setBrightness()
@@ -722,17 +730,26 @@
function settingsPowerOff(self)
+ -- disconnect from SqueezeCenter
+ local slimDiscovery = appletManager:loadApplet("SlimDiscovery")
+ slimDiscovery.serversObj:disconnect()
+
local popup = Popup("popupIcon")
popup:addWidget(Icon("iconPower"))
popup:addWidget(Label("text", self:string("GOODBYE")))
+
+ -- make sure this popup remains on screen
popup:setAllowScreensaver(false)
+ popup:setAlwaysOnTop(true)
+ popup:setAutoHide(false)
-- we're shutting down, so prohibit any key presses or holds
- popup:addListener(EVENT_KEY_PRESS | EVENT_KEY_HOLD,
- function ()
- return EVENT_CONSUME
- end)
+ Framework:addListener(EVENT_ALL_INPUT,
+ function ()
+ return EVENT_CONSUME
+ end,
+ true)
popup:addTimer(4000,
function()
@@ -748,10 +765,11 @@
function _powerOff(self)
- log:warn("POWEROFF")
+ log:info("Poweroff begin")
self:_setBrightness(true, 0, 0,
function()
+ log:info("Poweroff on")
os.execute("/sbin/poweroff")
end)
end
_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins