21 #include <mtp/cmtpobjectmetadata.h> |
21 #include <mtp/cmtpobjectmetadata.h> |
22 |
22 |
23 #include "cmtpdataprovidercontroller.h" |
23 #include "cmtpdataprovidercontroller.h" |
24 #include "cmtpdataprovider.h" |
24 #include "cmtpdataprovider.h" |
25 #include "cmtpdevicedatastore.h" |
25 #include "cmtpdevicedatastore.h" |
|
26 #include "cmtpdataprovidercontroller.h" |
26 |
27 |
27 #include "cmtpgetnumobjects.h" |
28 #include "cmtpgetnumobjects.h" |
28 #include "mtpdevicedpconst.h" |
29 #include "mtpdevicedpconst.h" |
29 #include "mtpdevdppanic.h" |
30 #include "mtpdevdppanic.h" |
30 |
31 |
31 // Class constants. |
32 // Class constants. |
32 __FLOG_STMT(_LIT8(KComponent,"GetNumObjects");) |
33 __FLOG_STMT(_LIT8(KComponent,"GetNumObjects");) |
|
34 static const TInt KMTPGetObjectNumTimeOut(1); |
33 |
35 |
34 /** |
36 /** |
35 Verification data for GetNumObjects request |
37 Verification data for GetNumObjects request |
36 */ |
38 */ |
37 const TMTPRequestElementInfo KMTPGetNumObjectsPolicy[] = |
39 const TMTPRequestElementInfo KMTPGetNumObjectsPolicy[] = |
97 if(formatCode != 0 && !IsSupportedFormatL(formatCode)) |
99 if(formatCode != 0 && !IsSupportedFormatL(formatCode)) |
98 { |
100 { |
99 return EMTPRespCodeInvalidObjectFormatCode; |
101 return EMTPRespCodeInvalidObjectFormatCode; |
100 } |
102 } |
101 |
103 |
|
104 /* |
102 if(iSingletons.DpController().EnumerateState() != CMTPDataProviderController::EEnumeratedFulllyCompleted) |
105 if(iSingletons.DpController().EnumerateState() != CMTPDataProviderController::EEnumeratedFulllyCompleted) |
103 { |
106 { |
104 TUint storageID = Request().Uint32(TMTPTypeRequest::ERequestParameter1); |
|
105 TUint handle = Request().Uint32(TMTPTypeRequest::ERequestParameter3); |
107 TUint handle = Request().Uint32(TMTPTypeRequest::ERequestParameter3); |
106 if(iDevDpSingletons.PendingStorages().FindInOrder(storageID) != KErrNotFound) |
108 if(handle != KMTPHandleAll) |
107 { |
109 { |
108 responseCode = EMTPRespCodeDeviceBusy; |
110 responseCode = EMTPRespCodeDeviceBusy; |
109 } |
111 } |
110 else if( (handle != KMTPHandleNone) && (handle != KMTPHandleAll) ) |
112 } |
111 { |
113 */ |
112 CMTPObjectMetaData* meta = iRequestChecker->GetObjectInfo(handle); |
|
113 __ASSERT_DEBUG(meta, Panic(EMTPDevDpObjectNull)); |
|
114 |
|
115 if( meta->Uint(CMTPObjectMetaData::EFormatCode) == EMTPFormatCodeAssociation ) |
|
116 { |
|
117 responseCode = EMTPRespCodeDeviceBusy; |
|
118 } |
|
119 } |
|
120 else if(EMTPFormatCodeUndefined == formatCode) |
|
121 { |
|
122 responseCode = EMTPRespCodeDeviceBusy; |
|
123 } |
|
124 } |
|
125 else if(iDevDpSingletons.PendingStorages().Count() > 0) |
|
126 { |
|
127 iDevDpSingletons.PendingStorages().Close(); |
|
128 } |
|
129 |
114 |
130 return responseCode; |
115 return responseCode; |
131 } |
116 } |
132 |
117 |
133 |
118 |
136 */ |
121 */ |
137 void CMTPGetNumObjects::ServiceL() |
122 void CMTPGetNumObjects::ServiceL() |
138 { |
123 { |
139 __FLOG(_L8("ServiceL - Entry")); |
124 __FLOG(_L8("ServiceL - Entry")); |
140 __FLOG_VA((_L8("IsConnectMac = %d; ERequestParameter2 = %d" ), iDevDpSingletons.DeviceDataStore().IsConnectMac(), Request().Uint32(TMTPTypeRequest::ERequestParameter2))); |
125 __FLOG_VA((_L8("IsConnectMac = %d; ERequestParameter2 = %d" ), iDevDpSingletons.DeviceDataStore().IsConnectMac(), Request().Uint32(TMTPTypeRequest::ERequestParameter2))); |
|
126 |
|
127 if(iSingletons.DpController().EnumerateState() != CMTPDataProviderController::EEnumeratedFulllyCompleted) |
|
128 { |
|
129 TUint storageId = Request().Uint32(TMTPTypeRequest::ERequestParameter1); |
|
130 TUint handle = Request().Uint32(TMTPTypeRequest::ERequestParameter3); |
|
131 TUint enumerateState = iSingletons.DpController().StorageEnumerateState(storageId); |
|
132 if ( (enumerateState < CMTPDataProviderController::EEnumeratingPhaseOneDone) |
|
133 || (enumerateState != CMTPDataProviderController::EEnumeratedFulllyCompleted && handle != KMTPHandleAll)) |
|
134 { |
|
135 if (iTimeoutCount++ >= KMTPGetObjectNumTimeOut) |
|
136 { |
|
137 __FLOG(_L8("Wait for enumeration time out, return busy.")); |
|
138 SendResponseL(EMTPRespCodeDeviceBusy); |
|
139 iTimeoutCount = 0; |
|
140 return; |
|
141 } |
|
142 else |
|
143 { |
|
144 __FLOG(_L8("Enumeration not completed, suspend request.")); |
|
145 RegisterPendingRequest(20); |
|
146 return; |
|
147 } |
|
148 } |
|
149 } |
|
150 |
|
151 iTimeoutCount = 0; |
|
152 |
141 if(iDevDpSingletons.DeviceDataStore().IsConnectMac() |
153 if(iDevDpSingletons.DeviceDataStore().IsConnectMac() |
142 &&(KMTPFormatsAll == Request().Uint32(TMTPTypeRequest::ERequestParameter2))) |
154 &&(KMTPFormatsAll == Request().Uint32(TMTPTypeRequest::ERequestParameter2))) |
143 { |
155 { |
144 //get folder count |
156 //get folder count |
145 TMTPObjectMgrQueryParams paramsFolder(Request().Uint32(TMTPTypeRequest::ERequestParameter1), EMTPFormatCodeAssociation, Request().Uint32(TMTPTypeRequest::ERequestParameter3)); |
157 TMTPObjectMgrQueryParams paramsFolder(Request().Uint32(TMTPTypeRequest::ERequestParameter1), EMTPFormatCodeAssociation, Request().Uint32(TMTPTypeRequest::ERequestParameter3)); |