bluetooth/btstack/common/blogger.cpp
changeset 51 20ac952a623c
parent 48 22de2e391156
child 52 321a10f609ef
--- a/bluetooth/btstack/common/blogger.cpp	Thu Sep 23 17:06:47 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,894 +0,0 @@
-// Copyright (c) 2001-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 "blogger.h"
-
-#ifndef BLOGGING__
-EXPORT_C TAny* CBlogger::GetFloggerInfo()
-	{
-	return 0;
-	}
-#endif
-
-#ifdef BLOGGING__
-#include "rfcommmuxer.h"
-#include "rfcommframe.h"
-
-
-CBlogger::~CBlogger()
-	{
-	delete ifilename;
-	ifile.Close ();
-	ifileserv.Close ();
-	}
-
-CBlogger::CBlogger() : 
-	iOutputWindowSize(KBlogOutputWindowDefault),
-	iVerbosityLevel(KBlogVerbosityAllLevels), 
-	iLayersToLogMask(KBlogAllLayers),
-	iLoggingMask(KBlogTypeLogAllMask)
-	{
-	}
-
-CBlogger* CBlogger::NewL()
-	{
-	CBlogger* self = new (ELeave)CBlogger();
-	self->ConstructL();
-	return self;
-	}
-
-void CBlogger::ConstructL()
-	{
-	User::LeaveIfError(ifileserv.Connect());
-	MakefilenameL(_L("Blog.txt"));
-	iFileExists = EFalse;
-	}
-
-TInt CBlogger::LoggingMask(TInt aLayer, TInt aVerbosity) const
-	{
-	if(aLayer&iLayersToLogMask)
-		{
-		if(aVerbosity<=iVerbosityLevel)
-			{
-			return iLoggingMask;
-			}
-		}
-	//else
-	return 0;
-	}
-
-CBloggette* CBlogger::GetLayerBloggette(TInt aLayer)
-	{
-	switch(aLayer)
-		{
-		case KBlogLayerLinkLayer :
-			{
-			return iLLBloggette;
-			}
-		case KBlogLayerL2CAP :
-			{
-			return iL2Bloggette;
-			}
-		case KBlogLayerRFComm :
-			{
-			return iRFBloggette;
-			}
-		default:
-			{
-			Panic(EBloggerLayerRequestedOutOfRange);
-			return NULL; //for compiler to shut up
-			}
-		};
-	}
-
-void CBlogger::Register(CBloggette* aLayerBloggette)
-/** 
-	only one per layer please
-*/
-	{
-	TUint layer = aLayerBloggette->Layer();
-	switch(layer)
-		{
-		case KBlogLayerLinkLayer:
-			{
-			__ASSERT_DEBUG(iLLBloggette==NULL,Panic(EBloggerLayerBloggetteAlreadyRegistered));
-			iLLBloggette=aLayerBloggette;
-			break;
-			}
-		case KBlogLayerL2CAP :
-			{
-			__ASSERT_DEBUG(iL2Bloggette==NULL,Panic(EBloggerLayerBloggetteAlreadyRegistered));
-			iL2Bloggette=aLayerBloggette;
-			break;
-			}
-		case KBlogLayerRFComm :
-			{
-			__ASSERT_DEBUG(iRFBloggette==NULL,Panic(EBloggerLayerBloggetteAlreadyRegistered));
-			iRFBloggette=aLayerBloggette;
-			break;
-			}
-		default:
-			{
-			Panic(EBloggerLayerRegistrationOutOfRange);
-			}
-		};
-	}
-
-
-TInt CBlogger::UpdateLoggingSettings(TUint aOptionType,const TDesC8& aOption)
-	{
-#define CHECK_OPT_IS_(type) {if (aOption.Size() != sizeof(type)) \
-										return KErrArgument;}
-	switch(aOptionType)
-		{
-		case KBloggerSetLayers:
-			{
-			CHECK_OPT_IS_(TInt);
-			iLayersToLogMask= *(TUint*)aOption.Ptr();
-			break;
-			}
-		case KBloggerSetVerbosity:
-			{
-			CHECK_OPT_IS_(TInt);
-			TInt verbosity=*(TUint*)aOption.Ptr();
-			if((verbosity<KBlogVerbosityOff)||(verbosity>KBlogVerbosityAllLevels))
-				{
-				return KErrArgument;
-				}
-			iVerbosityLevel= verbosity;
-			break;
-			}
-		case KBloggerSetLoggingMask:
-			{
-			CHECK_OPT_IS_(TInt);
-			iLoggingMask= *(TInt*)aOption.Ptr();
-			break;
-			}
-		case KBloggerSetMedium:
-			{
-			CHECK_OPT_IS_(TInt);
-			TInt mediumType=*(TUint*)aOption.Ptr();
-			if((mediumType!=KBlogOutputTypeIsFlogger)||(mediumType!=KBlogOutputTypeIsRDebug))
-				{//otherwise we will panic when we try to output
-				return KErrArgument;
-				}
-			iMediumType= mediumType;
-			break;
-			}
-		case KBloggerSetTestCaseName:
-			{
-			TInt length=Min(KRDBMaxLit,aOption.Length());
-			iTestCaseLit.Copy(((TDesC16*)aOption.Ptr())->Left(length));
-			BlogTestCase(iTestCaseLit);
-			break;
-			}
-		case KBloggerSetOutputWindow:
-			{
-			CHECK_OPT_IS_(TInt);
-			TInt windowSize=*(TUint*)aOption.Ptr();
-			if((windowSize<1)||(windowSize>KRDBMaxLit))
-				{
-				return KErrArgument;
-				}
-			iOutputWindowSize=windowSize;			
-			break;
-			}
-		case KBloggerSetTestCaseResult:
-			{
-			CHECK_OPT_IS_(TInt);
-			TInt tcResult=*(TUint*)aOption.Ptr();
-			if(tcResult>KBlogTestCaseResultUpperNo)
-				{
-				return KErrArgument;	
-				}
-			BlogTestCaseResult(tcResult);
-			break;
-			}
-		case KBloggerSetTesterMessage:
-			{
-			BlogTesterMessage(*(TDesC16*)aOption.Ptr());						
-			break;
-			}
-		case KBloggerSetAllOptions:
-			{
-			CHECK_OPT_IS_(TBlogSettings); // we care about the data pckgd not he pckg itself
-			TBlogSettingsPckg theSettings;
-			theSettings.Copy(aOption);
-
-			TInt verbosity=(theSettings()).iVerbosity;
-			if((verbosity<KBlogVerbosityOff)||(verbosity>KBlogVerbosityAllLevels))
-				{
-				return KErrArgument;
-				}
-
-			TInt mediumType=(theSettings()).iMediumToLog;
-			if((mediumType!=KBlogOutputTypeIsFlogger)&&(mediumType!=KBlogOutputTypeIsRDebug))
-				{//otherwise we will panic when we try to output
-				return KErrArgument;
-				}
-
-			TInt windowSize=(theSettings()).iOutputWindowSize;
-			if((windowSize<1)||(windowSize>KRDBMaxLit))
-				{
-				return KErrArgument;
-				}
-
-			iLayersToLogMask  =(theSettings()).iLayersToLog;
-			iVerbosityLevel   =verbosity;
-			iLoggingMask      =(theSettings()).iLoggingMask;
-			iMediumType       =mediumType;
-			iOutputWindowSize =windowSize;
-			iTestCaseLit      =(theSettings()).iTestCaseLit;
-			
-			if (iTestCaseLit!=KNullDesC)
-				BlogTestCase(iTestCaseLit);
-
-			break;
-			}
-		default:
-			{
-			return KErrArgument;
-			}
-		};
-	return KErrNone;
-	}
-
-
-void CBlogger::Panic(TBloggerPanic aPanic)
-	{
-	User::Panic(_L("BLogger Panic"),aPanic);
-	}
-
-void CBlogger::Blog(const TDesC& aMessage,TInt aFrameWindow)
-/**
-	Formats the message with a date and time preamble and blogs it.
-	But a limitation is that although it breaks the message in parts of
-	aFrameWindow size characters, it cannot accept amessage which is longer 
-	than KBlogMessageMaxLitLength
-*/
-	{
-	__ASSERT_DEBUG((KBlogMessageMaxLitLength-KBlogDateTimeLitLength)>=aMessage.Length(),Panic(EBloggerMessageLengthTooLong));
-	TBuf<KBlogMessageMaxLitLength> logMessage;
-	DoDateTimeFormat(logMessage);
-	logMessage.Append(aMessage);
-	DoBlog(logMessage,aFrameWindow);
-	}
-
-void CBlogger::Blog(const TDesC& aMessage)
-/**
-	Formats the message with a date and time preamble and blogs it.
-	But a limitation is that it cannot accept a message which is longer 
-	than KBlogMessageMaxLitLength.
-*/
-	{	
-	Blog(aMessage,iOutputWindowSize);
-	}
-
-
-void CBlogger::BlogTestCase(TDesC& aTestCaseName)
-	{
-	// output a preamble indicating new test case (or a repeat of the previous one:-)
-	// include time date and a Lit for the preamble
-	__ASSERT_DEBUG(KBlogTestCaseMaxLitLength>=KBlogDateTimeLitLength,Panic(EBloggerDescriptorLengthWasShorter));
-	TBuf<KBlogTestCaseMaxLitLength> testCaseString;
-	DoDateTimeFormat(testCaseString); // no need for ret val check here	
-	testCaseString.Append(KBlogTestCaseLit);
-	testCaseString.Append(aTestCaseName);
-	DoBlog(testCaseString,iOutputWindowSize);
-	}
-
-void CBlogger::BlogTesterMessage(TDesC& aTesterMessage)
-/**
-	A Test App can output a string in the Blogger logs through this method.
-	To do this the test app should issue a SetOpt of type KBloggerSetTesterMessage
-	and pass a packaged TDesC16.
-*/
-	{
-	TBuf<KBlogTesterMessageInfoMaxLitLength> tstInfoString;
-	DoDateTimeFormat(tstInfoString);
-	tstInfoString.Append(KBlogTesterMessageInfoLit);
-	tstInfoString.Append(aTesterMessage);
-	DoBlog(tstInfoString,iOutputWindowSize);
-//	DoBlog(aTesterMessage,iOutputWindowSize);
-	}
-
-void CBlogger::BlogTestCaseResult(TInt aTestCaseResult)
-	{
-	if(!(iTestCaseLit.Length())) //in the case the TC Lit was not setup
-		{
-		return;
-		}
-
-	TBuf<KBlogTestCaseResultMaxLitLength> tcMessage;
-	__ASSERT_DEBUG(KBlogTestCaseResultMaxLitLength>KBlogDateTimeLitLength,Panic(EBloggerDescriptorLengthWasShorter));	
-	DoDateTimeFormat(tcMessage);
-	
-	switch(aTestCaseResult)
-		{
-		case KBlogTestCaseResultPassed:
-			{
-			tcMessage.Append(KBlogTestCaseResultLitPass);
-			break;
-			}
-		case KBlogTestCaseResultFailed:
-			{
-			tcMessage.Append(KBlogTestCaseResultLitFailed);
-			break;
-			}
-		case KBlogTestCaseResultInconclusive:
-			{
-			tcMessage.Append(KBlogTestCaseResultLitInconclusive);
-			break;
-			}
-		case KBlogTestCaseResultSkipped:
-			{
-			tcMessage.Append(KBlogTestCaseResultLitSkipped);
-			break;
-			}
-		default:
-			{
-			// check your bounds checking in the handler
-			Panic(EBloggerTestCaseResultIsBogus); 
-			}
-		};
-	
-	tcMessage.Append(iTestCaseLit);
-	DoBlog(tcMessage,iOutputWindowSize);
-	}
-
-void CBlogger::DoBlog(const TDesC& aMessage,TInt aFrameWindow)
-	{	
-	TInt msgLength=aMessage.Length();
-	if(!msgLength)
-		{return;}
-
-	TInt min=Min(KRDBMaxLit,aMessage.Length());
-	TInt len=Min(min,aFrameWindow);
-		
-	TInt frames=msgLength/len; 
-	TInt lastFrameSize=msgLength%len;// i.e the remainder
-	
-	TInt position=0;
-	for(TInt f=0;f<frames;f++,position=f*len)
-		{
-		DoOutputToResourceL(aMessage.Mid(position,len)); //Qualified
-		}
-	// log last frame
-	if(lastFrameSize)
-		{		
-		DoOutputToResourceL(aMessage.Mid(position));  //Qualified
-		}
-	}
-
-TInt CBlogger::DoDateTimeFormat(TDes& aDesToPrepend)
-	{
-
-	//FIXME:if the options are for time critical logging then spare the date and time 
-	
-	if(aDesToPrepend.MaxLength()<KBlogDateTimeLitLength)
-		{
-		return KErrArgument;
-		}
-	TBuf<KBlogDateTimeLitLength> timeLit; // abit more bytes than needed
-	TTime time;
-	time.HomeTime();
-	TRAPD(errD,time.FormatL(aDesToPrepend,KBlogDateFormat));
-	if(errD)
-		{
-		//since we OOMed
-		aDesToPrepend.Append(KBlogBlankDate);
-		}
-	TRAPD(errT,time.FormatL(timeLit,KBlogTimeFormat));
-	if (errT)
-		{
-		timeLit.Copy(KBlogBlankTime);
-		}
-
-	aDesToPrepend.Append(timeLit);
-
-	// although OOM may have happened, but the point is to get the log out quickly
-	return KErrNone; 
-	}
-
-
-void CBlogger::HexDump(const TDesC& aDescription,const TDesC8& aHexFrame, TInt aFrameWindow)
-/**
-	It will trim the sDescription to fit in the aFrameWindow size.
-	It also log the HexFrame in chunks of size=aFrameWindow.
-*/
-	{
-	//255 is the max RDebug::Print size
-
-	DoBlog(aDescription,aFrameWindow);
-
-	TInt bufferSize=aHexFrame.Length();
-	if(!bufferSize)
-		{return;}
-
-	TInt frames=bufferSize/(aFrameWindow/5); // 5 is the size of the formating lit 
-	TInt lastFrameSize=(bufferSize*5)%aFrameWindow;// i.e the remainder
-	
-	TInt i=0;
-	TBuf<KRDBMaxLit> outBuf;
-
-	for ( TInt f=0;f<frames;f++)
-		{
-		outBuf.Zero();
-		for ( i = 0; i < aFrameWindow/5; ++i)
-			{// 5 is the size of the formating lit :-)
-			outBuf.AppendFormat(_L("0x%02x "),aHexFrame[(f*aFrameWindow/5)+i]);			
-			}
-		DoOutputToResourceL(outBuf); //Qualified
-		}
-
-	// log last frame
-	if(lastFrameSize)
-		{
-		outBuf.Zero();
-		for(i=(frames*aFrameWindow/5);i<bufferSize;i++)
-			{
-			outBuf.AppendFormat(_L("0x%02x "),aHexFrame[i]);
-			}
-		DoOutputToResourceL(outBuf); //Qualified
-		}
-	}
-void CBlogger::CreateBlogFileL()
-	{
-	//User::LeaveIfError(ifileserv.Connect());
-	User::LeaveIfError(ifile.Replace(ifileserv, *ifilename, EFileStream|EFileWrite));
-	}
-
-void CBlogger::DoFileL()
-	{
-	/*
-	if the file exists and is open then write to it 
-	otherwise create and open it
-	*/
-	TInt ret;
-	ret=ifile.Open(ifileserv,*ifilename,EFileStream|EFileWrite);	
-	if (ret==KErrNotFound) // file does not exist - create it
-		{
-		CreateBlogFileL();
-		}
-	iFileExists = ETrue;
-	}
-
-void CBlogger::MakefilenameL(const TDesC &aFileName)
-	{
-	//Connect to Fileserver
-	User::LeaveIfNull(ifilename=aFileName.AllocL());
-	TInt err = ifileserv.MkDirAll(*ifilename);
-	if ( (err != KErrAlreadyExists) && (err != KErrNone))
-		User::Leave(err);
-	}
-
-void CBlogger::DoOutputToResourceL(const TDesC& aMessage)
-	{
-	// It is reasonable to assume we only gonna have 2 types of output resource
-	// either COM:0 or File Flogging thus do the sipmlest thing here
-	
-	//iMediumType=1; //need this to be 1 for output to a file. 
-
-	switch(iMediumType) //yes I like dynamic binding myself but we only gonna have 2 isn't it ?
-		{
-		case KBlogOutputTypeIsRDebug:
-			{
-			RDebug::Print(_L("%S"),&aMessage);
-			break;
-			}
-		case KBlogOutputTypeIsFlogger:
-			{
-			//User::LeaveIfError(ifileserv.Connect());
-			//Makefilename(_L("Blog.txt"));
-			if(!iFileExists)
-				{
-				DoFileL();
-				}			
-			TBuf8<256> buf8;
-			buf8.Copy(aMessage);
-			User::LeaveIfError(ifile.Write(buf8));
-			User::LeaveIfError(ifile.Write(_L8("\r\n")));
-			User::LeaveIfError(ifile.Flush());
-			break;
-			}
-		default:
-			{
-			Panic(EBloggerResourceTypeIsBogus);
-			}
-		};
-
-	}
-
-void CBlogger::StoreFloggerInfo(TAny* aLogInfo)
-/**
-	Store the pointer from the HCI's TLS that indicates to which file the floffer should log.
-	This is necessary in order to be able (at will) to accomodate both Flogger
-	and Blogger functionality in the stack.
-
-	This method will only be used from the LinkMgr when Flogging is enabled.
-*/
-	{
-	iFloggerInfo=aLogInfo;
-	}
-
-
-EXPORT_C TAny* CBlogger::GetFloggerInfo()
-	{
-	return iFloggerInfo;
-	}
-
-void CBlogger::DoBloggerTests()
-	{
-#ifdef BLOGGING__SELF_TESTS__
-	LLQBLOG(1,Log(_L(" >>>>>>>>>>>>>>>>>> This is %d <<<<<<<<<<<<<<<<"),1));
-	LLQBLOG(1,Log(_L("123456789a123456789b123456789c123456789d123456789e123456789f123456789g123456789h123456789i")));
-	LLQBLOG(1,Log(_L(" a string %S and a number %d"),&_L("Andy"), 1));
-	LLQBLOG(1,HexDump(_L("A hex dump"),_L8(" read hex mate?"),10));
-	LLQBLOG(1,HexDump(_L("A long hex dump"),_L8("123456789a123456789b123456789c123456789d123456789e123456789f123456789g"),80));
-	
-	// Testing test case Lit setup 
-	TBuf<KRDBMaxLit> tcName(_L("My First Test Case ,NO1"));
-	TPckgBuf<TBlogTestCaseLit> tcNamePckg(tcName);
-	UpdateLoggingSettings(KBloggerSetTestCaseName,tcNamePckg);
-	
-	// Testing Test Case Results
-	TPckgBuf<TInt> tcResult(KBlogTestCaseResultPassed);
-	UpdateLoggingSettings(KBloggerSetTestCaseResult,tcResult);
-
-	//Testing Test app messages
-	TBuf<KRDBMaxLit> tstMsg(_L("This is message from the tester saying it is doing a test"));
-	TPckgBuf<TBlogTestCaseLit> tstMsgPckg(tstMsg);
-	UpdateLoggingSettings(KBloggerSetTesterMessage,tstMsgPckg);
-#endif
-	}
-
-// Blogettes
-
-CBloggette::~CBloggette()
-	{
-	}
-
-CBloggette::CBloggette(CBlogger* aProvider, TInt aLayer) : 
-	iLayer(aLayer),
-	iBlogger(aProvider)
-	{
-	}
-
-void CBloggette::Log(TRefByValue<const TDesC> aFormatingLit, ...)
-/**
-	The maximum length of the allowed string is 255.
-*/
-	{
-	VA_LIST tmpArgList;
-	VA_START(tmpArgList,aFormatingLit);
-	TBuf<KRDBMaxLit> blogBuf; 
-	blogBuf.Zero();
-	blogBuf.AppendFormatList(aFormatingLit, tmpArgList); //FIXME overflow handler possibly ?
-	iBlogger->Blog(blogBuf);
-	VA_END(tmpArgList);
-	}
-
-  
-void CBloggette::HexDump(TRefByValue<const TDesC> aDescription,const TDesC8& aHexFrame, TInt aFrameWindow)
-	{
-	iBlogger->HexDump(aDescription,aHexFrame,aFrameWindow);
-	}
-
-TInt CBloggette::Layer() const
-	{
-	return iLayer;
-	}
-
-
-// Link Layer Bloggette
-
-CLLBloggette* CLLBloggette::NewL(CBlogger* aProvider, TInt aLayer)
-	{
-	CLLBloggette* self = new (ELeave)CLLBloggette(aProvider,aLayer);
-	self->iBlogger->Register(self);
-	return self;
-	}
-
-CLLBloggette::CLLBloggette(CBlogger* aProvider, TInt aLayer) 
-	: CBloggette(aProvider,aLayer)
-	{	
-	}
-
-CLLBloggette::~CLLBloggette()
-	{
-	}
-
-TDesC CLLBloggette::NameDes()
-	{
-	return _L("LL Dummy Bloggette");
-	}
-
-// L2CAP Bloggette
-
-CL2Bloggette* CL2Bloggette::NewL(CBlogger* aProvider, TInt aLayer)
-	{
-	CL2Bloggette* self = new (ELeave)CL2Bloggette(aProvider,aLayer);
-	self->iBlogger->Register(self);
-	return self;
-	}
-
-CL2Bloggette::CL2Bloggette(CBlogger* aProvider, TInt aLayer) 
-	: CBloggette(aProvider,aLayer)
-	{	
-	}
-
-CL2Bloggette::~CL2Bloggette()
-	{
-	}
-
-TDesC CL2Bloggette::NameDes()
-	{
-	return _L("L2CAP Dummy Bloggette");
-	}
-
-// RFCOMM Bloggette
-
-CRFBloggette* CRFBloggette::NewL(CBlogger* aProvider, TInt aLayer)
-	{
-	CRFBloggette* self = new (ELeave)CRFBloggette(aProvider,aLayer);
-	self->iBlogger->Register(self);
-	return self;
-	}
-
-CRFBloggette::CRFBloggette(CBlogger* aProvider, TInt aLayer) 
-	: CBloggette(aProvider,aLayer)
-	{	
-	}
-
-CRFBloggette::~CRFBloggette()
-	{
-	}
-
-TDesC CRFBloggette::NameDes()
-	{
-	return _L("RFComm Dummy Bloggette");
-	}
-	
-void CRFBloggette::Timeout(/*CRfcommSAP* aSAP, CRfcommMuxer* aMux,*/ CRfcommFrame* aFrm )
-	{
-	TUint8 ctrlfield = aFrm->Ctrl();
-
-	switch((ctrlfield&~KPollFinalBitmask))
-		{
-		case KSABMCtrlField:
-			Log(KBlogTimeout);
-			Log(KBlogSABM);
-			break;
-		case KDISCCtrlField:
-			Log(KBlogTimeout);
-			Log(KBlogDISC);
-			break;
-		default:
-			break;
-		};
-	}
-
-void CRFBloggette::LogMuxCommand(CRfcommSAP* aSAP, CRfcommMuxer* aMux, TUint8 aCommand)
-	{
-	TUint8 signals;
-
-	switch(aCommand)
-		{
-	case KTestType:
-			Log(KBlogTestCommand); 
-			break;
-		case KPNType:
-			Log(KBlogPN);//
-			break;
-		case KRPNType:
-			Log(KBlogRPN);//
-			break;
-		case KFConType:
-			//may need length byte value
-			Log(KBlogFcOn);//
-			break;
-		case KFCoffType:
-			Log(KBlogFcOff);//
-			break;
-		case KMSCType:
-			signals = aSAP->Signals();//V.24 signals in MSC
-			Log(KBlogMSC);//
-			break;
-		case KNSCType:
-			Log(KBlogNSC);//
-			break;
-		case KRLSType:
-			Log(KBlogRLS);//
-		};
-
-	}
-void CRFBloggette::ExplainOutgoingFrame(CRfcommFrame* aFrm, CRfcommMuxer* aMux )
-	{
-#ifndef TCI
-	//Show what type of frame we have sent and the various parts of the frame which are important.
-
-	TInt frametype = aFrm->Type(); //Is it a Ctrl Frame, Data Frame, CreditDataFrame or Mux Ctrl Frame ?
-	TUint8 ctrlfield = aFrm->Ctrl();
-	TUint8 ctrl = ctrlfield&~KPollFinalBitmask; //tells whether SABM, DISC, UA, DM
-	TUint8 addressfield = aFrm->Address(); //Contains EA, CR, DLCI
-//	TUint8 dlci = aMux->DecodeDLCI(addressfield); //extracts dlci
-	TBool EA = addressfield & KEABitmask; //Is the EA bit set? 
-	TBool CR = addressfield & KCRBitmask; //Is the CR bit set?
-	TBool poll = ctrlfield & KPollFinalBitmask; //Is the p/f bit set?
-	
-	switch(frametype)
-		{
-		case KCtrlFrameType:
-			{
-			//CRfcommCtrlFrame* ctrlfrm=static_cast<CRfcommCtrlFrame*>(aFrm);
-			//TUint16 ctrlframelength = ctrlfrm->DataLength();
-			Log(_L("Tx:"));
-			
-			if(ctrl==KSABMCtrlField)
-				{
-				Log(_L("Tx: SABM"));
-				}
-			if(ctrl==KUACtrlField)
-				{
-				Log(_L("Tx: UA"));
-				}
-			if(ctrl==KDMCtrlField)
-				{
-				Log(_L("Tx: DM"));
-				}
-			if(ctrl==KDISCCtrlField)
-				{
-				Log(_L("Tx: DISC"));
-				}
-			}
-			break;
-		case KDataFrameType: //CRfCommUIHFrame
-			{
-			CRfcommUIHFrame* uihfrm=static_cast<CRfcommUIHFrame*>(aFrm);
-			TUint16 uihframelength = uihfrm->DataLength();
-
-			if(poll)
-				Log(_L("Tx: UIH credit data frame"));
-			
-			if (uihframelength<=127)
-				{
-				Log(_L("Tx: UIH simple data frame"));
-				}
-			else
-				{
-				Log(_L("Tx: UIH simple data frame"));
-				}
-			}
-			break;
-		case KCreditDataFrameType: //CRfcommCreditDataFrame
-			{
-			CRfcommCreditDataFrame* creditfrm=static_cast<CRfcommCreditDataFrame*>(aFrm);
-			TUint8 credits = creditfrm->Credit();
-			//BLOG Credits
-			TUint16 length = creditfrm->DataLength();
-			
-			if (length<=127)
-				{
-				Log(KBlogShortCreditUIH, credits);
-				}
-			else
-				{
-				Log(KBlogLongCreditUIH, credits);
-				}
-			}
-			break;
-		case KMuxCtrlFrameType: //CRfcommMuxCtrlFrame containing muxer messages/commands
-			{
-			//#ifndef TCI
-			CRfcommMuxCtrlFrame* muxfrm=static_cast<CRfcommMuxCtrlFrame*>(aFrm);
-			TUint8 muxdlci = muxfrm->iDLCI;
-			CRfcommSAP* sap = aMux->FindSAP(muxdlci); //Find the SAP that is on this dlci for aMux 
-			TUint8 command = muxfrm->CommandType(); 
-			LogMuxCommand(sap, aMux, command);
-			//#endif
-			}
-			break;
-		default: //CRfcommDataFrame
-			break;
-		};
-	Log(KBlogPFSet, poll);
-	Log(KBlogEASet, EA);
-	Log(KBlogCRSet, CR);
-
-	Log(KBlogFrameType, frametype);
-#endif
-	}
-
-void CRFBloggette::ExplainIncomingFrame(TUint8 aDlci, TUint8 aCtrl, TBool aPoll)
-	{
-	Log(_L("Rx: "));
-	switch (aCtrl)
-		{
-		case KSABMCtrlField:
-			Log(_L("Rx: SABM"));
-			break;
-		case KUACtrlField:
-			Log(_L("Rx: UA"));
-			break;
-		case KDMCtrlField:
-			Log(KBlogDM);
-			break;
-		case KDISCCtrlField:
-			Log(KBlogDISC);
-			break;
-		case KUIHCtrlField:
-			{
-			if(aDlci== KMuxDLCI)
-				{
-				Log(KBlogUIHCtrlFrame);
-				}
-			else
-				{
-				Log(KBlogSimpleUIH);
-				}
-			}
-			break;			
-		default:
-			//FLOG(_L("Error: RFCOMM: Unexpected frame ctrl field"));
-			break;
-		};
-	Log(KBlogDLCI, aDlci);
-	Log(KBlogPFSet, aPoll);
-	}
-
-void CRFBloggette::IncomingCtrlMessage(TUint8 aCommand, TInt aLength)
-	{
-	switch(aCommand)
-		{
-		case KTestType:
-			Log(KBlogTestCommand); 
-			break;
-		case KPNType:
-			Log(KBlogPN);
-			break;
-		case KRPNType:
-			Log(KBlogRPN);
-			break;
-		case KFConType:
-			{
-			Log(KBlogFcOn);
-			if(aLength!=0)
-				{
-				Log(KBlogNonZeroLength);
-				}
-			}
-			break;
-		case KFCoffType:
-			{
-			Log(KBlogFcOff);
-			if(aLength!=0)
-				{
-				Log(KBlogNonZeroLength);
-				}
-			}
-			break;
-		case KMSCType:
-			Log(KBlogMSC);
-			break;
-		case KNSCType:
-			Log(KBlogNSC);
-			break;
-		case KRLSType:
-			Log(KBlogRLS);
-		};
-	}
-
-#endif