bthci/hci2implementations/hctls/usb_original/hctl/inc/hctlusboriginal.h
author jontanne
Thu, 14 Oct 2010 11:30:12 +0100
changeset 27 83036355c0f3
permissions -rw-r--r--
Add USB HCTL to bt package

// Copyright (c) 2007-2010 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:
// 

/** 
@file
@internalComponent
*/

#ifndef HCTLUSBORIGINAL_H
#define HCTLUSBORIGINAL_H

#include <bluetooth/hci/hctlbase.h>
#include <bluetooth/hciframelogger.h>
#include <bluetooth/hci/hcitypes.h>
#include <bluetooth/hci/hctlinterface.h>
#include <bluetooth/hardresetinitiator.h>
#include <d32usbdi.h>
#include <fdchctloriginalcli.h>


class CHCTLUsbOriginalCommand;
class CHCTLUsbOriginalAclOut;
class CHCTLUsbOriginalAclIn;
class CHCTLUsbOriginalEvent;
class CControllerManager;
class CDeviceStateManager;
class CHCTLUsbOriginalServer;
class MHCTLChannelObserver;
class MHCTLDataObserver;
class MHCTLEventObserver;
class MControllerStateObserver;
class MQdpPluginInterfaceFinder;


/**USB Original HCI Framing constants for command frames */
static const TInt KHCTLCommandHeaderSize	= 0;
static const TInt KHCTLCommandTrailerSize	= 0;

/**USB Original HCI Framing constants for ACL data frames */
static const TInt KHCTLAclDataHeaderSize	= 0;
static const TInt KHCTLAclDataTrailerSize	= 0;

/**USB Original HCI Framing constants for Synchronous data frames */
static const TInt KHCTLSynchronousDataHeaderSize	= 0;
static const TInt KHCTLSynchronousDataTrailerSize	= 0;

/**
This is the class that implements the USB specific HCTL.
*/
NONSHARABLE_CLASS(CHCTLUsbOriginal)
	: public CHCTLBase
	, public MHCTLInterface
	, public MHardResetInitiator
	{
public:
	static CHCTLUsbOriginal* NewL();
	~CHCTLUsbOriginal();
	
	void ProcessACLData(const TDesC8& aData);
	void ProcessSynchronousData(const TDesC8& aData);
	void ProcessEvent(const TDesC8& aEvent);
	
	MQdpPluginInterfaceFinder* QdpPluginInterfaceFinder();

	// Called from the Controller Manager
	void HandlePowerOff();
	void HandlePowerOn();
	TBTPowerState CurrentPowerState() const;

	// Called from Server Session.
	void DeviceAttachedL(TUint32 aStandardIf, TUint32 aScoIf);
	void DeviceRemoved();
	
	TBool DevicePresent() const;

private:
	CHCTLUsbOriginal();
	void ConstructL();
	TAny* Interface(TUid aUid);

	static TInt AsyncCallBackSecondStage(TAny* aUsbOriginal);
	static void Rollback(TAny* aPtr);

	void HandleChannelStateChange();
	TInt SetPower(TBTPowerState aState);

private: // from MHCTLInterface
	virtual TInt MhiWriteCommand(const TDesC8& aData);
	virtual TInt MhiWriteAclData(const TDesC8& aData);
	virtual TInt MhiWriteSynchronousData(const TDesC8& aData);
	virtual void MhiGetAclDataTransportOverhead(TUint& aHeaderSize, TUint& aTrailerSize) const;
	virtual void MhiGetSynchronousDataTransportOverhead(TUint& aHeaderSize, TUint& aTrailerSize) const;
	virtual void MhiGetCommandTransportOverhead(TUint& aHeaderSize, TUint& aTrailerSize) const;
	virtual void MhiSetChannelObserver(MHCTLChannelObserver& aChannelObserver);
	virtual void MhiSetDataObserver(MHCTLDataObserver& aDataObserver);
	virtual void MhiSetEventObserver(MHCTLEventObserver& aEventObserver);
	virtual void MhiSetControllerStateObserver(MControllerStateObserver& aControllerStateObserver);
	virtual void MhiSetQdpPluginInterfaceFinder(MQdpPluginInterfaceFinder& aQdpPluginInterfaceFinder);
	
public: // from MHardResetInitiator
	virtual void MhriStartHardReset();
	
private:
	RUsbInterface iInterface;
	RUsbInterface iScoInterface;
	
	// Senders
	CHCTLUsbOriginalCommand* iControl;
	CHCTLUsbOriginalAclOut* iAclOut;
	// Receivers
	CHCTLUsbOriginalAclIn* iAclIn;
	CHCTLUsbOriginalEvent* iEvent;
	
	MQdpPluginInterfaceFinder* iQdpPluginInterfaceFinder;
	MHCTLChannelObserver* iChannelObserver;
	MHCTLEventObserver* iEventObserver;
	MHCTLDataObserver* iDataObserver;
	MControllerStateObserver* iControllerStateObserver;
	
	TBTPowerState iCurrentPowerState;
	
	CControllerManager* iControllerMan;
	CDeviceStateManager* iDeviceStateMan;
	CHCTLUsbOriginalServer* iServer;
	
	CAsyncCallBack* iSecondStageCallBack;
	
	RFdcHctlOriginal iFdc;
	
	DECLARE_HCI_LOGGER
	};


#endif // HCTLUSBORIGINAL_H