diff -r 0aa8cc770c8a -r 4a793f564d72 mtpdataproviders/mtpplaybackcontroldp/src/cmtpplaybackcontroldp.cpp --- a/mtpdataproviders/mtpplaybackcontroldp/src/cmtpplaybackcontroldp.cpp Tue Aug 31 16:03:15 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,392 +0,0 @@ -// Copyright (c) 2010 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: -// - -/** - @file - @internalComponent -*/ - -#include -#include -#include - -#include "cmtpplaybackcontroldp.h" -#include "cmtprequestprocessor.h" -#include "mtpplaybackcontroldpprocessor.h" -#include "cmtpplaybackmap.h" -#include "cmtpplaybackproperty.h" -#include "mmtpplaybackinterface.h" -#include "cmtpplaybackevent.h" -#include "mtpplaybackcontrolpanic.h" - - -// Class constants. -__FLOG_STMT(_LIT8(KComponent,"PlaybackControlDataProvider");) -static const TInt KMTPPlaybackControlDpSessionGranularity(3); - -/** -MTP playback control data provider plug-in factory method. -@return A pointer to an MTP playback control data provider plug-in. Ownership IS -transfered. -@leave One of the system wide error codes, if a processing failure occurs. -*/ -TAny* CMTPPlaybackControlDataProvider::NewL(TAny* aParams) - { - CMTPPlaybackControlDataProvider* self = new (ELeave) CMTPPlaybackControlDataProvider(aParams); - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - return self; - } - -/** -Destructor -*/ -CMTPPlaybackControlDataProvider::~CMTPPlaybackControlDataProvider() - { - __FLOG(_L8("~CMTPPlaybackControlDataProvider - Entry")); - TInt count = iActiveProcessors.Count(); - while(count--) - { - iActiveProcessors[count]->Release(); - } - iActiveProcessors.Close(); - delete iPlaybackMap; - delete iPlaybackProperty; - if(iPlaybackControl) - { - iPlaybackControl->Close(); - } - __FLOG(_L8("~CMTPPlaybackControlDataProvider - Exit")); - __FLOG_CLOSE; - } - -void CMTPPlaybackControlDataProvider::Cancel() - { - - } - -void CMTPPlaybackControlDataProvider::ProcessEventL(const TMTPTypeEvent& /*aEvent*/, MMTPConnection& /*aConnection*/) - { - __FLOG(_L8("ProcessEventL - Entry")); - __FLOG(_L8("ProcessEventL - Exit")); - } - -void CMTPPlaybackControlDataProvider::ProcessNotificationL(TMTPNotification aNotification, const TAny* aParams) - { - __FLOG(_L8("ProcessNotificationL - Entry")); - switch (aNotification) - { - case EMTPSessionClosed: - SessionClosedL(*reinterpret_cast(aParams)); - break; - - case EMTPSessionOpened: - SessionOpenedL(*reinterpret_cast(aParams)); - break; - default: - // Ignore all other notifications. - break; - } - __FLOG(_L8("ProcessNotificationL - Exit")); - } - -void CMTPPlaybackControlDataProvider::ProcessRequestPhaseL(TMTPTransactionPhase aPhase, const TMTPTypeRequest& aRequest, MMTPConnection& aConnection) - { - __FLOG(_L8("ProcessRequestPhaseL - Entry")); - TInt index = LocateRequestProcessorL(aRequest, aConnection); - __ASSERT_DEBUG(index != KErrNotFound, Panic(EMTPPBArgumentErr)); - MMTPRequestProcessor* processor = iActiveProcessors[index]; - iActiveProcessor = index; - iActiveProcessorRemoved = EFalse; - TBool result = processor->HandleRequestL(aRequest, aPhase); - if (iActiveProcessorRemoved) - { - processor->Release(); // destroy the processor - } - else if (result) - { - processor->Release(); - iActiveProcessors.Remove(index); - } - iActiveProcessor = -1; - __FLOG(_L8("ProcessRequestPhaseL - Exit")); - } - -void CMTPPlaybackControlDataProvider::Supported(TMTPSupportCategory aCategory, RArray& aArray) const - { - __FLOG(_L8("Supported - Entry")); - - switch (aCategory) - { - case EDeviceProperties: - { - TInt count = sizeof(KMTPPlaybackControlDpSupportedProperties) / sizeof(KMTPPlaybackControlDpSupportedProperties[0]); - for(TInt i = 0; i < count; i++) - { - aArray.Append(KMTPPlaybackControlDpSupportedProperties[i]); - } - } - break; - - case EOperations: - { - TInt count = sizeof(KMTPPlaybackControlDpSupportedOperations) / sizeof(KMTPPlaybackControlDpSupportedOperations[0]); - for(TInt i = 0; i < count; i++) - { - aArray.Append(KMTPPlaybackControlDpSupportedOperations[i]); - } - } - break; - - case EEvents: - { - TInt count = sizeof(KMTPPlaybackControlDpSupportedEvents) / sizeof(KMTPPlaybackControlDpSupportedEvents[0]); - for(TInt i = 0; i < count; i++) - { - aArray.Append(KMTPPlaybackControlDpSupportedEvents[i]); - } - } - break; - - default: - // Unrecognised category, leave aArray unmodified. - break; - } - __FLOG(_L8("Supported - Exit")); - } - -/** -Constructor. -*/ -CMTPPlaybackControlDataProvider::CMTPPlaybackControlDataProvider(TAny* aParams) : - CMTPDataProviderPlugin(aParams), - iActiveProcessors(KMTPPlaybackControlDpSessionGranularity), - iActiveProcessor(-1), - iRequestToResetPbCtrl(EFalse) - { - - } - -/** -Second phase constructor. -*/ -void CMTPPlaybackControlDataProvider::ConstructL() - { - __FLOG_OPEN(KMTPSubsystem, KComponent); - __FLOG(_L8("ConstructL - Entry")); - iPlaybackProperty = CMTPPlaybackProperty::NewL(); - iPlaybackMap = CMTPPlaybackMap::NewL(Framework(),*iPlaybackProperty); - __FLOG(_L8("ConstructL - Exit")); - } - -void CMTPPlaybackControlDataProvider::SendEventL(TMTPDevicePropertyCode aPropCode) - { - __FLOG(_L8("SendEventL - Entry")); - iEvent.Reset(); - iEvent.SetUint16(TMTPTypeEvent::EEventCode, EMTPEventCodeDevicePropChanged ); - iEvent.SetUint32(TMTPTypeEvent::EEventSessionID, KMTPSessionAll); - iEvent.SetUint32(TMTPTypeEvent::EEventTransactionID, KMTPTransactionIdNone); - iEvent.SetUint32(TMTPTypeEvent::EEventParameter1, aPropCode); - Framework().SendEventL(iEvent); - __FLOG(_L8("SendEventL - Exit")); - } - -/** -Find or create a request processor that can process the request -@param aRequest The request to be processed -@param aConnection The connection from which the request comes -@return the index of the found/created request processor -*/ -TInt CMTPPlaybackControlDataProvider::LocateRequestProcessorL(const TMTPTypeRequest& aRequest, MMTPConnection& aConnection) - { - __FLOG(_L8("LocateRequestProcessorL - Entry")); - TInt index = KErrNotFound; - TInt count = iActiveProcessors.Count(); - for(TInt i = 0; i < count; i++) - { - if(iActiveProcessors[i]->Match(aRequest, aConnection)) - { - index = i; - break; - } - } - if(index == KErrNotFound) - { - MMTPRequestProcessor* processor = MTPPlaybackControlDpProcessor::CreateL(Framework(), aRequest, aConnection, *this); - __ASSERT_DEBUG(processor, Panic(EMTPPBArgumentErr)); - CleanupReleasePushL(*processor); - iActiveProcessors.AppendL(processor); - CleanupStack::Pop(); - index = count; - } - - __FLOG(_L8("LocateRequestProcessorL - Exit")); - return index; - } - -/** -Cleans up outstanding request processors when a session is closed. -@param aSession notification parameter block -*/ -void CMTPPlaybackControlDataProvider::SessionClosedL(const TMTPNotificationParamsSessionChange& aSession) - { - __FLOG(_L8("SessionClosedL - Entry")); - TInt count = iActiveProcessors.Count(); - while (count--) - { - MMTPRequestProcessor* processor = iActiveProcessors[count]; - TUint32 sessionId(processor->SessionId()); - if ((sessionId == aSession.iMTPId) && (processor->Connection().ConnectionId() == aSession.iConnection.ConnectionId())) - { - iActiveProcessors.Remove(count); - if (count == iActiveProcessor) - { - iActiveProcessorRemoved = ETrue; - } - else - { - processor->Release(); - } - } - } - - if(iPlaybackControl) - { - iPlaybackControl->Close(); - iPlaybackControl = NULL; - } - - __FLOG(_L8("SessionClosedL - Exit")); - } - -/** -Prepares for a newly-opened session. -@param aSession notification parameter block -*/ -#ifdef __FLOG_ACTIVE -void CMTPPlaybackControlDataProvider::SessionOpenedL(const TMTPNotificationParamsSessionChange& aSession) -#else -void CMTPPlaybackControlDataProvider::SessionOpenedL(const TMTPNotificationParamsSessionChange& /*aSession*/) -#endif - { - __FLOG(_L8("SessionOpenedL - Entry")); - __FLOG_VA((_L8("SessionID = %d"), aSession.iMTPId)); - __FLOG(_L8("SessionOpenedL - Exit")); - } - -void CMTPPlaybackControlDataProvider::StartObjectEnumerationL(TUint32 aStorageId, TBool /*aPersistentFullEnumeration*/) - { - __FLOG(_L8("StartObjectEnumerationL - Entry")); - //This DP doesn't manage data. - Framework().ObjectEnumerationCompleteL(aStorageId); - __FLOG(_L8("StartObjectEnumerationL - Exit")); - } - -void CMTPPlaybackControlDataProvider::StartStorageEnumerationL() - { - __FLOG(_L8("StartStorageEnumerationL - Entry")); - //This DP doesn't manage data. - Framework().StorageEnumerationCompleteL(); - __FLOG(_L8("StartStorageEnumerationL - Exit")); - } - -void CMTPPlaybackControlDataProvider::HandlePlaybackEventL(CMTPPlaybackEvent* aEvent, TInt aErr) - { - __FLOG(_L8("HandlePlaybackEventL - Entry")); - - if(aErr != KPlaybackErrNone) - { - if(aErr == KPlaybackErrDeviceUnavailable ) - { - iRequestToResetPbCtrl = ETrue; - //Report error to initiator, . - SendEventL(EMTPDevicePropCodePlaybackObject); - SendEventL(EMTPDevicePropCodePlaybackRate); - SendEventL(EMTPDevicePropCodePlaybackContainerIndex); - SendEventL(EMTPDevicePropCodePlaybackPosition); - } - return; - } - - __ASSERT_DEBUG((aEvent != NULL), Panic(EMTPPBDataNullErr)); - __ASSERT_ALWAYS((aEvent != NULL), User::Leave(KErrArgument)); - __FLOG_1(_L8("aEvent %d"), aEvent->PlaybackEvent()); - - switch(aEvent->PlaybackEvent()) - { - case EPlaybackEventVolumeUpdate: - { - SendEventL(EMTPDevicePropCodeVolume); - } - break; - case EPlaybackEventStateUpdate: - { - SendEventL(EMTPDevicePropCodePlaybackRate); - } - break; - case EPlaybackEventObjectUpdate: - { - SendEventL(EMTPDevicePropCodePlaybackObject); - } - break; - case EPlaybackEventObjectIndexUpdate: - { - SendEventL(EMTPDevicePropCodePlaybackContainerIndex); - } - break; - - default: - User::Leave(KErrArgument); - break; - } - - __FLOG(_L8("HandlePlaybackEventL - Exit")); - } - -CMTPPlaybackMap& CMTPPlaybackControlDataProvider::GetPlaybackMap() const - { - __ASSERT_DEBUG((iPlaybackMap != NULL), Panic(EMTPPBDataNullErr)); - return *iPlaybackMap; - } - -CMTPPlaybackProperty& CMTPPlaybackControlDataProvider::GetPlaybackProperty() const - { - __ASSERT_DEBUG((iPlaybackProperty != NULL), Panic(EMTPPBDataNullErr)); - return *iPlaybackProperty; - } - -MMTPPlaybackControl& CMTPPlaybackControlDataProvider::GetPlaybackControlL() - { - __FLOG(_L8("GetPlaybackControlL - Entry")); - if(iPlaybackControl == NULL) - { - iPlaybackControl = MMTPPlaybackControl::NewL(*this); - } - else if(iRequestToResetPbCtrl) - { - iRequestToResetPbCtrl = EFalse; - iPlaybackControl->Close(); - iPlaybackControl = NULL; - iPlaybackControl = MMTPPlaybackControl::NewL(*this); - } - __FLOG(_L8("GetPlaybackControlL - Exit")); - return *iPlaybackControl; - } - -void CMTPPlaybackControlDataProvider::RequestToResetPbCtrl() - { - iRequestToResetPbCtrl = ETrue; - }