// 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:
// BT Synchronous link active object helpers
// 
//

#ifndef BTSYNCLINKHELPERS_H
#define BTSYNCLINKHELPERS_H

#include <bluetooth/btscoparams.h>

NONSHARABLE_CLASS(CBTSynchronousLinkBaseband) : public CActive
	{
public:
	static CBTSynchronousLinkBaseband* NewL(CBluetoothSynchronousLink& aParent);
	~CBTSynchronousLinkBaseband();
	
	void CatchEvents();
	void PreventPark();
	void StopAll();
	
private:
	CBTSynchronousLinkBaseband(CBluetoothSynchronousLink& aParent);
	void ConstructL();
	void DoCancel();
	void RunL();
	TInt RunError(TInt aError);
	
	CBluetoothSynchronousLink&	iParent;
	TBTBasebandEvent			iEvent;
	};

//CBluetoothSynchronousLink Active Objects...
NONSHARABLE_CLASS(CBTSynchronousLinkAttacher) : public CActive
	{
public:
	static CBTSynchronousLinkAttacher* NewL(CBluetoothSynchronousLink& aParent, TSCOType aSCOType);
	~CBTSynchronousLinkAttacher();

	void AttachSCOLink(TBTSockAddr& aSockAddr);


private:
	CBTSynchronousLinkAttacher(CBluetoothSynchronousLink& aParent, TSCOType aSCOTypes);
	void ConstructL();
	void DoCancel();
	void RunL();
	TInt RunError(TInt aError);

	CBluetoothSynchronousLink& iParent;
	
	TSCOType iSCOType;
	};


NONSHARABLE_CLASS(CBTSynchronousLinkDetacher) : public CActive
	{
public:
	static CBTSynchronousLinkDetacher* NewL(CBluetoothSynchronousLink& aParent, TSCOType aSCOTypes);
	~CBTSynchronousLinkDetacher();

	void DetachSCOLink(const TDesC8& aDesOut, TDes8& aDesIn);


private:
	CBTSynchronousLinkDetacher(CBluetoothSynchronousLink& aParent, TSCOType aSCOTypes);
	void ConstructL();
	void DoCancel();
	void RunL();
	TInt RunError(TInt aError);

	CBluetoothSynchronousLink& iParent;
	TBuf8<1> iDummySCOShutdownDescriptor;
	
	TSCOType iSCOType;
	};


NONSHARABLE_CLASS(CBTSynchronousLinkAccepter) : public CActive
	{
public:
	static CBTSynchronousLinkAccepter* NewL(CBluetoothSynchronousLink& aParent, TSCOType aSCOType);
	~CBTSynchronousLinkAccepter();

	void Accept(RSocket& aSocket);


private:
	CBTSynchronousLinkAccepter(CBluetoothSynchronousLink& aParent, TSCOType aSCOType);
	void ConstructL();
	void DoCancel();
	void RunL();
	TInt RunError(TInt aError);

	CBluetoothSynchronousLink& iParent;
	
	TSCOType iSCOType;
	};


NONSHARABLE_CLASS(CBTSynchronousLinkSender) : public CActive
	{
public:
	static CBTSynchronousLinkSender* NewL(CBluetoothSynchronousLink& aParent, TSCOType aSCOType);
	~CBTSynchronousLinkSender();

	void SendSCOData(const TDesC8& aSCOData);


private:
	CBTSynchronousLinkSender(CBluetoothSynchronousLink& aParent, TSCOType aSCOType);
	void ConstructL();
	void DoCancel();
	void RunL();
	TInt RunError(TInt aError);

	CBluetoothSynchronousLink& iParent;
	
	TSCOType iSCOType;
	};


NONSHARABLE_CLASS(CBTSynchronousLinkReceiver) : public CActive
	{
public:
	static CBTSynchronousLinkReceiver* NewL(CBluetoothSynchronousLink& aParent, TSCOType aSCOType);
	~CBTSynchronousLinkReceiver();

	void ReadSCOData(TDes8& aDesc);


private:
	CBTSynchronousLinkReceiver(CBluetoothSynchronousLink& aParent, TSCOType aSCOTypes);
	void ConstructL();
	void DoCancel();
	void RunL();
	TInt RunError(TInt aError);

	CBluetoothSynchronousLink& iParent;
	
	TSCOType iSCOType;
	};

#endif
