diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/mtpdataproviderpluginexample_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/mtpdataproviderpluginexample_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,243 +0,0 @@ - -
-00001 // Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). -00002 // All rights reserved. -00003 // This component and the accompanying materials are made available -00004 // under the terms of "Eclipse Public License v1.0" -00005 // which accompanies this distribution, and is available -00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html". -00007 // -00008 // Initial Contributors: -00009 // Nokia Corporation - initial contribution. -00010 // -00011 // Contributors: -00012 // -00013 // Description: -00014 // -00015 -00016 #include <bautils.h> -00017 #include <mtp/mmtpconnection.h> -00018 #include <mtp/mtpprotocolconstants.h> -00019 #include <mtp/mmtpdataproviderframework.h> -00020 #include <mtp/mmtpstoragemgr.h> -00021 #include <mtp/cmtpobjectmetadata.h> -00022 #include <mtp/mmtpobjectmgr.h> -00023 -00024 #include "mtpdataproviderpluginexample.h" -00025 -00026 #include "mtpexamplerequestprocessor.h" -00027 #include "cmtpexampledprequestprocessor.h" -00028 -00029 #include "cmtpexampledpconst.h" -00030 -00031 -00032 // Class constants. -00034 static const TInt KMTPExampleDpSessionGranualrity = 3; -00035 -00036 -00041 TAny* CMTPExampleDataProvider::NewL(TAny* aParams) -00042 { -00043 CMTPExampleDataProvider* self = new (ELeave) CMTPExampleDataProvider(aParams); -00044 CleanupStack::PushL(self); -00045 self->ConstructL(); -00046 CleanupStack::Pop(self); -00047 return self; -00048 } -00049 -00054 CMTPExampleDataProvider::CMTPExampleDataProvider(TAny* aParams) -00055 :CMTPDataProviderPlugin(aParams), -00056 iActiveProcessors(KMTPExampleDpSessionGranualrity), -00057 iActiveProcessor(-1) -00058 { -00059 -00060 } -00061 -00065 CMTPExampleDataProvider::~CMTPExampleDataProvider() -00066 { -00067 TUint count(iActiveProcessors.Count()); -00068 while (count--) -00069 { -00070 iActiveProcessors[count]->Release(); -00071 } -00072 iActiveProcessors.Close(); -00073 } -00074 -00075 -00076 void CMTPExampleDataProvider::Cancel() -00077 { -00078 } -00079 -00085 void CMTPExampleDataProvider::Supported(TMTPSupportCategory aCategory, RArray<TUint>& aArray) const -00086 { -00087 switch (aCategory) -00088 { -00089 case EEvents: -00090 break; -00091 case EObjectPlaybackFormats: -00092 case EObjectCaptureFormats: -00093 break; -00094 case EObjectProperties: -00095 break; -00096 -00097 case EOperations: -00098 { -00099 TInt count(sizeof(KMTPExampleDpSupportedOperations) / sizeof(KMTPExampleDpSupportedOperations[0])); -00100 for (TInt i(0); (i < count); i++) -00101 { -00102 aArray.Append(KMTPExampleDpSupportedOperations[i]); -00103 } -00104 } -00105 break; -00106 -00107 default: -00108 break; -00109 } -00110 } -00117 void CMTPExampleDataProvider::SupportedL(TMTPSupportCategory aCategory, CDesCArray& /*aStrings*/) const -00118 { -00119 switch (aCategory) -00120 { -00121 case EFolderExclusionSets: -00122 break; -00123 case EFormatExtensionSets: -00124 break; -00125 default: -00126 break; -00127 } -00128 } -00129 -00133 void CMTPExampleDataProvider::StartObjectEnumerationL(TUint32 aStorageId) -00134 { -00135 Framework().ObjectEnumerationCompleteL(aStorageId); -00136 -00137 } -00138 -00142 void CMTPExampleDataProvider::StartStorageEnumerationL() -00143 { -00144 Framework().StorageEnumerationCompleteL(); -00145 } -00146 -00152 void CMTPExampleDataProvider::ProcessEventL(const TMTPTypeEvent& aEvent, MMTPConnection& aConnection) -00153 { -00154 TInt idx = LocateRequestProcessorL(aEvent, aConnection); -00155 -00156 if (idx != KErrNotFound) -00157 { -00158 iActiveProcessors[idx]->HandleEventL(aEvent); -00159 } -00160 } -00161 -00167 void CMTPExampleDataProvider::ProcessNotificationL(TMTPNotification aNotification, const TAny* aParams) -00168 { -00169 switch (aNotification) -00170 { -00171 case EMTPSessionClosed: -00172 SessionClosedL(*reinterpret_cast<const TMTPNotificationParamsSessionChange*>(aParams)); -00173 break; -00174 -00175 case EMTPSessionOpened: -00176 SessionOpenedL(*reinterpret_cast<const TMTPNotificationParamsSessionChange*>(aParams)); -00177 break; -00178 -00179 default: -00180 // Ignore all other notifications. -00181 break; -00182 } -00183 } -00184 -00191 void CMTPExampleDataProvider::ProcessRequestPhaseL(TMTPTransactionPhase aPhase, const TMTPTypeRequest& aRequest, MMTPConnection& aConnection) -00192 { -00193 //Check if the request is handled. -00194 TInt idx(LocateRequestProcessorL(aRequest, aConnection)); -00195 MMTPExampleDpRequestProcessor* processor(iActiveProcessors[idx]); -00196 //Handle the request -00197 TBool result(processor->HandleRequestL(aRequest, aPhase)); -00198 if (result) //destroy the processor -00199 { -00200 processor->Release(); -00201 iActiveProcessors.Remove(idx); -00202 } -00203 } -00204 -00210 void CMTPExampleDataProvider::SessionClosedL(const TMTPNotificationParamsSessionChange& aSession) -00211 { -00212 TInt count = iActiveProcessors.Count(); -00213 while(count--) -00214 { -00215 MMTPExampleDpRequestProcessor* processor = iActiveProcessors[count]; -00216 TUint32 sessionId = processor->SessionId(); -00217 if((sessionId == aSession.iMTPId) && (processor->Connection().ConnectionId() == aSession.iConnection.ConnectionId())) -00218 { -00219 iActiveProcessors.Remove(count); -00220 if (count == iActiveProcessor) -00221 { -00222 iActiveProcessorRemoved = ETrue; -00223 } -00224 else -00225 { -00226 processor->Release(); -00227 } -00228 } -00229 } -00230 } -00231 -00237 void CMTPExampleDataProvider::SessionOpenedL(const TMTPNotificationParamsSessionChange& /*aSession*/) -00238 { -00239 } -00240 -00246 TAny* CMTPExampleDataProvider::GetExtendedInterface(TUid /*aInterfaceUid*/) -00247 { -00248 return NULL; -00249 } -00250 -00254 void CMTPExampleDataProvider::ConstructL() -00255 { -00256 -00257 -00258 } -00259 -00267 TInt CMTPExampleDataProvider::LocateRequestProcessorL(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection) -00268 { -00269 TInt idx(KErrNotFound); -00270 //Get the Count of the request supported. -00271 TInt count(iActiveProcessors.Count()); -00272 //Not found create and then append to the array. -00273 if (idx == KErrNotFound) -00274 { -00275 MMTPExampleDpRequestProcessor* processor = MTPExampleDpProcessor::CreateL -00276 (Framework(), aRequest, aConnection); -00277 CleanupReleasePushL(*processor); -00278 iActiveProcessors.AppendL(processor); -00279 CleanupStack::Pop(processor); -00280 idx = count; -00281 } -00282 return idx; -00283 } -00284 -00293 TInt CMTPExampleDataProvider::LocateRequestProcessorL(const TMTPTypeEvent& aEvent, MMTPConnection& aConnection) -00294 { -00295 TInt idx(KErrNotFound); -00296 TInt count(iActiveProcessors.Count()); -00297 for (TInt i(0); (i < count); i++) -00298 { -00299 if (iActiveProcessors[i]->Match(aEvent, aConnection)) -00300 { -00301 idx = i; -00302 break; -00303 } -00304 } -00305 return idx; -00306 } -00307 -00308 -00309 -