bluetooth/btstack/linkmgr/basebandsap.cpp
changeset 0 29b1cd4cb562
child 32 f72906e669b4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btstack/linkmgr/basebandsap.cpp	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,236 @@
+// Copyright (c) 2003-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:
+// Implements the base class for baseband SAPs
+// 
+//
+
+#include <bluetooth/logger.h>
+#include "basebandsap.h"
+#include "physicallinksmanager.h"
+#include "physicallinks.h"
+#include "linkutil.h"
+
+#ifdef __FLOG_ACTIVE
+_LIT8(KLogComponent, LOG_COMPONENT_LINKMGR);
+#endif
+
+#pragma warning (disable: 4100) //unreference formal param { These are both OK
+#pragma warning (disable: 4355) //this in base init list   { for our usage
+
+
+CBTBasebandSAP::CBTBasebandSAP(CPhysicalLinksManager& aLinksMan, CPhysicalLink* aPhysicalLink)
+: CBluetoothSAP(aLinksMan.SecMan(), aLinksMan.CodMan()),
+  iLinksMan(aLinksMan),
+  iPhysicalLink(aPhysicalLink),
+  iAcceptWatchdog(*this),
+  iQueLink(this)
+	{
+	LOG_FUNC
+	// Initialise handle to a non-zero number
+	iHandle = KInvalidConnectionHandle;
+	}
+
+void CBTBasebandSAP::ConstructL()
+	{
+	LOG_FUNC
+	CBluetoothSAP::ConstructL();
+	}
+
+// from CServProviderBase - the saps will not do all of these
+void CBTBasebandSAP::Start()
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	}
+
+void CBTBasebandSAP::LocalName(TSockAddr& aAddr) const
+	{
+	LOG_FUNC
+	// base class just returns address as a BTSockAddr
+	TBTSockAddr btAddr;
+	btAddr.SetBTAddr(iLinksMan.LinkManagerProtocol().LocalBTAddress());
+	aAddr = btAddr;
+	}
+
+TInt CBTBasebandSAP::SetLocalName(TSockAddr& /*aAddr*/)
+	{
+	LOG_FUNC
+	return KErrNotSupported;
+	}
+
+void CBTBasebandSAP::RemName(TSockAddr& aAddr) const
+	{
+	LOG_FUNC
+	// base class just returns address as a BTSockAddr
+	TBTSockAddr btAddr;
+	btAddr.SetBTAddr(iRemoteDev);
+	aAddr = btAddr;
+	}
+
+TInt CBTBasebandSAP::SetRemName(TSockAddr& aAddr)
+	{
+	LOG_FUNC
+	// base class just sets BTAddr
+	TBTSockAddr btAddr = TBTSockAddr::Cast(aAddr);
+	iRemoteDev = btAddr.BTAddr();
+	return KErrNone;
+	}
+
+TInt CBTBasebandSAP::GetOption(TUint /*aLevel*/,TUint /*aName*/,TDes8& /*aOption*/) const
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	return KErrNotSupported;
+	}
+
+void CBTBasebandSAP::Ioctl(TUint /*aLevel*/,TUint /*aName*/, TDes8* /*aOption*/)
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	}
+
+void CBTBasebandSAP::CancelIoctl(TUint /*aLevel*/,TUint /*aName*/)
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	}
+
+TInt CBTBasebandSAP::SAPSetOption(TUint /*aLevel*/,TUint /*aName*/,const TDesC8& /*aOption*/)
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	return KErrNotSupported;
+	}
+
+void CBTBasebandSAP::ActiveOpen()
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	}
+
+void CBTBasebandSAP::ActiveOpen(const TDesC8& /*aConnectionData*/)
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	}
+
+TInt CBTBasebandSAP::PassiveOpen(TUint /*aQueSize*/)
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	return KErrNotSupported;
+	}
+
+TInt CBTBasebandSAP::PassiveOpen(TUint /*aQueSize*/,const TDesC8& /*aConnectionData*/)
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	return KErrNotSupported;
+	}
+
+void CBTBasebandSAP::Shutdown(TCloseType /*aOption*/)
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	}
+
+void CBTBasebandSAP::Shutdown(TCloseType /*aOption*/,const TDesC8& /*aDisconnectionData*/)
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	}
+
+void CBTBasebandSAP::AutoBind()
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	}
+
+TUint CBTBasebandSAP::Write(const TDesC8& /*aDesc*/,TUint /*aOptions*/, TSockAddr* /*aAddr*/)
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	return 0;
+	}
+
+void CBTBasebandSAP::GetData(TDes8& /*aDesc*/,TUint /*aOptions*/,TSockAddr* /*aAddr*/)
+	{
+	LOG_FUNC
+	Panic(EBTBaseSAPUnimplementedEvent);
+	}
+
+CBTBasebandModel& CBTBasebandSAP::Baseband() const
+	{
+	LOG_FUNC
+	return iLinksMan.Baseband();
+	}
+
+TInt CBTBasebandSAP::BindLink(TLinkType aLinkType, CPhysicalLink& aPhysicalLink)
+	{
+	LOG_FUNC
+	__ASSERT_DEBUG(iPhysicalLink==NULL || iPhysicalLink==&aPhysicalLink, Panic(EBTBasebandSAPTwoPhysicalLinks));
+	TInt err = aPhysicalLink.AttachLogicalLink(aLinkType, *this);
+	if (err == KErrNone)
+		{
+		iPhysicalLink = &aPhysicalLink;
+		iPhysicalLink->SubscribeLinkObserver(*this); // logical links might want to know about park etc
+		}
+	return err;
+	}
+
+void CBTBasebandSAP::UnbindLink(TLinkType aLinkType)
+	{
+	LOG_FUNC
+	if (iPhysicalLink)
+		{
+		iPhysicalLink->UnsubscribeLinkObserver(*this);
+		iPhysicalLink->DetachLogicalLink(aLinkType, *this);
+		iPhysicalLink = NULL;
+		}
+	}
+
+void CBTBasebandSAP::RemoveChild(CBTBasebandSAP* __DEBUG_ONLY(aChild))
+	{
+	LOG_FUNC
+	__ASSERT_DEBUG(aChild == iChild, Panic(EBTBasebandSAPBadChild));
+	iChild = NULL;
+	}
+	
+void CBTBasebandSAP::DeleteChild(CBTBasebandSAP* __DEBUG_ONLY(aChild))
+	{
+	LOG_FUNC
+	__ASSERT_DEBUG(aChild == iChild, Panic(EBTBasebandSAPBadChild));
+	delete iChild, iChild = NULL;
+	}
+	
+void CBTBasebandSAP::LinkStateIdle()
+	{
+	LOG_FUNC
+	if (iPhysicalLink)
+		{
+		iPhysicalLink->PhysicalLinkUserIdle();
+		}
+	}
+
+TBool CBTBasebandSAP::IsIdle() const
+	{
+	LOG_FUNC
+	return EFalse;
+	}
+
+void CBTBasebandSAP::ParentClosing()
+	{
+	LOG_FUNC
+	//Ignore
+	}