// 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:
// Defines the base class for baseband SAPs
//
//
/**
@file
@internalComponent
*/
#ifndef _BASEBANDSAP_H_
#define _BASEBANDSAP_H_
#include <es_prot.h>
#include "BtSap.h"
#include "AcceptWatchdog.h"
#include "MBtHostControllerEventInternalNotifier.h"
#include "notification.h"
#include "SecManNotifiers.h"
#include "btconsts.h"
static const TUint8 KActiveDisconnectReason = 0x13;
class TBTConnect;
class CBTBasebandModel;
class CPhysicalLinksManager;
class CPhysicalLink;
enum TBasebandTimeout
{
EAccept,
};
class MLogicalLink
/**
@internalComponent
Logical links mixin in from this to be offered the logical link connection requests
As it happens, for ACL these occur when PHY connect requests arrive
For SCO its a separate event
**/
{
public:
/**
@return ETrue if connection is accepted, EFalse if not
@param aConnect a record detailing the connection
@param aPhysicalLink the physical link bearing the potential logical link
*/
virtual TBool ConnectRequest(const TBTConnect& aConnect, const CPhysicalLink& aPhysicalLink) =0;
/**
@param aConnect the new logical link details
*/
virtual void ConnectComplete(const TBTConnect& aConnect) =0;
/**
Signalled when logical link has disconnected
*/
virtual void Disconnection() =0;
/**
Signalled when an error situation affecting the logical link has occurred
@param aError The error
*/
virtual void Error(TInt aError) =0;
/**
Data for the logical link has been received
*/
virtual void DataReceived(THCIConnHandle aConnH, TUint8 aFlag, const TDesC8& aData) =0;
/**
@param aConnH The handle on which data has been sent
@param aNumPackets The number of packets sent
*/
virtual void PacketsSent(THCIConnHandle aConnH, TUint16 aNumPackets) =0;
/**
@return ETrue if the logical link considers itself to be idle
*/
virtual TBool IsIdle() const = 0;
};
/**
@internalComponent
class CBTBasebandSAP
The (abstract) base SAP for the linkmgr
It forms the basis for ACL,SCO and Proxy SAPs
Derivation allows for SAPs to spy on the phy
**/
/*abstract*/ NONSHARABLE_CLASS(CBTBasebandSAP) : public CBluetoothSAP, public MPhysicalLinkObserver
{
public:
// from SAP
virtual void Start();
virtual void LocalName(TSockAddr& anAddr) const ;
virtual TInt SetLocalName(TSockAddr& anAddr);
virtual void RemName(TSockAddr& anAddr) const ;
virtual TInt SetRemName(TSockAddr& anAddr);
virtual TInt GetOption(TUint level,TUint name,TDes8& anOption)const ;
virtual void Ioctl(TUint level,TUint name,TDes8* anOption);
virtual void CancelIoctl(TUint aLevel,TUint aName);
virtual TInt SAPSetOption(TUint level,TUint name,const TDesC8 &anOption);
virtual void ActiveOpen();
virtual void ActiveOpen(const TDesC8& aConnectionData);
virtual TInt PassiveOpen(TUint aQueSize);
virtual TInt PassiveOpen(TUint aQueSize,const TDesC8& aConnectionData);
virtual void Shutdown(TCloseType option);
virtual void Shutdown(TCloseType option,const TDesC8& aDisconnectionData);
virtual void AutoBind();
TUint Write(const TDesC8& aDesc,TUint aOptions, TSockAddr* aAddr);
void GetData(TDes8& aDesc,TUint options,TSockAddr* anAddr=NULL);
TInt BindLink(TLinkType aLinkType, CPhysicalLink& aPhysicalLink);
void UnbindLink(TLinkType aLinkType);
void LinkStateIdle();
void RemoveChild(CBTBasebandSAP* aChild);
void DeleteChild(CBTBasebandSAP* aChild);
virtual void Timeout(TBasebandTimeout aTimeout) =0;
inline THCIConnHandle Handle() const;
inline MSocketNotify* Socket() const;
inline CBTBasebandSAP*& ListeningSAP();
virtual TBool IsIdle() const;
virtual TPhysicalLinkObserverQLink& ObserverQLink() {return iQueLink;};
virtual void ParentClosing();
protected:
CBTBasebandSAP(CPhysicalLinksManager& aConnectionMan, CPhysicalLink* aConnection);
void ConstructL();
CBTBasebandModel& Baseband() const;
protected:
THCIConnHandle iHandle; // the handle this class represents
CPhysicalLinksManager& iLinksMan;
CPhysicalLink* iPhysicalLink;
CBTBasebandSAP* iParent;
CBTBasebandSAP* iChild;
TAcceptWatchdog iAcceptWatchdog;
TPhysicalLinkObserverQLink iQueLink;
};
inline THCIConnHandle CBTBasebandSAP::Handle() const
{
return iHandle;
}
inline MSocketNotify* CBTBasebandSAP::Socket() const
{
return iSocket;
}
inline CBTBasebandSAP*& CBTBasebandSAP::ListeningSAP()
{
return iParent;
}
#endif //_BASEBANDSAP_H_