diff -r 000000000000 -r 29b1cd4cb562 bluetooth/btlogger/btsnoophcilogger/src/hciloggerimpl.cpp --- /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(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. + } +