wlan_bearer/wlanldd/wlan_common/umac_common/inc/umacsignalpredictor.h
changeset 0 c40eb8fe8501
--- /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 <wha_types.h>
+#else
+#include <wlanwha_types.h>
+#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