mtpfws/mtpfw/inc/cmtpdataprovider.h
changeset 0 d0791faffa3f
child 2 4843bb5893b6
equal deleted inserted replaced
-1:000000000000 0:d0791faffa3f
       
     1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 //
       
    15 
       
    16 #ifndef CMTPDATAPROVIDER_H
       
    17 #define CMTPDATAPROVIDER_H
       
    18 
       
    19 /**
       
    20 @file
       
    21 @internalComponent
       
    22 */
       
    23 
       
    24 #include "rmtpframework.h"
       
    25 
       
    26 #include <e32base.h>
       
    27 
       
    28 #include <mtp/mmtpdataproviderframework.h>
       
    29 #include <mtp/mtpdataproviderapitypes.h>
       
    30 #include <mtp/tmtptypeevent.h>
       
    31 #include <mtp/tmtptyperequest.h>
       
    32 #include <mtp/tmtptyperesponse.h>
       
    33 
       
    34 #include "mtpdebug.h"
       
    35 
       
    36 class CMTPConnection;
       
    37 class CMTPDataProviderPlugin;
       
    38 class CMTPDataProviderConfig;
       
    39 class MMTPDataProvider;
       
    40 class MMTPDataProviderConfig;
       
    41 class MTPFrameworkConfig;
       
    42 class MMTPObjectMgr;
       
    43 class MMTPTransactionProxy;
       
    44 class MMTPDataCodeGenerator;
       
    45 
       
    46 /**
       
    47 Implements the API portion of the API/SPI interface pair by which MTP framework 
       
    48 and data provider plug-ins interact. A unique CMTPDataProvider instance is 
       
    49 created and bound to each CMTPDataProviderPlugin instance that is loaded, and 
       
    50 functions on its behalf to:
       
    51     a)	Process MTP operational and media object data to and from the MTP 
       
    52         framework, and;
       
    53     b)	Manage MTP transaction protocol state transitions to ensure that the 
       
    54         MTP transaction state remains valid under both normal and error 
       
    55         recovery processing conditions.
       
    56 @internalTechnology
       
    57  
       
    58 */
       
    59 class CMTPDataProvider : 
       
    60     public CActive, 
       
    61     public MMTPDataProviderFramework
       
    62     {
       
    63 public:
       
    64 
       
    65     /**
       
    66     The enumeration state bit flags.
       
    67     */
       
    68     enum TEnumerationStates
       
    69         {
       
    70         EUnenumerated               = 0x00000000,
       
    71         EObjectsEnumerationState    = 0x0000000F,
       
    72         EObjectsEnumerating         = 0x00000003,
       
    73         EObjectsEnumerated          = 0x00000001,
       
    74         EStoragesEnumerationState   = 0x000000F0,
       
    75         EStoragesEnumerating        = 0x00000030,
       
    76         EStoragesEnumerated         = 0x00000010,
       
    77         EEnumerated                 = (EStoragesEnumerated | EObjectsEnumerated)
       
    78         };
       
    79         
       
    80 public:
       
    81 
       
    82 	static CMTPDataProvider* NewL(TUint aId, TUid aImplementationUid, CMTPDataProviderConfig* aConfig);
       
    83 	static CMTPDataProvider* NewLC(TUint aId, TUid aImplementationUid, CMTPDataProviderConfig* aConfig);
       
    84 	~CMTPDataProvider();
       
    85  
       
    86 	void ExecuteEventL(const TMTPTypeEvent& aEvent, MMTPConnection& aConnection);
       
    87 	void ExecuteRequestL(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection);
       
    88 	IMPORT_C void ExecuteProxyRequestL(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection, MMTPTransactionProxy& aProxy);
       
    89     
       
    90     void EnumerateObjectsL(TUint32 aStorageId);
       
    91     void EnumerateStoragesL();
       
    92     IMPORT_C TUint EnumerationState() const;
       
    93     IMPORT_C TUid ImplementationUid() const;
       
    94 	IMPORT_C CMTPDataProviderPlugin& Plugin() const;
       
    95     IMPORT_C TBool Supported(TMTPSupportCategory aCategory, TUint aCode) const;
       
    96     IMPORT_C const RArray<TUint>& SupportedCodes(TMTPSupportCategory aCategory) const;
       
    97     
       
    98     void SetDataProviderId(TUint aId);
       
    99     
       
   100     static TInt LinearOrderUid(const TUid* aUid, const CMTPDataProvider& aObject);
       
   101     static TInt LinearOrderUid(const CMTPDataProvider& aL, const CMTPDataProvider& aR);
       
   102 	static TInt LinearOrderDPId(const TUint* aDPId, const CMTPDataProvider& aObject);
       
   103     static TInt LinearOrderDPId(const CMTPDataProvider& aL, const CMTPDataProvider& aR);
       
   104     static TInt LinearOrderEnumerationPhase(const CMTPDataProvider& aL, const CMTPDataProvider& aR);
       
   105     
       
   106 public: // From MMTPDataProviderFramework
       
   107 
       
   108     TUint DataProviderId() const;
       
   109     TMTPOperationalMode Mode() const;
       
   110     void ReceiveDataL(MMTPType& aData, const TMTPTypeRequest& aRequest, MMTPConnection& aConnection);
       
   111     void SendDataL(const MMTPType& aData, const TMTPTypeRequest& aRequest, MMTPConnection& aConnection);
       
   112     void SendEventL(const TMTPTypeEvent& aEvent, MMTPConnection& aConnection);
       
   113     void SendEventL(const TMTPTypeEvent& aEvent);
       
   114     void SendResponseL(const TMTPTypeResponse& aResponse, const TMTPTypeRequest& aRequest, MMTPConnection& aConnection);
       
   115     void TransactionCompleteL(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection);
       
   116     void RouteRequestRegisterL(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection);
       
   117     void RouteRequestUnregisterL(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection);
       
   118     void ObjectEnumerationCompleteL(TUint32 aStorageId);
       
   119     void StorageEnumerationCompleteL();
       
   120     const MMTPDataProviderConfig& DataProviderConfig() const;
       
   121     const MMTPFrameworkConfig& FrameworkConfig() const;
       
   122 	MMTPObjectMgr& ObjectMgr() const;
       
   123     MMTPReferenceMgr& ReferenceMgr() const;
       
   124     MMTPStorageMgr& StorageMgr() const;
       
   125     RFs& Fs() const;
       
   126     MMTPDataCodeGenerator& DataCodeGenerator() const;
       
   127 	
       
   128 private: // From CActive
       
   129 
       
   130 	void DoCancel();
       
   131 	void RunL();
       
   132 	TInt RunError(TInt aError);
       
   133 
       
   134 private:
       
   135 
       
   136    	CMTPDataProvider(TUint aId, TUid aImplementationUid, CMTPDataProviderConfig* aConfig);
       
   137     void ConstructL();
       
   138     
       
   139 	void Schedule();
       
   140   	void SendErrorResponseL(TInt aError);
       
   141   	
       
   142 private:
       
   143 
       
   144     /**
       
   145     */
       
   146     class CSupportedCodes : public CBase
       
   147         {
       
   148     public:
       
   149     
       
   150         static CSupportedCodes* NewLC(TMTPSupportCategory aCategory, MMTPDataProvider& aDp);
       
   151         virtual ~CSupportedCodes();
       
   152     
       
   153         const RArray<TUint>& Codes() const;
       
   154         TBool Supported(TUint aCode) const;
       
   155         
       
   156     private:
       
   157     
       
   158         CSupportedCodes();
       
   159         void ConstructL(TMTPSupportCategory aCategory, MMTPDataProvider& aDp);
       
   160         
       
   161     private:
       
   162     
       
   163         RArray<TUint> iCodes;
       
   164         };
       
   165         
       
   166 private: // Owned
       
   167 
       
   168     /**
       
   169     FLOGGER debug trace member variable.
       
   170     */
       
   171     __FLOG_DECLARATION_MEMBER_MUTABLE;
       
   172     
       
   173     /**
       
   174     The data provider configurability parameter data.
       
   175     */
       
   176 	CMTPDataProviderConfig*         iConfig;
       
   177     
       
   178     /**
       
   179     The construction completed flag. This is used to indicate that ownership 
       
   180     of passed objects has been assumed.
       
   181     */
       
   182     TBool                           iConstructed;
       
   183 	
       
   184 	/**
       
   185 	The transaction phase of the currently active operation.
       
   186 	*/
       
   187     TMTPTransactionPhase            iCurrentTransactionPhase;
       
   188     
       
   189     /**
       
   190     The enumeration state.
       
   191     */
       
   192 	TUint                           iEnumerationState;
       
   193 	
       
   194 	/**
       
   195 	The error recovery flag, indicating that an error occurred while processing
       
   196 	a request. 
       
   197 	*/
       
   198 	TInt                            iErrorRecovery;
       
   199     
       
   200     /** 
       
   201     The data provider identifier.
       
   202     */
       
   203 	TInt                            iId;
       
   204 	
       
   205 	/**
       
   206 	The data provider implementation plug-in.
       
   207 	*/
       
   208 	CMTPDataProviderPlugin*         iImplementation;
       
   209 	
       
   210 	/**
       
   211 	The data provider implementation UID.
       
   212 	*/
       
   213 	TUid                            iImplementationUid;
       
   214 	
       
   215 	/**
       
   216 	The transaction phase of the currently active transaction proxy.
       
   217 	*/
       
   218     TMTPTransactionPhase            iProxyTransactionPhase;
       
   219     
       
   220     /**
       
   221     The MTP response dataset buffer.
       
   222     */
       
   223 	TMTPTypeResponse		        iResponse;
       
   224     
       
   225     /**
       
   226     The framework singletons.
       
   227     */
       
   228 	RMTPFramework                   iSingletons;
       
   229     
       
   230     /** 
       
   231     The data provider's support categories table.
       
   232     */
       
   233     RPointerArray<CSupportedCodes>  iSupported;
       
   234 
       
   235 	
       
   236     /** Indicates whether iTimer is active. */
       
   237     TBool							iTimerActive;
       
   238 
       
   239     /*****
       
   240 	 * Added timer to delay request handling until storage/object enumeration has finished
       
   241 	 */ 	
       
   242 	RTimer iTimer;
       
   243         
       
   244 private: // Not owned
       
   245 	
       
   246 	/**
       
   247 	The MTP connection on which the currently active operation is being 
       
   248 	processed.
       
   249 	*/
       
   250 	CMTPConnection*                 iCurrentConnection;
       
   251     
       
   252     /**
       
   253     The MTP request dataset buffer.
       
   254     */
       
   255 	const TMTPTypeRequest*          iCurrentRequest;
       
   256 	
       
   257 	/**
       
   258 	The currently active transaction proxy.
       
   259 	*/
       
   260 	MMTPTransactionProxy*           iProxy;
       
   261     };
       
   262     
       
   263 #endif // CMTPDATAPROVIDER_H