diff -r 000000000000 -r bde4ae8d615e os/kernelhwsrv/kerneltest/f32test/shostmassstorage/msman/inc/cusbmsmountmanager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/kernelhwsrv/kerneltest/f32test/shostmassstorage/msman/inc/cusbmsmountmanager.h Fri Jun 15 03:10:57 2012 +0200 @@ -0,0 +1,177 @@ +// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "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: +// RUsbMsMountManager class. +// +// + + + +/** + @file + @internalTechnology +*/ + +#ifndef CUSBMSMOUNTMANAGER_H +#define CUSBMSMONUTMANAGER_H + + +class RUsbHubDriver; +class TUsbInterfaceDescriptor; +class TUsbDeviceDescriptor; +class RUsbInterface; + + +class TUsbPrint + { +public: + TUsbPrint(); + void EnableDebug() {iDebug = ETrue;} + void DisableDebug() {iDebug = EFalse;} + + void PrintTree(const TUsbGenericDescriptor& aDesc, + TInt aDepth = 0); + + void PrintDescriptor(const TUsbDeviceDescriptor& aDeviceDesc, + TInt aVariant = 0, + RUsbDevice* aDevice = NULL); + + void PrintDescriptor(const TUsbConfigurationDescriptor& aConfigDesc, + TInt aVariant = 0, + RUsbDevice* aDevice = NULL); + + void PrintDescriptor(const TUsbEndpointDescriptor& aEndpointDesc, + TInt aVariant = 0, + RUsbDevice* aDevice = NULL); + + void PrintDescriptor(const TUsbStringDescriptor& aStringDesc, + TInt aVariant = 0, + RUsbDevice* aDevice = NULL); + + void PrintDescriptor(const TUsbInterfaceDescriptor& aInterfaceDesc, + TInt aVariant = 0, + RUsbDevice* aDevice = NULL); + +private: + void SetLanguageToPrintL(RUsbDevice& aDevice); + + void PrintStringFromIndex(const TDesC& aFormatString, + TInt aIndex, + RUsbDevice* aDevice); + + TBool iDebug; + }; + + +class CDevice : public CBase + { +public: + static const TInt KMaxLun = 16; + +public: + static CDevice* NewL(); + ~CDevice(); +private: + void ConstructL(); + CDevice(); + +public: + TToken OpenDeviceL(TUint aDeviceHandle, RUsbHubDriver& aHub); + void CloseDeviceL(); + + void MountLogicalUnitsL(); + void DismountLogicalUnitsL(); + TToken DeviceToken() const {return iDeviceToken;}; + TUint DeviceHandle() const {return iDeviceHandle;}; + + TLun DriveMap(TDriveMap& aDriveMap) const; + TLun DeviceMap(TDeviceMap& aDeviceMap) const; + + +private: + TBool IsDeviceMassStorage(const TUsbInterfaceDescriptor& aInterfaceDesc, + const TUsbDeviceDescriptor& aDeviceDesc) const; + + TInt GetEndpointAddress(RUsbInterface& aUsbInterface, + TInt aInterfaceSetting, + TUint8 aTransferType, + TUint8 aDirection, + TInt& aEndpointAddress) const; + + + +private: + RUsbDevice iUsbDevice; + TUint iDeviceHandle; + + RUsbHostMsDevice iUsbHostMsDevice; + + TToken iDeviceToken; + TLun iNumLuns; + + RExtFileSystem iExt; + + // index is mapped to LUN + RArray iLuList; + + THostMassStorageConfig iMsConfig; + + TUsbPrint iUsbPrint; + }; + + +class CUsbMsMountManager : public CBase + { +public: + static CUsbMsMountManager* NewL(); + ~CUsbMsMountManager(); +private: + void ConstructL(); + CUsbMsMountManager(); + +public: + TInt DevicesNumber() const; + void DriveMap(TDriveMap& aDriveMap) const; + void DeviceMap(TInt aDeviceIndex, TDeviceMap& aDeviceMap) const; + + +public: + // adds new device entry for this device + void AddDeviceL(CDevice* aDevice); + // removes device entry for this device + CDevice* RemoveDeviceL(TUint aDeviceHandle); + + void CloseAllDevicesL(); + + // mounts all LUNs for the device + void MountDeviceL(TUint aDeviceHandle); + // dismount all LUNs for this device + void DismountDeviceL(TUint aDeviceHandle); + // dismount all LUNs + void DismountL(); + +private: + TInt GetDeviceIndexL(TToken aDeviceToken) const; + TInt GetHandleIndexL(TUint aDeviceHandle) const; + +private: + RPointerArray iDeviceList; + }; + + +inline TInt CUsbMsMountManager::DevicesNumber() const + { + return iDeviceList.Count(); + } + +#endif // CUSBMSMOUNTMANAGER_H