usbmgmt/usbmgr/usbman/server/SRC/CUsbDeviceStateWatcher.cpp
changeset 0 c9bc50fca66e
child 15 f92a4f87e424
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/usbman/server/SRC/CUsbDeviceStateWatcher.cpp	Tue Feb 02 02:02:59 2010 +0200
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 1997-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:
+* Talks directly to the USB Logical Device Driver (LDD) and 
+* watches any state changes
+*
+*/
+
+/**
+ @file
+*/
+
+#include <usb/usblogger.h>
+#include "CUsbScheduler.h"
+#include "CUsbDeviceStateWatcher.h"
+#include "CUsbDevice.h"
+
+#ifdef __FLOG_ACTIVE
+_LIT8(KLogComponent, "USBSVR");
+#endif
+
+/**
+ * The CUsbDeviceStateWatcher::NewL method
+ *
+ * Constructs a new CUsbDeviceStateWatcher object
+ *
+ * @internalComponent
+ * @param	aOwner	The device that owns the state watcher
+ * @param	aLdd	A reference to the USB Logical Device Driver
+ *
+ * @return	A new CUsbDeviceStateWatcher object
+ */
+CUsbDeviceStateWatcher* CUsbDeviceStateWatcher::NewL(CUsbDevice& aOwner, RDevUsbcClient& aLdd)
+	{
+	LOG_STATIC_FUNC_ENTRY
+
+	CUsbDeviceStateWatcher* r = new (ELeave) CUsbDeviceStateWatcher(aOwner, aLdd);
+	return r;
+	}
+
+
+/**
+ * The CUsbDeviceStateWatcher::~CUsbDeviceStateWatcher method
+ *
+ * Destructor
+ *
+ * @internalComponent
+ */
+CUsbDeviceStateWatcher::~CUsbDeviceStateWatcher()
+	{
+	LOGTEXT2(_L8(">CUsbDeviceStateWatcher::~CUsbDeviceStateWatcher (0x%08x)"), (TUint32) this);
+	Cancel();
+	}
+
+
+/**
+ * The CUsbDeviceStateWatcher::CUsbDeviceStateWatcher method
+ *
+ * Constructor
+ *
+ * @param	aOwner	The device that owns the state watcher
+ * @param	aLdd	A reference to the USB Logical Device Driver
+ */
+CUsbDeviceStateWatcher::CUsbDeviceStateWatcher(CUsbDevice& aOwner, RDevUsbcClient& aLdd)
+	: CActive(CActive::EPriorityStandard), iOwner(aOwner), iLdd(aLdd)
+	{
+	CActiveScheduler::Add(this);
+	}
+
+/**
+ * Called when the USB device changes its state.
+ */
+void CUsbDeviceStateWatcher::RunL()
+	{
+	if (iStatus.Int() != KErrNone)
+		{
+		LOGTEXT2(_L8("CUsbDeviceStateWatcher::RunL() - Error = %d"), iStatus.Int());
+		return;
+		}
+
+	LOGTEXT2(_L8("CUsbDeviceStateWatcher::RunL() - State Changed to %d"), iState);
+
+	if (!(iState & KUsbAlternateSetting))
+		iOwner.SetDeviceState((TUsbcDeviceState) iState);
+
+	LOGTEXT(_L8("CUsbDeviceStateWatcher::RunL() - About to call DeviceStatusNotify"));
+	iLdd.AlternateDeviceStatusNotify(iStatus, iState);
+	SetActive();
+	LOGTEXT(_L8("CUsbDeviceStateWatcher::RunL() - Called DeviceStatusNotify"));
+	}
+
+
+/**
+ * Automatically called when the state watcher is cancelled.
+ */
+void CUsbDeviceStateWatcher::DoCancel()
+	{
+	LOG_FUNC
+	iLdd.AlternateDeviceStatusNotifyCancel();
+	}
+
+
+/**
+ * Instructs the state watcher to start watching.
+ */
+void CUsbDeviceStateWatcher::Start()
+	{
+	LOG_FUNC
+	iLdd.AlternateDeviceStatusNotify(iStatus, iState);
+	SetActive();
+	}