ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/inc/tbtmapper.h
changeset 0 d11fb78c4374
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ImagePrint/ImagePrintEngine/DeviceProtocols/btprotocol/inc/tbtmapper.h	Thu Dec 17 08:45:53 2009 +0200
@@ -0,0 +1,318 @@
+/*
+* Copyright (c) 2004-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:  Contains the TBtMapper class definition.
+*
+*/
+
+
+#ifndef TBTMAPPER_H
+#define TBTMAPPER_H
+
+#include <e32base.h>
+#include <libc/stdlib.h>
+
+#include "printmessagecodes.h"
+#include "printcapabilitycodes.h"
+
+enum TBtPrintState
+{
+	EBtStateUnknown = 0,	//@brief job state not known
+	EBtStateIdle,			//@brief printer state idle
+	EBtStateProcessing,		//@brief printer processing
+	EBtStateStopped,		//@brief printer or job state stopped
+	EBtStatePrinting,		//@brief printing job
+	EBtStateWaiting,		//@brief job is waiting
+	EBtStateCompleted,		//@brief job ready
+	EBtStateAborted,		//@brief job aborted for some error
+	EBtStateCancelled,		//@brief job cancelled
+	EBtStateSending			//@brief sending job. Internal state to indicate the data is about transmissed.
+};
+
+_LIT8(KBtStateUnknown, 		"unknown");
+_LIT8(KBtStateIdle, 		"idle");
+_LIT8(KBtStateProcessing, 	"processing");
+_LIT8(KBtStateStopped, 		"stopped");
+_LIT8(KBtStatePrinting, 	"printing");
+_LIT8(KBtStateWaiting, 		"waiting");
+_LIT8(KBtStateCompleted, 	"completed");
+_LIT8(KBtStateAborted, 		"aborted");
+_LIT8(KBtStateCancelled, 	"cancelled");
+
+_LIT8(KPrintReasonNone, 				"none");
+_LIT8(KPrintReasonAttentionRequired, 	"attention-required");
+_LIT8(KPrintReasonMediaJam, 			"media-jam");
+_LIT8(KPrintReasonPaused, 				"paused");
+_LIT8(KPrintReasonDoorOpen, 			"door-open");
+_LIT8(KPrintReasonMediaLow, 			"media-low");
+_LIT8(KPrintReasonMediaEmpty, 			"media-empty");
+_LIT8(KPrintReasonOutputAreaAlmostFull,	"output-area-almost-full");
+_LIT8(KPrintReasonOutputAreaFull, 		"output-area-full");
+_LIT8(KPrintReasonMarkerSupplyLow, 		"marker-supply-low");
+_LIT8(KPrintReasonMarkerSupplyEmpty, 	"marker-supply-empty");
+_LIT8(KPrintReasonMarkerFailure, 		"marker-failure");
+_LIT8(KPrintReasonMediaChangeRequest, 	"media-change-request");
+_LIT8(KPrintReasonVendorDefined, 		"vendor-defined");
+_LIT8(KPrintReasonHwError, 				"hardware-error");
+_LIT8(KPrintReasonUriNotFound, 			"external-access-uri-not-found");
+_LIT8(KPrintReasonObjectFailure, 		"external-access-object-failure");
+_LIT8(KPrintReasonFormatError, 			"external-access-doc-format-error");
+_LIT8(KPrintReasonHttpError, 			"external-access-http-error");
+_LIT8(KPrintReasonCopies, 				"copies");
+_LIT8(KPrintReasonSides, 				"sides");
+_LIT8(KPrintReasonNumberUp, 			"number-up");
+_LIT8(KPrintReasonOrientationRequested,	"orientation-requested");
+_LIT8(KPrintReasonMediaSize, 			"media-size");
+_LIT8(KPrintReasonMediaType, 			"media-type");
+_LIT8(KPrintReasonPrintQuality, 		"print-quality");
+_LIT8(KPrintReasonTextLayout, 			"text-layout");
+_LIT8(KPrintReasonImageLayout, 			"image-layout");
+_LIT8(KPrintReasonImageOrientation, 	"image-orientation");
+_LIT8(KPrintReasonPdlFidelity, 			"pdl-fidelity");
+_LIT8(KPrintReasonFontFamily, 			"font-family");
+_LIT8(KPrintReasonFontSize, 			"font-size");
+
+
+// Paper size
+// According to the "ftp://ftp.pwg.org/pub/pwg/standards/pwg5101.1.pdf",
+// only the size of paper is defined
+_LIT8(KPaperSizeMax,	"custom_max_");	//custom_max_[nn]x[nn][mm|in]
+_LIT8(KPaperSizeMin,	"custom_min_");	//custom_min_[nn]x[nn][mm|in]
+_LIT8(KPaperSizeA6, 	"_105x148mm");	//iso_a6_105x148mm
+_LIT8(KPaperSizeA4, 	"_210x297mm");	//iso_a4_210x297mm
+_LIT8(KPaperSize5x7, 	"_5x7in");		//na_5x7_5x7in
+_LIT8(KPaperSize4x6, 	"_4x6in");		//na_index-4x6_4x6in
+_LIT8(KPaperSizeLetter,	"_8.5x11in");	//na_letter_8.5x11in
+
+// Quality
+_LIT8(KQualityDraft, 	"draft");
+_LIT8(KQualityNormal, 	"normal");
+_LIT8(KQualityHigh, 	"high");
+
+_LIT8(KHexPrefix, "0x");
+
+/**
+ *	@brief A printer abstraction.
+ *
+ *	Class representing the basic properties of a printing device.
+ *	Published as part of the ImagePrint Server API.
+ */
+class TBtMapper
+	{
+	public:
+
+		inline static TInt32 HexToInt(const TDesC8& aString)
+		{
+			TInt len(0);
+			if( KErrNotFound <  aString.Find(KHexPrefix()))
+				len = KHexPrefix().Length();
+
+			TPtrC8 str = aString.Right(aString.Length()-len);
+
+			TLex8 lex(str);
+			TUint32 val = KErrNotFound;
+			lex.Val(val, EHex);
+			LOG82("[TBtMapper::OperationStatus]\t %S: %d", &aString, val);
+			return val;
+		}
+
+		inline static TInt32 HexToInt(const TDesC& aString)
+		{
+			TBuf8<0x100> str;
+			str.Copy(aString);
+			return HexToInt(str);
+		}
+
+		inline static TInt32 Int(const TDesC8& aString)
+		{
+			TLex8 lex(aString);
+			TInt32 value = KErrNotFound;
+			lex.Val(value);
+			return value;
+		}
+
+		inline static TInt32 Int(const TDesC& aString)
+		{
+			TLex lex(aString);
+			TInt32 value = KErrNotFound;
+			lex.Val(value);
+			return value;
+		}
+
+		inline static TUint32 Uint(const TDesC8& aString)
+		{
+			TUint32 value = Int(aString);
+			return value;
+		}
+
+		inline static TUint32 Uint(const TDesC& aString)
+		{
+			TUint32 value = Int(aString);
+			return value;
+		}
+
+		inline static TInt State(const TDesC8& aStrState)
+		{
+			if(0 == aStrState.Compare(KBtStateUnknown)) //job
+				return EBtStateUnknown;
+			if(0 == aStrState.Compare(KBtStateIdle)) // printer
+				return EBtStateIdle;
+			if(0 == aStrState.Compare(KBtStateProcessing))  // printer
+				return EBtStateProcessing;
+			if(0 == aStrState.Compare(KBtStateStopped)) //job, printer
+				return EBtStateStopped;
+			if(0 == aStrState.Compare(KBtStatePrinting)) //job
+				return EBtStatePrinting;
+			if(0 == aStrState.Compare(KBtStateWaiting)) //job
+				return EBtStateWaiting;
+			if(0 == aStrState.Compare(KBtStateCompleted)) //job
+				return EBtStateCompleted;
+			if(0 == aStrState.Compare(KBtStateAborted)) //job
+				return EBtStateAborted;
+			if(0 == aStrState.Compare(KBtStateCancelled)) //job
+				return EBtStateCancelled;
+
+			return EBtStateUnknown;
+		}
+
+		inline static TInt PrintError(const TDesC8& aCode)
+		{
+			if(0 == aCode.Compare(KPrintReasonNone))
+				return ENoMessage;
+			if(0 == aCode.Compare(KPrintReasonAttentionRequired))
+				return EPrintReasonAttentionRequired;
+			if(0 == aCode.Compare(KPrintReasonMediaJam))
+				return EPbStatusErrorReasonPaperJam;
+			if(0 == aCode.Compare(KPrintReasonPaused))
+				return EPrintReasonPaused;
+			if(0 == aCode.Compare(KPrintReasonDoorOpen))
+				return EPbStatusErrorReasonHardwareCoverOpen;
+			if(0 == aCode.Compare(KPrintReasonMediaLow))
+				return EPbStatusErrorReasonPaperNearlyEmpty;
+			if(0 == aCode.Compare(KPrintReasonMediaEmpty))
+				return EPbStatusErrorReasonPaperEmpty;
+			if(0 == aCode.Compare(KPrintReasonOutputAreaAlmostFull))
+				return EPrintReasonOutputAreaAlmostFull;
+			if(0 == aCode.Compare(KPrintReasonOutputAreaFull))
+				return EPrintReasonOutputAreaFull;
+			if(0 == aCode.Compare(KPrintReasonMarkerSupplyLow))
+				return EPrintReasonMarkerSupplyLow;
+			if(0 == aCode.Compare(KPrintReasonMarkerSupplyEmpty))
+				return EPrintReasonMarkerSupplyEmpty;
+			if(0 == aCode.Compare(KPrintReasonMarkerFailure))
+				return EPrintReasonMarkerFailure;
+			if(0 == aCode.Compare(KPrintReasonMediaChangeRequest))
+				return EPbStatusErrorReasonPaperMedia;
+			if(0 == aCode.Compare(KPrintReasonVendorDefined))
+				return EPbCheckPrinter;
+
+			return EPbCheckPrinter;
+		};
+
+		inline static TInt HttpError(TInt /*aCode*/)
+		{
+			return EPbCheckPrinter;
+		};
+
+		inline static TInt OperationStatus(const TDesC8& aCode)
+		{
+		    return HexToInt(aCode);
+		}
+
+		inline static void Layout(const TDesC8& aCode, RArray<TInt>& aArray)
+		{
+			TInt layout;
+			switch(Int(aCode))
+			{
+				case 16:
+					layout = EPrintCapabLayout16Up;
+					aArray.Append(layout);
+				case 12:
+					layout = EPrintCapabLayout12Up;
+					aArray.Append(layout);
+				case 9:
+					layout = EPrintCapabLayout9Up;
+					aArray.Append(layout);
+				case 6:
+					layout = EPrintCapabLayout6Up;
+					aArray.Append(layout);
+				case 4:
+					layout = EPrintCapabLayout4Up;
+					aArray.Append(layout);
+				case 2:
+					layout = EPrintCapabLayout2Up;
+					aArray.Append(layout);
+				case 1:
+					layout = EPrintCapabLayout1UpBorder;
+					aArray.Append(layout);
+				default:
+					layout = EPrintCapabLayout1UpBorderless;
+					aArray.Append(layout);
+				break;
+				
+			}
+		};
+
+		inline static TInt Size(const TDesC8& aCode)
+		{
+			if(0 <= aCode.Find(KPaperSize4x6))
+				return EPrintCapabPaperSize4x6;//default
+			if(0 <= aCode.Find(KPaperSizeA4))
+				return EPrintCapabPaperSizeA4;
+			if(0 <= aCode.Find(KPaperSizeA6))
+				return EPrintCapabPaperSizeA6;
+			if(0 <= aCode.Find(KPaperSize5x7))
+				return EPrintCapabPaperSize5x7;
+			if(0 <= aCode.Find(KPaperSizeLetter))
+				return EPrintCapabPaperSizeLetter;		
+			return KErrNotSupported;
+		};
+
+		inline static TInt Quality(const TDesC8& aCode)
+		{
+			if(0 <= aCode.Find(KQualityDraft))
+				return EPrintCapabQualityDraft;
+			if(0 <= aCode.Find(KQualityNormal))
+				return EPrintCapabQualityNormal;
+			if(0 <= aCode.Find(KQualityHigh))
+				return EPrintCapabQualityFine;			
+			return EPrintCapabQualityDefault;
+		};
+
+		inline static TInt TripletValue(const TDesC8& aParams, TInt& aPos, TUint& aTag)
+		{
+			// get tag
+			aTag = aParams[aPos];
+			++aPos;
+
+			//get len
+			TInt len = aParams[aPos];
+			++aPos;
+
+			TInt value = 0;
+			TInt shift = (len-1)*8;
+			while(0 <= shift)
+			{
+				value |= (aParams[aPos] << shift);
+				++aPos;
+				shift -= 8;
+			}
+
+			return value;
+		};
+
+	};
+
+#endif // TBTMAPPER_H
+
+//  End of File