--- /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 <e32std.h>
+#include <ecom/implementationproxy.h>
+#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<TPluginConfiguration>& 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<MOutputPlugin*>(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;
+ }
+