mtpdataproviders/mtppictbridgedp/src/cmtppictbridgedpgetformatcapabilities.cpp
changeset 0 d0791faffa3f
--- /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 <mtp/cmtptypeinterdependentpropdesc.h>
+#include <mtp/cmtptypeobjectpropdesc.h>
+#include <mtp/mtpprotocolconstants.h>
+#include <mtp/mmtpdataproviderframework.h>
+#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;
+    }