Author: bklaas
Date: Thu Jul 10 14:14:44 2008
New Revision: 2681

URL: http://svn.slimdevices.com?rev=2681&root=Jive&view=rev
Log:
Bug: 8523
Description: 7.1 specific fixes for POS slideshow app

Modified:
    
7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/SqueezeboxJiveApplet.lua
    
7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/squeezeos-boot.sh
    
7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/startPOS.sh

Modified: 
7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/SqueezeboxJiveApplet.lua
URL: 
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/SqueezeboxJiveApplet.lua?rev=2681&root=Jive&r1=2680&r2=2681&view=diff
==============================================================================
--- 
7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/SqueezeboxJiveApplet.lua
 (original)
+++ 
7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/SqueezeboxJiveApplet.lua
 Thu Jul 10 14:14:44 2008
@@ -41,9 +41,6 @@
 local iconbar                = iconbar
 local appletManager          = appletManager
 
-local EVENT_ACTION           = jive.ui.EVENT_ACTION
-local EVENT_CONSUME          = jive.ui.EVENT_CONSUME
-local EVENT_WINDOW_POP       = jive.ui.EVENT_WINDOW_POP
 local LAYER_FRAME            = jive.ui.LAYER_FRAME
 local LAYER_CONTENT_ON_STAGE = jive.ui.LAYER_CONTENT_ON_STAGE
 
@@ -54,27 +51,11 @@
 local LAYOUT_CENTER          = jive.ui.LAYOUT_CENTER
 local LAYOUT_NONE            = jive.ui.LAYOUT_NONE
 
-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
-local EVENT_WINDOW_PUSH      = jive.ui.EVENT_WINDOW_PUSH
-local EVENT_VISIBLE_ALL      = jive.ui.EVENT_VISIBLE_ALL
-local EVENT_CONSUME          = jive.ui.EVENT_CONSUME
-local EVENT_UNUSED           = jive.ui.EVENT_UNUSED
-
-local KEY_ADD                = jive.ui.KEY_ADD
-local KEY_PLAY               = jive.ui.KEY_PLAY
-local KEY_HOME               = jive.ui.KEY_HOME
-
 local SW_AC_POWER            = 0
 local SW_PHONE_DETECT        = 1
 
 local squeezeboxjiveTitleStyle = 'settingstitle'
-module(...)
+module(..., Framework.constants)
 oo.class(_M, Applet)
 
 
@@ -105,6 +86,30 @@
 
        log:info("uuid=", uuid)
        log:info("mac=", mac)
+
+       if not uuid or string.match(mac, "^00:40:20") then
+               local popup = Popup("errorWindow", 
self:string("INVALID_MAC_TITLE"))
+
+               popup:setAllowScreensaver(false)
+               popup:setAlwaysOnTop(true)
+               popup:setAutoHide(false)
+
+               local text = Textarea("textarea", 
self:string("INVALID_MAC_TEXT"))
+               local menu = SimpleMenu("menu", {
+                       {
+                               text = self:string("INVALID_MAC_CONTINUE"),
+                               sound = "WINDOWHIDE",
+                               callback = function()
+                                                  window:hide()
+                                          end
+                       },
+               })
+
+               popup:addWidget(text)
+               popup:addWidget(menu)
+               popup:show()
+       end
+
 
        jnt:setUUID(uuid, mac)
 
@@ -140,6 +145,11 @@
        -- wireless
        self.wireless = Wireless(jnt, "eth0")
 
+       -- register network active function
+       jnt:registerNetworkActive(function(active)
+               self:_wlanPowerSave(active)
+       end)
+
        iconbar.iconWireless:addTimer(5000,  -- every 5 seconds
                                      function() 
                                              self:update()
@@ -207,6 +217,9 @@
                                      return EVENT_UNUSED
                              end)
 
