uiaccelerator_plat/alf_visual_api/tsrc/src/alfbatchextplugin.cpp
changeset 0 15bf7259bb7c
--- /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;
+    }