wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanbgscanstates.h
branchRCL_3
changeset 3 6524e815f76f
child 6 e0f767079796
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanbgscanstates.h	Sat Feb 20 00:38:18 2010 +0200
@@ -0,0 +1,544 @@
+/*
+* Copyright (c) 2009-2010 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:  Class implementing WLAN background scan logic
+*
+*/
+
+/*
+* %version: 2 %
+*/
+
+#ifndef WLANBGSCANSTATES_H
+#define WLANBGSCANSTATES_H
+
+//#include "wlanbgscan.h"
+#include "awsinterface.h"
+#include "awsenginebase.h"
+#include "wlanscanproviderinterface.h"
+#include "wlantimerserviceinterface.h"
+#include "wlanbgscanawscommsinterface.h"
+#include "wlanbgscancommandlistener.h"
+
+// forward declarations
+class CWlanBgScan;
+class CWlanTimer;
+
+/**
+ *  WLAN Background Scan States
+ *  This class implements WLAN Background Scan state machine.
+ *  
+ *  @since S60 S60 v5.2
+ */
+NONSHARABLE_CLASS( CWlanBgScanStates )
+    {
+
+public:
+        
+    /**
+     * States for WLAN Background Scan.
+     */
+    enum TWlanBgScanState
+        {
+        EBgScanInit = 0,
+        EBgScanOff,
+        EBgScanOn,
+        EBgScanAuto,
+        EBgScanAutoAws,
+        EBgScanSendingAwsCmd,
+        EBgScanStateMax
+        };
+    
+    /**
+     * Events for state machine.
+     */
+    enum TWlanBgScanSmEvent
+        {
+        EBgScanEventAwsCmdComplete = 0,
+        EBgScanEventIntervalChanged,
+        EBgScanEventAwsStartupComplete,
+        EBgScanEventAwsIntervalChanged
+        };
+
+    /**
+     * Constructor.
+     */
+    CWlanBgScanStates( CWlanBgScan& aBgScan, MWlanScanResultProvider& aProvider, MWlanTimerServices& aTimerServices );
+    
+    /**
+     * Two-phased constructor.
+     */
+    void ConstructL();
+    
+    /**
+    * Destructor.
+    */
+    virtual ~CWlanBgScanStates();
+    
+    /**
+     * Start aggressive background scanning.
+     *
+     * @since S60 v5.2
+     * @param aInterval interval for aggressive BG scanning, in seconds
+     * @param aDuration aggressive mode duration, in microseconds
+     */
+    void StartAggressiveBgScan( TUint32& aInterval, TUint32& aDuration );
+    
+    /**
+     * Stop aggressive scanning.
+     *
+     * @since S60 v5.2
+     * @param aPtr pointer to CWlanBgScanStates instance
+     * @return always KErrNone
+     */
+    static TInt StopAggressiveBgScan( TAny* aPtr );
+    
+private:
+   
+    /**
+     * Default constructor, no implementation.
+     */
+    CWlanBgScanStates();
+    
+    /**
+     * State machine for Init state
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     * @param aEvent event to handle
+     */
+    void InStateInit( TWlanBgScanState& aState, const CWlanBgScanStates::TWlanBgScanSmEvent& aEvent );
+    
+    /**
+     * State machine for Off state
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     * @param aEvent event to handle
+     */
+    void InStateOff( TWlanBgScanState& aState, const CWlanBgScanStates::TWlanBgScanSmEvent& aEvent );
+    
+    /**
+     * State machine for On state
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     * @param aEvent event to handle
+     */
+    void InStateOn( TWlanBgScanState& aState, const CWlanBgScanStates::TWlanBgScanSmEvent& aEvent );
+
+    /**
+     * State machine for Auto state
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     * @param aEvent event to handle
+     */
+    void InStateAuto( TWlanBgScanState& aState, const CWlanBgScanStates::TWlanBgScanSmEvent& aEvent );
+    
+    /**
+     * State machine for Auto with AWS state
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     * @param aEvent event to handle
+     */
+    void InStateAutoAws( TWlanBgScanState& aState, const CWlanBgScanStates::TWlanBgScanSmEvent& aEvent );
+    
+    /**
+     * State machine for Sending AWS command state
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     * @param aEvent event to handle
+     */
+    void InStateSendingAwsCmd( TWlanBgScanState& aState, const CWlanBgScanStates::TWlanBgScanSmEvent& aEvent );
+
+    /**
+     * Handles state transition from SendingAwsCmd state to Off state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     */
+    void StateChangeSendingAwsCmdToOff( TWlanBgScanState& aState );
+    
+    /**
+     * Handles state transition from SendingAwsCmd state to On state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     */
+    void StateChangeSendingAwsCmdToOn( TWlanBgScanState& aState );
+
+    /**
+     * Handles state transition from SendingAwsCmd state to Auto state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     */
+    void StateChangeSendingAwsCmdToAuto( TWlanBgScanState& aState );
+    
+    /**
+     * Handles state transition from SendingAwsCmd state to AutoAws state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     */
+    void StateChangeSendingAwsCmdToAutoAws( TWlanBgScanState& aState );
+    
+    /**
+     * Handles state transition from Init to Automatic state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     */
+    void StateChangeInitToAutoAws( TWlanBgScanState& aState );
+    
+    /**
+     * Handles state transition from AutoAws to On state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     */
+    void StateChangeAutoAwsToOn( TWlanBgScanState& aState );
+    
+    /**
+     * Handles state transition from AutoAws to Off state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     */
+    void StateChangeAutoAwsToOff( TWlanBgScanState& aState );
+    
+    /**
+     * Handles state transition from Auto to Off state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     */
+    void StateChangeAutoToOff( TWlanBgScanState& aState );
+    
+    /**
+     * Handles state transition from Auto to Auto state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     */
+    void StateChangeAutoToAuto( TWlanBgScanState& aState );
+    
+    /**
+     * Handles state transition from Auto to On state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     * @param aNewBgScanSetting new background scan setting to be taken into use
+     */
+    void StateChangeAutoToOn( TWlanBgScanState& aState, TUint32 aNewBgScanSetting );
+    
+    /**
+     * Handles state transition from On to Off state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     */
+    void StateChangeOnToOff( TWlanBgScanState& aState );  
+    
+    /**
+     * Handles state transition from On to Automatic state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     */
+    void StateChangeOnToAutomatic( TWlanBgScanState& aState );
+    
+    /**
+     * Handles state transition from On to On state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     * @param aNewBgScanSetting new background scan setting to be taken into use
+     */
+    void StateChangeOnToOn( TWlanBgScanState& aState, TUint32 aNewBgScanSetting );
+    
+    /**
+     * Handles state transition from Off to Automatic state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     */
+    void StateChangeOffToAutomatic( TWlanBgScanState& aState );
+    
+    /**
+     * Handles state transition from Off to On state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     * @param aNewBgScanInterval new background scan interval to be taken into use
+     */
+    void StateChangeOffToOn( TWlanBgScanState& aState, TUint32 aNewBgScanInterval );
+    
+    /**
+     * Handles state transition from Init to Auto state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     * @param aNewBgScanInterval new background scan interval to be taken into use
+     */
+    void StateChangeInitToAuto( TWlanBgScanState& aState );
+    
+    /**
+     * Handles state transition from Init to Off state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     * @param aNewBgScanInterval new background scan interval to be taken into use
+     */
+    void StateChangeInitToOff( TWlanBgScanState& aState );
+    
+    /**
+     * Handles state transition from Init to On state.
+     *
+     * @since S60 v5.2
+     * @param aState reference to state
+     * @param aNewBgScanInterval new background scan interval to be taken into use
+     */
+    void StateChangeInitToOn( TWlanBgScanState& aState );
+        
+    /**
+     * Getter for AwsStartupStatus.
+     *
+     * @since S60 v5.2
+     * @return AwsStartupStatus
+     */
+    inline TInt AwsStartupStatus() const
+        {
+        return iAwsStartupStatus;
+        }
+    
+    /**
+     * Getter for AwsCmdStatus.
+     *
+     * @since S60 v5.2
+     * @return AwsCmdStatus
+     */
+    inline TInt AwsCmdStatus() const
+        {
+        return iAwsCmdStatus;
+        }
+    
+    /**
+     * Getter for AwsCmd.
+     *
+     * @since S60 v5.2
+     * @return AwsCmd
+     */
+    inline TInt AwsCmd() const
+        {
+        return iAwsCmd;
+        }
+    
+    /**
+     * Getter for AutoInterval.
+     *
+     * @since S60 v5.2
+     * @return AutoInterval
+     */
+    inline TInt AutoInterval() const
+        {
+        return iAutoInterval;
+        }
+    
+    /**
+     * Sets background scan interval and refreshes the used
+     * interval.
+     *
+     * @since S60 v5.2
+     * @param aInterval new background scan interval to be taken into use
+     */
+    void SetInterval( TUint32 aInterval );
+    
+    /**
+     * Refreshes the used background scan interval.
+     *
+     * @since S60 v5.2
+     */
+    void RefreshUsedInterval();
+      
+protected:
+    
+    /**
+     * Main state machine
+     *
+     * @since S60 v5.2
+     * @param aEvent event for state machine
+     */
+    void NextState( const CWlanBgScanStates::TWlanBgScanSmEvent& aEvent );
+        
+    /**
+     * Get current interval.
+     *
+     * @since S60 v5.2
+     * @return current interval in use
+     */
+    TUint32 GetBgInterval();
+    
+    /**
+     * Interval change is delivered to state machine
+     * 
+     * @since S60 v5.2
+     */
+    void IntervalChanged();
+    
+    /**
+     * PSM server mode changed command is given to state
+     * machine
+     *
+     * @since S60 v5.2
+     */
+    void DeliverPsmServerModeChange();
+    
+    /**
+     * Set AWS startup status.
+     *
+     * @param aStatus new status
+     * @since S60 v5.2
+     */
+    inline void SetAwsStartupStatus( TInt aStatus )
+        {
+        iAwsStartupStatus = aStatus;
+        }
+    
+    /**
+     * Set AWS command status.
+     *
+     * @param aCmd new command
+     * @param aStatus new status
+     * @since S60 v5.2
+     */
+    inline void SetAwsCmdStatus( MWlanBgScanAwsComms::TAwsCommand aCmd, TInt aStatus )
+        {
+        iAwsCmd = aCmd;
+        iAwsCmdStatus = aStatus;
+        }
+    
+    /**
+     * Set Auto interval.
+     *
+     * @param aAutoInterval new auto interval
+     * @since S60 v5.2
+     */
+    inline void SetAutoInterval( TUint aAutoInterval )
+        {
+        iAutoInterval = aAutoInterval;
+        }
+    
+private: // data
+    
+    /**
+     * Reference to the Bg Scan
+     */
+    CWlanBgScan& iBgScan;
+    
+    /**
+     * Used background scan interval, in seconds.
+     * This is the smaller one of iBgScanInterval
+     * and iAggressiveBgScanInterval. 
+     */
+    TUint32 iUsedBgScanInterval;
+    
+    /**
+     * Scan interval dictated by AWS component or
+     * set (fixed interval) from UI. The value is
+     * in seconds.
+     */
+    TUint32 iBgScanInterval;
+    
+    /**
+     * Aggressive background scan interval, in seconds.
+     * Interval used for temporary aggressive BG scanning
+     * when requested by the client or when activated by
+     * WLAN Engine.
+     */
+    TUint32 iAggressiveBgScanInterval;
+     
+    /**
+     * Timer guarding when to drop out of aggressive BG scan mode
+     */
+    CWlanTimer* iAggressiveBgScanTimer; 
+     
+    /**
+     * Next state to enter if AWS command delivery
+     * is successful.
+     */
+    TWlanBgScanState iNextState;
+    
+    /**
+     * AWS startup status code.
+     */
+    TInt iAwsStartupStatus;
+    
+    /**
+     * AWS command.
+     */
+    MWlanBgScanAwsComms::TAwsCommand iAwsCmd;
+    
+    /**
+     * AWS command status.
+     */
+    TInt iAwsCmdStatus;
+    
+    /**
+     * Auto interval to be used in AutoAWS and Auto states
+     */
+    TUint iAutoInterval;
+    
+protected: // data
+    
+    /**
+     * Reference to the Scan Result Provider
+     */
+    MWlanScanResultProvider& iProvider;
+
+    /**
+     * Reference to WLAN Timer services. 
+     */
+    MWlanTimerServices& iTimerServices;
+
+    /**
+     * Current background scan state. 
+     */
+    TWlanBgScanState iBgScanState;
+    
+    /**
+     * Received settings for background scan.
+     */
+    MWlanBgScanProvider::TWlanBgScanSettings iBgScanSettings;
+    
+    /**
+     * Id of the timer service request regarding 
+     * background scan interval change.
+     */
+    TUint iIntervalChangeRequestId;
+    
+    /**
+     * Completed AWS command.
+     */
+    MWlanBgScanAwsComms::TAwsCommand iCompletedAwsCommand;
+    
+    /**
+     * Status code of the completed AWS command.
+     */
+    TInt iAwsCommandCompletionCode;           
+    };
+
+#endif // WLANBGSCANSTATES_H