usbmgmt/usbmgr/device/classdrivers/ncm/classcontroller/src/ncmiapprogresswatcher.cpp
branchRCL_3
changeset 15 f92a4f87e424
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbmgmt/usbmgr/device/classdrivers/ncm/classcontroller/src/ncmiapprogresswatcher.cpp	Tue Aug 31 17:01:47 2010 +0300
@@ -0,0 +1,122 @@
+/*
+* Copyright (c) 2010 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 "ncmiapprogresswatcher.h"
+#include "ncmiapprogressstateobserver.h"
+#include "ncmconnectionmanager.h"
+
+// For OST Tracing
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "ncmiapprogresswatcherTraces.h"
+#endif
+
+/**
+ * Constructor.
+ * @param aObserver The object which is interested in the IAP progress stage change
+ * @param aConnection The reference of the NCM connection to be used
+ */
+CNcmIapProgressWatcher::CNcmIapProgressWatcher(MNcmIapProgressStateObserver& aObserver, RConnection& aConnection)
+	: CActive(CActive::EPriorityStandard)
+	, iObserver(aObserver)
+	, iConnection(aConnection) 
+	{
+    OstTraceFunctionEntryExt( CNCMIAPPROGRESSWATCHER_CNCMIAPPROGRESSWATCHER_ENTRY, this );
+    
+	CActiveScheduler::Add(this);		
+	OstTraceFunctionExit1( CNCMIAPPROGRESSWATCHER_CNCMIAPPROGRESSWATCHER_EXIT, this );
+	}
+
+
+/**
+ * Destructor.
+ */
+CNcmIapProgressWatcher::~CNcmIapProgressWatcher()
+	{
+	OstTraceFunctionEntry0( CNCMIAPPROGRESSWATCHER_CNCMIAPPROGRESSWATCHER_ENTRY_DESTRUCTOR );
+	
+	Cancel();
+	OstTraceFunctionExit0( CNCMIAPPROGRESSWATCHER_CNCMIAPPROGRESSWATCHER_ENTRY_DESTRUCTOR_EXIT );
+	}
+
+/**
+ * Start observing the connection stage changes.
+ */
+void CNcmIapProgressWatcher::Start()
+	{
+	OstTraceFunctionEntry0( CNCMIAPPROGRESSWATCHER_START_ENTRY );
+	
+	if (!IsActive())
+		{
+		iConnection.ProgressNotification(iProgressInfoBuf, iStatus);
+		SetActive();
+		}
+	OstTraceFunctionExit0( CNCMIAPPROGRESSWATCHER_START_EXIT );
+	}
+
+/**
+ * Implements cancellation of an outstanding request. Cancels the connection progress notification request.
+ */
+void CNcmIapProgressWatcher::DoCancel()
+	{
+    OstTraceFunctionEntry0( CNCMIAPPROGRESSWATCHER_DOCANCEL_ENTRY );
+
+	iConnection.CancelProgressNotification();
+	OstTraceFunctionExit0( CNCMIAPPROGRESSWATCHER_DOCANCEL_EXIT );
+	}
+
+/**
+ * Called when connection stage changed.
+ */
+void CNcmIapProgressWatcher::RunL()
+	{
+	OstTraceFunctionEntry0( CNCMIAPPROGRESSWATCHER_RUNL_ENTRY );
+	
+	OstTrace1( TRACE_NORMAL, CNCMIAPPROGRESSWATCHER_RUNL_COMPLETION_CODE, ";iStatus.Int()=%d", iStatus.Int() );
+	OstTraceExt2( TRACE_NORMAL, CNCMIAPPROGRESSWATCHER_RUNL_INFO, ";iProgressInfoBuf().iStage=%d;iProgressInfoBuf().iError=%d", iProgressInfoBuf().iStage, iProgressInfoBuf().iError );
+	
+
+	TInt completionCode = iStatus.Int();
+    if (KErrNone == completionCode)
+        {
+        switch (iProgressInfoBuf().iStage)
+            {
+            case KConnectionUninitialised:
+                {
+                iObserver.MipsoHandleClassFatalError(KErrDisconnected);
+                break;
+                }
+            case ENcmPktDrvFatalError:
+                {
+                iObserver.MipsoHandleClassFatalError(iProgressInfoBuf().iError);
+                break;
+                }
+            default:
+                {
+                // Request the next notification
+                OstTrace0( TRACE_NORMAL, CNCMIAPPROGRESSWATCHER_RUNL_RESTART_WATCHER, "Request the next notification" );                
+                Start();
+                }
+            }
+        }
+	OstTraceFunctionExit0( CNCMIAPPROGRESSWATCHER_RUNL_EXIT );
+	}