# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1274782453 -10800 # Node ID 6f9f6e99a23e31aeffd64b7bcffc904e7cb2cfa9 # Parent f56ec6ce2732c08dfb771ff3be93add4dc88e857 Revision: 201019 Kit: 2010121 diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp --- a/mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/collectionhelper/src/mpxcollectioncachedhelper.cpp Tue May 25 13:14:13 2010 +0300 @@ -12,7 +12,7 @@ * Contributors: * * Description: Extended collection helper with an internal caching array -* Version : %version: da1mmcf#27.1.12.1.1 % +* Version : %version: da1mmcf#27.1.12.1.2 % * */ @@ -30,6 +30,10 @@ #include #include +#include // for RProperty +#include +#include + #include #include @@ -153,11 +157,21 @@ MPX_FUNC("CMPXCollectionCachedHelper::::AddL"); // Commit when we have cached more than a set amount // - if( iCache->Count() >= KCacheCount) - { + + TInt cacheCount = KCacheCount; + TInt usbStatus; + RProperty::Get( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus ); + + // if MTP is not connected via USB, disable caching mechanism and flush immediately + // in case UI is not blocked and need to reflect the change in real time + // this logic is hardly invoked during MTP, because ::FindAllL (which flush) is always called before AddL + if ((usbStatus != KUsbPersonalityIdMTP) && (usbStatus != KUsbPersonalityIdPCSuiteMTP)) + cacheCount = 1; + + if( iCache->Count() >= cacheCount) Commit(); - } -#ifdef ABSTRACTAUDIOALBUM_INCLUDED + + #ifdef ABSTRACTAUDIOALBUM_INCLUDED TBool extract = ETrue; if( aMedia->IsSupported( KMPXMediaMTPSampleDataFlag ) ) { @@ -746,6 +760,14 @@ #else //RD_MPX_COLLECTION_CACHE MPX_DEBUG1("CMPXCollectionCachedHelper::GetL <--"); + + TInt usbStatus; + RProperty::Get( KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus ); + + // if MTP is not connected via USB, flush immediately + // in case UI is not blocked and need to reflect the change in real time + if ((usbStatus != KUsbPersonalityIdMTP) && (usbStatus != KUsbPersonalityIdPCSuiteMTP)) + Commit(); #ifdef ABSTRACTAUDIOALBUM_INCLUDED if (aItemCat != EMPXSong && aItemCat != EMPXPlaylist && aItemCat != EMPXAbstractAlbum) diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/collectionhelper/src/mpxcollectionuihelperimp.cpp --- a/mmappcomponents/collectionhelper/src/mpxcollectionuihelperimp.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/collectionhelper/src/mpxcollectionuihelperimp.cpp Tue May 25 13:14:13 2010 +0300 @@ -38,6 +38,7 @@ #include #include #include +#include #include "mpxcollectionuihelperobserver.h" #include "mpxcollectionuihelperimp.h" @@ -1399,11 +1400,16 @@ { TInt usbStatus; RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus); - - if ((usbStatus == KUsbPersonalityIdMTP) || (usbStatus == KUsbPersonalityIdPCSuiteMTP) - || (usbStatus == KUsbPersonalityIdMS) ) + + TInt mtpStatus = EMtpPSStatusUninitialized; + RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus); + + MPX_DEBUG2("CMPXCollectionViewHgImp::ConstructL, mtpstatus = %d", mtpStatus); + + if ( (mtpStatus != EMtpPSStatusUninitialized) + || (usbStatus == KUsbPersonalityIdMS) ) { - MPX_DEBUG1("USB is active, Leave with KErrLocked"); + MPX_DEBUG1("MTP/USB is active, Leave with KErrLocked"); // need to call back even if it leaves here iHelperObserver = (MMPXCHelperObserver*)aCallback; CompleteTask( aTask, KErrLocked ); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/collectionhelper/src/mpxdeletehelper.cpp --- a/mmappcomponents/collectionhelper/src/mpxdeletehelper.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/collectionhelper/src/mpxdeletehelper.cpp Tue May 25 13:14:13 2010 +0300 @@ -43,8 +43,7 @@ #include #endif //RD_MPX_TNM_INTEGRATION // cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode -#include -#include +#include #include #include "mpxcollectionuihelperobserver.h" #include "mpxcollectionhelpercommon.h" @@ -310,32 +309,16 @@ { MPX_DEBUG3("CMPXDeleteHelper::RunL. [iMoreToDo %d] [iStatus %d]", iMoreToDo, iStatus.Int()); - // cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode - TUsbDeviceState deviceState = EUsbDeviceStateConfigured; - if ( !iUsbManConnected ) - { - ConnectUsbMan(); - } - - if ( iUsbManConnected ) + TInt mtpStatus = EMtpPSStatusUninitialized; + RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus); + + MPX_DEBUG2("CMPXCollectionViewHgImp::ConstructL, mtpstatus = %d", mtpStatus); + + if (mtpStatus != EMtpPSStatusUninitialized) { - if ( iUsbMan.GetDeviceState( deviceState ) != KErrNone ) - { - deviceState = EUsbDeviceStateConfigured; - } - } - - if ( deviceState == EUsbDeviceStateAddress || - deviceState == EUsbDeviceStateConfigured ) - { - TInt usbStatus; - RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus); - if ((usbStatus == KUsbPersonalityIdMTP) || (usbStatus == KUsbPersonalityIdPCSuiteMTP)) - { - MPX_DEBUG1("USB is active, Stop Delete"); - CompleteDelete( KErrLocked ); - return; - } + MPX_DEBUG1("MTP is active, Stop Delete"); + CompleteDelete( KErrLocked ); + return; } if (iMoreToDo && iStatus.Int() == KErrNone) diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp --- a/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/harvester/filehandler/src/mpxharvesterfilehandlerimp.cpp Tue May 25 13:14:13 2010 +0300 @@ -12,7 +12,7 @@ * Contributors: * * Description: Handles all file related activities -* Version : %version: da1mmcf#72.1.14.2.4.1.4.1.2.1.6 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: da1mmcf#72.1.14.2.4.1.4.1.2.1.7 % << Don't touch! Updated by Synergy at check-out. * */ @@ -46,8 +46,7 @@ #include #include #include -#include -#include +#include #include "mpxharvesterfilehandlerimp.h" #include "mpxfolderscanner.h" @@ -299,14 +298,16 @@ } iCollectionUtil = MMPXCollectionUtility::NewL( NULL, KMusicPlayerUid ); - // cenrep key need to be checked whether USB cable is connected in MTP/Combined Mode + // cenrep key need to be checked whether MTP is connected // to prevent refresh - TInt usbStatus; - RProperty::Get(KPSUidUsbWatcher, KUsbWatcherSelectedPersonality, usbStatus); - - if ((usbStatus == KUsbPersonalityIdMTP) || (usbStatus == KUsbPersonalityIdPCSuiteMTP)) + TInt mtpStatus = EMtpPSStatusUninitialized; + RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus); + + MPX_DEBUG2("CMPXCollectionViewHgImp::ConstructL, mtpstatus = %d", mtpStatus); + + if (mtpStatus != EMtpPSStatusUninitialized) { - MPX_DEBUG1("USB is active, Leave with KErrLocked"); + MPX_DEBUG1("MTP is active, Leave with KErrLocked"); // need to call back even if it leaves here iCollectionUtil->Collection().NotifyL( EMcMsgRefreshEnd, KErrLocked ); //User::Leave(KErrLocked); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp --- a/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/harvester/metadataextractor/src/mpxmetadataextractor.cpp Tue May 25 13:14:13 2010 +0300 @@ -12,7 +12,7 @@ * Contributors: * * Description: Extracts metadata from a file -* Version : %version: da1mmcf#38.1.4.2.6.1.12 % << Don't touch! Updated by Synergy at check-out. +* Version : %version: da1mmcf#38.1.4.2.6.1.13 % << Don't touch! Updated by Synergy at check-out. * */ @@ -147,6 +147,10 @@ delete iDrmMediaUtility; delete iTaskTimer; iFile.Close(); + if ( iMedia != NULL ) + { + delete iMedia; + } #ifdef RD_MPX_TNM_INTEGRATION delete iTNManager; if (iTNSyncWait && iTNSyncWait->IsStarted() ) @@ -212,6 +216,7 @@ } aNewProperty = iMedia; + iMedia = NULL; // ownership transferred. CleanUp(); } @@ -811,14 +816,16 @@ void CMPXMetadataExtractor::DoCreateMediaL() { MPX_FUNC("CMPXMetadataExtractor::DoCreateMediaL()"); + MPX_ASSERT( iMedia == NULL ); RArray contentIDs; + CleanupClosePushL( contentIDs ); contentIDs.AppendL( KMPXMediaIdGeneral ); contentIDs.AppendL( KMPXMediaIdAudio ); contentIDs.AppendL( KMPXMediaIdMusic ); contentIDs.AppendL( KMPXMediaIdDrm ); contentIDs.AppendL( KMPXMediaIdMTP ); iMedia = CMPXMedia::NewL( contentIDs.Array() ); - contentIDs.Close(); + CleanupStack::PopAndDestroy( &contentIDs ); // CMPXMedia default types iMedia->SetTObjectValueL( KMPXMediaGeneralType, @@ -1014,7 +1021,10 @@ { MPX_FUNC("CMPXMetadataExtractor::HandleTaskTimerExpired()"); - iTaskTimer->Cancel(); + if ( iTaskTimer && iTaskTimer->IsActive() ) + { + iTaskTimer->Cancel(); + } // execute task at index 0 MPX_TRAPD( error, ExecuteTaskL() ); if ( error || iCancelled ) @@ -1046,6 +1056,7 @@ if ( iObs && !iCancelled ) { iObs->HandleCreateMediaComplete( iMedia, error ); + iMedia = NULL; // ownership transferred. } CleanUp(); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/harvester/server/group/mpxharvester.mmp --- a/mmappcomponents/harvester/server/group/mpxharvester.mmp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/harvester/server/group/mpxharvester.mmp Tue May 25 13:14:13 2010 +0300 @@ -43,7 +43,7 @@ // System events SOURCE mpxfsformatmonitor.cpp SOURCE mpxmediaremovalmonitor.cpp -SOURCE mpxusbeventhandler.cpp +SOURCE mpxconnectioneventhandler.cpp USERINCLUDE ../inc USERINCLUDE ../../inc diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/harvester/server/inc/mpxconnectioneventhandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/harvester/server/inc/mpxconnectioneventhandler.h Tue May 25 13:14:13 2010 +0300 @@ -0,0 +1,133 @@ +/* +* Copyright (c) 2006 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: Monitors USB events +* +*/ + + +#ifndef CMPXCONNECTIONEVENTHANDLER_H +#define CMPXCONNECTIONEVENTHANDLER_H + +#include +#include +#include "mpxsystemeventobserver.h" + +class CMPXPSKeyWatcher; + +/** + * USB Monitoring class + * + * @lib mpxharvesterserver.exe + * @since S60 3.0 + */ +NONSHARABLE_CLASS( CMPXConnectionEventHandler ) : public CActive, + public MMPXPSKeyObserver + { +public: + + /** + * Two-phase constructor + * @param aObserver observer to the event handler + */ + static CMPXConnectionEventHandler* NewL( MMPXSystemEventObserver& aObserver ); + + /** + * Two-phase constructor + * @param aObserver observer to the event handler + */ + static CMPXConnectionEventHandler* NewLC( MMPXSystemEventObserver& aObserver ); + + /** + * Virtual destructor + */ + virtual ~CMPXConnectionEventHandler(); + +public: + + /** + * Polls for the current monitor status + * If an event is happening, it will callback the observer of the event + */ + void PollStatus(); + +protected: // From Base Class + + /** + * From CActive + */ + void RunL(); + void DoCancel(); + + /** + * From MMPXPSKeyObserver + */ + void HandlePSEvent( TUid aUid, TInt aKey ); + +private: // New Methods + + /** + * Handle the PS Key event + * @param aUid UID of the key + * @param aKey ID of the key + */ + void DoHandlePSEventL( TUid aUid, TInt aKey ); + + void DoMSStartEventL(); + void DoMTPStartEventL(); + void DoMTPNotActiveEventL(); + + /** + * Connect to usbman. + * If error, default iDeviceState to EUsbDeviceStateConfigured so this would not + * block usb event mode change. + */ + void ConnectUsbMan(); + +private: + + /** + * C++ constructor + */ + CMPXConnectionEventHandler( MMPXSystemEventObserver& aObserver ); + + /* + * Second phased constructor + */ + void ConstructL(); + +private: // data + + enum TMPXConnectionState + { + EMPXConnectionNone, + EMPXConnectionMassStorage, + EMPXConnectionMTPIdle, + EMPXConnectionMTPActive + }; + + CMPXPSKeyWatcher* iUSBKeyWatcher; // PS key watcher for USB PS key + CMPXPSKeyWatcher* iMTPKeyWatcher; // PS key watcher for MTP PS key + + /* + * Observer interface to callback to an observer + */ + MMPXSystemEventObserver& iObserver; + TInt iState; + + RUsb iUsbMan; + TUsbDeviceState iDeviceState; + TBool iUsbManConnected; + }; + +#endif // CMPXCONNECTIONEVENTHANDLER_H diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/harvester/server/inc/mpxharvesterengine.h --- a/mmappcomponents/harvester/server/inc/mpxharvesterengine.h Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/harvester/server/inc/mpxharvesterengine.h Tue May 25 13:14:13 2010 +0300 @@ -31,7 +31,7 @@ class CMPXHarvesterFileHandler; class CMPXFsFormatMonitor; class CMPXMediaRemovalMonitor; -class CMPXUsbEventHandler; +class CMPXConnectionEventHandler; class CMPXMedia; class CMPXActiveTaskQueue; class CMPXPlaylistEngine; @@ -304,7 +304,7 @@ // Move to RPointerArrays of monitors in the future CMPXFsFormatMonitor* iFormatMonitor; CMPXMediaRemovalMonitor* iMediaRemovalMonitor; - CMPXUsbEventHandler* iUSBMonitor; + CMPXConnectionEventHandler* iConnectionMonitor; // Internal task queue for async operations CMPXActiveTaskQueue* iTaskQueue; diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/harvester/server/src/mpxconnectioneventhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mmappcomponents/harvester/server/src/mpxconnectioneventhandler.cpp Tue May 25 13:14:13 2010 +0300 @@ -0,0 +1,315 @@ +/* +* Copyright (c) 2006 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: Monitors for USB events +* +*/ + + +#include +#include +#include +#ifdef RD_MULTIPLE_DRIVE +#include +#endif //RD_MULTIPLE_DRIVE +#include +#include +#include +#include +#include +#include +#include "mpxconnectioneventhandler.h" + +// CONSTANTS +const TUint KUsbAllStates = 0xFFFFFFFF; + +// --------------------------------------------------------------------------- +// Default Constructor +// --------------------------------------------------------------------------- +// +CMPXConnectionEventHandler::CMPXConnectionEventHandler( MMPXSystemEventObserver& aObserver ) : + CActive( EPriorityStandard ), + iObserver( aObserver ), + iState ( EMPXConnectionNone ), + iUsbManConnected( EFalse ) + + + { + CActiveScheduler::Add( this ); + } + + +// --------------------------------------------------------------------------- +// 2nd Phase Constructor +// --------------------------------------------------------------------------- +// +void CMPXConnectionEventHandler::ConstructL() + { + MPX_DEBUG1(_L("CMPXConnectionEventHandler::ConstructL <---")); + iUSBKeyWatcher = CMPXPSKeyWatcher::NewL( KPSUidUsbWatcher, + KUsbWatcherSelectedPersonality, + this ); + + //for checking MTP status key whether a client has started + iMTPKeyWatcher = CMPXPSKeyWatcher::NewL( KMtpPSUid, + KMtpPSStatus, + this ); + + // Connect to usbman + ConnectUsbMan(); + MPX_DEBUG1(_L("CMPXConnectionEventHandler::ConstructL --->")); + } + + +// --------------------------------------------------------------------------- +// Two Phased Constructor +// --------------------------------------------------------------------------- +// +CMPXConnectionEventHandler* CMPXConnectionEventHandler::NewL + ( MMPXSystemEventObserver& aObserver ) + { + CMPXConnectionEventHandler* self = CMPXConnectionEventHandler::NewLC( aObserver ); + CleanupStack::Pop( self ); + return self; + } + + +// --------------------------------------------------------------------------- +// Two Phased Constructor +// --------------------------------------------------------------------------- +// +CMPXConnectionEventHandler* CMPXConnectionEventHandler::NewLC + ( MMPXSystemEventObserver& aObserver ) + + { + CMPXConnectionEventHandler* self = new( ELeave ) CMPXConnectionEventHandler( aObserver); + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CMPXConnectionEventHandler::~CMPXConnectionEventHandler() + { + Cancel(); + if ( iUsbManConnected ) + { + iUsbMan.Close(); + } + delete iUSBKeyWatcher; + delete iMTPKeyWatcher; + } + +// --------------------------------------------------------------------------- +// Poll for any ongoing USB / MTP event +// --------------------------------------------------------------------------- +// +void CMPXConnectionEventHandler::PollStatus() + { + // only call back on connection state != EMPXConnectionNone + if (iState == EMPXConnectionMassStorage) + { + TRAP_IGNORE( DoMSStartEventL() ); + } + else if (iState == EMPXConnectionMTPActive) + { + TRAP_IGNORE( DoMTPStartEventL() ); + } + else if (iState == EMPXConnectionMTPIdle) + { + TRAP_IGNORE( DoMTPNotActiveEventL() ); + } + } + +// --------------------------------------------------------------------------- +// Handle the PS key event +// --------------------------------------------------------------------------- +// +void CMPXConnectionEventHandler::HandlePSEvent( TUid aUid, TInt aKey ) + { + TRAP_IGNORE( DoHandlePSEventL(aUid,aKey) ); + } + +// --------------------------------------------------------------------------- +// Handle the PS key event +// --------------------------------------------------------------------------- +// +void CMPXConnectionEventHandler::DoHandlePSEventL( TUid /*aUid*/, TInt /*aKey*/ ) + { + MPX_FUNC("CMPXConnectionEventHandler::DoHandlePSEvent()"); + if ( !iUsbManConnected ) + { + ConnectUsbMan(); + } + + // Handle the Key event + TInt usbStatus; + iUSBKeyWatcher->GetValue( usbStatus ); + + TInt mtpStatus; + iMTPKeyWatcher->GetValue(mtpStatus); + + MPX_DEBUG3("CMPXConnectionEventHandler::DoHandlePSEventL, usbStatus = %d, mtpStatus = %d", usbStatus, mtpStatus); + MPX_DEBUG2("CMPXConnectionEventHandler::DoHandlePSEventL, iState = %d", iState); + MPX_DEBUG4("CMPXConnectionEventHandler::DoHandlePSEventL, iDeviceState = %d, EUsbDeviceStateAddress(%d), EUsbDeviceStateConfigured(%d)", iDeviceState, EUsbDeviceStateAddress, EUsbDeviceStateConfigured); + + RDebug::Print(_L("tpoon: CMPXConnectionEventHandler::DoHandlePSEventL, usbStatus = %d, mtpStatus = %d"), usbStatus, mtpStatus); + RDebug::Print(_L("tpoon: CMPXConnectionEventHandler::DoHandlePSEventL, iState = %d"), iState); + RDebug::Print(_L("tpoon: CMPXConnectionEventHandler::DoHandlePSEventL, iDeviceState = %d, EUsbDeviceStateAddress(%d), EUsbDeviceStateConfigured(%d)"), iDeviceState, EUsbDeviceStateAddress, EUsbDeviceStateConfigured); + + // events from lower level is not causing multiple callback on the same type + // usb is really only connected if went through Address or Configured state + if( (usbStatus == KUsbPersonalityIdMS) && (iDeviceState == EUsbDeviceStateAddress || iDeviceState == EUsbDeviceStateConfigured)) + { + if ((iState == EMPXConnectionMTPIdle) || (iState == EMPXConnectionMTPActive)) + { + MPX_DEBUG1("CMPXConnectionEventHandler::DoHandlePSEvent - MTP End"); + RDebug::Print(_L("tpoon: MTP End")); + iObserver.HandleSystemEventL( EUSBMTPEndEvent, -1 ); + iState = EMPXConnectionNone; + } + + if (iState != EMPXConnectionMassStorage) + { + DoMSStartEventL(); + } + } + else if (iState == EMPXConnectionMassStorage) + { + if (usbStatus != KUsbPersonalityIdMS) + { + MPX_DEBUG1("CMPXConnectionEventHandler::DoHandlePSEvent - USB MassStorage End"); + RDebug::Print(_L("tpoon: MS End")); + iObserver.HandleSystemEventL( EUSBMassStorageEndEvent, -1 ); + iState = EMPXConnectionNone; + } + } + + // after MassStorage End, it is possible that MTP is still connected + if (iState != EMPXConnectionMassStorage) + { + if ((mtpStatus == EMtpPSStatusUninitialized) && (iState != EMPXConnectionNone)) + { + MPX_DEBUG1("CMPXConnectionEventHandler::DoHandlePSEvent - MTP End"); + RDebug::Print(_L("tpoon: MTP End")); + iObserver.HandleSystemEventL( EUSBMTPEndEvent, -1 ); + iState = EMPXConnectionNone; + } + else if ((mtpStatus == EMtpPSStatusActive) && (iState != EMPXConnectionMTPActive) + && ((usbStatus == KUsbPersonalityIdMTP) || (usbStatus == KUsbPersonalityIdPCSuiteMTP))) // only trigger MusicPlayer fully block and RAM Drive if USB MTP/PCSuiteMTP is connected + { + DoMTPStartEventL(); + } + else if ((mtpStatus == EMtpPSStatusReadyToSync) && (iState != EMPXConnectionMTPIdle) && (iState != EMPXConnectionMTPActive)) + { + DoMTPNotActiveEventL(); + } + } + } + +void CMPXConnectionEventHandler::DoMSStartEventL() + { + MPX_DEBUG1("CMPXConnectionEventHandler::DoMSStartEventL - USB MassStorage Start"); + RDebug::Print(_L("tpoon: MS Start")); + iObserver.HandleSystemEventL( EUSBMassStorageStartEvent, -1 ); + iState = EMPXConnectionMassStorage; + } + +void CMPXConnectionEventHandler::DoMTPStartEventL() + { + MPX_DEBUG1("CMPXConnectionEventHandler::DoMTPStartEventL - MTP Start"); + RDebug::Print(_L("tpoon: MTP Start")); + iObserver.HandleSystemEventL( EUSBMTPStartEvent, -1 ); + iState = EMPXConnectionMTPActive; + } + +void CMPXConnectionEventHandler::DoMTPNotActiveEventL() + { + MPX_DEBUG1("CMPXConnectionEventHandler::DoMTPNotActiveEventL - MTP Not Active"); + RDebug::Print(_L("tpoon: MTP Not Active")); + iObserver.HandleSystemEventL( EUSBMTPNotActiveEvent, -1 ); + iState = EMPXConnectionMTPIdle; + } + +// --------------------------------------------------------------------------- +// CMPXConnectionEventHandler::RunL +// --------------------------------------------------------------------------- +// +void CMPXConnectionEventHandler::RunL() + { + MPX_FUNC("CMPXConnectionEventHandler::RunL()"); + TInt status( iStatus.Int() ); + + MPX_DEBUG2("CMPXConnectionEventHandler::RunL status=%d", status ); + if ( status != KErrCancel && status != KErrServerTerminated ) + { + iUsbMan.DeviceStateNotification( KUsbAllStates, iDeviceState, iStatus ); + SetActive(); + } + + if ( status == KErrNone ) + { + MPX_DEBUG2("CMPXConnectionEventHandler::RunL - DeviceState = %d", iDeviceState); + HandlePSEvent( TUid::Uid(0), 0 ); + } + } + +// --------------------------------------------------------------------------- +// CMPXConnectionEventHandler::DoCancel +// --------------------------------------------------------------------------- +// +void CMPXConnectionEventHandler::DoCancel() + { + MPX_FUNC("CMPXConnectionEventHandler::DoCancel()"); + if ( iUsbManConnected ) + { + iUsbMan.DeviceStateNotificationCancel(); + } + } + +// --------------------------------------------------------------------------- +// CMPXConnectionEventHandler::ConnectUsbMan +// If error, default iDeviceState to EUsbDeviceStateConfigured so this would not +// block usb event mode change. +// --------------------------------------------------------------------------- +void CMPXConnectionEventHandler::ConnectUsbMan() + { + MPX_FUNC("CMPXConnectionEventHandler::ConnectUsbMan()"); + if ( iUsbMan.Connect() == KErrNone ) + { + iUsbManConnected = ETrue; + // get device state + TInt err = iUsbMan.GetDeviceState( iDeviceState ); + if ( err ) + { + iDeviceState = EUsbDeviceStateUndefined; + } + + // start active object + if ( !IsActive() ) + { + iUsbMan.DeviceStateNotification( KUsbAllStates, iDeviceState, iStatus ); + SetActive(); + } + } + else + { + iDeviceState = EUsbDeviceStateConfigured; + } + } +// END OF FILE + diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/harvester/server/src/mpxharvesterengine.cpp --- a/mmappcomponents/harvester/server/src/mpxharvesterengine.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/harvester/server/src/mpxharvesterengine.cpp Tue May 25 13:14:13 2010 +0300 @@ -35,7 +35,7 @@ #include "mpxharvesterengine.h" #include "mpxfsformatmonitor.h" #include "mpxmediaremovalmonitor.h" -#include "mpxusbeventhandler.h" +#include "mpxconnectioneventhandler.h" #include "mpxharvesterfilehandler.h" #include "mpxharvesterengineobserver.h" #include "mpxhvsmsg.h" @@ -60,7 +60,7 @@ delete iFormatMonitor; delete iMediaRemovalMonitor; - delete iUSBMonitor; + delete iConnectionMonitor; delete iFileHandler; iFsSession.Close(); @@ -101,8 +101,8 @@ iMediaRemovalMonitor = CMPXMediaRemovalMonitor::NewL( removableDrive, iFsSession, *this ); - // USB Event monitor - iUSBMonitor = CMPXUsbEventHandler::NewL( *this ); + // Connection Event monitor + iConnectionMonitor = CMPXConnectionEventHandler::NewL( *this ); // File handler to handle file related events @@ -426,7 +426,7 @@ // wont be able to open the db anyways. // iFormatMonitor->PollStatus(); - iUSBMonitor->PollStatus(); + iConnectionMonitor->PollStatus(); } // --------------------------------------------------------------------------- diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp --- a/mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/harvester/server/src/mpxusbeventhandler.cpp Tue May 25 13:14:13 2010 +0300 @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include "mpxusbeventhandler.h" diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpaccesssingleton.h --- a/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpaccesssingleton.h Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/inc/cmmmtpdpaccesssingleton.h Tue May 25 13:14:13 2010 +0300 @@ -53,6 +53,18 @@ */ IMPORT_C static void CloseSessionL(); + /** + * Issue ActiveToIdle Status Change (ActiveObject) + * this function is to be called after an MTP operation is finish to change status from Active to Idle + * observer of the status might not get the notification if idle->active->idle happens in one synchronous operation + */ + IMPORT_C static void ActiveToIdleStatusChange(); + + /** + * Cancel Outstanding ActiveToIdle Status Change + */ + IMPORT_C static void CancelActiveToIdleStatusChange(); + private: /* * get singleton instance, for internal use @@ -73,8 +85,20 @@ */ ~CMmMtpDpAccessSingleton(); + /** + * get DelayStatusChanger instance, internal use only + */ + static CIdle* DelayStatusChanger(); + + /** + * Perform actural ActiveToIdle Status Change after active object callback + */ + static TInt DoActiveToIdleStatusChange(TAny* Any); + private: CMmMtpDpMetadataAccessWrapper* iWrapper; + + CIdle* iDelayStatusChanger; }; diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/inc/mmmtpdp_variant.hrh --- a/mmappcomponents/mmmtpdataprovider/inc/mmmtpdp_variant.hrh Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/inc/mmmtpdp_variant.hrh Tue May 25 13:14:13 2010 +0300 @@ -28,4 +28,7 @@ // flag to enable support for non embedded album art, should be ON by default #define MMMTPDP_ABSTRACTAUDIOALBUM_SUPPORT +// flag to enable reset of MTP PS Status flag at CloseSession +#define MMMTPDP_RESET_STATUS_CLOSESESSION + #endif // MMMTPDP_VARIANT_HRH diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/inc/mmmtpdputility.h --- a/mmappcomponents/mmmtpdataprovider/inc/mmmtpdputility.h Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/inc/mmmtpdputility.h Tue May 25 13:14:13 2010 +0300 @@ -20,6 +20,7 @@ #define MMMTPDPUTILITY_H #include +#include #include "mmmtpdpfiledefs.h" @@ -143,6 +144,34 @@ * @return return DRM status code */ IMPORT_C static TInt GetDrmStatus( const TDesC& aFullFileName ); + + /** + * Set MTP PS Status + * @param aStatus, next TMtpPSStatus + * + * newly implemented function to as enabler + * to provide more state transition on application (MusicPlayer/MPX) during MTP by fully utilize the 3 PSStatus: + * + * EMtpPSStatusActive, == MTP operation related Media Files is performaning + * EMtpPSStatusUninitialized == MTP not in use + * EMtpPSStatusReadyToSync == MTP is connected, but no active operation related to Media Files + * + * this CAN enable 2 new behaviors: + * 1. MTP status monitor is extracted out from USB Event Observer in harvester + * Harvester and Music player should be fully blocked if PS Status is EMtpPSStatusActive + * Music Player would prevent refresh/delete/add on UI level if PS Status is EMtpPSStatusReadyToSync + * 2. collectioncachedhelper to observed this status. + * when the ps status changed from EMtpPSStatusActive to EMtpPSStatusReadyToSync, it starts timer. + * and when it is reached, it flush all cache. + * the timer is canceled when ps status is back to active. + */ + IMPORT_C static void SetPSStatus( TMtpPSStatus aStatus ); + + /** + * Set MTP PS Status (actually) + * @param aStatus, next TMtpPSStatus + */ + static void DoSetPSStatus( TMtpPSStatus aStatus ); }; diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/bwins/mmmtpdprequestprocessoru.def Tue May 25 13:14:13 2010 +0300 @@ -157,4 +157,7 @@ ??1CGetObjectPropList@@UAE@XZ @ 156 NONAME ; CGetObjectPropList::~CGetObjectPropList(void) ?ServiceL@CGetObjectPropList@@MAEXXZ @ 157 NONAME ; void CGetObjectPropList::ServiceL(void) ??0CRenameObject@@IAE@AAVMMTPDataProviderFramework@@AAVCMmMtpDpMetadataAccessWrapper@@@Z @ 158 NONAME ; CRenameObject::CRenameObject(class MMTPDataProviderFramework &, class CMmMtpDpMetadataAccessWrapper &) + ?ActiveToIdleStatusChange@CMmMtpDpAccessSingleton@@SAXXZ @ 159 NONAME ; void CMmMtpDpAccessSingleton::ActiveToIdleStatusChange(void) + ?SetPSStatus@MmMtpDpUtility@@SAXW4TMtpPSStatus@@@Z @ 160 NONAME ; void MmMtpDpUtility::SetPSStatus(enum TMtpPSStatus) + ?CancelActiveToIdleStatusChange@CMmMtpDpAccessSingleton@@SAXXZ @ 161 NONAME ; void CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange(void) diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/eabi/mmmtpdprequestprocessoru.def Tue May 25 13:14:13 2010 +0300 @@ -47,233 +47,236 @@ _ZN14CGetObjectInfoD0Ev @ 46 NONAME _ZN14CGetObjectInfoD1Ev @ 47 NONAME _ZN14CGetObjectInfoD2Ev @ 48 NONAME - _ZN14MmMtpDpUtility12GetDrmStatusERK7TDesC16 @ 49 NONAME - _ZN14MmMtpDpUtility18FormatFromFilenameERK7TDesC16 @ 50 NONAME - _ZN15CRequestUnknown4NewLER25MMTPDataProviderFrameworkR14MMTPConnection @ 51 NONAME - _ZN15CRequestUnknown8ServiceLEv @ 52 NONAME - _ZN15CRequestUnknownC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 53 NONAME - _ZN15CRequestUnknownC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 54 NONAME - _ZN15CRequestUnknownD0Ev @ 55 NONAME - _ZN15CRequestUnknownD1Ev @ 56 NONAME - _ZN15CRequestUnknownD2Ev @ 57 NONAME - _ZN17CGetPartialObject13CheckRequestLEv @ 58 NONAME - _ZN17CGetPartialObject22DoHandleResponsePhaseLEv @ 59 NONAME - _ZN17CGetPartialObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 60 NONAME - _ZN17CGetPartialObject8ServiceLEv @ 61 NONAME - _ZN17CGetPartialObjectC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 62 NONAME - _ZN17CGetPartialObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 63 NONAME - _ZN17CGetPartialObjectD0Ev @ 64 NONAME - _ZN17CGetPartialObjectD1Ev @ 65 NONAME - _ZN17CGetPartialObjectD2Ev @ 66 NONAME - _ZN17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 67 NONAME - _ZN17CRequestProcessor12ReceiveDataLER8MMTPType @ 68 NONAME - _ZN17CRequestProcessor13CheckRequestLEv @ 69 NONAME - _ZN17CRequestProcessor13SendResponseLE16TMTPResponseCodeiPm @ 70 NONAME - _ZN17CRequestProcessor13UsbDisconnectEv @ 71 NONAME - _ZN17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 72 NONAME - _ZN17CRequestProcessor18DoHandleRToIPhaseLEv @ 73 NONAME - _ZN17CRequestProcessor21DoHandleRequestPhaseLEv @ 74 NONAME - _ZN17CRequestProcessor22DoHandleDataIToRPhaseLEv @ 75 NONAME - _ZN17CRequestProcessor22DoHandleResponsePhaseLEv @ 76 NONAME - _ZN17CRequestProcessor24DoHandleCompletingPhaseLEv @ 77 NONAME - _ZN17CRequestProcessor4RunLEv @ 78 NONAME - _ZN17CRequestProcessor7ReleaseEv @ 79 NONAME - _ZN17CRequestProcessor8DoCancelEv @ 80 NONAME - _ZN17CRequestProcessor8RunErrorEi @ 81 NONAME - _ZN17CRequestProcessor9SendDataLERK8MMTPType @ 82 NONAME - _ZN17CRequestProcessor9SessionIdEv @ 83 NONAME - _ZN17CRequestProcessorC2ER25MMTPDataProviderFrameworkR14MMTPConnectioniPK22TMTPRequestElementInfo @ 84 NONAME - _ZN17CRequestProcessorD0Ev @ 85 NONAME - _ZN17CRequestProcessorD1Ev @ 86 NONAME - _ZN17CRequestProcessorD2Ev @ 87 NONAME - _ZN18CGetObjectPropDesc10ConstructLEv @ 88 NONAME - _ZN18CGetObjectPropDesc13CheckRequestLEv @ 89 NONAME - _ZN18CGetObjectPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 90 NONAME - _ZN18CGetObjectPropDesc8ServiceLEv @ 91 NONAME - _ZN18CGetObjectPropDescC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 92 NONAME - _ZN18CGetObjectPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 93 NONAME - _ZN18CGetObjectPropDescD0Ev @ 94 NONAME - _ZN18CGetObjectPropDescD1Ev @ 95 NONAME - _ZN18CGetObjectPropDescD2Ev @ 96 NONAME - _ZN18CGetObjectPropList10ConstructLEv @ 97 NONAME - _ZN18CGetObjectPropList13CheckRequestLEv @ 98 NONAME - _ZN18CGetObjectPropList4RunLEv @ 99 NONAME - _ZN18CGetObjectPropList8DoCancelEv @ 100 NONAME - _ZN18CGetObjectPropList8RunErrorEi @ 101 NONAME - _ZN18CGetObjectPropList8ServiceLEv @ 102 NONAME - _ZN18CGetObjectPropListC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 103 NONAME - _ZN18CGetObjectPropListD0Ev @ 104 NONAME - _ZN18CGetObjectPropListD1Ev @ 105 NONAME - _ZN18CGetObjectPropListD2Ev @ 106 NONAME - _ZN18CSetObjectPropList13CheckRequestLEv @ 107 NONAME - _ZN18CSetObjectPropList22DoHandleResponsePhaseLEv @ 108 NONAME - _ZN18CSetObjectPropList4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 109 NONAME - _ZN18CSetObjectPropList4RunLEv @ 110 NONAME - _ZN18CSetObjectPropList8DoCancelEv @ 111 NONAME - _ZN18CSetObjectPropList8RunErrorEi @ 112 NONAME - _ZN18CSetObjectPropList8ServiceLEv @ 113 NONAME - _ZN18CSetObjectPropListD0Ev @ 114 NONAME - _ZN18CSetObjectPropListD1Ev @ 115 NONAME - _ZN18CSetObjectPropListD2Ev @ 116 NONAME - _ZN19CDescriptionUtility24NewRangeFormDescriptionLEtmmmi @ 117 NONAME - _ZN19CDescriptionUtilityC2Ev @ 118 NONAME - _ZN19CDescriptionUtilityD0Ev @ 119 NONAME - _ZN19CDescriptionUtilityD1Ev @ 120 NONAME - _ZN19CDescriptionUtilityD2Ev @ 121 NONAME - _ZN19CGetObjectPropValue13CheckRequestLEv @ 122 NONAME - _ZN19CGetObjectPropValue27ServiceMetaDataFromWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 123 NONAME - _ZN19CGetObjectPropValue8ServiceLEv @ 124 NONAME - _ZN19CGetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 125 NONAME - _ZN19CGetObjectPropValueD0Ev @ 126 NONAME - _ZN19CGetObjectPropValueD1Ev @ 127 NONAME - _ZN19CGetObjectPropValueD2Ev @ 128 NONAME - _ZN19CSetObjectPropValue13CheckRequestLEv @ 129 NONAME - _ZN19CSetObjectPropValue22DoHandleResponsePhaseLEv @ 130 NONAME - _ZN19CSetObjectPropValue25ServiceMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 131 NONAME - _ZN19CSetObjectPropValue8ServiceLEv @ 132 NONAME - _ZN19CSetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 133 NONAME - _ZN19CSetObjectPropValueD0Ev @ 134 NONAME - _ZN19CSetObjectPropValueD1Ev @ 135 NONAME - _ZN19CSetObjectPropValueD2Ev @ 136 NONAME - _ZN20CGetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 137 NONAME - _ZN20CGetObjectReferencesD0Ev @ 138 NONAME - _ZN20CGetObjectReferencesD1Ev @ 139 NONAME - _ZN20CGetObjectReferencesD2Ev @ 140 NONAME - _ZN20CSetObjectReferences22DoHandleResponsePhaseLEv @ 141 NONAME - _ZN20CSetObjectReferences22DoSetObjectReferencesLERK18CMTPObjectMetaData @ 142 NONAME - _ZN20CSetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 143 NONAME - _ZN20CSetObjectReferences8ServiceLEv @ 144 NONAME - _ZN20CSetObjectReferencesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 145 NONAME - _ZN20CSetObjectReferencesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 146 NONAME - _ZN20CSetObjectReferencesD0Ev @ 147 NONAME - _ZN20CSetObjectReferencesD1Ev @ 148 NONAME - _ZN20CSetObjectReferencesD2Ev @ 149 NONAME - _ZN22CGetFormatCapabilities10ConstructLEv @ 150 NONAME - _ZN22CGetFormatCapabilities13CheckRequestLEv @ 151 NONAME - _ZN22CGetFormatCapabilities4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 152 NONAME - _ZN22CGetFormatCapabilities8ServiceLEv @ 153 NONAME - _ZN22CGetFormatCapabilitiesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 154 NONAME - _ZN22CGetFormatCapabilitiesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 155 NONAME - _ZN22CGetFormatCapabilitiesD0Ev @ 156 NONAME - _ZN22CGetFormatCapabilitiesD1Ev @ 157 NONAME - _ZN22CGetFormatCapabilitiesD2Ev @ 158 NONAME - _ZN23CMmMtpDpAccessSingleton12OpenSessionLEv @ 159 NONAME - _ZN23CMmMtpDpAccessSingleton13CloseSessionLEv @ 160 NONAME - _ZN23CMmMtpDpAccessSingleton17GetAccessWrapperLEv @ 161 NONAME - _ZN23CMmMtpDpAccessSingleton7CreateLER25MMTPDataProviderFramework @ 162 NONAME - _ZN23CMmMtpDpAccessSingleton7ReleaseEv @ 163 NONAME - _ZN23CPropertySettingUtility20SetMetaDataToWrapperER14MMmMtpDpConfigtR8MMTPTypeRK18CMTPObjectMetaData @ 164 NONAME - _ZN23CPropertySettingUtilityC2Ev @ 165 NONAME - _ZN23CPropertySettingUtilityD0Ev @ 166 NONAME - _ZN23CPropertySettingUtilityD1Ev @ 167 NONAME - _ZN23CPropertySettingUtilityD2Ev @ 168 NONAME - _ZN24CGetObjectPropsSupported4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 169 NONAME - _ZN24CGetObjectPropsSupported8ServiceLEv @ 170 NONAME - _ZN24CGetObjectPropsSupportedD0Ev @ 171 NONAME - _ZN24CGetObjectPropsSupportedD1Ev @ 172 NONAME - _ZN24CGetObjectPropsSupportedD2Ev @ 173 NONAME - _ZN26CGetInterdependentPropDesc10ConstructLEv @ 174 NONAME - _ZN26CGetInterdependentPropDesc13CheckRequestLEv @ 175 NONAME - _ZN26CGetInterdependentPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 176 NONAME - _ZN26CGetInterdependentPropDesc8ServiceLEv @ 177 NONAME - _ZN26CGetInterdependentPropDescC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 178 NONAME - _ZN26CGetInterdependentPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 179 NONAME - _ZN26CGetInterdependentPropDescD0Ev @ 180 NONAME - _ZN26CGetInterdependentPropDescD1Ev @ 181 NONAME - _ZN26CGetInterdependentPropDescD2Ev @ 182 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper10AddObjectLERK18CMTPObjectMetaData @ 183 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper13AddDummyFileLERK7TDesC16 @ 184 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper13DeleteObjectLERK18CMTPObjectMetaData @ 185 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper13RenameObjectLERK18CMTPObjectMetaDataRK7TDesC16 @ 186 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper13SetReferenceLERK18CMTPObjectMetaDataR12CDesC16Array @ 187 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper15CreateDummyFileERK7TDesC16 @ 188 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper15DeleteDummyFileERK7TDesC16 @ 189 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper16CleanupDatabaseLEv @ 190 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper16GetAllReferenceLEP9CMPXMediaR12CDesC16Array @ 191 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper19GetModifiedContentLERK7TDesC16RiR12CDesC16Array @ 192 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper20GetAllAbstractMediaLERK7TDesC16PP14CMPXMediaArray19TMPXGeneralCategory @ 193 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper21GetAbstractMediaNameLEP9CMPXMedia19TMPXGeneralCategory @ 194 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper22UpdateMusicCollectionLERK7TDesC16 @ 195 NONAME - _ZN29CMmMtpDpMetadataAccessWrapper23GetObjectMetadataValueLEtR8MMTPTypeRK18CMTPObjectMetaData @ 196 NONAME - _ZNK11CSendObject12HasDataphaseEv @ 197 NONAME - _ZNK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 198 NONAME - _ZNK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 199 NONAME - _ZNK17CRequestProcessor10ConnectionEv @ 200 NONAME - _ZNK17CRequestProcessor12HasDataphaseEv @ 201 NONAME - _ZNK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 202 NONAME - _ZNK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 203 NONAME - _ZNK17CRequestProcessor7RequestEv @ 204 NONAME - _ZNK18CSetObjectPropList12HasDataphaseEv @ 205 NONAME - _ZNK19CSetObjectPropValue12HasDataphaseEv @ 206 NONAME - _ZNK20CSetObjectReferences12HasDataphaseEv @ 207 NONAME - _ZTI10CGetObject @ 208 NONAME - _ZTI11CCopyObject @ 209 NONAME - _ZTI11CMoveObject @ 210 NONAME - _ZTI11CSendObject @ 211 NONAME - _ZTI13CDeleteObject @ 212 NONAME - _ZTI13CRenameObject @ 213 NONAME - _ZTI14CGetObjectInfo @ 214 NONAME - _ZTI15CRequestChecker @ 215 NONAME - _ZTI15CRequestUnknown @ 216 NONAME - _ZTI15TMTPTypeFlatBuf @ 217 NONAME - _ZTI17CGetPartialObject @ 218 NONAME - _ZTI17CRequestProcessor @ 219 NONAME - _ZTI18CGetObjectPropDesc @ 220 NONAME - _ZTI18CGetObjectPropList @ 221 NONAME - _ZTI18CHXMetaDataUtility @ 222 NONAME - _ZTI18CSetObjectPropList @ 223 NONAME - _ZTI19CDescriptionUtility @ 224 NONAME - _ZTI19CGetObjectPropValue @ 225 NONAME - _ZTI19CSetObjectPropValue @ 226 NONAME - _ZTI20CGetObjectReferences @ 227 NONAME - _ZTI20CSetObjectReferences @ 228 NONAME - _ZTI22CGetFormatCapabilities @ 229 NONAME - _ZTI23CMmMtpDpAccessSingleton @ 230 NONAME - _ZTI23CPropertySettingUtility @ 231 NONAME - _ZTI24CGetObjectPropsSupported @ 232 NONAME - _ZTI25CMmMtpDpMetadataMpxAccess @ 233 NONAME - _ZTI26CGetInterdependentPropDesc @ 234 NONAME - _ZTI27CMmMtpDpMetadataVideoAccess @ 235 NONAME - _ZTI29CMmMtpDpMetadataAccessWrapper @ 236 NONAME - _ZTV10CGetObject @ 237 NONAME - _ZTV11CCopyObject @ 238 NONAME - _ZTV11CMoveObject @ 239 NONAME - _ZTV11CSendObject @ 240 NONAME - _ZTV13CDeleteObject @ 241 NONAME - _ZTV13CRenameObject @ 242 NONAME - _ZTV14CGetObjectInfo @ 243 NONAME - _ZTV15CRequestChecker @ 244 NONAME - _ZTV15CRequestUnknown @ 245 NONAME - _ZTV15TMTPTypeFlatBuf @ 246 NONAME - _ZTV17CGetPartialObject @ 247 NONAME - _ZTV17CRequestProcessor @ 248 NONAME - _ZTV18CGetObjectPropDesc @ 249 NONAME - _ZTV18CGetObjectPropList @ 250 NONAME - _ZTV18CHXMetaDataUtility @ 251 NONAME - _ZTV18CSetObjectPropList @ 252 NONAME - _ZTV19CDescriptionUtility @ 253 NONAME - _ZTV19CGetObjectPropValue @ 254 NONAME - _ZTV19CSetObjectPropValue @ 255 NONAME - _ZTV20CGetObjectReferences @ 256 NONAME - _ZTV20CSetObjectReferences @ 257 NONAME - _ZTV22CGetFormatCapabilities @ 258 NONAME - _ZTV23CMmMtpDpAccessSingleton @ 259 NONAME - _ZTV23CPropertySettingUtility @ 260 NONAME - _ZTV24CGetObjectPropsSupported @ 261 NONAME - _ZTV25CMmMtpDpMetadataMpxAccess @ 262 NONAME - _ZTV26CGetInterdependentPropDesc @ 263 NONAME - _ZTV27CMmMtpDpMetadataVideoAccess @ 264 NONAME - _ZTV29CMmMtpDpMetadataAccessWrapper @ 265 NONAME - _ZThn28_N11CSendObject13UsbDisconnectEv @ 266 NONAME - _ZThn28_N17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 267 NONAME - _ZThn28_N17CRequestProcessor13UsbDisconnectEv @ 268 NONAME - _ZThn28_N17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 269 NONAME - _ZThn28_N17CRequestProcessor7ReleaseEv @ 270 NONAME - _ZThn28_N17CRequestProcessor9SessionIdEv @ 271 NONAME - _ZThn28_NK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 272 NONAME - _ZThn28_NK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 273 NONAME - _ZThn28_NK17CRequestProcessor10ConnectionEv @ 274 NONAME - _ZThn28_NK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 275 NONAME - _ZThn28_NK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 276 NONAME - _ZThn28_NK17CRequestProcessor7RequestEv @ 277 NONAME + _ZN14MmMtpDpUtility11SetPSStatusE12TMtpPSStatus @ 49 NONAME + _ZN14MmMtpDpUtility12GetDrmStatusERK7TDesC16 @ 50 NONAME + _ZN14MmMtpDpUtility18FormatFromFilenameERK7TDesC16 @ 51 NONAME + _ZN15CRequestUnknown4NewLER25MMTPDataProviderFrameworkR14MMTPConnection @ 52 NONAME + _ZN15CRequestUnknown8ServiceLEv @ 53 NONAME + _ZN15CRequestUnknownC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 54 NONAME + _ZN15CRequestUnknownC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 55 NONAME + _ZN15CRequestUnknownD0Ev @ 56 NONAME + _ZN15CRequestUnknownD1Ev @ 57 NONAME + _ZN15CRequestUnknownD2Ev @ 58 NONAME + _ZN17CGetPartialObject13CheckRequestLEv @ 59 NONAME + _ZN17CGetPartialObject22DoHandleResponsePhaseLEv @ 60 NONAME + _ZN17CGetPartialObject4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 61 NONAME + _ZN17CGetPartialObject8ServiceLEv @ 62 NONAME + _ZN17CGetPartialObjectC1ER25MMTPDataProviderFrameworkR14MMTPConnection @ 63 NONAME + _ZN17CGetPartialObjectC2ER25MMTPDataProviderFrameworkR14MMTPConnection @ 64 NONAME + _ZN17CGetPartialObjectD0Ev @ 65 NONAME + _ZN17CGetPartialObjectD1Ev @ 66 NONAME + _ZN17CGetPartialObjectD2Ev @ 67 NONAME + _ZN17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 68 NONAME + _ZN17CRequestProcessor12ReceiveDataLER8MMTPType @ 69 NONAME + _ZN17CRequestProcessor13CheckRequestLEv @ 70 NONAME + _ZN17CRequestProcessor13SendResponseLE16TMTPResponseCodeiPm @ 71 NONAME + _ZN17CRequestProcessor13UsbDisconnectEv @ 72 NONAME + _ZN17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 73 NONAME + _ZN17CRequestProcessor18DoHandleRToIPhaseLEv @ 74 NONAME + _ZN17CRequestProcessor21DoHandleRequestPhaseLEv @ 75 NONAME + _ZN17CRequestProcessor22DoHandleDataIToRPhaseLEv @ 76 NONAME + _ZN17CRequestProcessor22DoHandleResponsePhaseLEv @ 77 NONAME + _ZN17CRequestProcessor24DoHandleCompletingPhaseLEv @ 78 NONAME + _ZN17CRequestProcessor4RunLEv @ 79 NONAME + _ZN17CRequestProcessor7ReleaseEv @ 80 NONAME + _ZN17CRequestProcessor8DoCancelEv @ 81 NONAME + _ZN17CRequestProcessor8RunErrorEi @ 82 NONAME + _ZN17CRequestProcessor9SendDataLERK8MMTPType @ 83 NONAME + _ZN17CRequestProcessor9SessionIdEv @ 84 NONAME + _ZN17CRequestProcessorC2ER25MMTPDataProviderFrameworkR14MMTPConnectioniPK22TMTPRequestElementInfo @ 85 NONAME + _ZN17CRequestProcessorD0Ev @ 86 NONAME + _ZN17CRequestProcessorD1Ev @ 87 NONAME + _ZN17CRequestProcessorD2Ev @ 88 NONAME + _ZN18CGetObjectPropDesc10ConstructLEv @ 89 NONAME + _ZN18CGetObjectPropDesc13CheckRequestLEv @ 90 NONAME + _ZN18CGetObjectPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 91 NONAME + _ZN18CGetObjectPropDesc8ServiceLEv @ 92 NONAME + _ZN18CGetObjectPropDescC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 93 NONAME + _ZN18CGetObjectPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 94 NONAME + _ZN18CGetObjectPropDescD0Ev @ 95 NONAME + _ZN18CGetObjectPropDescD1Ev @ 96 NONAME + _ZN18CGetObjectPropDescD2Ev @ 97 NONAME + _ZN18CGetObjectPropList10ConstructLEv @ 98 NONAME + _ZN18CGetObjectPropList13CheckRequestLEv @ 99 NONAME + _ZN18CGetObjectPropList4RunLEv @ 100 NONAME + _ZN18CGetObjectPropList8DoCancelEv @ 101 NONAME + _ZN18CGetObjectPropList8RunErrorEi @ 102 NONAME + _ZN18CGetObjectPropList8ServiceLEv @ 103 NONAME + _ZN18CGetObjectPropListC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 104 NONAME + _ZN18CGetObjectPropListD0Ev @ 105 NONAME + _ZN18CGetObjectPropListD1Ev @ 106 NONAME + _ZN18CGetObjectPropListD2Ev @ 107 NONAME + _ZN18CSetObjectPropList13CheckRequestLEv @ 108 NONAME + _ZN18CSetObjectPropList22DoHandleResponsePhaseLEv @ 109 NONAME + _ZN18CSetObjectPropList4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 110 NONAME + _ZN18CSetObjectPropList4RunLEv @ 111 NONAME + _ZN18CSetObjectPropList8DoCancelEv @ 112 NONAME + _ZN18CSetObjectPropList8RunErrorEi @ 113 NONAME + _ZN18CSetObjectPropList8ServiceLEv @ 114 NONAME + _ZN18CSetObjectPropListD0Ev @ 115 NONAME + _ZN18CSetObjectPropListD1Ev @ 116 NONAME + _ZN18CSetObjectPropListD2Ev @ 117 NONAME + _ZN19CDescriptionUtility24NewRangeFormDescriptionLEtmmmi @ 118 NONAME + _ZN19CDescriptionUtilityC2Ev @ 119 NONAME + _ZN19CDescriptionUtilityD0Ev @ 120 NONAME + _ZN19CDescriptionUtilityD1Ev @ 121 NONAME + _ZN19CDescriptionUtilityD2Ev @ 122 NONAME + _ZN19CGetObjectPropValue13CheckRequestLEv @ 123 NONAME + _ZN19CGetObjectPropValue27ServiceMetaDataFromWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 124 NONAME + _ZN19CGetObjectPropValue8ServiceLEv @ 125 NONAME + _ZN19CGetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 126 NONAME + _ZN19CGetObjectPropValueD0Ev @ 127 NONAME + _ZN19CGetObjectPropValueD1Ev @ 128 NONAME + _ZN19CGetObjectPropValueD2Ev @ 129 NONAME + _ZN19CSetObjectPropValue13CheckRequestLEv @ 130 NONAME + _ZN19CSetObjectPropValue22DoHandleResponsePhaseLEv @ 131 NONAME + _ZN19CSetObjectPropValue25ServiceMetaDataToWrapperLEtR8MMTPTypeRK18CMTPObjectMetaData @ 132 NONAME + _ZN19CSetObjectPropValue8ServiceLEv @ 133 NONAME + _ZN19CSetObjectPropValueC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 134 NONAME + _ZN19CSetObjectPropValueD0Ev @ 135 NONAME + _ZN19CSetObjectPropValueD1Ev @ 136 NONAME + _ZN19CSetObjectPropValueD2Ev @ 137 NONAME + _ZN20CGetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 138 NONAME + _ZN20CGetObjectReferencesD0Ev @ 139 NONAME + _ZN20CGetObjectReferencesD1Ev @ 140 NONAME + _ZN20CGetObjectReferencesD2Ev @ 141 NONAME + _ZN20CSetObjectReferences22DoHandleResponsePhaseLEv @ 142 NONAME + _ZN20CSetObjectReferences22DoSetObjectReferencesLERK18CMTPObjectMetaData @ 143 NONAME + _ZN20CSetObjectReferences4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 144 NONAME + _ZN20CSetObjectReferences8ServiceLEv @ 145 NONAME + _ZN20CSetObjectReferencesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 146 NONAME + _ZN20CSetObjectReferencesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 147 NONAME + _ZN20CSetObjectReferencesD0Ev @ 148 NONAME + _ZN20CSetObjectReferencesD1Ev @ 149 NONAME + _ZN20CSetObjectReferencesD2Ev @ 150 NONAME + _ZN22CGetFormatCapabilities10ConstructLEv @ 151 NONAME + _ZN22CGetFormatCapabilities13CheckRequestLEv @ 152 NONAME + _ZN22CGetFormatCapabilities4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 153 NONAME + _ZN22CGetFormatCapabilities8ServiceLEv @ 154 NONAME + _ZN22CGetFormatCapabilitiesC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 155 NONAME + _ZN22CGetFormatCapabilitiesC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 156 NONAME + _ZN22CGetFormatCapabilitiesD0Ev @ 157 NONAME + _ZN22CGetFormatCapabilitiesD1Ev @ 158 NONAME + _ZN22CGetFormatCapabilitiesD2Ev @ 159 NONAME + _ZN23CMmMtpDpAccessSingleton12OpenSessionLEv @ 160 NONAME + _ZN23CMmMtpDpAccessSingleton13CloseSessionLEv @ 161 NONAME + _ZN23CMmMtpDpAccessSingleton17GetAccessWrapperLEv @ 162 NONAME + _ZN23CMmMtpDpAccessSingleton24ActiveToIdleStatusChangeEv @ 163 NONAME + _ZN23CMmMtpDpAccessSingleton30CancelActiveToIdleStatusChangeEv @ 164 NONAME + _ZN23CMmMtpDpAccessSingleton7CreateLER25MMTPDataProviderFramework @ 165 NONAME + _ZN23CMmMtpDpAccessSingleton7ReleaseEv @ 166 NONAME + _ZN23CPropertySettingUtility20SetMetaDataToWrapperER14MMmMtpDpConfigtR8MMTPTypeRK18CMTPObjectMetaData @ 167 NONAME + _ZN23CPropertySettingUtilityC2Ev @ 168 NONAME + _ZN23CPropertySettingUtilityD0Ev @ 169 NONAME + _ZN23CPropertySettingUtilityD1Ev @ 170 NONAME + _ZN23CPropertySettingUtilityD2Ev @ 171 NONAME + _ZN24CGetObjectPropsSupported4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 172 NONAME + _ZN24CGetObjectPropsSupported8ServiceLEv @ 173 NONAME + _ZN24CGetObjectPropsSupportedD0Ev @ 174 NONAME + _ZN24CGetObjectPropsSupportedD1Ev @ 175 NONAME + _ZN24CGetObjectPropsSupportedD2Ev @ 176 NONAME + _ZN26CGetInterdependentPropDesc10ConstructLEv @ 177 NONAME + _ZN26CGetInterdependentPropDesc13CheckRequestLEv @ 178 NONAME + _ZN26CGetInterdependentPropDesc4NewLER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 179 NONAME + _ZN26CGetInterdependentPropDesc8ServiceLEv @ 180 NONAME + _ZN26CGetInterdependentPropDescC1ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 181 NONAME + _ZN26CGetInterdependentPropDescC2ER25MMTPDataProviderFrameworkR14MMTPConnectionR14MMmMtpDpConfig @ 182 NONAME + _ZN26CGetInterdependentPropDescD0Ev @ 183 NONAME + _ZN26CGetInterdependentPropDescD1Ev @ 184 NONAME + _ZN26CGetInterdependentPropDescD2Ev @ 185 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper10AddObjectLERK18CMTPObjectMetaData @ 186 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper13AddDummyFileLERK7TDesC16 @ 187 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper13DeleteObjectLERK18CMTPObjectMetaData @ 188 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper13RenameObjectLERK18CMTPObjectMetaDataRK7TDesC16 @ 189 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper13SetReferenceLERK18CMTPObjectMetaDataR12CDesC16Array @ 190 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper15CreateDummyFileERK7TDesC16 @ 191 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper15DeleteDummyFileERK7TDesC16 @ 192 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper16CleanupDatabaseLEv @ 193 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper16GetAllReferenceLEP9CMPXMediaR12CDesC16Array @ 194 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper19GetModifiedContentLERK7TDesC16RiR12CDesC16Array @ 195 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper20GetAllAbstractMediaLERK7TDesC16PP14CMPXMediaArray19TMPXGeneralCategory @ 196 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper21GetAbstractMediaNameLEP9CMPXMedia19TMPXGeneralCategory @ 197 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper22UpdateMusicCollectionLERK7TDesC16 @ 198 NONAME + _ZN29CMmMtpDpMetadataAccessWrapper23GetObjectMetadataValueLEtR8MMTPTypeRK18CMTPObjectMetaData @ 199 NONAME + _ZNK11CSendObject12HasDataphaseEv @ 200 NONAME + _ZNK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 201 NONAME + _ZNK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 202 NONAME + _ZNK17CRequestProcessor10ConnectionEv @ 203 NONAME + _ZNK17CRequestProcessor12HasDataphaseEv @ 204 NONAME + _ZNK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 205 NONAME + _ZNK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 206 NONAME + _ZNK17CRequestProcessor7RequestEv @ 207 NONAME + _ZNK18CSetObjectPropList12HasDataphaseEv @ 208 NONAME + _ZNK19CSetObjectPropValue12HasDataphaseEv @ 209 NONAME + _ZNK20CSetObjectReferences12HasDataphaseEv @ 210 NONAME + _ZTI10CGetObject @ 211 NONAME + _ZTI11CCopyObject @ 212 NONAME + _ZTI11CMoveObject @ 213 NONAME + _ZTI11CSendObject @ 214 NONAME + _ZTI13CDeleteObject @ 215 NONAME + _ZTI13CRenameObject @ 216 NONAME + _ZTI14CGetObjectInfo @ 217 NONAME + _ZTI15CRequestChecker @ 218 NONAME + _ZTI15CRequestUnknown @ 219 NONAME + _ZTI15TMTPTypeFlatBuf @ 220 NONAME + _ZTI17CGetPartialObject @ 221 NONAME + _ZTI17CRequestProcessor @ 222 NONAME + _ZTI18CGetObjectPropDesc @ 223 NONAME + _ZTI18CGetObjectPropList @ 224 NONAME + _ZTI18CHXMetaDataUtility @ 225 NONAME + _ZTI18CSetObjectPropList @ 226 NONAME + _ZTI19CDescriptionUtility @ 227 NONAME + _ZTI19CGetObjectPropValue @ 228 NONAME + _ZTI19CSetObjectPropValue @ 229 NONAME + _ZTI20CGetObjectReferences @ 230 NONAME + _ZTI20CSetObjectReferences @ 231 NONAME + _ZTI22CGetFormatCapabilities @ 232 NONAME + _ZTI23CMmMtpDpAccessSingleton @ 233 NONAME + _ZTI23CPropertySettingUtility @ 234 NONAME + _ZTI24CGetObjectPropsSupported @ 235 NONAME + _ZTI25CMmMtpDpMetadataMpxAccess @ 236 NONAME + _ZTI26CGetInterdependentPropDesc @ 237 NONAME + _ZTI27CMmMtpDpMetadataVideoAccess @ 238 NONAME + _ZTI29CMmMtpDpMetadataAccessWrapper @ 239 NONAME + _ZTV10CGetObject @ 240 NONAME + _ZTV11CCopyObject @ 241 NONAME + _ZTV11CMoveObject @ 242 NONAME + _ZTV11CSendObject @ 243 NONAME + _ZTV13CDeleteObject @ 244 NONAME + _ZTV13CRenameObject @ 245 NONAME + _ZTV14CGetObjectInfo @ 246 NONAME + _ZTV15CRequestChecker @ 247 NONAME + _ZTV15CRequestUnknown @ 248 NONAME + _ZTV15TMTPTypeFlatBuf @ 249 NONAME + _ZTV17CGetPartialObject @ 250 NONAME + _ZTV17CRequestProcessor @ 251 NONAME + _ZTV18CGetObjectPropDesc @ 252 NONAME + _ZTV18CGetObjectPropList @ 253 NONAME + _ZTV18CHXMetaDataUtility @ 254 NONAME + _ZTV18CSetObjectPropList @ 255 NONAME + _ZTV19CDescriptionUtility @ 256 NONAME + _ZTV19CGetObjectPropValue @ 257 NONAME + _ZTV19CSetObjectPropValue @ 258 NONAME + _ZTV20CGetObjectReferences @ 259 NONAME + _ZTV20CSetObjectReferences @ 260 NONAME + _ZTV22CGetFormatCapabilities @ 261 NONAME + _ZTV23CMmMtpDpAccessSingleton @ 262 NONAME + _ZTV23CPropertySettingUtility @ 263 NONAME + _ZTV24CGetObjectPropsSupported @ 264 NONAME + _ZTV25CMmMtpDpMetadataMpxAccess @ 265 NONAME + _ZTV26CGetInterdependentPropDesc @ 266 NONAME + _ZTV27CMmMtpDpMetadataVideoAccess @ 267 NONAME + _ZTV29CMmMtpDpMetadataAccessWrapper @ 268 NONAME + _ZThn28_N11CSendObject13UsbDisconnectEv @ 269 NONAME + _ZThn28_N17CRequestProcessor12HandleEventLERK13TMTPTypeEvent @ 270 NONAME + _ZThn28_N17CRequestProcessor13UsbDisconnectEv @ 271 NONAME + _ZThn28_N17CRequestProcessor14HandleRequestLERK15TMTPTypeRequest20TMTPTransactionPhase @ 272 NONAME + _ZThn28_N17CRequestProcessor7ReleaseEv @ 273 NONAME + _ZThn28_N17CRequestProcessor9SessionIdEv @ 274 NONAME + _ZThn28_NK11CSendObject5MatchERK15TMTPTypeRequestR14MMTPConnection @ 275 NONAME + _ZThn28_NK15CRequestUnknown5MatchERK15TMTPTypeRequestR14MMTPConnection @ 276 NONAME + _ZThn28_NK17CRequestProcessor10ConnectionEv @ 277 NONAME + _ZThn28_NK17CRequestProcessor5MatchERK13TMTPTypeEventR14MMTPConnection @ 278 NONAME + _ZThn28_NK17CRequestProcessor5MatchERK15TMTPTypeRequestR14MMTPConnection @ 279 NONAME + _ZThn28_NK17CRequestProcessor7RequestEv @ 280 NONAME diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestprocessor.h --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestprocessor.h Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/inc/crequestprocessor.h Tue May 25 13:14:13 2010 +0300 @@ -311,7 +311,6 @@ /** * Set P&S Status to avoid MPX access conflict */ - void SetPSStatus(); private: /** diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/ccopyobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/ccopyobject.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/ccopyobject.cpp Tue May 25 13:14:13 2010 +0300 @@ -107,10 +107,6 @@ EXPORT_C void CCopyObject::ConstructL() { iPropertyList = CMTPTypeObjectPropList::NewL(); - - // Set the CenRep value of MTP status, - // also need to do in other processors which related to MPX - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -122,6 +118,7 @@ { PRINT( _L( "MM MTP => CCopyObject::ServiceL" ) ); + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); CopyObjectL(); PRINT( _L( "MM MTP <= CCopyObject::ServiceL" ) ); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdeleteobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdeleteobject.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cdeleteobject.cpp Tue May 25 13:14:13 2010 +0300 @@ -64,7 +64,6 @@ void CDeleteObject::ConstructL() { CActiveScheduler::Add( this ); - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -104,6 +103,8 @@ // EXPORT_C void CDeleteObject::ServiceL() { + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + iObjectsToDelete.Reset(); iDeleteError = KErrNone; TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobject.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobject.cpp Tue May 25 13:14:13 2010 +0300 @@ -19,6 +19,7 @@ #include #include "cgetobject.h" +#include "mmmtpdputility.h" #include "mmmtpdplogger.h" // ----------------------------------------------------------------------------- @@ -60,7 +61,6 @@ // void CGetObject::ConstructL() { - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -99,6 +99,8 @@ void CGetObject::ServiceL() { PRINT( _L( "MM MTP => CGetObject::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); // Get the objectinfo TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectinfo.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectinfo.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectinfo.cpp Tue May 25 13:14:13 2010 +0300 @@ -96,8 +96,6 @@ EXPORT_C void CGetObjectInfo::ConstructL() { CActiveScheduler::Add( this ); - - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -108,6 +106,8 @@ void CGetObjectInfo::ServiceL() { PRINT( _L( "MM MTP => CGetObjectInfo::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); delete iObjectInfo; iObjectInfo = NULL; diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectproplist.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectproplist.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectproplist.cpp Tue May 25 13:14:13 2010 +0300 @@ -98,8 +98,6 @@ iPropertyList = CMTPTypeObjectPropList::NewL(); - SetPSStatus(); - #if defined(_DEBUG) || defined(MMMTPDP_PERFLOG) iPerfLog = CMmMtpDpPerfLog::NewL( _L( "MediaMtpDataProviderEnumerator" ) ); #endif @@ -143,6 +141,8 @@ // EXPORT_C void CGetObjectPropList::ServiceL() { + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + GetObjectHandlesL(); TInt numOfObjects = iHandles.Count(); PRINT2( _L( "MM MTP <> CGetObjectPropList::ServiceL, numOfObjects = %d, iPropCode = 0x%x" ), diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropvalue.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropvalue.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectpropvalue.cpp Tue May 25 13:14:13 2010 +0300 @@ -70,7 +70,6 @@ KMTPGetObjectPropValuePolicy ), iDpConfig( aDpConfig ) { - SetPSStatus(); PRINT( _L( "Operation: GetObjectPropValue(0x9803)" ) ); } @@ -130,6 +129,8 @@ EXPORT_C void CGetObjectPropValue::ServiceL() { PRINT( _L( "MM MTP => CGetObjectPropValue::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); //Get the request information TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectreferences.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectreferences.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetobjectreferences.cpp Tue May 25 13:14:13 2010 +0300 @@ -24,6 +24,7 @@ #endif #include "cgetobjectreferences.h" +#include "mmmtpdputility.h" #include "mmmtpdplogger.h" // ----------------------------------------------------------------------------- @@ -67,7 +68,6 @@ // void CGetObjectReferences::ConstructL() { - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -103,6 +103,8 @@ void CGetObjectReferences::ServiceL() { PRINT( _L( "MM MTP => CGetObjectReferences::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); TUint32 objectHandle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); PRINT1( _L( "MM MTP <> CGetObjectReferences::ServiceL objectHandle = 0x%x" ), diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetpartialobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetpartialobject.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cgetpartialobject.cpp Tue May 25 13:14:13 2010 +0300 @@ -19,6 +19,7 @@ #include #include "cgetpartialobject.h" +#include "mmmtpdputility.h" #include "mmmtpdplogger.h" #include "tmmmtpdppanic.h" #include "mmmtpdpconfig.h" @@ -80,7 +81,6 @@ // void CGetPartialObject::ConstructL() { - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -147,6 +147,8 @@ EXPORT_C void CGetPartialObject::ServiceL() { PRINT( _L( "MM MTP => CGetPartialObject::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); // Get file information CMTPObjectMetaData* objectInfo = iRequestChecker->GetObjectInfo( iObjectHandle ); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/cmoveobject.cpp Tue May 25 13:14:13 2010 +0300 @@ -105,10 +105,6 @@ EXPORT_C void CMoveObject::ConstructL() { iPropertyList = CMTPTypeObjectPropList::NewL(); - - // Set the CenRep value of MTP status, - // also need to do in other processors which related to MPX - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -119,7 +115,8 @@ EXPORT_C void CMoveObject::ServiceL() { PRINT( _L( "MM MTP => CMoveObject::ServiceL" ) ); - + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); MoveObjectL(); PRINT( _L( "MM MTP <= CMoveObject::ServiceL" ) ); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crenameobject.cpp Tue May 25 13:14:13 2010 +0300 @@ -25,6 +25,7 @@ #include "mmmtpdplogger.h" #include "cmmmtpdpmetadataaccesswrapper.h" #include "crequestprocessor.h" // refer to KMmMtpRArrayGranularity +#include "mmmtpdputility.h" // ----------------------------------------------------------------------------- // CRenameObject::NewL @@ -98,6 +99,8 @@ PRINT1( _L( "MM MTP <> CRenameObject::StartL, handle count = %d" ), iCount ); if ( iCount > 0 ) { + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + // get the old/new folder full file name GetParentSuidL( aParentHandle, aOldFolderName ); @@ -169,6 +172,8 @@ { if( iRenameWaiter->IsStarted() ) iRenameWaiter->AsyncStop(); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusReadyToSync); } PRINT( _L( "MM MTP <= CRenameObject::RunL" ) ); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestprocessor.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestprocessor.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/crequestprocessor.cpp Tue May 25 13:14:13 2010 +0300 @@ -21,11 +21,10 @@ #include #include #include -#include -#include #include "crequestprocessor.h" #include "crequestchecker.h" +#include "mmmtpdputility.h" #include "mmmtpdplogger.h" static const TInt KNullBufferSize = 4096; @@ -214,6 +213,7 @@ break; case ECompletingPhase: + MmMtpDpUtility::SetPSStatus(EMtpPSStatusReadyToSync); result = DoHandleCompletingPhaseL(); break; @@ -427,23 +427,6 @@ } // ----------------------------------------------------------------------------- -// CRequestProcessor::SetPSStatus -// Set P&S Status to avoid MPX access conflict -// ----------------------------------------------------------------------------- -// -void CRequestProcessor::SetPSStatus() - { - TInt mtpStatus; - RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus); - - if ( mtpStatus != EMtpPSStatusActive ) - { - TInt err = RProperty::Set( KMtpPSUid, KMtpPSStatus, EMtpPSStatusActive ); - PRINT1( _L("MM MTP <> CRequestProcessor::SetPSStatus err = %d" ), err ); - } - } - -// ----------------------------------------------------------------------------- // CRequestProcessor::ExtractSessionTransactionId // retrieve the session id and transaction code from the current request // ----------------------------------------------------------------------------- diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csendobject.cpp Tue May 25 13:14:13 2010 +0300 @@ -129,7 +129,7 @@ PRINT1( _L( "MM MTP <> CSendObject::ConstructL DataProviderId = 0x%x" ), iFramework.DataProviderId()); - SetPSStatus(); + PRINT( _L( "MM MTP <= CSendObject::ConstructL" ) ); } @@ -324,6 +324,8 @@ EXPORT_C void CSendObject::ServiceL() { PRINT( _L( "MM MTP => CSendObject::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); if ( iProgress == EObjectNone ) { @@ -596,7 +598,7 @@ // Commits into MTP data object enumeration store the object handle and // storage space previously reserved for the specified object. iFramework.ObjectMgr().CommitReservedObjectHandleL( *iReceivedObjectInfo ); - iRollbackList.Append( RemoveObjectFromDbL ); + iRollbackList.Append( &CSendObject::RemoveObjectFromDbL ); } // Commit object to MTP data store @@ -1139,7 +1141,7 @@ // by the specified object information record. TRAP( err, iObjectMgr.ReserveObjectHandleL( *iReceivedObjectInfo, iObjectSize ) ); - iRollbackList.Append( UnreserveObjectL ); + iRollbackList.Append( &CSendObject::UnreserveObjectL ); PRINT2( _L( "MM MTP => CSendObject::ReserveObjectL iObjectsize = %Lu, Operation: 0x%x" ), iObjectSize, iOperationCode ); if ( err != KErrNone ) @@ -1152,7 +1154,7 @@ delete iFileReceived; iFileReceived = NULL; PRINT2( _L( "MM MTP <> CSendObject::ServiceObjectL, iFullPath is %S, iObjectSize: %Lu" ), &iFullPath, iObjectSize ); - iRollbackList.Append( RemoveObjectFromFs ); + iRollbackList.Append( &CSendObject::RemoveObjectFromFs ); TRAP( err, iFileReceived = CMTPTypeFile::NewL( iFs, iFullPath, EFileWrite ) ); PRINT1( _L("MM MTP <> CMTPTypeFile::NewL Leave Code is: %d"), err ); @@ -1269,7 +1271,7 @@ TRAPD( err, AddMediaToStoreL() ); if ( err != KErrNone ) - iRollbackList.Append( RemoveObjectFromDbL ); + iRollbackList.Append( &CSendObject::RemoveObjectFromDbL ); else iRollbackList.Reset(); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectproplist.cpp Tue May 25 13:14:13 2010 +0300 @@ -73,7 +73,6 @@ CActiveScheduler::Add( this ); iPropertyList = CMTPTypeObjectPropList::NewL(); - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -115,6 +114,9 @@ EXPORT_C void CSetObjectPropList::ServiceL() { PRINT( _L( "MM MTP => CSetObjectPropList::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + // Recieve the data from the property list ReceiveDataL( *iPropertyList ); PRINT( _L( "MM MTP <= CSetObjectPropList::ServiceL" ) ); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectpropvalue.cpp Tue May 25 13:14:13 2010 +0300 @@ -74,7 +74,6 @@ iDpConfig( aDpConfig ), iFs( aFramework.Fs() ) { - SetPSStatus(); PRINT( _L( "Operation: SetObjectPropValue(0x9804)" ) ); } @@ -199,6 +198,9 @@ EXPORT_C void CSetObjectPropValue::ServiceL() { PRINT( _L( "MM MTP => CSetObjectPropValue::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + __ASSERT_DEBUG( iRequestChecker, Panic( EMmMTPDpRequestCheckNull ) ); TUint32 handle = Request().Uint32( TMTPTypeRequest::ERequestParameter1 ); PRINT1( _L( "MM MTP <> CSetObjectPropValue::ServiceL handle = 0x%x" ), handle ); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectreferences.cpp --- a/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectreferences.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/mmmtpdprequestprocessor/src/csetobjectreferences.cpp Tue May 25 13:14:13 2010 +0300 @@ -70,7 +70,6 @@ // void CSetObjectReferences::ConstructL() { - SetPSStatus(); } // ----------------------------------------------------------------------------- @@ -126,6 +125,9 @@ EXPORT_C void CSetObjectReferences::ServiceL() { PRINT( _L( "MM MTP => CSetObjectReferences::ServiceL" ) ); + + MmMtpDpUtility::SetPSStatus(EMtpPSStatusActive); + delete iReferences; iReferences = NULL; iReferences = CMTPTypeArray::NewL( EMTPTypeAUINT32 ); diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/src/cmmmtpdpaccesssingleton.cpp --- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpaccesssingleton.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpaccesssingleton.cpp Tue May 25 13:14:13 2010 +0300 @@ -21,6 +21,7 @@ #include "cmmmtpdpaccesssingleton.h" #include "cmmmtpdpmetadataaccesswrapper.h" #include "mmmtpdplogger.h" +#include "mmmtpdputility.h" // ----------------------------------------------------------------------------- // CMmMtpDpAccessSingleton::~CMmMtpDpAccessSingleton @@ -30,6 +31,12 @@ CMmMtpDpAccessSingleton::~CMmMtpDpAccessSingleton() { delete iWrapper; + + if (iDelayStatusChanger) + { + iDelayStatusChanger->Cancel(); + delete iDelayStatusChanger; + } } // ----------------------------------------------------------------------------- @@ -151,7 +158,73 @@ void CMmMtpDpAccessSingleton::ConstructL( MMTPDataProviderFramework& aFramework ) { iWrapper = CMmMtpDpMetadataAccessWrapper::NewL( aFramework ); + iDelayStatusChanger = CIdle::NewL(CActive::EPriorityIdle); + } + +// ----------------------------------------------------------------------------- +// CMmMtpDpAccessSingleton::ActiveToIdleStatusChange +// Issue ActiveToIdle Status Change (ActiveObject) +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMmMtpDpAccessSingleton::ActiveToIdleStatusChange() + { + PRINT( _L( "CMmMtpDpAccessSingleton::ActiveToIdleStatusChange" ) ); + CMmMtpDpAccessSingleton* self = CMmMtpDpAccessSingleton::Instance(); + + if (self != NULL) + { + CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange(); + + if (self->DelayStatusChanger() != NULL) + self->DelayStatusChanger()->Start(TCallBack(DoActiveToIdleStatusChange, self)); + } } +// ----------------------------------------------------------------------------- +// CMmMtpDpAccessSingleton::CancelActiveToIdleChange +// Cancel Outstanding ActiveToIdle Status Change +// ----------------------------------------------------------------------------- +// +EXPORT_C void CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange() + { + CMmMtpDpAccessSingleton* self = CMmMtpDpAccessSingleton::Instance(); + + if ((self != NULL) && (self->DelayStatusChanger() != NULL)) + { + if (self->DelayStatusChanger()->IsActive()) + { + PRINT( _L( "CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange, cancel outstanding request" ) ); + self->DelayStatusChanger()->Cancel(); + } + } + } + +// ----------------------------------------------------------------------------- +// CMmMtpDpAccessSingleton::DelayStatusChanger +// get DelayStatusChanger instance, internal use only +// ----------------------------------------------------------------------------- +// +CIdle* CMmMtpDpAccessSingleton::DelayStatusChanger() + { + CIdle* delayStatusChanger = NULL; + CMmMtpDpAccessSingleton* self = CMmMtpDpAccessSingleton::Instance(); + + if (self != NULL) + delayStatusChanger = self->iDelayStatusChanger; + + return delayStatusChanger; + } + +// ----------------------------------------------------------------------------- +// CMmMtpDpAccessSingleton::DoActiveToIdleChange +// Perform actural ActiveToIdle Status Change after active object callback +// ----------------------------------------------------------------------------- +// +TInt CMmMtpDpAccessSingleton::DoActiveToIdleStatusChange(TAny* /*Any*/) + { + PRINT( _L( "CMmMtpDpAccessSingleton::DoActiveToIdleStatusChange ") ); + MmMtpDpUtility::DoSetPSStatus(EMtpPSStatusReadyToSync); + return KErrNone; + } // end of file diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp --- a/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/src/cmmmtpdpmetadataaccesswrapper.cpp Tue May 25 13:14:13 2010 +0300 @@ -25,6 +25,7 @@ #include #include +#include "mmmtpdp_variant.hrh" #include "cmmmtpdpmetadataaccesswrapper.h" #include "cmmmtpdpmetadatampxaccess.h" #include "cmmmtpdpmetadatavideoaccess.h" @@ -76,6 +77,12 @@ KKeyReadPolicy, KKeyWritePolicy); +#ifdef MMMTPDP_RESET_STATUS_CLOSESESSION + MmMtpDpUtility::SetPSStatus(EMtpPSStatusUninitialized); +#else + MmMtpDpUtility::SetPSStatus(EMtpPSStatusReadyToSync); +#endif // MMMTPDP_RESET_STATUS_CLOSESESSION + PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::ConstructL" ) ); } @@ -95,9 +102,8 @@ delete iMmMtpDpMetadataMpxAccess; // unblock MPX - RProperty::Set( KMtpPSUid, - KMtpPSStatus, - EMtpPSStatusUninitialized ); + MmMtpDpUtility::SetPSStatus(EMtpPSStatusUninitialized); + PRINT( _L( "MM MTP <= CMmMtpDpMetadataAccessWrapper::~CMmMtpDpMetadataAccessWrapper" ) ); } @@ -337,6 +343,11 @@ void CMmMtpDpMetadataAccessWrapper::OpenSessionL() { iOpenCount++; + +#ifdef MMMTPDP_RESET_STATUS_CLOSESESSION + if (iOpenCount == 1) + MmMtpDpUtility::SetPSStatus(EMtpPSStatusReadyToSync); +#endif // MMMTPDP_RESET_STATUS_CLOSESESSION } // ----------------------------------------------------------------------------- @@ -355,8 +366,12 @@ if ( iOpenCount == 0 ) { PRINT( _L( "MM MTP <> CMmMtpDpMetadataAccessWrapper::CloseSessionL close" ) ); - iMmMtpDpMetadataMpxAccess->CloseSession(); + iMmMtpDpMetadataMpxAccess->CloseSession(); // trigger close and flush CollectionHelper iMmMtpDpMetadataVideoAccess->CloseSessionL(); + +#ifdef MMMTPDP_RESET_STATUS_CLOSESESSION + MmMtpDpUtility::SetPSStatus(EMtpPSStatusUninitialized); +#endif // MMMTPDP_RESET_STATUS_CLOSESESSION } } else diff -r f56ec6ce2732 -r 6f9f6e99a23e mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp --- a/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mmappcomponents/mmmtpdataprovider/src/mmmtpdputility.cpp Tue May 25 13:14:13 2010 +0300 @@ -27,6 +27,7 @@ #include #include #include +#include // for RProperty // for asf mimetype parsing #ifdef __WINDOWS_MEDIA @@ -39,6 +40,7 @@ #include "tobjectdescription.h" #include "mmmtpdplogger.h" #include "mmmtpdp_variant.hrh" +#include "cmmmtpdpaccesssingleton.h" using namespace ContentAccess; @@ -702,4 +704,36 @@ return drmStatus; } +EXPORT_C void MmMtpDpUtility::SetPSStatus( TMtpPSStatus aStatus ) + { + TBool changeScheduled = EFalse; + CMmMtpDpAccessSingleton::CancelActiveToIdleStatusChange(); // cancel any outstanding delay status change + + if ( aStatus == EMtpPSStatusReadyToSync ) + { + TInt mtpStatus; + RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus ); + + if ( mtpStatus == EMtpPSStatusActive ) + { + CMmMtpDpAccessSingleton::ActiveToIdleStatusChange(); + changeScheduled = ETrue; + } + } + + if ( !changeScheduled ) + DoSetPSStatus( aStatus ); + } + +void MmMtpDpUtility::DoSetPSStatus( TMtpPSStatus aStatus ) + { + TInt mtpStatus; + RProperty::Get( KMtpPSUid, KMtpPSStatus, mtpStatus ); + + if ( mtpStatus != aStatus ) + { + TInt err = RProperty::Set( KMtpPSUid, KMtpPSStatus, aStatus ); + PRINT3( _L("MM MTP <> CRequestProcessor::DoSetPSStatus err = %d, previous = %d, current = %d" ), err , mtpStatus, aStatus); + } + } // end of file diff -r f56ec6ce2732 -r 6f9f6e99a23e mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h --- a/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h Tue May 11 16:40:32 2010 +0300 +++ b/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.h Tue May 25 13:14:13 2010 +0300 @@ -192,13 +192,6 @@ inline TProcessId LastActiveProcessId() const; /** - * Retursn last inactive process id - * - * @return process id of last inactive process - */ - inline TProcessId LastInactiveProcessId() const; - - /** * Initializes the player with a song in the collection * * @param aCollectionPath collection path diff -r f56ec6ce2732 -r 6f9f6e99a23e mpx/playbackframework/playbackengine/inc/mpxplaybackengine.inl --- a/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.inl Tue May 11 16:40:32 2010 +0300 +++ b/mpx/playbackframework/playbackengine/inc/mpxplaybackengine.inl Tue May 25 13:14:13 2010 +0300 @@ -156,15 +156,6 @@ } // ---------------------------------------------------------------------------- -// Return last inactive process id -// ---------------------------------------------------------------------------- -// -inline TProcessId CMPXPlaybackEngine::LastInactiveProcessId() const - { - return iLastInactiveProcess; - } - -// ---------------------------------------------------------------------------- // CPlaybackCallbackReflector constructor // ---------------------------------------------------------------------------- // diff -r f56ec6ce2732 -r 6f9f6e99a23e mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp --- a/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mpx/playbackframework/playbackengine/src/mpxplaybackengine.cpp Tue May 25 13:14:13 2010 +0300 @@ -530,12 +530,6 @@ iLastActiveProcess = aCmd.ValueTObjectL( KMPXCommandPlaybackGeneralClientPid); } - else if (EPbCmdStop == cmd) - { - ASSERT(aCmd.IsSupported(KMPXCommandPlaybackGeneralClientPid)); - iLastInactiveProcess = aCmd.ValueTObjectL( - KMPXCommandPlaybackGeneralClientPid); - } TInt data(0); if (aCmd.IsSupported(KMPXCommandPlaybackGeneralData)) { @@ -651,6 +645,7 @@ break; case EPbPropertyMute: MPX_DEBUG2( "CMPXPlaybackEngine::SetL EPbPropertyMute %d", aValue ); + iProperties[EPbPropertyMute] = aValue; // set now, needed when EPSetComplete is converted to EPropertyChanged if ( iPluginHandler->Plugin() ) { PluginL()->SetL( aProperty, aValue ); @@ -1134,14 +1129,12 @@ } case EPMuteChanged: { - if ( iProperties[EPbPropertyMute] != aData ) - { - iProperties[EPbPropertyMute] = aData; - iClientList->SendMsgL( - TMPXPlaybackMessage(TMPXPlaybackMessage::EPropertyChanged, + // property changed broadcast message after successful return from plugins + iProperties[EPbPropertyMute] = aData; + iClientList->SendMsgL( + TMPXPlaybackMessage(TMPXPlaybackMessage::EPropertyChanged, EPbPropertyMute, iProperties[EPbPropertyMute])); - } break; } case EPPositionChanged: diff -r f56ec6ce2732 -r 6f9f6e99a23e mpx/playbackframework/playbackserver/src/mpxplaybackserversession.cpp --- a/mpx/playbackframework/playbackserver/src/mpxplaybackserversession.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mpx/playbackframework/playbackserver/src/mpxplaybackserversession.cpp Tue May 25 13:14:13 2010 +0300 @@ -475,10 +475,6 @@ CMPXCommand* cmd( NULL ); ::NewFromMessageL(aMessage, 1, cmd); CleanupStack::PushL(cmd); - if (aMessage.Int0()) - { // aSync command - SetAsync(aMessage); - } // else sync command iPlayer->CommandL(*cmd, *iMessageQueue); CleanupStack::PopAndDestroy(cmd); break; diff -r f56ec6ce2732 -r 6f9f6e99a23e mpx/playbackframework/playbackutility/src/mpxplaybackutilityimpl.cpp --- a/mpx/playbackframework/playbackutility/src/mpxplaybackutilityimpl.cpp Tue May 11 16:40:32 2010 +0300 +++ b/mpx/playbackframework/playbackutility/src/mpxplaybackutilityimpl.cpp Tue May 25 13:14:13 2010 +0300 @@ -386,6 +386,7 @@ TPtr8 ptr = buf->Ptr(0); if (asyncVar) { // async request + MPX_DEBUG1("CMPXPlaybackUtility::CommandL asynchronous command"); ASSERT(aCallback); // callback must be provided for asynchronous command // Increase reference count on command ownership transferred CMPXCommand* ref = CMPXCommand::NewL(aCmd);