--- a/usb_plat/usb_shai_api/group/bld.inf Thu Sep 02 22:23:37 2010 +0300
+++ b/usb_plat/usb_shai_api/group/bld.inf Fri Sep 17 08:40:15 2010 +0300
@@ -19,6 +19,7 @@
PRJ_PLATFORMS
ARMV5
+ARMV5SMP
PRJ_EXPORTS
@@ -30,3 +31,5 @@
../inc/usb_peripheral_shai.inl SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(usb/)
../inc/usb_peripheral_shai_shared.h SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(usb/)
../inc/usb_charger_detection_shai.h SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(usb/)
+../inc/usb_charger_detection_shai_shared.h SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(usb/)
+
--- a/usb_plat/usb_shai_api/inc/usb_charger_detection_shai.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usb_plat/usb_shai_api/inc/usb_charger_detection_shai.h Fri Sep 17 08:40:15 2010 +0300
@@ -17,7 +17,7 @@
/** @file
@brief USB Charger Detection SHAI header
- @version 0.2.0
+ @version 0.3.0
This header specifies the USB Charger Detection SHAI.
@@ -30,6 +30,8 @@
// System includes
#include <kern_priv.h>
+#include <usb/usb_charger_detection_shai_shared.h> // Common types shared with upper layers
+
/**
* This macro specifies the version of the USB Charger Detection SHAI
@@ -39,139 +41,12 @@
* older environment with old USB SHAI version that is missing some
* new definitions.
*/
-#define USB_CHARGER_DETECTION_SHAI_VERSION 0x020
+#define USB_CHARGER_DETECTION_SHAI_VERSION 0x030
// The namespace is documented in file usb_common_shai.h, so it is not
// repeated here
namespace UsbShai
{
- // Data types
-
- /**
- * An enumeration listing the different port types that can be
- * reported to the PIL layer by a registered Charger Detector
- * PSL. The available types mostly correspond to those mentioned
- * in the Battery Charging Specification Revision 1.1.
- */
- enum TPortType
- {
- /**
- * This type is reported to indicate that the Charger Detector
- * PSL has detected that we are no longer connected to a
- * powered port. This situation occurs when VBUS driven from
- * outside drops, or the Accessory Charger Adapter changes the
- * RID state from RID_A to RID_GND (which usually also means
- * that VBUS will drop very soon).
- */
- EPortTypeNone = 0,
-
- /**
- * This type is reported to indicate that the Charger
- * Detector PSL has detected that our device is connected to
- * an unsupported port. One common type of an unsupported port
- * is a PS/2 to USB adapter connected to a PS/2 port of a
- * computer.
- */
- EPortTypeUnsupported,
-
- /**
- * This type is reported when the Charger Detector PSL has
- * detected that our device is connected to a charging port,
- * but has not yet distinguished whether the port is a
- * Charging Downstream Port or a Dedicated Charging Port.
- *
- * When this port type is detected, the upper layers will
- * connect to the USB bus as the peripheral by requesting the
- * Peripheral Controller PSL to assert the D+ pull-up. The
- * Charger Detector PSL can then detect the exact port type by
- * observing what happens to the level of the D- line, as
- * specified in the Battery Charging Specification. Upon
- * detecting the exact port type, the Charger Detector PSL can
- * notify a new event with the correct type.
- *
- * If the Charger Detector PSL can directly distinguish the
- * exact port type, the PSL does not need to report this
- * generic charging port type, but can directly report the
- * more specific type EPortTypeDedicatedChargingPort or
- * EPortTypeChargingDownstreamPort.
- */
- EPortTypeChargingPort,
-
- /**
- * This type is reported when the Charger Detector PSL has
- * detected that our device is connected to a Dedicated
- * Charging Port.
- *
- * When this port type is detected, the upper layers will
- * connect to the USB bus as the peripheral by requesting the
- * Peripheral Controller PSL to assert the D+ pull-up, as
- * specified in the Battery Charging Specification.
- */
- EPortTypeDedicatedChargingPort,
-
- /**
- * This type is reported when the Charger Detector PSL has
- * detected that our device is connected to a Charging
- * Downstream Port.
- *
- * When this port type is detected, the upper layers will
- * connect to the USB bus as the peripheral by requesting the
- * Peripheral Controller PSL to assert the D+ pull-up, as
- * specified in the Battery Charging Specification.
- */
- EPortTypeChargingDownstreamPort,
-
- /**
- * This type is reported when the Charger Detector PSL has
- * detected that our device is connected to a Standard
- * Downstream Port.
- *
- * When this port type is detected, the upper layers will
- * connect to the USB bus as the peripheral by requesting the
- * Peripheral Controller PSL to assert the D+ pull-up, as
- * specified in the Battery Charging Specification.
- */
- EPortTypeStandardDownstreamPort,
-
- /**
- * This type is reported when the Charger Detector PSL has
- * detected that our device is connected to the OTG port of an
- * Accessory Charger Adapter and the ID pin is in the RID_A
- * range.
- *
- * When this port type is detected in an OTG-capable device,
- * the OTG State Machine will default to the host role.
- */
- EPortTypeAcaRidA,
-
- /**
- * This type is reported when the Charger Detector PSL has
- * detected that our device is connected to the OTG port of an
- * Accessory Charger Adapter and the ID pin is in the RID_B
- * range.
- *
- * When this port type is detected, the USB Peripheral PIL
- * layer will ensure that the Peripheral Controller PSL is not
- * allowed to connect to the bus, as required by the Battery
- * Charging Specification.
- */
- EPortTypeAcaRidB,
-
- /**
- * This type is reported when the Charger Detector PSL has
- * detected that our device is connected to the OTG port of an
- * Accessory Charger Adapter and the ID pin is in the RID_C
- * range.
- *
- * When this port type is detected, the upper layers will
- * connect to the USB bus as the peripheral by requesting the
- * Peripheral Controller PSL to assert the D+ pull-up, as
- * specified in the Battery Charging Specification.
- */
- EPortTypeAcaRidC,
- };
-
-
// Class declaration
/**
@@ -204,17 +79,24 @@
* MUsbPeripheralPilCallbackIf::DeviceEventNotification(). For
* an OTG-capable port, the requirement is documented in
* usb_otg_shai.h, function
- * MOtgObserverIf::NotifyVbusState().
+ * MOtgObserverIf::NotifyIdPinAndVbusState().
*
* 2. When VBUS is high, the Charger Detector PSL needs to
* observe changes in the ID pin state, if the Charger
- * Detector PSL support detecting the port types relevant
+ * Detector PSL supports detecting the port types relevant
* to Accessory Charger Adapter. This requirement is
* documented in more detail in usb_otg_shai.h, function
- * MOtgObserverIf::NotifyIdPinState().
+ * MOtgObserverIf::NotifyIdPinAndVbusState().
+ *
+ * 3. When our device has been detached from a reported port
+ * type (for example, the Charger Detector PSL reported
+ * port type for Standard Downstream Port and later VBUS
+ * drops indicating disconnect), the Charger Detector PSL
+ * must report the disconnection by notifying port type
+ * EPortTypeNone.
*
* @param aPortType The type of the port detected
- */
+ */
virtual void NotifyPortType( TPortType aPortType ) = 0;
};
@@ -241,20 +123,20 @@
* Controller PSL, or at least that the Peripheral Controller PSL
* is communicating with the Charger Detector PSL. This is
* necessary to ensure that the necessary parts of charger
- * detection are run before reporting VBUS high, and that the
- * Peripheral Controller and the charger detection can safely
- * share the bus without conflict (as both will need to touch the
- * line state). See usb_peripheral_shai.h,
+ * detection are run before reporting VBUS high (when Data Contact
+ * Detect is supported), and that the Peripheral Controller and
+ * the charger detection can safely share the bus without conflict
+ * (as both will need to touch the line state). See
+ * usb_peripheral_shai.h,
* MUsbPeripheralPilCallbackIf::DeviceEventNotification() for
- * description of the requirements.
+ * description of the requirements for peripheral-only PSLs.
*
* Similarly, it is expected that the Charger Detector interface
* for an OTG-capable port is implemented by the OTG Controller
* PSL, or at least that the OTG Controller PSL is communicating
* with the Charger Detector PSL. See usb_otg_shai.h,
- * MOtgObserverIf::NotifyIdPinState() and
- * MOtgObserverIf::NotifyVbusState() for description of the
- * requirements.
+ * MOtgObserverIf::NotifyIdPinAndVbusState() for description of
+ * the requirements for OTG-capable PSLs.
*
* When the PIL layer is ready to receive charger detection
* notifications from the PSL, it will use this interface to
@@ -283,85 +165,6 @@
/**
- * This class specifies the information provided by a Charger
- * Detector PSL when registering to the PIL layer.
- *
- * The PSL should prepare for the possibility that members may be
- * added to the end of this class in later SHAI versions if new
- * information is needed to support new features. The PSL should
- * not use this class as a direct member in an object that is not
- * allowed to grow in size due to binary compatibility reasons.
- *
- * @see UsbChargerDetectionPil::RegisterChargerDetector()
- */
- NONSHARABLE_CLASS( TChargerDetectorProperties )
- {
- public: // Types and constants
- /**
- * A bitmask type used to indicate the static capabilities of
- * the Charger Detector.
- */
- typedef TUint32 TChargerDetectorCaps;
-
- /**
- * Capability bit to indicate whether the USB system below the
- * SHAI (either in HW or in the low-level SW) supports
- * automatically reducing charging current for the duration of
- * the USB high-speed chirp signalling. See Battery Charging
- * Specification Revision 1.1, Chapter 3.6.2 for description
- * of the problem.
- *
- * If the system does not support this feature, the upper
- * layer USB components that calculate available charging
- * current will always limit the charging current taken from a
- * Charging Downstream Port so that the maximum current during
- * chirp is not violated.
- *
- * If the system supports this feature, the full available
- * charging current from a Charging Downstream Port is
- * utilized. It is then the responsibility of the HW or some
- * low-level SW below to SHAI to ensure that the charging
- * current is automatically reduced for the duration of chirp
- * signalling.
- *
- * If the system supports this feature, the PSL shall set the
- * corresponding bit in iCapabilities (by bitwise OR'ing this
- * value). Otherwise the PSL shall clear the corresponding bit
- * in iCapabilities.
- */
- static const TChargerDetectorCaps KChargerDetectorCapChirpCurrentLimiting = 0x00000001;
-
- public:
- /**
- * Inline constructor for the Charger Detector properties
- * object. This is inline rather than an exported function to
- * prevent a binary break in a case where an older PSL binary
- * might provide the constructor a smaller object due to the
- * PSL being compiled against an older version of the SHAI
- * header. When it's inline, the function is always in sync
- * with the object size.
- *
- * We slightly violate the coding conventions which say that
- * inline functions should be in their own file. We don't want
- * to double the number of USB SHAI headers just for sake of a
- * trivial constructor.
- */
- inline TChargerDetectorProperties() :
- iCapabilities(0)
- {
- };
-
- public: // Data
- /**
- * A bitmask specifying the static capabilities of this
- * Charger Detector. The PSL fills this field by bitwise
- * OR'ing the TChargerDetectorCaps capability bits
- * corresponding to supported features.
- */
- TChargerDetectorCaps iCapabilities;
- };
-
- /**
* A static class implemented by the USB PIL layer to allow the
* PSL layer to register its charger detector component to the PIL
* layer.
@@ -383,13 +186,14 @@
* bootup).
*
* @param aChargerDetector Reference to the Charger Detector
- * interface implemented by the registering PSL.
+ * interface implemented by the registering PSL. The PIL
+ * layer requires that the supplied reference remains valid
+ * indefinitely, as the Charger Detector PSL cannot unregister.
*
* @param aProperties Reference to an object describing the
- * static properties of the Charger Detector. The PIL layer
- * requires that the supplied reference remains valid
- * indefinitely, as the registering Charger Detector cannot
- * unregister.
+ * static properties of the Charger Detector. The PIL takes
+ * a copy and the PSL is free to release the properties
+ * object upon return.
*
* @lib usbperipheralpil.lib
*/
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usb_plat/usb_shai_api/inc/usb_charger_detection_shai_shared.h Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,253 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+/** @file
+ @brief USB Charger Detection SHAI shared constants and types
+ @version 0.3.0
+
+ This header specifies USB Charger Detection SHAI common types and
+ constants used by both the kernel side code and user side code. It
+ is automatically included by the USB Charger Detection SHAI header
+ and is not intended to be directly included by SHAI
+ implementations.
+
+ The file is versioned for the sake of the human reader and follows
+ the version of the USB Charger Detection SHAI header
+ usb_charger_detection_shai.h.
+
+ @publishedDeviceAbstraction
+*/
+
+
+#ifndef USB_CHARGER_DETECTION_SHAI_SHARED_H
+#define USB_CHARGER_DETECTION_SHAI_SHARED_H
+
+
+// The namespace is documented in file usb_common_shai.h, so it is not
+// repeated here
+namespace UsbShai
+ {
+ // Data types
+
+ /**
+ * An enumeration listing the different port types that can be
+ * reported to the PIL layer by a registered Charger Detector
+ * PSL. The available types mostly correspond to those mentioned
+ * in the Battery Charging Specification Revision 1.1.
+ */
+ enum TPortType
+ {
+ /**
+ * This type is reported to indicate that the Charger Detector
+ * PSL has detected that we are no longer connected to a
+ * powered port. This situation occurs when VBUS driven from
+ * outside drops, or the Accessory Charger Adapter changes the
+ * RID state from RID_A to RID_GND (which usually also means
+ * that VBUS will drop very soon).
+ */
+ EPortTypeNone = 0,
+
+ /**
+ * This type is reported to indicate that the Charger
+ * Detector PSL has detected that our device is connected to
+ * an unsupported port. One common type of an unsupported port
+ * is a PS/2 to USB adapter connected to a PS/2 port of a
+ * computer.
+ */
+ EPortTypeUnsupported,
+
+ /**
+ * This type is reported when the Charger Detector PSL has
+ * detected that our device is connected to a charging port,
+ * but has not yet distinguished whether the port is a
+ * Charging Downstream Port or a Dedicated Charging Port.
+ *
+ * When this port type is detected, the upper layers will
+ * connect to the USB bus as the peripheral by requesting the
+ * Peripheral Controller PSL to assert the D+ pull-up. The
+ * Charger Detector PSL can then detect the exact port type by
+ * observing what happens to the level of the D- line, as
+ * specified in the Battery Charging Specification. Upon
+ * detecting the exact port type, the Charger Detector PSL can
+ * notify a new event with the correct type.
+ *
+ * If the Charger Detector PSL can directly distinguish the
+ * exact port type, the PSL does not need to report this
+ * generic charging port type, but can directly report the
+ * more specific type EPortTypeDedicatedChargingPort or
+ * EPortTypeChargingDownstreamPort.
+ */
+ EPortTypeChargingPort,
+
+ /**
+ * This type is reported when the Charger Detector PSL has
+ * detected that our device is connected to a Dedicated
+ * Charging Port.
+ *
+ * When this port type is detected, the upper layers will
+ * connect to the USB bus as the peripheral by requesting the
+ * Peripheral Controller PSL to assert the D+ pull-up, as
+ * specified in the Battery Charging Specification.
+ */
+ EPortTypeDedicatedChargingPort,
+
+ /**
+ * This type is reported when the Charger Detector PSL has
+ * detected that our device is connected to a Charging
+ * Downstream Port.
+ *
+ * When this port type is detected, the upper layers will
+ * connect to the USB bus as the peripheral by requesting the
+ * Peripheral Controller PSL to assert the D+ pull-up, as
+ * specified in the Battery Charging Specification.
+ */
+ EPortTypeChargingDownstreamPort,
+
+ /**
+ * This type is reported when the Charger Detector PSL has
+ * detected that our device is connected to a Standard
+ * Downstream Port.
+ *
+ * When this port type is detected, the upper layers will
+ * connect to the USB bus as the peripheral by requesting the
+ * Peripheral Controller PSL to assert the D+ pull-up, as
+ * specified in the Battery Charging Specification.
+ */
+ EPortTypeStandardDownstreamPort,
+
+ /**
+ * This type is reported when the Charger Detector PSL has
+ * detected that our device is connected to the OTG port of an
+ * Accessory Charger Adapter and the ID pin is in the RID_A
+ * range.
+ *
+ * When this port type is detected in an OTG-capable device,
+ * the OTG State Machine will default to the host role.
+ */
+ EPortTypeAcaRidA,
+
+ /**
+ * This type is reported when the Charger Detector PSL has
+ * detected that our device is connected to the OTG port of an
+ * Accessory Charger Adapter and the ID pin is in the RID_B
+ * range.
+ *
+ * When this port type is detected, the USB Peripheral PIL
+ * layer will ensure that the Peripheral Controller PSL is not
+ * allowed to connect to the bus, as required by the Battery
+ * Charging Specification.
+ */
+ EPortTypeAcaRidB,
+
+ /**
+ * This type is reported when the Charger Detector PSL has
+ * detected that our device is connected to the OTG port of an
+ * Accessory Charger Adapter and the ID pin is in the RID_C
+ * range.
+ *
+ * When this port type is detected, the upper layers will
+ * connect to the USB bus as the peripheral by requesting the
+ * Peripheral Controller PSL to assert the D+ pull-up, as
+ * specified in the Battery Charging Specification.
+ */
+ EPortTypeAcaRidC,
+ };
+
+
+ /**
+ * This class specifies the information provided by a Charger
+ * Detector PSL when registering to the PIL layer.
+ *
+ * The PSL should prepare for the possibility that members may be
+ * added to the end of this class in later SHAI versions if new
+ * information is needed to support new features. The PSL should
+ * not use this class as a direct member in an object that is not
+ * allowed to grow in size due to binary compatibility reasons.
+ *
+ * @see UsbChargerDetectionPil::RegisterChargerDetector()
+ */
+ NONSHARABLE_CLASS( TChargerDetectorProperties )
+ {
+ public: // Types and constants
+ /**
+ * A bitmask type used to indicate the static capabilities of
+ * the Charger Detector.
+ */
+ typedef TUint32 TChargerDetectorCaps;
+
+ /**
+ * Capability bit to indicate whether the USB system below the
+ * SHAI (either in HW or in the low-level SW) supports
+ * automatically reducing charging current for the duration of
+ * the USB high-speed chirp signalling. See Battery Charging
+ * Specification Revision 1.1, Chapter 3.6.2 for description
+ * of the problem.
+ *
+ * If the system does not support this feature, the upper
+ * layer USB components that calculate available charging
+ * current will always limit the charging current taken from a
+ * Charging Downstream Port so that the maximum current during
+ * chirp is not violated.
+ *
+ * If the system supports this feature, the full available
+ * charging current from a Charging Downstream Port is
+ * utilized. It is then the responsibility of the HW or some
+ * low-level SW below to SHAI to ensure that the charging
+ * current is automatically reduced for the duration of chirp
+ * signalling.
+ *
+ * If the system supports this feature, the PSL shall set the
+ * corresponding bit in iCapabilities (by bitwise OR'ing this
+ * value). Otherwise the PSL shall clear the corresponding bit
+ * in iCapabilities.
+ */
+ static const TChargerDetectorCaps KChargerDetectorCapChirpCurrentLimiting = 0x00000001;
+
+ public:
+ /**
+ * Inline constructor for the Charger Detector properties
+ * object. This is inline rather than an exported function to
+ * prevent a binary break in a case where an older PSL binary
+ * might provide the constructor a smaller object due to the
+ * PSL being compiled against an older version of the SHAI
+ * header. When it's inline, the function is always in sync
+ * with the object size.
+ *
+ * We slightly violate the coding conventions which say that
+ * inline functions should be in their own file. We don't want
+ * to double the number of USB SHAI headers just for sake of a
+ * trivial constructor.
+ */
+ inline TChargerDetectorProperties() :
+ iCapabilities(0)
+ {
+ };
+
+ public: // Data
+ /**
+ * A bitmask specifying the static capabilities of this
+ * Charger Detector. The PSL fills this field by bitwise
+ * OR'ing the TChargerDetectorCaps capability bits
+ * corresponding to supported features.
+ */
+ TChargerDetectorCaps iCapabilities;
+ };
+ };
+
+#endif //USB_CHARGER_DETECTION_SHAI_SHARED_H
+// END of file
+
--- a/usb_plat/usb_shai_api/inc/usb_host_shai.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usb_plat/usb_shai_api/inc/usb_host_shai.h Fri Sep 17 08:40:15 2010 +0300
@@ -17,7 +17,7 @@
/** @file
@brief USB Host SHAI header
- @version 0.2.0
+ @version 0.3.0
This header specifies the USB host SHAI.
@@ -40,7 +40,7 @@
* environment with old USB SHAI version that is missing some new
* definitions.
*/
-#define USB_HOST_SHAI_VERSION 0x020
+#define USB_HOST_SHAI_VERSION 0x030
// The namespace is documented in file usb_common_shai.h, so it is not
// repeated here
@@ -56,99 +56,47 @@
// Data types
/**
- * An enumeration listing the host role electrical test modes
- * supported. These correspond to the test modes specified in
- * Section "6.4.1.1 Test Modes" of the "On-The-Go and Embedded
- * Host Supplement to the USB Revision 2.0 Specification" Revision
- * 2.0 (a.k.a. USB OTG 2.0).
+ * An enumeration listing the host role electrical test modes that
+ * require special support from the host controller. These
+ * correspond to the test modes specified in Section "6.4.1.1 Test
+ * Modes" of the "On-The-Go and Embedded Host Supplement to the
+ * USB Revision 2.0 Specification" Revision 2.0 (a.k.a. USB OTG
+ * 2.0).
+ *
+ * The single-step control transfer tests are performed as
+ * transfers on the control pipe, but a special transfer flag
+ * THostTransfer::KSingleStepControlDelayedDataPhase requests the
+ * Host Controller PSL to delay the DATA phase when needed.
+ *
+ * Suspend and resume tests are performed using the normal suspend
+ * and resume functionality in the USB Host SHAI, so they are not
+ * a special case for the Host Controller PSL.
*
* @see MHostControllerIf::EnterHostTestMode()
*/
enum THostTestMode
{
/**
- * Drive SE0 until host controller is reset. The call returns
- * immediately after enabling the test mode.
+ * Drive SE0 until the host controller is reset.
*/
ETestModeTestSE0NAK = 0,
/**
- * Drive high-speed J until host controller is reset. The call
- * returns immediately after enabling the test mode.
+ * Drive high-speed J until the host controller is reset.
*/
ETestModeTestJ,
/**
- * Drive high-speed K until host controller is reset. The call
- * returns immediately after enabling the test mode.
+ * Drive high-speed K until the host controller is reset.
*/
ETestModeTestK,
/**
- * Send test packets until host controller is reset. The
+ * Send test packets until the host controller is reset. The
* format of the required test packet is specified in Section
* "7.1.20 Test Mode Support" of the USB 2.0 specification.
- *
- * The call returns immediately after enabling the test
- * mode.
*/
- ETestModeTestPacket,
-
- /**
- * Suspend and resume the port with 15 second delays to allow
- * the operator to adjust test tool settings. The Host
- * Controller PSL must perform the following test steps:
- *
- * 1. Allow SOFs to continue for 15 seconds.
- *
- * 2. Suspend the port under test.
- *
- * 3. Wait for 15 seconds.
- *
- * 4. Resume the port under test.
- *
- * This test mode is synchronous, i.e. the call returns after
- * the test has been completed.
- */
- ETestModeHsHostPortSuspendResume,
-
- /**
- * Perform a single-step GetDescriptor(Device) transfer. This
- * is called after the USB Host Stack has enumerated a device
- * with VID=0x1A0A and PID=0x0107. The Host Controller PSL
- * must perform the following test steps:
- *
- * 1. Allow SOFs to continue for 15 seconds.
- *
- * 2. Send a complete GetDescriptor(Device) transfer
- *
- * This test mode is synchronous, i.e. the call returns after
- * the test has been completed.
- */
- ETestModeSingleStepGetDeviceDescriptor,
-
- /**
- * Perform a single-step GetDescriptor(Device) transfer with a
- * delayed data phase. This is called after the USB Host Stack
- * has enumerated a device with VID=0x1A0A and PID=0x0108. The
- * Host Controller PSL must perform the following test steps:
- *
- * 1. Send the SETUP packet for GetDescriptor(Device). The
- * device ACKs the packet as usual.
- *
- * 2. Allow SOFs to continue for 15 seconds.
- *
- * 3. Send the IN token for the data phase of
- * GetDescriptor(Device). The device responds with
- * the data.
- *
- * 4. Send the acknowledgement (zero-length OUT data) in
- * response to the data.
- *
- * This test mode is synchronous, i.e. the call returns after
- * the test has been completed.
- */
- ETestModeSingleStepGetDeviceDescriptorData
+ ETestModeTestPacket
};
@@ -208,7 +156,13 @@
*/
NONSHARABLE_CLASS( THostPipe )
{
- public:
+ public: // Types and constants
+ /**
+ * A bitmask type used to indicate some boolean properties of
+ * the endpoint targeted by this pipe.
+ */
+ typedef TUint32 TEndpointFlags;
+
// These are flag constants that specify the values that can
// be bitwise OR'ed to the endpoint flags field iEndpointFlags
// to indicate some boolean parameters of the endpoint
@@ -225,14 +179,14 @@
* KHubHasMultipleTTs specifies whether the hub has been
* configured to use multiple transaction translators.
*/
- static const TUint32 KHubTranslates = 0x00000001;
+ static const TEndpointFlags KHubTranslates = 0x00000001;
/**
* When the iEndpointFlags flag KHubTranslates is set, this
* flag is set if the hub has multiple transaction
* translators.
*/
- static const TUint32 KHubHasMultipleTTs = 0x00000002;
+ static const TEndpointFlags KHubHasMultipleTTs = 0x00000002;
public: // Data
/**
@@ -245,7 +199,7 @@
TUint iMaxPacketSize;
/** Flags specifying some boolean parameters of the endpoint */
- TUint32 iEndpointFlags;
+ TEndpointFlags iEndpointFlags;
/**
* The speed (low, full, high) to use for this endpoint. This
@@ -304,48 +258,88 @@
*/
NONSHARABLE_CLASS( THostTransfer )
{
- public:
+ public: // Types and constants
+ /**
+ * A bitmask type used to indicate some boolean properties of
+ * a transfer.
+ */
+ typedef TUint32 TTransferFlags;
+
// These are public constants that specify the values that can
// be bitwise OR'ed to the request flags field iRequestFlags
// to indicate some boolean parameters of the transfer
/**
- * When set, specifies that the transfer direction is IN,
- * i.e. the host is reading from the connected device. This is
- * needed for endpoint zero, which is bi-directional and
- * cannot implicitly know the direction of the transfer.
+ * This flag is set or cleared by the PIL layer and is only
+ * relevant for bi-directional pipes, i.e. control pipes
+ * performing control transfers. The bit is not set for other
+ * endpoint types.
+ *
+ * For a control transfer, this bit is set to specify that the
+ * transfer direction is IN, i.e. the host is reading from the
+ * connected device. For a control transfer with the bit
+ * cleared, the transfer direction is OUT, i.e. the host is
+ * writing to the connected device.
*
* This bit is set or cleared by the USB Host stack before
* issuing a new transfer.
*/
- static const TUint32 KTransferDirIsIN = 0x00000001;
+ static const TTransferFlags KTransferDirIsIN = 0x00000001;
/**
- * For OUT endpoint transfers, indicates whether the Host
- * Controller PSL is required to force a short packet at the
- * end of the transfer.
+ * This flag is set or cleared by the PIL layer and is only
+ * relevant for bi-directional pipes, i.e. control pipes
+ * performing control transfers. The bit is not set for other
+ * endpoint types.
+ *
+ * For a control transfer, this bit is set to specify that the
+ * transfer is a special single-step transfer with a delayed
+ * data phase. This type of transfer is only used during the
+ * high-speed host electrical tests.
+ *
+ * When this flag is set, the Host Controller PSL should
+ * perform the transfer like it normally would, except that it
+ * must have a 15 second delay between the completion of the
+ * SETUP phase and the sending of the first IN token for the
+ * DATA phase.
+ *
+ * For description and background of the usage of this special
+ * transfer option, see the OTG 2.0 Supplement Section 6.4.1.1
+ * Test Modes, and specifically the test
+ * SINGLE_STEP_GET_DEVICE_DESCRIPTOR_DATA.
+ *
+ * This bit is set or cleared by the USB Host stack before
+ * issuing a new transfer.
+ */
+ static const TTransferFlags KSingleStepControlDelayedDataPhase = 0x00000002;
+
+ /**
+ * This flag is set or cleared by the PIL layer before issuing
+ * a new transfer and is relevant for OUT transfers on bulk,
+ * interrupt, and control pipes. It is never set for transfers
+ * on isochronous pipes.
+ *
+ * For bulk, interrupt, or control OUT endpoint transfers,
+ * indicates whether the Host Controller PSL is required to
+ * force a short packet at the end of the transfer.
*
* When the bit is set, the Host Controller PSL must send a
* ZLP (Zero-Length Packet) after the last packet of the
* transfer, if and only if the last packet was a full packet,
* i.e. had the same size as the maximum packet size for the
* endpoint.
- *
- * This bit is set or cleared by the USB Host stack before
- * issuing a new transfer.
*/
- static const TUint32 KOutForceShortPacket = 0x00000002;
+ static const TTransferFlags KOutForceShortPacket = 0x00000002;
/**
- * For IN endpoint transfers, indicates whether the transfer
- * was terminated with a ZLP (Zero-Length Packet).
+ * This flag is set or cleared by the Host Controller PSL
+ * before completing the transfer and is only relevant for IN
+ * pipes.
*
- * This bit is set by the Host Controller PSL before
- * completing the transfer if the transfer ended due to a
- * ZLP. Otherwise the bit is cleared by the Host Controller
- * PSL.
+ * For IN endpoint transfers, this flag indicates whether the
+ * transfer was terminated with a ZLP (Zero-Length Packet).
*/
- static const TUint32 KInZlpReceived = 0x00000004;
+ static const TTransferFlags KInZlpReceived = 0x00000004;
/**
* Enumeration specifying the packet status values to be used
@@ -389,7 +383,7 @@
* Request flags specifying some boolean parameters for the
* transfer.
*/
- TUint32 iRequestFlags;
+ TTransferFlags iRequestFlags;
/**
* Memory block specifying the memory buffer used for the data
@@ -579,6 +573,16 @@
* the callback interface is provided in the member
* THostTransfer::iTransferCbIf of the supplied aTransferInfo.
*
+ * To maximize throughput, the PIL layer may call
+ * StartTransfer() directly from a previous completion call
+ * (see description in
+ * MHostTransferCallbackIf::CompleteTransfer()). To prevent
+ * recursion, the PSL should not call
+ * MHostTransferCallbackIf::CompleteTransfer() directly from
+ * within the MHostPipeIf::StartTransfer() call, but should
+ * instead queue a DFC to complete the transfer, if
+ * immediately completed.
+ *
* The following rules shall be used by the Host Controller
* PSL to assess the completeness of a transfer:
*
@@ -710,13 +714,6 @@
* Host Stack will suspend the entire host controller by
* calling MHostControllerIf::SuspendController().
*
- * When the root hub only has one port and SOFs cannot be
- * gated on the port without suspending the whole controller,
- * the Host Controller PSL should ignore the port-specific
- * suspend and resume calls and instead suspend/resume the
- * controller based on the controller-specific suspend and
- * resume calls in MHostControllerIf.
- *
* @param aPort The number of the root hub port to operate
* on. For a root hub with N ports, the port numbers are in
* range [1..N].
@@ -737,12 +734,17 @@
* host controller by calling
* MHostControllerIf::ResumeController().
*
- * When the root hub only has one port and SOFs cannot be
- * gated on the port without suspending the whole controller,
- * the Host Controller PSL should ignore the port-specific
- * suspend and resume calls and instead suspend/resume the
- * controller based on the controller-specific suspend and
- * resume calls in MHostControllerIf.
+ * This function is synchronous and should return when the
+ * resume signalling on the port has completed.
+ *
+ * This function is also called when the Host Controller PSL
+ * has reported detection of a remote wakeup on a port of the
+ * root hub. This is to make sure the host port takes over
+ * driving the resume on the bus. The Host Controller PSL or
+ * the HW may have already started driving resume upon
+ * detecting the remote wakeup, in which case the PSL only
+ * needs to wait in this function until the resume signalling
+ * has been completed.
*
* @param aPort The number of the root hub port to operate
* on. For a root hub with N ports, the port numbers are in
@@ -887,18 +889,22 @@
/**
* Place the host controller to the USB suspend state where it
- * does not send SOF packets.
+ * does not send SOF packets. The Host Controller PSL may also
+ * go into a power-saving mode where it for example shuts down
+ * some clocks needed by the host controller when active. The
+ * Host Controller PSL must still ensure that the host
+ * controller or the root hub will be capable of detecting
+ * device disconnection and remote wakeup when suspended.
*/
virtual void SuspendController() = 0;
/**
- * Resume the host controller from the USB suspend state by
- * driving the resume signalling towards the root hub. The
- * signalling must last at least 20 milliseconds and follow
- * the requirements specified in USB 2.0 Specification Section
- * 7.1.7.7 Resume Signaling. After the resume signalling has
- * completed, the controller must allow SOFs to be sent to the
- * connected device again.
+ * Resume the host controller from the suspend state. If the
+ * Host Controller PSL put the host controller into a
+ * power-saving state by shutting down some clocks, the PSL
+ * can re-enable them in this call. This call shall not result
+ * in resume signalling to be driven on the bus, as that
+ * should be done from MRootHubIf::ResumePort().
*/
virtual void ResumeController() = 0;
@@ -910,21 +916,17 @@
* operating in high-speed mode and a special test device has
* been enumerated.
*
- * When called, the Host Controller PSL shall synchronously
- * run the selected test as specified for each tests in the
- * documentation of THostTestMode.
+ * The function shall return immediately when the controller
+ * has been set to the requested test mode. The host
+ * controller is expected to remain in the test mode until it
+ * is shutdown by a call to StopHostController().
*
* @param aTestMode Specifies the test mode to enter
*
- * @param aDefaultPipe Information of the default pipe (the
- * control pipe to endpoint zero) of the connected test
- * device.
- *
* @return KErrNone if the specified test mode was entered
* successfully, otherwise a system-wide error
*/
- virtual TInt EnterHostTestMode( THostTestMode aTestMode,
- const THostPipe& aDefaultPipe ) = 0;
+ virtual TInt EnterHostTestMode( THostTestMode aTestMode ) = 0;
/**
* Get the size and alignment requirements for the Host
@@ -1153,6 +1155,14 @@
* Complete a transfer request that had been set up with
* MHostPipeIf::StartTransfer().
*
+ * To maximize throughput, the PIL layer may set up the next
+ * transfer by calling MHostPipeIf::StartTransfer()
+ * immediately from within this completion function. The PSL
+ * has to be prepared for this and make sure it does not upon
+ * return of the callback accidentally clean up some internal
+ * state belonging to a new transfer started during the
+ * callback.
+ *
* @param aTransferInfo The transfer information that
* identifies the transfer that has completed
*/
@@ -1251,7 +1261,7 @@
/**
* A static class implemented by the USB Host PIL layer to allow
- * the host controller PSL to register to the PIL layer.
+ * the Host Controller PSL to register to the PIL layer.
*/
NONSHARABLE_CLASS( UsbHostPil )
{
@@ -1270,12 +1280,14 @@
* runs during bootup).
*
* @param aHostControllerIf Reference to the Host Controller
- * interface implemented by the registering PSL.
+ * interface implemented by the registering PSL. The PIL layer
+ * requires that the supplied reference remains valid
+ * indefinitely, as the Host Controller cannot unregister.
*
* @param aProperties Reference to an object describing the
- * static properties of the Host Controller. The PIL layer
- * requires that the supplied reference remains valid
- * indefinitely, as a Host Controller cannot unregister.
+ * static properties of the Host Controller. The PIL takes a
+ * copy and the PSL is free to release the properties object
+ * upon return.
*
* @lib usbotghostpil.lib
*/
--- a/usb_plat/usb_shai_api/inc/usb_otg_shai.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usb_plat/usb_shai_api/inc/usb_otg_shai.h Fri Sep 17 08:40:15 2010 +0300
@@ -17,7 +17,7 @@
/** @file
@brief USB OTG SHAI header
- @version 0.2.0
+ @version 0.3.0
This header specifies the USB OTG SHAI.
@@ -40,7 +40,7 @@
* environment with old USB SHAI version that is missing some new
* definitions.
*/
-#define USB_OTG_SHAI_VERSION 0x020
+#define USB_OTG_SHAI_VERSION 0x030
// The namespace is documented in file usb_common_shai.h, so it is not
// repeated here
@@ -74,10 +74,8 @@
* Reporting an ACA state via the ID pin notification mechanism is
* not a substitute for reporting port type detection via the USB
* Charger Detection SHAI that is documented separately in
- * usb_charger_detection_shai.h. When ACA is supported, it is
- * required that the Charger Detector PSL guarantees that the OTG
- * Observer gets notified of the ID pin state before reporting the
- * port type to the Charger Detector Observer.
+ * usb_charger_detection_shai.h. See documentation of
+ * MOtgObserverIf::NotifyIdPinAndVbusState() for more details.
*
* @see usb_charger_detection_shai.h
*/
@@ -242,6 +240,14 @@
* current VBUS and ID states to the observer to get the
* status of the OTG stack up to date.
*
+ * If the OTG Controller PSL has detected that we are attached
+ * to a bad device already before the OTG Observer was set by
+ * this function, the PSL needs to immediately report ID
+ * floating and VBUS low, and report the bad device by calling
+ * MOtgObserverIf::NotifyBadDeviceAttached(). See the
+ * documentation of MOtgObserverIf::NotifyBadDeviceAttached()
+ * for more information on the detection of bad devices.
+ *
* @param aObserver Pointer to the observer interface to use,
* or NULL when the OTG stack is being unloaded.
*/
@@ -353,12 +359,13 @@
{
public:
/**
- * Notify the current ID-pin state to the OTG stack. This
- * needs to be called by the OTG Controller PSL everytime
- * there is a change in the ID pin level. Redundant
- * notifications that don't change the previously reported
- * state are silently ignored, so the function is safe to call
- * without worrying about extra calls.
+ * Notify the current ID-pin and VBUS state to the OTG
+ * stack. This needs to be called by the OTG Controller PSL
+ * everytime there is a change in the ID pin or VBUS
+ * level. Redundant notifications that don't change the
+ * previously reported state are silently ignored, so the
+ * function is safe to call without worrying about extra
+ * calls.
*
* When USB Battery Charging is supported on the OTG-capable
* port, there is a dependency between normal USB
@@ -369,52 +376,38 @@
* communicate with the Charger Detector PSL (which it may
* implement itself) with respect to VBUS and ID pin events.
*
- * For ID pin events that indicate connection to an Accessory
- * Charger Adapter, it is required that the port type is first
- * notified to the Charger Detector PSL Observer, followed by
- * notifying the ID pin state to the OTG Observer (via this
- * function).
- *
- * @param aIdPinState The current ID-pin state
- */
- virtual void NotifyIdPinState( TIdPinState aIdPinState ) = 0;
-
- /**
- * Notify the current VBUS state to the OTG stack. This needs
- * to be called by the OTG Controller PSL everytime there is a
- * change in the VBUS level. Redundant notifications that
- * don't change the previously reported state are silently
- * ignored, so the function is safe to call without worrying
- * about extra calls.
- *
- * When USB Battery Charging is supported on the OTG-capable
- * port, there is a dependency between normal USB
- * functionality and USB Battery Charging (see
- * usb_charger_detection_shai.h and specifically the
- * description of class MChargerDetectorIf). In this case it
- * is the responsibility of the OTG Controller PSL to
- * communicate with the Charger Detector PSL (which it may
- * implement itself) with respect to VBUS and ID pin events.
+ * Due to Accessory Charger Adapter specified in Battery
+ * Charging 1.1, the ID pin state is relevant for both
+ * charging and OTG. The USB OTG SHAI and the USB Charger
+ * Detection SHAI receive the ID pin notifications from the
+ * PSL independently. For ID and VBUS events that indicate
+ * connection to an Accessory Charger Adapter, it is required
+ * that a BC 1.1 capable PSL reports the state to both the
+ * Charger Detector PSL Observer (via
+ * MChargerDetectorObserverIf::NotifyPortType), and the OTG
+ * Observer (via this function). The reporting order is not
+ * significant and can be freely chosen by the PSL.
*
* When VBUS rises on the OTG-capable port that is currently
* the B-device and fully supports Battery Charging
* Specification Revision 1.1, the Charger Detector PSL and
* the OTG Controller PSL need to together guarantee that Data
* Contact Detect is completed and the port type detected
- * before reporting VBUS rising. When the port type is known,
- * the port type needs to be notified to the Charger Detector
- * PSL Observer, followed by notifying the VBUS state to the
- * OTG Observer (via this function).
+ * before reporting the ID and VBUS state. When the port type
+ * is known, the port type needs to be notified to the Charger
+ * Detector PSL Observer, followed by notifying the ID and
+ * VBUS state to the OTG Observer (via this function).
*
- * Where Data Contact Detect is not supported, the VBUS rise
- * event needs to be notified to the OTG Observer (via this
- * function) immediately and charger detection needs to
- * proceed in parallel with the upper layers preparing the USB
- * personality. This is necessary in order to ensure that we
- * can fulfill the requirement to connect to the bus within a
- * second, while still making as long as possible charger
- * detection cycle to minimize the changes of false detections
- * due to datalines not making contact yet.
+ * Where Data Contact Detect is not supported, the initial
+ * B-device VBUS rise event needs to be notified to the OTG
+ * Observer (via this function) immediately and charger
+ * detection needs to proceed in parallel with the upper
+ * layers preparing the USB personality. This is necessary in
+ * order to ensure that we can fulfill the requirement to
+ * connect to the bus within a second, while still making as
+ * long as possible charger detection cycle to minimize the
+ * chances of false detections due to datalines not making
+ * contact yet.
*
* The OTG Controller PSL, the Peripheral Controller PSL and
* the Charger Detector PSL need to together guarantee that
@@ -425,9 +418,11 @@
* MPeripheralControllerIf::PeripheralConnect(), the
* Peripheral Controller PSL must connect to the bus.
*
+ * @param aIdPinState The current ID-pin state
* @param aVbusState The current VBUS state
*/
- virtual void NotifyVbusState( TVbusState aVbusState ) = 0;
+ virtual void NotifyIdPinAndVbusState( TIdPinState aIdPinState,
+ TVbusState aVbusState ) = 0;
/**
* When operating as the A-device with VBUS low, notify the
@@ -581,33 +576,38 @@
* function (or an equivalent code that runs during bootup).
*
* @param aOtgControllerIf Reference to the OTG Controller
- * interface implemented by the registering PSL.
+ * interface implemented by the registering PSL. The PIL
+ * layer requires that the supplied reference remains valid
+ * indefinitely, as the OTG Controller cannot unregister.
*
* @param aOtgProperties Reference to an object describing the
- * static properties of the OTG Controller. The PIL layer
- * requires that the supplied reference remains valid
- * indefinitely, as an OTG Controller cannot unregister.
+ * static properties of the OTG Controller. The PIL takes a
+ * copy and the PSL is free to release the properties object
+ * upon return.
*
* @param aPeripheralControllerIf Reference to the Peripheral
* Controller interface implemented by the PSL controlling the
* Peripheral Controller associated with the registering OTG
- * port.
+ * port. The PIL layer requires that the supplied reference
+ * remains valid indefinitely, as the OTG Controller cannot
+ * unregister.
*
* @param aPeripheralProperties Reference to an object
* describing the static properties of the Peripheral
- * Controller. The PIL layer requires that the supplied
- * reference remains valid indefinitely, as the registering
- * OTG Controller cannot unregister.
+ * Controller. The PIL takes a copy and the PSL is free to
+ * release the properties object upon return.
*
* @param aHostControllerIf Reference to the Host Controller
* interface implemented by the PSL controlling the Host
- * Controller associated with the registering OTG port.
+ * Controller associated with the registering OTG port. The
+ * PIL layer requires that the supplied reference remains
+ * valid indefinitely, as the OTG Controller cannot
+ * unregister.
*
* @param aHostProperties Reference to an object describing the
- * static properties of the Host Controller. The PIL layer
- * requires that the supplied reference remains valid
- * indefinitely, as the registering OTG Controller cannot
- * unregister.
+ * static properties of the Host Controller. The PIL takes a
+ * copy and the PSL is free to release the properties object
+ * upon return.
*
* @lib usbotghostpil.lib
*/
--- a/usb_plat/usb_shai_api/inc/usb_peripheral_shai.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usb_plat/usb_shai_api/inc/usb_peripheral_shai.h Fri Sep 17 08:40:15 2010 +0300
@@ -19,7 +19,7 @@
@brief USB Peripheral SHAI header
- @version 0.3.0
+ @version 0.4.0
Abstract interface for USB Peripheral Controller.
@@ -43,7 +43,7 @@
* older environment with old USB SHAI version that is missing some
* new definitions.
*/
-#define USB_PERIPHERAL_SHAI_VERSION 0x030
+#define USB_PERIPHERAL_SHAI_VERSION 0x040
// The namespace is documented in file usb_common_shai.h, so it is not
// repeated here
@@ -765,7 +765,7 @@
* the system-wide error codes.
*/
virtual TInt ConfigureEndpoint(TInt aRealEndpoint,
- const TUsbPeripheralEndpointInfo& aEndpointInfo) = 0;
+ const TUsbPeripheralEndpointInfo& aEndpointInfo) = 0;
/**
* De-configures (disables) an endpoint (incl. Ep0).
@@ -968,7 +968,7 @@
* - enabling the peripheral controller's clock
* - binding & enabling the peripheral controller (primary) interrupt
* - write meaningful values to some general controller registers
- * - enabling the USB Reset interrupt
+ * - enabling the USB Reset, Suspend, and Resume interrupts
* - enabling the peripheral controller proper (for instance by
* setting an Enable bit).
*
@@ -1155,16 +1155,20 @@
*
* @param aPeripheralControllerIf Reference to the Peripheral
* Controller interface implemented by the registering PSL.
+ * The PIL layer requires that the supplied reference
+ * remains valid indefinitely, as the Peripheral Controller
+ * cannot unregister.
*
* @param aProperties Reference to an object describing the
- * static properties of the Peripheral Controller. PIL
- * layer requires that the supplied reference remains valid
- * indefinitely, as a Peripheral Controller cannot unregister.
+ * static properties of the Peripheral Controller. The PIL
+ * takes a copy and the PSL is free to release the properties
+ * object upon return.
*
* @lib usbperipheralpil.lib
*/
- IMPORT_C static void RegisterPeripheralController(MPeripheralControllerIf& aPeripheralControllerIf,
- const TPeripheralControllerProperties& aProperties );
+ IMPORT_C static void RegisterPeripheralController(
+ MPeripheralControllerIf& aPeripheralControllerIf,
+ const TPeripheralControllerProperties& aProperties );
private:
/**
--- a/usb_plat/usb_shai_api/inc/usb_peripheral_shai_shared.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usb_plat/usb_shai_api/inc/usb_peripheral_shai_shared.h Fri Sep 17 08:40:15 2010 +0300
@@ -19,6 +19,8 @@
@brief USB Peripheral SHAI header shared part.
+ @version 0.4.0
+
Some Non-kernel USB code will also use structure defined in this
header. Since usb_peripheral_shai.h always need to include
<kern_priv.h> which is not visible to non-kernel layers, a
@@ -27,6 +29,10 @@
This header is the one that defined all common structures used by
kernel & non-kernel layers software.
+ The file is versioned for the sake of the human reader and follows
+ the version of the USB Peripheral SHAI header
+ usb_peripheral_shai.h.
+
Peripheral SHAI header always include this header automatically.
@publishedDeviceAbstraction
--- a/usbdrv/peripheral/ldd/perildd/src/d_usbc.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/ldd/perildd/src/d_usbc.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -127,6 +127,8 @@
KUsbRequestCallbackPriority),
iOtgFeatureChangePtr(NULL),
iOtgFeatureCallbackInfo(this, DLddUsbcChannel::OtgFeatureChangeCallback, KUsbRequestCallbackPriority),
+ iChargerTypeChangePtr(NULL),
+ iChargerTypeCallbackInfo(this, DLddUsbcChannel::ChargerTypeChangeCallback, KUsbRequestCallbackPriority),
iNumberOfEndpoints(0),
iDeviceState(UsbShai::EUsbPeripheralStateUndefined),
iOwnsDeviceControl(EFalse),
@@ -157,6 +159,7 @@
iStatusCallbackInfo.Cancel();
iEndpointStatusCallbackInfo.Cancel();
iOtgFeatureCallbackInfo.Cancel();
+ iChargerTypeCallbackInfo.Cancel();
iCompleteAllCallbackInfo.Cancel();
AbortInterface();
DestroyAllInterfaces();
@@ -170,7 +173,7 @@
Kern::DestroyClientRequest(iStatusChangeReq);
Kern::DestroyClientRequest(iEndpointStatusChangeReq);
Kern::DestroyClientRequest(iOtgFeatureChangeReq);
-
+ Kern::DestroyClientRequest(iChargerTypeChangeReq);
Kern::DestroyVirtualPinObject(iPinObj1);
Kern::DestroyVirtualPinObject(iPinObj2);
Kern::DestroyVirtualPinObject(iPinObj3);
@@ -231,29 +234,36 @@
iStatusCallbackInfo.SetDfcQ(iDfcQ); // use the channel's dfcq for this dfc
iEndpointStatusCallbackInfo.SetDfcQ(iDfcQ); // use the channel's dfcq for this dfc
iOtgFeatureCallbackInfo.SetDfcQ(iDfcQ);
- iMsgQ.Receive(); //start up the message q
- TInt r = iController->RegisterClientCallback(iCompleteAllCallbackInfo);
- if (r != KErrNone)
- return r;
- r = iController->RegisterForStatusChange(iStatusCallbackInfo);
- if (r != KErrNone)
- return r;
- r = iController->RegisterForEndpointStatusChange(iEndpointStatusCallbackInfo);
- if (r != KErrNone)
- return r;
- r = iController->RegisterForOtgFeatureChange(iOtgFeatureCallbackInfo);
+ iChargerTypeCallbackInfo.SetDfcQ(iDfcQ);
+ iMsgQ.Receive(); //start up the message q
+ TInt r = iController->RegisterClientCallback(iCompleteAllCallbackInfo);
+ if (r != KErrNone)
+ return r;
+ r = iController->RegisterForStatusChange(iStatusCallbackInfo);
+ if (r != KErrNone)
+ return r;
+ r = iController->RegisterForEndpointStatusChange(iEndpointStatusCallbackInfo);
+ if (r != KErrNone)
+ return r;
+ r = iController->RegisterForOtgFeatureChange(iOtgFeatureCallbackInfo);
+ if (r != KErrNone)
+ return r;
+ r = iController->RegisterChargingPortTypeNotify(iChargerTypeCallbackInfo);
if (r != KErrNone)
- return r;
-
- r = Kern::CreateClientDataRequest(iStatusChangeReq);
+ return r;
+
+ r = Kern::CreateClientDataRequest(iStatusChangeReq);
+ if (r != KErrNone)
+ return r;
+ r = Kern::CreateClientDataRequest(iEndpointStatusChangeReq);
+ if (r != KErrNone)
+ return r;
+ r = Kern::CreateClientDataRequest(iOtgFeatureChangeReq);
+ if (r != KErrNone)
+ return r;
+ r = Kern::CreateClientDataRequest(iChargerTypeChangeReq);
if (r != KErrNone)
- return r;
- r = Kern::CreateClientDataRequest(iEndpointStatusChangeReq);
- if (r != KErrNone)
- return r;
- r = Kern::CreateClientDataRequest(iOtgFeatureChangeReq);
- if (r != KErrNone)
- return r;
+ return r;
Kern::CreateVirtualPinObject(iPinObj1);
Kern::CreateVirtualPinObject(iPinObj2);
@@ -344,6 +354,11 @@
iOtgFeatureChangeReq->SetStatus(aStatus);
iOtgFeatureChangeReq->SetDestPtr(a1);
break;
+ case RDevUsbcClient::ERequestChargingPortTypeNotify:
+ iChargerTypeChangeReq->Reset();
+ iChargerTypeChangeReq->SetStatus(aStatus);
+ iChargerTypeChangeReq->SetDestPtr(a1);
+ break;
case RDevUsbcClient::ERequestAlternateDeviceStatusNotify:
iStatusChangeReq->Reset();
iStatusChangeReq->SetStatus(aStatus);
@@ -477,6 +492,10 @@
iRequestStatus[aReqNo]=NULL;
Kern::QueueRequestComplete(iClient,iOtgFeatureChangeReq,r);
break;
+ case RDevUsbcClient::ERequestChargingPortTypeNotify:
+ iRequestStatus[aReqNo]=NULL;
+ Kern::QueueRequestComplete(iClient,iChargerTypeChangeReq,r);
+ break;
case RDevUsbcClient::ERequestAlternateDeviceStatusNotify:
iRequestStatus[aReqNo]=NULL;
Kern::QueueRequestComplete(iClient,iStatusChangeReq,r);
@@ -559,6 +578,24 @@
r = KErrArgument;
break;
}
+ case RDevUsbcClient::ERequestChargingPortTypeNotify:
+ {
+ __KTRACE_OPT(KUSB, Kern::Printf("ERequestChargingPortTypeNotify"));
+ if (a1 != NULL)
+ {
+ iChargerTypeChangePtr = a1;
+ aNeedsCompletion = iChargerTypeCallbackInfo.PendingNotify();
+ if(aNeedsCompletion)
+ {
+ iChargerTypeChangeReq->Data()= iChargerTypeCallbackInfo.ChargerType();
+ iChargerTypeChangePtr = NULL;
+ iChargerTypeCallbackInfo.SetPendingNotify(EFalse);
+ }
+ }
+ else
+ r = KErrArgument;
+ break;
+ }
default:
r = KErrNotSupported;
}
@@ -839,6 +876,16 @@
Kern::QueueRequestComplete(iClient, iOtgFeatureChangeReq, KErrCancel);
}
}
+ else if (aReqNo == RDevUsbcClient::ERequestChargingPortTypeNotify)
+ {
+ __KTRACE_OPT(KUSB, Kern::Printf("DoCancel ERequestChargingPortTypeNotify: 0x%x", aReqNo));
+ CancelNotifyChargerType();
+ if (iChargerTypeChangeReq->IsReady())
+ {
+ iRequestStatus[aReqNo] = NULL;
+ Kern::QueueRequestComplete(iClient, iChargerTypeChangeReq, KErrCancel);
+ }
+ }
else
{
__KTRACE_OPT(KUSB, Kern::Printf("DoCancel Unknown! 0x%x", aReqNo));
@@ -881,6 +928,18 @@
}
}
+void DLddUsbcChannel::CancelNotifyChargerType()
+ {
+ if (iChargerTypeChangePtr)
+ {
+ TUint chargerType;
+ chargerType = iChargerTypeCallbackInfo.ChargerType();
+ iChargerTypeChangeReq->Data()=chargerType;
+ iChargerTypeChangePtr = NULL;
+ iChargerTypeCallbackInfo.SetPendingNotify(EFalse);
+ }
+ }
+
TInt DLddUsbcChannel::PinMemory(TDesC8 *aDes, TVirtualPinObject *aPinObj)
{
TInt r = KErrNone;
@@ -940,6 +999,7 @@
case RDevUsbcClient::EControlSetOtgDescriptor:
case RDevUsbcClient::EControlGetOtgDescriptor:
case RDevUsbcClient::EControlGetOtgFeatures:
+ case RDevUsbcClient::EControlGetChargerDetectorCaps:
r=PinMemory((TDesC8 *) a1, iPinObj1);
if(r!=KErrNone)
{
@@ -1070,6 +1130,7 @@
case RDevUsbcClient::EControlSetOtgDescriptor:
case RDevUsbcClient::EControlGetOtgDescriptor:
case RDevUsbcClient::EControlGetOtgFeatures:
+ case RDevUsbcClient::EControlGetChargerDetectorCaps:
if(a1!=NULL)
{
Kern::UnpinVirtualMemory(iPinObj1);
@@ -1128,6 +1189,7 @@
TUsbcIfcInfo ifcInfo;
TCSDescriptorInfo desInfo;
TUsbcEndpointResource epRes;
+ TUsbcChargerDetectorProperties chargingPro;
TInt bandwidthPriority;
switch (aFunction)
@@ -1514,6 +1576,17 @@
}
break;
+
+
+ case RDevUsbcClient::EControlGetChargerDetectorCaps:
+ __KTRACE_OPT(KUSB, Kern::Printf("EControlGetChargerDetectorCaps"));
+ iController->ChargerDetectorCaps(chargingPro);
+ r = Kern::ThreadRawWrite(iClient, a1, &chargingPro, sizeof(chargingPro), iClient);
+ if (r != KErrNone)
+ {
+ PanicClientThread(r);
+ }
+ break;
case RDevUsbcClient::EControlReleaseInterface:
__KTRACE_OPT(KUSB, Kern::Printf("EControlReleaseInterface"));
@@ -2246,6 +2319,32 @@
}
}
+void DLddUsbcChannel::ChargerTypeChangeCallback(TAny* aDLddUsbcChannel)
+ {
+ __KTRACE_OPT(KUSB, Kern::Printf("ChargerTypeChangeCallback"));
+ DLddUsbcChannel* dUsbc = (DLddUsbcChannel*) aDLddUsbcChannel;
+ if (dUsbc->iChannelClosing)
+ return;
+ const TInt reqNo = (TInt) RDevUsbcClient::ERequestChargingPortTypeNotify;
+ if (dUsbc->iRequestStatus[reqNo])
+ {
+ __KTRACE_OPT(KUSB, Kern::Printf("ChargerTypeChangeCallback Notify status"));
+ Kern::Printf("ChargerTypeChangeCallback Notify status");
+ TUint chargerType;
+ chargerType = dUsbc->iChargerTypeCallbackInfo.ChargerType();
+ dUsbc->iChargerTypeChangeReq->Data()=chargerType;
+ dUsbc->iRequestStatus[reqNo] = NULL;
+ Kern::QueueRequestComplete(dUsbc->iClient,dUsbc->iChargerTypeChangeReq,KErrNone);
+ dUsbc->iChargerTypeChangePtr = NULL;
+ dUsbc->iChargerTypeCallbackInfo.SetPendingNotify(EFalse);
+ }
+ else
+ {
+ Kern::Printf("ChargerTypeChangeCallback Set pending notify");
+ __KTRACE_OPT(KUSB, Kern::Printf("ChargerTypeChangeCallback Set pending notify"));
+ dUsbc->iChargerTypeCallbackInfo.SetPendingNotify(ETrue);
+ }
+ }
TInt DLddUsbcChannel::SelectAlternateSetting(TUint aAlternateSetting)
{
@@ -2660,6 +2759,25 @@
}
}
+ else if (i == RDevUsbcClient::ERequestChargingPortTypeNotify)
+ {
+
+ if (iChargerTypeChangePtr)
+ {
+ TUint chargerType;
+ chargerType = iChargerTypeCallbackInfo.ChargerType();
+ iChargerTypeChangeReq->Data()=chargerType;
+ iChargerTypeChangePtr = NULL;
+ }
+
+ if (iChargerTypeChangeReq->IsReady())
+ {
+ iRequestStatus[i] = NULL;
+ Kern::QueueRequestComplete(iClient, iChargerTypeChangeReq,
+ KErrDisconnected);
+ }
+
+ }
else
{
CompleteBufferRequest(iClient, i, KErrDisconnected);
@@ -2671,8 +2789,9 @@
iStatusCallbackInfo.Cancel();
iEndpointStatusCallbackInfo.Cancel();
iOtgFeatureCallbackInfo.Cancel();
- return KErrNone;
- }
+ iChargerTypeCallbackInfo.Cancel();
+ return KErrNone;
+ }
void DLddUsbcChannel::PanicClientThread(TInt aReason)
--- a/usbdrv/peripheral/ldd/perilddsc/src/d_usbcsc.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/ldd/perilddsc/src/d_usbcsc.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -1175,6 +1175,8 @@
KUsbRequestCallbackPriority),
iOtgFeatureChangePtr(NULL),
iOtgFeatureCallbackInfo(this, DLddUsbcScChannel::OtgFeatureChangeCallback, KUsbRequestCallbackPriority),
+ iChargerTypeChangePtr(NULL),
+ iChargerTypeCallbackInfo(this, DLddUsbcScChannel::ChargerTypeChangeCallback, KUsbRequestCallbackPriority),
iNumberOfEndpoints(0),
iDeviceState(UsbShai::EUsbPeripheralStateUndefined),
iOwnsDeviceControl(EFalse),
@@ -1213,6 +1215,7 @@
iStatusCallbackInfo.Cancel();
iEndpointStatusCallbackInfo.Cancel();
iOtgFeatureCallbackInfo.Cancel();
+ iChargerTypeCallbackInfo.Cancel();
iCompleteAllCallbackInfo.Cancel();
DestroyAllInterfaces();
if (iOwnsDeviceControl)
@@ -1288,6 +1291,7 @@
iStatusCallbackInfo.SetDfcQ(iDfcQ); // use the channel's dfcq for this dfc
iEndpointStatusCallbackInfo.SetDfcQ(iDfcQ); // use the channel's dfcq for this dfc
iOtgFeatureCallbackInfo.SetDfcQ(iDfcQ);
+ iChargerTypeCallbackInfo.SetDfcQ(iDfcQ);
iMsgQ.Receive(); //start up the message q
TInt r = iController->RegisterClientCallback(iCompleteAllCallbackInfo);
if (r != KErrNone)
@@ -1301,6 +1305,9 @@
r = iController->RegisterForOtgFeatureChange(iOtgFeatureCallbackInfo);
if (r != KErrNone)
return r;
+ r = iController->RegisterChargingPortTypeNotify(iChargerTypeCallbackInfo);
+ if (r != KErrNone)
+ return r;
return r;
}
@@ -1424,6 +1431,25 @@
BREAK_IF_NULL_ARG(a1,r);
iOtgFeatureChangePtr = a1;
+ break;
+ }
+ case RDevUsbcScClient::ERequestChargingPortTypeNotify:
+ {
+ __KTRACE_OPT(KUSB, Kern::Printf("ERequestChargingPortTypeNotify"));
+ BREAK_IF_NULL_ARG(a1,r);
+
+ iChargerTypeChangePtr = a1;
+ needsCompletion = iChargerTypeCallbackInfo.PendingNotify();
+ if(needsCompletion)
+ {
+ TUint chargerType;
+ chargerType = iChargerTypeCallbackInfo.ChargerType();
+ TInt r=Kern::ThreadRawWrite(iClient, iChargerTypeChangePtr, (TUint*)&chargerType, sizeof(chargerType), iClient);
+ if (r != KErrNone)
+ PanicClientThread(r);
+ iChargerTypeChangePtr = NULL;
+ iChargerTypeCallbackInfo.SetPendingNotify(EFalse);
+ }
break;
}
default:
@@ -1649,10 +1675,15 @@
CancelNotifyOtgFeatures();
break;
- default:
- __KTRACE_OPT(KUSB, Kern::Printf("DoCancel Unknown! 0x%x", aReqNo));
- return KErrArgument;
- }
+ case RDevUsbcScClient::ERequestChargingPortTypeNotifyCancel:
+ __KTRACE_OPT(KUSB, Kern::Printf("DoCancel ERequestChargingPortTypeNotify: 0x%x", aReqNo));
+ CancelNotifyChargerType();
+ break;
+
+ default:
+ __KTRACE_OPT(KUSB, Kern::Printf("DoCancel Unknown! 0x%x", aReqNo));
+ return KErrArgument;
+ }
Kern::RequestComplete(iClient,iRequestStatus[aReqNo & ~RDevUsbcScClient::ERequestCancel], KErrCancel);
return r;
@@ -1691,7 +1722,19 @@
}
}
-
+void DLddUsbcScChannel::CancelNotifyChargerType()
+ {
+ if (iChargerTypeChangePtr)
+ {
+ TUint chargerType;
+ chargerType = iChargerTypeCallbackInfo.ChargerType();
+ TInt r=Kern::ThreadRawWrite(iClient, iChargerTypeChangePtr, (TUint*)&chargerType, sizeof(chargerType), iClient);
+ if (r != KErrNone)
+ PanicClientThread(r);
+ iChargerTypeChangePtr = NULL;
+ iChargerTypeCallbackInfo.SetPendingNotify(EFalse);
+ }
+ }
//
// DoControl - Synchronous requests
@@ -1710,6 +1753,7 @@
TUsbcScIfcInfo ifcInfo;
TCSDescriptorInfo desInfo;
TUsbcEndpointResource epRes;
+ TUsbcChargerDetectorProperties chargingPro;
switch (aFunction)
{
@@ -2061,6 +2105,17 @@
r = SetInterface((TInt) a1, &ifcInfo);
break;
+
+ case RDevUsbcScClient::EControlGetChargerDetectorCaps:
+ __KTRACE_OPT(KUSB, Kern::Printf("EControlGetChargerDetectorCaps"));
+ iController->ChargerDetectorCaps(chargingPro);
+ r = Kern::ThreadRawWrite(iClient, a1, &chargingPro, sizeof(chargingPro), iClient);
+ if (r != KErrNone)
+ {
+ PanicClientThread(r);
+ }
+ break;
+
case RDevUsbcScClient::EControlReleaseInterface:
__KTRACE_OPT(KUSB, Kern::Printf("EControlReleaseInterface"));
if (!iRealizeCalled)
@@ -3056,6 +3111,32 @@
}
}
+void DLddUsbcScChannel::ChargerTypeChangeCallback(TAny* aDLddUsbcScChannel)
+ {
+ __KTRACE_OPT(KUSB, Kern::Printf("ChargerTypeChangeCallback"));
+ DLddUsbcScChannel* dUsbc = (DLddUsbcScChannel*) aDLddUsbcScChannel;
+ if (dUsbc->iChannelClosing)
+ return;
+
+ const TInt reqNo = (TInt) RDevUsbcScClient::ERequestChargingPortTypeNotify;
+ if (dUsbc->iRequestStatus[reqNo])
+ {
+ __KTRACE_OPT(KUSB, Kern::Printf("ChargerTypeChangeCallback Notify status"));
+ TUint chargerType;
+ chargerType = dUsbc->iChargerTypeCallbackInfo.ChargerType();
+ TInt r=Kern::ThreadRawWrite(dUsbc->iClient, dUsbc->iChargerTypeChangePtr, (TUint*)&chargerType, sizeof(chargerType), dUsbc->iClient);
+ if (r != KErrNone)
+ dUsbc->PanicClientThread(r);
+ Kern::RequestComplete(dUsbc->iClient, dUsbc->iRequestStatus[reqNo], r);
+ dUsbc->iChargerTypeChangePtr = NULL;
+ dUsbc->iChargerTypeCallbackInfo.SetPendingNotify(EFalse);
+ }
+ else
+ {
+ __KTRACE_OPT(KUSB, Kern::Printf("ChargerTypeChangeCallback Set pending notify"));
+ dUsbc->iChargerTypeCallbackInfo.SetPendingNotify(ETrue);
+ }
+ }
//
// SelectAlternateSetting
@@ -3401,9 +3482,9 @@
iStatusCallbackInfo.Cancel();
iEndpointStatusCallbackInfo.Cancel();
iOtgFeatureCallbackInfo.Cancel();
-
- return KErrNone;
- }
+ iChargerTypeCallbackInfo.Cancel();
+ return KErrNone;
+ }
void DLddUsbcScChannel::PanicClientThread(TInt aReason)
--- a/usbdrv/peripheral/pdd/pil/eabi/usbperipheralpilu.def Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/pdd/pil/eabi/usbperipheralpilu.def Fri Sep 17 08:40:15 2010 +0300
@@ -92,4 +92,7 @@
_ZNK20DUsbClientController18GetInterfaceNumberEPK5DBaseRi @ 91 NONAME
_ZNK20DUsbClientController21GetCurrentOtgFeaturesERh @ 92 NONAME
_ZNK20DUsbClientController26EndpointZeroMaxPacketSizesEv @ 93 NONAME
+ _ZN20DUsbClientController19ChargerDetectorCapsERN7UsbShai26TChargerDetectorPropertiesE @ 94 NONAME
+ _ZN20DUsbClientController30RegisterChargingPortTypeNotifyER24TUsbcChargerTypeCallback @ 95 NONAME
+ _ZN20DUsbClientController32DeRegisterChargingPortTypeNotifyEPK5DBase @ 96 NONAME
--- a/usbdrv/peripheral/pdd/pil/group/bld.inf Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/pdd/pil/group/bld.inf Fri Sep 17 08:40:15 2010 +0300
@@ -16,6 +16,7 @@
PRJ_PLATFORMS
ARMV5
+ARMV5SMP
PRJ_MMPFILES
usbperipheralpil
--- a/usbdrv/peripheral/pdd/pil/group/usbperipheralpil.mmp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/pdd/pil/group/usbperipheralpil.mmp Fri Sep 17 08:40:15 2010 +0300
@@ -21,7 +21,7 @@
targettype kext
linkas usbperipheralpil.dll
deffile ../~/usbperipheralpil.def
-VENDORID 0x70000001
+vendorid 0x70000001
uid 0x00000000 0x2002E6DB
capability all
epocallowdlldata
--- a/usbdrv/peripheral/pdd/pil/src/ps_usbc.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/pdd/pil/src/ps_usbc.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -101,6 +101,8 @@
// Charger observer is the guy who want to monitor the chager type event.
static UsbShai::MChargerDetectorObserverIf* gChargerObsever = NULL;
+static UsbShai::TChargerDetectorProperties gChargerDetectorProperties;
+
// Those const variables are used to construct the default
// Usb descriptors, Upper layer can change them later.
@@ -352,6 +354,9 @@
__KTRACE_OPT(KUSB, Kern::Printf("> DUsbClientController::DeviceCaps()"));
TUsbDeviceCaps caps;
caps().iTotalEndpoints = iDeviceUsableEndpoints; // not DeviceTotalEndpoints()!
+
+ // In the SHAI API, all PSLs are required to support soft connection
+ caps().iConnect = ETrue;
caps().iSelfPowered = iSelfPowered;
caps().iRemoteWakeup = iRemoteWakeup;
@@ -404,6 +409,14 @@
}
+
+EXPORT_C void DUsbClientController::ChargerDetectorCaps(UsbShai::TChargerDetectorProperties& aProperties)
+ {
+ aProperties = gChargerDetectorProperties;
+ }
+
+
+
/** Creates a new USB interface (one setting), complete with endpoints, descriptors, etc.,
and chains it into the internal device configuration tree.
@@ -923,6 +936,7 @@
DeRegisterForEndpointStatusChange(aClientId);
DeRegisterForOtgFeatureChange(aClientId);
DeRegisterClientCallback(aClientId);
+ DeRegisterChargingPortTypeNotify(aClientId);
// Delete the interface including all its alternate settings which might exist.
// (If we release the default setting (0), all alternate settings are deleted as well.)
const TInt r = ReleaseInterface(aClientId, 0);
@@ -2619,6 +2633,68 @@
{
return iController.SignalRemoteWakeup();
}
+/** Registers client request for USB charger type notification. Client is notified when USB device is
+ attached to or detached from any USB charger, and the charger type is sent to client.
+
+ @param aCallback A reference to a properly filled in charger type callback structure.
+
+ @return KErrNone if callback successfully registered, KErrGeneral if this callback is already registered
+ (it won't be registered twice).
+*/
+EXPORT_C TInt DUsbClientController::RegisterChargingPortTypeNotify(TUsbcChargerTypeCallback& aCallback)
+ {
+ __KTRACE_OPT(KUSB, Kern::Printf("DUsbClientController::RegisterChargingPortTypeNotify()"));
+ if (iChargerTypeCallbacks.Elements() == KUsbcMaxListLength)
+ {
+ __KTRACE_OPT(KPANIC, Kern::Printf(" Error: In charger type list, the maximum list length reached: %d",
+ KUsbcMaxListLength));
+ return KErrGeneral;
+ }
+ if (IsInTheChargerTypeList(aCallback))
+ {
+ __KTRACE_OPT(KUSB, Kern::Printf(" Error: UsbcChargerTypeCallback @ 0x%x already registered", &aCallback));
+ return KErrGeneral;
+ }
+ const TInt irq = __SPIN_LOCK_IRQSAVE(iUsbLock);
+ iChargerTypeCallbacks.AddLast(aCallback);
+ __SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
+
+ if(iCurrentChargerType != UsbShai::EPortTypeNone)
+ {
+ aCallback.SetChargerType(iCurrentChargerType);
+ aCallback.SetPendingNotify(ETrue);
+ }
+ return KErrNone;
+ }
+
+/** De-registers (removes from the list of pending requests) a notification callback for
+ USB charger type change.
+
+ @param aClientId A pointer to the LDD owning the charger type callback.
+
+ @return KErrNone if callback successfully unregistered, KErrNotFound if the callback couldn't be found.
+*/
+EXPORT_C TInt DUsbClientController::DeRegisterChargingPortTypeNotify(const DBase* aClientId)
+ {
+ __KTRACE_OPT(KUSB, Kern::Printf("DUsbClientController::DeRegisterChargingPortTypeNotify()"));
+ __ASSERT_DEBUG((aClientId != NULL), Kern::Fault(KUsbPILPanicCat, __LINE__));
+ const TInt irq = __SPIN_LOCK_IRQSAVE(iUsbLock);
+ TSglQueIter<TUsbcChargerTypeCallback> iter(iChargerTypeCallbacks);
+ TUsbcChargerTypeCallback* p;
+ while ((p = iter++) != NULL)
+ {
+ if (p->Owner() == aClientId)
+ {
+ __KTRACE_OPT(KUSB, Kern::Printf(" removing UsbcChargerTypeCallback @ 0x%x", p));
+ iChargerTypeCallbacks.Remove(*p);
+ __SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
+ return KErrNone;
+ }
+ }
+ __KTRACE_OPT(KUSB, Kern::Printf(" client not found"));
+ __SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
+ return KErrNotFound;
+ }
EXPORT_C TBool DUsbClientController::CurrentlyUsingHighSpeed()
{
@@ -2913,10 +2989,19 @@
iUsbResetDeferred(EFalse),
iEnablePullUpOnDPlus(NULL),
iDisablePullUpOnDPlus(NULL),
- iOtgContext(NULL)
+ iOtgContext(NULL),
+ iChargerTypeCallbacks(_FOFF(TUsbcChargerTypeCallback, iLink)),
+ iCurrentChargerType(UsbShai::EPortTypeNone)
{
__KTRACE_OPT(KUSB, Kern::Printf("DUsbClientController::DUsbClientController()"));
+ // Note that we take a direct copy of the controller properties in
+ // the initialization list for now. If fields are later added to
+ // the properties class in the SHAI, we need to start copying
+ // field-by-field and check the PSL reported capabilities before
+ // accessing a field that may not be present in an older PSL
+ // binary.
+
iLastError = KErrNone;
#ifndef SEPARATE_USB_DFC_QUEUE
@@ -4687,7 +4772,18 @@
// Functions from UsbShai::MChargerDetectorObserverIf
void DUsbClientController::NotifyPortType(UsbShai::TPortType aPortType)
{
- // FIXME: Not yet implemented!
+ __KTRACE_OPT(KUSB, Kern::Printf("DUsbClientController::NotifyPortType(), aPortType = %d", aPortType));
+
+ TSglQueIter<TUsbcChargerTypeCallback> iter(iChargerTypeCallbacks);
+ TUsbcChargerTypeCallback* p;
+
+ iCurrentChargerType = aPortType;
+
+ while ((p = iter++) != NULL)
+ {
+ p->SetChargerType(aPortType);
+ p->DoCallback();
+ }
}
void DUsbClientController::Buffer2Setup(const TAny* aBuf, TUsbcSetup& aSetup) const
@@ -4818,8 +4914,14 @@
{
return ;
}
-
+
+ // We take a direct copy of the charger detector properties for
+ // now. If fields are later added to the properties classes in the
+ // SHAI, we need to start copying field-by-field and check the PSL
+ // reported capabilities before accessing a field that may not be
+ // present in an older PSL binary.
gChargerDetector = &aChargerDetector;
+ gChargerDetectorProperties = aProperties;
if(gChargerObsever != NULL)
{
--- a/usbdrv/peripheral/public/d32usbc.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/public/d32usbc.h Fri Sep 17 08:40:15 2010 +0300
@@ -206,6 +206,8 @@
ERequestEndpointStatusNotifyCancel = 1<<ERequestEndpointStatusNotify,
ERequestOtgFeaturesNotify = 10,
ERequestOtgFeaturesNotifyCancel = 1<<ERequestOtgFeaturesNotify,
+ ERequestChargingPortTypeNotify = 11,
+ ERequestChargingPortTypeNotifyCancel = 1<<ERequestChargingPortTypeNotify
};
enum TControl
@@ -285,7 +287,8 @@
EControlRemoveStringDescriptor,
EControlSetOtgDescriptor,
EControlGetOtgDescriptor,
- EControlGetOtgFeatures
+ EControlGetOtgFeatures,
+ EControlGetChargerDetectorCaps
};
public:
@@ -1152,7 +1155,18 @@
/** Cancel pending OTG feature request.
*/
inline void OtgFeaturesNotifyCancel();
+ /** Register for notification on USB charger type' change. If any usb charger
+ is detected, request completes and current charger type value is filled in aValue.
+ @param aStatus Request status object
+ @param aValue On request completion, it contains current charger type value
+ */
+ inline void ChargingPortTypeNotify(TRequestStatus& aStatus, TUint& aValue);
+
+ /** Cancel pending Charger Type request.
+ */
+ inline void ChargingPortTypeNotifyCancel();
+ inline TInt ChargerDetectorCaps(TUsbcChargerDetectorProperties& aProperties);
#endif // #ifndef __KERNEL_MODE__
};
--- a/usbdrv/peripheral/public/d32usbc.inl Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/public/d32usbc.inl Fri Sep 17 08:40:15 2010 +0300
@@ -696,6 +696,22 @@
DoCancel(ERequestOtgFeaturesNotifyCancel);
}
+inline void RDevUsbcClient::ChargingPortTypeNotify(TRequestStatus& aStatus, TUint& aValue)
+ {
+ DoRequest(ERequestChargingPortTypeNotify, aStatus, &aValue);
+ }
+
+inline void RDevUsbcClient::ChargingPortTypeNotifyCancel()
+ {
+ DoCancel(ERequestChargingPortTypeNotifyCancel);
+ }
+
+inline TInt RDevUsbcClient::ChargerDetectorCaps(TUsbcChargerDetectorProperties& aProperties)
+ {
+ return DoControl(EControlGetChargerDetectorCaps, &aProperties);
+ }
+
+
#endif // #ifndef __KERNEL_MODE__
--- a/usbdrv/peripheral/public/d32usbcsc.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/public/d32usbcsc.h Fri Sep 17 08:40:15 2010 +0300
@@ -294,6 +294,7 @@
ERequestReEnumerate = 4,
ERequestEndpointStatusNotify = 5,
ERequestOtgFeaturesNotify = 6,
+ ERequestChargingPortTypeNotify = 7,
ERequestMaxRequests, // 7
ERequestCancel = 0x40000000,
@@ -303,7 +304,8 @@
ERequestAlternateDeviceStatusNotifyCancel = ERequestAlternateDeviceStatusNotify | ERequestCancel,
ERequestReEnumerateCancel = ERequestReEnumerate | ERequestCancel,
ERequestEndpointStatusNotifyCancel = ERequestEndpointStatusNotify | ERequestCancel,
- ERequestOtgFeaturesNotifyCancel = ERequestOtgFeaturesNotify | ERequestCancel
+ ERequestOtgFeaturesNotifyCancel = ERequestOtgFeaturesNotify | ERequestCancel,
+ ERequestChargingPortTypeNotifyCancel = ERequestChargingPortTypeNotify | ERequestCancel
};
enum TControl
@@ -383,7 +385,8 @@
EControlGetOtgDescriptor,
EControlGetOtgFeatures,
EControlRealizeInterface,
- EControlStartNextInAlternateSetting
+ EControlStartNextInAlternateSetting,
+ EControlGetChargerDetectorCaps
};
@@ -1215,12 +1218,24 @@
/** Cancel pending OTG feature request.
*/
inline void OtgFeaturesNotifyCancel();
+
+ /** Register for notification on USB charger type' change. If any usb charger
+ is detected, request completes and current charger type value is filled in aValue.
- /** This function retrieves the alternate setting that the WriteData function can
- write to. After a host sets the alternate setting, writes to the IN endpoint
- are not permitted by the LDD until this method has been called.
- This function is not asynchronous nor blocking, and should not be used to
- detect that an alternate setting has happened.
+ @param aStatus Request status object
+ @param aValue On request completion, it contains current charger type value
+ */
+ inline void ChargingPortTypeNotify(TRequestStatus& aStatus, TUint& aValue);
+
+ /** Cancel pending Charger Type request.
+ */
+ inline void ChargingPortTypeNotifyCancel();
+ inline TInt ChargerDetectorCaps(TUsbcChargerDetectorProperties& aProperties);
+ /** This function retrieves the alternate setting that the WriteData function can
+ write to. After a host sets the alternate setting, writes to the IN endpoint
+ are not permitted by the LDD until this method has been called.
+ This function is not asynchronous nor blocking, and should not be used to
+ detect that an alternate setting has happened.
If the BIL methods are being used (recommended), then this method should not be called directly.
--- a/usbdrv/peripheral/public/d32usbcsc.inl Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/public/d32usbcsc.inl Fri Sep 17 08:40:15 2010 +0300
@@ -709,6 +709,22 @@
DoControl(ERequestOtgFeaturesNotifyCancel);
}
+inline void RDevUsbcScClient::ChargingPortTypeNotify(TRequestStatus& aStatus, TUint& aValue)
+ {
+ DoRequest(ERequestChargingPortTypeNotify, aStatus, &aValue);
+ }
+
+inline void RDevUsbcScClient::ChargingPortTypeNotifyCancel()
+ {
+ DoControl(ERequestChargingPortTypeNotifyCancel);
+ }
+
+inline TInt RDevUsbcScClient::ChargerDetectorCaps(TUsbcChargerDetectorProperties& aProperties)
+ {
+ return DoControl(EControlGetChargerDetectorCaps, &aProperties);
+ }
+
+
inline TInt RDevUsbcScClient::StartNextInAlternateSetting()
{
return DoControl(EControlStartNextInAlternateSetting);
--- a/usbdrv/peripheral/public/d32usbcshared.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/public/d32usbcshared.h Fri Sep 17 08:40:15 2010 +0300
@@ -26,6 +26,8 @@
#define __D32USBCSHARED_H__
#include <usb/usb_peripheral_shai_shared.h>
+#include <usb/usb_charger_detection_shai_shared.h>
+
// FIXME: for dummy dcd compitible, move this line to usbcshared.h
// used by shared chunk version LDD's user app interface
@@ -121,6 +123,21 @@
TInt MinPacketSize() const;
};
+typedef UsbShai::TPortType TUsbcChargingPortType;
+typedef UsbShai::TChargerDetectorProperties TUsbcChargerDetectorProperties;
+const TUint KUsbChargingPortTypeNone = UsbShai::EPortTypeNone;
+const TUint KUsbChargingPortTypeUnsupported = UsbShai::EPortTypeUnsupported;
+const TUint KUsbChargingPortTypeChargingPort = UsbShai::EPortTypeChargingPort;
+const TUint KUsbChargingPortTypeDedicatedChargingPort = UsbShai::EPortTypeDedicatedChargingPort;
+const TUint KUsbChargingPortTypeChargingDownstreamPort = UsbShai::EPortTypeChargingDownstreamPort;
+const TUint KUsbChargingPortTypeStandardDownstreamPort = UsbShai::EPortTypeStandardDownstreamPort;
+const TUint KUsbChargingPortTypeAcaRidA = UsbShai::EPortTypeAcaRidA;
+const TUint KUsbChargingPortTypeAcaRidB = UsbShai::EPortTypeAcaRidB;
+const TUint KUsbChargingPortTypeAcaRidC = UsbShai::EPortTypeAcaRidC;
+const TUint KChargerDetectorCapChirpCurrentLimiting = UsbShai::TChargerDetectorProperties::KChargerDetectorCapChirpCurrentLimiting;
+
+
+
/** Endpoint resources/behaviours.
@see AllocateEndpointResource()
--- a/usbdrv/peripheral/public/usbc.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/public/usbc.h Fri Sep 17 08:40:15 2010 +0300
@@ -51,7 +51,7 @@
/** Must correspond to the max enum of TRequest + 1;
currently this is ERequestOtgFeaturesNotify = 10.
*/
-const TInt KUsbcMaxRequests = 11;
+const TInt KUsbcMaxRequests = 12;
//
//########################### Logical Device Driver (LDD) #############################
@@ -297,9 +297,11 @@
void ClosePhysicalChunk(DPlatChunkHw* &aHwChunk);
void CancelNotifyEndpointStatus();
void CancelNotifyOtgFeatures();
+ void CancelNotifyChargerType();
static void StatusChangeCallback(TAny* aDLddUsbcChannel);
static void EndpointStatusChangeCallback(TAny* aDLddUsbcChannel);
static void OtgFeatureChangeCallback(TAny* aDLddUsbcChannel);
+ static void ChargerTypeChangeCallback(TAny* aDLddUsbcChannel);
static void EmergencyCompleteDfc(TAny* aDLddUsbcChannel);
void DeConfigure(TInt aErrorCode);
TInt SelectAlternateSetting(TUint aAlternateSetting);
@@ -333,6 +335,8 @@
TUsbcEndpointStatusCallback iEndpointStatusCallbackInfo;
TAny* iOtgFeatureChangePtr;
TUsbcOtgFeatureCallback iOtgFeatureCallbackInfo;
+ TAny* iChargerTypeChangePtr;
+ TUsbcChargerTypeCallback iChargerTypeCallbackInfo;
TInt iNumberOfEndpoints;
RArray<DPlatChunkHw*> iHwChunksEp0;
RArray<DPlatChunkHw*> iHwChunks;
@@ -350,6 +354,7 @@
TClientDataRequest<TUint> *iStatusChangeReq;
TClientDataRequest<TUint> *iEndpointStatusChangeReq;
TClientDataRequest<TUint> *iOtgFeatureChangeReq;
+ TClientDataRequest<TUint> *iChargerTypeChangeReq;
TEndpointTransferInfo iTfrInfo;
};
--- a/usbdrv/peripheral/public/usbcsc.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/public/usbcsc.h Fri Sep 17 08:40:15 2010 +0300
@@ -322,9 +322,11 @@
TInt SetupEp0();
void CancelNotifyEndpointStatus();
void CancelNotifyOtgFeatures();
+ void CancelNotifyChargerType();
static void StatusChangeCallback(TAny* aDLddUsbcChannel);
static void EndpointStatusChangeCallback(TAny* aDLddUsbcChannel);
static void OtgFeatureChangeCallback(TAny* aDLddUsbcChannel);
+ static void ChargerTypeChangeCallback(TAny* aDLddUsbcChannel);
static void EmergencyCompleteDfc(TAny* aDLddUsbcChannel);
void DeConfigure(TInt aErrorCode);
TInt SelectAlternateSetting(TUint aAlternateSetting);
@@ -354,6 +356,8 @@
TUsbcEndpointStatusCallback iEndpointStatusCallbackInfo;
TAny* iOtgFeatureChangePtr;
TUsbcOtgFeatureCallback iOtgFeatureCallbackInfo;
+ TAny* iChargerTypeChangePtr;
+ TUsbcChargerTypeCallback iChargerTypeCallbackInfo;
TUint8* iBufferBaseEp0;
TInt iBufferSizeEp0;
TInt iNumberOfEndpoints;
--- a/usbdrv/peripheral/public/usbcshared.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/public/usbcshared.h Fri Sep 17 08:40:15 2010 +0300
@@ -351,6 +351,29 @@
TDfc iDfc;
TUint8 iValue;
};
+/** USB Charger Type change callback.
+*/
+class TUsbcChargerTypeCallback
+ {
+public:
+ inline TUsbcChargerTypeCallback (DBase* aOwner, TDfcFn aCallback, TInt aPriority);
+ inline void SetChargerType(TUint aType);
+ inline TUint ChargerType () const;
+ inline void SetPendingNotify(TBool aPendingNotify);
+ inline TBool PendingNotify () const;
+ inline DBase* Owner() const;
+ inline TInt DoCallback();
+ inline void Cancel();
+ inline void SetDfcQ(TDfcQue* aDfcQ);
+public:
+ /** Used by the PIL to queue callback objects into a TSglQue. */
+ TSglQueLink iLink;
+private:
+ DBase* iOwner;
+ TDfc iDfc;
+ TUint iChargerType;
+ TBool iPendingNotify;
+ };
//
//########################### Physical Device Driver (PIL + PSL) ######################
@@ -686,6 +709,9 @@
IMPORT_C TBool QueryEndpointResource(const DBase* aClientId, TInt aEndpointNum,
TUsbcEndpointResource aResource);
IMPORT_C TInt EndpointPacketSize(const DBase* aClientId, TInt aEndpointNum);
+ IMPORT_C TInt RegisterChargingPortTypeNotify(TUsbcChargerTypeCallback& aCallback);
+ IMPORT_C TInt DeRegisterChargingPortTypeNotify(const DBase* aClientId);
+ IMPORT_C void ChargerDetectorCaps(UsbShai::TChargerDetectorProperties& aProperties);
// Called by LDD
IMPORT_C TDfcQue* DfcQ(TInt aIndex);
@@ -873,6 +899,7 @@
inline TBool IsInTheEpStatusList(const TUsbcEndpointStatusCallback& aCallback);
inline TBool IsInTheOtgFeatureList(const TUsbcOtgFeatureCallback& aCallback);
inline TBool IsInTheRequestList(const TUsbcRequestCallback& aCallback);
+ inline TBool IsInTheChargerTypeList(const TUsbcChargerTypeCallback& aCallback);
static void ReconnectTimerCallback(TAny* aPtr);
static void CableStatusTimerCallback(TAny* aPtr);
static void PowerUpDfc(TAny* aPtr);
@@ -934,7 +961,7 @@
NFastMutex iMutex; // To pretect interface set with NFastMutex
UsbShai::MPeripheralControllerIf& iController; // PSL code
- const UsbShai::TPeripheralControllerProperties& iControllerProperties; // Static configuration from PSL
+ const UsbShai::TPeripheralControllerProperties iControllerProperties; // Static configuration from PSL
TBool iIsOtgPort; // Is this instance a driver for otg port,
// Set at construction time.
@@ -974,6 +1001,9 @@
TInt (*iEnablePullUpOnDPlus)(TAny* aOtgContext);
TInt (*iDisablePullUpOnDPlus)(TAny* aOtgContext);
TAny* iOtgContext;
+private:
+ TSglQue<TUsbcChargerTypeCallback> iChargerTypeCallbacks; // list of USB charger type notification requests
+ TUint iCurrentChargerType;
};
/** Simple queue of status changes to be recorded.
--- a/usbdrv/peripheral/public/usbcshared.inl Thu Sep 02 22:23:37 2010 +0300
+++ b/usbdrv/peripheral/public/usbcshared.inl Fri Sep 17 08:40:15 2010 +0300
@@ -186,6 +186,23 @@
return EFalse;
}
+TBool DUsbClientController::IsInTheChargerTypeList(const TUsbcChargerTypeCallback& aCallback)
+ {
+ const TInt irq = __SPIN_LOCK_IRQSAVE(iUsbLock);
+ TSglQueIter<TUsbcChargerTypeCallback> iter(iChargerTypeCallbacks);
+ TUsbcChargerTypeCallback* p;
+ while ((p = iter++) != NULL)
+ {
+ if (p == &aCallback)
+ {
+ __SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
+ return ETrue;
+ }
+ }
+ __SPIN_UNLOCK_IRQRESTORE(iUsbLock, irq);
+ return EFalse;
+ }
+
//
// --- Misc classes ---
//
@@ -545,6 +562,91 @@
}
+// --- TUsbcChargerTypeCallback
+
+/** Constructor.
+ */
+TUsbcChargerTypeCallback::TUsbcChargerTypeCallback(DBase* aOwner, TDfcFn aCallback,
+ TInt aPriority)
+ : iOwner(aOwner),
+ iDfc(aCallback, aOwner, aPriority),
+ iChargerType(UsbShai::EPortTypeNone),
+ iPendingNotify(EFalse)
+ {}
+
+/** Set charger type which is to be notified to client.
+ @param Charger type to be set
+*/
+void TUsbcChargerTypeCallback::SetChargerType(TUint aType)
+ {
+ iChargerType = aType;
+ }
+
+
+/** Returns a pointer to the owner of this request.
+ @return A pointer to the owner of this request.
+*/
+DBase* TUsbcChargerTypeCallback::Owner() const
+ {
+ return iOwner;
+ }
+
+
+/** Charger type which is to be notified to client.
+ @return Value of Charger Type
+*/
+TUint TUsbcChargerTypeCallback::ChargerType() const
+ {
+ return iChargerType;
+ }
+
+
+/** Set whether there is an pending charger type which is to be notified to client.
+ @param whether there is an pending charger type
+*/
+void TUsbcChargerTypeCallback::SetPendingNotify(TBool aPendingNotify)
+ {
+ iPendingNotify = aPendingNotify;
+ }
+
+/** return whether there is an pending charger type which is to be notified to client.
+ @return whether there is an pending charger type
+*/
+TBool TUsbcChargerTypeCallback::PendingNotify() const
+ {
+ return iPendingNotify;
+ }
+
+/** Executes the callback function set by the owner of this request.
+ @return KErrNone.
+*/
+TInt TUsbcChargerTypeCallback::DoCallback()
+ {
+ if (NKern::CurrentContext() == NKern::EThread)
+ iDfc.Enque();
+ else
+ iDfc.Add();
+ return KErrNone;
+ }
+
+
+/** Cancels the callback function set by the owner of this request.
+ */
+void TUsbcChargerTypeCallback::Cancel()
+ {
+ iDfc.Cancel();
+ }
+
+
+/** Set DFC queue.
+ @param aDfcQ DFC queue to be set
+*/
+void TUsbcChargerTypeCallback::SetDfcQ(TDfcQue* aDfcQ)
+ {
+ iDfc.SetDfcQ(aDfcQ);
+ }
+
+
/** Returns a pointer to the currently selected (active) setting of this interface.
@return A pointer to the currently selected (active) setting of this interface.
--- a/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/group/BLD.INF Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/group/BLD.INF Fri Sep 17 08:40:15 2010 +0300
@@ -32,3 +32,6 @@
PRJ_TESTEXPORTS
../public/acmserverconsts.h SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(usb/acmserverconsts.h)
+
+PRJ_TESTMMPFILES
+ecacm_overdummyusbldd.mmp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/group/ecacm_overdummyusbldd.mmp Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,77 @@
+/*
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Top-level project file for ECACM.CSY
+* ecacm.csy Comms server plug-in for USB
+*
+*/
+
+/**
+ @file
+*/
+
+
+TARGET ecacm.csy
+CAPABILITY CommDD PowerMgmt ReadDeviceData WriteDeviceData TrustedUI ProtServ NetworkControl NetworkServices LocalServices ReadUserData WriteUserData
+TARGETTYPE dll
+
+NOEXPORTLIBRARY
+
+//
+// We have a laggard, ill-defined UID3 which must be kept
+// for old platforms for BC. For newer platforms, we use
+// KUidECACM = 0x10201EF6
+//
+uid 0x10005054 0x10201EF6
+
+MACRO __OVER_DUMMYUSBLDD__
+
+SOURCEPATH ../src
+SOURCE AcmPort.cpp
+SOURCE AcmPortFactory.cpp
+SOURCE AcmReader.cpp
+SOURCE AcmWriter.cpp
+SOURCE linkstatenotifier.cpp
+SOURCE ActiveReader.cpp
+SOURCE ActiveReadOneOrMoreReader.cpp
+SOURCE ActiveWriter.cpp
+SOURCE BreakController.cpp
+SOURCE CdcAcmClass.cpp
+SOURCE CdcInterfaceBase.cpp
+SOURCE CdcControlInterface.cpp
+SOURCE CdcControlInterfaceReader.cpp
+SOURCE CdcDataInterface.cpp
+SOURCE ClassDescriptor.cpp
+SOURCE DllMain.cpp
+SOURCE RegistrationPort.cpp
+SOURCE RequestHeader.cpp
+SOURCE acmserver.cpp
+SOURCE acmsession.cpp
+SOURCE ActiveDataAvailableNotifier.cpp
+
+USERINCLUDE ../inc
+USERINCLUDE ../public
+USERINCLUDE ../traces
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY euser.lib
+LIBRARY c32.lib
+LIBRARY efsrv.lib
+LIBRARY dummyusblddapi.lib
+
+VENDORID 0x70000001
+
+UNPAGED
+
--- a/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/inc/ActiveDataAvailableNotifier.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/inc/ActiveDataAvailableNotifier.h Fri Sep 17 08:40:15 2010 +0300
@@ -19,7 +19,11 @@
#define __ACTIVEDATAAVAILABLENOTIFIER_H__
#include <e32base.h>
+#ifndef __OVER_DUMMYUSBLDD__
#include <d32usbc.h>
+#else
+#include <dummyusblddapi.h>
+#endif
class RDevUsbcClient;
class MNotifyDataAvailableObserver;
--- a/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/inc/ActiveReadOneOrMoreReader.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/inc/ActiveReadOneOrMoreReader.h Fri Sep 17 08:40:15 2010 +0300
@@ -19,7 +19,11 @@
#define __ACTIVEREADONEORMOREREADER_H__
#include <e32base.h>
+#ifndef __OVER_DUMMYUSBLDD__
#include <d32usbc.h>
+#else
+#include <dummyusblddapi.h>
+#endif
class RDevUsbcClient;
class MReadOneOrMoreObserver;
--- a/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/inc/ActiveReader.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/inc/ActiveReader.h Fri Sep 17 08:40:15 2010 +0300
@@ -19,7 +19,11 @@
#define __ACTIVEREADER_H__
#include <e32base.h>
+#ifndef __OVER_DUMMYUSBLDD__
#include <d32usbc.h>
+#else
+#include <dummyusblddapi.h>
+#endif
class RDevUsbcClient;
class MReadObserver;
--- a/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/inc/ActiveWriter.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/inc/ActiveWriter.h Fri Sep 17 08:40:15 2010 +0300
@@ -19,7 +19,11 @@
#define __ACTIVEWRITER_H__
#include <e32base.h>
+#ifndef __OVER_DUMMYUSBLDD__
#include <d32usbc.h>
+#else
+#include <dummyusblddapi.h>
+#endif
class RDevUsbcClient;
class MWriteObserver;
--- a/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/inc/CdcInterfaceBase.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/inc/CdcInterfaceBase.h Fri Sep 17 08:40:15 2010 +0300
@@ -19,7 +19,11 @@
#define __CDCINTERFACEBASE_H__
#include <e32base.h>
+#ifndef __OVER_DUMMYUSBLDD__
#include <d32usbc.h>
+#else
+#include <dummyusblddapi.h>
+#endif
NONSHARABLE_CLASS(CCdcInterfaceBase) : public CBase
/**
--- a/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/ActiveDataAvailableNotifier.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/ActiveDataAvailableNotifier.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -16,7 +16,6 @@
*/
#include <e32std.h>
-#include <d32usbc.h>
#include "ActiveDataAvailableNotifier.h"
#include "AcmConstants.h"
#include "AcmPanic.h"
--- a/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/ActiveReadOneOrMoreReader.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/ActiveReadOneOrMoreReader.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -16,7 +16,6 @@
*/
#include <e32std.h>
-#include <d32usbc.h>
#include "ActiveReadOneOrMoreReader.h"
#include "AcmConstants.h"
#include "AcmPanic.h"
--- a/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/ActiveReader.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/ActiveReader.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -16,7 +16,6 @@
*/
#include <e32std.h>
-#include <d32usbc.h>
#include "ActiveReader.h"
#include "AcmConstants.h"
#include "AcmPanic.h"
--- a/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/ActiveWriter.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/ActiveWriter.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -16,7 +16,6 @@
*/
#include <e32std.h>
-#include <d32usbc.h>
#include "ActiveWriter.h"
#include "AcmConstants.h"
#include "AcmPanic.h"
--- a/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/CdcControlInterfaceReader.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/CdcControlInterfaceReader.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -16,7 +16,11 @@
*/
#include <e32std.h>
+#ifndef __OVER_DUMMYUSBLDD__
#include <d32usbc.h>
+#else
+#include <dummyusblddapi.h>
+#endif
#include "CdcControlInterfaceReader.h"
#include "AcmPanic.h"
#include "AcmUtils.h"
--- a/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/linkstatenotifier.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/acm/classimplementation/ecacm/src/linkstatenotifier.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -16,7 +16,11 @@
*/
#include <e32base.h>
+#ifndef __OVER_DUMMYUSBLDD__
#include <d32usbc.h>
+#else
+#include <dummyusblddapi.h>
+#endif
#include "AcmPanic.h"
#include "linkstatenotifier.h"
#include "OstTraceDefinitions.h"
--- a/usbmgmt/usbmgr/device/classdrivers/ms/classcontroller/group/BLD.INF Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/ms/classcontroller/group/BLD.INF Fri Sep 17 08:40:15 2010 +0300
@@ -20,3 +20,7 @@
#if !(defined(WINS) || defined(WINSCW))
msclasscontroller.mmp // Mass Storage Class Controller plugin
#endif
+
+
+PRJ_TESTMMPFILES
+t_msclasscontroller.mmp // Mass Storage Class Controller plugin
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/device/classdrivers/ms/classcontroller/group/t_msclasscontroller.mmp Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2004-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* usbmassstorageclient.dll USB mass storage server client side API
+*
+*/
+
+/**
+ @file
+*/
+
+target msclasscontroller.dll //Recommended unpaged
+CAPABILITY CommDD NetworkControl NetworkServices LocalServices ProtServ
+targettype plugin
+
+
+uid 0x10009d8d 0x10204bbb
+
+
+MACRO __OVER_DUMMYUSBLDD__
+sourcepath ../src
+source CUsbMsClassController.cpp
+source CUsbMsClassImpCollection.cpp
+
+USERINCLUDE ../inc
+USERINCLUDE ../traces
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+
+start resource usbms.rss
+targetpath /private/101fe1db //10204bbb
+header
+end
+
+start resource 10204bbb.rss
+target msclasscontroller.rsc
+end
+
+library euser.lib
+LIBRARY usbclasscontroller.lib
+LIBRARY efsrv.lib
+LIBRARY bafl.lib
+
+VENDORID 0x70000001
--- a/usbmgmt/usbmgr/device/classdrivers/ms/classcontroller/src/CUsbMsClassController.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/ms/classcontroller/src/CUsbMsClassController.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -122,9 +122,12 @@
iState = EUsbServiceStarting;
+#ifndef __OVER_DUMMYUSBLDD__
// Connect to USB Mass Storage server
TInt err = iUsbMs.Connect();
-
+#else
+ TInt err = KErrNone;
+#endif
if (err != KErrNone)
{
iState = EUsbServiceIdle;
@@ -135,8 +138,12 @@
return;
}
+#ifndef __OVER_DUMMYUSBLDD__
// Start mass storage device
err = iUsbMs.Start(iMsConfig);
+#else
+ err = KErrNone;
+#endif
if (err != KErrNone)
{
@@ -174,6 +181,7 @@
}
TRequestStatus* reportStatus = &aStatus;
+#ifndef __OVER_DUMMYUSBLDD__
TInt err = iUsbMs.Stop();
if (err != KErrNone)
@@ -187,6 +195,9 @@
}
iUsbMs.Close();
+#else
+ iState = EUsbServiceIdle;
+#endif
User::RequestComplete(reportStatus, KErrNone);
OstTraceFunctionExit0( CUSBMSCLASSCONTROLLER_START_STOP_DUP1 );
}
--- a/usbmgmt/usbmgr/device/classdrivers/whcm/classcontroller/INC/CUsbWHCMClassController.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/whcm/classcontroller/INC/CUsbWHCMClassController.h Fri Sep 17 08:40:15 2010 +0300
@@ -28,7 +28,11 @@
#include <e32std.h>
#include <cusbclasscontrollerplugin.h>
+#ifndef __OVER_DUMMYUSBLDD__
#include <d32usbc.h>
+#else
+#include <dummyusblddapi.h>
+#endif
const TInt KWHCMPriority = 1;
const TInt KWHCMSubClass = 0x08;
--- a/usbmgmt/usbmgr/device/classdrivers/whcm/classcontroller/SRC/CUsbWHCMClassController.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/whcm/classcontroller/SRC/CUsbWHCMClassController.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -86,6 +86,7 @@
void CUsbWHCMClassController::ConstructL()
{
OstTraceFunctionEntry0( CUSBWHCMCLASSCONTROLLER_CONSTRUCTL_ENTRY );
+#ifndef __OVER_DUMMYUSBLDD__
// Load the device driver
TInt err = User::LoadLogicalDevice(KUsbLDDName);
if (err != KErrNone && err != KErrAlreadyExists)
@@ -94,8 +95,9 @@
"CUsbWHCMClassController::ConstructL;err=%d", err );
User::Leave(err);
}
-
-
+#else
+ TInt err = KErrNone;
+#endif
err = iLdd.Open(0);
if (err < 0)
{
--- a/usbmgmt/usbmgr/device/classdrivers/whcm/classcontroller/group/bld.inf Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/device/classdrivers/whcm/classcontroller/group/bld.inf Fri Sep 17 08:40:15 2010 +0300
@@ -25,3 +25,6 @@
#if !(defined(WINS) || defined(WINSCW))
WHCMClassController.mmp // WHCM Class Controller plugin
#endif
+
+PRJ_TESTMMPFILES
+t_WHCMClassController.mmp // Mass Storage Class Controller plugin
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/device/classdrivers/whcm/classcontroller/group/t_WHCMClassController.mmp Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* WHCMClassController.dll USB Plugin, must be include in ROM if producing a WHCM device
+*
+*/
+
+/**
+ @file
+*/
+
+
+target whcmclasscontroller.dll //Recommended unpaged
+CAPABILITY CommDD NetworkControl NetworkServices LocalServices ProtServ
+targettype plugin
+
+// ECom Dll recognition UID followed by the unique dll UID
+UID 0x10009d8d 0x101fbf23
+VENDORID 0x70000001
+
+MACRO __OVER_DUMMYUSBLDD__
+
+SOURCEPATH ../SRC
+SOURCE CUsbWHCMClassImpCollection.cpp
+SOURCE CUsbWHCMClassController.cpp
+
+USERINCLUDE ../INC
+USERINCLUDE ../traces
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+
+start resource 101fbf23.rss
+target whcmclasscontroller.rsc
+END
+
+LIBRARY euser.lib
+LIBRARY usbclasscontroller.lib
+LIBRARY dummyusblddapi.lib
--- a/usbmgmt/usbmgr/host/functiondrivers/ms/msfdc/group/bld.inf Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/host/functiondrivers/ms/msfdc/group/bld.inf Fri Sep 17 08:40:15 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -23,12 +23,13 @@
PRJ_PLATFORMS
ARMV5
-
PRJ_MMPFILES
#if defined(SYMBIAN_ENABLE_USB_OTG_HOST) && !defined(WINS) && !defined(X86GCC)
msfdc.mmp
#endif
+PRJ_EXPORTS
+msfdc.iby /epoc32/rom/include/msfdc.iby
-PRJ_EXPORTS
-msfdc.iby /epoc32/rom/include/msfdc.iby
\ No newline at end of file
+PRJ_TESTMMPFILES
+msfdc_overdummy.mmp
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/host/functiondrivers/ms/msfdc/group/msfdc_overdummy.mmp Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* dummymsfdc.dll Dummy Mass Storage FDC plugin for FDF.
+* dummymsfdc.rsc Dummy Resource file for Mass Storage FDC plugin.
+*
+*/
+
+/**
+ @file
+ @internalComponent
+*/
+
+TARGET msfdc_overdummy.dll
+TARGETTYPE PLUGIN
+// UID2 = 0x10009d8d for ECOM plugins.
+// UID3 = the 'DLL UID' (see resource file)
+UID 0x10009d8d 0x10285B0C
+MACRO __DUMMYFDF__
+SOURCEPATH ../src
+SOURCE msfdc.cpp
+SOURCE msfdcmain.cpp
+
+RESOURCE msfdc_overdummy.rss
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+USERINCLUDE ../inc
+USERINCLUDE ../../msmm/client/public
+USERINCLUDE ../../msmm/server/public
+USERINCLUDE ../traces
+
+
+LIBRARY euser.lib
+
+LIBRARY fdcbase_overdummy.lib
+LIBRARY usbmsmmclient_dummy.lib
+LIBRARY usbdescriptors.lib
+LIBRARY usbdi_utils_dummy.lib
+NOEXPORTLIBRARY
+
+#include <usbhost/internal/fdfcaps.mmh>
--- a/usbmgmt/usbmgr/host/functiondrivers/ms/msfdc/inc/msfdc.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/host/functiondrivers/ms/msfdc/inc/msfdc.h Fri Sep 17 08:40:15 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -24,9 +24,14 @@
#define MSFDC_H
#include <e32base.h>
+#include <usbhost/internal/fdcinterface.h>
+#ifndef __DUMMYFDF__
#include <usbhost/internal/fdcplugin.h>
-#include <usbhost/internal/fdcinterface.h>
#include "msmmclient.h"
+#else
+#include <dummymsmmclient.h>
+#include <usbhost/internal/dummyfdcplugin.h>
+#endif
/**
The CMsFdc class
--- a/usbmgmt/usbmgr/host/functiondrivers/ms/msfdc/src/msfdc.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/host/functiondrivers/ms/msfdc/src/msfdc.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -23,8 +23,13 @@
#include "msfdc.h"
#include "utils.h"
#include <d32usbc.h>
+#ifndef __DUMMYFDF__
#include <usbhost/internal/fdcpluginobserver.h>
#include <d32usbdi.h>
+#else
+#include <dummyfdcpluginobserver.h>
+#include <dummyusbinterface.h>
+#endif
#include <d32usbdescriptors.h>
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
@@ -223,11 +228,11 @@
}
error = interface_ep0.GetInterfaceDescriptor(ifDescriptor);
- interface_ep0.Close();
if (error)
{
OstTrace0( TRACE_ERROR, CMSFDC_MFI1NEWFUNCTION_DUP14,
"***** Mass Storage FDC get interface descriptor Failed" );
+ interface_ep0.Close();
delete data;
OstTraceFunctionExit0( CMSFDC_MFI1NEWFUNCTION_EXIT_DUP7 );
return error;
@@ -261,6 +266,7 @@
error = iMsmmSession.AddFunction(*data, aInterfaces[0], token);
+ interface_ep0.Close();
delete data;
OstTraceFunctionExit0( CMSFDC_MFI1NEWFUNCTION_EXIT_DUP8 );
return error;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/host/functiondrivers/ms/msfdc/src/msfdc_overdummy.rss Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include <ecom/registryinfo.rh>
+#include <usbhost/internal/fdcplugin.hrh>
+
+RESOURCE REGISTRY_INFO theInfo
+{
+dll_uid = 0x10285B0C;
+interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = KFdcEcomInterfaceUid;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x20031DF7;
+ version_no = 1;
+ display_name = "Dummy MS FDC";
+ default_data = "IC0x08ISC0x06IP0x50";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+}
--- a/usbmgmt/usbmgr/host/functiondrivers/ms/msfdc/src/msfdcmain.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/host/functiondrivers/ms/msfdc/src/msfdcmain.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -25,7 +25,11 @@
const TImplementationProxy ImplementationTable[] =
{
+#ifndef __DUMMYFDF__
IMPLEMENTATION_PROXY_ENTRY(0x10285B0D, CMsFdc::NewL),
+#else
+ IMPLEMENTATION_PROXY_ENTRY(0x20031DF7, CMsFdc::NewL),
+#endif
};
/**
A factory method that returns the number of implementation of an interfaces
--- a/usbmgmt/usbmgr/host/functiondrivers/ms/msmm/server/src/subcommands.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/host/functiondrivers/ms/msmm/server/src/subcommands.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -152,6 +152,9 @@
{
OstTraceFunctionEntry0( TREGISTERINTERFACE_DOCANCELASYNCCMD_ENTRY );
+ TRequestStatus* status = &iHandler.Status();
+ User::RequestComplete(status, KErrCancel);
+
if(iInterfaceNode)
{
iInterfaceNode->iUsbMsDevice.Remove();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/client/BWINS/usbman_over_dummylddu.def Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,52 @@
+EXPORTS
+ ?BusRespondSrp@RUsb@@QAEHXZ @ 1 NONAME ; int RUsb::BusRespondSrp(void)
+ ?HostEventNotificationCancel@RUsb@@QAEXXZ @ 2 NONAME ; void RUsb::HostEventNotificationCancel(void)
+ ?DeviceStateNotificationCancel@RUsb@@QAEXXZ @ 3 NONAME ; void RUsb::DeviceStateNotificationCancel(void)
+ ?CancelInterest@RUsb@@QAEHW4TUsbReqType@1@@Z @ 4 NONAME ; int RUsb::CancelInterest(enum RUsb::TUsbReqType)
+ ?__DbgMarkEnd@RUsb@@QAEHH@Z @ 5 NONAME ; int RUsb::__DbgMarkEnd(int)
+ ?StateNotification@RUsb@@QAEXIAAW4TUsbDeviceState@@AAVTRequestStatus@@@Z @ 6 NONAME ; void RUsb::StateNotification(unsigned int, enum TUsbDeviceState &, class TRequestStatus &)
+ ?BusRequest@RUsb@@QAEHXZ @ 7 NONAME ; int RUsb::BusRequest(void)
+ ?panic@@YAXXZ @ 8 NONAME ; void panic(void)
+ ?StateNotificationCancel@RUsb@@QAEXXZ @ 9 NONAME ; void RUsb::StateNotificationCancel(void)
+ ?Connect@RUsb@@QAEHXZ @ 10 NONAME ; int RUsb::Connect(void)
+ ?GetCurrentState@RUsb@@QAEHAAW4TUsbServiceState@@@Z @ 11 NONAME ; int RUsb::GetCurrentState(enum TUsbServiceState &)
+ ?Version@RUsb@@QBE?AVTVersion@@XZ @ 12 NONAME ; class TVersion RUsb::Version(void) const
+ ??0RUsb@@QAE@XZ @ 13 NONAME ; RUsb::RUsb(void)
+ ?RequestSession@RUsb@@QAEHXZ @ 14 NONAME ; int RUsb::RequestSession(void)
+ ?TryStart@RUsb@@QAEXHAAVTRequestStatus@@@Z @ 15 NONAME ; void RUsb::TryStart(int, class TRequestStatus &)
+ ?GetSupportedClasses@RUsb@@QAEHHAAV?$RArray@VTUid@@@@@Z @ 16 NONAME ; int RUsb::GetSupportedClasses(int, class RArray<class TUid> &)
+ ?DeviceStateNotification@RUsb@@QAEXIAAW4TUsbDeviceState@@AAVTRequestStatus@@@Z @ 17 NONAME ; void RUsb::DeviceStateNotification(unsigned int, enum TUsbDeviceState &, class TRequestStatus &)
+ ?TryStop@RUsb@@QAEXAAVTRequestStatus@@@Z @ 18 NONAME ; void RUsb::TryStop(class TRequestStatus &)
+ ?__DbgAlloc@RUsb@@QAEHXZ @ 19 NONAME ; int RUsb::__DbgAlloc(void)
+ ?DisableFunctionDriverLoading@RUsb@@QAEXXZ @ 20 NONAME ; void RUsb::DisableFunctionDriverLoading(void)
+ ?ServiceStateNotificationCancel@RUsb@@QAEXXZ @ 21 NONAME ; void RUsb::ServiceStateNotificationCancel(void)
+ ?Stop@RUsb@@QAEXAAVTRequestStatus@@@Z @ 22 NONAME ; void RUsb::Stop(class TRequestStatus &)
+ ?ServiceStateNotification@RUsb@@QAEXAAW4TUsbServiceState@@AAVTRequestStatus@@@Z @ 23 NONAME ; void RUsb::ServiceStateNotification(enum TUsbServiceState &, class TRequestStatus &)
+ ??1RUsb@@QAE@XZ @ 24 NONAME ; RUsb::~RUsb(void)
+ ?StartCancel@RUsb@@QAEXXZ @ 25 NONAME ; void RUsb::StartCancel(void)
+ ?EnableFunctionDriverLoading@RUsb@@QAEHXZ @ 26 NONAME ; int RUsb::EnableFunctionDriverLoading(void)
+ ?HostEventNotification@RUsb@@QAEXAAVTRequestStatus@@AAVTDeviceEventInformation@@@Z @ 27 NONAME ; void RUsb::HostEventNotification(class TRequestStatus &, class TDeviceEventInformation &)
+ ?ClassSupported@RUsb@@QAEHHVTUid@@AAH@Z @ 28 NONAME ; int RUsb::ClassSupported(int, class TUid, int &)
+ ?__DbgCheckHeap@RUsb@@QAEHH@Z @ 29 NONAME ; int RUsb::__DbgCheckHeap(int)
+ ?GetPersonalityProperty@RUsb@@QAEHHAAK@Z @ 30 NONAME ; int RUsb::GetPersonalityProperty(int, unsigned long &)
+ ?Stop@RUsb@@QAEXXZ @ 31 NONAME ; void RUsb::Stop(void)
+ ?GetDetailedDescription@RUsb@@QAEHHAAPAVHBufC16@@@Z @ 32 NONAME ; int RUsb::GetDetailedDescription(int, class HBufC16 * &)
+ ?GetServiceState@RUsb@@QAEHAAW4TUsbServiceState@@@Z @ 33 NONAME ; int RUsb::GetServiceState(enum TUsbServiceState &)
+ ?MessageNotificationCancel@RUsb@@QAEXXZ @ 34 NONAME ; void RUsb::MessageNotificationCancel(void)
+ ?BusDrop@RUsb@@QAEHXZ @ 35 NONAME ; int RUsb::BusDrop(void)
+ ?GetPersonalityIds@RUsb@@QAEHAAV?$RArray@H@@@Z @ 36 NONAME ; int RUsb::GetPersonalityIds(class RArray<int> &)
+ ?GetSupportedLanguages@RUsb@@QAEHIAAV?$RArray@I@@@Z @ 37 NONAME ; int RUsb::GetSupportedLanguages(unsigned int, class RArray<unsigned int> &)
+ ?SetCtlSessionMode@RUsb@@QAEHH@Z @ 38 NONAME ; int RUsb::SetCtlSessionMode(int)
+ ?StopCancel@RUsb@@QAEXXZ @ 39 NONAME ; void RUsb::StopCancel(void)
+ ?Start@RUsb@@QAEXAAVTRequestStatus@@@Z @ 40 NONAME ; void RUsb::Start(class TRequestStatus &)
+ ?__DbgFailNext@RUsb@@QAEHH@Z @ 41 NONAME ; int RUsb::__DbgFailNext(int)
+ ?GetManufacturerStringDescriptor@RUsb@@QAEHIIAAV?$TBuf@$0IA@@@@Z @ 42 NONAME ; int RUsb::GetManufacturerStringDescriptor(unsigned int, unsigned int, class TBuf<128> &)
+ ?MessageNotification@RUsb@@QAEXAAVTRequestStatus@@AAH@Z @ 43 NONAME ; void RUsb::MessageNotification(class TRequestStatus &, int &)
+ ?BusClearError@RUsb@@QAEHXZ @ 44 NONAME ; int RUsb::BusClearError(void)
+ ?GetProductStringDescriptor@RUsb@@QAEHIIAAV?$TBuf@$0IA@@@@Z @ 45 NONAME ; int RUsb::GetProductStringDescriptor(unsigned int, unsigned int, class TBuf<128> &)
+ ?GetDescription@RUsb@@QAEHHAAPAVHBufC16@@@Z @ 46 NONAME ; int RUsb::GetDescription(int, class HBufC16 * &)
+ ?__DbgMarkHeap@RUsb@@QAEHXZ @ 47 NONAME ; int RUsb::__DbgMarkHeap(void)
+ ?GetDeviceState@RUsb@@QAEHAAW4TUsbDeviceState@@@Z @ 48 NONAME ; int RUsb::GetDeviceState(enum TUsbDeviceState &)
+ ?GetCurrentPersonalityId@RUsb@@QAEHAAH@Z @ 49 NONAME ; int RUsb::GetCurrentPersonalityId(int &)
+ ?GetOtgDescriptor@RUsb@@QAEHIAAVTOtgDescriptor@@@Z @ 50 NONAME ; int RUsb::GetOtgDescriptor(unsigned int, class TOtgDescriptor &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/client/EABI/usbman_over_dummylddu.def Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,54 @@
+EXPORTS
+ _Z5panicv @ 1 NONAME
+ _ZN4RUsb10BusRequestEv @ 2 NONAME
+ _ZN4RUsb10StopCancelEv @ 3 NONAME
+ _ZN4RUsb10__DbgAllocEv @ 4 NONAME
+ _ZN4RUsb11StartCancelEv @ 5 NONAME
+ _ZN4RUsb12__DbgMarkEndEi @ 6 NONAME
+ _ZN4RUsb13BusClearErrorEv @ 7 NONAME
+ _ZN4RUsb13BusRespondSrpEv @ 8 NONAME
+ _ZN4RUsb13__DbgFailNextEi @ 9 NONAME
+ _ZN4RUsb13__DbgMarkHeapEv @ 10 NONAME
+ _ZN4RUsb14CancelInterestENS_11TUsbReqTypeE @ 11 NONAME
+ _ZN4RUsb14ClassSupportedEi4TUidRi @ 12 NONAME
+ _ZN4RUsb14GetDescriptionEiRP7HBufC16 @ 13 NONAME
+ _ZN4RUsb14GetDeviceStateER15TUsbDeviceState @ 14 NONAME
+ _ZN4RUsb14RequestSessionEv @ 15 NONAME
+ _ZN4RUsb14__DbgCheckHeapEi @ 16 NONAME
+ _ZN4RUsb15GetCurrentStateER16TUsbServiceState @ 17 NONAME
+ _ZN4RUsb15GetServiceStateER16TUsbServiceState @ 18 NONAME
+ _ZN4RUsb16GetOtgDescriptorEjR14TOtgDescriptor @ 19 NONAME
+ _ZN4RUsb17GetPersonalityIdsER6RArrayIiE @ 20 NONAME
+ _ZN4RUsb17SetCtlSessionModeEi @ 21 NONAME
+ _ZN4RUsb17StateNotificationEjR15TUsbDeviceStateR14TRequestStatus @ 22 NONAME
+ _ZN4RUsb19GetSupportedClassesEiR6RArrayI4TUidE @ 23 NONAME
+ _ZN4RUsb19MessageNotificationER14TRequestStatusRi @ 24 NONAME
+ _ZN4RUsb21GetSupportedLanguagesEjR6RArrayIjE @ 25 NONAME
+ _ZN4RUsb21HostEventNotificationER14TRequestStatusR23TDeviceEventInformation @ 26 NONAME
+ _ZN4RUsb22GetDetailedDescriptionEiRP7HBufC16 @ 27 NONAME
+ _ZN4RUsb22GetPersonalityPropertyEiRm @ 28 NONAME
+ _ZN4RUsb23DeviceStateNotificationEjR15TUsbDeviceStateR14TRequestStatus @ 29 NONAME
+ _ZN4RUsb23GetCurrentPersonalityIdERi @ 30 NONAME
+ _ZN4RUsb23StateNotificationCancelEv @ 31 NONAME
+ _ZN4RUsb24ServiceStateNotificationER16TUsbServiceStateR14TRequestStatus @ 32 NONAME
+ _ZN4RUsb25MessageNotificationCancelEv @ 33 NONAME
+ _ZN4RUsb26GetProductStringDescriptorEjjR4TBufILi128EE @ 34 NONAME
+ _ZN4RUsb27EnableFunctionDriverLoadingEv @ 35 NONAME
+ _ZN4RUsb27HostEventNotificationCancelEv @ 36 NONAME
+ _ZN4RUsb28DisableFunctionDriverLoadingEv @ 37 NONAME
+ _ZN4RUsb29DeviceStateNotificationCancelEv @ 38 NONAME
+ _ZN4RUsb30ServiceStateNotificationCancelEv @ 39 NONAME
+ _ZN4RUsb31GetManufacturerStringDescriptorEjjR4TBufILi128EE @ 40 NONAME
+ _ZN4RUsb4StopER14TRequestStatus @ 41 NONAME
+ _ZN4RUsb4StopEv @ 42 NONAME
+ _ZN4RUsb5StartER14TRequestStatus @ 43 NONAME
+ _ZN4RUsb7BusDropEv @ 44 NONAME
+ _ZN4RUsb7ConnectEv @ 45 NONAME
+ _ZN4RUsb7TryStopER14TRequestStatus @ 46 NONAME
+ _ZN4RUsb8TryStartEiR14TRequestStatus @ 47 NONAME
+ _ZN4RUsbC1Ev @ 48 NONAME
+ _ZN4RUsbC2Ev @ 49 NONAME
+ _ZN4RUsbD1Ev @ 50 NONAME
+ _ZN4RUsbD2Ev @ 51 NONAME
+ _ZNK4RUsb7VersionEv @ 52 NONAME
+
--- a/usbmgmt/usbmgr/usbman/client/group/BLD.INF Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/client/group/BLD.INF Fri Sep 17 08:40:15 2010 +0300
@@ -29,4 +29,5 @@
*/
PRJ_TESTMMPFILES
Usbman_over_dummyusbdi.mmp
+usbman_over_dummyldd.mmp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/client/group/Usbman_over_dummyldd.mmp Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* usbman_over_dummyldd.mmp
+* usbman_over_dummyldd.dll USB Client side RUsb Class
+*
+*/
+
+/**
+ @file
+*/
+
+MACRO __DUMMY_LDD__
+
+target usbman_over_dummyldd.dll
+CAPABILITY All -Tcb
+targettype dll
+
+uid 0x1000008d 0x101fe1da
+
+sourcepath ../SRC
+source RUsb.cpp
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+userinclude ../../server/public
+userinclude ../traces
+
+library euser.lib
+
+VENDORID 0x70000001
+
+UNPAGED
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/extensionplugin/BWINS/usbmanextensionplugindummyu.def Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,8 @@
+EXPORTS
+ ??1CUsbmanExtensionPlugin@@UAE@XZ @ 1 NONAME ; CUsbmanExtensionPlugin::~CUsbmanExtensionPlugin(void)
+ ?NewL@CUsbmanExtensionPlugin@@SAPAV1@VTUid@@AAVMUsbmanExtensionPluginObserver@@@Z @ 2 NONAME ; class CUsbmanExtensionPlugin * CUsbmanExtensionPlugin::NewL(class TUid, class MUsbmanExtensionPluginObserver &)
+ ?RegisterStateObserverL@MUsbmanExtensionPluginObserver@@QAEXAAVMUsbDeviceNotify@@@Z @ 3 NONAME ; void MUsbmanExtensionPluginObserver::RegisterStateObserverL(class MUsbDeviceNotify &)
+ ?Observer@CUsbmanExtensionPlugin@@IAEAAVMUsbmanExtensionPluginObserver@@XZ @ 4 NONAME ; class MUsbmanExtensionPluginObserver & CUsbmanExtensionPlugin::Observer(void)
+ ?DevUsbcClient@MUsbmanExtensionPluginObserver@@QAEAAVRDevUsbcClient@@XZ @ 5 NONAME ; class RDevUsbcClient & MUsbmanExtensionPluginObserver::DevUsbcClient(void)
+ ??0CUsbmanExtensionPlugin@@IAE@AAVMUsbmanExtensionPluginObserver@@@Z @ 6 NONAME ; CUsbmanExtensionPlugin::CUsbmanExtensionPlugin(class MUsbmanExtensionPluginObserver &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/extensionplugin/EABI/usbmanextensionplugindummyu.def Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,12 @@
+EXPORTS
+ _ZN22CUsbmanExtensionPlugin4NewLE4TUidR30MUsbmanExtensionPluginObserver @ 1 NONAME
+ _ZN22CUsbmanExtensionPlugin8ObserverEv @ 2 NONAME
+ _ZN22CUsbmanExtensionPluginC2ER30MUsbmanExtensionPluginObserver @ 3 NONAME
+ _ZN22CUsbmanExtensionPluginD0Ev @ 4 NONAME
+ _ZN22CUsbmanExtensionPluginD1Ev @ 5 NONAME
+ _ZN22CUsbmanExtensionPluginD2Ev @ 6 NONAME
+ _ZN30MUsbmanExtensionPluginObserver13DevUsbcClientEv @ 7 NONAME
+ _ZN30MUsbmanExtensionPluginObserver22RegisterStateObserverLER16MUsbDeviceNotify @ 8 NONAME
+ _ZTI22CUsbmanExtensionPlugin @ 9 NONAME
+ _ZTV22CUsbmanExtensionPlugin @ 10 NONAME
+
--- a/usbmgmt/usbmgr/usbman/extensionplugin/group/UsbManExtensionPlugin.mmp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/extensionplugin/group/UsbManExtensionPlugin.mmp Fri Sep 17 08:40:15 2010 +0300
@@ -39,4 +39,5 @@
LIBRARY euser.lib
LIBRARY ecom.lib
+
//macro __USB_LOG_TO_RDEBUG__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/extensionplugin/group/UsbManExtensionPluginDummy.mmp Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* usbmanextensionplugindummy.dll Base DLL for UsbMan extension plugins
+* Plugins to UsbMan.
+*
+*/
+
+/**
+ @file
+ @internalComponent
+*/
+
+TARGET usbmanextensionplugindummy.dll
+TARGETTYPE dll
+// UID2 = 0x1000008d for static interface DLLs.
+// UID3 = unique for UsbMan system
+UID 0x1000008d 0x101f9067
+VENDORID 0x70000001
+CAPABILITY CommDD NetworkControl NetworkServices LocalServices ProtServ
+
+SOURCEPATH ../src
+SOURCE CUsbManExtensionPlugin.cpp
+SOURCE MUsbManExtensionPluginObserver.cpp
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+LIBRARY euser.lib
+LIBRARY ecom.lib
+MACRO __DUMMY_LDD__
+
+//macro __USB_LOG_TO_RDEBUG__
--- a/usbmgmt/usbmgr/usbman/extensionplugin/group/bld.inf Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/extensionplugin/group/bld.inf Fri Sep 17 08:40:15 2010 +0300
@@ -19,5 +19,11 @@
../public/CUsbManExtensionPlugin.h SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(cusbmanextensionplugin.h)
../public/MUsbManExtensionPluginObserver.h SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(musbmanextensionpluginobserver.h)
+PRJ_TESTEXPORTS
+../inc/CUsbManExtensionPluginDummy.h SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(cusbmanextensionplugindummy.h)
+../inc/MUsbManExtensionPluginObserverDummy.h SYMBIAN_OS_LAYER_PLATFORM_EXPORT_PATH(musbmanextensionpluginobserverdummy.h)
+
PRJ_MMPFILES
UsbManExtensionPlugin.mmp
+PRJ_TESTMMPFILES
+UsbManExtensionPluginDummy.mmp
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/extensionplugin/inc/CUsbManExtensionPluginDummy.h Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,87 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Abstract base class for usbman extension plugins.
+*
+*/
+
+/**
+ @file
+ @publishedPartner
+ @released
+*/
+
+#ifndef USBMANEXTENSIONPLUGINDUMMY_H
+#define USBMANEXTENSIONPLUGINDUMMY_H
+
+#include <e32base.h>
+#include "dummyusblddapi.h"
+
+class MUsbmanExtensionPluginObserver;
+class MUsbDeviceNotify;
+
+/**
+The UID of the Usbman Extension Plugin interface.
+*/
+const TInt KUsbmanExtensionPluginInterfaceUid = 0x10208DD6;
+
+class CUsbmanExtensionPlugin : public CBase
+ {
+public:
+ /**
+ Constructor.
+ @param aImplementationUid The UID of the implementation.
+ @param aObserver The observer of the plugin.
+ */
+ IMPORT_C static CUsbmanExtensionPlugin* NewL(const TUid aImplementationUid,
+ MUsbmanExtensionPluginObserver& aObserver);
+
+ /** Destructor. */
+ IMPORT_C ~CUsbmanExtensionPlugin();
+
+public:
+ /**
+ Called by Usbman server to get a pointer to an object which implements the
+ ExtensionPlugin interface with UID aUid. This is a mechanism for allowing future
+ change to the plugin API without breaking BC in existing (non-updated)
+ plugins.
+ */
+ virtual TAny* GetInterface(TUid aUid) = 0;
+
+protected:
+ /**
+ Constructor.
+ @param aObserver The observer of the plugin.
+ */
+ IMPORT_C CUsbmanExtensionPlugin(MUsbmanExtensionPluginObserver& aObserver);
+
+protected:
+ /**
+ Accessor for the observer.
+ @return The observer.
+ */
+ IMPORT_C MUsbmanExtensionPluginObserver& Observer();
+
+private: // owned
+ /**
+ UID set by ECOM when the instance is created. Used when the instance is
+ destroyed.
+ */
+ TUid iInstanceId;
+
+private: // unowned
+ MUsbmanExtensionPluginObserver& iObserver;
+ };
+
+#endif // USBMANEXTENSIONPLUGINDUMMY_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/extensionplugin/inc/MUsbManExtensionPluginObserverDummy.h Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Interface presented by Usbman down to the concrete Usbman Extension Plugins.
+*
+*/
+
+/**
+ @file
+ @publishedPartner
+ @released
+*/
+
+#ifndef USBMANEXTENSIONPLUGINOBSERVERDUMMY_H
+#define USBMANEXTENSIONPLUGINOBSERVERDUMMY_H
+
+#include <e32base.h>
+#include "dummyusblddapi.h"
+
+class MUsbDeviceNotify;
+
+class MUsbmanExtensionPluginObserver
+ {
+
+public:
+ /**
+ Called by the plugin to get a RDevUsbcClient handle from its owner
+ @return RDevUsbcClient handle
+ */
+ IMPORT_C RDevUsbcClient& DevUsbcClient();
+
+ /**
+ Called by the plugin to register for device/service state changes from its owner
+ @param aObserver The observer to register for state changes
+ */
+ IMPORT_C void RegisterStateObserverL(MUsbDeviceNotify& aObserver);
+
+private:
+ /**
+ @see DevUsbcClient.
+ */
+ virtual RDevUsbcClient& MuepoDoDevUsbcClient() = 0;
+
+ /**
+ @see RegisterStateObserverL.
+ */
+ virtual void MuepoDoRegisterStateObserverL(MUsbDeviceNotify& aObserver) = 0;
+ };
+
+#endif // USBMANEXTENSIONPLUGINOBSERVERDUMMY_H
--- a/usbmgmt/usbmgr/usbman/extensionplugin/src/CUsbManExtensionPlugin.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/extensionplugin/src/CUsbManExtensionPlugin.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -20,9 +20,13 @@
@file
@internalComponent
*/
-
+#ifndef __DUMMY_LDD__
#include "cusbmanextensionplugin.h"
#include "musbmanextensionpluginobserver.h"
+#else
+#include <cusbmanextensionplugindummy.h>
+#include <musbmanextensionpluginobserverdummy.h>
+#endif
#include <ecom/ecom.h>
EXPORT_C CUsbmanExtensionPlugin::~CUsbmanExtensionPlugin()
--- a/usbmgmt/usbmgr/usbman/extensionplugin/src/MUsbManExtensionPluginObserver.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/extensionplugin/src/MUsbManExtensionPluginObserver.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -21,8 +21,11 @@
@publishedPartner
@released
*/
-
+#ifndef __DUMMY_LDD__
#include "musbmanextensionpluginobserver.h"
+#else
+#include "musbmanextensionpluginobserverdummy.h"
+#endif
EXPORT_C RDevUsbcClient& MUsbmanExtensionPluginObserver::DevUsbcClient()
{
--- a/usbmgmt/usbmgr/usbman/server/INC/CUsbDevice.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/INC/CUsbDevice.h Fri Sep 17 08:40:15 2010 +0300
@@ -30,10 +30,18 @@
#include <usbstates.h>
#include <musbclasscontrollernotify.h>
#include <ecom/ecom.h>
+#ifndef __DUMMY_LDD__
#include <d32usbc.h>
+#else
+#include "dummyusblddapi.h"
+#endif
#include <e32std.h>
#include <usb/usblogger.h>
+#ifndef __DUMMY_LDD__
#include <musbmanextensionpluginobserver.h>
+#else
+#include <musbmanextensionpluginobserverdummy.h>
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/INC/CUsbDummyClassControllerLdd.h Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,89 @@
+/**
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Adheres to the UsbMan USB Class Controller API.
+*
+*
+*/
+
+
+
+/**
+ @file
+*/
+
+#ifndef CUSBDUMMYCLASSCONTROLLERLDD_H__
+#define CUSBDUMMYCLASSCONTROLLERLDD_H__
+#include <e32std.h>
+#include <e32property.h>
+#include <cusbclasscontrollerplugin.h>
+
+NONSHARABLE_CLASS(CUsbDummyClassControllerLdd) : public CUsbClassControllerPlugIn
+
+ {
+public:
+ static CUsbDummyClassControllerLdd* NewL(MUsbClassControllerNotify& aOwner, TUint aIndex);
+ ~CUsbDummyClassControllerLdd();
+
+private:
+ CUsbDummyClassControllerLdd(MUsbClassControllerNotify& aOwner, TUint aIndex);
+ CUsbDummyClassControllerLdd(MUsbClassControllerNotify& aOwner,TUint aIndex, TInt aPriority);
+ void ConstructL();
+
+private: // from CActive
+ void RunL();
+ void DoCancel();
+ TInt RunError(TInt aError);
+
+private: // from CUsbClassControllerBase
+ void Start(TRequestStatus& aStatus);
+ void Stop(TRequestStatus& aStatus);
+ void GetDescriptorInfo(TUsbDescriptor& aDescriptorInfo) const;
+
+private:
+ enum TSynchronicity
+ {
+ EUndefined = 0,
+ ESynchronous,
+ EAsynchronous,
+ ENever,
+ };
+
+ NONSHARABLE_STRUCT( TBehaviour )
+ /**
+ * Defines the behaviour for a startup or a shutdown.
+ */
+ {
+ TSynchronicity iSynchronicity;
+ TTimeIntervalMicroSeconds32 iDelay;
+ TInt iErrorCode;
+ };
+
+private: // utility
+ void GetConfig();
+ void DoGetConfigL();
+
+private: // unowned
+ TRequestStatus* iReportStatus;
+
+private: // owned
+ RTimer iTimer;
+ const TUint iIndex;
+ RProperty iProperty;
+ TBool iPropertyExist;
+ TBehaviour iStartupBehaviour;
+ TBehaviour iShutdownBehaviour;
+ };
+
+#endif // CUSBDUMMYCLASSCONTROLLER_H__
--- a/usbmgmt/usbmgr/usbman/server/INC/CUsbOtg.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/INC/CUsbOtg.h Fri Sep 17 08:40:15 2010 +0300
@@ -26,7 +26,12 @@
#ifndef __CUSBOTG_H__
#define __CUSBOTG_H__
+#ifndef __OVER_DUMMYUSBDI__
#include <d32otgdi.h>
+#else
+#include <usbhost/dummyotgdi/d32otgdi.h>
+#endif
+
#include <d32otgdi_errors.h>
#include <e32std.h>
#include <usb/usblogger.h>
--- a/usbmgmt/usbmgr/usbman/server/INC/cusbotgwatcher.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/INC/cusbotgwatcher.h Fri Sep 17 08:40:15 2010 +0300
@@ -27,7 +27,13 @@
#define __CUSBOTGWATCHER_H__
#include <e32def.h>
+
+#ifndef __OVER_DUMMYUSBDI__
#include <d32otgdi.h>
+#else
+#include <usbhost/dummyotgdi/d32otgdi.h>
+#endif
+
#include <e32property.h> //Publish & Subscribe header
class MUsbOtgObserver;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/INC/featurediscovery.h Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,34 @@
+/**
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* .
+*
+*
+*/
+
+#ifndef FEATUREDISCOVERY_H_
+#define FEATUREDISCOVERY_H_
+class CFeatureDiscovery : public CBase
+ {
+ public:
+
+
+ inline static TBool IsFeatureSupportedL( TUid aFeature )
+ {
+ return true;
+ }
+
+ } ;
+
+#endif /* FEATUREDISCOVERY_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/SRC/20031D6F.rss Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <ecom/registryinfo.rh>
+
+RESOURCE REGISTRY_INFO theInfo
+ {
+ dll_uid = 0x20031D6F;
+ interfaces =
+ {
+ INTERFACE_INFO
+ {
+ interface_uid = 0x101fbf21;
+ implementations =
+ {
+ IMPLEMENTATION_INFO
+ {
+ implementation_uid = 0x20031D70;
+ version_no = 1;
+ display_name = "DUMMY";
+ default_data = "";
+ opaque_data = "";
+ }
+ };
+ }
+ };
+ }
--- a/usbmgmt/usbmgr/usbman/server/SRC/CUsbDevice.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/SRC/CUsbDevice.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -23,7 +23,6 @@
#include <cusbclasscontrolleriterator.h>
#include <cusbclasscontrollerbase.h>
#include <cusbclasscontrollerplugin.h>
-#include <cusbmanextensionplugin.h>
#include <bafl/sysutil.h>
#include <usb/usblogger.h>
#include <e32svr.h>
@@ -33,6 +32,11 @@
#include <barsc.h>
#include <barsread.h>
#include <bautils.h>
+#ifndef __DUMMY_LDD__
+#include <cusbmanextensionplugin.h>
+#else
+#include <cusbmanextensionplugindummy.h>
+#endif
#include <e32property.h> //Publish & Subscribe header
#ifdef USE_DUMMY_CLASS_CONTROLLER
#include "CUsbDummyClassController.h"
@@ -182,9 +186,11 @@
#ifndef __OVER_DUMMYUSBDI__
#ifndef __WINS__
OstTrace0( TRACE_NORMAL, CUSBDEVICE_CONSTRUCTL, "CUsbDevice::ConstructL; About to load LDD" );
-
+#ifndef __DUMMY_LDD__
TInt err = User::LoadLogicalDevice(KUsbLDDName);
-
+#else
+ TInt err = KErrNone;
+#endif
if (err != KErrNone && err != KErrAlreadyExists)
{
OstTrace1( TRACE_NORMAL, CUSBDEVICE_CONSTRUCTL_DUP10, "CUsbDevice::ConstructL;err=%d", err );
@@ -291,10 +297,12 @@
for (TInt i=0; i<implementations.Count(); i++)
{
+#ifndef __DUMMY_LDD__
CUsbmanExtensionPlugin* plugin = CUsbmanExtensionPlugin::NewL(implementations[i]->ImplementationUid(), *this);
CleanupStack::PushL(plugin);
iExtensionPlugins.AppendL(plugin); // transfer ownership to iExtensionPlugins
CleanupStack::Pop(plugin);
+#endif
OstTrace1( TRACE_NORMAL, CUSBDEVICE_INSTANTIATEEXTENSIONPLUGINSL_DUP1,
"CUsbDevice::InstantiateExtensionPluginsL;Added extension plugin with UID 0x%08x",
implementations[i]->ImplementationUid().iUid );
--- a/usbmgmt/usbmgr/usbman/server/SRC/CUsbDummyClassController.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/SRC/CUsbDummyClassController.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -269,7 +269,7 @@
// Always use dummy.ini. The entity setting up the test is responsible for
// copying the correct file to c:\\dummy.ini. The first found
- // by FindByDir will be used. TODO: enforce c:\\.
+ // by FindByDir will be used.
TRAPD(err, DoGetConfigL());
if ( err != KErrNone )
{
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/SRC/CUsbDummyClassControllerLdd.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,260 @@
+/*
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Implements part of UsbMan USB Class Framework.
+*
+*/
+
+/**
+ @file
+*/
+
+#include <usb_std.h>
+#include <cusbclasscontrolleriterator.h>
+#include <musbclasscontrollernotify.h>
+#include "CUsbDummyClassControllerLdd.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "CUsbDummyClassControllerLddTraces.h"
+#endif
+
+
+
+const TInt32 KDummyLDDTestServUid = 0x20031D88;
+const TUint KCCErrorTestStepPublishedDeviceEventKey = 0x20031D6F;
+// Panic codes
+enum
+ {
+ // Bad value for the iSynchronicity member.
+ EDummyPanicBadSynchronicity = 0,
+
+ // Used for environment errors we do not handle.
+ EDummyPanicUnhandledError = 1,
+
+ // Used for bad iStatus and other state errors.
+ EDummyPanicBadState = 2,
+
+ // Error reading ini file.
+ EDummyPanicBadIniFile = 3,
+
+ // We already have our async request active.
+ EDummyPanicAlreadyActive = 4,
+
+ // We already have a request outstanding from the device class.
+ EDummyPanicOutstandingRequestFromDevice = 5,
+
+ // Attempt to call Start() when in illegal state
+ EDummyPanicBadApiCallStart = 6,
+
+ // Attempt to call Stop() when in illegal state
+ EDummyPanicBadApiCallStop = 7,
+ };
+
+const TInt KDummyClassPriority = 1;
+
+
+
+CUsbDummyClassControllerLdd* CUsbDummyClassControllerLdd::NewL(
+ MUsbClassControllerNotify& aOwner,
+ TUint aIndex)
+
+/**
+ * Constructs a CUsbDummyClassControllerLdd object.
+ *
+ * @param aOwner USB Device that owns and manages the class
+ * @param aIndex The index number of the instance
+ * @return Ownership of a new CUsbDummyClassControllerLdd object
+ */
+
+ {
+ CUsbDummyClassControllerLdd* self = new(ELeave) CUsbDummyClassControllerLdd(aOwner, aIndex);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+
+CUsbDummyClassControllerLdd::CUsbDummyClassControllerLdd(
+ MUsbClassControllerNotify& aOwner,
+ TUint aIndex)
+/**
+ * Constructor.
+ *
+ * @param aOwner USB Device that owns and manages the class
+ * @param aIndex The index number of the instance
+ */
+ : CUsbClassControllerPlugIn(aOwner, KDummyClassPriority),
+ iIndex(aIndex)
+ {
+ iState = EUsbServiceIdle; // needs explicit initialisation as non-zero
+ iPropertyExist = EFalse;
+ }
+
+CUsbDummyClassControllerLdd::CUsbDummyClassControllerLdd(
+ MUsbClassControllerNotify& aOwner,
+ TUint aIndex, TInt aPriority)
+
+/**
+ * Constructor.
+ *
+ * @param aOwner USB Device that owns and manages the class
+ * @param aIndex The index number of the instance
+ * @param aPriority a startup priority for the class controller
+ */
+ : CUsbClassControllerPlugIn(aOwner, aPriority),
+ iIndex(aIndex)
+ {
+ iState = EUsbServiceIdle; // needs explicit initialisation as non-zero
+ iPropertyExist = EFalse;
+ }
+
+void CUsbDummyClassControllerLdd::ConstructL()
+/**
+ * Method to perform second phase construction.
+ */
+ {
+ OstTraceFunctionEntry0( CUSBDUMMYCLASSCONTROLLERLDD_CONSTRUCTL_ENTRY );
+
+ OstTraceFunctionExit0( CUSBDUMMYCLASSCONTROLLERLDD_CONSTRUCTL_EXIT );
+ }
+
+CUsbDummyClassControllerLdd::~CUsbDummyClassControllerLdd()
+/**
+ * Destructor.
+ */
+ {
+ OstTraceFunctionEntry0( CUSBDUMMYCLASSCONTROLLERLDD_CUSBDUMMYCLASSCONTROLLERLDD_ENTRY );
+
+ Cancel();
+ iPropertyExist = EFalse;
+ OstTraceFunctionExit0( CUSBDUMMYCLASSCONTROLLERLDD_CUSBDUMMYCLASSCONTROLLERLDD_EXIT );
+ }
+
+void CUsbDummyClassControllerLdd::DoGetConfigL()
+/**
+ * Reads the config from the ini file.
+ */
+ {
+
+
+ }
+
+void CUsbDummyClassControllerLdd::GetConfig()
+/**
+ * Reads the config from the ini file.
+ * Note that this is assumed to succeed. Any failure will break the test and
+ * it's much cleaner to panic out of the test entirely rather than leave it to
+ * the user to figure out what's gone wrong.
+ */
+ {
+
+
+
+ }
+
+void CUsbDummyClassControllerLdd::Start(TRequestStatus& aStatus)
+/**
+ * Called by UsbMan to start this class.
+ *
+ * @param aStatus Will be completed with success or failure.
+ */
+ {
+ OstTraceFunctionEntry0( CUSBDUMMYCLASSCONTROLLERLDD_START_ENTRY );
+
+ CUsbClassControllerIterator *iterator = NULL;
+ TRAPD(ret,iterator = Owner().UccnGetClassControllerIteratorL());
+ if(ret == KErrNone)
+ {
+ delete iterator;
+ }
+ TRequestStatus* tmp = &aStatus;
+ User::RequestComplete(tmp, KErrNone);
+ if(!iPropertyExist)
+ {
+ TInt err = iProperty.Attach(TUid::Uid(KDummyLDDTestServUid),
+ KCCErrorTestStepPublishedDeviceEventKey);
+
+
+ iProperty.Subscribe(iStatus);
+ SetActive();
+ iPropertyExist = ETrue;
+ }
+
+ OstTraceFunctionExit0( CUSBDUMMYCLASSCONTROLLERLDD_START_EXIT );
+ }
+
+void CUsbDummyClassControllerLdd::Stop(TRequestStatus& aStatus)
+/**
+ * Called by UsbMan to stop this class.
+ *
+ * @param aStatus Will be completed with success or failure.
+ */
+ {
+ OstTraceFunctionEntry0( CUSBDUMMYCLASSCONTROLLERLDD_STOP_ENTRY );
+
+ TRequestStatus* tmp = &aStatus;
+ User::RequestComplete(tmp, KErrNone);
+
+ OstTraceFunctionExit0( CUSBDUMMYCLASSCONTROLLERLDD_STOP_EXIT );
+ }
+
+void CUsbDummyClassControllerLdd::GetDescriptorInfo(TUsbDescriptor& aDescriptorInfo) const
+/**
+ * Returns information about the interfaces supported by this class.
+ *
+ * @param aDescriptorInfo Will be filled in with interface information.
+ */
+ {
+ aDescriptorInfo.iNumInterfaces = 0;
+ aDescriptorInfo.iLength = 0;
+ }
+
+void CUsbDummyClassControllerLdd::RunL()
+/**
+ * Standard active object RunL.
+ */
+ {
+ OstTraceFunctionEntry0( CUSBDUMMYCLASSCONTROLLERLDD_RUNL_ENTRY );
+ TInt num;
+ iProperty.Get(num);
+ if(num < 0)
+ User::Leave(num);
+ iProperty.Subscribe(iStatus);
+ SetActive();
+ OstTraceFunctionExit0( CUSBDUMMYCLASSCONTROLLERLDD_RUNL_EXIT );
+ }
+
+void CUsbDummyClassControllerLdd::DoCancel()
+/**
+ * Standard active object cancellation function.
+ */
+ {
+ iProperty.Cancel();
+ }
+
+TInt CUsbDummyClassControllerLdd::RunError(TInt aError)
+/**
+ * Standard active object error-handling function.
+ *
+ * Should return KErrNone to avoid an active scheduler panic. This function
+ * should never be called as there is another mechanism for catching errors.
+ */
+ {
+ Owner().UccnError(KErrNone);
+ return KErrNone;
+ }
+
+//
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/SRC/CUsbDummyClassImpCollection.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include <e32base.h>
+#include <e32std.h>
+#include <ecom/ecom.h>
+#include <ecom/implementationproxy.h>
+#include "CUsbDummyClassControllerLdd.h"
+// Define the private interface UIDs
+const TImplementationProxy UsbCCImplementationTable[] =
+ {
+ IMPLEMENTATION_PROXY_ENTRY(0x20031D70, CUsbDummyClassControllerLdd::NewL),
+ };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(UsbCCImplementationTable) / sizeof(TImplementationProxy);
+
+ return UsbCCImplementationTable;
+ }
--- a/usbmgmt/usbmgr/usbman/server/SRC/CUsbOtg.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/SRC/CUsbOtg.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -34,8 +34,10 @@
#endif
+#ifndef __OVER_DUMMYUSBDI__
//Name used in call to User::LoadLogicalDevice/User::FreeLogicalDevice
_LIT(KUsbOtgLDDName,"otgdi");
+#endif
@@ -145,6 +147,7 @@
}
+#ifndef __OVER_DUMMYUSBDI__
OstTrace0( TRACE_NORMAL, CUSBOTG_CUSBOTG_DUP13, "CUsbOtg::~CUsbOtg; Freeing logical device" );
TInt err = User::FreeLogicalDevice(KUsbOtgLDDName);
@@ -155,6 +158,7 @@
OstTrace1( TRACE_NORMAL, CUSBOTG_CUSBOTG_DUP14, "CUsbOtg::~CUsbOtg; User::FreeLogicalDevice returned %d", err );
}
+#endif
iCriticalSection.Close();
OstTraceFunctionExit0( CUSBOTG_CUSBOTG_DES_EXIT );
@@ -179,6 +183,7 @@
{
OstTraceFunctionEntry0( CUSBOTG_CONSTRUCTL_ENTRY );
+#ifndef __OVER_DUMMYUSBDI__
OstTrace0( TRACE_NORMAL, CUSBOTG_CONSTRUCTL, "CUsbOtg::ConstructL; About to open LDD" );
iLastError = User::LoadLogicalDevice(KUsbOtgLDDName);
@@ -190,6 +195,8 @@
User::Leave(iLastError);
}
}
+#endif
+
OstTrace0( TRACE_NORMAL, CUSBOTG_CONSTRUCTL_DUP3, "CUsbOtg::ConstructL; About to open RUsbOtgDriver" );
iLastError = iOtgDriver.Open();
--- a/usbmgmt/usbmgr/usbman/server/SRC/CUsbServer.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/SRC/CUsbServer.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -80,7 +80,6 @@
#ifdef SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
delete iUsbHost;
-#ifndef __OVER_DUMMYUSBDI__
// Check that this is A-Device
OstTrace0( TRACE_NORMAL, CUSBSERVER_CUSBSERVER, "CUsbServer::~CUsbServer; Checking Id-Pin state..." );
TInt value = 0;
@@ -126,11 +125,9 @@
{
OstTraceExt2( TRACE_NORMAL, CUSBSERVER_CUSBSERVER_DUP7, "CUsbServer::~CUsbServer;No Id-Pin is found or an error occured: err = %d, value = %d", err, value );
}
-
+
delete iUsbOtg;
-#endif
#endif // SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
-
OstTraceFunctionExit0( CUSBSERVER_CUSBSERVER_DES_EXIT );
}
@@ -162,10 +159,8 @@
iShutdownTimer->ConstructL();
#ifdef SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
-#ifndef __OVER_DUMMYUSBDI__
iUsbOtg = CUsbOtg::NewL();
iUsbOtg->StartL();
-#endif
#endif // SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
iUsbDevice = CUsbDevice::NewL(*this);
--- a/usbmgmt/usbmgr/usbman/server/SRC/CUsbSession.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/SRC/CUsbSession.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -95,10 +95,8 @@
iUsbServer->Device().DeRegisterObserver(*this);
#ifdef SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
-#ifndef __OVER_DUMMYUSBDI__
OstTrace1( TRACE_NORMAL, CUSBSESSION_CUSBSESSION_DUP1, "CUsbSession::~CUsbSession;About to Otg().DeRegisterObserver(%08x)", this );
iUsbServer->Otg().DeRegisterObserver(*this);
-#endif
OstTrace1( TRACE_NORMAL, CUSBSESSION_CUSBSESSION_DUP2, "CUsbSession::~CUsbSession;About to Host().DeRegisterObserver(%08x)", this );
iUsbServer->Host().DeregisterObserver(*this);
@@ -147,10 +145,8 @@
iUsbServer->Device().RegisterObserverL(*this);
#ifdef SYMBIAN_ENABLE_USB_OTG_HOST_PRIV
-#ifndef __OVER_DUMMYUSBDI__
OstTrace0( TRACE_NORMAL, CUSBSESSION_CREATEL_DUP1, "CUsbSession::CreateL;Registering OTG Observer" );
iUsbServer->Otg().RegisterObserverL(*this);
-#endif
OstTrace0( TRACE_NORMAL, CUSBSESSION_CREATEL_DUP2, "CUsbSession::CreateL;Registering HOST Observer" );
iUsbServer->Host().RegisterObserverL(*this);
@@ -582,7 +578,6 @@
case EUsbCancelMessageObserver:
ret = DeRegisterMsgObserver();
break;
-#ifndef __OVER_DUMMYUSBDI__
case EUsbBusRequest:
ret = BusRequest();
break;
@@ -595,14 +590,6 @@
case EUsbBusDrop:
ret = BusDrop();
break;
-#else
- case EUsbBusRequest:
- case EUsbBusRespondSrp:
- case EUsbBusClearError:
- case EUsbBusDrop:
- ret = KErrNone;
- break;
-#endif
case EUsbRegisterHostObserver:
ret = RegisterHostObserver(aMessage, complete);
break;
--- a/usbmgmt/usbmgr/usbman/server/SRC/usbmancenrepmanager.cpp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/SRC/usbmancenrepmanager.cpp Fri Sep 17 08:40:15 2010 +0300
@@ -19,7 +19,11 @@
#include <usb/usblogger.h>
#ifdef SYMBIAN_FEATURE_MANAGER
#include <featureuids.h>
- #include <featdiscovery.h>
+ #ifndef __DUMMY_LDD__
+ #include <featdiscovery.h>
+ #else
+ #include "featurediscovery.h"
+ #endif
#endif
#include "usbmanprivatecrkeys.h"
#include "UsbSettings.h"
--- a/usbmgmt/usbmgr/usbman/server/group/BLD.INF Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/group/BLD.INF Fri Sep 17 08:40:15 2010 +0300
@@ -62,6 +62,8 @@
// Special USBSVR with no class controllers except 3 instances of the dummy
// class controller, for GT171 tests.
t_Usbman_dummyCC.mmp
+usbsvr_dummyldd.mmp
+UsbDummyClassControllerLdd.mmp
#if defined(SYMBIAN_ENABLE_USB_OTG_HOST)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/group/UsbDummyClassControllerLdd.mmp Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* usbclassconstroller.mmp
+* USBClassController.dll USB Class Controller Plugin Framework
+*
+*/
+
+/**
+ @file
+*/
+
+
+target msdummyclasscontroller.dll //Recommended unpaged
+
+targettype plugin
+CAPABILITY CommDD NetworkControl NetworkServices LocalServices ProtServ
+UID 0x10009d8d 0x20031D6F
+VENDORID 0x70000001
+
+userinclude ../inc
+userinclude ../../../inifile/inc
+userinclude ../traces_UsbDummyClassControllerLdd
+
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+sourcepath ../SRC
+source CUsbDummyClassControllerLdd.cpp
+source CUsbDummyClassImpCollection.cpp
+
+start resource 20031D6F.rss
+target msdummyclasscontroller.rsc
+end
+
+
+library euser.lib
+LIBRARY usbclasscontroller.lib
+LIBRARY efsrv.lib
+LIBRARY bafl.lib
+
+
+VENDORID 0x70000001
--- a/usbmgmt/usbmgr/usbman/server/group/t_Usbman_dummyCC.mmp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/group/t_Usbman_dummyCC.mmp Fri Sep 17 08:40:15 2010 +0300
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
@@ -17,19 +17,50 @@
* is used for GT171 automated tests.
*
*/
+target t_usbman_dummycc.exe
+CAPABILITY CommDD NetworkControl NetworkServices LocalServices ProtServ
-target t_usbman_dummycc.exe
+targettype exe
+
+uid 0x0 0x101fe1db
+VENDORID 0x70000001
-#include "usbsvrbase.mmp"
-userinclude ../../../inifile/inc
+userinclude ../INC
+userinclude ../public
+userinclude ../../../host/fdf/production/client/public
+userinclude ../../../inifile/inc
+userinclude ../traces_t_Usbman_dummyCC
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
sourcepath ../SRC
+source UsbSvr.cpp
+source CUsbServer.cpp
+source CUsbSession.cpp
+source CUsbScheduler.cpp
+source CUsbDevice.cpp
+source CUsbDeviceStateWatcher.cpp
+source UsbUtils.cpp
+source CPersonality.cpp
+source usbmancenrepmanager.cpp
source CUsbDummyClassController.cpp
sourcepath ../../../inifile/src
source inifile.cpp
+library euser.lib
+library usbclasscontroller.lib
+library ecom.lib
+library efsrv.lib
+library bafl.lib
+library usbmanextensionplugin.lib
+library sysutil.lib
+library centralrepository.lib
+
+#ifdef SYMBIAN_FEATURE_MANAGER
+library featdiscovery.lib
+#endif
+
// This is the crucial difference between this and usbsvr.mmp.
MACRO USE_DUMMY_CLASS_CONTROLLER
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/group/usbsvr_dummyldd.mmp Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* usbsvr_dummyldd.mmp
+* usbsvr_over_dummyldd.exe USB server with USB Host and OTG support
+*
+*/
+
+/**
+ @file
+*/
+
+
+
+MACRO __DUMMY_LDD__
+CAPABILITY CommDD NetworkControl NetworkServices LocalServices ProtServ
+target usbsvr_over_dummyldd.exe
+targettype exe
+
+UID 0 0x101fe1db
+
+sourcepath ../SRC
+source UsbSvr.cpp
+source CUsbServer.cpp
+source CUsbSession.cpp
+source CUsbScheduler.cpp
+source CUsbDevice.cpp
+source CUsbDeviceStateWatcher.cpp
+source UsbUtils.cpp
+source CPersonality.cpp
+source usbmancenrepmanager.cpp
+
+userinclude ../INC
+userinclude ../public
+userinclude ../../../host/fdf/production/client/public
+userinclude ../traces
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+library euser.lib
+library usbclasscontroller.lib
+library ecom.lib
+library efsrv.lib
+library bafl.lib
+library usbmanextensionplugindummy.lib
+library sysutil.lib
+library centralrepository.lib
+
+#ifdef SYMBIAN_FEATURE_MANAGER
+library featdiscovery.lib
+#endif
+library dummyusblddapi.lib
+library usbman_over_dummyldd.lib
+
+UNPAGED
--- a/usbmgmt/usbmgr/usbman/server/group/usbsvrotg_dummyusbdi.mmp Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/group/usbsvrotg_dummyusbdi.mmp Fri Sep 17 08:40:15 2010 +0300
@@ -37,9 +37,8 @@
source cusbotgwatcher.cpp
source cusbhost.cpp
source cusbhostwatcher.cpp
-//source CUsbDummyClassController.cpp
-//source INIFILE.CPP
+library dummyotgdi.lib
library usbhoststack_over_dummyusbdi.lib
UNPAGED
--- a/usbmgmt/usbmgr/usbman/server/public/UsbClassUids.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/public/UsbClassUids.h Fri Sep 17 08:40:15 2010 +0300
@@ -41,4 +41,5 @@
const TUid KUSBMSUid={0x10204bbc};
+const TUid KUSBDUMMYid={0x20031D70}
#endif // USBCLASSUIDS_H
--- a/usbmgmt/usbmgr/usbman/server/public/rusb.h Thu Sep 02 22:23:37 2010 +0300
+++ b/usbmgmt/usbmgr/usbman/server/public/rusb.h Fri Sep 17 08:40:15 2010 +0300
@@ -35,10 +35,14 @@
const TInt KUsbMaxSupportedPersonalities = 64; // Max number of supported personalities
-#ifndef __OVER_DUMMYUSBDI__
+#ifdef __OVER_DUMMYUSBDI__
+_LIT(KUsbServerName, "!usbman_over_dummyusbdi");
+#else
+#ifdef __DUMMY_LDD__
+_LIT(KUsbServerName, "!usbman_over_dummyldd");
+#else
_LIT(KUsbServerName, "!usbman");
-#else
-_LIT(KUsbServerName, "!usbman_over_dummyusbdi");
+#endif
#endif
enum TUsbMessages
@@ -109,11 +113,16 @@
#else
-#ifndef __OVER_DUMMYUSBDI__
-_LIT(KUsbmanImg, "z:\\system\\programs\\usbsvr.exe");
+#ifdef __OVER_DUMMYUSBDI__
+_LIT(KUsbmanImg, "z:\\system\\programs\\usbsvr_over_dummyusbdi.exe");
#else
-_LIT(KUsbmanImg, "z:\\system\\programs\\usbsvr_over_dummyusbdi.exe");
+#ifdef __DUMMY_LDD__
+_LIT(KUsbmanImg, "z:\\system\\programs\\usbsvr_over_dummyldd.exe");
+#else
+_LIT(KUsbmanImg, "z:\\system\\programs\\usbsvr.exe");
#endif
+#endif
+
#endif //__USBMAN_NO_PROCESSES__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/traces_UsbDummyClassControllerLdd/OstTraceDefinitions.h Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,24 @@
+/*
+* This is Default Licence added by TraceCompiler
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+// #define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/traces_UsbDummyClassControllerLdd/fixed_id.definitions Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,29 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x8a
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLERLDD_CONSTRUCTL_ENTRY=0x1
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLERLDD_CONSTRUCTL_EXIT=0x2
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLERLDD_CUSBDUMMYCLASSCONTROLLERLDD_ENTRY=0x3
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLERLDD_CUSBDUMMYCLASSCONTROLLERLDD_EXIT=0x4
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLERLDD_RUNL_ENTRY=0x9
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLERLDD_RUNL_EXIT=0xa
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLERLDD_START_ENTRY=0x5
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLERLDD_START_EXIT=0x6
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLERLDD_STOP_ENTRY=0x7
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLERLDD_STOP_EXIT=0x8
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/traces_t_Usbman_dummyCC/OstTraceDefinitions.h Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,24 @@
+/*
+* This is Default Licence added by TraceCompiler
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+//#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/traces_t_Usbman_dummyCC/fixed_id.definitions Fri Sep 17 08:40:15 2010 +0300
@@ -0,0 +1,529 @@
+##
+# This is Default Licence added by TraceCompiler
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+##
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_DUMP=0x89
+[GROUP]TRACE_FATAL=0x81
+[GROUP]TRACE_FLOW=0x8a
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR=0x1
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR_DUP1=0x2
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR_DUP10=0xb
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR_DUP11=0xc
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR_DUP12=0xd
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR_DUP2=0x3
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR_DUP3=0x4
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR_DUP4=0x5
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR_DUP5=0x6
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR_DUP6=0x7
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR_DUP7=0x8
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR_DUP8=0x9
+[TRACE]TRACE_DUMP[0x89]_CUSBDEVICE_PRINTDESCRIPTOR_DUP9=0xa
+[TRACE]TRACE_FATAL[0x81]_CPERSONALITY_CLASSSUPPORTED=0x2
+[TRACE]TRACE_FATAL[0x81]_CPERSONALITY_SUPPORTEDCLASSES=0x1
+[TRACE]TRACE_FATAL[0x81]_CUSBDEVICE_CONVERTUIDSL=0x6
+[TRACE]TRACE_FATAL[0x81]_CUSBDEVICE_DOCANCEL=0x4
+[TRACE]TRACE_FATAL[0x81]_CUSBDEVICE_RUNERROR_DUP1=0x5
+[TRACE]TRACE_FATAL[0x81]_CUSBDEVICE_RUNL_DUP5=0x3
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_CONSTRUCTL=0x7
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_DOCANCEL=0x1a
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_DOCANCEL_DUP1=0x1b
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_DOCANCEL_DUP2=0x1c
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_DOCANCEL_DUP3=0x1d
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_DOCANCEL_DUP4=0x1e
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_GETBEHAVIOUR_DUP2=0x8
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_GETBEHAVIOUR_DUP4=0x9
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_GETBEHAVIOUR_DUP6=0xa
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_GETBEHAVIOUR_DUP8=0xb
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_GETCONFIG_DUP7=0xc
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_RUNERROR=0x1f
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_RUNL_DUP1=0x15
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_RUNL_DUP2=0x16
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_RUNL_DUP3=0x17
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_RUNL_DUP4=0x18
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_RUNL_DUP5=0x19
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_START=0xd
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_START_DUP1=0xe
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_START_DUP2=0xf
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_START_DUP3=0x10
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_STOP=0x11
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_STOP_DUP1=0x12
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_STOP_DUP2=0x13
+[TRACE]TRACE_FATAL[0x81]_CUSBDUMMYCLASSCONTROLLER_STOP_DUP3=0x14
+[TRACE]TRACE_FATAL[0x81]_CUSBMANCENREPMANAGER_ISFEATURESUPPORTEDL=0x2a
+[TRACE]TRACE_FATAL[0x81]_CUSBMANCENREPMANAGER_READCONFIGURATIONSFORPERSONALITYL=0x26
+[TRACE]TRACE_FATAL[0x81]_CUSBMANCENREPMANAGER_READCONFIGURATIONSFORPERSONALITYL_DUP4=0x27
+[TRACE]TRACE_FATAL[0x81]_CUSBMANCENREPMANAGER_READCONFIGURATIONSFORPERSONALITYL_DUP5=0x28
+[TRACE]TRACE_FATAL[0x81]_CUSBMANCENREPMANAGER_READDEVICECONFIGURATIONL_DUP5=0x23
+[TRACE]TRACE_FATAL[0x81]_CUSBMANCENREPMANAGER_READPERSONALITIESL=0x24
+[TRACE]TRACE_FATAL[0x81]_CUSBMANCENREPMANAGER_READPERSONALITIESL_DUP5=0x25
+[TRACE]TRACE_FATAL[0x81]_CUSBSERVER_DECREMENTSESSIONCOUNT_DUP1=0x21
+[TRACE]TRACE_FATAL[0x81]_CUSBSERVER_INCREMENTSESSIONCOUNT_DUP1=0x20
+[TRACE]TRACE_FATAL[0x81]_CUSBSERVER_LAUNCHSHUTDOWNTIMERIFNOSESSIONS=0x22
+[TRACE]TRACE_FATAL[0x81]_DUP1_CUSBMANCENREPMANAGER_ISCLASSCONFIGURABLEL_DUP1=0x29
+[TRACE]TRACE_FLOW[0x8A]_CINIFILE_CINIFILE_CONS_ENTRY=0x1
+[TRACE]TRACE_FLOW[0x8A]_CINIFILE_NEWL_TDESC_ENTRY=0x2
+[TRACE]TRACE_FLOW[0x8A]_CINIFILE_NEWL_TDESC_EXIT=0x3
+[TRACE]TRACE_FLOW[0x8A]_CINIFILE_NEWL_TDESC_TDESC_ENTRY=0x4
+[TRACE]TRACE_FLOW[0x8A]_CINIFILE_NEWL_TDESC_TDESC_EXIT=0x5
+[TRACE]TRACE_FLOW[0x8A]_CPERSONALITYCONFIGURATIONS_CPERSONALITYCONFIGURATIONS_DES_ENTRY=0xc
+[TRACE]TRACE_FLOW[0x8A]_CPERSONALITYCONFIGURATIONS_CPERSONALITYCONFIGURATIONS_DES_EXIT=0xd
+[TRACE]TRACE_FLOW[0x8A]_CPERSONALITY_CONSTRUCTL_ENTRY=0x8
+[TRACE]TRACE_FLOW[0x8A]_CPERSONALITY_CONSTRUCTL_EXIT=0x9
+[TRACE]TRACE_FLOW[0x8A]_CPERSONALITY_CPERSONALITY_DES_ENTRY=0xa
+[TRACE]TRACE_FLOW[0x8A]_CPERSONALITY_CPERSONALITY_DES_EXIT=0xb
+[TRACE]TRACE_FLOW[0x8A]_CPERSONALITY_NEWL_ENTRY=0x6
+[TRACE]TRACE_FLOW[0x8A]_CPERSONALITY_NEWL_EXIT=0x7
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICESTATEWATCHER_DOCANCEL_ENTRY=0x51
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICESTATEWATCHER_DOCANCEL_EXIT=0x52
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICESTATEWATCHER_NEWL_ENTRY=0x4f
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICESTATEWATCHER_NEWL_EXIT=0x50
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICESTATEWATCHER_START_ENTRY=0x53
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICESTATEWATCHER_START_EXIT=0x54
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_ADDCLASSCONTROLLERL_ENTRY=0x19
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_ADDCLASSCONTROLLERL_EXIT=0x1a
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_BUSENUMERATIONCOMPLETED_ENTRY=0x27
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_BUSENUMERATIONCOMPLETED_EXIT=0x28
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_CONSTRUCTL_ENTRY=0x12
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_CONSTRUCTL_EXIT=0x13
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_CONVERTUIDSL_ENTRY=0x44
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_CONVERTUIDSL_EXIT=0x45
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_CREATECLASSCONTROLLERSL_ENTRY=0x4a
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_CURRENTPERSONALITYID_ENTRY=0x3b
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_CUSBDEVICE_DES_ENTRY=0x10
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_CUSBDEVICE_DES_EXIT=0x11
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_DEREGISTEROBSERVER_ENTRY=0x1d
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_DEREGISTEROBSERVER_EXIT=0x1e
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_DOCANCEL_ENTRY=0x31
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_DOCANCEL_EXIT=0x32
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_ENUMERATECLASSCONTROLLERSL_ENTRY=0x17
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_ENUMERATECLASSCONTROLLERSL_EXIT=0x18
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_GETPERSONALITY_ENTRY=0x3d
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_GETPERSONALITY_EXIT=0x3e
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_GETPERSONALITY_EXIT_DUP1=0x3f
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_INSTANTIATEEXTENSIONPLUGINSL=0x15
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_INSTANTIATEEXTENSIONPLUGINSL_ENTRY=0x14
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_INSTANTIATEEXTENSIONPLUGINSL_EXIT=0x16
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_LOADFALLBACKCLASSCONTROLLERSL_ENTRY=0x4d
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_LOADFALLBACKCLASSCONTROLLERSL_EXIT=0x4e
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_NEWL_ENTRY=0xe
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_NEWL_EXIT=0xf
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_PERSONALITIES_ENTRY=0x3c
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_POWERUPANDCONNECT_ENTRY=0x2d
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_POWERUPANDCONNECT_EXIT=0x2e
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_READPERSONALITIESL_ENTRY=0x46
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_READPERSONALITIESL_EXIT=0x47
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_REGISTEROBSERVERL_ENTRY=0x1b
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_REGISTEROBSERVERL_EXIT=0x1c
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_RUNL_ENTRY=0x2f
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_RUNL_EXIT=0x30
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SELECTCLASSCONTROLLERSL_ENTRY=0x48
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SELECTCLASSCONTROLLERSL_EXIT=0x49
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SETCURRENTPERSONALITYL_ENTRY=0x40
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SETCURRENTPERSONALITYL_EXIT=0x41
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SETDEFAULTPERSONALITYL_ENTRY=0x4b
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SETDEFAULTPERSONALITYL_EXIT=0x4c
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SETDEVICEDESCRIPTORL_ENTRY=0x36
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SETDEVICEDESCRIPTORL_EXIT=0x37
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SETDEVICESTATE_ENTRY=0x25
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SETDEVICESTATE_EXIT=0x26
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SETSERVICESTATE_ENTRY=0x23
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SETSERVICESTATE_EXIT=0x24
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_SETUSBDEVICESETTINGSFROMPERSONALITYL_ENTRY=0x38
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_STARTCURRENTCLASSCONTROLLER_ENTRY=0x29
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_STARTCURRENTCLASSCONTROLLER_EXIT=0x2a
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_STARTL_ENTRY=0x1f
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_STARTL_EXIT=0x20
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_STOPCURRENTCLASSCONTROLLER_ENTRY=0x2b
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_STOPCURRENTCLASSCONTROLLER_EXIT=0x2c
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_STOP_ENTRY=0x21
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_STOP_EXIT=0x22
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_TRYSTARTL_ENTRY=0x39
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_TRYSTARTL_EXIT=0x3a
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_UCCNERROR_ENTRY=0x34
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_UCCNERROR_EXIT=0x35
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_UCCNGETCLASSCONTROLLERITERATORL_ENTRY=0x33
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_VALIDATEPERSONALITIESL_ENTRY=0x42
+[TRACE]TRACE_FLOW[0x8A]_CUSBDEVICE_VALIDATEPERSONALITIESL_EXIT=0x43
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_DOCANCEL_ENTRY=0x65
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_DOCANCEL_EXIT=0x66
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_DOGETCONFIGL_ENTRY=0x5b
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_DOGETCONFIGL_EXIT=0x5c
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_GETBEHAVIOUR_ENTRY=0x59
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_GETBEHAVIOUR_EXIT=0x5a
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_GETCONFIG_ENTRY=0x5d
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_GETCONFIG_EXIT=0x5e
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_NEWL_MUSBCLASSCONTROLLERNOTIFY_TUINT_ENTRY=0x55
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_NEWL_MUSBCLASSCONTROLLERNOTIFY_TUINT_EXIT=0x56
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_NEWL_MUSBCLASSCONTROLLERNOTIFY_TUINT_TINT_ENTRY=0x57
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_NEWL_MUSBCLASSCONTROLLERNOTIFY_TUINT_TINT_EXIT=0x58
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_RUNL_ENTRY=0x63
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_RUNL_EXIT=0x64
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_START_ENTRY=0x5f
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_START_EXIT=0x60
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_STOP_ENTRY=0x61
+[TRACE]TRACE_FLOW[0x8A]_CUSBDUMMYCLASSCONTROLLER_STOP_EXIT=0x62
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_CHECKSIGNATUREL_ENTRY=0x103
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_CHECKSIGNATUREL_EXIT=0x104
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_CONSTRUCTL_ENTRY=0xfb
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_CONSTRUCTL_EXIT=0xfc
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_CUSBMANCENREPMANAGER_CONS_ENTRY=0xf7
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_CUSBMANCENREPMANAGER_CONS_EXIT=0xf8
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_CUSBMANCENREPMANAGER_DES_ENTRY=0xfd
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_CUSBMANCENREPMANAGER_DES_EXIT=0xfe
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_ISCLASSCONFIGURABLEL_ENTRY=0x10b
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_ISCLASSCONFIGURABLEL_EXIT=0x10c
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_ISFEATURESUPPORTEDL_ENTRY=0x10d
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_ISFEATURESUPPORTEDL_EXIT=0x10e
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_ISFEATURESUPPORTEDL_EXIT_DUP1=0x10f
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_NEWL_ENTRY=0xf9
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_NEWL_EXIT=0xfa
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_READCONFIGURATIONSFORPERSONALITYL_ENTRY=0x109
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_READCONFIGURATIONSFORPERSONALITYL_EXIT=0x10a
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_READDEVICECONFIGURATIONL_ENTRY=0x105
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_READDEVICECONFIGURATIONL_EXIT=0x106
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_READKEYL_ENTRY=0x101
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_READKEYL_EXIT=0x102
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_READPERSONALITIESL_ENTRY=0x107
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_READPERSONALITIESL_EXIT=0x108
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_READSTRINGKEYLC_ENTRY=0xff
+[TRACE]TRACE_FLOW[0x8A]_CUSBMANCENREPMANAGER_READSTRINGKEYLC_EXIT=0x100
+[TRACE]TRACE_FLOW[0x8A]_CUSBSCHEDULER_NEWL_ENTRY=0x67
+[TRACE]TRACE_FLOW[0x8A]_CUSBSCHEDULER_NEWL_EXIT=0x68
+[TRACE]TRACE_FLOW[0x8A]_CUSBSERVER_CUSBSERVER_DES_ENTRY=0x6b
+[TRACE]TRACE_FLOW[0x8A]_CUSBSERVER_CUSBSERVER_DES_EXIT=0x6c
+[TRACE]TRACE_FLOW[0x8A]_CUSBSERVER_INCREMENTSESSIONCOUNT_ENTRY=0x6f
+[TRACE]TRACE_FLOW[0x8A]_CUSBSERVER_INCREMENTSESSIONCOUNT_EXIT=0x70
+[TRACE]TRACE_FLOW[0x8A]_CUSBSERVER_LAUNCHSHUTDOWNTIMERIFNOSESSIONS_ENTRY=0x71
+[TRACE]TRACE_FLOW[0x8A]_CUSBSERVER_LAUNCHSHUTDOWNTIMERIFNOSESSIONS_EXIT=0x72
+[TRACE]TRACE_FLOW[0x8A]_CUSBSERVER_NEWLC_ENTRY=0x69
+[TRACE]TRACE_FLOW[0x8A]_CUSBSERVER_NEWLC_EXIT=0x6a
+[TRACE]TRACE_FLOW[0x8A]_CUSBSERVER_NEWSESSIONL_ENTRY=0x6d
+[TRACE]TRACE_FLOW[0x8A]_CUSBSERVER_NEWSESSIONL_EXIT=0x6e
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_BUSCLEARERROR_ENTRY=0xd1
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_BUSCLEARERROR_EXIT=0xd2
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_BUSDROP_ENTRY=0xd3
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_BUSDROP_EXIT=0xd4
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_BUSREQUEST_ENTRY=0xcd
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_BUSREQUEST_EXIT=0xce
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_BUSRESPONDSRP_ENTRY=0xcf
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_BUSRESPONDSRP_EXIT=0xd0
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_CANCELINTEREST_ENTRY=0xb5
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_CANCELINTEREST_EXIT=0xb6
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_CANCELINTEREST_EXIT_DUP1=0xb7
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_CLASSSUPPORTED_ENTRY=0xc8
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_CLASSSUPPORTED_EXIT=0xc9
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_CLASSSUPPORTED_EXIT_DUP1=0xca
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_CREATEL_ENTRY=0x7a
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_CREATEL_EXIT=0x7b
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_CUSBSESSION_CONS_ENTRY=0x74
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_CUSBSESSION_CONS_EXIT=0x75
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_CUSBSESSION_DES_ENTRY=0x76
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_CUSBSESSION_DES_EXIT=0x77
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DEREGISTERDEVICEOBSERVER_ENTRY=0xa0
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DEREGISTERDEVICEOBSERVER_EXIT=0xa1
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DEREGISTERDEVICEOBSERVER_EXIT_DUP1=0xa2
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DEREGISTERHOSTOBSERVER_ENTRY=0xe6
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DEREGISTERHOSTOBSERVER_EXIT=0xe7
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DEREGISTERHOSTOBSERVER_EXIT_DUP1=0xe8
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DEREGISTERMSGOBSERVER_ENTRY=0xec
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DEREGISTERMSGOBSERVER_EXIT=0xed
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DEREGISTERMSGOBSERVER_EXIT_DUP1=0xee
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DEREGISTERSERVICEOBSERVER_ENTRY=0xa3
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DEREGISTERSERVICEOBSERVER_EXIT=0xa4
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DEREGISTERSERVICEOBSERVER_EXIT_DUP1=0xa5
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DISABLEFUNCTIONDRIVERLOADING_ENTRY=0xd7
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DISABLEFUNCTIONDRIVERLOADING_EXIT=0xd8
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DISPATCHMESSAGEL_ENTRY=0x86
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_DISPATCHMESSAGEL_EXIT=0x87
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_ENABLEFUNCTIONDRIVERLOADING_ENTRY=0xd5
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_ENABLEFUNCTIONDRIVERLOADING_EXIT=0xd6
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETCURRENTDEVICESTATE_ENTRY=0x9f
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETCURRENTPERSONALITYID_ENTRY=0xb8
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETCURRENTPERSONALITYID_EXIT=0xb9
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETCURRENTSERVICESTATE_ENTRY=0x9e
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETDESCRIPTION_ENTRY=0xc2
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETDESCRIPTION_EXIT=0xc3
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETDESCRIPTION_EXIT_DUP1=0xc4
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETMANUFACTURERSTRINGDESCRIPTOR_ENTRY=0xdd
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETMANUFACTURERSTRINGDESCRIPTOR_EXIT=0xde
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETOTGDESCRIPTOR_ENTRY=0xe1
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETOTGDESCRIPTOR_EXIT=0xe2
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETPERSONALITYIDS_ENTRY=0xbf
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETPERSONALITYIDS_EXIT=0xc0
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETPERSONALITYIDS_EXIT_DUP1=0xc1
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETPERSONALITYPROPERTY_ENTRY=0xc5
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETPERSONALITYPROPERTY_EXIT=0xc6
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETPERSONALITYPROPERTY_EXIT_DUP2=0xc7
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETPRODUCTSTRINGDESCRIPTOR_ENTRY=0xdf
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETPRODUCTSTRINGDESCRIPTOR_EXIT=0xe0
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETSUPPORTEDCLASSES_ENTRY=0xba
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETSUPPORTEDCLASSES_EXIT=0xbb
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETSUPPORTEDCLASSES_EXIT_DUP1=0xbc
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETSUPPORTEDCLASSES_EXIT_DUP2=0xbd
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETSUPPORTEDCLASSES_EXIT_DUP3=0xbe
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETSUPPORTEDLANGUAGESL_ENTRY=0xdb
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETSUPPORTEDLANGUAGESL_EXIT=0xdc
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETSUPPORTEDLANGUAGES_ENTRY=0xd9
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_GETSUPPORTEDLANGUAGES_EXIT=0xda
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_HANDLESERVICESTATECHANGEWHILESTARTING_ENTRY=0x7e
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_HANDLESERVICESTATECHANGEWHILESTARTING_EXIT=0x7f
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_HANDLESERVICESTATECHANGEWHILESTOPPING_ENTRY=0x80
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_HANDLESERVICESTATECHANGEWHILESTOPPING_EXIT=0x81
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_NEWL_ENTRY=0x73
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_REGISTERDEVICEOBSERVER_ENTRY=0x98
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_REGISTERDEVICEOBSERVER_EXIT=0x99
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_REGISTERDEVICEOBSERVER_EXIT_DUP1=0x9a
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_REGISTERHOSTOBSERVER_ENTRY=0xe3
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_REGISTERHOSTOBSERVER_EXIT=0xe4
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_REGISTERHOSTOBSERVER_EXIT_DUP1=0xe5
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_REGISTERMSGOBSERVER_ENTRY=0xe9
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_REGISTERMSGOBSERVER_EXIT=0xea
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_REGISTERMSGOBSERVER_EXIT_DUP1=0xeb
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_REGISTERSERVICEOBSERVER_ENTRY=0x9b
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_REGISTERSERVICEOBSERVER_EXIT=0x9c
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_REGISTERSERVICEOBSERVER_EXIT_DUP1=0x9d
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_SERVICEL_ENTRY=0x78
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_SERVICEL_EXIT=0x79
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_SETCTLSESSIONMODE_ENTRY=0xcb
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_SETCTLSESSIONMODE_EXIT=0xcc
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STARTCANCEL_ENTRY=0x91
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STARTCANCEL_EXIT=0x92
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STARTCANCEL_EXIT_DUP1=0x93
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STARTDEVICEL_ENTRY=0x88
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STARTDEVICEL_EXIT=0x89
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STARTDEVICEL_EXIT_DUP1=0x8a
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STARTDEVICEL_EXIT_DUP2=0x8b
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STOPCANCEL_ENTRY=0x94
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STOPCANCEL_EXIT=0x95
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STOPCANCEL_EXIT_DUP1=0x96
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STOPCANCEL_EXIT_DUP2=0x97
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STOPDEVICEL_ENTRY=0x8c
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STOPDEVICEL_EXIT=0x8d
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STOPDEVICEL_EXIT_DUP1=0x8e
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STOPDEVICEL_EXIT_DUP2=0x8f
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_STOPDEVICEL_EXIT_DUP3=0x90
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTARTDEVICEL_ENTRY=0xa6
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTARTDEVICEL_EXIT=0xa7
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTARTDEVICEL_EXIT_DUP1=0xa8
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTARTDEVICEL_EXIT_DUP2=0xa9
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTARTDEVICEL_EXIT_DUP3=0xaa
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTARTDEVICEL_EXIT_DUP4=0xab
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTARTDEVICEL_EXIT_DUP5=0xac
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTARTDEVICEL_EXIT_DUP6=0xad
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTOPDEVICEL_ENTRY=0xae
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTOPDEVICEL_EXIT=0xaf
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTOPDEVICEL_EXIT_DUP1=0xb0
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTOPDEVICEL_EXIT_DUP2=0xb1
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTOPDEVICEL_EXIT_DUP3=0xb2
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTOPDEVICEL_EXIT_DUP4=0xb3
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_TRYSTOPDEVICEL_EXIT_DUP5=0xb4
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBDEVICEDEQUEUEEVENT_ENTRY=0x84
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBDEVICEDEQUEUEEVENT_EXIT=0x85
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBDEVICESTATECHANGE_ENTRY=0x82
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBDEVICESTATECHANGE_EXIT=0x83
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBHOSTEVENTDEQUEUE_ENTRY=0xf5
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBHOSTEVENTDEQUEUE_EXIT=0xf6
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBHOSTEVENT_ENTRY=0xf1
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBHOSTEVENT_EXIT=0xf2
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBMSGDEQUEUE_ENTRY=0xf3
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBMSGDEQUEUE_EXIT=0xf4
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBOTGHOSTMESSAGE_ENTRY=0xef
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBOTGHOSTMESSAGE_EXIT=0xf0
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBSERVICESTATECHANGE_ENTRY=0x7c
+[TRACE]TRACE_FLOW[0x8A]_CUSBSESSION_USBSERVICESTATECHANGE_EXIT=0x7d
+[TRACE]TRACE_NORMAL[0x86]_CINIFILE_CONSTRUCTL=0x2
+[TRACE]TRACE_NORMAL[0x86]_CINIFILE_CONSTRUCTL_DUP1=0x3
+[TRACE]TRACE_NORMAL[0x86]_CINIFILE_CONSTRUCTL_DUP2=0x4
+[TRACE]TRACE_NORMAL[0x86]_CINIFILE_CONSTRUCTL_DUP3=0x5
+[TRACE]TRACE_NORMAL[0x86]_CINIFILE_CONSTRUCTL_DUP4=0x6
+[TRACE]TRACE_NORMAL[0x86]_CINIFILE_PANIC=0x1
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICESTATEWATCHER_CUSBDEVICESTATEWATCHER=0x44
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICESTATEWATCHER_RUNL=0x45
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICESTATEWATCHER_RUNL_DUP1=0x46
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICESTATEWATCHER_RUNL_DUP2=0x47
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICESTATEWATCHER_RUNL_DUP3=0x48
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_ADDCLASSCONTROLLERL=0x1e
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_BUSENUMERATIONCOMPLETED=0x23
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_BUSENUMERATIONFAILED=0x24
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_BUSENUMERATIONFAILED_DUP1=0x25
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL=0xb
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP1=0xd
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP10=0xc
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP11=0x10
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP12=0x16
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP13=0x13
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP2=0xf
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP3=0x11
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP4=0x12
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP5=0x14
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP6=0x15
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP7=0x17
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP8=0x18
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONSTRUCTL_DUP9=0xe
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CONVERTUIDSL_DUP1=0x40
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CREATECLASSCONTROLLERSL=0x41
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CREATECLASSCONTROLLERSL_DUP1=0x42
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CUSBDEVICE=0x7
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CUSBDEVICE_DUP1=0x8
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CUSBDEVICE_DUP2=0x9
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_CUSBDEVICE_DUP3=0xa
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_ENUMERATECLASSCONTROLLERSL=0x1b
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_ENUMERATECLASSCONTROLLERSL_DUP1=0x1c
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_ENUMERATECLASSCONTROLLERSL_DUP2=0x1a
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_ENUMERATECLASSCONTROLLERSL_DUP3=0x1d
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_INSTANTIATEEXTENSIONPLUGINSL_DUP1=0x19
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_MUEPODOREGISTERSTATEOBSERVERL=0x43
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_POWERUPANDCONNECT=0x26
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_POWERUPANDCONNECT_DUP1=0x27
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_POWERUPANDCONNECT_DUP2=0x28
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_REGISTEROBSERVERL=0x1f
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_RUNERROR=0x2e
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_RUNL=0x29
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_RUNL_DUP1=0x2b
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_RUNL_DUP2=0x2c
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_RUNL_DUP3=0x2d
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_RUNL_DUP4=0x2a
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETCURRENTPERSONALITYL=0x3c
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETDEVICEDESCRIPTORL=0x2f
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETDEVICEDESCRIPTORL_DUP1=0x30
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETDEVICEDESCRIPTORL_DUP2=0x32
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETDEVICEDESCRIPTORL_DUP3=0x31
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETDEVICESTATE=0x22
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETSERVICESTATE=0x21
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETUSBDEVICESETTINGSFROMPERSONALITYL=0x33
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETUSBDEVICESETTINGSFROMPERSONALITYL_DUP1=0x36
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETUSBDEVICESETTINGSFROMPERSONALITYL_DUP2=0x38
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETUSBDEVICESETTINGSFROMPERSONALITYL_DUP3=0x37
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETUSBDEVICESETTINGSFROMPERSONALITYL_DUP4=0x3a
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETUSBDEVICESETTINGSFROMPERSONALITYL_DUP5=0x39
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETUSBDEVICESETTINGSFROMPERSONALITYL_DUP6=0x35
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_SETUSBDEVICESETTINGSFROMPERSONALITYL_DUP7=0x34
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_STARTL=0x20
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_TRYSTARTL=0x3b
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_VALIDATEPERSONALITIESL=0x3f
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_VALIDATEPERSONALITIESL_DUP1=0x3d
+[TRACE]TRACE_NORMAL[0x86]_CUSBDEVICE_VALIDATEPERSONALITIESL_DUP2=0x3e
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_GETBEHAVIOUR=0x49
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_GETBEHAVIOUR_DUP1=0x4a
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_GETBEHAVIOUR_DUP3=0x4b
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_GETBEHAVIOUR_DUP5=0x4c
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_GETBEHAVIOUR_DUP7=0x4d
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_GETCONFIG=0x4e
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_GETCONFIG_DUP1=0x4f
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_GETCONFIG_DUP2=0x50
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_GETCONFIG_DUP3=0x51
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_GETCONFIG_DUP4=0x52
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_GETCONFIG_DUP5=0x53
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_GETCONFIG_DUP6=0x54
+[TRACE]TRACE_NORMAL[0x86]_CUSBDUMMYCLASSCONTROLLER_RUNL=0x55
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_CHECKSIGNATUREL=0xa3
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_ISCLASSCONFIGURABLEL=0xb2
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_ISCLASSCONFIGURABLEL_DUP2=0xb3
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_ISFEATURESUPPORTEDL_DUP2=0xb5
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READCONFIGURATIONSFORPERSONALITYL_DUP1=0xaf
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READCONFIGURATIONSFORPERSONALITYL_DUP2=0xb0
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READCONFIGURATIONSFORPERSONALITYL_DUP3=0xb1
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READDEVICECONFIGURATIONL=0xa4
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READDEVICECONFIGURATIONL_DUP1=0xa5
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READDEVICECONFIGURATIONL_DUP2=0xa6
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READDEVICECONFIGURATIONL_DUP3=0xa7
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READDEVICECONFIGURATIONL_DUP4=0xa8
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READKEYL=0xa1
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READKEYL_DUP1=0xa2
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READPERSONALITIESL_DUP1=0xaa
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READPERSONALITIESL_DUP3=0xa9
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READPERSONALITIESL_DUP4=0xac
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READPERSONALITIESL_DUP6=0xad
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READPERSONALITIESL_DUP7=0xae
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READSTRINGKEYLC=0x9f
+[TRACE]TRACE_NORMAL[0x86]_CUSBMANCENREPMANAGER_READSTRINGKEYLC_DUP1=0xa0
+[TRACE]TRACE_NORMAL[0x86]_CUSBSCHEDULER_ERROR=0x56
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_CONSTRUCTL=0x5f
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_CONSTRUCTL_DUP1=0x60
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_CONSTRUCTL_DUP2=0x61
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_CONSTRUCTL_DUP3=0x62
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_CUSBSERVER=0x57
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_CUSBSERVER_DUP1=0x58
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_CUSBSERVER_DUP2=0x59
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_CUSBSERVER_DUP3=0x5a
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_CUSBSERVER_DUP4=0x5b
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_CUSBSERVER_DUP5=0x5c
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_CUSBSERVER_DUP6=0x5d
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_CUSBSERVER_DUP7=0x5e
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_DECREMENTSESSIONCOUNT=0x67
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_ERROR=0x65
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_INCREMENTSESSIONCOUNT=0x66
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_NEWSESSIONL=0x63
+[TRACE]TRACE_NORMAL[0x86]_CUSBSERVER_NEWSESSIONL_DUP1=0x64
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_CREATEL=0x6c
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_CREATEL_DUP1=0x6d
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_CREATEL_DUP2=0x6e
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_CUSBSESSION=0x68
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_CUSBSESSION_DUP1=0x69
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_CUSBSESSION_DUP2=0x6a
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_CUSBSESSION_DUP3=0x6b
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_DEREGISTERHOSTOBSERVER=0x94
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_DEREGISTERHOSTOBSERVER_DUP1=0x95
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_DISPATCHMESSAGEL=0x7b
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_DISPATCHMESSAGEL_DUP1=0x7c
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_DISPATCHMESSAGEL_DUP2=0x7d
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_DISPATCHMESSAGEL_DUP3=0x7e
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_DISPATCHMESSAGEL_DUP4=0x7f
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_DISPATCHMESSAGEL_DUP5=0x80
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_DISPATCHMESSAGEL_DUP6=0x81
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETCURRENTDEVICESTATE=0x84
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETCURRENTPERSONALITYID=0x85
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETCURRENTSERVICESTATE=0x83
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETMANUFACTURERSTRINGDESCRIPTOR=0x8e
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETMANUFACTURERSTRINGDESCRIPTOR_DUP1=0x8f
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETOTGDESCRIPTOR=0x92
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETPERSONALITYIDS=0x89
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETPRODUCTSTRINGDESCRIPTOR=0x90
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETPRODUCTSTRINGDESCRIPTOR_DUP1=0x91
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETSUPPORTEDCLASSES=0x86
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETSUPPORTEDCLASSES_DUP1=0x87
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETSUPPORTEDCLASSES_DUP2=0x88
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETSUPPORTEDLANGUAGESL=0x8b
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETSUPPORTEDLANGUAGESL_DUP1=0x8c
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_GETSUPPORTEDLANGUAGESL_DUP2=0x8d
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_HANDLESERVICESTATECHANGEWHILESTARTING=0x70
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_HANDLESERVICESTATECHANGEWHILESTARTING_DUP1=0x71
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_HANDLESERVICESTATECHANGEWHILESTARTING_DUP2=0x72
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_HANDLESERVICESTATECHANGEWHILESTARTING_DUP3=0x73
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_HANDLESERVICESTATECHANGEWHILESTOPPING=0x74
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_HANDLESERVICESTATECHANGEWHILESTOPPING_DUP1=0x75
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_HANDLESERVICESTATECHANGEWHILESTOPPING_DUP2=0x76
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_HANDLESERVICESTATECHANGEWHILESTOPPING_DUP3=0x77
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_REGISTERDEVICEOBSERVER=0x82
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_REGISTERHOSTOBSERVER=0x93
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_REGISTERMSGOBSERVER=0x96
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_SETCTLSESSIONMODE=0x8a
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_USBDEVICEDEQUEUEEVENT=0x7a
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_USBDEVICESTATECHANGE=0x78
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_USBDEVICESTATECHANGE_DUP1=0x79
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_USBHOSTEVENT=0x98
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_USBHOSTEVENTDEQUEUE=0x9c
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_USBHOSTEVENTDEQUEUE_DUP1=0x9d
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_USBHOSTEVENT_DUP1=0x99
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_USBHOSTEVENT_DUP2=0x9a
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_USBMSGDEQUEUE=0x9b
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_USBOTGHOSTMESSAGE=0x97
+[TRACE]TRACE_NORMAL[0x86]_CUSBSESSION_USBSERVICESTATECHANGE=0x6f
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CUSBMANCENREPMANAGER_ISFEATURESUPPORTEDL_DUP1=0xb4
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CUSBMANCENREPMANAGER_READPERSONALITIESL_DUP2=0xab
+[TRACE]TRACE_NORMAL[0x86]_USBSVR_RUNSERVERL=0x9e