diff -r e71858845f73 -r e1758cbb96ac systemswstubs/wiredbearerreference/src/WiredAccessoryKeyEventHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/systemswstubs/wiredbearerreference/src/WiredAccessoryKeyEventHandler.cpp Mon Oct 04 00:04:35 2010 +0300 @@ -0,0 +1,380 @@ +/* +* Copyright (c) 2002-2004 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: Used as an reference implementation. +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include "WiredAccessoryKeyEventHandler.h" +#include "AdaptationMessage.h" + +#include "AdaptationMessageDefinitions.h" +#include "acc_debug.h" + +// EXTERNAL DATA STRUCTURES + +// EXTERNAL FUNCTION PROTOTYPES + +// CONSTANTS + +// MACROS + +// LOCAL CONSTANTS AND MACROS + +// MODULE DATA STRUCTURES + +// LOCAL FUNCTION PROTOTYPES + +// FORWARD DECLARATIONS + +// ============================= LOCAL FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::CWiredAccessoryKeyEventHandler +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CWiredAccessoryKeyEventHandler::CWiredAccessoryKeyEventHandler( TBearerParams& aBearerParams ) + : CRemConBearerPlugin( aBearerParams ) + , iState( EAccKeyEventHandlerStateUnknown ) + , iOperationId( 0 ) + , iTransactionId( 0 ) + { + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::CWiredAccessoryKeyEventHandler() - Enter" ); + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::CWiredAccessoryKeyEventHandler() - Return" ); + + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CWiredAccessoryKeyEventHandler::ConstructL() + { + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::ConstructL() - Enter" ); + // + // initialization of event subscribe(s) can be done here. + // + iState = EAccKeyEventHandlerStateReady; + + + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::ConstructL() - Return" ); + + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CWiredAccessoryKeyEventHandler* CWiredAccessoryKeyEventHandler::NewL( TBearerParams& aBearerParams ) + { + CWiredAccessoryKeyEventHandler* self = new (ELeave) CWiredAccessoryKeyEventHandler( aBearerParams ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CWiredAccessoryKeyEventHandler::~CWiredAccessoryKeyEventHandler() + { + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::~CWiredAccessoryKeyEventHandler() - Enter" ); + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::~CWiredAccessoryKeyEventHandler() - Return" ); + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::GetInterface +// ----------------------------------------------------------------------------- +// +TAny* CWiredAccessoryKeyEventHandler::GetInterface( TUid aUid ) + { + + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::GetInterface() - Enter" ); + + + TAny* bearer = NULL; + + if ( aUid == TUid::Uid( KRemConBearerInterface1 ) ) + { + bearer = reinterpret_cast( static_cast( this ) ); + } + else + { + // Interface is not supported! + } + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::GetInterface() - Return" ); + + return bearer; + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::GetResponse +// ----------------------------------------------------------------------------- +// +TInt CWiredAccessoryKeyEventHandler::GetResponse( TUid& aInterfaceUid, + TUint& aTransactionId, + TUint& aOperationId, + RBuf8& aCommandData, + TRemConAddress& aAddr ) + { + + // Only events are forwarded, thus no need to implement get response + TInt err ( KErrNotSupported ); + + ( void ) aTransactionId; + ( void ) aOperationId; + ( void ) aCommandData; + ( void ) aAddr; + ( void ) aInterfaceUid; + + return err; + } + +// ----------------------------------------------------------------------------- +// CSACAccessoryKeyEventHandler::GetCommand +// ----------------------------------------------------------------------------- +// +TInt CWiredAccessoryKeyEventHandler::GetCommand( TUid& aInterfaceUid, + TUint& aTransactionId, + TUint& aOperationId, + RBuf8& aCommandData, + TRemConAddress& aAddr ) + { + + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::GetCommand() - Enter" ); + TInt err ( KErrNone ); + + if ( iState != EAccKeyEventHandlerStateNewCommand ) + { + err = KErrNotReady; + } + else + { + aInterfaceUid = iInterfaceUid; + aTransactionId = iTransactionId++; + aOperationId = iOperationId; + + aAddr.BearerUid() = Uid(); + aAddr.Addr() = KNullDesC8(); + + iState = EAccKeyEventHandlerStateReady; + + TRAP( err, aCommandData.CreateL( iData ) ); + + if ( err != KErrNone ) + { + //GetCommand - failed to create data + } + } + + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::GetCommand() - Return" ); + return err; + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::SendCommand +// ----------------------------------------------------------------------------- +// +TInt CWiredAccessoryKeyEventHandler::SendCommand( TUid aInterfaceUid, + TUint aOperationId, + TUint aTransactionId, + RBuf8& aData, + const TRemConAddress& aAddr ) + { + + // Only events are forwarded, thus no need to implement send command + TInt err ( KErrNotSupported ); + + ( void ) aTransactionId; + ( void ) aOperationId; + ( void ) aAddr; + ( void ) aInterfaceUid; + ( void ) aData; + + return err; + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::SendResponse +// ----------------------------------------------------------------------------- +// +TInt CWiredAccessoryKeyEventHandler::SendResponse( TUid aInterfaceUid, + TUint aOperationId, + TUint aTransactionId, + RBuf8& aData, + const TRemConAddress& aAddr ) + { + + // Only events are forwarded, thus no need to implement send response + TInt err ( KErrNotSupported ); + + ( void ) aTransactionId; + ( void ) aOperationId; + ( void ) aAddr; + ( void ) aInterfaceUid; + ( void ) aData; + + return err; + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::ConnectRequest +// ----------------------------------------------------------------------------- +// +void CWiredAccessoryKeyEventHandler::ConnectRequest( const TRemConAddress& aAddr ) + { + + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::ConnectRequest() - Enter" ); + + + TInt err = Observer().ConnectConfirm( aAddr, KErrNone ); + + if ( err != KErrNone ) + { + // ConnectConfirm failed + } + + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::ConnectRequest() - Return" ); + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::DisconnectRequest +// ----------------------------------------------------------------------------- +// +void CWiredAccessoryKeyEventHandler::DisconnectRequest( const TRemConAddress& aAddr ) + { + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::DisconnectRequest() - Enter" ); + + Observer().DisconnectConfirm( aAddr, KErrNone ); + + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::DisconnectRequest() - Return" ); + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::ClientStatus +// ----------------------------------------------------------------------------- +// +void CWiredAccessoryKeyEventHandler::ClientStatus( TBool aControllerPresent, TBool aTargetPresent ) + { + ( void ) aTargetPresent; + ( void ) aControllerPresent; + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::SecurityPolicy +// ----------------------------------------------------------------------------- +// +TSecurityPolicy CWiredAccessoryKeyEventHandler::SecurityPolicy() const + { + + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::SecurityPolicy() - Enter" ); + TSecurityPolicy securityPolicy ( ECapabilitySwEvent ); + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::SecurityPolicy() - Return" ); + return securityPolicy; + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::ProcessResponseL +// ----------------------------------------------------------------------------- +// +void CWiredAccessoryKeyEventHandler::ProcessResponseL( TAdaptationMessage& aMessage ) + { + ( void ) aMessage; + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::ProcessErrorResponseL +// ----------------------------------------------------------------------------- +// +void CWiredAccessoryKeyEventHandler::ProcessErrorResponseL( TInt aErrorCode, + TAdaptationMessage& aMessage ) + { + ( void ) aErrorCode; + ( void ) aMessage; + } + +// ----------------------------------------------------------------------------- +// CWiredAccessoryKeyEventHandler::RaiseEventL +// ----------------------------------------------------------------------------- +// +void CWiredAccessoryKeyEventHandler::RaiseEventL( TAdaptationMessage& aMessage ) + { + + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::RaiseEventL() - Enter" ); + //Accessory key events are received from Accessory Driver/Domestic OS. + + if ( iState != EAccKeyEventHandlerStateReady ) + { + User::Leave( KErrNotReady ); + } + + // only key events are supported + if ( aMessage.GroupId() != KBearerMessageGroupAccessoryEvent && aMessage.MessageId() != KBearerMessageGroupAccessoryKeyEvent ) + { + User::Leave( KErrArgument ); + } + + TRemConMessageType type( ERemConCommand ); + + // Note! + // following uid 0x102069AA should be used if platform key event converter is used, + // uid is hard coded to platfrom converter which is returned to remotecontrol. + // Data should give as format defined in S60_Accessory_Key_Event_Handling_API_Specification_C.doc. + const TInt KWireBearerUid = 0x102069AA; + + TInt err = Observer().BearerToInterface( TUid::Uid( KWireBearerUid ), + aMessage.Data(), + aMessage.Data(), + iInterfaceUid, + iOperationId, + type, + iData ); + if ( err == KErrNotSupported ) + { + + } + else if ( err == KErrNone ) + { + iState = EAccKeyEventHandlerStateNewCommand; + + TRemConAddress addr; + addr.BearerUid() = Uid(); + addr.Addr() = KNullDesC8(); + + err = Observer().NewCommand( addr ); + + if ( err != KErrNone ) + { + User::Leave( err ); + } + } + else + // leave if converting fails + { + User::Leave( err ); + } + + COM_TRACE_( "[AccFW:WiredBearerReference] CWiredAccessoryKeyEventHandler::RaiseEventL() - Return" ); + } + +// End of File