diff -r 000000000000 -r c9bc50fca66e usbmgmt/usbmgr/usbman/server/INC/CUsbDevice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbmgmt/usbmgr/usbman/server/INC/CUsbDevice.h Tue Feb 02 02:02:59 2010 +0200 @@ -0,0 +1,177 @@ +/** +* 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: +* Implements the main object of Usbman that manages all the USB Classes +* and the USB Logical Device (via CUsbDeviceStateWatcher). +* +* +*/ + + + +/** + @file +*/ + +#ifndef __CUSBDEVICE_H__ +#define __CUSBDEVICE_H__ + +#include +#include +#include +#include +#include +#include +#include + +class CUsbDeviceStateWatcher; +class CUsbClassControllerBase; +class CUsbServer; +class MUsbDeviceNotify; +class CPersonality; +class CUsbmanExtensionPlugin; + +const TUid KUidUsbPlugIns = {0x101fbf21}; + +/** + * The CUsbDevice class + * + * Implements the main object of Usbman that manages all the USB Classes + * and the USB Logical Device (via CUsbDeviceStateWatcher). + * It owns one instance of CUsbDeviceStateWatcher and an instance of each USB + * Class Controller (CUsbClassControllerBase derived). + * It also owns an instance of RDevUsbcClient, a handle on the logical device + * driver for USB for Symbian OS. + * It implements the MUsbClassControllerNotify mixin so all Usb Class + * Controllers can notify it of any changes in their state. + * + * CUsbDevice is an active object which starts and stops Usb Class Controllers + * asynchronously, one by one. Its RunL function will be called after each + * start/stop. + */ +NONSHARABLE_CLASS(CUsbDevice) : public CActive, public MUsbClassControllerNotify, public MUsbmanExtensionPluginObserver + { +public: + class TUsbDeviceDescriptor + { + public: + TUint8 iLength; + TUint8 iDescriptorType; + TUint16 iBcdUsb; + TUint8 iDeviceClass; + TUint8 iDeviceSubClass; + TUint8 iDeviceProtocol; + TUint8 iMaxPacketSize; + TUint16 iIdVendor; + TUint16 iIdProduct; + TUint16 iBcdDevice; + TUint8 iManufacturer; + TUint8 iProduct; + TUint8 iSerialNumber; + TUint8 iNumConfigurations; + }; + +public: + static CUsbDevice* NewL(CUsbServer& aUsbServer); + virtual ~CUsbDevice(); + + void EnumerateClassControllersL(); + void AddClassControllerL(CUsbClassControllerBase* aClassController, TLinearOrder order); + + void RegisterObserverL(MUsbDeviceNotify& aObserver); + void DeRegisterObserver(MUsbDeviceNotify& aObserver); + + void StartL(); + void Stop(); + + inline TInt LastError() const; + inline RDevUsbcClient& UsbBus(); + inline TUsbDeviceState DeviceState() const; + inline TUsbServiceState ServiceState() const; + inline TBool isPersonalityCfged() const; + + void SetServiceState(TUsbServiceState aState); + void SetDeviceState(TUsbcDeviceState aState); + + void BusEnumerationCompleted(); + void BusEnumerationFailed(TInt aError); + + void TryStartL(TInt aPersonalityId); + TInt CurrentPersonalityId() const; + const RPointerArray& Personalities() const; + const CPersonality* GetPersonality(TInt aPersonalityId) const; + void ValidatePersonalitiesL(); + void ReadPersonalitiesL(); + void SetDefaultPersonalityL(); + void LoadFallbackClassControllersL(); + +public: // From CActive + void RunL(); + void DoCancel(); + TInt RunError(TInt aError); + +public: // Inherited from MUsbClassControllerNotify + CUsbClassControllerIterator* UccnGetClassControllerIteratorL(); + void UccnError(TInt aError); + +public: // from MUsbmanExtensionPluginObserver + RDevUsbcClient& MuepoDoDevUsbcClient(); + void MuepoDoRegisterStateObserverL(MUsbDeviceNotify& aObserver); + +protected: + CUsbDevice(CUsbServer& aUsbServer); + void ConstructL(); + void StartCurrentClassController(); + void StopCurrentClassController(); + +private: + void SetDeviceDescriptorL(); + void SetUsbDeviceSettingsL(TUsbDeviceDescriptor& aDeviceDescriptor); + void SetUsbDeviceSettingsDefaultsL(TUsbDeviceDescriptor& aDeviceDescriptor); + void SelectClassControllersL(); + void SetCurrentPersonalityL(TInt aPersonalityId); + void SetUsbDeviceSettingsFromPersonalityL(CUsbDevice::TUsbDeviceDescriptor& aDeviceDescriptor); + void ResourceFileNameL(TFileName& aFileName); + void CreateClassControllersL(const RArray& aClassUids); + void ConvertUidsL(const TDesC& aStr, RArray& aUidArray); + TInt PowerUpAndConnect(); +#ifdef __FLOG_ACTIVE + void PrintDescriptor(CUsbDevice::TUsbDeviceDescriptor& aDeviceDescriptor); +#endif + void InstantiateExtensionPluginsL(); +private: + RPointerArray iSupportedClasses; + RPointerArray iObservers; + RPointerArray iExtensionPlugins; + TUsbDeviceState iDeviceState; + TUsbServiceState iServiceState; + TInt iLastError; + RDevUsbcClient iLdd; + CUsbDeviceStateWatcher* iDeviceStateWatcher; + CUsbServer& iUsbServer; + CUsbClassControllerIterator* iUsbClassControllerIterator; + const CPersonality* iCurrentPersonality; + RPointerArray iSupportedPersonalities; + RArray iSupportedClassUids; + TBool iPersonalityCfged; + TBool iUdcSupportsCableDetectWhenUnpowered; + HBufC16* iDefaultSerialNumber; + + REComSession* iEcom; // Not to be deleted, only closed! + }; + +#include "CUsbDevice.inl" + +#endif +