diff -r 000000000000 -r c40eb8fe8501 wlan_bearer/wlanldd/wlan_common/umac_common/src/umacdot11ibssnormalmode.cpp --- /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 ); + }