sl@0: /* sl@0: * Copyright (c) 2002-2007 Nokia Corporation and/or its subsidiary(-ies). sl@0: * All rights reserved. sl@0: * This component and the accompanying materials are made available sl@0: * under the terms of "Eclipse Public License v1.0" sl@0: * which accompanies this distribution, and is available sl@0: * at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: * sl@0: * Initial Contributors: sl@0: * Nokia Corporation - initial contribution. sl@0: * sl@0: * Contributors: sl@0: * sl@0: * Description: Message handler for RA8 decoder custom interface. sl@0: * sl@0: */ sl@0: sl@0: sl@0: sl@0: // INCLUDE FILES sl@0: #include sl@0: #include "Ra8CustomInterfaceMsgHdlr.h" sl@0: #include "Ra8CustomInterfaceMsgs.h" sl@0: sl@0: // EXTERNAL DATA STRUCTURES sl@0: sl@0: // EXTERNAL FUNCTION PROTOTYPES sl@0: sl@0: // CONSTANTS sl@0: sl@0: // MACROS sl@0: sl@0: // LOCAL CONSTANTS AND MACROS sl@0: sl@0: // MODULE DATA STRUCTURES sl@0: sl@0: // LOCAL FUNCTION PROTOTYPES sl@0: sl@0: // FORWARD DECLARATIONS sl@0: sl@0: // ============================= LOCAL FUNCTIONS =============================== sl@0: sl@0: // ============================ MEMBER FUNCTIONS =============================== sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CRa8CustomInterfaceMsgHdlr::CRa8CustomInterfaceMsgHdlr sl@0: // C++ default constructor can NOT contain any code, that sl@0: // might leave. sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: CRa8CustomInterfaceMsgHdlr::CRa8CustomInterfaceMsgHdlr( sl@0: CRa8CustomInterface* aRa8CustomInterface) : sl@0: CMMFObject(KUidRa8DecHwDeviceCI) sl@0: { sl@0: iRa8CustomInterface = aRa8CustomInterface; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CRa8CustomInterfaceMsgHdlr::ConstructL sl@0: // Symbian 2nd phase constructor can leave. sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: void CRa8CustomInterfaceMsgHdlr::ConstructL() sl@0: { sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CRa8CustomInterfaceMsgHdlr::NewL sl@0: // Two-phased constructor. sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: EXPORT_C CRa8CustomInterfaceMsgHdlr* sl@0: CRa8CustomInterfaceMsgHdlr::NewL(TAny* aRa8CustomInterface) sl@0: { sl@0: CRa8CustomInterface* custominterface = sl@0: (CRa8CustomInterface*)aRa8CustomInterface; sl@0: CRa8CustomInterfaceMsgHdlr* self = sl@0: new (ELeave) CRa8CustomInterfaceMsgHdlr(custominterface); sl@0: CleanupStack::PushL( self ); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(self); sl@0: sl@0: return self; sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // Destructor sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: EXPORT_C CRa8CustomInterfaceMsgHdlr::~CRa8CustomInterfaceMsgHdlr() sl@0: { sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CRa8CustomInterfaceMsgHdlr::HandleRequest sl@0: // Handles the messages from the proxy. sl@0: // Calls a subfunction which determines which custom interface to call. sl@0: // A subfunction is used to contain multiple leaving functions for a single sl@0: // trap. sl@0: // (other items were commented in a header). sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: EXPORT_C void CRa8CustomInterfaceMsgHdlr::HandleRequest(TMMFMessage& aMessage) sl@0: { sl@0: ASSERT(aMessage.Destination().InterfaceId() == KUidRa8DecHwDeviceCI); sl@0: TRAPD(error,DoHandleRequestL(aMessage)); sl@0: if (error) sl@0: { sl@0: aMessage.Complete(error); sl@0: } sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CRa8CustomInterfaceMsgHdlr::DoHandleRequestL sl@0: // Determines which custom interface to call. sl@0: // (other items were commented in a header). sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: void CRa8CustomInterfaceMsgHdlr::DoHandleRequestL(TMMFMessage& aMessage) sl@0: { sl@0: switch (aMessage.Function()) sl@0: { sl@0: case ERa8CiFrameNumber: sl@0: { sl@0: DoFrameNumberL(aMessage); sl@0: break; sl@0: } sl@0: case ERa8CiSetInitString: sl@0: { sl@0: DoSetInitStringL(aMessage); sl@0: break; sl@0: } sl@0: default: sl@0: { sl@0: aMessage.Complete(KErrNotSupported); sl@0: } sl@0: } sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CRa8CustomInterfaceMsgHdlr::DoFrameNumberL sl@0: // Handles the message from the proxy and calls the custom interface method. sl@0: // The data passed from the proxy is read from the message and passed to sl@0: // the custom interface. sl@0: // (other items were commented in a header). sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: void CRa8CustomInterfaceMsgHdlr::DoFrameNumberL(TMMFMessage& aMessage) sl@0: { sl@0: TInt frame = iRa8CustomInterface->FrameNumber(); sl@0: TPckgBuf pckg(frame); sl@0: aMessage.WriteDataToClientL(pckg); sl@0: aMessage.Complete(KErrNone); sl@0: } sl@0: sl@0: // ----------------------------------------------------------------------------- sl@0: // CRa8CustomInterfaceMsgHdlr::DoSetInitStringL sl@0: // Handles the message from the proxy and calls the custom interface method. sl@0: // The data passed from the proxy is read from the message and passed to sl@0: // the custom interface. sl@0: // (other items were commented in a header). sl@0: // ----------------------------------------------------------------------------- sl@0: // sl@0: void CRa8CustomInterfaceMsgHdlr::DoSetInitStringL(TMMFMessage& aMessage) sl@0: { sl@0: TInt size = aMessage.SizeOfData1FromClient(); sl@0: HBufC8* dataBuf = HBufC8::NewL(size); sl@0: CleanupStack::PushL( dataBuf ); sl@0: TPtr8 dataPtr = dataBuf->Des(); sl@0: aMessage.ReadData1FromClientL(dataPtr); sl@0: TInt status = iRa8CustomInterface->SetInitString(dataPtr); sl@0: CleanupStack::Pop(dataBuf); sl@0: delete dataBuf; sl@0: aMessage.Complete(status); sl@0: } sl@0: sl@0: // ========================== OTHER EXPORTED FUNCTIONS ========================= sl@0: sl@0: // End of File