--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/host/functiondrivers/ms/msmm/client/src/msmmclient.cpp Tue Feb 02 02:02:59 2010 +0200
@@ -0,0 +1,196 @@
+/*
+* Copyright (c) 2008-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:
+*
+*/
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include "msmmclient.h"
+#include <usb/usblogger.h>
+
+#include <e32cmn.h>
+
+#include "srvdef.h"
+
+#ifdef __FLOG_ACTIVE
+_LIT8(KLogComponent, "UsbHostMsmmClient");
+#endif
+
+// Costants
+const TInt KConnectRetry = 0x2;
+
+//---------------------------------------------------------------------------
+//
+// NON-MEMBER FUNCTIONS
+
+static TInt StartServer()
+ {
+ LOG_STATIC_FUNC_ENTRY
+
+ TInt ret = KErrNone;
+
+ // Create the server process
+ const TUidType serverUid(KNullUid, KNullUid, KMsmmServUid);
+ RProcess server;
+ _LIT(KNullCommand,"");
+ ret = server.Create(KMsmmServerBinaryName, KNullCommand, serverUid);
+
+ // Was server process created OK?
+ if (KErrNone != ret)
+ {
+ return ret;
+ }
+
+ // Set up Rendezvous so that server thread can signal correct startup
+ TRequestStatus serverDiedRequestStatus;
+ server.Rendezvous(serverDiedRequestStatus);
+
+ // Status flag should still be pending as we haven't
+ // resumed the server yet!
+ if (serverDiedRequestStatus != KRequestPending)
+ {
+ server.Kill(0); // abort the startup here
+ }
+ else
+ {
+ server.Resume(); // start server
+ }
+
+ User::WaitForRequest(serverDiedRequestStatus);
+
+ // determine the reason for the server exit
+ TInt exitReason = (EExitPanic == server.ExitType()) ?
+ KErrGeneral : serverDiedRequestStatus.Int();
+ server.Close();
+ return exitReason;
+ }
+
+//---------------------------------------------------------------------------
+// RMsmmSession
+//
+// Public member functions
+
+EXPORT_C TInt RMsmmSession::Connect()
+ {
+ LOG_FUNC
+
+ TInt retry = KConnectRetry; // Attempt connect twice then give up
+ TInt ret(KErrNone);
+ FOREVER
+ {
+ ret = CreateSession(KMsmmServerName, Version(), KDefaultMessageSlots);
+ if ((KErrNotFound != ret) && (KErrServerTerminated != ret))
+ {
+ break;
+ }
+
+ if ((--retry) == 0)
+ {
+ break;
+ }
+
+ ret = StartServer();
+ if ((KErrNone != ret) && (KErrAlreadyExists != ret))
+ {
+ break;
+ }
+ }
+
+ if (KErrNone != ret)
+ {
+ LOGTEXT2(_L("Underlying error value = %d"), ret)
+ ret = KErrCouldNotConnect;
+ }
+
+ return ret;
+ }
+
+EXPORT_C TInt RMsmmSession::Disconnect()
+ {
+ LOG_FUNC
+
+ Close();
+ return KErrNone;
+ }
+
+// Called to provide the version number of the server we require for this API
+EXPORT_C TVersion RMsmmSession::Version() const
+ {
+ LOG_FUNC
+
+ return TVersion(KMsmmServMajorVersionNumber,
+ KMsmmServMinorVersionNumber,
+ KMsmmServBuildVersionNumber);
+ }
+
+EXPORT_C TInt RMsmmSession::AddFunction(
+ const TUSBMSDeviceDescription& aDevice,
+ TUint8 aInterfaceNumber, TUint32 aInterfaceToken)
+ {
+ LOG_FUNC
+
+ TInt ret(KErrNone);
+
+ TIpcArgs usbmsIpcArgs;
+ iDevicePkg = aDevice; // Package the device description
+ usbmsIpcArgs.Set(0, &iDevicePkg);
+ usbmsIpcArgs.Set(1, aInterfaceNumber);
+ usbmsIpcArgs.Set(2, aInterfaceToken);
+
+ ret = SendReceive(EHostMsmmServerAddFunction, usbmsIpcArgs);
+
+ return ret;
+ }
+
+EXPORT_C TInt RMsmmSession::RemoveDevice(TUint aDevice)
+ {
+ LOG_FUNC
+
+ TInt ret(KErrNone);
+
+ TIpcArgs usbmsIpcArgs(aDevice);
+
+ ret = SendReceive(EHostMsmmServerRemoveDevice, usbmsIpcArgs);
+
+ return ret;
+ }
+
+EXPORT_C TInt RMsmmSession::__DbgFailNext(TInt aCount)
+ {
+ LOG_FUNC
+
+#ifdef _DEBUG
+ return SendReceive(EHostMsmmServerDbgFailNext, TIpcArgs(aCount));
+#else
+ (void)aCount;
+ return KErrNone;
+#endif
+ }
+
+EXPORT_C TInt RMsmmSession::__DbgAlloc()
+ {
+ LOG_FUNC
+
+#ifdef _DEBUG
+ return SendReceive(EHostMsmmServerDbgAlloc);
+#else
+ return KErrNone;
+#endif
+ }
+
+// End of file