diff -r 000000000000 -r c40eb8fe8501 wlan_bearer/wlanldd/wlan_common/umac_common/inc/umacsignalpredictor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/umacsignalpredictor.h Tue Feb 02 02:03:13 2010 +0200 @@ -0,0 +1,358 @@ +/* +* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: Declaration of the TWlanSignalPredictor class. +* +*/ + +/* +* %version: 7 % +*/ + +#ifndef WLANSIGNALPREDICTOR_H +#define WLANSIGNALPREDICTOR_H + +#ifndef RD_WLAN_DDK +#include +#else +#include +#endif + +/** + * Signal Level Predictor machine. + * + * @lib wlanumac.lib + * @since S60 v3.2 + */ +class WlanSignalPredictor + { + +public: + + /** + * Constructor. + */ + WlanSignalPredictor(); + + /** + * Destructor. + */ + inline ~WlanSignalPredictor(); + + /** + * Starts the Signal Predictor. + * If signal predictor is stopped, Start command will start it. + * By default it is started. + * @since S60 v3.2 + */ + inline void Start(); + + /** + * Stops the Signal Predictor. + * + * @since S60 v3.2 + */ + inline void Stop(); + + /** + * Configure the Signal Predictor operation. + * + * Note! If given param is 0, then old value remains. + * @since S60 v3.2 + * @param aTimeToWarnLevel Specifies the time (in microseconds) + * how far into the future signal prediction is done. + * @param aTimeToNextInd The minimum time difference (in + * microseconds) between two signal loss prediction indications. + * @param aRcpiWarnLevel If this RCPI level is predicted to be + * reached within the time specified by aSpTimeToCountPrediction, + * a signal loss prediction indication is sent. + */ + void ConfigureSignalPredictor( + TUint32 aTimeToWarnLevel, + TUint32 aTimeToNextInd, + WHA::TRcpi aRcpiWarnLevel ); + + /** + * Insert new rcpi information into the Signal Predictor. + * + * @since S60 v3.2 + * @param aTimestamp 32-bit timestamp in microseconds. + * @param aRcpi rcpi value from HW + * @return ETrue if signal loss prediction indication should be sent + */ + TBool InsertNewRcpi( + TUint32 aTimestamp, + WHA::TRcpi aRcpi ); + + /** + * Get the latest median value from Signal Predictor. + * + * @since S60 v3.2 + * @param aTimestamp 32-bit timestamp in milliseconds. + * @param aLatestMedian reference to the median. + * @return Boolean about if median value is available. + */ + TBool GetLatestMedian( + TUint32 aTimestamp, + TUint8& aLatestMedian ) const; + + /** + * Get the latest rcpi from Signal Predictor. + * + * @since S60 v3.2 + * @param aTimestamp 32-bit timestamp in milliseconds. + * @param aLatestRcpi reference to the rcpi. + * @return Boolean about if rcpi value is available. + */ + TBool GetLatestRcpi( + TUint32 aTimestamp, + TUint8& aLatestRcpi ); + +protected: + + /** + * Checks if there are too old values in rcpi table. + * + * @since S60 v3.2 + * @param aTimestamp 32-bit timestamp in milliseconds. + */ + void RemoveOldValues( + TUint32 aTimestamp ); + + /** + * removes an old value from rcpi table. + * + * @since S60 v3.2 + * @param aIndex Index of rcpi to be removed from rcpi table. + */ + void RemoveValue( + TUint8 aIndex ); + + /** + * Inserts new median value into median table. + * + * @since S60 v3.2 + * @param aTimestamp 32-bit timestamp in milliseconds. + * @param aMedian a new median value. + * @return ETrue if signal loss prediction indication should be sent + */ + TBool InsertMedian( + TUint32 aTimestamp, + TUint8 aMedian ); + + /** + * Inserts new rcpi value into rcpi table. + * + * @since S60 v3.2 + * @param aTimestamp 32-bit timestamp in milliseconds. + * @param aRcpi a new rcpi value. + * @return ETrue if signal loss prediction indication should be sent + */ + TBool InsertValue( + TUint32 aTimestamp, + WHA::TRcpi aRcpi ); + + /** + * Count the current median from the rcpi table. + * + * @since S60 v3.2 + * @return Current median value. + */ + TUint8 GetCurrentMedian() const; + + /** + * Counts the estimation about the signal behaviour. + * + * @since S60 v3.2 + * @return ETrue if signal loss prediction indication should be sent + */ + TBool GetPrediction(); + + /** + * Get the time interval between old and new times. + * + * @since S60 v3.2. + * @param aOldTime 32-bit timestamp in milliseconds. + * @param aNewTime 32-bit timestamp in milliseconds. + * @return Time interval in milliseconds. + */ + TUint32 Delay( + TUint32 aOldTime, + TUint32 aNewTime ) const; + +private: + + struct TValue /* value info element */ + { + TUint32 iTimestamp; /* timestamp */ + TUint8 iPrev; /* next smaller rcpi value */ + TUint8 iNext; /* next bigger rcpi value */ + WHA::TRcpi iRcpi; /* rcpi value */ + TUint8 iPad; /* padding byte */ + }; + + struct TLastRoam /* roaming info element */ + { + TUint32 iTimestamp;/* timestamp */ + TBool iDone; /* valid or not */ + }; + + /** + * Only one iten + */ + static const TUint KOneValue = 1; + + /** + * Just dummy data pattern + */ + static const TUint8 KDummy = 0x55; + + /** + * Rcpi table size + */ + static const TUint32 KValueCountMax = 25; + + /** + * Median table size + */ + static const TUint32 KMedianCountMax = 2; + + /** + * Minimum time delay which is needed to accept next rcpi value + */ + static const TUint32 KValueDelay = 10; + + /** + * Minimum time delay which is needed to accept next median value + */ + static const TUint32 KMedianDelay = 35; + + /** + * Window size in milliseconds + */ + static const TUint32 KWindowSizeDefault = 1000; + + /** + * Time to indication sending in milliseconds + */ + static const TUint32 KTimeToIndicationLevel = 1000; + + /** + * Minimum time in milliseconds to next signal loss prediction indication sending + */ + static const TUint32 KTimeToNextIndication = 1000; + + /** + * Rcpi level when signal loss prediction indication generated + */ + static const TUint8 KRoamLevel = 80; + + /** + * Rcpi level above which, the indication is not sent + */ + static const TUint8 KDiffRoamLevel = 120; + + /** + * Minimum count of rcpi values to get signal loss prediction + */ + static const TUint8 KMinValueCountForPrediction = 10; + + /** + * rcpi table + */ + TValue iLevelTable[ KValueCountMax ]; + + /** + * median table + */ + TValue iMedianTable[ KMedianCountMax ]; + + /** + * time interval to the indication level in milliseconds + */ + TUint32 iTimeToWarnLevel; + + /** + * observation time interval in milliseconds + */ + TUint32 iWindowSize; + + /** + * minimum time interval between two signal loss prediction + * indications, in milliseconds + */ + TUint32 iTimeToNextInd; + + /** + * level when roam indication in generated + */ + TUint8 iWarningLevel; + + /** + * rcpi count in the rcpi table + */ + TUint8 iValueCount; + + /** + * median count in the median table + */ + TUint8 iMedianCount; + + /** + * index of the latest median item in the median table + */ + TUint8 iLatestMedian; + + /** + * index of the latest rcpi item in the rcpi table + */ + TUint8 iOldestValue; + + /** + * index of the latest rcpi item in the rcpi table + */ + TUint8 iLatestValue; + + /** + * index of the least rcpi item in the rcpi table + */ + TUint8 iLeastRcpi; + + /** + * index of the biggest rcpi item in the rcpi table + */ + TUint8 iMaxRcpi; + + /** + * Used value count, max value is KValueCountMax + */ + TUint8 iValueCountMax; + + /** + * Used value count, max value is KValueCountMax + */ + TUint8 iMinValueCountForPrediction; + + /** + * State information */ + TBool iRunning; + + /** + * Last signal loss prediction indication info + */ + TLastRoam iRoamed; + }; + +#include "umacsignalpredictor.inl" + +#endif // WLANSIGNALPREDICTOR_H