diff -r 000000000000 -r a41df078684a kerneltest/f32test/shostmassstorage/msman/client/rusbhostsession.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/f32test/shostmassstorage/msman/client/rusbhostsession.cpp Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,120 @@ +// 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 the License "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 + @internalTechnology +*/ + + +#include +#include + +#include "msmanclientserver.h" +#include "rusbhostsession.h" +#include "tmslog.h" +#include "debug.h" + + +TVersion RUsbHostSession::Version() const + { + __MSFNSLOG + return(TVersion(KUsbHostSrvMajorVersionNumber, + KUsbHostSrvMinorVersionNumber, + KUsbHostSrvBuildVersionNumber)); + } + + +EXPORT_C RUsbHostSession::RUsbHostSession() + { + __MSFNSLOG + } + + +EXPORT_C TInt RUsbHostSession::Connect() + { + __MSFNSLOG + + TInt retry = 2; + for (;;) + { + TInt r = CreateSession(KUsbHostServerName, Version()); + if ((r != KErrNotFound) && (r != KErrServerTerminated)) + { + return r; + } + if (--retry == 0) + { + return r; + } + + r = StartServer(); + if ((r != KErrNone) && (r != KErrAlreadyExists)) + { + return r; + } + } + } + + +TInt RUsbHostSession::StartServer() + { + __MSFNSLOG + + const TUidType serverUid(KNullUid, KNullUid, KUsbHostServerUid3); + + // Create the server process + RProcess server; + TInt r = server.Create(KUsbHostServerName, KNullDesC, serverUid); + if (r != KErrNone) + { + return r; + } + + // Create the rendezvous request with the server process + TRequestStatus status; + server.Rendezvous(status); + if (status != KRequestPending) + { + User::WaitForRequest(status); + server.Kill(0); // If the outstanding request is not pending then kill the server + server.Close(); + return status.Int(); + } + + server.SetPriority(EPriorityHigh); + server.Resume(); // start the server + + // Test whether the process has ended and if it has ended, return how it ended. + User::WaitForRequest(status); + + if (status == KRequestPending) + { + server.Close(); + return status.Int(); + } + + server.Close(); + return KErrNone; + } + + + +EXPORT_C TInt RUsbHostSession::Start() + { + return SendReceive(EUsbHostStart); + }