diff -r 000000000000 -r 08ec8eefde2f traceservices/tracefw/ulogger/src/outfrwkchans/serial/uloggerserialplugin.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/traceservices/tracefw/ulogger/src/outfrwkchans/serial/uloggerserialplugin.cpp Fri Jan 22 11:06:30 2010 +0200 @@ -0,0 +1,213 @@ +// Copyright (c) 2007-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 +#include +#include "uloggerserialplugin.h" + +#if defined(__LIGHTLOGGER_ENABLED) +#include "lightlogger.h" +#endif + +namespace Ulogger +{ + +#if defined (__WINS__) +_LIT(KPddDev, "ECDRV.PDD"); +#else +_LIT(KPddDev, "EUART1"); +#endif + +#if defined (__WINS__) +_LIT(KLddDev, "ECOMM.LDD"); +#else +_LIT(KLddDev, "ECOMM"); +#endif + +//settings for serial output plugin +_LIT(KPortNumber, "output_port"); + +/** +Creates an instance of CSerialWriter object +@return a pointer to the new created CSerialWriter Object +@leave KErrNoMemory if no memory +*/ + CSerialWriter* CSerialWriter::NewL() + { + CSerialWriter *me = new (ELeave) CSerialWriter; + CleanupStack::PushL(me); + me->ConstructL(); + CleanupStack::Pop(); + return me; + } + +/** +Public Destructor +*/ +CSerialWriter::~CSerialWriter() + { + Disconnect(); + } + +//default constructor +CSerialWriter::CSerialWriter() + { + } + +void CSerialWriter::ConstructL() + { + iReady = EFalse; + + TInt err = User::LoadPhysicalDevice(KPddDev); + if(err!=KErrNone && err!=KErrAlreadyExists) + User::Leave(err); + + err = User::LoadLogicalDevice(KLddDev); + if(err!=KErrNone && err!=KErrAlreadyExists) + User::Leave(err); + } + +void CSerialWriter::CloseOutputPlugin() + { + Disconnect(); + } + +TInt CSerialWriter::ConfigureOutputPlugin(const RPointerArray& aSettings) + { + TInt i = aSettings.Count(); + while(i-->0) + { + TPluginConfiguration* key = aSettings[i]; + + if(key->Key().Compare(KPortNumber) == 0) + { + TLex lex(key->Value()); + lex.Val(iPortNum); + } + } + + Disconnect(); + TInt err = Connect(); + if(err != KErrNone) + return err; + err = Config(); + + return KErrNone; + } + +TInt CSerialWriter::Connect() + { + if(!iReady) + { + TInt err = KErrNone; + err = iComm.Open(iPortNum); + if(err!=KErrNone) + { + iReady = EFalse; + return err; + } + else + iReady = ETrue; + } + return KErrNone; + } + +TInt CSerialWriter::Config() + { + TInt err = KErrNone; + if(iReady) + { + TCommConfig2 cfgBuf; + TCommConfigV02& cfg = cfgBuf(); + iComm.Config(cfgBuf); + cfg.iRate = EBps115200;// default EBps9600; + cfg.iDataBits = EData8;// default EData8; + cfg.iStopBits = EStop1;// default EStop1; + cfg.iParity = EParityNone;// default EParityNone; + cfg.iHandshake = 0;// default KConfigObeyCTS; + cfg.iParityError = KConfigParityErrorFail; + cfg.iFifo = EFifoEnable;// default EFifoEnable; + cfg.iSpecialRate = 0;// default 0; + cfg.iTerminatorCount = 0;// default 0; + cfg.iXonChar = 0x11;// default 0x11; // XON + cfg.iXoffChar = 0x13;// default 0x13; // XOFF + cfg.iParityErrorChar = 0;// default 0; + cfg.iSIREnable = ESIRDisable;// default ESIRDisable; + cfg.iSIRSettings = 0;// no default + + err = iComm.SetConfig(cfgBuf); + if(err!=KErrNone && err!=KErrInUse) + { + iReady = EFalse; + return(err); + } + } + + return err; + } + +TInt CSerialWriter::Disconnect() + { + if(iReady) + { + iReady = EFalse; + iComm.Close(); + } + return KErrNone; + } + +TInt CSerialWriter::Write(const TDesC8& aData) + { + TInt err = KErrNone; + + if(iReady) + { + TRequestStatus writeStatus; + iComm.Write(writeStatus, aData); + User::WaitForRequest(writeStatus); + err = writeStatus.Int(); + } + + return err; + } + + +TAny* CSerialWriter::GetInterfaceL(TPluginInterface aInterfaceId) + { + if(aInterfaceId == MOutputPlugin::iInterfaceId) + return static_cast(this); + else + return NULL; + } + +} // namespace + + +//Ecom Implementations +// Map the interface implementation UIDs to implementation factory functions +const TImplementationProxy ImplementationTable[] = + { + IMPLEMENTATION_PROXY_ENTRY(0x102836CB, Ulogger::CSerialWriter::NewL) + }; + + +// Exported proxy for instantiation method resolution. +EXPORT_C const TImplementationProxy* ImplementationGroupProxy( + TInt& aTableCount) + { + aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); + return ImplementationTable; + } +