diff -r 159fc2f68139 -r d59c248c9d36 ImagePrint/ImagePrintEngine/DeviceProtocols/upnpprotocolfw2/inc/cupnpprintingdevice.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ImagePrint/ImagePrintEngine/DeviceProtocols/upnpprotocolfw2/inc/cupnpprintingdevice.h Wed Sep 01 12:30:38 2010 +0100 @@ -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 +#include +#include +#include + +#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& 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& 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& 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& 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