sl@0: // Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // RUsbMsMountManager class. sl@0: // sl@0: // sl@0: sl@0: sl@0: sl@0: /** sl@0: @file sl@0: @internalTechnology sl@0: */ sl@0: sl@0: #ifndef CUSBMSMOUNTMANAGER_H sl@0: #define CUSBMSMONUTMANAGER_H sl@0: sl@0: sl@0: class RUsbHubDriver; sl@0: class TUsbInterfaceDescriptor; sl@0: class TUsbDeviceDescriptor; sl@0: class RUsbInterface; sl@0: sl@0: sl@0: class TUsbPrint sl@0: { sl@0: public: sl@0: TUsbPrint(); sl@0: void EnableDebug() {iDebug = ETrue;} sl@0: void DisableDebug() {iDebug = EFalse;} sl@0: sl@0: void PrintTree(const TUsbGenericDescriptor& aDesc, sl@0: TInt aDepth = 0); sl@0: sl@0: void PrintDescriptor(const TUsbDeviceDescriptor& aDeviceDesc, sl@0: TInt aVariant = 0, sl@0: RUsbDevice* aDevice = NULL); sl@0: sl@0: void PrintDescriptor(const TUsbConfigurationDescriptor& aConfigDesc, sl@0: TInt aVariant = 0, sl@0: RUsbDevice* aDevice = NULL); sl@0: sl@0: void PrintDescriptor(const TUsbEndpointDescriptor& aEndpointDesc, sl@0: TInt aVariant = 0, sl@0: RUsbDevice* aDevice = NULL); sl@0: sl@0: void PrintDescriptor(const TUsbStringDescriptor& aStringDesc, sl@0: TInt aVariant = 0, sl@0: RUsbDevice* aDevice = NULL); sl@0: sl@0: void PrintDescriptor(const TUsbInterfaceDescriptor& aInterfaceDesc, sl@0: TInt aVariant = 0, sl@0: RUsbDevice* aDevice = NULL); sl@0: sl@0: private: sl@0: void SetLanguageToPrintL(RUsbDevice& aDevice); sl@0: sl@0: void PrintStringFromIndex(const TDesC& aFormatString, sl@0: TInt aIndex, sl@0: RUsbDevice* aDevice); sl@0: sl@0: TBool iDebug; sl@0: }; sl@0: sl@0: sl@0: class CDevice : public CBase sl@0: { sl@0: public: sl@0: static const TInt KMaxLun = 16; sl@0: sl@0: public: sl@0: static CDevice* NewL(); sl@0: ~CDevice(); sl@0: private: sl@0: void ConstructL(); sl@0: CDevice(); sl@0: sl@0: public: sl@0: TToken OpenDeviceL(TUint aDeviceHandle, RUsbHubDriver& aHub); sl@0: void CloseDeviceL(); sl@0: sl@0: void MountLogicalUnitsL(); sl@0: void DismountLogicalUnitsL(); sl@0: TToken DeviceToken() const {return iDeviceToken;}; sl@0: TUint DeviceHandle() const {return iDeviceHandle;}; sl@0: sl@0: TLun DriveMap(TDriveMap& aDriveMap) const; sl@0: TLun DeviceMap(TDeviceMap& aDeviceMap) const; sl@0: sl@0: sl@0: private: sl@0: TBool IsDeviceMassStorage(const TUsbInterfaceDescriptor& aInterfaceDesc, sl@0: const TUsbDeviceDescriptor& aDeviceDesc) const; sl@0: sl@0: TInt GetEndpointAddress(RUsbInterface& aUsbInterface, sl@0: TInt aInterfaceSetting, sl@0: TUint8 aTransferType, sl@0: TUint8 aDirection, sl@0: TInt& aEndpointAddress) const; sl@0: sl@0: sl@0: sl@0: private: sl@0: RUsbDevice iUsbDevice; sl@0: TUint iDeviceHandle; sl@0: sl@0: RUsbHostMsDevice iUsbHostMsDevice; sl@0: sl@0: TToken iDeviceToken; sl@0: TLun iNumLuns; sl@0: sl@0: RExtFileSystem iExt; sl@0: sl@0: // index is mapped to LUN sl@0: RArray<TDriveNumber> iLuList; sl@0: sl@0: THostMassStorageConfig iMsConfig; sl@0: sl@0: TUsbPrint iUsbPrint; sl@0: }; sl@0: sl@0: sl@0: class CUsbMsMountManager : public CBase sl@0: { sl@0: public: sl@0: static CUsbMsMountManager* NewL(); sl@0: ~CUsbMsMountManager(); sl@0: private: sl@0: void ConstructL(); sl@0: CUsbMsMountManager(); sl@0: sl@0: public: sl@0: TInt DevicesNumber() const; sl@0: void DriveMap(TDriveMap& aDriveMap) const; sl@0: void DeviceMap(TInt aDeviceIndex, TDeviceMap& aDeviceMap) const; sl@0: sl@0: sl@0: public: sl@0: // adds new device entry for this device sl@0: void AddDeviceL(CDevice* aDevice); sl@0: // removes device entry for this device sl@0: CDevice* RemoveDeviceL(TUint aDeviceHandle); sl@0: sl@0: void CloseAllDevicesL(); sl@0: sl@0: // mounts all LUNs for the device sl@0: void MountDeviceL(TUint aDeviceHandle); sl@0: // dismount all LUNs for this device sl@0: void DismountDeviceL(TUint aDeviceHandle); sl@0: // dismount all LUNs sl@0: void DismountL(); sl@0: sl@0: private: sl@0: TInt GetDeviceIndexL(TToken aDeviceToken) const; sl@0: TInt GetHandleIndexL(TUint aDeviceHandle) const; sl@0: sl@0: private: sl@0: RPointerArray<CDevice> iDeviceList; sl@0: }; sl@0: sl@0: sl@0: inline TInt CUsbMsMountManager::DevicesNumber() const sl@0: { sl@0: return iDeviceList.Count(); sl@0: } sl@0: sl@0: #endif // CUSBMSMOUNTMANAGER_H