wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_scan_channels.cpp
changeset 0 c40eb8fe8501
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/src/core_scan_channels.cpp	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,195 @@
+/*
+* Copyright (c) 2005-2006 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 for manipulating scan channels masks.
+*
+*/
+
+
+#include "core_scan_channels.h"
+#include "core_tools.h"
+#include "am_debug.h"
+
+const u16_t SCAN_BAND_2DOT4GHZ_MASK = 0x1FFF;
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_scan_channels_c::core_scan_channels_c() :
+    channels2dot4ghz_m( 0 )
+    {
+    DEBUG( "core_scan_channels_c::core_scan_channels_c()" );
+
+    core_tools_c::fillz(
+        reinterpret_cast<u8_t*>( &channel_mask_m ),
+        sizeof( channel_mask_m ) );       
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_scan_channels_c::core_scan_channels_c(
+    const core_scan_channels_s& channels ) :
+    channels2dot4ghz_m( 0 )
+    {
+    DEBUG( "core_scan_channels_c::core_scan_channels_c() (channels)" );
+
+    set( channels );
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_scan_channels_c::core_scan_channels_c(
+    const core_scan_channels_c& channels ) :
+    channels2dot4ghz_m( 0 )
+    {
+    DEBUG( "core_scan_channels_c::core_scan_channels_c() (channels)" );
+
+    set( channels );
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+core_scan_channels_c::~core_scan_channels_c()
+    {
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+const core_scan_channels_s& core_scan_channels_c::channels()
+    {
+    if ( channel_mask_m.band & SCAN_BAND_2DOT4GHZ )
+        {
+        core_tools_c::copy(
+            &channel_mask_m.channels2dot4ghz[0],
+            reinterpret_cast<u8_t*>( &channels2dot4ghz_m ),
+            sizeof( channels2dot4ghz_m ) );
+        }
+
+    return channel_mask_m;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_scan_channels_c::set(
+    const core_scan_channels_s& channels )
+    {
+    channel_mask_m = channels;
+    channels2dot4ghz_m = 0;
+
+    if ( channel_mask_m.band & SCAN_BAND_2DOT4GHZ )
+        {
+        core_tools_c::copy(
+            reinterpret_cast<u8_t*>( &channels2dot4ghz_m ),
+            &channels.channels2dot4ghz[0],            
+            sizeof( channels2dot4ghz_m ) );         
+        }        
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_scan_channels_c::set(
+    const core_scan_channels_c& channels )
+    {
+    channel_mask_m.band = channels.channel_mask_m.band;
+    channels2dot4ghz_m = 0;
+
+    if ( channel_mask_m.band & SCAN_BAND_2DOT4GHZ )
+        {
+        channels2dot4ghz_m = channels.channels2dot4ghz_m;
+        }    
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_scan_channels_c::merge(
+    const core_scan_channels_c& channels )
+    {
+    channel_mask_m.band |= channels.channel_mask_m.band;
+
+    if ( channels.channel_mask_m.band & SCAN_BAND_2DOT4GHZ )
+        {
+        channels2dot4ghz_m |= channels.channels2dot4ghz_m;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_scan_channels_c::add(
+    u8_t band,
+    u8_t channel )
+    {
+    if ( band & SCAN_BAND_2DOT4GHZ &&
+         channel &&
+         channel <= SCAN_BAND_2DOT4GHZ_MAX_CHANNEL_EURO )
+        {
+        channel_mask_m.band |= band;
+
+        channels2dot4ghz_m |= static_cast<u16_t>( 1 << ( channel - 1 ) );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_scan_channels_c::invert_channels()
+    {
+    channels2dot4ghz_m ^= SCAN_BAND_2DOT4GHZ_MASK;
+    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+void core_scan_channels_c::remove(
+	    u8_t band,
+	    u8_t channel )
+	    {
+	    if ( band & SCAN_BAND_2DOT4GHZ &&
+	         channel &&
+	         channel <= SCAN_BAND_2DOT4GHZ_MAX_CHANNEL_EURO )
+	        {
+	        u16_t mask = static_cast<u16_t>( 1 << ( channel - 1 ) );
+	        mask ^= SCAN_BAND_2DOT4GHZ_MASK;
+	        channels2dot4ghz_m &= mask;
+	        
+	        if( channels2dot4ghz_m == 0 )
+	            {
+	            channel_mask_m.band &= ( ~SCAN_BAND_2DOT4GHZ );
+	            }        	
+	        }
+	    }
+
+// ---------------------------------------------------------------------------
+// ---------------------------------------------------------------------------
+//
+bool_t core_scan_channels_c::is_empty(
+    u8_t band )
+    {
+    if ( ( band & SCAN_BAND_2DOT4GHZ ) &&
+         ( channel_mask_m.band & SCAN_BAND_2DOT4GHZ ) &&
+         ( channels2dot4ghz_m & SCAN_BAND_2DOT4GHZ_MASK ) )
+        {
+        return false_t;
+        }
+
+    return true_t;
+    }