Author: bklaas
Date: Tue Aug  3 12:39:46 2010
New Revision: 9014

URL: http://svn.slimdevices.com/jive?rev=9014&view=rev
Log:
 r40...@daddymac-520 (orig r9003):  fmueller | 2010-07-30 06:22:18 -0500
 Bug: 16408 
 Description: Diagnostics applet modifications and bug fixes
 - Put items belonging together into sub-menus 
 - Fixed silly values if no battery is installed (bug 15453)
 - Integrated Network Health option (Network Health and Network Repair)
 
 r40...@daddymac-520 (orig r9004):  fmueller | 2010-07-30 09:04:06 -0500
 Bug: 16279 
 Description: Make sure the change how msp430 is initialized is picked up when 
building locally. Else you can end up with a Baby where msp430 is not 
initialized / programmed at all. 
 
 r40...@daddymac-520 (orig r9005):  fmueller | 2010-07-30 09:44:49 -0500
 Bug: 16411 
 Description: Fix missing parameter for help text. 
 
 r40...@daddymac-520 (orig r9006):  bklaas | 2010-07-30 11:44:40 -0500
 Bug: n/a
 Description: support for a jive.ui.HomeMenu driven My Apps menu
 uses an isApp flag to decide if the home menu item is an app, and builds the 
items into the MyApps node accordingly
 
 requires 7.6 r31139 server checkin to have the CM add/remove/reorder functions 
work.
 
 r40...@daddymac-520 (orig r9007):  bklaas | 2010-08-02 14:53:11 -0500
 Bug: 16427
 Description: comment out code block that creates new MyApps node and items 
until all apps are included in this menu
 
 r40...@daddymac-520 (orig r9013):  bklaas | 2010-08-03 14:39:24 -0500
  r40...@daddymac-520 (orig r9008):  vferey | 2010-08-02 16:51:26 -0500
  Increased the revision of the file for the private builds.
  
  r40...@daddymac-520 (orig r9009):  vferey | 2010-08-02 17:00:47 -0500
  Increased the revision of the file for the private builds.
  
 

Modified:
    7.6/branches/new-setup/   (props changed)
    
7.6/branches/new-setup/squeezeos/poky/meta-squeezeos/packages/base-files/squeezeos-base-files_1.0.bb
    
7.6/branches/new-setup/squeezeos/poky/meta-squeezeos/packages/linux/linux-imx25_svn.bb
    
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuApplet.lua
    
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/QVGAbaseSkin/QVGAbaseSkinApplet.lua
    
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SetupSqueezebox/SetupSqueezeboxApplet.lua
    
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SlimMenus/SlimMenusApplet.lua
    
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SlimMenus/strings.txt
    
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/WQVGAsmallSkin/WQVGAsmallSkinApplet.lua
    
7.6/branches/new-setup/squeezeplay/src/squeezeplay_squeezeos/share/applets/Diagnostics/DiagnosticsApplet.lua
    
7.6/branches/new-setup/squeezeplay/src/squeezeplay_squeezeos/share/applets/Diagnostics/strings.txt

Propchange: 7.6/branches/new-setup/
------------------------------------------------------------------------------
--- svk:merge (original)
+++ svk:merge Tue Aug  3 12:39:46 2010
@@ -13,8 +13,8 @@
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.4/private-branches/fab4-skin:4552
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.4/private-branches/new-alsa:6567
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.4/trunk:8423
-bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.5/trunk:8996
-bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.6/trunk:9000
+bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.5/trunk:9009
+bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/7.6/trunk:9013
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/7.0:2013
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/SN:1083
 bbe22326-0783-4b3a-ac2b-7ab96b24c8d9:/branches/scrolling:1378

Modified: 
7.6/branches/new-setup/squeezeos/poky/meta-squeezeos/packages/base-files/squeezeos-base-files_1.0.bb
URL: 
http://svn.slimdevices.com/jive/7.6/branches/new-setup/squeezeos/poky/meta-squeezeos/packages/base-files/squeezeos-base-files_1.0.bb?rev=9014&r1=9013&r2=9014&view=diff
==============================================================================
--- 
7.6/branches/new-setup/squeezeos/poky/meta-squeezeos/packages/base-files/squeezeos-base-files_1.0.bb
 (original)
+++ 
7.6/branches/new-setup/squeezeos/poky/meta-squeezeos/packages/base-files/squeezeos-base-files_1.0.bb
 Tue Aug  3 12:39:46 2010
@@ -3,7 +3,7 @@
 PRIORITY = "required"
 LICENSE = "GPL"
 
-PR = "r119"
+PR = "r120"
 
 SRC_URI = " \
        file://asound.conf \

Modified: 
7.6/branches/new-setup/squeezeos/poky/meta-squeezeos/packages/linux/linux-imx25_svn.bb
URL: 
http://svn.slimdevices.com/jive/7.6/branches/new-setup/squeezeos/poky/meta-squeezeos/packages/linux/linux-imx25_svn.bb?rev=9014&r1=9013&r2=9014&view=diff
==============================================================================
--- 
7.6/branches/new-setup/squeezeos/poky/meta-squeezeos/packages/linux/linux-imx25_svn.bb
 (original)
+++ 
7.6/branches/new-setup/squeezeos/poky/meta-squeezeos/packages/linux/linux-imx25_svn.bb
 Tue Aug  3 12:39:46 2010
@@ -5,7 +5,7 @@
 LINUX_ARCH = imx25
 LINUX_VERSION = "2.6.26"
 PV = "${LINUX_VERSION}+${DISTRO_VERSION}+svnr${SRCREV}"
-PR = "r7"
+PR = "r8"
 
 
 inherit kernel

