diff -r 000000000000 -r d0791faffa3f mtpdataproviders/mtppictbridgedp/src/cmtppictbridgedpgetformatcapabilities.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mtpdataproviders/mtppictbridgedp/src/cmtppictbridgedpgetformatcapabilities.cpp Tue Feb 02 01:11:40 2010 +0200 @@ -0,0 +1,233 @@ +// Copyright (c) 2009 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: +// + + +#include +#include +#include +#include +#include "cmtprequestprocessor.h" +#include "cmtppictbridgegetformatcapabilities.h" +#include "ptpdef.h" + +/** +Two-phase construction method +@param aFramework The data provider framework +@param aConnection The connection object +@param aDataProvider The pictbridge Dp +*/ +MMTPRequestProcessor* CMTPPictBridgeDpGetFormatCapabilities::NewL( + MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPictBridgeDataProvider& aDataProvider) + { + CMTPPictBridgeDpGetFormatCapabilities* self = new (ELeave) CMTPPictBridgeDpGetFormatCapabilities(aFramework, aConnection, aDataProvider); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +/** +Destructor +*/ +CMTPPictBridgeDpGetFormatCapabilities::~CMTPPictBridgeDpGetFormatCapabilities() + { + delete iCapabilityList; + __FLOG_CLOSE; + } + +/** +ServiceL +*/ +void CMTPPictBridgeDpGetFormatCapabilities::ServiceL() + { + __FLOG(_L8(">> CMTPPictBridgeDpGetFormatCapabilities::ServiceL")); + delete iCapabilityList; + iCapabilityList = CMTPTypeFormatCapabilityList::NewL(); + iFormatCode = Request().Uint32(TMTPTypeRequest::ERequestParameter1); + BuildFormatScriptL(); + + SendDataL(*iCapabilityList); + __FLOG(_L8("<< CMTPPictBridgeDpGetFormatCapabilities::ServiceL")); + } + +/** +BuildFormatScriptL +*/ +void CMTPPictBridgeDpGetFormatCapabilities::BuildFormatScriptL() + { + __FLOG(_L8(">> CMTPPictBridgeDpGetFormatCapabilities::BuildFormatScriptL")); + CMTPTypeInterdependentPropDesc* interDesc = CMTPTypeInterdependentPropDesc::NewLC(); + CMTPTypeFormatCapability* frmCap = CMTPTypeFormatCapability::NewLC( EMTPFormatCodeScript ,interDesc ); + + //for group code + //EMTPObjectPropCodeStorageID + CMTPTypeObjectPropDesc* objectProperty = CMTPTypeObjectPropDesc::NewL(EMTPObjectPropCodeStorageID); + objectProperty->SetUint32L(CMTPTypeObjectPropDesc::EGroupCode,GetPropertyGroupNumber(EMTPObjectPropCodeStorageID)); + frmCap->AppendL( objectProperty ); + + //EMTPObjectPropCodeObjectFormat + objectProperty = CMTPTypeObjectPropDesc::NewL(EMTPObjectPropCodeObjectFormat); + objectProperty->SetUint32L(CMTPTypeObjectPropDesc::EGroupCode,GetPropertyGroupNumber(EMTPObjectPropCodeObjectFormat)); + frmCap->AppendL( objectProperty ); + + //EMTPObjectPropCodeProtectionStatus + frmCap->AppendL( ServiceProtectionStatusL() ); + + //EMTPObjectPropCodeObjectSize + objectProperty = CMTPTypeObjectPropDesc::NewL(EMTPObjectPropCodeObjectSize); + objectProperty->SetUint32L(CMTPTypeObjectPropDesc::EGroupCode,GetPropertyGroupNumber(EMTPObjectPropCodeObjectSize)); + frmCap->AppendL( objectProperty ); + + //EMTPObjectPropCodeObjectFileName + objectProperty = CMTPTypeObjectPropDesc::NewL(EMTPObjectPropCodeObjectFileName); + objectProperty->SetUint32L(CMTPTypeObjectPropDesc::EGroupCode,GetPropertyGroupNumber(EMTPObjectPropCodeObjectFileName)); + frmCap->AppendL( objectProperty ); + + //EMTPObjectPropCodeDateModified + objectProperty = CMTPTypeObjectPropDesc::NewL(EMTPObjectPropCodeDateModified); + objectProperty->SetUint32L(CMTPTypeObjectPropDesc::EGroupCode,GetPropertyGroupNumber(EMTPObjectPropCodeDateModified)); + frmCap->AppendL( objectProperty ); + + //EMTPObjectPropCodeParentObject + objectProperty = CMTPTypeObjectPropDesc::NewL(EMTPObjectPropCodeParentObject); + objectProperty->SetUint32L(CMTPTypeObjectPropDesc::EGroupCode,GetPropertyGroupNumber(EMTPObjectPropCodeParentObject)); + frmCap->AppendL( objectProperty ); + + //EMTPObjectPropCodePersistentUniqueObjectIdentifier + objectProperty = CMTPTypeObjectPropDesc::NewL(EMTPObjectPropCodePersistentUniqueObjectIdentifier); + objectProperty->SetUint32L(CMTPTypeObjectPropDesc::EGroupCode,GetPropertyGroupNumber(EMTPObjectPropCodePersistentUniqueObjectIdentifier)); + frmCap->AppendL( objectProperty ); + + //EMTPObjectPropCodeName + objectProperty = CMTPTypeObjectPropDesc::NewL(EMTPObjectPropCodeName); + objectProperty->SetUint32L(CMTPTypeObjectPropDesc::EGroupCode,GetPropertyGroupNumber(EMTPObjectPropCodeName)); + frmCap->AppendL( objectProperty); + + //EMTPObjectPropCodeNonConsumable + frmCap->AppendL(ServiceNonConsumableL() ); + + iCapabilityList->AppendL(frmCap); + CleanupStack::Pop(frmCap); + CleanupStack::Pop(interDesc); + __FLOG(_L8("<< CMTPPictBridgeDpGetFormatCapabilities::BuildFormatScriptL")); + } + +/** +ServiceProtectionStatusL +*/ +CMTPTypeObjectPropDesc* CMTPPictBridgeDpGetFormatCapabilities::ServiceProtectionStatusL() + { + CMTPTypeObjectPropDescEnumerationForm* expectedForm = CMTPTypeObjectPropDescEnumerationForm::NewL(EMTPTypeUINT16); + CleanupStack::PushL(expectedForm); + //Currently, we only support EMTPProtectionNoProtection and EMTPProtectionReadOnly + TUint16 values[] = {EMTPProtectionNoProtection, EMTPProtectionReadOnly}; + TUint numValues((sizeof(values) / sizeof(values[0]))); + for (TUint i = 0; i < numValues; i++) + { + TMTPTypeUint16 data(values[i]); + expectedForm->AppendSupportedValueL(data); + } + CMTPTypeObjectPropDesc* ret = CMTPTypeObjectPropDesc::NewL(EMTPObjectPropCodeProtectionStatus, *expectedForm); + ret->SetUint32L(CMTPTypeObjectPropDesc::EGroupCode,GetPropertyGroupNumber(EMTPObjectPropCodeProtectionStatus)); + CleanupStack::PopAndDestroy(expectedForm); + return ret; + } + +/** +ServiceNonConsumableL +*/ +CMTPTypeObjectPropDesc* CMTPPictBridgeDpGetFormatCapabilities::ServiceNonConsumableL() + { + CMTPTypeObjectPropDescEnumerationForm* expectedForm = CMTPTypeObjectPropDescEnumerationForm::NewL(EMTPTypeUINT8); + CleanupStack::PushL(expectedForm); + TUint8 values[] = {0,1}; + TUint numValues((sizeof(values) / sizeof(values[0]))); + for (TUint i = 0; i < numValues; i++) + { + TMTPTypeUint8 data(values[i]); + expectedForm->AppendSupportedValueL(data); + } + CMTPTypeObjectPropDesc* ret = CMTPTypeObjectPropDesc::NewL(EMTPObjectPropCodeNonConsumable, *expectedForm); + ret->SetUint32L(CMTPTypeObjectPropDesc::EGroupCode,GetPropertyGroupNumber(EMTPObjectPropCodeNonConsumable)); + CleanupStack::PopAndDestroy(expectedForm); + + return ret; + } + +/** +CheckRequestL +*/ +TMTPResponseCode CMTPPictBridgeDpGetFormatCapabilities::CheckRequestL() + { + __FLOG(_L8(">> CMTPPictBridgeDpGetFormatCapabilities::CheckRequestL")); + TMTPResponseCode response = CMTPRequestProcessor::CheckRequestL(); + if(EMTPRespCodeOK != response) + return response; + + TUint32 formatCode = Request().Uint32(TMTPTypeRequest::ERequestParameter1); + + if((formatCode != EMTPFormatCodeScript)&& (iFormatCode != KMTPFormatsAll)) + { + return EMTPRespCodeInvalidObjectFormatCode; + } + + __FLOG(_L8("<< CMTPPictBridgeDpGetFormatCapabilities::CheckRequestL")); + return EMTPRespCodeOK; + } + +/** +Standard c++ constructor +*/ +CMTPPictBridgeDpGetFormatCapabilities::CMTPPictBridgeDpGetFormatCapabilities( + MMTPDataProviderFramework& aFramework, + MMTPConnection& aConnection, + CMTPPictBridgeDataProvider& aDataProvider): + CMTPRequestProcessor(aFramework, aConnection, 0, NULL), + iPictBridgeDP(aDataProvider) + { + } + +/** +ConstructL +*/ +void CMTPPictBridgeDpGetFormatCapabilities::ConstructL() + { + __FLOG_OPEN(KMTPSubsystem, KComponent); + __FLOG(_L8("CMTPPictBridgeDpGetFormatCapabilities::ConstructL")); + } + +/** +GetPropertyGroupNumber +*/ +TUint16 CMTPPictBridgeDpGetFormatCapabilities::GetPropertyGroupNumber(const TUint16 aPropCode) const + { + + // begin from group 1, since group 0 is not used + for(int group = 1; group <= KMTPDpPropertyGroupNumber; group++) + { + for( int propCodeIndex = 0 ; propCodeIndex < KMTPDpPropertyNumber ; propCodeIndex++) + { + if(KMTPDpPropertyGroups[group][propCodeIndex] == aPropCode) + { + return group; + } + } + } + + // if not foud, the group number should be 0. + return 0; + }