+-- FIXME for POS slideshow:
+-- In the real SqueezeboxJiveApplet.lua, make this listener a remembered 
listener (self.homeKeyListener or something), then register a service to remove 
the listener
+-- then we don't need to copy a hacked SqueezeboxJiveApplet.lua, just call the 
listener removal service from SlideshowApplet.lua
 --[[
        Framework:addListener(EVENT_KEY_HOLD,
                function(event) 
@@ -255,23 +268,49 @@
 
 
 function notify_playerCurrent(self, player)
+       if not player then
+               return
+       end
+
+       self.player = player
+       self.server = player:getSlimServer()
+       
+       if not self.server then
+               return
+       end
+
+       if self.clockTimer then
+               self.clockTimer:stop()
+       end
+
        local sink = function(chunk, err)
                             if err then
                                     log:warn(err)
                                     return
                             end
 
-                            self:setDate(chunk.data.date)
-
-                            -- FIXME schedule updates from server
-                    end
-
-       if player then
-               player:getSlimServer():request(sink,
-                                       player:getId(),
-                                       { 'date' }
-                               )
-       end
+                             self:setDate(chunk.data.date)
+                    end
+ 
+       -- this is a background request
+       -- FIXME this should be a subscription
+       self.server:request(sink,
+                           player:getId(),
+                           { 'date' }
+                   )
+
+       -- start a recurring timer for synching to SC/SN
+       self.clockTimer = Timer(6000000, -- 1 hour
+               function()
+                       if self.player and self.server then
+                               self.server:request(sink,
+                                                   self.player:getId(),
+                                                   { 'date' }
+                                           )
+                       end
+               end,
+               false)
+       self.clockTimer:start()
 end
 
 
@@ -388,6 +427,10 @@
        self.fadeTimer:start()
 end
 
+function getBrightness(self)
+       local settings = self:getSettings()
+       return settings.brightness
+end
 
 function setBrightness(self, level)
        local settings = self:getSettings()
@@ -515,19 +558,20 @@
 
 -- called to sleep jive
 function sleep(self)
-       if self.powerState == "active" then
+       -- don't sleep or suspend with a popup visible
+       -- e.g. Bug 6641 during a firmware upgrade
+       local topWindow = Framework.windowStack[1]
+       if not topWindow:canActivatePowersave()then
+               self:setPowerState("active")
+
+       elseif self.powerState == "active" then
                self:setPowerState("dimmed")
+
        elseif self.powerState == "locked" then
                self:setPowerState("sleep")
+
        else
-               -- don't sleep or suspend with a popup visible
-               -- e.g. Bug 6641 during a firmware upgrade
-               -- XXXX this needs reviewing
-               local topWindow = Framework.windowStack[1]
-               if oo.instanceof(topWindow, Popup) and not self.lockedPopup then
-                       self:setPowerState("dimmed")
-                       
-               elseif self.powerState == "dimmed" then
+               if self.powerState == "dimmed" then
                        self:setPowerState("sleep")
                elseif self.powerState == "sleep" then
                        self:setPowerState("suspend")
@@ -635,6 +679,9 @@
                end
        end
 
+       -- update wlan power save mode
+       self:_wlanPowerSave()
+
        if interval > 0 then
                self.powerTimer:setInterval(interval)
                self.powerTimer:start()
@@ -653,12 +700,12 @@
        -- FIXME change icon and text
        popup:addWidget(Icon("iconLocked"))
        popup:addWidget(Label("text", self:string("BSP_SCREEN_LOCKED")))
-       popup:addWidget(Textarea("help", self:string("BSP_SCREEN_LOCKED_HELP")))
+       popup:addWidget(Textarea("lockedHelp", 
self:string("BSP_SCREEN_LOCKED_HELP")))
 
        popup:show()
 
        self.lockedPopup = popup
-       self.lockedTimer = Timer(2000,
+       self.lockedTimer = Timer(5000,
                                 function()
                                         self:_setBrightness(true, 0, 0)
                                         self:_setCPUSpeed(false)
@@ -728,12 +775,10 @@
                                        function(event)
                                                Framework.wakeup()
 
-                                               --[[
                                                -- allow power off
                                                if event:getType() == 
EVENT_KEY_HOLD and event:getKeycode() == KEY_HOME then
                                                        self:settingsPowerOff()
                                                end
-                                               --]]
                                                return EVENT_CONSUME
                                        end,
                                        true)
@@ -773,9 +818,14 @@
                        callback = function() window:hide() end
                },
                { 
-                       text = self:string("POWER_DOWN_CONFIRM"),
+                       text = self:string("POWER_DOWN"),
                        sound = "SELECT",
                        callback = function() settingsPowerOff(self) end
+               },      
+               { 
+                       text = self:string("POWER_DOWN_SLEEP"),
+                       sound = "SELECT",
+                       callback = function() settingsSleep(self) end
                }
        }
        menu:setItems(items)
@@ -784,11 +834,36 @@
         return window
 end
 
+function settingsSleep(self)
+       -- disconnect from SqueezeCenter
+       appletManager:callService("disconnectPlayer")
+
+       self.popup = Popup("popupIcon")
+
+       self.popup:addWidget(Icon("iconConnecting"))
+       self.popup:addWidget(Label("text", self:string("SLEEPING")))
+
+       -- make sure this popup remains on screen
+       self.popup:setAllowScreensaver(false)
+       self.popup:setAlwaysOnTop(true)
+       self.popup:setAutoHide(false)
+
+       self.popup:addTimer(10000, 
+               function()
+                       self:_goToSleep()
+               end,
+               true
+       )
+
+       self.popup:show()
+
+       self.popup:playSound("SHUTDOWN")
+end
+
 
 function settingsPowerOff(self)
        -- disconnect from SqueezeCenter
-       local slimDiscovery = appletManager:loadApplet("SlimDiscovery")
-       slimDiscovery.serversObj:disconnect()
+       appletManager:callService("disconnectPlayer")
 
        local popup = Popup("popupIcon")
 
@@ -851,7 +926,7 @@
                                      sleepOptions,
                                      function(obj, selectedIndex)
                                              settings.sleepTimeout = 
sleepOptions[selectedIndex] * 1000
-                                             log:warn("sleepTimeout = ", 
settings.sleepTimeout)
+                                             log:info("sleepTimeout=", 
settings.sleepTimeout)
                                      end,
                                      sleepIndex
                              )
@@ -863,7 +938,7 @@
                                      suspendOptions,
                                      function(obj, selectedIndex)
                                              settings.suspendTimeout = 
suspendOptions[selectedIndex] * 1000
-                                             log:warn("suspendTimeout = ", 
settings.suspendTimeout)
+                                             log:info("suspendTimeout=", 
settings.suspendTimeout)
                                      end,
                                      suspendIndex
                              )
