--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiaccelerator_plat/alf_visual_api/tsrc/src/alfbatchextplugin.cpp Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,181 @@
+/*
+* Copyright (c) 2007 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: Batch ext plugin implementation
+*
+*/
+
+
+#include "alfbatchextplugin.h"
+#include "alfbatchextpluginconstants.h"
+#include <implementationproxy.h>
+#include <alf/alfconstants.h>
+#include <alf/alflayouthandlers.h>
+
+class CAlfBatchExtPluginExtension : public CBase, public MAlfExtension
+ {
+ public:
+ ~CAlfBatchExtPluginExtension();
+ virtual void Release();
+ virtual TAny* GetInterface( const THuiInterfaceSupport& aInterface );
+ virtual void HandleCmdL( TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse );
+ private:
+ RArray<TInt> iReceived;
+ };
+
+MAlfExtension* TAlfBatchExtPlugin::CreateExtensionL(
+ const TInt aObjectId,
+ const TDesC8& /*aInitialParams*/,
+ MAlfInterfaceProvider& /*aResolver*/ )
+ {
+ MAlfExtension* result = 0;
+ switch( aObjectId )
+ {
+ case EAlfBatchExtPluginCreateExtension:
+ {
+ result = new (ELeave) CAlfBatchExtPluginExtension;
+ break;
+ }
+
+ default:
+ User::Leave( KErrNotSupported );
+ }
+ return result;
+ }
+
+void TAlfBatchExtPlugin::Release()
+ {
+ delete this;
+ }
+
+CAlfBatchExtPluginExtension::~CAlfBatchExtPluginExtension()
+ {
+ iReceived.Close();
+ }
+
+void CAlfBatchExtPluginExtension::Release()
+ {
+ delete this;
+ }
+
+TAny* CAlfBatchExtPluginExtension::GetInterface( const THuiInterfaceSupport& /*aInterface*/ )
+ {
+ return NULL;
+ }
+
+void CAlfBatchExtPluginExtension::HandleCmdL( TInt aCommandId, const TDesC8& aInputBuffer, TDes8& aResponse )
+ {
+ switch ( aCommandId )
+ {
+ case EAlfBatchExtensionCmdReset:
+ iReceived.Close();
+ break;
+
+ case EAlfBatchExtensionCmdGetCount:
+ {
+ TPckgBuf<TInt> countPckg( iReceived.Count() );
+ aResponse.Copy( countPckg );
+ }
+ break;
+
+ case EAlfBatchExtensionCmdGetIndex:
+ {
+ TInt* param = (TInt*)aInputBuffer.Ptr();
+
+ if ( *param >= 0 && *param < iReceived.Count() )
+ {
+ TPckgBuf<TInt> result( iReceived[ *param ] );
+ aResponse.Copy( result );
+ }
+ else
+ {
+ User::Leave( KErrArgument );
+ }
+ }
+ break;
+
+ case EAlfBatchExtensionCmdInteger:
+ {
+ TInt* param = (TInt*)aInputBuffer.Ptr();
+ iReceived.AppendL( *param );
+ }
+ break;
+
+ case EAlfBatchExtensionCmdReal:
+ {
+ TReal32* param = (TReal32*)aInputBuffer.Ptr();
+ TInt asInteger = *param;
+ iReceived.AppendL( asInteger );
+ }
+ break;
+
+ case EAlfBatchExtensionCmdNotSupported:
+ User::Leave( KErrNotSupported );
+ break;
+
+ default:
+ {
+ if ( aCommandId >= EAlfBatchExtensionCmdBufferMin &&
+ aCommandId <= EAlfBatchExtensionCmdBufferMax )
+ {
+ const TInt length = aCommandId - EAlfBatchExtensionCmdBufferMin;
+
+ if ( aInputBuffer.Length() == length )
+ {
+ for ( TInt ii = 0; ii < length; ii++ )
+ {
+ TUint8 val = (TUint8)ii;
+ if ( aInputBuffer[ ii ] != val )
+ {
+ User::Leave( KErrArgument );
+ }
+ }
+ iReceived.AppendL( aCommandId );
+ }
+ else
+ {
+ User::Leave( KErrArgument );
+ }
+ }
+ else
+ {
+ User::Leave( KErrNotSupported );
+ }
+ }
+ break;
+ }
+ }
+
+// Global functions:
+
+MAlfExtensionFactory* Instance()
+ {
+ TAlfBatchExtPlugin* me = NULL;
+ me = new TAlfBatchExtPlugin;
+ return me;
+ }
+
+const TImplementationProxy ImplementationTable[] =
+ {
+#ifdef __EABI__
+ {{KAlfBatchExtPluginImplementationId}, (TFuncPtr)Instance}
+#else
+ {{KAlfBatchExtPluginImplementationId}, Instance}
+#endif
+ };
+
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+ {
+ aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy) ;
+ return ImplementationTable;
+ }