diff -r c40eb8fe8501 -r 6524e815f76f wlan_bearer/wlanengine/wlan_symbian/wlanengine_symbian_3.1/inc/wlanbgscanstates.h --- /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