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