os/mm/devsoundextensions/ciextnfactoryplugins/ciextnserverplugin/src/ciextnserverpluginwrapper.cpp
changeset 0 bde4ae8d615e
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/os/mm/devsoundextensions/ciextnfactoryplugins/ciextnserverplugin/src/ciextnserverpluginwrapper.cpp	Fri Jun 15 03:10:57 2012 +0200
     1.3 @@ -0,0 +1,149 @@
     1.4 +/*
     1.5 + * Copyright (c) 2002-2008 Nokia Corporation and/or its subsidiary(-ies).
     1.6 + * All rights reserved.
     1.7 + * This component and the accompanying materials are made available
     1.8 + * under the terms of "Eclipse Public License v1.0"
     1.9 + * which accompanies this distribution, and is available
    1.10 + * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    1.11 + *
    1.12 + * Initial Contributors:
    1.13 + * Nokia Corporation - initial contribution.
    1.14 + *
    1.15 + * Contributors:
    1.16 + *
    1.17 + * Description:   Class definition of server plugin wrapper implementing S60 custom interface.
    1.18 + *
    1.19 + */
    1.20 +
    1.21 +#include "ciextnserverpluginwrapper.h"
    1.22 +#include "citraces.h"
    1.23 +#include <AudioInputMessageTypes.h>
    1.24 +#include <ecom.h>
    1.25 +
    1.26 +#define KMuxTempBufferSize 20
    1.27 +
    1.28 +#ifdef __WINSCW__
    1.29 +class MyMCustomInterface
    1.30 +    {
    1.31 +public:
    1.32 +    virtual TAny* CustomInterface(TUid aCustomeInterface) = 0;
    1.33 +    virtual void Release() = 0;
    1.34 +    virtual void PassDestructionKey(TUid aUid) = 0;
    1.35 +    };
    1.36 +#endif
    1.37 +
    1.38 +CIExtnServerPluginWrapper* CIExtnServerPluginWrapper::NewL(
    1.39 +        MCustomInterface& aInterfaceRef)
    1.40 +    {
    1.41 +    DEB_TRACE0(_L("CIExtnServerPluginWrapper::NewL Begin"));
    1.42 +    CIExtnServerPluginWrapper* self = new (ELeave) CIExtnServerPluginWrapper(
    1.43 +            aInterfaceRef);
    1.44 +    CleanupStack::PushL(self);
    1.45 +    self->ConstructL();
    1.46 +    CleanupStack::Pop(self);
    1.47 +    DEB_TRACE0(_L("CIExtnServerPluginWrapper::NewL End"));
    1.48 +    return self;
    1.49 +    }
    1.50 +
    1.51 +CIExtnServerPluginWrapper::~CIExtnServerPluginWrapper()
    1.52 +    {
    1.53 +    DEB_TRACE0(_L("CIExtnServerPluginWrappers::~CIExtnServerPluginWrapper Begin"));
    1.54 +    DEB_TRACE0(_L("CIExtnServerPluginWrapper::~CIExtnServerPluginWrapper End"));
    1.55 +    }
    1.56 +
    1.57 +CIExtnServerPluginWrapper::CIExtnServerPluginWrapper(
    1.58 +        MCustomInterface& aInterfaceRef) :
    1.59 +    iCustomInterfaceRef(&aInterfaceRef)
    1.60 +    {
    1.61 +    }
    1.62 +
    1.63 +void CIExtnServerPluginWrapper::ConstructL()
    1.64 +    {
    1.65 +#ifdef __WINSCW__
    1.66 +    DEB_TRACE0(_L("Try Loading CI Stub Plugin"));
    1.67 +    TUid interfaceUid =
    1.68 +        {
    1.69 +        0x10207C71
    1.70 +        };
    1.71 +    TAny* pluginRef;
    1.72 +    TRAPD(error, pluginRef = REComSession::CreateImplementationL( interfaceUid, iDtor_ID_Key ));
    1.73 +    if (pluginRef)
    1.74 +        {
    1.75 +        DEB_TRACE1(_L("CreateImplementationL Uid [0x%x]"), iDtor_ID_Key.iUid);
    1.76 +        iCustomInterfaceStub = (MyMCustomInterface*) pluginRef;
    1.77 +        iCustomInterfaceStub->PassDestructionKey(iDtor_ID_Key);
    1.78 +        DEB_TRACE0(_L("CI Stub Loaded"));
    1.79 +        }
    1.80 +#endif    
    1.81 +
    1.82 +    }
    1.83 +
    1.84 +MCustomInterface* CIExtnServerPluginWrapper::GetInterface()
    1.85 +    {
    1.86 +    DEB_TRACE0(_L("CIExtnServerPluginWrappers::GetInterface"));
    1.87 +    return (MCustomInterface*) this;
    1.88 +    }
    1.89 +
    1.90 +TAny* CIExtnServerPluginWrapper::CustomInterface(TUid aInterfaceId)
    1.91 +    {
    1.92 +    DEB_TRACE0(_L("*CI* CIExtnServerPluginWrapper::CustomInterface"));
    1.93 +    TAny* pluginRef = NULL;
    1.94 +    pluginRef = iCustomInterfaceRef->CustomInterface(aInterfaceId);
    1.95 +#ifdef __WINSCW__
    1.96 +    if (!pluginRef)
    1.97 +        {
    1.98 +        DEB_TRACE0(_L("*CI* Try Loading CI Stub if present"));
    1.99 +        pluginRef = iCustomInterfaceStub->CustomInterface(aInterfaceId);
   1.100 +        if (pluginRef)
   1.101 +            {
   1.102 +            DEB_TRACE0(_L("*CI* CI Stub Loaded"));
   1.103 +            }
   1.104 +        }
   1.105 +#endif
   1.106 +    return pluginRef;
   1.107 +    }
   1.108 +
   1.109 +void CIExtnServerPluginWrapper::Release()
   1.110 +    {
   1.111 +    DEB_TRACE0(_L("CIExtnServerPluginWrappers::Release >> ENTER"));
   1.112 +#ifdef __WINSCW__    
   1.113 +    iCustomInterfaceStub->Release();
   1.114 +#endif    
   1.115 +    DEB_TRACE0(_L("CIExtnServerPluginWrappers::Release >> EXIT"));
   1.116 +    delete this;
   1.117 +    }
   1.118 +
   1.119 +/*
   1.120 + TAny* CIExtnServerPluginWrapper::CustomInterface(TUid aInterfaceId)
   1.121 + {
   1.122 + DEB_TRACE0(_L("CIExtnServerPluginWrappers::CustomInterface"));
   1.123 + TUid interfaceUid =
   1.124 + {
   1.125 + 0x10207C49
   1.126 + };
   1.127 + TEComResolverParams resolverParams;
   1.128 + DEB_TRACE1(_L("Findig CustomInterface with Uid [0x%x]"),aInterfaceId.iUid);
   1.129 + TInt uidAsInteger = aInterfaceId.iUid;
   1.130 + TBuf8<KMuxTempBufferSize> tempBuffer;
   1.131 + tempBuffer.Num(uidAsInteger, EHex);
   1.132 + resolverParams.SetDataType(tempBuffer);
   1.133 +
   1.134 + TAny* ptr = NULL;
   1.135 + TRAPD(err, ptr=REComSession::CreateImplementationL(
   1.136 + interfaceUid,
   1.137 + _FOFF(CIExtnServerPluginWrapper, iDtor_ID_Key),resolverParams));
   1.138 + if (err != KErrNone)
   1.139 + {
   1.140 + DEB_TRACE1(_L("No Custom Interface found:  Error [%d]"),err);
   1.141 + }
   1.142 + if (ptr)
   1.143 + {
   1.144 + DEB_TRACE1(_L("Stub Present for Uid [0x%x]"),interfaceUid);
   1.145 + return ptr;
   1.146 + }
   1.147 + else
   1.148 + {
   1.149 + return iCustomInterfaceRef->CustomInterface(aInterfaceId);
   1.150 + }
   1.151 + }
   1.152 + */