mtpfws/mtpfw/dataproviders/devdp/inc/cmtpdevicedpconfigmgr.h
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:11:40 +0200
changeset 0 d0791faffa3f
child 47 63cf70d3ecd8
permissions -rw-r--r--
Revision: 201003 Kit: 201005

// Copyright (c) 2006-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:
//

/**
 @file
 @internalTechnology
*/

#ifndef CMTPDEVICEDPCONFIGMGR_H
#define CMTPDEVICEDPCONFIGMGR_H

#include <e32base.h>
#include <badesca.h>

#include "mtpdebug.h"
#include "mtpdevicedpconst.h"

class MMTPDataProviderFramework;

class CMTPDeviceDpConfigMgr : 
	public CBase
	{
public:
	enum TParameter
	    {
    	/**
	    The set of folders containing data objects which are not exposed by the 
   		MTP protocol and which are excluded from the file data provider's 
    	object enumeration process. Each folder should be specified using format 
    	acceptable to the TDesC Match function. To exclude entries on a specific drive
    	use a format prefixed by the drive letter (e.g by specifiying C:\dir\*).

    	Excluded folder specifications do not need to include a trailing backslash 
    	("\"). Any trailing backslash which is present will be ignored.

    	The exclusion list does not prohibit the root folder of a drive from being 
    	specified (e.g. by specifying "K:\\*"). If specified this has the effect of
    	excluding all folders and data objects on the specified drive. To prevent 
    	objects being added to the device and then not being visible to the MTP 
    	initiator that created them, any attempt by an MTP initiator to write 
    	data (SendObject) to an excluded root folder will be rejected with an 
    	"Access Denied" MTP response code.
    	*/
    	EFolderExclusionList,
 
    	/**
    	The maximum number of data objects that are enumerated on each 
    	iteration of the file data provider's object enumerator.
    	
    	Setting this to an appropriate number will reduce the running time of the
    	enumerator ActiveObject RunL as to allow other ActiveObjects to run. 
    	The downside is that the enumerator will take longer to iterate over 
    	directory entries due less objects being added in each RunL call.
    	
    	Setting this to a larger number will increase the running time of the
    	enumerator ActiveObject RunL decreasing total enumerator running time but
    	potentially starving out other ActiveObjects.
    	*/
    	EEnumerationIterationLength,
    	};
	
public:
	static CMTPDeviceDpConfigMgr* NewL(MMTPDataProviderFramework& aFramework);
	~CMTPDeviceDpConfigMgr();
	
	TUint UintValueL(TParameter aParam) const;
	CDesCArray* GetArrayValueL(TParameter aParam) const;
	
	/**
	  *This method is to get friendly name for a particular drive/volume.
	  *
	  *@param aDriveNo : drive in which friendly name is needed.
	  *@param aVolumeName : out param for friendly name, it is read
	  * from mtpdevicedp_config.rss file
	  */
	void GetFriendlyVolumeNameL(TInt aDriveNo, TDes& aVolumeName);

	/**
	  *This method is to get root dir path for a particular drive/volume.
	  *
	  *@param aDriveNo : drive in which root dir path is needed.
	  *@param aRootDirPath : out param for root dir path, it is read
	  * from mtpdevicedp_config.rss file
	  */
	void GetRootDirPathL(TInt aDriveNo, TDes& aRootDirPath);
	
	/**
	  *This method is to get the ordered format from the rss file
	  *
	  *@param aOrderInfoArray : is an array for storing ordered formats(out param).
	  * 
	  */
    void GetRssConfigInfoArrayL(RArray<TUint>& aOrderInfoArray, TDevDPConfigRSSParams aParam);

private:
	CMTPDeviceDpConfigMgr(MMTPDataProviderFramework& aFramework);
	void ConstructL();
	
	CDesCArray* ReadExclusionListL() const;
	
	/**
	  *This method is to get drive info for a particular drive/volume.
	  *
	  *@param aDriveNo : drive in which drive info is needed.
	  *@param aVolumeName : out param for friendly name, it is read
	  * from mtpdevicedp_config.rss file
	  *@param aRootDirPath : out param for root dir path, it is read
	  * from mtpdevicedp_config.rss file
	  */
	void  GetDriveInfoL(TInt aDriveNo, TDes& aVolumeName, TDes& aRootDirPath);

private:
	/**
    FLOGGER debug trace member variable.
    */
    __FLOG_DECLARATION_MEMBER_MUTABLE;
    
	MMTPDataProviderFramework& iFramework;
	TUint iResourceId;
	TUint iEnumItrLength;	
	};

#endif // CMTPDEVICEDPCONFIGMGR_H