--- /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