wlan_bearer/wlanldd/wlan_common/umac_common/inc/UmacDot11Idle.h
changeset 0 c40eb8fe8501
--- /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