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 <e32debug.h>
+#include <e32std.h>
+#include <usb_std.h>
+#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;
+ }
+
+