bluetooth/btstack/linkmgr/physicallinkmetrics.h
changeset 0 29b1cd4cb562
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetooth/btstack/linkmgr/physicallinkmetrics.h	Fri Jan 15 08:13:17 2010 +0200
@@ -0,0 +1,129 @@
+// Copyright (c) 1999-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:
+//
+
+#ifndef PHYSICALLINKMETRICS_H
+#define PHYSICALLINKMETRICS_H
+
+#include <bt_sock.h>
+#include <bluetooth/hcicommandqueueclient.h>
+#include <bluetooth/hcicmdqcontroller.h>
+
+#include "internaltypes.h"
+#include "notification.h"
+
+class CPhysicalLink;
+class CBTProxySAP;
+
+class THCICommandCompleteEvent;
+class TReadFailedContactCounterCompleteEvent;
+class TReadRSSICompleteEvent;
+class TReadLinkQualityCompleteEvent;
+class TReadTransmitPowerLevelCompleteEvent;
+
+const TUint KPLMPollInterval = 2000000; // 2 Seconds
+
+
+enum THciCommandState
+	{
+	ECommandIdle,
+	ECommandIssued,
+	ECommandBlockedForTimer
+	};
+
+class TPLMManager
+	{
+public:
+	TPLMManager();
+	void RegisterProxySAP(CBTProxySAP& aSAP);	
+	void UpdatePLMValue(TInt aPLMValue);
+	void UpdatePLMState(THciCommandState aPLMState);
+	TPckgBuf<TInt>& PLMValue();
+	THciCommandState PLMState() const;
+	void NotifyQueuedProxySAPs(TInt aErr, TUint aName, TDesC8* aBuf);
+	TBool AnyOutstandingClientRequest() const;
+
+private:	
+	TDblQue<CBTProxySAP>	iPLMQue;
+	THciCommandState		iPLMState;
+	TPckgBuf<TInt>			iPLMValue;
+	};
+
+/**
+	This class handles CPhysicalLinkMetrics commands to and from the HCI
+	It is owned, constructed and destructed by CPhysicalLink
+**/
+NONSHARABLE_CLASS(CPhysicalLinkMetrics) : public CBase, public MHCICommandQueueClient,
+										  public MPhysicalLinkObserver
+	{
+public:
+	static CPhysicalLinkMetrics* NewL(CPhysicalLink& aLink, MHCICommandQueue& aController);
+	~CPhysicalLinkMetrics();
+	void ReadNewPhysicalLinkMetricValue(TUint aIoctlName, CBTProxySAP& aSAP, TInt aCurrentValue);		
+	
+private:
+	CPhysicalLinkMetrics(CPhysicalLink& aLink, MHCICommandQueue& aController);
+	void ConstructL();
+	void HandleReadFailedContactCounterCompleteEvent(const TReadFailedContactCounterCompleteEvent& aEvent);
+	void HandleReadLinkQualityCompleteEvent(const TReadLinkQualityCompleteEvent& aEvent);
+	void HandleReadRssiCompleteEvent(const TReadRSSICompleteEvent& aEvent);
+	void HandleReadTransmitPowerLevelCompleteEvent(const TReadTransmitPowerLevelCompleteEvent& aEvent);
+	
+	void ReadRssiCommand();
+	void ReadRssiCommandL();
+	void ReadLinkQualityCommand();
+	void ReadLinkQualityCommandL();
+	void ReadFailedContactCounterCommand();
+	void ReadFailedContactCounterCommandL();
+	void ReadTransmitPowerLevelCommand();
+	void ReadTransmitPowerLevelCommandL();
+	
+	void RemovePLMCommands();	
+	void CommandCompleteEvent(const THCICommandCompleteEvent& aEvent);
+	
+	static TInt PLMEventReceived(TAny* aThis);
+	void DoRssiTimerEvent();
+	void DoLinkQualityTimerEvent();
+	void DoFailedContactCounterTimerEvent();
+	void DoTransmitPowerLevelTimerEvent();
+	
+	void QueueNextPLMPollIfNotAlreadyQueued();
+	void RemovePLMPoll();	
+
+	// From MHCICommandQueueClient
+	virtual void MhcqcCommandEventReceived(const THCIEventBase& aEvent, const CHCICommandBase* aRelatedCommand);
+	virtual void MhcqcCommandErrored(TInt aErrorCode, const CHCICommandBase* aCommand);
+
+	// From MPhysicalLinkObserver
+	virtual void PhysicalLinkChange(const TBTBasebandEventNotification& aEvent, CPhysicalLink& aPhysicalLink);
+	virtual TPhysicalLinkObserverQLink& ObserverQLink();
+	
+private:
+	CPhysicalLink&			iParent;
+	MHCICommandQueue&		iCmdController;
+	
+	TPhysicalLinkObserverQLink		iQueLink;
+	
+	TPckgBuf<TInt>			iDummyResult;
+	
+	TPLMManager				iRssi;
+	TPLMManager				iLinkQuality;
+	TPLMManager				iTransmitPowerLevel;
+	TPLMManager				iFailedContactCounter;
+ 
+	TDeltaTimerEntry		iPLMTimer;	
+	TBool					iPLMTimerQueued;
+	};
+
+#endif //PHYSICALLINKMETRICS_H