usbuis/imageprintui/src/eventmanager.cpp
changeset 0 1e05558e2206
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/usbuis/imageprintui/src/eventmanager.cpp	Thu Dec 17 09:14:30 2009 +0200
@@ -0,0 +1,395 @@
+/*
+* Copyright (c) 2006, 2007 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:  Handles DpeEventNotify call with AO
+*
+*/
+
+
+
+#include <e32base.h>
+#include <dpsdefs.h>
+#include <dpsparam.h>
+#include <s32file.h>
+#include <f32file.h>
+#include <e32std.h>
+#include <coemain.h>
+#include <d32usbc.h>
+
+#include "eventmanager.h"
+#include "imageprintuidebug.h"
+#include "pictbridge.h"
+#include "imageprintuiappui.h"
+ 
+ 
+// ---------------------------------------------------------------------------
+//  constructor
+// ---------------------------------------------------------------------------
+//
+CEventManager::CEventManager(CImagePrintUiAppUi* aAppUi, CDpsEngine* aDpsEngine)
+    : CActive(CActive::EPriorityStandard), iAppUi(aAppUi),iDpsEngine(aDpsEngine),
+      iErrorState(EFalse)
+    {
+    CActiveScheduler::Add(this);
+    StartListening();
+    }
+
+
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CEventManager* CEventManager::NewL(CImagePrintUiAppUi* aAppUi, CDpsEngine* aDpsEngine)
+    {
+    CEventManager* self = new( ELeave ) CEventManager(aAppUi, aDpsEngine);
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+CEventManager::~CEventManager()
+    {
+    Cancel();
+    }
+
+// ---------------------------------------------------------------------------
+// Start listening events
+// 
+// ---------------------------------------------------------------------------
+//
+void CEventManager::StartListening()
+	{
+	FLOG(_L("[IMAGEPRINTUI]\t CEventManager::Start listening"));
+	iDpsEngine->DpsEventNotify(iEventRequest, iStatus);
+	SetActive();
+	}
+ 	
+// ---------------------------------------------------------------------------
+// Handles situation depends on result after calling DpsEventNotify 
+// 
+// ---------------------------------------------------------------------------
+//
+void CEventManager::HandleReturnStatusL()
+	{
+    FLOG(_L("[IMAGEPRINTUI]>>> CEventManager; HandleReturnStatus"));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager event value is %d"), iEventRequest.iEvent ));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager iPrintStatus is %x"), iEventRequest.iPrinterEvent.iRepParam.iPrintStatus ));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager iJobStatus is %x"), iEventRequest.iPrinterEvent.iRepParam.iJobStatus ));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager iErrorStatus hex is %x"), iEventRequest.iPrinterEvent.iRepParam.iErrorStatus ));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager iJobEndReason is %x"), iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor ));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager iPaperMinor is %x"), iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iPaperMinor ));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager iInkMinor is %x"), iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iInkMinor ));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager iHardMinor is %x"), iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iHardMinor ));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager iFileMinor is %x"), iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iFileMinor ));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager iDisconnectEnable is %d"), iEventRequest.iPrinterEvent.iRepParam.iDisconnectEnable ));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager iCapabilityChange is %d"), iEventRequest.iPrinterEvent.iRepParam.iCapabilityChange ));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager iNewJobOk is is %d"), iEventRequest.iPrinterEvent.iRepParam.iNewJobOk ));
+    
+    
+	if(iEventRequest.iEvent == EDpsEvtNotifyJobStatus)	
+		{
+		FLOG(_L("[IMAGEPRINTUI]<<< CEventManager; NotifyPrintProgress"));
+		FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager  iImagesPrinted is %d"), iEventRequest.iJobEvent.iRepParam.iImagesPrinted ));
+		FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager  iProgress is %d"), iEventRequest.iJobEvent.iRepParam.iProgress ));
+	    iAppUi->NotifyPrintProgress(iEventRequest.iJobEvent.iRepParam.iImagesPrinted, 
+	                                 iEventRequest.iJobEvent.iRepParam.iProgress);
+		}
+		
+	else if(iEventRequest.iEvent == EDpsEvtNotifyDeviceStatus)
+		    {		    		    
+		    FLOG(_L("[IMAGEPRINTUI]<<< CEventManager; HandleReturnStatus, EDpsEvtNotifyDeviceStatus"));
+		    iAppUi->NotifyPrintStatus(iEventRequest.iPrinterEvent.iRepParam.iPrintStatus);
+		    
+		    HandleJobStatusL(iEventRequest.iPrinterEvent.iRepParam.iJobStatus);
+		    
+		    HandleErrorStatusL(iEventRequest.iPrinterEvent.iRepParam.iErrorStatus);
+		    
+		    if(iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor == EDpsJobErrorPaper)
+				{
+				FLOG(_L("[IMAGEPRINTUI] CEventManager::EDpsJobErrorPaper"));
+				HandlePaperErrorL(iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iPaperMinor);
+				}
+			else if(iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor == EDpsJobErrorInk)
+				{
+				FLOG(_L("[IMAGEPRINTUI] CEventManager::EDpsJobErrorInk"));
+				HandleInkErrorL(iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iInkMinor);
+				}
+			else if(iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor == EDpsJobErrorFile)
+				{
+				FLOG(_L("[IMAGEPRINTUI] CEventManager::EDpsJobErrorFile"));
+				HandleFileErrorL(iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iFileMinor);
+				}
+			else if(iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor == EDpsJobErrorHardware)
+				{
+				FLOG(_L("[IMAGEPRINTUI] CEventManager::EDpsJobErrorHardware"));
+				HandleHardwareErrorL(iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iHardMinor);
+				}			
+		    
+		    if(iEventRequest.iPrinterEvent.iRepParam.iNewJobOk)
+				{
+				FLOG(_L("[IMAGEPRINTUI] CEventManager::HandleDeviceStatusL, NewJob is OK"));
+				iAppUi->NotifyEventL(CEventManager::ENewJobOK );
+		    	}
+	        //capability change	
+			else if(iEventRequest.iPrinterEvent.iRepParam.iCapabilityChange)
+				{
+				FLOG(_L("[IMAGEPRINTUI] CEventManager::capability change"));
+				iAppUi->NotifyEventL(CEventManager::ECapabilityChange);
+				}
+		    }
+    FLOG(_L("[IMAGEPRINTUI]<<< CEventManager; HandleReturnStatus, next call StartListening"));		    
+	StartListening();
+	}
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CEventManager::HandleErrorStatusL(TInt aStatus)
+	{
+	FLOG(_L("[IMAGEPRINTUI] CEventManager::HandleErrorStatusL"));
+	if(aStatus  == EDpsErrorStatusOk)
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::HandleDeviceStatusL, EDpsErrorStatusOk"));
+	    iAppUi->NotifyEventL(CEventManager::ENotErrorState);
+		}	
+	else if(aStatus == EDpsErrorStatusFatal)
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::HandleDeviceStatusL, Fatal error"));
+		iAppUi->NotifyEventL(CEventManager::EErrorState);
+		
+		if(iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iInkMinor == EDpsInkEmpty ||
+		   iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iInkMinor == EDpsInkLow ||
+		   iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iPaperMinor == EDpsPaperJam )
+			{
+			FLOG(_L("[IMAGEPRINTUI] CEventManager Fatal error, don't show note"));
+			}
+		else if(iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor == EDpsJobErrorPaper ||
+    	   iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor == EDpsJobErrorInk ||
+    	   iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor == EDpsJobErrorHardware ||
+    	   iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor == EDpsJobErrorFile )
+			{
+			FLOG(_L("[IMAGEPRINTUI] CEventManager error major, don't show note"));
+			}
+		 	
+		else 
+			{
+			FLOG(_L("[IMAGEPRINTUI] CEventManager Fatal error, show note"));
+		    iAppUi->NotifyEventL(EDpsErrorStatusFatal);	
+			}		
+		}
+	else if(aStatus == EDpsErrorStatusWarning)
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::HandleDeviceStatusL, Warning"));
+		iAppUi->NotifyEventL(CEventManager::EErrorState);
+				
+	    if(iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor == EDpsJobErrorPaper ||
+    	   iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor == EDpsJobErrorInk ||
+    	   iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor == EDpsJobErrorHardware ||
+    	   iEventRequest.iPrinterEvent.iRepParam.iJobEndReason.iMajor == EDpsJobErrorFile )
+			{
+			FLOG(_L("[IMAGEPRINTUI] CEventManager warning major, don't show note"));
+			}
+		else
+			{
+			FLOG(_L("[IMAGEPRINTUI] CEventManager warning,  show note"));
+			iAppUi->NotifyEventL(CEventManager::EWarning);	
+			}
+		}	
+	}
+	
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CEventManager::HandleJobStatusL(TInt aStatus)
+	{
+	FLOG(_L("[IMAGEPRINTUI] CEventManager::HandleJobStatusL"));
+	if( aStatus == EDpsJobStatusEndedOther)
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::HandleDeviceStatusL, User cancel from printer"));
+		iAppUi->NotifyEventL(EDpsJobStatusEndedOther);
+		}
+		
+	else if( aStatus  == EDpsJobStatusEndedOk)
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::HandleDeviceStatusL, Job ended normally"));
+		iAppUi->NotifyEventL(EDpsJobStatusEndedOk );
+		}	
+	else if( aStatus  == EDpsJobStatusEndedAbortImmediately)
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::HandleDeviceStatusL, User has abort job"));
+		iAppUi->NotifyEventL(EDpsJobStatusEndedAbortImmediately);
+		}	
+	
+	}
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CEventManager::HandleHardwareErrorL(TInt aError)
+	{
+	FLOG(_L("[IMAGEPRINTUI] CEventManager::HandleHardwareErrorL"));
+	 if( aError ==  EDpsHardFatal || aError ==  EDpsHardServiceCall ||
+         aError ==  EDpsHardNotAvailable || aError ==  EDpsHardBusy || 
+         aError ==  EDpsHardLever || aError ==  EDpsHardCoverOpen ||
+         aError ==  EDpsHardNoMarkingHead || aError ==  EDpsHardInkCoverOpen ||
+         aError ==  EDpsHardNoInkCartridge  )
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CEventManager::harware  minor"));
+		iAppUi->NotifyEventL(CEventManager::EWarning);
+		}	
+	else 
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::Hardware major"));
+		iAppUi->NotifyEventL(CEventManager::EShowError);
+		} 		
+	
+	}
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CEventManager::HandleInkErrorL(TInt aError)
+	{
+	FLOG(_L("[IMAGEPRINTUI] CEventManager::HandleInkErrorL"));
+	if(aError == EDpsInkEmpty)
+	    {
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::ink empty"));
+		iAppUi->NotifyEventL(CEventManager::EInkEmpty); 
+		}
+	else if(aError == EDpsInkLow )
+	    {
+	    FLOG(_L("[IMAGEPRINTUI] CEventManager::ink low"));
+	    iAppUi->NotifyEventL(EDpsInkLow);	
+	    }
+	else if( aError== EDpsInkWaste)	
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::ink general"));
+		iAppUi->NotifyEventL(CEventManager::EWarning);
+		}
+	else 
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager ink major,  show note"));
+	    iAppUi->NotifyEventL(CEventManager::EShowError);	
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CEventManager::HandlePaperErrorL(TInt aError)
+	{
+	FLOG(_L("[IMAGEPRINTUI] CEventManager::HandlePaperErrorL"));
+	
+	if( aError == EDpsPaperLoad  || aError == EDpsPaperEject ||
+	    aError == EDpsPaperMedia || aError == EDpsPaperNearlyEmpty ||
+	    aError == EDpsPaperTypeSizeNoMatch ) 
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CEventManager::paperMinor, show warning"));
+		iAppUi->NotifyEventL(CEventManager::EWarning);
+		}
+	else if( aError == EDpsPaperJam)
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::Paper jam"));
+		iAppUi->NotifyEventL(EDpsPaperJam);
+		}
+	else if( aError == EDpsPaperEmpty)
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::Paper empty"));
+		iAppUi->NotifyEventL(EDpsPaperEmpty);
+		}	
+    else
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager paper major, show note"));
+	    iAppUi->NotifyEventL(CEventManager::EShowError);	
+		}		
+	}
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CEventManager::HandleFileErrorL(TInt aError)
+	{
+	FLOG(_L("[IMAGEPRINTUI] CEventManager::HandleFileErrorL"));
+	
+	if(aError ==  EDpsFilePrintInfo ||
+       aError ==  EDpsFileDecode  )
+	    {
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::file minor"));
+		iAppUi->NotifyEventL(CEventManager::EWarning);
+		}	
+	else
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::file major"));
+		iAppUi->NotifyEventL(CEventManager::EShowError);
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//	
+void CEventManager::RunError()
+    {
+    FLOG(_L("[IMAGEPRINTUI] CEventManager::RunError"));
+    
+    StartListening();
+    if(iStatus.Int() == KErrTimedOut)
+    	{
+    	FLOG(_L("[IMAGEPRINTUI]<<< CEventManager; RunError, timed out"));	
+    	}
+    else if( iStatus.Int() == KErrUsbInterfaceNotReady)	
+		{
+		FLOG(_L("[IMAGEPRINTUI] CEventManager::KErrUsbInterfaceNotReady"));
+		// iAppUi->NotifyEventL(KErrUsbInterfaceNotReady);
+		}		
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager::RunError iStatus is is %d"), iStatus.Int() ));
+    // iAppUi->NotifyEventL(CEventManager::ESeriousError);
+    }
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//	
+void CEventManager::RunL()
+    {
+    FLOG(_L("[IMAGEPRINTUI]\t CEventManager::RunL"));
+    FTRACE(FPrint(_L("[IMAGEPRINTUI]\t CEventManager::RunL iStatus   is %d"), iStatus.Int() ));
+    if (iStatus.Int() == KErrNone)
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CEventManager::RunL no error"));
+	    HandleReturnStatusL();
+		}
+	else
+		{
+		FLOG(_L("[IMAGEPRINTUI]\t CEventManager::RunL there is error in iStatus"));
+		User::LeaveIfError(iStatus.Int());
+		}
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void CEventManager::DoCancel()
+    {
+    FLOG(_L("[IMAGEPRINTUI]>>> CEventManager  DoCancel"));
+    iDpsEngine->CancelDpsEventNotify();
+    FLOG(_L("[IMAGEPRINTUI]>>> CEventManager  DoCancel complete"));
+    }