ImagePrint/ImagePrintEngine/DeviceProtocols/upnpprotocolfw2/inc/cupnpprintingdevice.h
changeset 0 d11fb78c4374
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ImagePrint/ImagePrintEngine/DeviceProtocols/upnpprotocolfw2/inc/cupnpprintingdevice.h	Thu Dec 17 08:45:53 2009 +0200
@@ -0,0 +1,359 @@
+/*
+* Copyright (c) 2002-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:  Declares CUPnPPrintingDevice class
+*
+*/
+
+
+#ifndef CUPNPPRINTINGDEVICE_H
+#define CUPNPPRINTINGDEVICE_H
+
+#include <fbs.h>
+#include <upnpmediaserverclient.h>
+#include <upnpfilesharing.h>
+#include <data_caging_path_literals.hrh>
+
+#include "imageprint.h"
+#include "mprotprintingdevice.h"
+#include "cprintercontrolpoint.h"
+#include "printmessagecodes.h"
+#include "cupprintercontainer.h"
+#include "cuplogger.h"
+#include "upconsts.h"
+#include "cupprintingjob.h"
+
+_LIT8(KFriendlyName, "UPnPProtocol");
+
+/// @brief The timeout to wait for first devices to be discovered
+#define KPrinterDiscoveryTimeout 	TTimeIntervalMicroSeconds32(25000000)
+
+/// @brief The timeout to wait for responses during printing 60 seconds
+#define KPrinterResponseTimeout 	TTimeIntervalMicroSeconds32(60000000)
+//#define KPrinterResponseTimeout 	TTimeIntervalMicroSeconds32(30000000)
+
+/// @brief The timeout to wait for responses during printing
+#define KPrinterSubmitTimeout 		TTimeIntervalMicroSeconds32(15000000)
+
+// @brief The times the timer can expire while printing is processing
+#define KPendingLimit 5
+
+#define	KVersionMajor 0
+#define	KVersionMinor 0
+#define	KVersionBuild 1
+
+
+enum TUPnPProtocolState
+{
+	EUPnPUninitialized=0,
+	EUPnPDiscovery,
+	EUPnPReady,
+	EUPnPJobReady,
+	EUPnPSubmittingJob,
+	EUPnPPrintingStarted,
+	EUPnPPrinting,
+	EUPnPPrintingReady,
+	EUPnPCancelling,
+	EUPnPCancellingDiscovery
+};
+
+/*
+* @class 		CUPnPPrintingDevice
+* @description	Implements the MProtPrintingDevice and MPCPObserver interfaces 
+*				to integrate Image Print and UPnP stack.
+*
+*/
+class CUPnPPrintingDevice : public CBase, public MPCPObserver, public MProtPrintingDevice
+	{
+		public:
+		
+			/*
+			* @function		CUPnPPrintingDevice
+			* @description	C++ constructor
+			*/
+			CUPnPPrintingDevice();
+
+			/*
+			* @function		NewProtocolL
+			* @description	Called from Main.cpp to construct a new MProtPrintingDevice instance
+			*/
+			static MProtPrintingDevice* NewL();
+
+			/*
+			* @function		~CUPnPPrintingDevice
+			* @description	Destructor.
+			*/
+			~CUPnPPrintingDevice();
+			
+			/*
+			* @function		DiscoveryTimeoutCBL
+			* @description	This static callback function is called by iPrinterTimer when the 
+			*				discovery timer event occurs.
+			* @param		
+			* @return		
+			*/
+			static TBool DiscoveryTimeoutCBL(TAny *aWho);
+			
+			/*
+			* @function		StatusTimeoutCBL
+			* @description	This static callback function is called by iPrinterTimer when the 
+			*				status timer event occurs.
+			* @param		
+			* @return		
+			*/
+			static TBool StatusTimeoutCBL(TAny *aWho);
+
+			/*
+			* @function		SubmitTimeoutCBL
+			* @description	This static callback function is called by iPrinterTimer when the 
+			*				submit timer event occurs.
+			* @param		TAny
+			* @return		TInt
+			*/
+			static TInt SubmitTimeoutCBL(TAny *aWho);
+
+			
+			
+
+			// ===============================
+			// From MProtPrintingDevice.
+			// ===============================
+			// General
+			virtual void ConstructL(const TDesC& aDLLPath);
+			virtual TVersion Version();
+			virtual TUint SupportedProtocols();
+			// Discovery.
+			virtual void StartDiscoveryL(MProtDiscoveryObserver& aObserver, TUint aProtocols = 0);
+			virtual TInt RemoveCachedDeviceL(TInt aDeviceID);
+			virtual void CancelDiscovery(TBool aDoCallBack = ETrue);
+			// Print.
+			virtual TInt CreatePrintJobL(TInt aDeviceID, RPointerArray<TDesC>& aImages, MProtPrintEventObserver& aObserver);
+			virtual void SubmitPrintJobL();
+			virtual TInt CancelPrintJob();
+			virtual TInt ContinuePrintJobL();
+			virtual TInt GetNumPrintPages();
+			virtual TInt GetPrintJobStatus();
+			virtual TInt GetPrinterStatus(TInt aDeviceID);
+			// Capabilities.
+			virtual TInt GetDeviceCapabilityIDsL(TInt aDeviceID, RArray<TInt>& aCapabilityIDs);
+			virtual TInt GetDeviceCapabilityL(TInt aDeviceID, TInt aCapabilityID, TPrintCapability& aCapability);
+			virtual TInt GetJobSetting(TInt aCapabilityID, TInt& aValue);
+			virtual TInt SetJobSettingL(TInt aCapabilityID, TInt aValue, TInt& aAffectedCapability);
+			// Preview.
+			virtual TInt GetNumPreviewPages();
+			virtual TInt GetJobTemplateIconL(TInt aTemplateID, TInt& aFsBitmapHandle);
+			virtual TInt CreatePreviewImage(TInt aPageNumber);
+
+			virtual void RegisterIdleObserver(MProtIdleObserver* aObserver);
+		
+			virtual void SetNumsOfCopiesL( const RArray<TInt>& aNumsOfCopies, TInt& aErr );
+
+			// ===============================
+			// From MPCPObserver
+			// ===============================
+			virtual void CreateJobResponse( CUpnpAction* aAction, TInt aErrorCode );
+			virtual void CancelJobResponse( CUpnpAction* aAction, TInt aErrorCode );
+			virtual void GetPrinterAttributesResponse( CUpnpAction* aAction, TInt aErrorCode );
+			virtual void GetJobAttributesResponse( CUpnpAction* aAction, TInt aErrorCode );
+			virtual void GetMarginsResponse( CUpnpAction* aAction, TInt aErrorCode );
+	        virtual void GetMediaListResponse( CUpnpAction* aAction, TInt aErrorCode );
+			virtual void StateUpdatedResponse( const TDesC8& aPrinterState, 
+                                           const TDesC8& aPrinterStateReasons, 
+                                           const TDesC8& aJobIdList,
+	                                       const TDesC8& aJobEndState, 
+                                           const TDesC8& aJobMediaSheetsCompleted, 
+                                           const TDesC8& aJobAbortState,
+                                           const TDesC8& aContentCompleteList );
+			virtual void DeviceDiscoveredL( CUpnpDevice* aDevice );
+			virtual void DeviceDisappeared( CUpnpDevice* aDevice );
+			// state events
+			virtual void PrinterStateUpdated( const TDesC8& aEvent );
+			virtual void PrinterStateReasonsUpdated( const TDesC8& aEvent );
+			virtual void JobIdListUpdated( const TDesC8& aEvent );
+			virtual void JobEndStateUpdated( const TDesC8& aEvent );
+			virtual void JobMediaSheetsCompletedUpdated( const TDesC8& aEvent );
+			virtual void ContentCompleteListUpdated( const TDesC8& aEvent );
+			virtual void JobAbortStateUpdated( const TDesC8& aEvent );
+
+		protected:
+		
+
+		private:
+
+			/*
+			* @function 	StartDiscoveryInternalL
+			* @description	Non-leaving interface for MProtPrintingDevice method StartDiscoveryL
+			*				for ImagePrint compliance. Informs observer about leaves by call back method.
+			* @param 		TInt protocol identifier bitmap
+			*/
+			void StartDiscoveryInternalL(TUint aProtocol);
+
+			/*
+			* @function 	RestartControlPointL
+			* @description	Restarts the printer control point
+			*/
+			void RestartControlPointL();
+
+			/*
+			* @function 	SendPrinterListL
+			* @description	Returns the device list to MProtDiscoveryObserver object
+			* @param		TBool
+			*/
+			void SendPrinterListL(TBool aSync = ETrue);
+
+			/*
+			* @function 	DoDiscoveryTimeoutL
+			* @description	Ends the first device discovery session. This function is called
+			*				by the static callback function DiscoveryTimeoutCBL.
+			* @param		TBool aDoCallBack If ETrue then protocol client is notified.
+			* @return 		TBool
+			*/
+			TBool DoDiscoveryTimeoutL(TBool aDoCallBack);
+
+			/*
+			* @function 	DoSubmitTimeoutL
+			* @description	This function is executed after submit time out expires.
+			* @return 		TInt
+			*/
+			void DoSubmitTimeoutL();
+
+			/*
+			* @function 	SubmitJobToPcpL
+			* @description	Submits the printing job to PCP
+			* @param		CDevice& Reference to the printer to be used in printing
+			* @param		TInt The ID of the printer to be used in printing
+			*/
+			void SubmitJobToPcpL(CUpnpDevice& aPrinter, TInt aPrinterID);
+
+			/*
+			* @function 	SubmitJobToPcpL
+			* @description	Submits the printing job to PCP
+			* @param		TInt The ID of the printer to be used in printing
+			*/
+			void SubmitJobToPcpL(TInt aDeviceID);
+
+			/*
+			* @function 	DoStatusTimeoutL
+			* @description	Handles time out event in printer communication.
+			* @return 		TBool
+			*/
+			TBool DoStatusTimeoutL();
+
+			/*
+			* @function 	InitJobL
+			* @description	Initializes the printing jobs to job container
+			* @param		TInt 			Printer for printing jobs
+			* @param		RPointerArray	File paths for files to be printed
+			*/
+			void InitJobL(TInt aDeviceId, RPointerArray<TDesC>& aImages);
+
+			/*
+			* @function 	StartPrintingL
+			* @description	Sends the printing jobs to the UPnP Printer Control Point
+			*/
+			void StartPrintingL();
+
+			/*
+			* @function 	DoCancelPrinting
+			* @description	Cancels the ongoing printing job. Returns KErrInvalidSequence if state is not 
+			*				EUPnPSubmittingJob, EUPnPPrintingStarted or EUPnPPrinting.
+			* @return 		TInt	System wide error code
+			*/
+			TInt DoCancelPrinting();
+			
+			/*
+			* @function 	UpdatePrintingStatus
+			* @description	Updates the status of printing jobs and informs the printing observer about progress and events
+			* @param		const TDesC8& aPrinterState
+			*/
+			void UpdatePrintingStatus(const TUPnPState aJobState);
+		
+			
+			/*
+			* @function		FinishPrinting
+			* @description	Executes the basic operations to be done when printing is done.
+			*/
+			void FinishPrinting();
+
+			/*
+			* @function		FinishPrinting
+			* @description	Overloads FinishPrinting and informs observer about occurred error.
+			* @param		TInt Symbian wide error code
+			* @param		TInt ImagePrint specific (error) message code
+			*/
+			void FinishPrinting(TInt aErrorCode, TInt aErrorMessage);
+
+			/*
+			* @function		ResetTimer
+			* @description	Resets the timer and initializes timer related flags.
+			*/
+			void ResetTimer();			
+
+			/*
+			* @function		StartTimer
+			* @description	Starts the timer and resets it first.
+			* @param		TTimeIntervalMicroSeconds32	Delay for the timer
+			* @param		TTimeIntervalMicroSeconds32 Interval for timer to expire
+			* @param		TCallBack					Call back function when timer expires
+			*/
+			void StartTimer(TTimeIntervalMicroSeconds32 aDelay,TTimeIntervalMicroSeconds32 anInterval,TCallBack aCallBack);			
+
+			/*
+			* @function		GetPrinter
+			* @description	Returns a pointer to the current printer.
+			* @return		CDevice* Current printer or NULL
+			*/
+			CUpnpDevice* GetPrinter();
+			
+		private:
+			// @var iPrinterControl		Control point to UPnP
+			CPrinterControlPoint* iPrinterControl;
+			
+			// @var iPrinterContainer	Container for printers
+			CUPPrinterContainer* iPrinterContainer;
+			
+			// @var iPrintingJob		Printing job
+			CUPPrintingJob* iPrintingJob;
+			
+			// @var iPrinterTimer		Array of discovered printers
+			CPeriodic* iPrinterTimer;
+			
+			// @var iPrintFactory		XHTML-print file factory
+			CUPPrintFactory* iPrintFactory;
+			
+			// @var iPrinterState		State information of the object
+			TUPnPProtocolState iState;
+
+			// @var iPrintersFound		Indicates if there are printers found
+			TBool iPrintersFound;
+
+			// @var iStatusTimeout		This variable is set to ETrue when a status time out occurs
+			TBool iStatusTimeout;
+
+			// @var iFbsBitmap			(Dummy) bitmap for icon template
+			CFbsBitmap* iFbsBitmap;
+			
+			// @var iPendingCount		Counter to avoid too long pending while printing
+			TInt iPendingCount;
+			
+			// @var iFriendlyName		In Home network configuration defined name for the device
+			TBuf8<256> iFriendlyName;
+			
+			// @var iTriedReadCacheAndFail   To check that never trying read cache file more than one time, if we don't have it.
+			TBool iTriedReadCacheAndFail;
+			
+	};
+
+#endif // CUPNPPRINTINGDEVICE_H
+
+//  End of File