Modified: 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuApplet.lua
URL: 
http://svn.slimdevices.com/jive/7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuApplet.lua?rev=9014&r1=9013&r2=9014&view=diff
==============================================================================
--- 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuApplet.lua
 (original)
+++ 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/CustomizeHomeMenu/CustomizeHomeMenuApplet.lua
 Tue Aug  3 12:39:46 2010
@@ -179,6 +179,26 @@
 
        local settings = self:getSettings()
 
+       -- theItem is either the special custom home item for an app
+       -- use theItem instead of item for the add/remove to home actions
+       -- use item for the reordering actions
+       local theItem = item
+       local customHomeItem = nil
+       local hiddenCustomHomeItem = nil
+       if item.node ~= 'home' then
+               local id = 'hm_' .. item.id
+               customHomeItem = jiveMain:getNodeItemById(id, 'home')
+               if not customHomeItem then
+                       customHomeItem = jiveMain:getNodeItemById(id, 'hidden')
+                       if customHomeItem then
+                               hiddenCustomHomeItem = true
+                       end
+               end
+       end
+       if customHomeItem then
+               theItem = customHomeItem
+       end
+
        if item.noCustom and item.node == 'home' then
                menu:addItem({
                        text = self:string('ITEM_CANNOT_BE_HIDDEN'),
@@ -187,24 +207,24 @@
                                return EVENT_CONSUME
                        end
                })
