diff -r 000000000000 -r c9bc50fca66e usbmgmt/usbmgrtest/ObexClassController/ObexUsbClassController/ObexClassController/src/CUsbObexClassController.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/usbmgmt/usbmgrtest/ObexClassController/ObexUsbClassController/ObexClassController/src/CUsbObexClassController.cpp Tue Feb 02 02:02:59 2010 +0200 @@ -0,0 +1,214 @@ +/* +* Copyright (c) 2005-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: +* Implements part of the UsbMan USB Class Framework +* +*/ + +/** + @file +*/ + +#include +#include +#include +#include "../../public/clientServerShared.h" +#include "../../ClassControllerClientSession/inc/classControllerClientSession.h" +#include "CUsbObexClassController.h" + + +// Panic category only used in debug builds +#ifdef _DEBUG +_LIT( KObexCcPanicCategory, "UsbObexCc" ); +#endif + +/** + * Panic codes for the USB OBEX Class Controller. + */ +enum TObexCCPanic + { + /** Asynchronous function called (not needed, as all requests complete synchronously) */ + EUnusedFunction = 0, + /** Start() called while in an illegal state */ + EBadApiCallStart = 1, + /** Stop() called while in an illegal state */ + EBadApiCallStop = 2, + }; + + +/** + * Constructs a CUsbObexClassController object + * + * @param aOwner USB Device that owns and manages the class + * + * @return A new CUsbObexClassController object + */ + +CUsbObexClassController* CUsbObexClassController::NewL( + MUsbClassControllerNotify& aOwner) + { + CUsbObexClassController* r = new (ELeave) CUsbObexClassController(aOwner); + CleanupStack::PushL(r); + r->ConstructL(); + CleanupStack::Pop(); + return r; + } + +/** + * Destructor + */ +CUsbObexClassController::~CUsbObexClassController() + { + iClassContClient.Close(); + } + + + +/** + * Constructor. + * + * @param aOwner USB Device that owns and manages the class + */ +CUsbObexClassController::CUsbObexClassController( + MUsbClassControllerNotify& aOwner) + : CUsbClassControllerPlugIn(aOwner, KObexStartupPriority) + { + } + + + +/** + * 2nd Phase Construction. + */ +void CUsbObexClassController::ConstructL() + { + } + + + +/** + * Called by UsbMan when it wants to start the USB Obex class. + * Data member from RSessionBase implements a Start call on the + * Obex Server process. + * + * @param aStatus The caller's request status, filled in with an error code + */ +void CUsbObexClassController::Start(TRequestStatus& aStatus) + { + //Start() should never be called if started, starting or stopping (or in state EUsbServiceFatalError) + __ASSERT_DEBUG( iState == EUsbServiceIdle, User::Panic(KObexCcPanicCategory, EBadApiCallStart) ); + + TRequestStatus* status = &aStatus; + TInt err; + iState = EUsbServiceStarting; + + err = iClassContClient.Connect(); // Connect to the Server Session + if (err != KErrNone) + { + iState = EUsbServiceFatalError; + User::RequestComplete(status, err); + } + else + { + err = iClassContClient.StartService(); // Call function to implement Obex Server + if (err != KErrNone) + { + iState = EUsbServiceFatalError; + User::RequestComplete(status, err); + } + else + { + iState = EUsbServiceStarted; + User::RequestComplete(status,KErrNone); + } + } + + } + +/** + * Called by UsbMan when it wants to stop the USB Obex class. + * Data member from RSessionBase implements a Stop call on + * the Obex Server process. + * + * @param aStatus The caller's request status: always set to KErrNone + */ +void CUsbObexClassController::Stop(TRequestStatus& aStatus) + { + + //Stop() should never be called if stopping, idle or starting (or in state EUsbServiceFatalError) + __ASSERT_DEBUG( iState == EUsbServiceStarted, User::Panic(KObexCcPanicCategory, EBadApiCallStop) ); + + TRequestStatus* status = &aStatus; + TInt err; + iState = EUsbServiceStopping; + + err = iClassContClient.StopService(); + if (err != KErrNone) + { + iState = EUsbServiceFatalError; + User::RequestComplete(status, err); + } + else + { + iState = EUsbServiceIdle; + User::RequestComplete(status, KErrNone); + } + + } + +/** + * Gets information about the descriptor which this class provides. + * + * @param aDescriptorInfo Descriptor info structure filled in by this function + */ +void CUsbObexClassController::GetDescriptorInfo(TUsbDescriptor& aDescriptorInfo) const + { + aDescriptorInfo.iNumInterfaces = KNumObexInterfaces; + aDescriptorInfo.iLength = KObexDescriptorLength; + } + + + +/** + * Standard active object RunL. Never called because this class has no + * asynchronous requests. As it is never called, function causes a panic. + */ +void CUsbObexClassController::RunL() + { + __ASSERT_DEBUG(EFalse, User::Panic(KObexCcPanicCategory, EUnusedFunction)); + } + +/** + * Standard active object cancellation function. Never called because this + * class has no asynchronous requests. As it is never called, function causes a panic. + */ +void CUsbObexClassController::DoCancel() + { + __ASSERT_DEBUG(EFalse, User::Panic(KObexCcPanicCategory, EUnusedFunction)); + } + + +/** + * Standard active object error-handling function. + * + * Should return KErrNone to avoid an active scheduler panic. This function + * should never be called as there is another mechanism for catching errors. + */ +TInt CUsbObexClassController::RunError(TInt /*aError*/) + { + __ASSERT_DEBUG(EFalse, User::Panic(KObexCcPanicCategory, EUnusedFunction)); + return KErrNone; + } + +