wlan_bearer/wlanldd/wlan_common/umac_common/src/umacdot11ibssnormalmode.cpp
changeset 0 c40eb8fe8501
child 14 13838cf40350
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanldd/wlan_common/umac_common/src/umacdot11ibssnormalmode.cpp	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,189 @@
+/*
+* 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:   Implementation of the WlanDot11IbssNormalMode class.
+*
+*/
+
+/*
+* %version: 14 %
+*/
+
+#include "config.h"
+#include "umacdot11ibssnormalmode.h"
+#include "UmacContextImpl.h"
+
+#ifndef NDEBUG
+const TInt8 WlanDot11IbssNormalMode::iName[] = "dot11ibss::dot11-normalmode";
+#endif
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void WlanDot11IbssNormalMode::Entry( 
+    WlanContextImpl& /*aCtxImpl*/ )
+    {
+    // nothing here
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void WlanDot11IbssNormalMode::Exit( 
+    WlanContextImpl& /*aCtxImpl*/ )
+    {
+    // nothing here
+    }
+
+#ifndef NDEBUG 
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+const TInt8* WlanDot11IbssNormalMode::GetStateName( 
+    TUint8& aLength ) const
+    {
+    aLength = sizeof( iName );
+    return iName;
+    }
+#endif
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TBool WlanDot11IbssNormalMode::Disconnect( 
+    WlanContextImpl& aCtxImpl )
+    {
+    // set completion code to idle state
+    // as it does the request completion
+    aCtxImpl.iStates.iIdleState.Set( KErrNone );
+    ChangeState( aCtxImpl, 
+        *this,                                  // prev state
+        aCtxImpl.iStates.iSoftResetState        // next state
+        );                      
+
+    // notify of state transition
+    return ETrue;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TBool WlanDot11IbssNormalMode::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 )
+    {
+    TBool ret( ETrue );
+
+    (aCtxImpl.GetBssId())= aBSSID;   
+    (aCtxImpl.GetSsId()) = aSSID;   
+    (aCtxImpl.EncryptionStatus()) = aEncryptionStatus;           
+    aCtxImpl.NetworkOperationMode( WHA::EIBSS );
+
+    // store Tx IE data for later access
+    // pointers supplied are valid to the point the
+    // corresponding completion method is called
+    aCtxImpl.IeData( aIeData );
+    aCtxImpl.IeDataLength( aIeDataLength );
+
+
+    // check do we meet the requirements for the network
+    // and construct necessary objects for establishing the connection
+    if ( InitNetworkConnect( 
+            aCtxImpl,
+            aScanResponseFrameBodyLength, 
+            aScanResponseFrameBody ) )
+        {
+        // continue
+
+        // make WHA types
+        WHA::SSSID ssid;
+        ssid.iSSIDLength = aSSID.ssidLength;
+        os_memcpy( ssid.iSSID, aSSID.ssid, ssid.iSSIDLength );
+
+        ChangeState( aCtxImpl, 
+            *this,                                  // prev state
+            aCtxImpl.iStates.iPrepareForIbssMode    // next state
+            );            
+        }
+    else    // --- InitNetworkConnect failure ---
+        {
+        // abort
+        ret = EFalse;
+        OnOidComplete( aCtxImpl, KErrGeneral );
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+TBool WlanDot11IbssNormalMode::RealScan(
+    WlanContextImpl& aCtxImpl,
+    TScanMode aMode,                    
+    const TSSID& aSSID,                 
+    TUint32 aScanRate,                    
+    SChannels& aChannels,
+    TUint32 aMinChannelTime,            
+    TUint32 aMaxChannelTime,
+    TBool aSplitScan )    
+    {
+    // scanning mode requested
+    // set parameters
+    // NOTE: OID command parameters are guaranteed to be valid
+    // to the point a correcponding completion method is called
+
+    aCtxImpl.iStates.iIbssScanningMode.Set( 
+        aCtxImpl, aMode, aSSID, aScanRate, aChannels, 
+        aMinChannelTime, aMaxChannelTime, aSplitScan );
+
+    ChangeState( aCtxImpl, 
+        *this,                                  // prev state
+        aCtxImpl.iStates.iIbssScanningMode      // next state
+        );                      
+    return ETrue; // global statemachine transition will occur 
+    }
+
+// ---------------------------------------------------------------------------
+// 
+// ---------------------------------------------------------------------------
+//
+void WlanDot11IbssNormalMode::OnBeaconFrameRx( 
+    WlanContextImpl& aCtxImpl,
+    const TAny* aFrame,
+    const TUint32 aLength,
+    WHA::TRcpi aRcpi,
+    TUint8* aBuffer )
+    {
+    OsTracePrint( KWlmIndication | KRxFrame, (TUint8*)
+        ("UMAC: WlanDot11IbssNormalMode::OnBeaconFrameRx"));
+
+    // pass the frame to the mgmt client
+    XferDot11FrameToMgmtClient( aCtxImpl, aFrame, aLength, aRcpi, aBuffer );      
+    }