@@ -874,7 +949,7 @@
                                      "checkbox", 
                                      function(obj, isSelected)
                                              settings.suspendEnabled = 
isSelected
-                                             log:warn("suspendEnalbed = ", 
settings.suspendEnabled)
+                                             log:info("suspendEnabled=", 
settings.suspendEnabled)
                                      end,
                                      settings.suspendEnabled
                              )
@@ -885,13 +960,26 @@
                                      "checkbox", 
                                      function(obj, isSelected)
                                              settings.suspendWake = isSelected 
and 30 or nil
-                                             log:warn("suspendWake = ", 
settings.suspendWake)
+                                             log:info("suspendWake=", 
settings.suspendWake)
                                      end,
                                      settings.suspendWake ~= nil
                              )
                },
+               {
+                       text = self:string("WLAN_POWER_SAVE"), 
+                       icon = Checkbox(
+                                     "checkbox", 
+                                     function(obj, isSelected)
+                                             settings.wlanPSEnabled = 
isSelected
+                                             log:info("wlanPSEnabled=", 
settings.wlanPSEnabled)
+                                             self:_wlanPowerSave()
+                                     end,
+                                     settings.wlanPSEnabled
+                             )
+               },
        })
 
+       window:addWidget(Textarea("help", 
self:string("POWER_MANAGEMENT_SETTINGS_HELP")))
        window:addWidget(menu)
 
        window:addListener(EVENT_WINDOW_POP,
@@ -923,6 +1011,41 @@
 end
 
 
+function _wlanPowerSave(self, active)
+       if active ~= nil then
+               -- update the network active state
+               self.networkActive = active
+       end
+
+       local settings = self:getSettings()
+       if not settings.wlanPSEnabled then
+               self.wireless:powerSave(false)
+               return
+       end
+
+       if self._wlanPowerSaveTimer == nil then
+               self._wlanPowerSaveTimer =
+                       Timer(1000,
+                             function()
+                                     self.wireless:powerSave(true)
+                             end,
+                             true)
+       end
+
+       -- disable PS mode when on ac power, or the network and device or
+       -- both active. when battery powered only disable PS mode when the
+       -- user is actively using the device.
+       if self.acpower or (self.networkActive and self.powerState == "active") 
then
+               self.wireless:powerSave(false)
+               self._wlanPowerSaveTimer:stop()
+       else
+               self._wlanPowerSaveTimer:start()
+       end
+
+       self.networkActive = active
+end
+
+
 function _suspendTask(self)
        -- check existing network config
        local status = self.wireless:t_wpaStatus()
@@ -932,12 +1055,6 @@
 
        local settings = self:getSettings()
        local wakeAfter = settings.suspendWake and settings.suspendWake or ""
-
-       local slimDiscovery = appletManager:getAppletInstance("SlimDiscovery")
-       local slimServers
-       if slimDiscovery then
-               slimServers = slimDiscovery.serversObj
-       end
 
        -- start timer to resume this task every second
        self.suspendPopup:addTimer(1000,
@@ -947,22 +1064,19 @@
                        end
                end)
 
-       -- disconnect from all SlimServers
-       if slimServers then
-               local connected
-               repeat
-                       slimServers:disconnect()
-
-                       connected = false
-                       for i,server in slimServers:allServers() do
-                               connected = connected or server:isConnected()
-                               log:info("server=", server:getName(), " 
connected=", connected)
-                       end
-
-                       Task:yield(false)
-               until not connected
-       end
-
+       -- disconnect from all Players/SqueezeCenters
+       local connected
+       repeat
+               appletManager:callService("disconnectPlayer")
+
+               connected = false
+               for i,server in 
appletManager:callService("iterateSqueezeCenters") do
+                       connected = connected or server:isConnected()
+                       log:info("server=", server:getName(), " connected=", 
connected)
+               end
+
+               Task:yield(false)
+       until not connected
 
        -- suspend
        os.execute("/etc/init.d/suspend " .. wakeAfter)
@@ -1040,6 +1154,16 @@
        self.suspendTask:addTask()
 end
 
+function _goToSleep(self)
+       log:info("Sleep begin")
+
+       self:_setBrightness(true, 0, 0)
+
+       -- give the user 10 seconds to put the thing down, otherwise the motion 
detector will just bring it right back out of sleep
+       self.popup:hide()
+       self:setPowerState('suspend')
+
+end
 
 function _powerOff(self)
        log:info("Poweroff begin")

Modified: 
7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/squeezeos-boot.sh
URL: 
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/squeezeos-boot.sh?rev=2681&root=Jive&r1=2680&r2=2681&view=diff
==============================================================================
--- 
7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/squeezeos-boot.sh
 (original)
+++ 
7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/squeezeos-boot.sh
 Thu Jul 10 14:14:44 2008
@@ -1,11 +1,22 @@
 #!/bin/sh
 
 # from 7.1 forward, squeezeos-boot.sh is the boot script name
+
+# if an old Slideshow still exists in /usr/share, get rid of it
+if [ -d /usr/share/jive/applets/Slideshow]; then
 rm -rf /usr/share/jive/applets/Slideshow
+fi
+
+# copy Slideshow applet to squeezeplay subdir
 cp -rf /mnt/mmc/Slideshow /usr/share/jive/applets/.
+# copy popImages to images directory
 cp -rf /mnt/mmc/popImages /usr/share/jive/applets/Slideshow/images
+
+# make sure some default settings in core applets are set how we want them
 cp -f /mnt/mmc/screenSettings.lua 
/usr/share/jive/applets/SqueezeboxJive/settings.lua
 cp -f /mnt/mmc/setupWelcomeSettings.lua 
/usr/share/jive/applets/SetupWelcome/settings.lua
 cp -f /mnt/mmc/screensaverSettings.lua 
/usr/share/jive/applets/ScreenSavers/settings.lua
+
+# FIXME: copy a hacked SqueezeboxJiveApplet until code is in SlideshowApplet 
to remove the home key = power off listener through a service
 cp -f /mnt/mmc/SqueezeboxJiveApplet.lua 
/usr/share/jive/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
 

Modified: 
7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/startPOS.sh
URL: 
http://svn.slimdevices.com/7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/startPOS.sh?rev=2681&root=Jive&r1=2680&r2=2681&view=diff
==============================================================================
--- 
7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/startPOS.sh
 (original)
+++ 
7.1/trunk/squeezeplay/src/squeezeplay_jive/specialProjects/sbcPosSlideshow/startPOS.sh
 Thu Jul 10 14:14:44 2008
@@ -1,11 +1,8 @@
 #!/bin/sh
 
-rm -rf /usr/share/jive/applets/Slideshow
-cp -rf /mnt/mmc/Slideshow /usr/share/jive/applets/.
-cp -rf /mnt/mmc/popImages /usr/share/jive/applets/Slideshow/images
-cp -f /mnt/mmc/screenSettings.lua 
/usr/share/jive/applets/SqueezeboxJive/settings.lua
-cp -f /mnt/mmc/setupWelcomeSettings.lua 
/usr/share/jive/applets/SetupWelcome/settings.lua
-cp -f /mnt/mmc/screensaverSettings.lua 
/usr/share/jive/applets/ScreenSavers/settings.lua
-cp -f /mnt/mmc/SqueezeboxJiveApplet.lua 
/usr/share/jive/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
+# from 7.1 forward, squeezeos-boot.sh is the boot script name
+
+# startPos.sh should execute squeezeos-boot.sh, then start jive
+/mnt/mmc/squeezeos-boot.sh
 /usr/bin/jive &
 

_______________________________________________
Jive-checkins mailing list
[email protected]
http://lists.slimdevices.com/cgi-bin/mailman/listinfo/jive-checkins

Reply via email to