diff -r 8b094906a049 -r 60a94a45d437 mtpfws/mtpfw/dataproviders/devdp/src/cmtpgetnumobjects.cpp --- a/mtpfws/mtpfw/dataproviders/devdp/src/cmtpgetnumobjects.cpp Mon Mar 15 12:43:12 2010 +0200 +++ b/mtpfws/mtpfw/dataproviders/devdp/src/cmtpgetnumobjects.cpp Wed Mar 31 22:58:56 2010 +0300 @@ -23,6 +23,7 @@ #include "cmtpdataprovidercontroller.h" #include "cmtpdataprovider.h" #include "cmtpdevicedatastore.h" +#include "cmtpdataprovidercontroller.h" #include "cmtpgetnumobjects.h" #include "mtpdevicedpconst.h" @@ -30,6 +31,7 @@ // Class constants. __FLOG_STMT(_LIT8(KComponent,"GetNumObjects");) +static const TInt KMTPGetObjectNumTimeOut(1); /** Verification data for GetNumObjects request @@ -99,33 +101,16 @@ return EMTPRespCodeInvalidObjectFormatCode; } + /* if(iSingletons.DpController().EnumerateState() != CMTPDataProviderController::EEnumeratedFulllyCompleted) { - TUint storageID = Request().Uint32(TMTPTypeRequest::ERequestParameter1); TUint handle = Request().Uint32(TMTPTypeRequest::ERequestParameter3); - if(iDevDpSingletons.PendingStorages().FindInOrder(storageID) != KErrNotFound) - { - responseCode = EMTPRespCodeDeviceBusy; - } - else if( (handle != KMTPHandleNone) && (handle != KMTPHandleAll) ) - { - CMTPObjectMetaData* meta = iRequestChecker->GetObjectInfo(handle); - __ASSERT_DEBUG(meta, Panic(EMTPDevDpObjectNull)); - - if( meta->Uint(CMTPObjectMetaData::EFormatCode) == EMTPFormatCodeAssociation ) - { - responseCode = EMTPRespCodeDeviceBusy; - } - } - else if(EMTPFormatCodeUndefined == formatCode) + if(handle != KMTPHandleAll) { responseCode = EMTPRespCodeDeviceBusy; } } - else if(iDevDpSingletons.PendingStorages().Count() > 0) - { - iDevDpSingletons.PendingStorages().Close(); - } + */ return responseCode; } @@ -138,6 +123,33 @@ { __FLOG(_L8("ServiceL - Entry")); __FLOG_VA((_L8("IsConnectMac = %d; ERequestParameter2 = %d" ), iDevDpSingletons.DeviceDataStore().IsConnectMac(), Request().Uint32(TMTPTypeRequest::ERequestParameter2))); + + if(iSingletons.DpController().EnumerateState() != CMTPDataProviderController::EEnumeratedFulllyCompleted) + { + TUint storageId = Request().Uint32(TMTPTypeRequest::ERequestParameter1); + TUint handle = Request().Uint32(TMTPTypeRequest::ERequestParameter3); + TUint enumerateState = iSingletons.DpController().StorageEnumerateState(storageId); + if ( (enumerateState < CMTPDataProviderController::EEnumeratingPhaseOneDone) + || (enumerateState != CMTPDataProviderController::EEnumeratedFulllyCompleted && handle != KMTPHandleAll)) + { + if (iTimeoutCount++ >= KMTPGetObjectNumTimeOut) + { + __FLOG(_L8("Wait for enumeration time out, return busy.")); + SendResponseL(EMTPRespCodeDeviceBusy); + iTimeoutCount = 0; + return; + } + else + { + __FLOG(_L8("Enumeration not completed, suspend request.")); + RegisterPendingRequest(20); + return; + } + } + } + + iTimeoutCount = 0; + if(iDevDpSingletons.DeviceDataStore().IsConnectMac() &&(KMTPFormatsAll == Request().Uint32(TMTPTypeRequest::ERequestParameter2))) {