bluetooth/btlogger/btsnoophcilogger/src/hciloggerimpl.cpp
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btlogger/btsnoophcilogger/src/hciloggerimpl.cpp	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,79 @@
+// Copyright (c) 2004-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 "hciloggerbtsnoop.h"
+
+EXPORT_C MHCIFrameLogger* CHCILoggerBtSnoop::GetInstanceL()
+	{
+	CHCILoggerBtSnoop* self = static_cast<CHCILoggerBtSnoop*>(Dll::Tls());
+	if (!self)
+		{
+		self = NewLC();
+		User::LeaveIfError(Dll::SetTls(self));
+		CleanupStack::Pop(self);
+		}
+	++(self->iRefCount);
+	return self;		
+	}
+
+void CHCILoggerBtSnoop::SetLibrary(RLibrary& aLib)
+	{
+	if(iRefCount > 1)
+		{
+		__ASSERT_DEBUG(iMyLib.Handle(), User::Panic(_L("BtSnoopLogger"), EBtSnoopLoggerPanicNoMyLibHandle));
+		return;
+		}
+	__ASSERT_DEBUG(!iMyLib.Handle(), User::Panic(_L("BtSnoopLogger"), EBtSnoopLoggerPanicHandleAlreadyExists));
+	iMyLib.SetHandle(aLib.Handle());
+	aLib.SetHandleNC(iMyLib.Handle());
+	}
+
+void CHCILoggerBtSnoop::GetLibrary(RLibrary& aLib)
+	{
+	if(iRefCount > 1)
+		{
+		aLib.SetHandleNC(iMyLib.Handle());
+		}
+	else // Give final client full control of the handle!
+		{
+		aLib.SetHandle(iMyLib.Handle());
+		}
+	}
+
+void CHCILoggerBtSnoop::Release()
+	{
+	__ASSERT_DEBUG((iRefCount > 0), User::Panic(_L("BtSnoopLogger"), EBtSnoopLoggerPanicRefCountTooLow));
+	--iRefCount;
+	if(iRefCount == 0)
+		{
+		delete this;
+		Dll::SetTls(0);
+		}
+	}
+
+void CHCILoggerBtSnoop::Initialise(TInt aType)
+	{
+	if (iRefCount > 1)
+		{
+		__ASSERT_DEBUG(iInitialised, User::Panic(_L("BtSnoopLogger"), EBtSnoopLoggerPanicHasntBeenInitialised));
+		return;
+		}
+	__ASSERT_DEBUG(!iInitialised, User::Panic(_L("BtSnoopLogger"), EBtSnoopLoggerPanicShouldNotBeInitialised));
+	DoInitialise(aType);
+	iInitialised = ETrue;	// this flag implies the DoInitialise() function has
+							// been called, but not that it was necessarily
+							// successful.
+	}
+