--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/hwrmhaptics/hapticsclient/src/hwrmhapticssession.cpp Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,230 @@
+/*
+* Copyright (c) 2008 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: Implementation of client side session.
+*
+*/
+
+
+#include <e32svr.h>
+#include <data_caging_path_literals.hrh>
+
+#include "hwrmhapticssession.h"
+#include "hwrmhapticsconfiguration.h"
+#include "hwrmhapticsclientserver.h"
+#include "hwrmhapticstrace.h"
+
+// ---------------------------------------------------------------------------
+// Connects to server
+// ---------------------------------------------------------------------------
+//
+TInt RHWRMHapticsSession::Connect()
+ {
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::Connect()" ) ) );
+
+ TInt err = MakeConnection();
+
+ // Create proper service on server side. i.e. initialize
+ // server components
+ if ( err == KErrNone )
+ {
+ err = SendReceive( EHWRMHapticsService );
+ }
+
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::Connect - return(%d)" ), err ) );
+
+ return err;
+ }
+
+
+// ---------------------------------------------------------------------------
+// Connects to server (ASYNC)
+// ---------------------------------------------------------------------------
+//
+void RHWRMHapticsSession::Connect( TRequestStatus& aStatus )
+ {
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::Connect()" ) ) );
+
+ TInt err = MakeConnection();
+
+ // Create proper service on server side. i.e. initialize
+ // server components
+ if ( err == KErrNone )
+ {
+ SendReceive( EHWRMHapticsService, aStatus );
+ }
+ else
+ {
+ TRequestStatus* status = &aStatus;
+ User::RequestComplete( status, err );
+ }
+
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::Connect - return(%d)" ), err ) );
+ }
+
+
+// ---------------------------------------------------------------------------
+// Calls SendReceive with given parameters.
+// ---------------------------------------------------------------------------
+//
+TInt RHWRMHapticsSession::ExecuteOperation(
+ TInt aCommand,
+ const TIpcArgs& aArgs ) const
+ {
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::ExecuteOperation(0x%x)" ), aCommand ) );
+
+ TInt retval = SendReceive( aCommand, aArgs );
+
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::ExecuteOperation - return %d" ), retval ) );
+
+ return retval;
+ }
+
+// ---------------------------------------------------------------------------
+// Calls SendReceive with given parameter.
+// ---------------------------------------------------------------------------
+//
+TInt RHWRMHapticsSession::ExecuteOperation( TInt aCommand ) const
+ {
+ COMPONENT_TRACE( _L( "RHWRMHapticsSession::ExecuteOperation" ) );
+
+ TInt retval = SendReceive( aCommand );
+
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::ExecuteOperation - return %d" ), retval ) );
+
+ return retval;
+ }
+
+// ---------------------------------------------------------------------------
+// Calls SendReceive with given parameters.
+// ---------------------------------------------------------------------------
+//
+void RHWRMHapticsSession::ExecuteAsyncOperation(
+ TInt aCommand,
+ const TIpcArgs& aArgs,
+ TRequestStatus& aStatus ) const
+ {
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::ExecuteAsyncOperation - commandId(%d), aStatus(%d)" ), aCommand, aStatus.Int() ) );
+
+ SendReceive( aCommand, aArgs, aStatus );
+
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::ExecuteAsyncOperation - return" ) ) );
+ }
+
+// ---------------------------------------------------------------------------
+// Starts server.
+// ---------------------------------------------------------------------------
+//
+TInt RHWRMHapticsSession::StartServer() const
+ {
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::StartServer()" ) ) );
+
+ RProcess server;
+ TInt ret = server.Create( ServerLocation(), KNullDesC );
+
+ if ( ret != KErrNone ) // Loading failed.
+ {
+ return ret;
+ }
+
+ TRequestStatus status;
+ server.Rendezvous( status );
+
+ if ( status != KRequestPending )
+ {
+ server.Kill( 0 ); // Abort startup.
+ server.Close();
+ return KErrGeneral;
+ }
+ else
+ {
+ server.Resume(); // Logon OK - start the server.
+ }
+
+ User::WaitForRequest( status );
+ server.Close();
+
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::StartServer - return %d" ), status.Int() ) );
+
+ return status.Int();
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the server location.
+// ---------------------------------------------------------------------------
+//
+TFullName RHWRMHapticsSession::ServerLocation() const
+ {
+ TFullName fullPathAndName( KServerExeDrive );
+ fullPathAndName.Append( KDC_PROGRAMS_DIR );
+ fullPathAndName.Append( KServerExeName );
+
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::ServerLocation - return %S" ), &fullPathAndName ) );
+
+ return fullPathAndName;
+ }
+
+// ---------------------------------------------------------------------------
+// Returns the version of the server.
+// ---------------------------------------------------------------------------
+//
+TVersion RHWRMHapticsSession::ServerVersion() const
+ {
+ return TVersion( KServerVersionMajor,
+ KServerVersionMinor,
+ KServerVersionBuild );
+ }
+
+// ---------------------------------------------------------------------------
+// Makes connection to server.
+// ---------------------------------------------------------------------------
+//
+TInt RHWRMHapticsSession::MakeConnection()
+ {
+ // Try connection twice, if not successful on the first attempt
+ TInt retry( 2 );
+ TInt err( KErrNone );
+
+ while ( retry > 0 )
+ {
+ // try to create a session to the server
+ err = CreateSession( KServerProcessName,
+ ServerVersion(),
+ KDefaultAsyncSlots );
+
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::MakeConnection - CreateSession returned: err(%d)" ), err ) );
+
+ if ( err != KErrNotFound && err != KErrServerTerminated )
+ {
+ retry = 0; // KErrNone or unrecoverable error
+ }
+ else
+ {
+ // Return code was KErrNotFound or KErrServerTerminated.
+ // Try to start the Haptics server
+ err = StartServer();
+
+ COMPONENT_TRACE( ( _L( "RHWRMHapticsSession::MakeConnection - StartServer returned: err(%d)" ), err ) );
+
+ if ( err != KErrNone && err != KErrAlreadyExists )
+ {
+ retry = 0; // Unrecoverable error
+ }
+ }
+
+ retry--;
+ }
+
+ return err;
+ }
+// End of File