-       elseif item.node == 'home' or settings[item.id] == 'home' then
+       elseif item.node == 'home' or settings[item.id] == 'home' or 
(customHomeItem and not hiddenCustomHomeItem) then
                        menu:addItem({
                                text = self:string('REMOVE_FROM_HOME'),
                                callback = function()
-                                       if item.node == 'home' then
+                                       if theItem.node == 'home' then
                                                
                                                self:_timedExec(
                                                        function()
-                                                               
jiveMain:setNode(item, 'hidden')
-                                                               
self:getSettings()[item.id] = 'hidden'
+                                                               
jiveMain:setNode(theItem, 'hidden')
+                                                               
self:getSettings()[theItem.id] = 'hidden'
                                                        end
                                                )
                                
                                        else
                                                self:_timedExec(
                                                        function()
-                                                               
self:getSettings()[item.id] = nil
-                                                               
jiveMain:removeItemFromNode(item, 'home')
+                                                               
self:getSettings()[theItem.id] = nil
+                                                               
jiveMain:removeItemFromNode(theItem, 'home')
                                                        end
                                                )
 
@@ -218,8 +238,8 @@
                menu:addItem({
                        text = self:string('ADD_TO_HOME'),
                        callback = function()
-                               self:getSettings()[item.id] = 'home'
-                               local homeItem = jiveMain:addItemToNode(item, 
'home')
+                               self:getSettings()[theItem.id] = 'home'
+                               local homeItem = 
jiveMain:addItemToNode(theItem, 'home')
                                jiveMain:itemToBottom(homeItem, 'home')
                                window:hide()
                                self:_storeSettings('home')
@@ -228,7 +248,7 @@
                                        function()
                                                
appletManager:callService("goHome")
                                                local menu = 
jiveMain:getNodeMenu('home')
-                                               local restoredItemIdx = 
menu:getIdIndex(item.id)
+                                               local restoredItemIdx = 
menu:getIdIndex(theItem.id)
                                                
menu:setSelectedIndex(restoredItemIdx)
                                        end
                                )
@@ -247,7 +267,6 @@
        -- e.g. move to top when already at top
        local nodeMenu = jiveMain:getNodeMenu(node)
        local itemIdx  = nodeMenu:getIdIndex(item.id)
-
        if itemIdx > 1 then
                menu:addItem({
                        text = self:string("MOVE_TO_TOP"),
@@ -317,6 +336,7 @@
        window:show(Window.transitionFadeIn)
        return
 end
+
 
 -- many of the UI functions of repositioning items work better 
 -- if there's a small delay before execution so the user sees them happening

Modified: 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/QVGAbaseSkin/QVGAbaseSkinApplet.lua
URL: 
http://svn.slimdevices.com/jive/7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/QVGAbaseSkin/QVGAbaseSkinApplet.lua?rev=9014&r1=9013&r2=9014&view=diff
==============================================================================
--- 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/QVGAbaseSkin/QVGAbaseSkinApplet.lua
 (original)
+++ 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/QVGAbaseSkin/QVGAbaseSkinApplet.lua
 Tue Aug  3 12:39:46 2010
@@ -2091,6 +2091,9 @@
        s.hm_radios = _uses(s._buttonicon, {
                img = _loadImage(self, "IconsResized/icon_internet_radio" .. 
skinSuffix),
        })
+       s.hm_myApps = _uses(s._buttonicon, {
+               img = _loadImage(self, "IconsResized/icon_my_apps" .. 
skinSuffix),
+       })
        s.hm_myMusic = _uses(s._buttonicon, {
                img = _loadImage(self, "IconsResized/icon_mymusic" .. 
skinSuffix),
        })

Modified: 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SetupSqueezebox/SetupSqueezeboxApplet.lua
URL: 
http://svn.slimdevices.com/jive/7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SetupSqueezebox/SetupSqueezeboxApplet.lua?rev=9014&r1=9013&r2=9014&view=diff
==============================================================================
--- 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SetupSqueezebox/SetupSqueezeboxApplet.lua
 (original)
+++ 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SetupSqueezebox/SetupSqueezeboxApplet.lua
 Tue Aug  3 12:39:46 2010
@@ -1394,7 +1394,7 @@
                                })
 
 
-       local helpText = self:string("SQUEEZEBOX_PROBLEM_HELP")
+       local helpText = self:string("SQUEEZEBOX_PROBLEM_HELP", 
self.networkSSID)
        if self.interface == 'wired' then
                helpText = self:string("SQUEEZEBOX_ETHERNET_PROBLEM_HELP")
        end

Modified: 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SlimMenus/SlimMenusApplet.lua
URL: 
http://svn.slimdevices.com/jive/7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SlimMenus/SlimMenusApplet.lua?rev=9014&r1=9013&r2=9014&view=diff
==============================================================================
--- 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SlimMenus/SlimMenusApplet.lua
 (original)
+++ 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SlimMenus/SlimMenusApplet.lua
 Tue Aug  3 12:39:46 2010
@@ -1,6 +1,6 @@
 
 -- stuff we use
-local tostring, tonumber, type, sort = tostring, tonumber, type, sort
+local tostring, tonumber, type, sort, setmetatable = tostring, tonumber, type, 
sort, setmetatable
 local pairs, ipairs, select, _assert = pairs, ipairs, select, _assert
 
 local oo                     = require("loop.simple")
@@ -110,6 +110,23 @@
        return res
 end
 
+-- defines a new item that inherits from an existing item
+local function _uses(parent, value)
+        local item = {}
+        setmetatable(item, { __index = parent })
+
+        for k,v in pairs(value or {}) do
+                if type(v) == "table" and type(parent[k]) == "table" then
+                -- recursively inherrit from parent item
+                        item[k] = _uses(parent[k], v)
+                else
+                        item[k] = v
+                end
+        end
+
+        return item
+end
+
 
 function init(self)
        jnt:subscribe(self)
@@ -317,15 +334,21 @@
        end
 end
 --add item to home menu only if this is for the current server or it doesn't 
exist. Only current server responses may replace existing items.
-function  _addItem(self, item, isCurrentServer)
+function  _addItem(self, item, isCurrentServer, addToHome)
        if isCurrentServer or not _playerMenus[item.id] then
                 _playerMenus[item.id] = item
                 jiveMain:addItem(item)
+               if addToHome then
+                       local customHomeItem = _uses(item, {
+                               id = 'hm_' .. item.id,
+                               node = 'home',
+                       })
+                       jiveMain:addItem(customHomeItem)
+               end
        else
                log:debug("item already present: ", item.id)
        end
 end
-
 
 --register remote ss only if it doesn't exist. Only current server responses 
may replace existing items.
 function  _registerRemoteScreensaver(self, serverData)
@@ -394,6 +417,16 @@
        return appType
 end
 
+
+function _addMyAppsNode(self)
+       jiveMain:addNode( { id = 'myApps', iconStyle = 'hm_myApps', node = 
'home', text = self:string('MENUS_MY_APPS'), weight = 30  } )
+       -- remove the old style My Apps item, if it exists
+       jiveMain:removeItemById('opmlmyapps')
+       self.myAppsNode = true
+       return
+end
+
+
 -- _menuSink
 -- returns a sink with a closure to self
 -- cmd is passed in so we know what process function to call
@@ -442,9 +475,11 @@
 
                for k, v in pairs(menuItems) do
 
+                       local addAppToHome = false
                        local item = {
                                        id = v.id,
                                        node = v.node,
+                                       isApp = v.isApp,
                                        style = v.style,
                                        text = v.text,
                                        homeMenuText = v.homeMenuText,
@@ -452,7 +487,19 @@
                                        window = v.window,
                                        sound = "WINDOWSHOW",
                                        screensavers = v.screensavers
-                               }
+                       }
+
+                       --[[ FIXME: This block is commented out until all apps 
show up under this new myapps model (e.g., podcast player)
+                       if item.isApp == 1 then
+                               if not self.myAppsNode then
+                                       self:_addMyAppsNode()
+                               end
+                               if item.node == 'home' then
+                                       addAppToHome = true
+                               end
+                               item.node = 'myApps'
+                       end
+                       --]]
 
                        local itemIcon
                        if v.window then
@@ -529,6 +576,8 @@
 
                        if not item.id then
                                log:info("no id for menu item: ", item.text)
+                       elseif item.id == 'opmlmyapps' and self.myAppsNode then
+                               --ignore, if self.myAppsNode is set that means 
we're delivering My Apps via a node and opml home menu items
                        elseif item.id == "playerpower" and 
System:hasSoftPower() and System:getMachine() ~= 'squeezeplay' then
                                --ignore, playerpower no longer shown to users 
since we use power button, unless this is a device without a power button
                        elseif item.id == "settingsPIN" then
@@ -584,7 +633,7 @@
                                item.removeOnServerChange = true
 
                                --add the item to the menu
-                               self:_addItem(item, isCurrentServer)
+                               self:_addItem(item, isCurrentServer, 
addAppToHome)
 
                        else
                                local actionInternal = function (noLocking)
@@ -705,7 +754,8 @@
                                                end
                                        end
                                end
-                               self:_addItem(item, isCurrentServer)
+
+                               self:_addItem(item, isCurrentServer, 
addAppToHome)
                        end
                end
 

Modified: 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SlimMenus/strings.txt
URL: 
http://svn.slimdevices.com/jive/7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SlimMenus/strings.txt?rev=9014&r1=9013&r2=9014&view=diff
==============================================================================
--- 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SlimMenus/strings.txt
 (original)
+++ 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/SlimMenus/strings.txt
 Tue Aug  3 12:39:46 2010
@@ -17,6 +17,21 @@
        RU      Моя музыка
        SV      Min musik
 
+MENUS_MY_APPS
+       CS      Moje aplikace
+       DA      Mine programmer
+       DE      Eigene Anwendungen
+       EN      My Apps
+       ES      Mis aplicaciones
+       FI      Omat sovellukset
+       FR      Mes applications
+       IT      Applicazioni
+       NL      Mijn toepassingen
+       NO      Mine tjenester
+       PL      Moje aplikacje
+       RU      Мои приложения
+       SV      Mina program
+
 MENUS_INTERNET_RADIO
        CS      Internetové rádio
        DA      Internetradio

Modified: 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/WQVGAsmallSkin/WQVGAsmallSkinApplet.lua
URL: 
http://svn.slimdevices.com/jive/7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/WQVGAsmallSkin/WQVGAsmallSkinApplet.lua?rev=9014&r1=9013&r2=9014&view=diff
==============================================================================
--- 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/WQVGAsmallSkin/WQVGAsmallSkinApplet.lua
 (original)
+++ 
7.6/branches/new-setup/squeezeplay/src/squeezeplay/share/applets/WQVGAsmallSkin/WQVGAsmallSkinApplet.lua
 Tue Aug  3 12:39:46 2010
@@ -2634,6 +2634,9 @@
        })
        s.hm_radios = _uses(_buttonicon, {
                img = _loadImage(self, "IconsResized/icon_internet_radio" .. 
skinSuffix),
+       })
+       s.hm_myApps = _uses(_buttonicon, {
+               img = _loadImage(self, "IconsResized/icon_my_apps" .. 
skinSuffix),
        })
        s.hm_myMusic = _uses(_buttonicon, {
                img = _loadImage(self, "IconsResized/icon_mymusic" .. 
skinSuffix),

Modified: 
7.6/branches/new-setup/squeezeplay/src/squeezeplay_squeezeos/share/applets/Diagnostics/DiagnosticsApplet.lua
URL: 
http://svn.slimdevices.com/jive/7.6/branches/new-setup/squeezeplay/src/squeezeplay_squeezeos/share/applets/Diagnostics/DiagnosticsApplet.lua?rev=9014&r1=9013&r2=9014&view=diff
==============================================================================
--- 
7.6/branches/new-setup/squeezeplay/src/squeezeplay_squeezeos/share/applets/Diagnostics/DiagnosticsApplet.lua
 (original)
+++ 
7.6/branches/new-setup/squeezeplay/src/squeezeplay_squeezeos/share/applets/Diagnostics/DiagnosticsApplet.lua
 Tue Aug  3 12:39:46 2010
@@ -1,5 +1,8 @@
 
 local ipairs, tostring, tonumber = ipairs, tostring, tonumber
+
+-- NETWORK HEALTH STUFF
+local type, pairs, setmetatable = type, pairs, setmetatable
 
 -- stuff we use
 local oo               = require("loop.simple")
@@ -7,7 +10,6 @@
 local math             = require("math")
 local string           = require("string")
 local table            = require("jive.utils.table")
-local lfs              = require("lfs")
 
 local Applet           = require("jive.Applet")
 local System           = require("jive.System")
@@ -24,8 +26,11 @@
 local Textarea         = require("jive.ui.Textarea")
 local Window           = require("jive.ui.Window")
 
-local debug            = require("jive.utils.debug")
-
+-- NETWORK HEALTH STUFF
+local Popup                  = require("jive.ui.Popup")
+local Icon                   = require("jive.ui.Icon")
+local Tile                   = require("jive.ui.Tile")
+local jive = jive
 
 local jnt = jnt
 local appletManager    = appletManager
@@ -36,19 +41,36 @@
 oo.class(_M, Applet)
 
 
-local tests = {
+local generalTests = {
       "FIRMWARE_VERSION",
       "HARDWARE_VERSION",
       "MAC_ADDRESS",
+      "CURRENT_PLAYER",
+      "PLAYER_TYPE",
+      "UPTIME",
+      "MEMORY",
+}
+
+local wirelessTests = {
       "WLAN_SSID",
       "WLAN_ENCRYPTION",
       "WLAN_STRENGTH",
       -- (for testing): "WLAN_SNR",
+      "IP_ADDRESS",
+      "SUBNET_MASK",
+      "GATEWAY",
+      "DNS_SERVER",
+}
+
+local ethernetTests = {
       "ETH_CONNECTION",
       "IP_ADDRESS",
       "SUBNET_MASK",
       "GATEWAY",
       "DNS_SERVER",
+}
+
+local serverTests = {
       "SN_ADDRESS",
       "SN_PING",
       "SN_PORT_3483",
@@ -59,21 +81,17 @@
       "SC_PING",
       "SC_PORT_3483",
       "SC_PORT_9000",
-      "CURRENT_PLAYER",
-      "PLAYER_TYPE",
-      "UPTIME",
-      "MEMORY",
 }
 
 local powerTests = {
       "MSP_VERSION",
+      "POWER_MODE",
+      "WALL_VOLTAGE",
+      "CHARGE_STATE",
+      "BATTERY_TEMPERATURE",
       "BATTERY_VOLTAGE",
       "BATTERY_VMON1",
       "BATTERY_VMON2",
-      "WALL_VOLTAGE",
-      "BATTERY_TEMPERATURE",
-      "POWER_MODE",
-      "CHARGE_STATE",
 }
 
 local powerMode = {
@@ -91,6 +109,7 @@
          ["24"] = "BATT_CHARGING_PAUSED",
 }
 
+
 function setValue(self, key, value, customLabel)
        if not value then
                value = '-'
@@ -98,18 +117,10 @@
 
        -- if we have customLabelArgs, we want to insert those first to the 
string args
        if customLabel then
-               self.diagMenu:setText(self.labels[key], self:string(key, 
tostring(customLabel), value))
+               self.menu:setText(self.labels[key], self:string(key, 
tostring(customLabel), value))
        else
-               self.diagMenu:setText(self.labels[key], self:string(key, value))
-       end
-end
-
-
-function setPowerValue(self, key, value)
-       if not value then
-               value = '-'
-       end
-       self.powerDiagMenu:setText(self.labels[key], self:string(key, value))
+               self.menu:setText(self.labels[key], self:string(key, value))
+       end
 end
 
 
@@ -333,6 +344,7 @@
        self:setValue("MEMORY", memory)
 end
 
+
 function _getSysValue(self, param)
 
        local f = io.open("/sys/bus/i2c/devices/1-0010/" .. param)
@@ -343,6 +355,7 @@
        return value
 end
 
+
 function _getPowerSysValue(self, param)
 
        local f = io.open("/sys/devices/platform/i2c-adapter:i2c-1/1-0010/" .. 
param)
@@ -354,27 +367,61 @@
        return value
 end
 
-function dovalues(self, menu)
+
+-- DO VALUES
+
+function doGeneralValues(self, menu)
+       self.menu = menu
+
        local machine, revision = System:getMachine();
 
-       -- fixed values
        self:setValue("FIRMWARE_VERSION", JIVE_VERSION)
        if revision then
                self:setValue("HARDWARE_VERSION", tostring(revision))
        end
        self:setValue("MAC_ADDRESS", System:getMacAddress())
 
-       -- networks
+       self:systemStatus()
+
+       local currentPlayer = appletManager:callService("getCurrentPlayer")
+       if currentPlayer then
+               self:setValue("CURRENT_PLAYER", currentPlayer:getName())
+               if currentPlayer:isLocal() then
+                       self:setValue("PLAYER_TYPE", 
tostring(self:string("DIAGNOSTICS_LOCAL")))
+               else
+                       self:setValue("PLAYER_TYPE", 
tostring(self:string("DIAGNOSTICS_REMOTE")))
+               end
+       else
+               self:setValue("CURRENT_PLAYER", 
tostring(self:string("DIAGNOSTICS_NONE")))
+               self:setValue("PLAYER_TYPE", "")
+
+       end
+end
+
+
+function doWirelessValues(self, menu)
+       self.menu = menu
+
        local wlanIface = Networking:wirelessInterface(jnt)
+
+       self:wlanStatus(wlanIface)
+end
+
+
+function doEthernetValues(self, menu)
+       self.menu = menu
+
        local ethIface = Networking:wiredInterface(jnt)
 
-       self:wlanStatus(wlanIface)
        if System:hasWiredNetworking() then
                self:ethStatus(ethIface)
        end
-
-
-       -- servers
+end
+
+
+function doServerValues(self, menu)
+       self.menu = menu
+
        local sn = false
        for name, server in SlimServer:iterate() do
                if server:isSqueezeNetwork() then
@@ -383,7 +430,6 @@
        end
 
        local sc = SlimServer:getCurrentServer()
-
 
        self:serverPing(sn, "SN_ADDRESS", "SN_PING", "SN_REG")
        self:serverPort(sn, 3483, "SN_PORT_3483")
@@ -403,39 +449,178 @@
                local ip, port = sc:getIpPort()
                self:serverPort(sc, port, "SC_PORT_9000", port)
        end
-
-
-       local currentPlayer = appletManager:callService("getCurrentPlayer")
-       if currentPlayer then
-               self:setValue("CURRENT_PLAYER", currentPlayer:getName())
-               if currentPlayer:isLocal() then
-                       self:setValue("PLAYER_TYPE", 
tostring(self:string("DIAGNOSTICS_LOCAL")))
+end
+
+
+function roundNumber(num, idp)
+       return tonumber(string.format("%." .. (idp or 0) .. "f", num))
+end
+
+
+function doPowerValues(self, menu)
+       self.menu = menu
+
+       self:setValue("MSP_VERSION", self:_getSysValue("fw"))
+
+       local mode = self:_getPowerSysValue("power_mode"):gsub("^%s*(.-)%s*$", 
"%1")
+       self:setValue("POWER_MODE", tostring(self:string(powerMode[mode])))
+
+       -- Battery only
+       if mode == "5" then
+               self:setValue("WALL_VOLTAGE", "-")
+       -- AC (maybe Battery)
+       else
+               local wallVoltage = 
roundNumber(self:_getPowerSysValue("wall_voltage") / 1000.0, 1)
+               self:setValue("WALL_VOLTAGE", tostring(wallVoltage .. " V"))
+       end
+
+       local mode = 
self:_getPowerSysValue("charger_state"):gsub("^%s*(.-)%s*$", "%1")
+       self:setValue("CHARGE_STATE", tostring(self:string(chargerState[mode])))
+
+       -- No battery installed
+       if mode == "1" then
+               self:setValue("BATTERY_TEMPERATURE", "-")
+               self:setValue("BATTERY_VOLTAGE", "-")
+               self:setValue("BATTERY_VMON1", "-")
+               self:setValue("BATTERY_VMON2", "-")
+
+       -- Battery installed
+       else
+               local batteryTemperature = 
roundNumber(self:_getPowerSysValue("battery_temperature") / 32.0, 1)
+               local batteryVoltage = 
roundNumber(self:_getPowerSysValue("battery_voltage") / 1000.0, 1)
+               local batteryMonitor1 = 
roundNumber(self:_getPowerSysValue("battery_vmon1_voltage") / 1000.0, 1)
+               local batteryMonitor2 = 
roundNumber(self:_getPowerSysValue("battery_vmon2_voltage") / 1000.0, 1)
+
+               self:setValue("BATTERY_TEMPERATURE", 
tostring(batteryTemperature) .. " C")
+               self:setValue("BATTERY_VOLTAGE", tostring(batteryVoltage) .. " 
V")
+               self:setValue("BATTERY_VMON1", tostring(batteryMonitor1) .. " 
V")
+               self:setValue("BATTERY_VMON2", tostring(batteryMonitor2) .. " 
V")
+       end
+end
+
+
+-- SUB MENUS
+
+function showGeneralDiagnosticsMenu(self)
+       local window = Window("text_list", self:string("MENU_GENERAL"))
+       window:setAllowScreensaver(false)
+       window:setButtonAction("rbutton", nil)
+
+       local menu = SimpleMenu("menu")
+
+       self.labels = {}
+
+       for i,name in ipairs(generalTests) do
+               self.labels[name] = {
+                       text = self:string(name, ''),
+                       style = 'item_info',
+               }
+               menu:addItem(self.labels[name])
+       end
+
+       doGeneralValues(self, menu)
+       menu:addTimer(5000, function()
+               doGeneralValues(self, menu)
+       end)
+
+       window:addWidget(menu)
+
+       self:tieAndShowWindow(window)
+       return window
+end
+
+
+function showWirelessDiagnosticsMenu(self)
+       local window = Window("text_list", self:string("MENU_WIRELESS"))
+       window:setAllowScreensaver(false)
+       window:setButtonAction("rbutton", nil)
+
+       local menu = SimpleMenu("menu")
+
+       self.labels = {}
+
+       for i,name in ipairs(wirelessTests) do
+               self.labels[name] = {
+                       text = self:string(name, ''),
+                       style = 'item_info',
+               }
+               menu:addItem(self.labels[name])
+       end
+
+       doWirelessValues(self, menu)
+       menu:addTimer(5000, function()
+               doWirelessValues(self, menu)
+       end)
+
+       window:addWidget(menu)
+
+       self:tieAndShowWindow(window)
+       return window
+end
+
+
+function showEthernetDiagnosticsMenu(self)
+       local window = Window("text_list", self:string("MENU_ETHERNET"))
+       window:setAllowScreensaver(false)
+       window:setButtonAction("rbutton", nil)
+
+       local menu = SimpleMenu("menu")
+
+       self.labels = {}
+
+       for i,name in ipairs(ethernetTests) do
+               self.labels[name] = {
+                       text = self:string(name, ''),
+                       style = 'item_info',
+               }
+               menu:addItem(self.labels[name])
+       end
+
+       doEthernetValues(self, menu)
+       menu:addTimer(5000, function()
+               doEthernetValues(self, menu)
+       end)
+
+       window:addWidget(menu)
+
+       self:tieAndShowWindow(window)
+       return window
+end
+
+
+function showServerDiagnosticsMenu(self)
+       local window = Window("text_list", self:string("MENU_SERVER"))
+       window:setAllowScreensaver(false)
+       window:setButtonAction("rbutton", nil)
+
+       local menu = SimpleMenu("menu")
+
+       self.labels = {}
+
+       for i,name in ipairs(serverTests) do
+               local label
+               if name == 'SC_PORT_9000' then
+                       label = self:string(name, '9000', '-')
                else
-                       self:setValue("PLAYER_TYPE", 
tostring(self:string("DIAGNOSTICS_REMOTE")))
-               end
-       else
-               self:setValue("CURRENT_PLAYER", 
tostring(self:string("DIAGNOSTICS_NONE")))
-               self:setValue("PLAYER_TYPE", "")
-
-       end
-
-       self:systemStatus()
-
-end
-
-
-function doPowerValues(self, menu)
-       self:setValue("MSP_VERSION", self:_getSysValue("fw"))
-       self:setValue("BATTERY_VOLTAGE"    , 
tostring(self:_getPowerSysValue("battery_voltage")      /1000.0) .. " V")
-       self:setValue("BATTERY_VMON1"      , 
tostring(self:_getPowerSysValue("battery_vmon1_voltage")/1000.0) .. " V")
-       self:setValue("BATTERY_VMON2"      , 
tostring(self:_getPowerSysValue("battery_vmon2_voltage")/1000.0) .. " V")
-       self:setValue("WALL_VOLTAGE"       , 
tostring(self:_getPowerSysValue("wall_voltage")         /1000.0) .. " V")
-       self:setValue("BATTERY_TEMPERATURE", 
tostring(self:_getPowerSysValue("battery_temperature")  /32.0  ) .. " C")
-
-       local mode = self:_getPowerSysValue("power_mode"):gsub("^%s*(.-)%s*$", 
"%1")
-       self:setValue("POWER_MODE"         , 
tostring(self:string(powerMode[mode])))
-       local mode = 
self:_getPowerSysValue("charger_state"):gsub("^%s*(.-)%s*$", "%1")
-       self:setValue("CHARGE_STATE"       , 
tostring(self:string(chargerState[mode])))
+                       label = self:string(name, '-')
+               end
+       
+               self.labels[name] = {
+                       text = label,
+                       style = 'item_info',
+               }
+               menu:addItem(self.labels[name])
+       end
+
+       doServerValues(self, menu)
+       menu:addTimer(5000, function()
+               doServerValues(self, menu)
+       end)
+
+       window:addWidget(menu)
+
+       self:tieAndShowWindow(window)
+       return window
 end
 
 
@@ -456,7 +641,6 @@
                menu:addItem(self.labels[name])
        end
 
-       self.powerDiagMenu = menu
        doPowerValues(self, menu)
        menu:addTimer(5000, function()
                doPowerValues(self, menu)
@@ -468,6 +652,10 @@
        return window
 end
 
+
+-- MAIN MENU
+
+-- Service menu
 function diagnosticsMenu(self, suppressNetworkingItem)
        local window = Window("text_list", self:string("DIAGNOSTICS"))
        window:setAllowScreensaver(false)
@@ -475,24 +663,47 @@
 
        local menu = SimpleMenu("menu")
 
-       self.labels = {}
-
-       for i,name in ipairs(tests) do
-               if name ~= 'ETH_CONNECTION' or System:getMachine() ~= 'jive' 
then
-                       local label
-                       if name == 'SC_PORT_9000' then
-                               label = self:string(name, '9000', '-')
-                       else
-                               label = self:string(name, '-')
-                       end
-               
-                       self.labels[name] = {
-                               text = label,
-                               style = 'item_info',
-                       }
-                       menu:addItem(self.labels[name])
-               end
-       end
+       menu:addItem({
+               text = self:string("MENU_GENERAL"),
+               style = 'item',
+               callback = function ()
+                       self:showGeneralDiagnosticsMenu()
+               end
+       })
+
+       menu:addItem({
+               text = self:string("MENU_NETWORK_HEALTH"),
+               style = 'item',
+               callback = function ()
+                       self:showNetworkHealthDiagnosticsMenu()
+               end
+       })
+
+       menu:addItem({
+               text = self:string("MENU_WIRELESS"),
+               style = 'item',
+               callback = function ()
+                       self:showWirelessDiagnosticsMenu()
+               end
+       })
+
+       if System:getMachine() ~= 'jive' then
+               menu:addItem({
+                       text = self:string("MENU_ETHERNET"),
+                       style = 'item',
+                       callback = function ()
+                               self:showEthernetDiagnosticsMenu()
+                       end
+               })
+       end
+
+       menu:addItem({
+               text = self:string("MENU_SERVER"),
+               style = 'item',
+               callback = function ()
+                       self:showServerDiagnosticsMenu()
+               end
+       })
 
        if System:getMachine() == "baby" then
                menu:addItem({
@@ -527,11 +738,7 @@
 
        self.notConnected = tostring(self:string('NOT_CONNECTED'))
 
-       self.diagMenu = menu
-       dovalues(self, menu)
-       menu:addTimer(5000, function()
-               dovalues(self, menu)
-       end)
+       self.menu = menu
 
        window:addWidget(menu)
 
@@ -539,7 +746,7 @@
        return window
 end
 
-
+-- Service menu
 function supportMenu(self)
        local window = Window("help_list", self:string("SUPPORT"))
        window:setAllowScreensaver(false)
@@ -563,6 +770,196 @@
 end
 
 
+
+
+-- NETWORK HEALTH STUFF
+function showNetworkHealthDiagnosticsMenu(self)
+       local window = Window("text_list", self:string("MENU_NETWORK_HEALTH"))
+       window:setAllowScreensaver(false)
+       window:setButtonAction("rbutton", nil)
+
+       local menu = SimpleMenu("menu")
+
+       self.labels = {}
+       self.labels["NETWORK_STATUS"] = {
+               text = self:string("NETWORK_STATUS", '-'),
+               style = 'item_info',
+       }
+       menu:addItem(self.labels["NETWORK_STATUS"])
+
+       menu:addItem({
+               text = self:string("CHECK_NETWORK"),
+               style = 'item',
+               callback = function ()
+                       self:manualCheckNetworkHealth(true)
+               end
+       })
+
+--     menu:addItem({
+--             text = self:string("CHECK_NETWORK_PART"),
+--             style = 'item',
+--             callback = function ()
+--                     self:manualCheckNetworkHealth(false)
+--             end
+--     })
+
+       menu:addItem({
+               text = self:string("REPAIR_NETWORK"),
+               style = 'item',
+               callback = function ()
+                       self:manualRepairNetwork()
+               end
+       })
+
+       self.networkHealthMenu = menu
+
+       window:addWidget(menu)
+
+       self:tieAndShowWindow(window)
+
+       return window
+end
+
+
+function manualCheckNetworkHealth(self, full_check)
+       local popup = Popup("waiting_popup")
+       popup:setAllowScreensaver(false)
+       popup:ignoreAllInputExcept()
+
+        popup:addWidget(Icon("icon_connecting"))
+
+       if full_check then
+               popup:addWidget(Label("text", self:string("CHECK_NETWORK")))
+       else
+               popup:addWidget(Label("text", 
self:string("CHECK_NETWORK_PART")))
+       end
+
+       local status = Label("subtext", self:string("STATUS_MSG", "-"))
+       popup:addWidget(status)
+
+       -- Get current server
+       local server = SlimServer:getCurrentServer()
+
+       -- Get SN if SC is not available
+       if not server then
+               -- Get SN
+               for n, s in SlimServer:iterate() do
+                       if s:isSqueezeNetwork() then
+                               server = s
+                       end
+               end
+       end
+
+       local ifObj = Networking:activeInterface()
+
+       ifObj:checkNetworkHealth( function(continue, err, msg, msg_param)
+                       local message = self:string(msg, msg_param)
+                       log:debug("checkNetworkHealth status: ", message)
+-- TODO: remove
+                       log:warn("checkNetworkHealth status: ", message)
+
+                       if continue then
+                               -- Update spinny message
+                               status:setValue(self:string("STATUS_MSG", 
message))
+                       else
+                               log:debug("Network health error: ", err)
+
+                               -- Update final message
+                               self:setResult("NETWORK_STATUS", err)
+
+--                             self:setValue("NETWORK_STATUS", message)
+                               
self.networkHealthMenu:setText(self.labels["NETWORK_STATUS"], 
self:string("NETWORK_STATUS", message))
+
+                               self.networkHealthMenu:setSelectedIndex(1)
+
+                               popup:hide()
+                       end
+               end,
+       full_check,             -- true full check (includes arping, DNS 
resolution and ping)
+       server
+       )
+
+       self:tieAndShowWindow(popup)
+end
+
+function setResult(self, index, err)
+       self:addExtraStyle(jive.ui.style)
+
+       local myItem = self.labels[index]
+
+       if err == 0 then
+               myItem.style = "item_info_green"
+       else
+               myItem.style = "item_info_red"
+       end
+-- TODO: needed?
+--     self.networkHealthMenu:replaceIndex(myItem, 1)
+end
+
+
+function manualRepairNetwork(self)
+       local popup = Popup("waiting_popup")
+       popup:setAllowScreensaver(false)
+       popup:ignoreAllInputExcept()
+
+        popup:addWidget(Icon("icon_connecting"))
+        popup:addWidget(Label("text", self:string("REPAIR_NETWORK")))
+
+       local status = Label("subtext", self:string("STATUS_MSG", "-"))
+       popup:addWidget(status)
+
+       local ifObj = Networking:activeInterface()
+
+       ifObj:repairNetwork( function(continue, err, msg, msg_param)
+                       local message = self:string(msg, msg_param)
+                       log:debug("repairNetwork status: ", message)
+
+                       if continue then
+                               -- Update spinny message
+                               status:setValue(self:string("STATUS_MSG", 
message))
+                       else
+                               -- Update final message
+                               log:debug("Repair network error: ", err)
+
+                               popup:hide()
+                       end
+               end
+       )
+
+       self:tieAndShowWindow(popup)
+end
+
+
+-- defines a new style that inherrits from an existing style
+local function _uses(parent, value)
+       if parent == nil then
+               log:warn("nil parent in _uses at:\n", debug.traceback())
+       end
+       local style = {}
+       setmetatable(style, { __index = parent })
+       for k,v in pairs(value or {}) do
+               if type(v) == "table" and type(parent[k]) == "table" then
+                       -- recursively inherrit from parent style
+                       style[k] = _uses(parent[k], v)
+               else
+                       style[k] = v
+               end
+       end
+
+       return style
+end
+
+
+function addExtraStyle(self, s)
+       s.item_info_green = _uses(s.item_info, {
+               bgImg = Tile:fillColor(0x00ff0088),
+       })
+       s.item_info_red = _uses(s.item_info, {
+               bgImg = Tile:fillColor(0xff000088),
+       })
+end
+
+
 --[[
 
 =head1 LICENSE

Modified: 
7.6/branches/new-setup/squeezeplay/src/squeezeplay_squeezeos/share/applets/Diagnostics/strings.txt
URL: 
http://svn.slimdevices.com/jive/7.6/branches/new-setup/squeezeplay/src/squeezeplay_squeezeos/share/applets/Diagnostics/strings.txt?rev=9014&r1=9013&r2=9014&view=diff
==============================================================================
--- 
7.6/branches/new-setup/squeezeplay/src/squeezeplay_squeezeos/share/applets/Diagnostics/strings.txt
 (original)
+++ 
7.6/branches/new-setup/squeezeplay/src/squeezeplay_squeezeos/share/applets/Diagnostics/strings.txt
 Tue Aug  3 12:39:46 2010
@@ -963,3 +963,121 @@
        RU      Состояние устройства зарядки\n%s
        SV      Laddningsstatus\n%s
 
+MENU_GENERAL
+       EN      General Info
+
+MENU_NETWORK_HEALTH
+       EN      Network Health
+
+MENU_WIRELESS
+       EN      Wireless Info
+
+MENU_ETHERNET
+       EN      Ethernet Info
+
+MENU_SERVER
+       EN      Server Info
+
+NETWORK_STATUS
+       EN      Network Status\n%s
+
+REPAIR_NETWORK
+       EN      Repair Network
+
+CHECK_NETWORK
+       EN      Check Network
+
+CHECK_NETWORK_PART
+       EN      Check Network (part)
+
+STATUS_MSG
+       EN      %s
+
+NET_BRINGING_NETWORK_DOWN
+       EN      Bringing network down ...
+
+NET_BRINGING_NETWORK_UP
+       EN      Bringing network up ...
+
+NET_REPAIR_NETWORK_DONE
+       EN      Repair network done
+
+NET_CONNECTION_NOK
+       EN      Not connected
+
+NET_INTERFACE_NOK
+       EN      No network interface
+
+NET_LINK
+       EN      Check network link
+
+NET_LINK_WIRELESS_OK
+       EN      Wireless - link ok
+
+NET_LINK_WIRELESS_NOK
+       EN      Wireless - no link
+
+NET_LINK_ETHERNET_OK
+       EN      Ethernet link ok
+
+NET_LINK_ETHERNET_NOK
+       EN      Ethernet - no link
+
+NET_IP_OK
+       EN      IP: %s  
+
+NET_IP_NOK
+       EN      No valid IP
+
+NET_GATEWAY_OK
+       EN      Gateway IP: %s
+
+NET_GATEWAY_NOK
+       EN      No valid gateway IP
+
+NET_DNS_OK
+       EN      DNS IP: %s
+
+NET_DNS_NOK
+       EN      No valid DNS IP
+
+NET_ARPING
+       EN      Arping %s ...
+
+NET_ARPING_OK
+       EN      Arping ok
+
+NET_ARPING_NOK
+       EN      IP %s already in use.
+
+NET_SERVER_NOK
+       EN      No server
+
+NET_RESOLVE
+       EN      Getting IP for %s ...
+
+NET_RESOLVE_OK
+       EN      IP for %s
+
+NET_RESOLVE_NOK
+       EN      DNS resolution failed for %s
+
+NET_PING
+       EN      Pinging %s ...
+
+NET_PING_OK
+       EN      Ping %s ok
+
+NET_PING_NOK
+       EN      Ping %s not ok
+
+NET_PORT
+       EN      Test connection to %s
+
+NET_PORT_OK
+       EN      Connection to %s ok
+
+NET_PORT_NOK
+       EN      Connection to %s not ok
+
+

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

Reply via email to