// Copyright (c) 2006-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:
//
/**
@file
@internalComponent
*/
#ifndef HCTLTI_H
#define HCTLTI_H
#include "HCTLConfigInterface.h"
#include <bluetooth/hci/hctluartbase.h>
#include <bluetooth/hciframelogger.h>
#include <bluetooth/hci/hcitypes.h>
class CHCTLTiReceiver;
class CHCTLTiSender;
class CControllerManager;
// Define HCTL Packet Header Size
static const TInt KHctlHeaderSize = 1;
static const TInt KHctlPacketTypeOffset = 0;
// UART HCI Framing constants for command frames
static const TInt KHCTLCommandHeaderSize = 1;
static const TInt KHCTLCommandTrailerSize = 0;
// UART HCI Framing constants for ACL data frames
static const TInt KHCTLAclDataHeaderSize = 1;
static const TInt KHCTLAclDataTrailerSize = 0;
// UART HCI Framing constants for Synchronous data frames
static const TInt KHCTLSynchronousDataHeaderSize = 1;
static const TInt KHCTLSynchronousDataTrailerSize = 0;
_LIT(KIniFileName, "hctl_ti");
/**
This is the class that implements the UART specific HCTL.
*/
NONSHARABLE_CLASS(CHCTLTi) : public CHCTLUartBase,
public MHctlConfigInterface
{
public:
static CHCTLTi* NewL();
~CHCTLTi();
void DoConfigL();
virtual void ProcessACLData(const TDesC8& aData);
virtual void ProcessSynchronousData(const TDesC8& aData);
virtual void ProcessEvent(const TDesC8& aEvent);
MQdpPluginInterfaceFinder* QdpPluginInterfaceFinder();
// From MHardResetInitiator
virtual void MhriStartHardReset();
// From MHCTLConfigInterface
virtual TInt MhciUpdateBaudRate(TUint32 aBaudRate);
// Called from the Controller Manager
void HandlePowerOff();
void HandlePowerOn();
TBTPowerState CurrentPowerState() const;
public:
// HCTL packet types as defined in Section 2, Part H: 4 of the
// bluetooth specification.
enum THctlPacketType
{
ECommandPacket = 0x01,
EACLDataPacket = 0x02,
ESynchronousDataPacket = 0x03,
EEventPacket = 0x04,
};
private:
CHCTLTi();
void ConstructL();
TAny* Interface(TUid aUid);
static void SetPacketIndicator(THctlPacketType aType, const TDesC8& aData);
// From CHCTLUartBase
virtual void PortOpenedL();
// 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);
private:
CHCTLTiReceiver* iReceiver;
CHCTLTiSender* iSender;
MQdpPluginInterfaceFinder* iQdpPluginInterfaceFinder;
TBTPowerState iCurrentPowerState;
CControllerManager* iControllerMan;
DECLARE_HCI_LOGGER
};
#endif // HCTLTI_H