Author: titmuss
Date: Thu Mar 27 15:43:28 2008
New Revision: 2149

URL: http://svn.slimdevices.com?rev=2149&root=Jive&view=rev
Log:
Bug: 7196 (and maybe others)
Description:
Let the application actively manage the wlan power saving mode. While on ac 
power or 
active with active http sessions the wlan power saving is turned off. This 
makes browsing 
albums, etc. much more responsive and may fix some connection problems with 
some routers.


Modified:
    trunk/squeezeplay/src/squeezeplay/share/jive/net/NetworkThread.lua
    trunk/squeezeplay/src/squeezeplay/share/jive/net/Socket.lua
    trunk/squeezeplay/src/squeezeplay/share/jive/net/SocketHttp.lua
    
trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
    trunk/squeezeplay/src/squeezeplay_jive/share/jive/net/Wireless.lua

Modified: trunk/squeezeplay/src/squeezeplay/share/jive/net/NetworkThread.lua
URL: 
http://svn.slimdevices.com/trunk/squeezeplay/src/squeezeplay/share/jive/net/NetworkThread.lua?rev=2149&root=Jive&r1=2148&r2=2149&view=diff
==============================================================================
--- trunk/squeezeplay/src/squeezeplay/share/jive/net/NetworkThread.lua 
(original)
+++ trunk/squeezeplay/src/squeezeplay/share/jive/net/NetworkThread.lua Thu Mar 
27 15:43:28 2008
@@ -255,6 +255,37 @@
 end
 
 
+-- Called by the network layer when the network is active
+function networkActive(self)
+       if self.activeCount == 0 then
+               if self.activeCallback then
+                       self.activeCallback(true)
+               end
+       end
+
+       self.activeCount = self.activeCount + 1
+end
+
+
+-- Called by the network layer when the network is inactive
+function networkInactive(self)
+       self.activeCount = self.activeCount - 1
+
+       if self.activeCount == 0 then
+               if self.activeCallback then
+                       self.activeCallback(false)
+               end
+       end
+end
+
+
+-- Register a network active callback for power management
+function registerNetworkActive(self, callback)
+       self.activeCallback = callback
+end
+
+
+
 --[[
 
 =head2 getUUID()
@@ -311,6 +342,8 @@
 
                -- list of objects for notify
                subscribers = {},
+
+               activeCount = 0,
        })
 
        -- create dns resolver

Modified: trunk/squeezeplay/src/squeezeplay/share/jive/net/Socket.lua
URL: 
http://svn.slimdevices.com/trunk/squeezeplay/src/squeezeplay/share/jive/net/Socket.lua?rev=2149&root=Jive&r1=2148&r2=2149&view=diff
==============================================================================
--- trunk/squeezeplay/src/squeezeplay/share/jive/net/Socket.lua (original)
+++ trunk/squeezeplay/src/squeezeplay/share/jive/net/Socket.lua Thu Mar 27 
15:43:28 2008
@@ -95,6 +95,8 @@
                self:t_removeWrite()
                self.t_sock:close()
                self.t_sock = nil
+
+               self:socketInactive()
        end
 end
 
@@ -109,6 +111,23 @@
 function setPriority(self, priority)
        self.priority = priority
 end
+
+
+function socketActive(self)
+       if not self.active then
+               self.active = true
+               self.jnt:networkActive()
+       end
+end
+
+
+function socketInactive(self)
+       if self.active then
+               self.active = false
+               self.jnt:networkInactive()
+       end
+end
+
 
 
 --[[

Modified: trunk/squeezeplay/src/squeezeplay/share/jive/net/SocketHttp.lua
URL: 
http://svn.slimdevices.com/trunk/squeezeplay/src/squeezeplay/share/jive/net/SocketHttp.lua?rev=2149&root=Jive&r1=2148&r2=2149&view=diff
==============================================================================
--- trunk/squeezeplay/src/squeezeplay/share/jive/net/SocketHttp.lua (original)
+++ trunk/squeezeplay/src/squeezeplay/share/jive/net/SocketHttp.lua Thu Mar 27 
15:43:28 2008
@@ -348,6 +348,8 @@
                self:t_nextSendState(true, 't_sendComplete')
        end
 
+       self:socketActive()
+
        self:t_addWrite(pump, SOCKET_CONNECT_TIMEOUT)
 end
 
@@ -722,7 +724,10 @@
        if self.t_httpRecvRequest:t_getResponseHeader('Transfer-Encoding') == 
'chunked' then
        
                mode = 'jive-http-chunked'
-               
+
+               -- don't count the chunked connections as active, these are
+               -- long term connections used for server push
+               self:socketInactive()
        else
                        
                if self.t_httpRecvRequest:t_getResponseHeader("Content-Length") 
then
@@ -788,6 +793,8 @@
 
 
 function t_recvComplete(self)
+       self:socketInactive()
+
        self.t_httpRecvRequest = nil
        self:t_nextRecvState(true, 't_recvDequeue')
 end

Modified: 
trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
URL: 
http://svn.slimdevices.com/trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua?rev=2149&root=Jive&r1=2148&r2=2149&view=diff
==============================================================================
--- 
trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
 (original)
+++ 
trunk/squeezeplay/src/squeezeplay_jive/share/applets/SqueezeboxJive/SqueezeboxJiveApplet.lua
 Thu Mar 27 15:43:28 2008
@@ -163,6 +163,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() 
@@ -656,6 +661,9 @@
                        end
                end
        end
+
+       -- update wlan power save mode
+       self:_wlanPowerSave()
 
        if interval > 0 then
                self.powerTimer:setInterval(interval)
@@ -943,6 +951,35 @@
 end
 
 
+function _wlanPowerSave(self, active)
+       if active ~= nil then
+               -- update the network active state
+               self.networkActive = active
+       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()

Modified: trunk/squeezeplay/src/squeezeplay_jive/share/jive/net/Wireless.lua
URL: 
http://svn.slimdevices.com/trunk/squeezeplay/src/squeezeplay_jive/share/jive/net/Wireless.lua?rev=2149&root=Jive&r1=2148&r2=2149&view=diff
==============================================================================
--- trunk/squeezeplay/src/squeezeplay_jive/share/jive/net/Wireless.lua 
(original)
+++ trunk/squeezeplay/src/squeezeplay_jive/share/jive/net/Wireless.lua Thu Mar 
27 15:43:28 2008
@@ -533,6 +533,22 @@
        f:close()
 
        return string.match(t, "Bit Rate:(%d+%s[^%s]+)")
+end
+
+
+function powerSave(self, enable)
+       if self._powerSaveState == enable then
+               return
+       end
+
+       self._powerSaveState = enable
+       if enable then
+               log:info("iwconfig power on")
+               os.execute("/usr/sbin/iwconfig eth0 power on")
+       else
+               log:info("iwconfig power off")
+               os.execute("/usr/sbin/iwconfig eth0 power off")
+       end
 end
 
 

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

Reply via email to