--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/systemswstubs/asyreference/src/ASYReferenceCmdHandlerBase.cpp Thu Jan 14 07:14:53 2010 +0200
@@ -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
+