wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/genscanlist.h
changeset 0 c40eb8fe8501
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlan_bearer/wlanengine/wlan_common/wlanengine_common_3.1/inc/genscanlist.h	Tue Feb 02 02:03:13 2010 +0200
@@ -0,0 +1,213 @@
+/*
+* Copyright (c) 2002-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:  Declaration of the ScanList class
+*
+*/
+
+
+#ifndef GENSCANLIST_H
+#define GENSCANLIST_H
+
+#include "am_platform_libraries.h"
+
+/** The default maximum size of the scan list is 50kB. */
+const u32_t SCAN_LIST_DEFAULT_MAX_SIZE = 51200;
+/** The default granularity of the scan list is 8kB. */
+const u32_t SCAN_LIST_DEFAULT_GRANULARITY = 8192;
+/** The return value for failed Append(). */
+const u32_t APPEND_FAILED_NO_MEMORY = 0;
+/**
+ * The definition for beacon/probe response frame data.
+ * Always used as pointer to the frame data, i.e. ScanFrame*.
+ */
+typedef u8_t ScanFrame;
+
+/**
+ * Container class for delivering scan results.
+ */
+NONSHARABLE_CLASS( ScanList )
+    {
+
+    friend class ScanListIterator;
+
+public: // Methods
+
+    // Constructors and destructor
+
+    /**
+     * Constructor for an empty container with default parameters.
+     */
+    ScanList();
+
+    /**
+     * Constructor for an empty container.
+     *
+     * @param max_size The maximum size of the container.
+     * @param granularity The granularity of the container.
+     * @note After the initial allocation, memory is always allocated
+     *       in multiples of the granularity parameter.
+     */
+    ScanList(
+        u32_t max_size,
+        u32_t granularity = SCAN_LIST_DEFAULT_GRANULARITY );
+
+    /**
+     * Destructor.
+     */
+    ~ScanList();
+
+    /**
+     * Returns the number of access points the instance contains.
+     *
+     * @return the number of access points the instance contains.
+     */
+    inline u32_t Count() const;
+
+    /**
+     * Appends one beacon/probe response frame to container.
+     *
+     * @param data_length Length of the frame data to be appended.
+     * @param data Pointer to the frame data.
+     * @return APPEND_FAILED_NO_MEMORY if there is not enough space,
+     *         otherwise the new size of the container.
+     * @note If the current size of the container is not enough for the
+     *       frame, the container will automatically allocate more memory.
+     */
+    u32_t Append(
+        u32_t data_length,
+        const ScanFrame* data );
+
+    /**
+     * Returns the current size of the container.
+     *
+     * @return The current size of the container in bytes.
+     */
+    inline u32_t Size() const;
+
+    /**
+     * Returns the maximum size of the container.
+     *
+     * @return The maximum size of the container in bytes.
+     */
+    inline u32_t MaxSize() const;
+
+    /**
+     * Sets the maximum size of currently allocated container to the given size.
+     *
+     * @param max_size Maximum size of the container in bytes.
+     * @return The current maximum size if size could not be changed,
+     *         the new maximum size otherwise.
+     * @note If the current container is smaller than the given size,
+     *       more memory is automatically allocated.
+     * @note The maximum size is still limited by the size parameter given
+     *       when the class was instantiated.
+     * @note Making the container smaller than the current size (other than
+     *       zero) is not supported at the moment.
+     */
+    u32_t SetCurrentMaxSize(
+        u32_t max_size );
+
+    /**
+     * Return a pointer to the currently allocated container.
+     *
+     * @return NULL if the container is empty, pointer to the
+     *         currently allocated container otherwise.
+     */
+    inline u8_t* Data() const;
+
+    /**
+     * Updates the amount of frames and the current size of the container.
+     *
+     * @param count The amount of beacon/probe response frames stored in the container.
+     * @param size The current size of the container (in bytes).
+     * @note This method does not do any checking on the parameters and it
+     *       is supposed to be used only when the container has been
+     *       directly modified through Data().
+     */
+    inline void Update(
+        u32_t count,
+        u32_t size );
+
+    /**
+     * Clears the container.
+     */
+    inline void ClearAll();
+
+    /**
+     * The alignment of one beacon/probe response frame data must be four bytes.
+     * Returns the amount of needed padding for a particular frame length.
+     *
+     * @param data_length Length of the frame data in bytes.
+     * @return Total length in bytes with additional padding.
+     */
+    inline static u32_t AddPadding(
+        u32_t data_length );
+
+    /**
+     * Compresses the container so it will be occupy the minimum amount of memory.
+     *
+     * @return The current size of the container in bytes.
+     */
+    inline u32_t Compress();
+
+private: // Methods
+
+    /**
+     * Prohibit copy constructor.
+     */
+    ScanList(
+        const ScanList& );
+
+    /**
+     * Check that the given frame is valid, i.e. it has all mandatory IE fields included.
+     *
+     * @param data Pointer to the frame data.
+     * @return true_t if the frame is valid, false_t otherwise.
+     * @note The data being checked has to be stored in the container.
+     */
+    bool_t CheckData(
+        const ScanFrame* data ) const;
+
+    /**
+     * Copy data from source buffer to target buffer.
+     *
+     * @param trg Pointer to the target buffer.
+     * @param src Pointer to the source buffer.
+     * @param len Length of data to copy in bytes.
+     * @return Pointer to end of copied data in the target buffer.
+     */
+    u8_t* Copy(
+        void* target,
+        const void* source,
+        u32_t data_length );
+
+private: // Data
+
+    /** The container for storing beacon/probe response frames. */
+    u8_t* data_m;
+    /** The granularity of the container (in bytes). */
+    u32_t granularity_m;
+    /** The amount of beacon/probe response frames stored in the container. */
+    u32_t count_m;
+    /** The current size of the container (in bytes). */
+    u32_t size_m;
+    /** The maximum size of the currently allocated container (in bytes). */
+    u32_t current_max_size_m;
+    /** The maximum size of the container (in bytes). The container will never exceed this limit. */
+    u32_t max_size_m;
+    };
+
+#include "genscanlist.inl"
+
+#endif // GENSCANLIST_H