Page 3 of 3 FirstFirst 123
Results 31 to 37 of 37
  • Topic Tools
  • Display
  • Bookmark and Share
  1. #31
    New Member
    Points: 613, Level: 6
    Level completed: 32%, Points required for next Level: 137
    Overall activity: 0%
    Achievements:
    3 months registered500 Experience PointsNew Achievement!

    Join Date
    Mar 2012
    Posts
    6
    Points
    613
    Level
    6
    Thanks
    0
    Thanked 0 Times in 0 Posts
    Rep Power
    0
    Hi, this is my info:

    Model: SA3ARA16K/02

    Serial number: MT1B1146012065

    Tested in PC 1:


    Philips Songbird:

    Philips Songbird version: 2.6.1 Build: 6.1.2265; Rev: 720; Firmware: UNIVER

    OS Information:

    Windows Vista Home Premium Service Pack 2 - 32 bit

    Firmware:

    Current: 2.02
    Latest Available: 2.06

    Mode of the device:

    MTP mode.

    Errors (from PSB Console):

    Error: uncaught exception: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [sbIDeviceProperties.hidden]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: chrome://msc/content/xul/mscDeviceSummaryPage.xul?device-id={00000000-0000-0000-0000-000000000000} :: deviceSummary__update :: line 332" data: no]

    Error: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [sbIDeviceProperties.hidden]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: file:///C:/Program%20Files/Philips/Philips%20Songbird/extensions/msc@songbirdnest.com/platform/WINNT_x86-msvc/components/sbMSCServicePaneService.js :: sbMSC_SPS__updateDevNode :: line 1183" data: no]
    Archivo de origen: file:///C:/Program%20Files/Philips/Philips%20Songbird/extensions/msc@songbirdnest.com/platform/WINNT_x86-msvc/components/sbMSCServicePaneService.js
    Línea: 1183

    Other:

    Uninstall and reinstall WMP11

    THE ISSUE PERSIST


    Tested in PC 2:

    Philips Songbird:

    Philips Songbird version: 2.6.1 Build: 6.1.2265; Rev: 720; Firmware: UNIVER

    OS Information:

    Windows XP Professional Version 2002 Service Pack 3 - 32 bit

    Firmware:

    Current: 2.02
    Latest Available: 2.06

    Mode of the device:

    MTP mode.

    Errors (from PSB Console):

    Error: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [sbIDeviceProperties.hidden]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: file:///C:/Archivos%20de%20programa/Philips/Philips%20Songbird/extensions/msc@songbirdnest.com/platform/WINNT_x86-msvc/components/sbMSCServicePaneService.js :: sbMSC_SPS__updateDevNode :: line 1183" data: no]
    Archivo de origen: file:///C:/Archivos%20de%20programa/Philips/Philips%20Songbird/extensions/msc@songbirdnest.com/platform/WINNT_x86-msvc/components/sbMSCServicePaneService.js
    Línea: 1183

    Other:

    Uninstall and reinstall WMP11

    THE ISSUE PERSIST

  2. #32
    Moderator
    Points: 9,818, Level: 29
    Level completed: 78%, Points required for next Level: 132
    Overall activity: 0%
    Achievements:
    1 year registeredNew Achievement!5000 Experience PointsOverdrive
    Philips - QK's Avatar
    Join Date
    Oct 2011
    Posts
    884
    Points
    9,818
    Level
    29
    Thanks
    11
    Thanked 34 Times in 30 Posts
    Rep Power
    10
    Dear Josin,

    Could you follow the path below to see if the firmware package is in your Songbird or not?

    Computer > Program files >Philips > Philips Songbird Resources> Firmware > See if there's a folder named "SA3ARA"

    Meanwhile I will send your input to the software team to seek their advice. Will update you on this. Thanks.

    Thanks,
    Philips Moderation Team
    Last edited by Philips - QK; 05-14-2012 at 05:03 AM.
    Forum Mod

  3. #33
    New Member
    Points: 613, Level: 6
    Level completed: 32%, Points required for next Level: 137
    Overall activity: 0%
    Achievements:
    3 months registered500 Experience PointsNew Achievement!

    Join Date
    Mar 2012
    Posts
    6
    Points
    613
    Level
    6
    Thanks
    0
    Thanked 0 Times in 0 Posts
    Rep Power
    0
    In folder "Computer > Program files >Philips > Philips Songbird Resources> Firmware >" there is a folder named SA3ARA. In it, there is a file named "GoGearFWLibSA3ARA.dll"

    Many thanks for your time.

  4. #34
    Moderator
    Points: 9,818, Level: 29
    Level completed: 78%, Points required for next Level: 132
    Overall activity: 0%
    Achievements:
    1 year registeredNew Achievement!5000 Experience PointsOverdrive
    Philips - QK's Avatar
    Join Date
    Oct 2011
    Posts
    884
    Points
    9,818
    Level
    29
    Thanks
    11
    Thanked 34 Times in 30 Posts
    Rep Power
    10
    Hi Josin,

    We have tried with your setting, firmware can be upgraded (from v2.02 to v2.06):

    Setup:
    1) two WinXP (32 bit) PC
    2) PSB version: Philips Songbird version: 2.6.1 Build: 6.1.2265; Rev: 720; Firmware: UNIVER
    3) MTP mode

    If you can find the SA3ARA folder in the Philips Songbird Recources, then you are using the correct version of Songbird and you should be able to get the firmware.

    Could you provide us more detailed error console by following these steps:

    1. Launch PSB.
    2. Press "new tab" button in the main frame.
    3. Type “about:config” in the URL bar and press “Enter”
    4. Click on the “I’ll be careful, I promise!” button
    5. Right click in the new browsing tab. In the right click menu, select “New” >> “Boolean” >> type “extensions.firmware.philips.debug” as the preference name >> Select True >> Click OK.
    6. Click “Tools” in the top menu and select “Error Console” to launch error capturing (you can delete the old error console before capturing error console for your issue)
    7. Try to reproduce the issue: update / repair
    8. More detailed log will capture by Error Console.
    9. Copy and paste in the forum so that we can look into that further


    Thanks a lot for your patience and time.

    Kind regards,
    Philips Moderation Team
    Last edited by Philips - QK; 05-15-2012 at 07:18 AM.
    Forum Mod

  5. #35
    New Member
    Points: 613, Level: 6
    Level completed: 32%, Points required for next Level: 137
    Overall activity: 0%
    Achievements:
    3 months registered500 Experience PointsNew Achievement!

    Join Date
    Mar 2012
    Posts
    6
    Points
    613
    Level
    6
    Thanks
    0
    Thanked 0 Times in 0 Posts
    Rep Power
    0
    Error log

    Error: DoRecoveryUpdate(C:\Documents and Settings\Josᅢᆵn\Configuraciᅢᄈn local\Datos de programa\Philips-Songbird\Profiles\z07ysl2v.default\firmware_cache\ v2\Philips SA3ARA\) in C:\Archivos de programa\Philips\Philips Songbird Resources\Firmware\SA3ARA\GoGearFWLibSA3ARA.dll FAILED [4]

    Error: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [sbIDeviceProperties.hidden]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: file:///C:/Archivos%20de%20programa/Philips/Philips%20Songbird/extensions/msc@songbirdnest.com/platform/WINNT_x86-msvc/components/sbMSCServicePaneService.js :: sbMSC_SPS__updateDevNode :: line 1183" data: no]
    Archivo de origen: file:///C:/Archivos%20de%20programa/Philips/Philips%20Songbird/extensions/msc@songbirdnest.com/platform/WINNT_x86-msvc/components/sbMSCServicePaneService.js
    Línea: 1183

    Error: uncaught exception: [Exception... "Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [sbIDeviceFirmwareUpdater.finalizeUpdate]" nsresult: "0x80004003 (NS_ERROR_INVALID_POINTER)" location: "JS frame :: chrome://songbird/content/scripts/device/deviceFirmwareWizard.js :: deviceFirmwareWizard__finalize :: line 652" data: no]

    Error: GetDeviceInfo(00000001000015420002DCDF7EC95542) in C:\Archivos de programa\Philips\Philips Songbird Resources\Firmware\SA3ARA\GoGearFWLibSA3ARA.dll FAILED [1]

    Error: DoRecoveryUpdate(C:\Documents and Settings\Josᅢᆵn\Configuraciᅢᄈn local\Datos de programa\Philips-Songbird\Profiles\z07ysl2v.default\firmware_cache\ v2\Philips SA3ARA\) in C:\Archivos de programa\Philips\Philips Songbird Resources\Firmware\SA3ARA\GoGearFWLibSA3ARA.dll FAILED [4]

    Error: [Exception... "Component returned failure code: 0x80040111 (NS_ERROR_NOT_AVAILABLE) [sbIDeviceProperties.hidden]" nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)" location: "JS frame :: file:///C:/Archivos%20de%20programa/Philips/Philips%20Songbird/extensions/msc@songbirdnest.com/platform/WINNT_x86-msvc/components/sbMSCServicePaneService.js :: sbMSC_SPS__updateDevNode :: line 1183" data: no]
    Archivo de origen: file:///C:/Archivos%20de%20programa/Philips/Philips%20Songbird/extensions/msc@songbirdnest.com/platform/WINNT_x86-msvc/components/sbMSCServicePaneService.js
    Línea: 1183

    DETAILS

    /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
    /* vim: set sw=2 :miv */
    /*
    *
    *=BEGIN SONGBIRD LICENSE
    *
    * Copyright(c) 2005-2010 POTI, Inc.
    * http://www.songbirdnest.com
    *
    * For information about the licensing and copyright of this Add-On please
    * contact POTI, Inc. at customer@songbirdnest.com.
    *
    *=END SONGBIRD LICENSE
    *
    */

    /**
    * \file sbMSCServicePaneService.js
    * \brief Songbird MSC Device Service Pane Service Source.
    */

    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------
    //
    // MSC device service pane service component.
    //
    // This component provides service pane support for MSC devices.
    //
    //------------------------------------------------------------------------------
    //------------------------------------------------------------------------------

    //------------------------------------------------------------------------------
    //
    // MSC device service pane service imported services.
    //
    //------------------------------------------------------------------------------

    // Component manager defs.
    if (typeof(Cc) == "undefined")
    var Cc = Components.classes;
    if (typeof(Ci) == "undefined")
    var Ci = Components.interfaces;
    if (typeof(Cr) == "undefined")
    var Cr = Components.results;
    if (typeof(Cu) == "undefined")
    var Cu = Components.utils;

    // Songbird imports.
    Cu.import("resource://app/jsmodules/ArrayConverter.jsm");
    Cu.import("resource://app/jsmodules/sbProperties.jsm");
    Cu.import("resource://app/jsmodules/kPlaylistCommands.jsm");
    Cu.import("resource://app/jsmodules/StringUtils.jsm");
    Cu.import("resource://app/jsmodules/SBTimer.jsm");
    Cu.import("resource://gre/modules/XPCOMUtils.jsm");


    //------------------------------------------------------------------------------
    //
    // MSC device service pane service configuration.
    //
    //------------------------------------------------------------------------------

    //
    // classDescription Description of component class.
    // classID Component class ID.
    // contractID Component contract ID.
    // ifList List of external component interfaces.
    // _xpcom_categories List of component categories.
    //
    // mscSP_NS Device service pane namespace.
    // itemURNPrefix Item URN prefix.
    // devMgrURL URL of device manager window.
    //

    var sbMSC_SPSCfg = {
    classDescription: "Songbird MSC Device Service Pane Service",
    classID: Components.ID("{f8e494cc-560a-4e1c-81c8-4ea1a7709024}"),
    contractID: "@songbirdnest.com/servicepane/MSCDevice;1",
    ifList: [ Ci.sbIServicePaneModule,
    Ci.sbIServicePaneMutationListener,
    Ci.sbIDeviceEventListener ],
    _xpcom_categories:
    [
    {
    category: "service-pane",
    entry: "msc-device"
    }
    ],

    itemURNPrefix: "urn:item:",
    mscSP_NS: "http://songbirdnest.com/rdf/msc-servicepane#",
    devMgrURL: "chrome://msc/content/xul/mscDeviceSummaryPage.xul"
    };


    //------------------------------------------------------------------------------
    //
    // MSC device service pane service object.
    //
    //------------------------------------------------------------------------------

    /**
    * Construct an MSC device service pane service object.
    */

    function sbMSC_SPS() {
    }

    // Define the object.
    sbMSC_SPS.prototype = {
    // Set the constructor.
    constructor: sbMSC_SPS,

    //
    // MSC device service pane service fields.
    //
    // classDescription Description of component class.
    // classID Component class ID.
    // contractID Component contract ID.
    // _xpcom_categories List of component categories.
    //
    // _cfg Configuration settings.
    // _devMgr Device manager object.
    // _servicePaneSvc Service pane service object.
    // _devServicePaneSvc Device service pane service object.
    // _libServicePaneSvc Library service pane service object.
    // _libMgr Library manager object.
    // _devInfoList List of device information. Each element
    // contains the following properties: svcPaneNode,
    // device, properties
    // devLibTable, playlistTable
    //

    classDescription: sbMSC_SPSCfg.classDescription,
    classID: sbMSC_SPSCfg.classID,
    contractID: sbMSC_SPSCfg.contractID,
    _xpcom_categories: sbMSC_SPSCfg._xpcom_categories,

    _cfg: sbMSC_SPSCfg,
    _devMgr: null,
    _servicePaneSvc: null,
    _devServicePaneSvc: null,
    _libServicePaneSvc: null,
    _libMgr: null,
    _devInfoList: null,
    _devStateRefreshTimer: null,

    //----------------------------------------------------------------------------
    //
    // MSC device service pane sbIServicePaneModule services.
    //
    //----------------------------------------------------------------------------

    /* \brief Initialize this service pane module
    * This is where the module should set itself up in the tree if it hasn't
    * before.
    * \param aServicePaneService the service pane service instance
    */

    servicePaneInit: function sbMSC_SPS_servicePaneInit(aServicePaneService) {
    // Save the service pane service.
    this._servicePaneSvc = aServicePaneService;

    // Initialize the services.
    this._initialize();
    },


    /* \brief Fill the context menu for the given node
    * \param aNode the node that was context-clicked on
    * \param aContextMenu the menu we're trying to fill
    * \param aParentWindow the toplevel window we're displaying in
    */

    fillContextMenu: function sbMSC_SPS_fillContextMenu(aNode,
    aContextMenu,
    aParentWindow) { },


    /* \brief Fill a menu with menuitems to create new tree nodes
    * \param aNode the node or null for the click and hold menu
    * \param aContextMenu the menu we're trying to fill
    * \param aParentWindow the toplevel window we're displaying in
    */

    fillNewItemMenu: function sbMSC_SPS_fillNewItemMenu(aNode,
    aContextMenu,
    aParentWindow) { },


    /* \brief Selection changes notification
    * \param aNode the node that is now selected
    * \param aParentWindow the toplevel window we're displaying in
    */

    onSelectionChanged: function sbMSC_SPS_onSelectionChanged(aNode,
    aContainer,
    aParentWindow) { },


    /* \brief Return whether the item can be dropped on the node
    */

    canDrop: function sbMSC_SPS_canDrop(aNode,
    aDragSession,
    aOrientation,
    aWindow) {
    // only accept drops that are ON this node, not above or below
    if (aOrientation != Ci.nsITreeView.DROP_ON)
    return false;

    // find the target library to which we need to forward the event
    var libraryNode = this._getLibraryNodeForDeviceNode(aNode);
    if (libraryNode) {
    // forward the event
    return this._servicePaneSvc.canDrop(libraryNode,
    aDragSession,
    Ci.nsITreeView.DROP_ON,
    aWindow);
    }
    return false;
    },


    /* \brief Handle dropping of an item on node
    */

    onDrop: function sbMSC_SPS_onDrop(aNode,
    aDragSession,
    aOrientation,
    aWindow) {
    // find the target library to which we need to forward the event
    var libraryNode = this._getLibraryNodeForDeviceNode(aNode);
    if (libraryNode) {
    // forward the event
    this._servicePaneSvc.onDrop(libraryNode,
    aDragSession,
    Ci.nsITreeView.DROP_ON,
    aWindow);
    }
    },


    /* \brief Handle drag gesture
    */

    onDragGesture: function sbMSC_SPS_onDragGesture(aNode, aDataTransfer) { },


    /* \brief Called before a user starts to rename a node.
    * \param aNode the node that is about to be renamed
    */

    onBeforeRename: function sbMSC_SPS_onBeforeRename(aNode) {
    },


    /* \brief Called when a node is renamed by the user, allows
    * the module to accept the action by setting the
    * node name to the given value.
    * \param aNode the node that was renamed
    * \param aNewName new name entered by the user or null if user canceled
    * renaming
    */

    onRename: function sbMSC_SPS_onRename(aNode, aNewName) {
    // Get the device. Do nothing if not a device node.
    var deviceID = aNode.getAttributeNS(this._cfg.mscSP_NS, "device-id");
    if (!deviceID)
    return;
    var deviceInfo = this._devInfoList[deviceID];
    if (!deviceInfo)
    return;
    var device = deviceInfo.device;
    if (!device)
    return;

    // Set the new device name if there is one.
    if (aNewName)
    device.properties.friendlyName = aNewName;

    // Update the device.
    this._updateDevice(device);
    },


    /* \brief Called when the service pane service is shutting down
    */
    shutdown: function sbMSC_SPS_shutdown() {
    // Finalize the services.
    this._finalize();
    },


    //----------------------------------------------------------------------------
    //
    // MSC device service pane sbIServicePaneMutationListener services.
    //
    //----------------------------------------------------------------------------

    /**
    * \brief Called after a node attribute changes
    *
    * \param aNode service pane node that was changed
    * \param aAttrName name of the attribute modified
    * \param aNamespace namespace of the attribute (can be null)
    * \param aOldVal old attribute value (will be null for new attributes)
    * \param aNewVal new attribute value (will ne null if attribute is removed)
    */

    attrModified: function sbMSC__SPS_attrModified(aNode,
    aAttrName,
    aNamespace,
    aOldVal,
    aNewVal) {
    },


    /**
    * \brief Called after a node is added to the service pane tree
    *
    * \param aNode service pane node that was added
    * \param aParent new parent node
    */

    nodeInserted: function sbMSC__SPS_nodeInserted(aNode,
    aParent,
    aInsertBefores) {
    // Ignore all nodes except for media lists.
    var resource = this._libServicePaneSvc.getLibraryResourceForNode( aNode);
    if (!resource)
    return;
    if (!(resource instanceof Ci.sbIMediaList))
    return;

    // Get device for node. Just return if no associated device.
    var device = this._devMgr.getDeviceForItem(resource);
    if (!device)
    return;

    // Get the device info. Just return if no device info.
    var devInfo = this._devInfoList[device.id];
    if (!devInfo)
    return;

    // Update all libraries for device.
    this._updateAllDevLibs(devInfo);
    },


    /**
    * \brief Called after a node is removed from the service pane tree
    *
    * \param aNode service pane node that was removed
    * \param aParent old parent node
    */

    nodeRemoved: function sbMSC__SPS_nodeRemoved(aNode, aParent) {
    },


    //----------------------------------------------------------------------------
    //
    // MSC device service pane sbIDeviceEventListener services.
    //
    //----------------------------------------------------------------------------

    /**
    * aEvent - information about the event
    */

    onDeviceEvent: function sbMSC_SPS_onDeviceEvent(aEvent) {
    // Dispatch processing of the event.
    switch(aEvent.type) {
    case Ci.sbIDeviceEvent.EVENT_DEVICE_ADDED :
    this._addDevice(aEvent.data.QueryInterface(Ci.sbID evice));
    break;

    case Ci.sbIDeviceEvent.EVENT_DEVICE_REMOVED :
    this._removeDevice(aEvent.data.QueryInterface(Ci.s bIDevice));
    break;

    case Ci.sbIDeviceEvent.EVENT_DEVICE_STATE_CHANGED :
    this._updateDevState(aEvent.origin.QueryInterface( Ci.sbIDevice));
    break;

    case Ci.sbIDeviceEvent.EVENT_DEVICE_INFO_CHANGED :
    case Ci.sbIDeviceEvent.EVENT_DEVICE_DEFAULT_LIBRARY_CHA NGED :
    this._updateDevice(aEvent.origin.QueryInterface(Ci .sbIDevice));
    break;

    case Ci.sbIDeviceEvent.EVENT_DEVICE_LIBRARY_ADDED :
    this._onDeviceLibraryAdded
    (aEvent.origin.QueryInterface(Ci.sbIDevice),
    aEvent.data.QueryInterface(Ci.sbIDeviceLibrary));
    break;

    case Ci.sbIDeviceEvent.EVENT_DEVICE_LIBRARY_REMOVED :
    this._onDeviceLibraryRemoved(aEvent.origin.QueryIn terface(Ci.sbIDevice),
    aEvent.data);
    break;

    default :
    break;
    }
    },


    //----------------------------------------------------------------------------
    //
    // MSC device service pane sbIMediaListListener services.
    //
    //----------------------------------------------------------------------------

    //
    // _inBatchMap Map of media lists in a batch update.
    // _rescanListMap Map of media lists to be rescanned.
    //

    _inBatchMap: null,
    _rescanListMap: null,


    /**
    * \brief Initialize the sbIMediaListListener services.
    */

    _sbIMLL_Initialize: function sbMSC_SPS__sbIMLL_Initialize() {
    this._inBatchMap = { };
    this._rescanListMap = { };
    },


    /**
    * \brief Finalize the sbIMediaListListener services.
    */

    _sbIMLL_Finalize: function sbMSC_SPS__sbIMLL_Finalize() {
    this._inBatchMap = null;
    this._rescanListMap = null;
    },


    /**
    * \brief Called when a media item is added to the list.
    * \param aMediaList The list that has changed.
    * \param aMediaItem The new media item.
    * \return True if you do not want any further onItemAdded notifications for
    * the current batch. If there is no current batch, the return value
    * is ignored.
    */

    onItemAdded: function sbMSC_SPS_onItemAdded(aMediaList, aMediaItem, aIndex) {
    var noFurtherNotifications = false;

    // If in a batch, mark media list for rescanning. Otherwise, add any
    // playlists to the device playlist maps.
    if (this._inBatchMap[aMediaList.guid]) {
    this._rescanListMap[aMediaList.guid] = true;
    // No further onItemAdded notifications.
    noFurtherNotifications = true;
    } else {
    if (aMediaItem instanceof Ci.sbIMediaList)
    this._addDevPlaylist(aMediaItem);
    }

    return noFurtherNotifications;
    },


    /**
    * \brief Called before a media item is removed from the list.
    * \param aMediaList The list that has changed.
    * \param aMediaItem The media item to be removed
    * \return True if you do not want any further onBeforeItemRemoved
    * notifications for the current batch. If there is no current batch,
    * the return value is ignored.
    */

    onBeforeItemRemoved: function sbMSC_SPS_onBeforeItemRemoved(aMediaList,
    aMediaItem,
    aIndex) {
    var noFurtherNotifications = false;

    // If in a batch, mark media list for rescanning. Otherwise, remove any
    // playlists from the device playlist maps.
    if (this._inBatchMap[aMediaList.guid]) {
    this._rescanListMap[aMediaList.guid] = true;
    noFurtherNotifications = true;
    } else {
    if (aMediaItem instanceof Ci.sbIMediaList)
    this._removeDevPlaylist(aMediaItem);
    }

    return noFurtherNotifications;
    },


    /**
    * \brief Called after a media item is removed from the list.
    * \param aMediaList The list that has changed.
    * \param aMediaItem The removed media item.
    * \return True if you do not want any further onAfterItemRemoved for the
    * current batch. If there is no current batch, the return value is
    * ignored.
    */

    onAfterItemRemoved: function sbMSC_SPS_onAfterItemRemoved(aMediaList,
    aMediaItem,
    aIndex) {
    return true;
    },


    /**
    * \brief Called when a media item is changed.
    * \param aMediaList The list that has changed.
    * \param aMediaItem The item that has changed.
    * \param aProperties Array of properties that were updated. Each property's
    * value is the previous value of the property
    * \return True if you do not want any further onItemUpdated notifications
    * for the current batch. If there is no current batch, the return
    * value is ignored.
    */

    onItemUpdated: function sbMSC_SPS_onItemUpdated(aMediaList,
    aMediaItem,
    aIndex,
    aProperties) {
    return true;
    },

    /**
    * \Brief Called before a media list is cleared.
    * \param sbIMediaList aMediaList The list that is about to be cleared.
    * \param aExcludeLists If true, only media items, not media lists, are being
    * cleared.
    * \return True if you do not want any further onBeforeListCleared
    * notifications for the current batch. If there is no current batch,
    * the return value is ignored.
    */

    onBeforeListCleared: function sbMSC_SPS_onBeforeListCleared(aMediaList,
    aExcludeLists) {
    return true;
    },

    /**
    * \Brief Called when a media list is cleared.
    * \param sbIMediaList aMediaList The list that was cleared.
    * \param aExcludeLists If true, only media items, not media lists, were
    * cleared.
    * \return True if you do not want any further onListCleared notifications
    * for the current batch. If there is no current batch, the return
    * value is ignored.
    */

    onListCleared: function sbMSC_SPS_onListCleared(aMediaList,
    aExcludeLists) {
    var noFurtherNotifications = false;

    // If in a batch, mark media list for rescanning. Otherwise, update the
    // device playlist maps.
    if (this._inBatchMap[aMediaList.guid]) {
    this._rescanListMap[aMediaList.guid] = true;
    noFurtherNotifications = true;
    } else {
    this._updateDevPlaylists(aMediaList);
    }

    return noFurtherNotifications;
    },


    /**
    * \brief Called when the library is about to perform multiple operations at
    * once.
    *
    * This notification can be used to optimize behavior. The consumer may
    * choose to ignore further onItemAdded or onItemRemoved notifications until
    * the onBatchEnd notification is received.
    *
    * \param aMediaList The list that has changed.
    */

    onBatchBegin: function sbMSC_SPS_onBatchBegin(aMediaList) {
    // Add media list to the in batch map.
    this._inBatchMap[aMediaList.guid] = true;
    },


    /**
    * \brief Called when the library has finished performing multiple operations
    * at once.
    *
    * This notification can be used to optimize behavior. The consumer may
    * choose to stop ignoring onItemAdded or onItemRemoved notifications after
    * receiving this notification.
    *
    * \param aMediaList The list that has changed.
    */

    onBatchEnd: function sbMSC_SPS_onBatchEnd(aMediaList) {
    // Remove media list from the in batch map.
    delete this._inBatchMap[aMediaList.guid];

    // Update device playlists if needed.
    if (this._rescanListMap[aMediaList.guid]) {
    this._updateDevPlaylists(aMediaList);
    delete(this._rescanListMap[aMediaList.guid]);
    }
    },


    //----------------------------------------------------------------------------
    //
    // MSC device service pane nsISupports services.
    //
    //----------------------------------------------------------------------------

    QueryInterface: XPCOMUtils.generateQI(sbMSC_SPSCfg.ifList),


    //----------------------------------------------------------------------------
    //
    // MSC device service pane event services.
    //
    //----------------------------------------------------------------------------

    /**
    * Handle the device library added event for the device specified by aDevice
    * and library specified by aLibrary.
    *
    * \param aDevice Device to which library was added.
    * \param aLibrary Library that was added.
    */

    _onDeviceLibraryAdded: function sbMSC_SPS_onDeviceLibraryAdded(aDevice,
    aLibrary) {
    // Don't add libraries for devices that have not been added.
    if (!(aDevice.id in this._devInfoList))
    return;

    // Add the device library.
    this._addDevLib(aLibrary, aDevice);
    },


    /**
    * Handle the device library removed event for the device specified by aDevice
    * and library with the GUID specified by aLibraryGUID.
    *
    * \param aDevice Device from which library was removed.
    * \param aLibraryGUID GUID of library that was removed.
    */

    _onDeviceLibraryRemoved:
    function sbMSC_SPS_onDeviceLibraryRemoved(aDevice,
    aLibraryGUID) {
    var devLibInfo = this._getDevLibInfo(aLibraryGUID);
    if (devLibInfo) {
    // Remove the device library.
    this._removeDevLib(devLibInfo);
    }
    },


    //----------------------------------------------------------------------------
    //
    // MSC device service pane services.
    //
    //----------------------------------------------------------------------------

    /**
    * \brief Initialize the MSC device service pane services.
    */

    _initialize: function sbMSC_SPS__initialize() {
    // Initialize the device lists and maps.
    this._devInfoList = {};

    // Get the library manager.
    this._libMgr = Cc["@songbirdnest.com/Songbird/library/Manager;1"]
    .getService(Ci.sbILibraryManager);

    // Get the device manager and device and library service pane services.
    this._devMgr = Cc["@songbirdnest.com/Songbird/DeviceManager;2"]
    .getService(Ci.sbIDeviceManager2);
    this._devServicePaneSvc = Cc["@songbirdnest.com/servicepane/device;1"]
    .getService(Ci.sbIDeviceServicePaneService);
    this._libServicePaneSvc = Cc["@songbirdnest.com/servicepane/library;1"]
    .getService(Ci.sbILibraryServicePaneService);

    // Add service pane mutation listener.
    this._servicePaneSvc.root.addMutationListener(this );

    // Initialize the sbIMediaListListener services.
    this._sbIMLL_Initialize();

    // Add device event listener.
    this._devMgr.addEventListener(this);

    // Add all connected devices.
    this._addAllConnectedDevices();

    // Start state polling timer
    var self = this;
    var func = function() { self._updateAllDevState(); }

    // We use a timer on top of the events because there
    // is no guarantee that our listener will be added
    // at the correct time to catch all the events we are
    // listening for to determine state
    this._devStateRefreshTimer = new SBTimer(func,
    1000,
    Ci.nsITimer.TYPE_REPEATING_SLACK);
    },


    /**
    * \brief Finalize the MSC device service pane services.
    */

    _finalize: function sbMSC_SPS__finalize() {
    // Clear timer
    this._devStateRefreshTimer.cancel();
    this._devStateRefreshTimer = null;

    // Remove device event listener.
    this._devMgr.removeEventListener(this);

    // Finalize the sbIMediaListListener services.
    this._sbIMLL_Finalize();

    // Remove service pane mutation listener.
    this._servicePaneSvc.root.removeMutationListener(t his);

    // Remove all devices.
    this._removeAllDevices();

    // Clear the device lists and maps.
    this._devInfoList = null;

    // Clear object references.
    this._devMgr = null;
    this._servicePaneSvc = null;
    this._libServicePaneSvc = null;
    },


    /**
    * \brief Add the device specified by aDevice to the service pane.
    *
    * \param aDevice The device object.
    */

    _addDevice: function sbMSC_SPS__addDevice(aDevice) {
    // Do nothing if device has already been added.
    var deviceID = aDevice.id;
    if (this._devInfoList[deviceID])
    return;

    // Do nothing if device is not an MSC device.
    //XXXeps would be nice to have a more generic DeviceClass = "MSC".
    //XXXeps or perhaps, DeviceType = "MSC" and DeviceConnectionType = "USB".
    if (aDevice.parameters.getProperty("DeviceType") != "MSCUSB")
    return;

    // Do nothing if device is not connected.
    if (!aDevice.connected)
    return;

    // Create a device info list entry.
    this._devInfoList[deviceID] = {
    device: aDevice,
    idleImageURL: null,
    devLibTable: {},
    playlistTable: {}
    };

    // Add a device node in the service pane.
    var devNode = this._devServicePaneSvc.createNodeForDevice2(aDevi ce, true);
    devNode.setAttributeNS(this._cfg.mscSP_NS, "device-id", deviceID);
    devNode.contractid = this._cfg.contractID;
    devNode.image = this._devInfoList[deviceID].idleImageURL;
    devNode.hidden = false;
    devNode.url = this._cfg.devMgrURL + "?device-id=" + deviceID;
    devNode.editable = true;
    this._devInfoList[deviceID].svcPaneNode = devNode;

    // Fill device node context menu with default items.
    this._devServicePaneSvc.setFillDefaultContextMenu( devNode, true);

    // Add all device libraries.
    for each (let library in ArrayConverter.JSEnum(aDevice.content.libraries)) {
    this._addDevLib(library.QueryInterface(Ci.sbIDevic eLibrary), aDevice);
    }

    // Update the device.
    this._updateDevice(aDevice);
    },


    /**
    * \brief Remove the device specified by aDevice from the service pane.
    *
    * \param aDevice The device object.
    */

    _removeDevice: function sbMSC_SPS__removeDevice(aDevice) {
    // Get the device info. Do nothing if no device info available.
    var device = aDevice.QueryInterface(Ci.sbIDevice);
    var deviceID = device.id;
    var devInfo = this._devInfoList[deviceID];
    if (!devInfo)
    return;

    // Remove all device libraries.
    this._removeAllDevLibs(devInfo);

    // Remove the device node.
    if (devInfo.svcPaneNode) {
    devInfo.svcPaneNode.parentNode.removeChild(devInfo .svcPaneNode);
    }

    // Remove device info list entry.
    delete this._devInfoList[deviceID];
    devInfo.device = null;
    },


    /**
    * \brief Add all connected devices to the service pane.
    */

    _addAllConnectedDevices: function sbMSC_SPS__addAllConnectedDevices() {
    var deviceList = ArrayConverter.JSArray(this._devMgr.devices);
    for each (let device in deviceList) {
    this._addDevice(device.QueryInterface(Ci.sbIDevice ));
    }
    },


    /**
    * \brief Remove all devices from the service pane.
    */

    _removeAllDevices: function sbMSC_SPS__removeAllDevices() {
    // Remove all devices.
    for (var deviceID in this._devInfoList)
    this._removeDevice(this._devInfoList[deviceID].device);
    },


    /**
    * \brief Add the device library specified by aLibrary for the device
    * specified by aDevice to the list of device libraries.
    *
    * \param aLibrary Device library to add.
    * \param aDevice Device for which to add library.
    */

    _addDevLib: function sbMSC_SPS__addDevLib(aLibrary, aDevice) {
    // Get the device info. Just return if no info.
    var deviceID = aDevice.id;
    var devInfo = this._devInfoList[deviceID];
    if (!devInfo)
    return;

    // Use the raw library instead of the sbIDeviceLibrary since the
    // sbIDeviceLibrary is mostly useless in the device removal events.
    let library = this._libMgr.getLibrary(aLibrary.guid);

    // Do nothing if device library already added.
    var devLibGUID = library.guid;
    if (devLibGUID in devInfo.devLibTable)
    return;

    // Add library info to table.
    var devLibInfo = {
    devInfo: devInfo,
    devLib: library,
    devLibGUID: library.guid
    };
    devInfo.devLibTable[devLibGUID] = devLibInfo;

    // Create the device library service pane node.
    var devLibNode = this._devServicePaneSvc
    .createLibraryNodeForDevice(aDevice, library);
    if (!devLibNode)
    return;

    // Set the read-only property for the device library node.
    this._setNodeReadOnly(aDevice, devLibNode);

    // Add a listener for the device library.
    library.addListener(this,
    false,
    Ci.sbIMediaList.LISTENER_FLAGS_ALL &
    ~Ci.sbIMediaList.LISTENER_FLAGS_ITEMUPDATED);

    // register this device for the device-specific playlist commands
    var mgr = Cc["@songbirdnest.com/Songbird/PlaylistCommandsManager;1"]
    .getService(Ci.sbIPlaylistCommandsManager);

    // Keep track of the commands registered to the servicepane menu
    // so we can correctly unregister them later.
    // XX jhawk currently there are none of these
    devLibInfo.devLibServicePaneCmds = [];

    var menuCmds = mgr.request(kPlaylistCommands.MEDIALIST_DEVICE_LIB RARY_CONTEXTMENU);
    mgr.registerPlaylistCommandsForLibrary(false, library, menuCmds);

    var toolbarCmds = mgr.request(kPlaylistCommands.MEDIALIST_DEVICE_LIB RARY_TOOLBAR);
    mgr.registerPlaylistCommandsForLibrary(false, library, toolbarCmds);

    // Keep track of the commands registered to the menu or toolbar
    // so we can correctly unregister them later
    devLibInfo.devLibMenuOrToolbarCmds = [menuCmds, toolbarCmds];

    // Update device library playlists.
    this._updateDevPlaylists(library);

    // Update the device.
    this._updateDevice(aDevice);
    },


    /**
    * Remove all device libraries from the list of device libraries for the
    * device specified by a aDevInfo.
    *
    * \param aDevInfo Device from which to remove libraries.
    */

    _removeAllDevLibs: function sbMSC_SPS__removeAllDevLibs(aDevInfo) {
    // Get the list of all device libraries.
    var devLibInfoList = [];
    for each (let devLibInfo in aDevInfo.devLibTable) {
    devLibInfoList.push(devLibInfo);
    }

    // Remove all device libraries.
    for each (let devLibInfo in devLibInfoList) {
    this._removeDevLib(devLibInfo);
    }
    },


    /**
    * \brief Remove the device library specified by aDevLibInfo from the list of
    * device libraries.
    *
    * \param aDevLibInfo Device library to remove.
    */

    _removeDevLib: function sbMSC_SPS__removeDevLib(aDevLibInfo) {
    // Get the library.
    var devLib = aDevLibInfo.devLib;

    // Remove library from the device library info table.
    delete aDevLibInfo.devInfo.devLibTable[aDevLibInfo.devLibGUID];

    // Remove listener from library.
    try {
    devLib.removeListener(this);
    }
    catch (e) {}

    var cmdMgr = Cc["@songbirdnest.com/Songbird/PlaylistCommandsManager;1"]
    .getService(Ci.sbIPlaylistCommandsManager);

    // Remove library playlist commands. First handle servicepane commands.
    if (aDevLibInfo.devLibServicePaneCmds) {

    var len = aDevLibInfo.devLibServicePaneCmds.length;
    for (var i = 0; i < len; i++) {
    // Unregister each servicepane command
    cmdMgr.unregisterPlaylistCommandsForLibrary
    (true,
    devLib,
    aDevLibInfo.devLibServicePaneCmds[i]);
    }
    aDevLibInfo.devLibServicePaneCmds = null;
    }

    // Remove mediaitem context menu and toolbar commands
    if (aDevLibInfo.devLibMenuOrToolbarCmds) {

    var len = aDevLibInfo.devLibMenuOrToolbarCmds.length;
    for (var i = 0; i < len; i++) {
    // Unregister each mediaitem contextmenu or toolbar command
    cmdMgr.unregisterPlaylistCommandsForLibrary
    (false,
    devLib,
    aDevLibInfo.devLibMenuOrToolbarCmds[i]);
    }
    aDevLibInfo.devLibMenuOrToolbarCmds = null;
    }

    // Update the device.
    this._updateDevice(aDevLibInfo.devInfo.device);
    },


    /**
    * Return the device library info object for the device library with the GUID
    * specified by aDevLibGUID.
    *
    * \param aDevLibGUID Device library GUID.
    *
    * \return Device library info object or null if none
    * available.
    */

    _getDevLibInfo: function sbMSC_SPS__getDevLibInfo(aDevLibGUID) {
    // Search all device info objects for the device library info.
    for each (let devInfo in this._devInfoList) {
    if (aDevLibGUID in devInfo.devLibTable)
    return devInfo.devLibTable[aDevLibGUID];
    }

    return null;
    },


    /**
    * \brief Add the device playlist specified by aMediaList to the list of
    * device playlists.
    *
    * \param aMediaList Device playlist to add.
    */

    _addDevPlaylist: function sbMSC_SPS__addDevPlaylist(aMediaList) {
    // Get the playlist device library info. Just return if no info.
    var devLibInfo = this._getDevLibInfo(aMediaList.library.guid);
    if (!devLibInfo)
    return;

    // Get the device info.
    var devInfo = devLibInfo.devInfo;
    var device = devInfo.device;

    // Get the playlist info.
    var playlistTable = devInfo.playlistTable;
    var playlistURN = this._cfg.itemURNPrefix + aMediaList.guid;

    // Do nothing if playlist already added.
    if (aMediaList.guid in playlistTable)
    return;

    // Get the playlist service pane node, creating one if necessary.
    var playlistNode = this._libServicePaneSvc
    .getNodeForLibraryResource(aMediaList);
    if (!playlistNode) {
    playlistNode = this._servicePaneSvc.createNode();
    playlistNode.id = playlistURN;
    }

    playlistNode.name = aMediaList.name;

    // Set the read-only property for the playlist node.
    this._setNodeReadOnly(device, playlistNode);

    // Move the playlist service pane node underneath the device service pane
    // node. Make sure the playlist nodes in alphabetical order.
    this._devServicePaneSvc.insertChildByName(device,
    playlistNode);

    // Add the playlist to the device playlist table.
    var playlistInfo = {
    devInfo: devInfo,
    mediaList: aMediaList,
    node: playlistNode
    };
    devInfo.playlistTable[aMediaList.guid] = playlistInfo;
    },


    /**
    * \brief Remove the device playlist specified by aMediaList from the list of
    * device playlists.
    *
    * \param aMediaList Device playlist to remove.
    */

    _removeDevPlaylist: function sbMSC_SPS__removeDevPlaylist(aMediaList) {
    // Remove the playlist from the device playlist table.
    var devLibInfo = this._getDevLibInfo(aMediaList.library.guid);
    if (devLibInfo)
    delete devLibInfo.devInfo.playlistTable[aMediaList.guid];
    },


    /**
    * Update the service pane for the device specified by aDevice.
    *
    * \param aDevice Device for which to update service pane.
    */

    _updateDevice: function sbMSC_SPS__updateDevice(aDevice) {
    // Get the device info. Do nothing if no device info available.
    var devInfo = this._devInfoList[aDevice.id];
    if (!devInfo)
    return;

    // Update the device node.
    this._updateDevNode(devInfo);

    // Update all device libraries.
    this._updateAllDevLibs(devInfo);
    },


    /**
    * \brief Update the device state in the service pane for the device specified
    * by aDevice.
    *
    * \param aDevice Device for which to update state.
    */

    _updateDevState: function sbMSC_SPS__updateDevState(aDevice) {
    // Get the device info.
    if (!this._devInfoList[aDevice.id])
    return;
    var devInfo = this._devInfoList[aDevice.id];
    var devNode = devInfo.svcPaneNode;

    // Get the list of device node properties.
    var devNodePropList = devNode.className.split(" ");

    // Update the device node busy property.
    devNodePropList = devNodePropList.filter
    (function(aProperty) { return aProperty != "busy"; });
    if (aDevice.state != Ci.sbIDevice.STATE_IDLE)
    devNodePropList.push("busy");

    // Determine whether or not the device is read-only
    var deviceProperties = aDevice.properties.properties;
    var accessCompatibility;
    try {
    accessCompatibility = deviceProperties.getPropertyAsAString
    ("http://songbirdnest.com/device/1.0#accessCompatibility");
    } catch (ex) {}
    if (accessCompatibility == "ro") {
    devNodePropList = devNodePropList.filter
    (function(aProperty) { return aProperty != "read-only"; });
    devNodePropList.push("read-only");
    }

    // Update the device node image.
    if (aDevice.state == Ci.sbIDevice.STATE_IDLE &&
    devInfo.idleImageURL) {
    devNode.image = devInfo.idleImageURL;
    }
    else {
    devNode.image = null;
    }
    // Write the device node properties.
    var newProps = devNodePropList.join(" ");
    if(devNode.className != newProps)
    devNode.className = newProps;
    },

    _updateAllDevState: function sbMSC_SPS__updateAllDevState() {
    for each (let devInfo in this._devInfoList) {
    this._updateDevState(devInfo.device);
    }
    },


    /**
    * Update the service pane node for the device specified by aDevInfo.
    *
    * \param aDevInfo Device for which to update service pane node.
    */

    _updateDevNode: function sbMSC_SPS__updateDevNode(aDevInfo) {
    // Get the device info.
    var device = aDevInfo.device;

    // If the device node is supposed to be hidden, hide the service pane node.
    aDevInfo.svcPaneNode.hidden = device.properties.hidden;

    // Set the device service pane node name.
    aDevInfo.svcPaneNode.name = device.name;

    // If we don't already have an image URL, then try and see if
    // the spDeviceIcon property exists now and update the idleImageURL
    // if we have a valid property value.
    if (!aDevInfo.idleImageURL) {
    try {
    var devIconUri = device.properties.getProperty("spDeviceIcon")
    .QueryInterface(Ci.nsIURI);
    aDevInfo.idleImageURL = devIconUri.spec;
    aDevInfo.svcPaneNode.image = devIconUri.spec;
    } catch (e) {
    }
    }
    },


    /**
    * Update the service pane for all device libraries belonging to the device
    * specified by aDevInfo.
    *
    * \param aDevInfo Device for which to update service pane.
    */

    _updateAllDevLibs: function sbMSC__SPS__updateAllDevLibs(aDevInfo) {
    // Get the default device library.
    var defaultDevLib = aDevInfo.device.defaultLibrary;

    // Only show the default library nodes.
    for each (let devLibInfo in aDevInfo.devLibTable) {
    // Get the device library info.
    var devLib = devLibInfo.devLib;

    // If no default library is set, use first library as default.
    if (!defaultDevLib)
    defaultDevLib = devLib;

    // Update the device library node table.
    this._updateDevLibNodeTable(devLibInfo);

    // Mark whether library nodes are for the default device library.
    var isDefault = false;
    try {
    if (devLib.equals(defaultDevLib))
    isDefault = true;
    }
    catch (ex) { }
    for each (let node in devLibInfo.devLibNodeTable) {
    if (isDefault) {
    node.className = StringSet.remove(node.className,
    "non-default-library-node");
    }
    else {
    node.className = StringSet.add(node.className,
    "non-default-library-node");
    }
    }
    }
    },


    /**
    * Update the device library node table for the library specified by
    * aDevLibInfo.
    *
    * \param aDevLibInfo Device library for which to update node table.
    */

    _updateDevLibNodeTable:
    function sbMSC_SPS__updateDevLibNodeTable(aDevLibInfo) {
    // Get the device library info.
    var devLib = aDevLibInfo.devLib;
    var devNode = aDevLibInfo.devInfo.svcPaneNode;

    // Produce the new device library node table from all device node children
    // that belong to the library.
    var newDevLibNodeTable = {};
    var childNode = devNode.firstChild;
    for (var childNode = devNode.firstChild;
    childNode;
    childNode = childNode.nextSibling) {
    // Get the child node library resource. Continue with next child if no
    // library resource.
    var libResource =
    this._libServicePaneSvc.getLibraryResourceForNode( childNode);
    if (!libResource)
    continue;

    // Get the library resource media item. Continue with next child if not
    // a media item.
    var mediaItem;
    try {
    mediaItem = libResource.QueryInterface(Ci.sbIMediaItem);
    } catch(ex) { }
    if (!mediaItem)
    continue;

    // If media item belongs to library, add the child to the node table.
    if (mediaItem.library.equals(devLib))
    newDevLibNodeTable[childNode.id] = childNode;
    }

    // Set the new device library node table.
    aDevLibInfo.devLibNodeTable = newDevLibNodeTable;
    },


    /**
    * \brief Update the list of device playlists with the playlists contained in
    * the media list specified by aMediaList.
    *
    * \param aMediaList Media list from which to update.
    */

    _updateDevPlaylists: function sbMSC_SPS__updateDevPlaylists(aMediaList) {
    // Set up an enumeration listener to collect items into a simple array.
    var enumListener = {
    itemList: [],
    onEnumerationBegin: function() { },
    onEnumerationEnd: function() { },
    onEnumeratedItem: function(aList, aItem) {
    this.itemList.push(aItem);
    }
    };

    // Create a list of media lists.
    aMediaList.enumerateItemsByProperty(SBProperties.i sList, "1", enumListener);

    // Add each media list as a device playlist.
    var length = enumListener.itemList.length;
    for (var i = 0; i < length; i++) {
    this._addDevPlaylist(enumListener.itemList[i]);
    }
    },


    /**
    * \brief Set the read-only property for the node specified by aNode as
    * appropriate for the current state of the device specified by
    * aDevice.
    *
    * \param aDevice Device for which to set node read-only property.
    * \param aNode Node for which to set read-only property.
    */

    _setNodeReadOnly: function sbMSC_SPS__setNodeReadOnly(aDevice, aNode) {
    //XXXeps implement
    },


    /**
    * \brief Convert a deviceId into its corresponding sbIDevice
    *
    * \param aDeviceID The device ID of the device to retrieve
    */

    _getDeviceForId: function sbMSC_SPS_getDeviceForId(aDeviceId) {
    if (typeof(this._devInfoList[aDeviceId]) != 'undefined')
    return this._devInfoList[aDeviceId].device;
    return null;
    },


    /**
    * \brief Retrieve the device given a service pane node
    *
    * \param aNode The service pane node to look up the device for.
    */

    _getDeviceFromNode: function sbMSC_SPS_getDeviceFromNode(aNode) {
    var deviceId = aNode.getAttributeNS(this._cfg.mscSP_NS, 'device-id');
    if ( deviceId ) {
    return this._getDeviceForId(deviceId);
    }
    return null;
    },


    /**
    * \brief given a device node return the library node for that node
    *
    * \param aNode The device node to look up the library node
    */
    _getLibraryNodeForDeviceNode: function
    sbMSC_SPS_getLibraryNodeForDeviceNode(aNode)
    {
    var device = this._getDeviceFromNode(aNode);
    if (device && device.defaultLibrary) {
    let librarySPS = Cc["@songbirdnest.com/servicepane/library;1"]
    .getService(Ci.sbILibraryServicePaneService);
    return librarySPS.getNodeForLibraryResource(device.defaul tLibrary);
    }
    return null;
    },
    };


    //------------------------------------------------------------------------------
    //
    // MSC device service pane service component services.
    //
    //------------------------------------------------------------------------------

    function NSGetModule(compMgr, fileSpec) {
    return XPCOMUtils.generateModule([sbMSC_SPS]);
    }

    ---

    If that was not what you need, let me know.

    Many thanks.

  6. #36
    Moderator
    Points: 9,818, Level: 29
    Level completed: 78%, Points required for next Level: 132
    Overall activity: 0%
    Achievements:
    1 year registeredNew Achievement!5000 Experience PointsOverdrive
    Philips - QK's Avatar
    Join Date
    Oct 2011
    Posts
    884
    Points
    9,818
    Level
    29
    Thanks
    11
    Thanked 34 Times in 30 Posts
    Rep Power
    10
    Dear Josin,

    We have looked into your log. Below is the investigation results:

    1. PSB can download the firmware from the server and save it in the cache. Therefore, there is no issue in the server.
    Error: DoRecoveryUpdate(C:\Documents and Settings\Josᅢᆵn\Configuraciᅢᄈn local\Datos de programa\Philips-Songbird\Profiles\z07ysl2v.default\firmware_cache\ v2\Philips SA3ARA\) in C:\Archivos de programa\Philips\Philips Songbird Resources\Firmware\SA3ARA\GoGearFWLibSA3ARA.dll FAILED [4]
    2. PSB however cannot get device info via DLL file and DLL failed when system try to do "DoRecoveryUpdate". (Background: when press the update/repair button, PSB will just trigger the DLL file and then all the command come from DLL.)

    Error: GetDeviceInfo(00000001000015420002DCDF7EC95542) in C:\Archivos de programa\Philips\Philips Songbird Resources\Firmware\SA3ARA\GoGearFWLibSA3ARA.dll FAILED [1]
    We have a try on the same environment, it works for us. So, it is not likely an issue related to Philips Songbird. We are sorry to tell you that it appears to be a hardware issue to us. We suggest you can contact your local support (call centre/ service centre) to continue with this as arrangement will be differ from country to country.

    With thanks & regards,
    Philips Moderation Team
    Last edited by Philips - QK; 05-17-2012 at 04:08 AM.
    Forum Mod

  7. #37
    Points: 10, Level: 1
    Level completed: 19%, Points required for next Level: 40
    Overall activity: 0%

    Join Date
    Nov 2013
    Posts
    1
    Points
    10
    Level
    1
    Thanks
    0
    Thanked 0 Times in 0 Posts
    Rep Power
    0
    Repair your philips
    Gogear Ariaz SA3ARA

    I have found the solution for this issue.Follow these steps to repair your philips
    Gogear Ariaz SA3ARA...(4Gb, 8Gb, or 16Gb).

    The problem is the file GoGearFWLibSA3ARA.dll .I think this library
    can't download properly the latest firmware of the philips gogear ariaz
    when the player is in the repair mode, or something like that.

    Then you have to repair it manually by using the 'AriaG3 Device Firmware Downloader'(StUpdaterApp_v103_20110126.exe).
    To find this files and the Ariaz firmware update file you have to:

    First download Philips songbird for the Gogear SA3ARA04K/02 from here
    (from nodevice.com not from philips support).

    After then unzip to a folder. You will get 2 files :
    sa3ara04k_02_psb_eng.exe and
    DriverUpdaterSetup-2.0.0.6004.exe

    Now install the Philips songbird file (sa3ara04k_02_psb_eng.exe).

    When finished in the folder C:\Program Files (x86)\Philips\Philips
    Songbird Resources\Firmware\SA3ARA you should have 3 files :
    GoGearFWLibSA3ARA.dll ,
    SA3ARA.rar and
    SA3ARA_release_notes.html .

    Then unzip SA3ARA.rar and you will get 3 files:
    firmware.sb,
    StUpdaterApp_v103_20110126.exe and
    updater.sb

    Lanch StUpdaterApp_v103_20110126.exe and connect gogear Ariaz in repair
    mode holding vol+ button.
    the file named firmware.sb is the firmware file for the Gogear ariaz SA3ARA v1.00

    What you are doing is to downgrade the philips ariaz to v1.00, You will have a white screen after this.
    Don't worry. Your gogear work properly with just a blank screen. After that just power on your gogear normally and connect it to the computer. Open philips songbird, Click on the philips device and at left click on support tab. Now check for update to download the latest firmware file. after download Songbird will tell you to reconnect the gogear holding the Vol+ button. then follow instruction to finsh the update. all should be ok now!

    If the update fail again after the download just go to this folder
    C:\Users\*******\AppData\Local\Philips-Songbird\Profiles\*******.default\firmware_cache\v 2
    (search on google how to show the appdata folder)

    And copy the 2 files downloded by your songbird firmware.sb and updater.sb and add them to the AriaG3 Device Firmware Downloader file (downloaded above) in another folder, run again AriaG3 Device Firmware Downloader(StUpdaterApp_v103_20110126.exe) and follow the instructions shown above to flash the gogear to the latest version of the fimware.

    Done!!!

    Hope this long tuto is useful for you!!!

Page 3 of 3 FirstFirst 123

Similar Topics

  1. SA3ARA04K/02 Philips Songbird Firmware Download error
    By PEPE46 in forum Sound: GoGear SA3-series (2011)
    Replies: 1
    Last Post: 11-08-2011, 10:18 AM
  2. Sa3rga02k/97 radio no rds
    By doumeki in forum Sound: GoGear SA3-series (2011)
    Replies: 1
    Last Post: 08-18-2011, 10:24 AM
  3. Firmware upgrade problem on 37PFL8605!!!
    By dloga in forum TV: Software 2010 models
    Replies: 19
    Last Post: 06-29-2011, 08:06 AM
  4. problem to upgrade firmware from Q522E-0.64.70.1 to Q522E-0.64.79.0
    By hok in forum TV: Software 2009 models (and older)
    Replies: 2
    Last Post: 04-21-2011, 11:40 AM
  5. problem to upgrade firmware from Q5551_0.75.60.1 to Q5551_0.140.25.0
    By jpvfjpvf in forum TV: Software 2010 models
    Replies: 6
    Last Post: 01-04-2011, 06:09 PM

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •