diff -r 000000000000 -r c40eb8fe8501 wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacDot11Idle.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacDot11Idle.h Tue Feb 02 02:03:13 2010 +0200 @@ -0,0 +1,326 @@ +/* +* Copyright (c) 2005-2009 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 WlanDot11Idle class +* +*/ + +/* +* %version: 26 % +*/ + +#ifndef WLANDOT11IDLE_H +#define WLANDOT11IDLE_H + +#include "UmacDot11State.h" + +/** +* Logical start state of the dot11 protocol statemachine +* +* @lib wlanumac.lib +* @since S60 v3.1 +*/ +class WlanDot11Idle : public WlanDot11State + { + // Types for the FSM + + // events for the FSM + enum TEvent + { + ESTATEENTRY, // state entry action to be executed + ETXCOMPLETE, // underlying sw layer tx delivery complete event + ESCAN, // scan event + ECONNECT, // connect to BSS event + ECONNECTIBSS, // connect to IBSS event + EDISCONNECT, // disconnect event + ERELEASE, // release event + EABORT, // abort execution event + EEVENTMAX // defined as an upper bound + }; + + // states of the FSM + enum TState + { + EINIT, // start state of the state machine + EWRITEMIB, // write mib + EFINIT, // end state + ESTATEMAX // defined as an upper bound + }; + +public: + + /** + * C++ default constructor. + */ + WlanDot11Idle() : + iState( EINIT ), + iCompletionCode( KErrNone ), + iEventMask( 0 ) {}; + + /** + * Destructor. + */ + virtual ~WlanDot11Idle() {}; + + void Set( TInt aCompletionCode ); + + /** + * Requests this state to indicate scan completion to management client + * upon state entry. + * + * @since S60 3.2 + */ + void CompleteScanUponEntry(); + +private: + + virtual void Entry( WlanContextImpl& aCtxImpl ); + virtual void Exit( WlanContextImpl& aCtxImpl ); + + /** + * Connect (authenticate and associate) to a WLAN network + * + * @since S60 3.1 + * @param aCtxImpl statemachine context + * @param aSSID Name of the network + * @param aBSSID BSSID of the access point + * @param aAuthAlgorithmNbr Authentication algorithm number to be used + * @param aEncryptionStatus Used encryption level + * @param aIsInfra ETrue when connecting to infrastructure network + * @param aScanResponseFrameBodyLength length of the scan response frame body + * @param aScanResponseFrameBody scan response frame body + * @param aIeData The IE(s) to be included into the (re-)association request. + * NULL, if none to be included + * @param aIeDataLength Length of the IE(s) to be included into the + * (re-)association request + * @return ETrue if a state transition occurred + * EFalse otherwise + */ + virtual TBool Connect( + WlanContextImpl& aCtxImpl, + const TSSID& aSSID, + const TMacAddress& aBSSID, + TUint16 aAuthAlgorithmNbr, + TEncryptionStatus aEncryptionStatus, + TBool aIsInfra, + TUint16 aScanResponseFrameBodyLength, + const TUint8* aScanResponseFrameBody, + const TUint8* aIeData, + TUint16 aIeDataLength ); + + virtual TBool StartIBSS( + WlanContextImpl& aCtxImpl, + const TSSID& aSSID, + TUint32 aBeaconInterval, + TUint32 aAtim, + TUint32 aChannel, + TEncryptionStatus aEncryptionStatus); + + virtual TBool Disconnect( WlanContextImpl& aCtxImpl ); + + /** + * Scan all available networks. + * This SW module decides is background scan or foreground scan used + * @param aCtxImpl statemachine context + * @param aMode passive or active scan see #TScanMode + * @param aSSID Network that APs are scanned. Can be broadcast SSID. + * @param aScanRate Rate that is used in active scanning + * @param aMinChannelTime min. time to listen beacons/probe responses on + * a channel + * @param aMaxChannelTime max. time to listen beacons/probe responses on + * a channel + * @param aSplitScan if ETrue, use split scan + * @return KErrNone = command completed successfully, + * any other = failure + */ + virtual TBool RealScan( + WlanContextImpl& aCtxImpl, + TScanMode aMode, + const TSSID& aSSID, + TUint32 aScanRate, + SChannels& aChannels, + TUint32 aMinChannelTime, + TUint32 aMaxChannelTime, + TBool aSplitScan ); + + /** + * From MWlanUserEvent + * Make system ready for unloading + * + * @since S60 3.1 + */ + virtual void FinitSystem( WlanContextImpl& aCtxImpl ); + + /** + * From MWlanUserEvent + * Add/set (or replace) a broadcast WEP key also sets it as a PTK + * + * @since S60 3.1 + * @param aCtxImpl statemachine context + * @param aKeyIndex Index of the key in the default key table + * @param aKeyLength Length of the key in BYTES + * @param aKey The WEP key + * @param aMac MAC address associated with the key + * @return ETrue if state transition occurred, EFalse otherwise + */ + virtual TBool AddBroadcastWepKey( + WlanContextImpl& aCtxImpl, + TUint32 aKeyIndex, + TBool aUseAsDefaulKey, + TUint32 aKeyLength, + const TUint8 aKey[KMaxWEPKeyLength], + const TMacAddress& aMac ); + + virtual TBool AddUnicastWepKey( + WlanContextImpl& aCtxImpl, + const TMacAddress& aMacAddr, + TUint32 aKeyLength, + const TUint8 aKey[KMaxWEPKeyLength]); + + /** + * Returns the states name + * @param aLength (OUT) length of the name of the state + * @return name of the state + */ +#ifndef NDEBUG + virtual const TInt8* GetStateName( TUint8& aLength ) const; +#endif // !NDEBUG + + /** + * ?member_description. + * @since S60 3.1 + * @param aCtxImpl global statemachine context + */ + void ChangeInternalState( + WlanContextImpl& aCtxImpl, + TState aNewState ); + + /** + * ?member_description. + * @since S60 3.1 + * @param aCtxImpl global statemachine context + */ + void Fsm( + WlanContextImpl& aCtxImpl, + TEvent aEvent ); + + /** + * ?member_description. + * @since S60 3.1 + * @param aCtxImpl global statemachine context + */ + void OnStateEntryEvent( WlanContextImpl& aCtxImpl ); + + /** + * ?member_description. + * @since S60 3.1 + * @param aCtxImpl global statemachine context + */ + void OnTxCompleteEvent( WlanContextImpl& aCtxImpl ); + + /** + * ?member_description. + * @since S60 3.1 + * @param aCtxImpl global statemachine context + */ + void OnAbortEvent( WlanContextImpl& aCtxImpl ); + + /** + * ?member_description. + * @since S60 3.1 + * @param aCtxImpl global statemachine context + */ + void OnScanEvent( WlanContextImpl& aCtxImpl ); + + /** + * ?member_description. + * @since S60 3.1 + * @param aCtxImpl global statemachine context + */ + void OnConnectEvent( WlanContextImpl& aCtxImpl ); + + /** + * ?member_description. + * @since S60 3.1 + * @param aCtxImpl global statemachine context + */ + void OnConnectIbssEvent( WlanContextImpl& aCtxImpl ); + + /** + * ?member_description. + * @since S60 3.1 + * @param aCtxImpl global statemachine context + */ + void OnDisconnectEvent( WlanContextImpl& aCtxImpl ); + + /** + * ?description + * + * @since S60 3.1 + * @param aCtxImpl global statemachine context + */ + void OnReleaseEvent( WlanContextImpl& aCtxImpl ); + + /** + * ?member_description. + * @since S60 3.1 + * @param aCtxImpl global statemachine context + */ + void WriteSleepModeMib( WlanContextImpl& aCtxImpl ); + + void GenerateRandomBssIDForIbss( WlanContextImpl& aCtxImpl ) const; + + void CompleteOid( WlanContextImpl& aCtxImpl ); + + /** + * Indicates scan completion to management client if necessary + * + * @since S60 3.2 + * @param aCtxImpl global statemachine context + */ + void IndicateScanCompletion( WlanContextImpl& aCtxImpl ); + + // Prohibit copy constructor + WlanDot11Idle( const WlanDot11Idle& ); + // Prohibit assigment operator + WlanDot11Idle& operator= ( const WlanDot11Idle& ); + +private: // Data + + TState iState; + +#ifndef NDEBUG + /** max length of state name for tracing */ + enum { KMaxStateStringLength = 50 }; + /** max length of event name for tracing */ + enum { KMaxEventStringLength = KMaxStateStringLength }; + + /** state names for tracing */ + static const TUint8 iStateName[ESTATEMAX][KMaxStateStringLength]; + /** event names for tracing */ + static const TUint8 iEventName[EEVENTMAX][KMaxEventStringLength]; + /** state name */ + static const TInt8 iName[]; +#endif + + /** completion code for user request */ + TInt iCompletionCode; + + static const TUint KCompleteUponEntry = (1 << 0); + /** indicate scan completion to management client upon state entry */ + static const TUint KIndicateScanCompletionUponEntry = (1 << 1); + + TUint iEventMask; + }; + +#endif // WLANDOT11IDLE_H