diff -r 65e91466a14b -r b7e5ed8c1342 systemswstubs/asyreference/src/ASYReferenceCmdHandlerBase.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/systemswstubs/asyreference/src/ASYReferenceCmdHandlerBase.cpp Tue Sep 07 08:19:48 2010 +0300 @@ -0,0 +1,355 @@ +/* +* Copyright (c) 2009 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 "ASYReferenceCmdHandlerBase.h" +#include "ASYReferenceMainServiceBase.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 =============================== + +// ============================ MEMBER FUNCTIONS =============================== + +// ----------------------------------------------------------------------------- +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CASYReferenceCmdHandlerBase* CASYReferenceCmdHandlerBase::NewL() + { + + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::NewL() - Enter" ); + + CASYReferenceCmdHandlerBase * self = new(ELeave) CASYReferenceCmdHandlerBase( ); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::NewL() - Return" ); + + return self; + } + +// ----------------------------------------------------------------------------- +// destructor. +// ----------------------------------------------------------------------------- +// +CASYReferenceCmdHandlerBase::~CASYReferenceCmdHandlerBase() + { + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::~CASYReferenceCmdHandlerBase() - Enter" ); + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::~CASYReferenceCmdHandlerBase() - Return" ); + } + +// ----------------------------------------------------------------------------- +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CASYReferenceCmdHandlerBase::CASYReferenceCmdHandlerBase() + { + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::CASYReferenceCmdHandlerBase() - Enter" ); + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::CASYReferenceCmdHandlerBase() - Return" ); + } + +// ----------------------------------------------------------------------------- +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +void CASYReferenceCmdHandlerBase::ConstructL() + { + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::CASYReferenceCmdHandlerBase() - Enter" ); + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::CASYReferenceCmdHandlerBase() - Return" ); + } + +// ----------------------------------------------------------------------------- +// CASYReferenceCmdHandlerBase::ProcessCommandL +// ----------------------------------------------------------------------------- +// +void CASYReferenceCmdHandlerBase::ProcessCommandL( + const TProcessCmdId aCommand, + const TASYCmdParams& aCmdParams ) + { + + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::ProcessCommandL() - Enter" ); + + CASYReferenceMainServiceBase* connectionHandler = (CASYReferenceMainServiceBase *) ASYMainServiceBase(); + + if( !connectionHandler ) + { + User::Leave( KErrGeneral ); + } + + switch( aCommand ) + { + case ECmdProcessCommandInit: + { + + // Command received from Accessory Server. + + // Connection handler state is set ongoing. + connectionHandler->StateChangeL( CASYReferenceMainServiceBase::EStateInitOngoing ); + + // [A.2] Process command init is received from Accessory Server + // At this point it is possible to request from an Accessory Driver/Domestic OS if the accessory connection exists. + // In this example the Process response is send immediately to Accessory Server. + TASYMsgAccessoryConnectionHandlerInitRetBuf package; + + // Accessory is not connected to terminal. + package().iStateInfo.iState = AccessoryConnection::EStateNotConnected; + package().iStateInfo.iAccessoryId = 0xffffff; + TASYMessage message( KASYMessageGroupAccessoryMessage, KASYMsgAccessoryConnectionHandlerInitRet, package ); + + // Call straight ProcessResponse. + ProcessResponseL( message ); + + } + break; + + case ECmdGetValueBool: + { + + // [E.1] Command received from Accessory Server + + TASYMsgAccessoryGetValueBooleanCmdBuf cmdPackage; + + // Map and set feature + MapCommandToAccessoryFeatureL( aCmdParams(), cmdPackage().iFeature ); + + // Set Device ID + TInt32 deviceId = ( TInt32 ) aCmdParams().iGenericID.HWDeviceID(); + cmdPackage().iAccessoryId = deviceId; + + // + // [E.2] Send request to an Accessory Driver/Domestic OS. + // + + } + break; + + + case ECmdSetValueBool: + { + + // [E.1] Command received from Accessory Server + + TASYMsgAccessorySetValueBooleanCmdBuf cmdPackage; + + // Map and set feature + MapCommandToAccessoryFeatureL( aCmdParams(), cmdPackage().iFeature ); + + // Set Device ID + TInt32 deviceId = ( TInt32 ) aCmdParams().iGenericID.HWDeviceID(); + cmdPackage().iAccessoryId = deviceId; + + if( aCmdParams().iCmdValue ) + { + cmdPackage().iState = ETrue; + } + else + { + cmdPackage().iState = EFalse; + } + + // + // [E.2] Send request to an Accessory Driver/Domestic OS + // + + } + break; + + default: + + User::Leave( KErrNotSupported ); + break; + } + + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::ProcessCommandL() - Enter" ); + } + +// ----------------------------------------------------------------------------- +// CASYReferenceCmdHandlerBase::ProcessResponseL +// ----------------------------------------------------------------------------- +// +void CASYReferenceCmdHandlerBase::ProcessResponseL( TASYMessage& aMessage ) + { + + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::ProcessResponseL() - Enter" ); + // Response for previous made process command, received from an Accessory Driver/Domestic OS. + + CASYReferenceMainServiceBase* connectionHandler = (CASYReferenceMainServiceBase *) ASYMainServiceBase(); + + if( !connectionHandler ) + { + User::Leave( KErrGeneral ); + } + + switch ( aMessage.GroupId() ) + { + case KASYMessageGroupAccessoryMessage: + + switch ( aMessage.MessageId() ) + { + + case KASYMsgAccessoryConnectionHandlerInitRet: + { + + connectionHandler->StateChangeL( CASYReferenceMainServiceBase::EStateInitOk ); + + TASYMsgAccessoryConnectionHandlerInitRetBuf package; + package.Copy( aMessage.Data() ); + + if( package().iStateInfo.iState == AccessoryConnection::EStateConnected ) + { + // + // Accessory connection exists in Accessory Driver/Domestic OS, inform accessory connection handler. + // + connectionHandler->ConnectionStateChangedL( package().iStateInfo ); + } + + TAccValueTypeTBool state; + state.iValue = ETrue; + + // [A.3] After process responce for the previous made process command with init parameter + // Server is aware wheather accessory was connected or not ( to Accessory Server ). + + CASYCommandHandlerBase::ProcessResponseL( state, KErrNone ); + + } + break; + case KASYMsgAccessoryGetValueBooleanRet: + { + + // + // [E.3] Send response previous made process command ( to Accessory Server ). + // + TASYMsgAccessoryGetValueBooleanRetBuf response; + response.Copy( aMessage.Data() ); + + TAccValueTypeTBool state; + state.iValue = response().iFeatureState.iState; + CASYCommandHandlerBase::ProcessResponseL( state, KErrNone ); + + } + break; + + case KASYMsgAccessorySetValueBooleanRet: + { + + // + // [E.3] Send response previous made process command ( to Accessory Server ). + // + + TASYMsgAccessorySetValueBooleanRetBuf response; + response.Copy( aMessage.Data() ); + + TAccValueTypeTBool state; + TInt errorCode = response().iErrorCode; + state.iValue = response().iFeatureState.iState; + CASYCommandHandlerBase::ProcessResponseL( state, errorCode ); + + } + break; + + default: + { + + User::Leave( KErrGeneral ); + } + break; + } + + break; + + default: + { + + User::Leave( KErrGeneral ); + } + break; + } + + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::ProcessResponseL() - Return" ); + } + +// ----------------------------------------------------------------------------- +// CSACAccessoryCommandHandler::ProcessErrorResponseL +// ----------------------------------------------------------------------------- +// +void CASYReferenceCmdHandlerBase::ProcessErrorResponseL( TInt /*aErrorCode*/, + TASYMessage& /*aMessage*/ ) + { + + } + + +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +void CASYReferenceCmdHandlerBase::MapCommandToAccessoryFeatureL( const TASYCommandParamRecord& aCommandParamRecord, + AccessoryFeature::TAccessoryFeature& aAccessoryFeature ) + { + + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::MapCommandToAccessoryFeatureL() - Enter" ); + TUint32 param; + + //Couple of accessory feature examples which can be requested from an Accessory Driver/Domestic OS. + aCommandParamRecord.iNameRecord.GetName( param ); + + if( param == KAccAudioOutConnector ) + { + aAccessoryFeature = AccessoryFeature::EHeadphonesConnected; + } + else if( param == KAccExtPowerSupply ) + { + + aAccessoryFeature = AccessoryFeature::EExternalPowerSourceConnected; + } + else + { + + User::Leave( KErrArgument ); + } + COM_TRACE_( "[AccFW:AsyReference] CASYReferenceCmdHandlerBase::MapCommandToAccessoryFeatureL() - Return" ); + } +// ----------------------------------------------------------------------------- +// +// ----------------------------------------------------------------------------- +// +void CASYReferenceCmdHandlerBase::RaiseEventL( TASYMessage& aMessage ) + { + + (void) aMessage; + } + +// End of file +