printingservices/printerdriversupport/src/PDRPORT.CPP
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/printingservices/printerdriversupport/src/PDRPORT.CPP	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,304 @@
+// Copyright (c) 1997-2009 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:
+//
+
+#include <pdrport.h>
+#include "printerport.h"
+
+_LIT(KPdrStoreECUART,"ECUART");
+
+EXPORT_C CFilePrinterPort* CFilePrinterPort::NewL(const TDesC& aFileName)
+	{
+	CFilePrinterPort* fileprinterport = new(ELeave) CFilePrinterPort(aFileName);
+	CleanupStack::PushL(fileprinterport);
+	fileprinterport->ConstructL();
+	CleanupStack::Pop();
+	return fileprinterport;
+	}
+
+EXPORT_C CFilePrinterPort::~CFilePrinterPort()
+	{
+	iFile.Close();
+	if (iCancelled)
+		iFs.Delete(iFileName);  // ignore error
+	iFs.Close();
+	}
+/** Implementation of the pure virtual function inherited from CPrinterPort.
+
+Writes data asynchronously to the concrete file printer port.
+     
+@param aBuf 	      A descriptor containing the data to be written to the file printer port. 
+@param aRequestStatus A reference to the request status object. 
+	   				  On completion contains KErrNone if the data is successfully written to 
+	   				  this file printer port, otherwise if the request is cancelled, this should 
+	   				  be set to KErrCancel.
+*/
+void CFilePrinterPort::WriteRequest(const TDesC8& aBuf, TRequestStatus& aRequestStatus)
+	{
+//	iFile.Write(aBuf,aRequestStatus); //!! real code with fixed F32
+//
+	TRequestStatus* pStatus=&aRequestStatus;			// F32 bug workaround code
+	User::RequestComplete(pStatus, iFile.Write(aBuf));	// F32 bug workaround code 
+	}
+
+void CFilePrinterPort::Cancel()
+	{
+	iCancelled = ETrue;
+	}
+
+void CFilePrinterPort::ConstructL()
+	{
+	User::LeaveIfError(iFs.Connect());
+	User::LeaveIfError(iFile.Replace(iFs, iFileName,EFileStream|EFileWrite));
+	}
+
+CFilePrinterPort::CFilePrinterPort(const TDesC& aFileName)
+:	iFileName(aFileName)
+	{
+	}
+
+EXPORT_C TOutputHandshake::TOutputHandshake()
+:	iXonXoff(EFalse),
+	iCts(ETrue),
+	iDsr(ETrue),
+	iDcd(EFalse)
+	{
+	}
+
+EXPORT_C void TOutputHandshake::InternalizeL(RReadStream& aStream)
+	{
+	iXonXoff = aStream.ReadInt8L();
+	iCts = aStream.ReadInt8L();
+	iDsr = aStream.ReadInt8L();
+	iDcd = aStream.ReadInt8L();
+	}
+
+EXPORT_C void TOutputHandshake::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt8L(iXonXoff);
+	aStream.WriteInt8L(iCts);
+	aStream.WriteInt8L(iDsr);
+	aStream.WriteInt8L(iDcd);
+	}
+
+EXPORT_C TSerialPrinterPortConfig::TSerialPrinterPortConfig()
+:	iRate(EBps9600),
+	iDataBits(EData8),
+	iStopBits(EStop1),
+	iParity(EParityNone),
+	iIgnoreParity(EFalse),
+	iHandshake()
+	{
+	}
+
+EXPORT_C void TSerialPrinterPortConfig::InternalizeL(RReadStream& aStream)
+	{
+	iRate = (TBps) aStream.ReadInt8L();
+	iDataBits = (TDataBits) aStream.ReadInt8L();
+	iStopBits = (TStopBits) aStream.ReadInt8L();
+	iParity = (TParity) aStream.ReadInt8L();
+	iIgnoreParity = aStream.ReadInt8L();
+	iHandshake.InternalizeL(aStream);
+	}
+
+EXPORT_C void TSerialPrinterPortConfig::ExternalizeL(RWriteStream& aStream) const
+	{
+	aStream.WriteInt8L(iRate);
+	aStream.WriteInt8L(iDataBits);
+	aStream.WriteInt8L(iStopBits);
+	aStream.WriteInt8L(iParity);
+	aStream.WriteInt8L(iIgnoreParity);
+	iHandshake.ExternalizeL(aStream);
+	}
+
+EXPORT_C CCommPrinterPort* CCommPrinterPort::NewL(const TDesC& aCsyName, const TDesC& aPortName, const TSerialPrinterPortConfig& aConfig, const TFifo aFifo)
+	{
+	CCommPrinterPort* commprinterport = new(ELeave) CCommPrinterPort;
+	CleanupStack::PushL(commprinterport);
+	commprinterport->ConstructL(aCsyName, aPortName, aConfig, aFifo);
+	CleanupStack::Pop();
+	return commprinterport;
+	}
+
+EXPORT_C CCommPrinterPort::~CCommPrinterPort()
+	{
+	iComm.Close();
+	iCommServ.Close();
+	}
+
+EXPORT_C void CCommPrinterPort::WriteRequest(const TDesC8& aBuf, TRequestStatus& aRequestStatus)
+	{
+	iComm.Write(aRequestStatus, 20000000, aBuf);  // Times out after 20 seconds
+	}
+
+EXPORT_C void CCommPrinterPort::Cancel()
+	{
+	iComm.WriteCancel();
+	}
+
+EXPORT_C void CCommPrinterPort::ConstructL(const TDesC& aCsyName, const TDesC& aPortName, const TSerialPrinterPortConfig& aConfig, const TFifo aFifo)
+	{
+	User::LeaveIfError(iCommServ.Connect());
+	User::LeaveIfError(iCommServ.LoadCommModule(aCsyName)); 
+	User::LeaveIfError(iComm.Open(iCommServ, aPortName, ECommExclusive));
+
+	TCommConfig config;
+	iComm.Config(config);
+	config().iRate = aConfig.iRate;
+	config().iDataBits = aConfig.iDataBits;
+	config().iStopBits = aConfig.iStopBits;
+	config().iParityErrorChar = STATIC_CAST(TText8, aConfig.iParity);
+	if (aConfig.iIgnoreParity)
+		config().iParityErrorChar = KConfigParityErrorIgnore;
+	TUint handshake = 0;
+	if (aConfig.iHandshake.iXonXoff)
+		handshake = handshake | KConfigObeyXoff;
+	if (aConfig.iHandshake.iCts)
+		handshake = handshake | KConfigObeyCTS;
+	if (aConfig.iHandshake.iDsr)
+		handshake = handshake | KConfigObeyDSR;
+	if (aConfig.iHandshake.iDcd)
+		handshake = handshake | KConfigObeyDCD;
+	config().iHandshake = handshake;
+	config().iFifo = aFifo;
+	User::LeaveIfError(iComm.SetConfig(config));
+	}
+
+EXPORT_C CCommPrinterPort::CCommPrinterPort()
+:	CPrinterPort(),
+	iCommServ(),
+	iComm()
+	{
+	}
+
+EXPORT_C CSerialPrinterPort* CSerialPrinterPort::NewL(const TDesC& aPortName, const TSerialPrinterPortConfig& aConfig)
+	{
+	CSerialPrinterPort* serialprinterport=new(ELeave) CSerialPrinterPort(aConfig);
+	CleanupStack::PushL(serialprinterport);
+	serialprinterport->ConstructL(aPortName);
+	CleanupStack::Pop();
+	return serialprinterport;
+	}
+
+EXPORT_C CSerialPrinterPort::~CSerialPrinterPort()
+	{
+	}
+
+EXPORT_C TSerialPrinterPortConfig CSerialPrinterPort::Config()
+	{
+	return iConfig;
+	}
+
+void CSerialPrinterPort::ConstructL(const TDesC& aPortName)
+	{
+	CCommPrinterPort::ConstructL(KPdrStoreECUART, aPortName, iConfig);
+	}
+
+CSerialPrinterPort::CSerialPrinterPort(const TSerialPrinterPortConfig& aConfig)
+:	CCommPrinterPort(),
+	iConfig(aConfig)
+	{
+	}
+
+EXPORT_C CParallelPrinterPort* CParallelPrinterPort::NewL(const TDesC& aPortName)
+	{
+	CParallelPrinterPort* parallelprinterport = new(ELeave) CParallelPrinterPort;
+	CleanupStack::PushL(parallelprinterport);
+	parallelprinterport->ConstructL(aPortName);
+	CleanupStack::Pop();
+	return parallelprinterport;
+	}
+
+EXPORT_C CParallelPrinterPort::~CParallelPrinterPort()
+	{
+	}
+
+void CParallelPrinterPort::ConstructL(const TDesC& aPortName)
+	{
+	TSerialPrinterPortConfig config;
+	config.iRate = EBps19200;
+	config.iHandshake.iXonXoff = ETrue;
+	config.iHandshake.iCts = EFalse;
+	config.iHandshake.iDsr = ETrue;
+	config.iHandshake.iDcd = ETrue;
+	CCommPrinterPort::ConstructL(KPdrStoreECUART, aPortName, config, EFifoDisable);
+
+	TRequestStatus stat;
+	iComm.Write(stat, 10, TPtrC8(NULL, 0));
+	User::WaitForRequest(stat);
+
+	TCommConfig buf;
+	iComm.Config(buf);
+	buf().iHandshake |= (KConfigFailDSR | KConfigFailDCD);
+	User::LeaveIfError(iComm.SetConfig(buf));
+	}
+
+CParallelPrinterPort::CParallelPrinterPort()
+:	CCommPrinterPort()
+	{
+	}
+
+EXPORT_C CIrdaPrinterPort* CIrdaPrinterPort::NewL()
+	{
+	CIrdaPrinterPort* irdaprinterport = new(ELeave) CIrdaPrinterPort;
+	CleanupStack::PushL(irdaprinterport);
+	irdaprinterport->ConstructL();
+	CleanupStack::Pop();
+	return irdaprinterport;
+	}
+
+EXPORT_C CIrdaPrinterPort::~CIrdaPrinterPort()
+	{
+	}
+
+void CIrdaPrinterPort::ConstructL()
+	{
+	TSerialPrinterPortConfig config;
+	_LIT(KPdrStoreIRCOMM,"IRCOMM");
+	_LIT(KPdrStoreIRCOMM0,"IrCOMM::0");
+	CCommPrinterPort::ConstructL(KPdrStoreIRCOMM, KPdrStoreIRCOMM0, config, EFifoDisable);
+	}
+
+CIrdaPrinterPort::CIrdaPrinterPort()
+:	CCommPrinterPort()
+	{
+	}
+
+EXPORT_C CEpocConnectPort* CEpocConnectPort::NewL()
+	{
+	CEpocConnectPort* epocconnectport = new(ELeave) CEpocConnectPort;
+	CleanupStack::PushL(epocconnectport);
+	epocconnectport->ConstructL();
+	CleanupStack::Pop();
+	return epocconnectport;
+	}
+
+EXPORT_C CEpocConnectPort::~CEpocConnectPort()
+	{
+	}
+
+void CEpocConnectPort::ConstructL()
+	{
+	TSerialPrinterPortConfig config;
+	_LIT(KPdrStorePLPLPT,"PLPLPT");
+	_LIT(KPdrStorePLPLPT0,"PLPLPT::0");
+	CCommPrinterPort::ConstructL(KPdrStorePLPLPT, KPdrStorePLPLPT0, config, EFifoDisable);
+	}
+
+CEpocConnectPort::CEpocConnectPort()
+:	CCommPrinterPort()
+	{
+	}
+
+