summaryrefslogtreecommitdiff
path: root/wilink_6_1/stad/src/Sta_Management/ScanCncnOsSm.c
diff options
context:
space:
mode:
Diffstat (limited to 'wilink_6_1/stad/src/Sta_Management/ScanCncnOsSm.c')
-rw-r--r--wilink_6_1/stad/src/Sta_Management/ScanCncnOsSm.c515
1 files changed, 515 insertions, 0 deletions
diff --git a/wilink_6_1/stad/src/Sta_Management/ScanCncnOsSm.c b/wilink_6_1/stad/src/Sta_Management/ScanCncnOsSm.c
new file mode 100644
index 0000000..8c33f71
--- /dev/null
+++ b/wilink_6_1/stad/src/Sta_Management/ScanCncnOsSm.c
@@ -0,0 +1,515 @@
+/*
+ * ScanCncnOsSm.c
+ *
+ * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name Texas Instruments nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** \file ScanCncnOsSm.c
+ * \brief Scan concentrator OS scan state machine implementation
+ *
+ * \see ScanCncnApp.c
+ */
+
+
+#define __FILE_ID__ FILE_ID_78
+#include "osTIType.h"
+#include "GenSM.h"
+#include "ScanCncnOsSm.h"
+#include "ScanCncn.h"
+#include "ScanCncnPrivate.h"
+#include "report.h"
+#include "osApi.h"
+#include "siteMgrApi.h"
+#include "regulatoryDomainApi.h"
+#include "scanResultTable.h"
+
+#define SCAN_OID_DEFAULT_PROBE_REQUEST_RATE_G RATE_MASK_UNSPECIFIED /* Let the FW select */
+#define SCAN_OID_DEFAULT_PROBE_REQUEST_RATE_A RATE_MASK_UNSPECIFIED /* Let the FW select */
+#define SCAN_OID_DEFAULT_PROBE_REQUEST_NUMBER_G 3
+#define SCAN_OID_DEFAULT_PROBE_REQUEST_NUMBER_A 3
+#define SCAN_OID_DEFAULT_MAX_DWELL_TIME_PASSIVE_G 100000
+#define SCAN_OID_DEFAULT_MAX_DWELL_TIME_PASSIVE_A 100000
+#define SCAN_OID_DEFAULT_MAX_DWELL_TIME_ACTIVE_G 30000
+#define SCAN_OID_DEFAULT_MAX_DWELL_TIME_ACTIVE_A 30000
+#define SCAN_OID_DEFAULT_MIN_DWELL_TIME_PASSIVE_G 100000
+#define SCAN_OID_DEFAULT_MIN_DWELL_TIME_PASSIVE_A 100000
+#define SCAN_OID_DEFAULT_MIN_DWELL_TIME_ACTIVE_G 15000
+#define SCAN_OID_DEFAULT_MIN_DWELL_TIME_ACTIVE_A 15000
+#define SCAN_OID_DEFAULT_EARLY_TERMINATION_EVENT_PASSIVE_G SCAN_ET_COND_BEACON
+#define SCAN_OID_DEFAULT_EARLY_TERMINATION_EVENT_PASSIVE_A SCAN_ET_COND_BEACON
+#define SCAN_OID_DEFAULT_EARLY_TERMINATION_EVENT_ACTIVE_G SCAN_ET_COND_ANY_FRAME
+#define SCAN_OID_DEFAULT_EARLY_TERMINATION_EVENT_ACTIVE_A SCAN_ET_COND_ANY_FRAME
+
+/* For WiFi WPA OOB scenario, 4 APs need to be configure on the same channel */
+#define SCAN_OID_DEFAULT_EARLY_TERMINATION_COUNT_PASSIVE_G 4
+#define SCAN_OID_DEFAULT_EARLY_TERMINATION_COUNT_PASSIVE_A 4
+#define SCAN_OID_DEFAULT_EARLY_TERMINATION_COUNT_ACTIVE_G 4
+#define SCAN_OID_DEFAULT_EARLY_TERMINATION_COUNT_ACTIVE_A 4
+
+static void scanCncnOsSm_ActionStartGScan (TI_HANDLE hScanCncn);
+static void scanCncnOsSm_ActionStartAScan (TI_HANDLE hScanCncn);
+static void scanCncnOsSm_ActionCompleteScan (TI_HANDLE hScanCncn);
+static void scanCncnOsSm_ActionUnexpected (TI_HANDLE hScanCncn);
+TI_UINT32 scanCncnOsSm_FillAllAvailableChannels (TI_HANDLE hScanCncn, ERadioBand eBand, EScanType eScanType,
+ TScanChannelEntry *pChannelArray, TI_UINT32 uMaxDwellTime,
+ TI_UINT32 uMinChannelTime, EScanEtCondition eETCondition,
+ TI_UINT8 uETFrameNumber);
+
+
+static TGenSM_actionCell tSmMatrix[ SCAN_CNCN_OS_SM_NUMBER_OF_STATES ][ SCAN_CNCN_OS_SM_NUMBER_OF_EVENTS ] =
+ {
+ { /* SCAN_CNCN_OS_SM_STATE_IDLE */
+ { SCAN_CNCN_OS_SM_STATE_SCAN_ON_G, scanCncnOsSm_ActionStartGScan }, /* SCAN_CNCN_OS_SM_EVENT_START_SCAN */
+ { SCAN_CNCN_OS_SM_STATE_IDLE, scanCncnOsSm_ActionUnexpected }, /* SCAN_CNCN_OS_SM_EVENT_SCAN_COMPLETE */
+ },
+ { /* SCAN_CNCN_OS_SM_STATE_SCAN_ON_G */
+ { SCAN_CNCN_OS_SM_STATE_SCAN_ON_G, scanCncnOsSm_ActionUnexpected }, /* SCAN_CNCN_OS_SM_EVENT_START_SCAN */
+ { SCAN_CNCN_OS_SM_STATE_SCAN_ON_A, scanCncnOsSm_ActionStartAScan }, /* SCAN_CNCN_OS_SM_EVENT_SCAN_COMPLETE */
+ },
+ { /* SCAN_CNCN_OS_SM_STATE_SCAN_ON_A */
+ { SCAN_CNCN_OS_SM_STATE_SCAN_ON_A, scanCncnOsSm_ActionUnexpected }, /* SCAN_CNCN_OS_SM_EVENT_START_SCAN */
+ { SCAN_CNCN_OS_SM_STATE_IDLE, scanCncnOsSm_ActionCompleteScan }, /* SCAN_CNCN_OS_SM_EVENT_SCAN_COMPLETE */
+ }
+ };
+
+static TI_INT8 *uStateDescription[] =
+ {
+ "IDLE",
+ "SCAN_ON_G",
+ "SCAN_ON_A"
+ };
+
+static TI_INT8 *uEventDescription[] =
+ {
+ "START",
+ "SCAN_COMPLETE"
+ };
+
+/**
+ * \fn scanCncnOsSm_Create
+ * \brief Creates the OS scan state-machine
+ *
+ * creates the OS scan state-machine
+ *
+ * \param hScanCncn - handle to the scan concentrator object
+ * \return Handle to the newly created OS san SM, NULL if an error occured
+ * \sa scanCncnOsSm_Create, scanCncnOsSm_Destroy
+ */
+TI_HANDLE scanCncnOsSm_Create (TI_HANDLE hScanCncn)
+{
+ TScanCncn *pScanCncn = (TScanCncn*)hScanCncn;
+
+ return genSM_Create (pScanCncn->hOS);
+}
+
+/**
+ * \fn scanCncnOsSm_Init
+ * \brief Initialize the OS scan state-machine
+ *
+ * Initialize the OS scan state-machine
+ *
+ * \param hScanCncn - handle to the scan concentrator object
+ * \return None
+ * \sa scanCncnOsSm_Create
+ */
+void scanCncnOsSm_Init (TI_HANDLE hScanCncn)
+{
+ TScanCncn *pScanCncn = (TScanCncn*)hScanCncn;
+
+ /* initialize the state-machine */
+ genSM_Init (pScanCncn->hOSScanSm, pScanCncn->hReport);
+ genSM_SetDefaults (pScanCncn->hOSScanSm, SCAN_CNCN_OS_SM_NUMBER_OF_STATES, SCAN_CNCN_OS_SM_NUMBER_OF_EVENTS,
+ (TGenSM_matrix)tSmMatrix, SCAN_CNCN_OS_SM_STATE_IDLE, "OS scan SM", uStateDescription,
+ uEventDescription, __FILE_ID__);
+}
+
+/**
+ * \fn scanCncnOsSm_Destroy
+ * \brief Destroys the OS scan state-machine
+ *
+ * Destroys the OS scan state-machine
+ *
+ * \param hScanCncn - handle to the scan concentrator object
+ * \return None
+ * \sa scanCncnOsSm_Create
+ */
+void scanCncnOsSm_Destroy (TI_HANDLE hScanCncn)
+{
+ TScanCncn *pScanCncn = (TScanCncn*)hScanCncn;
+
+ genSM_Unload (pScanCncn->hOSScanSm);
+}
+
+/**
+ * \fn scanCncnOsSm_ActionStartGScan
+ * \brief Scan concentartor OS state machine start scan on G action function
+ *
+ * Scan concentartor OS state machine start scan on G action function.
+ * Starts a sacn on G using all allowed channels
+ *
+ * \param hScanCncn - handle to the scan concentartor object
+ * \return None
+ */
+void scanCncnOsSm_ActionStartGScan (TI_HANDLE hScanCncn)
+{
+ TScanCncn *pScanCncn = (TScanCncn*)hScanCncn;
+ paramInfo_t tParam;
+ TI_UINT32 uValidChannelsCount;
+ TI_BOOL bRegulatoryDomainEnabled;
+
+ /* if the STA is not configured for G band or dual band, send a scan complete event to the SM */
+ tParam.paramType = SITE_MGR_DESIRED_DOT11_MODE_PARAM;
+ siteMgr_getParam (pScanCncn->hSiteManager, &tParam);
+ if ((DOT11_G_MODE != tParam.content.siteMgrDot11Mode) && (DOT11_DUAL_MODE != tParam.content.siteMgrDot11Mode))
+ {
+ TRACE0(pScanCncn->hReport , REPORT_SEVERITY_INFORMATION , "scanCncnOsSm_ActionStartGScan: STA does not work on 2.4 GHz, continuing to 5.0 GHz scan\n");
+ genSM_Event (pScanCncn->hOSScanSm, SCAN_CNCN_OS_SM_EVENT_SCAN_COMPLETE, hScanCncn);
+ return;
+ }
+
+ /* build scan command header */
+ pScanCncn->tOsScanParams.band = RADIO_BAND_2_4_GHZ;
+ pScanCncn->tOsScanParams.Tid = 255;
+
+ /* query the regulatory domain if 802.11d is in use */
+ tParam.paramType = REGULATORY_DOMAIN_ENABLED_PARAM;
+ regulatoryDomain_getParam (pScanCncn->hRegulatoryDomain, &tParam );
+ bRegulatoryDomainEnabled = tParam.content.regulatoryDomainEnabled;
+
+ /* Get country code status */
+ tParam.paramType = REGULATORY_DOMAIN_IS_COUNTRY_FOUND;
+ tParam.content.eRadioBand = RADIO_BAND_2_4_GHZ;
+ regulatoryDomain_getParam (pScanCncn->hRegulatoryDomain, &tParam);
+
+ /* scan type is passive if 802.11d is enabled and country IE was not yet found, active otherwise */
+ if ((TI_TRUE == bRegulatoryDomainEnabled) && (TI_FALSE == tParam.content.bIsCountryFound) )
+ {
+ pScanCncn->tOsScanParams.scanType = SCAN_TYPE_TRIGGERED_PASSIVE;
+ }
+ /* All paramters in the func are hard coded, due to that we set to active if not passive */
+ else
+ {
+ pScanCncn->tOsScanParams.scanType = SCAN_TYPE_TRIGGERED_ACTIVE;
+ /* also set number and rate of probe requests */
+ pScanCncn->tOsScanParams.probeReqNumber = SCAN_OID_DEFAULT_PROBE_REQUEST_NUMBER_G;
+ pScanCncn->tOsScanParams.probeRequestRate = SCAN_OID_DEFAULT_PROBE_REQUEST_RATE_G;
+ }
+
+ /* add supported channels on G */
+ if (SCAN_TYPE_NORMAL_PASSIVE == pScanCncn->tOsScanParams.scanType )
+ {
+ uValidChannelsCount = scanCncnOsSm_FillAllAvailableChannels (hScanCncn, RADIO_BAND_2_4_GHZ,
+ SCAN_TYPE_NORMAL_PASSIVE, &(pScanCncn->tOsScanParams.channelEntry[0]),
+ SCAN_OID_DEFAULT_MAX_DWELL_TIME_PASSIVE_G,
+ SCAN_OID_DEFAULT_MIN_DWELL_TIME_PASSIVE_G,
+ SCAN_OID_DEFAULT_EARLY_TERMINATION_EVENT_PASSIVE_G,
+ SCAN_OID_DEFAULT_EARLY_TERMINATION_COUNT_PASSIVE_G);
+ }
+ else
+ {
+ uValidChannelsCount = scanCncnOsSm_FillAllAvailableChannels (hScanCncn, RADIO_BAND_2_4_GHZ,
+ SCAN_TYPE_NORMAL_ACTIVE, &(pScanCncn->tOsScanParams.channelEntry[0]),
+ SCAN_OID_DEFAULT_MAX_DWELL_TIME_ACTIVE_G,
+ SCAN_OID_DEFAULT_MIN_DWELL_TIME_ACTIVE_G,
+ SCAN_OID_DEFAULT_EARLY_TERMINATION_EVENT_ACTIVE_G,
+ SCAN_OID_DEFAULT_EARLY_TERMINATION_COUNT_ACTIVE_G);
+ }
+ pScanCncn->tOsScanParams.numOfChannels = uValidChannelsCount;
+
+ /* check that some channels are available */
+ if ( uValidChannelsCount > 0 )
+ {
+ EScanCncnResultStatus eResult;
+
+ /* send command to scan concentrator APP SM */
+ eResult = scanCncn_Start1ShotScan (hScanCncn, SCAN_SCC_APP_ONE_SHOT, &(pScanCncn->tOsScanParams));
+
+ /* if scan failed, send scan complete event to the SM */
+ if (SCAN_CRS_SCAN_RUNNING != eResult)
+ {
+ TRACE0(pScanCncn->hReport, REPORT_SEVERITY_ERROR , "scanCncnOsSm_ActionStartGScan: scan failed on 2.4 GHz, continuing to 5.0 GHz scan\n");
+ genSM_Event (pScanCncn->hOSScanSm, SCAN_CNCN_OS_SM_EVENT_SCAN_COMPLETE, hScanCncn);
+ }
+ }
+ else
+ {
+ TRACE0(pScanCncn->hReport, REPORT_SEVERITY_ERROR , "scanCncnOsSm_ActionStartGScan: no valid cahnnels on 2.4 GHz, continuing to 5.0 GHz scan\n");
+ /* no channels to scan, send a scan complete event */
+ genSM_Event (pScanCncn->hOSScanSm, SCAN_CNCN_OS_SM_EVENT_SCAN_COMPLETE, hScanCncn);
+ }
+}
+
+/**
+ * \fn scanCncnOsSm_ActionStartAScan
+ * \brief Scan concentartor OS state machine start scan on A action function
+ *
+ * Scan concentartor OS state machine start scan on A action function.
+ * Starts a sacn on A using all allowed channels
+ *
+ * \param hScanCncn - handle to the scan concentartor object
+ * \return None
+ */
+void scanCncnOsSm_ActionStartAScan (TI_HANDLE hScanCncn)
+{
+ TScanCncn *pScanCncn = (TScanCncn*)hScanCncn;
+ paramInfo_t tParam;
+ TI_UINT32 uValidChannelsCount;
+ TI_BOOL bRegulatoryDomainEnabled;
+
+ /* if the STA is not configured for G band or dual band, send a scan complete event to the SM */
+ tParam.paramType = SITE_MGR_DESIRED_DOT11_MODE_PARAM;
+ siteMgr_getParam (pScanCncn->hSiteManager, &tParam);
+ if ((DOT11_A_MODE != tParam.content.siteMgrDot11Mode) && (DOT11_DUAL_MODE != tParam.content.siteMgrDot11Mode))
+ {
+ TRACE0(pScanCncn->hReport, REPORT_SEVERITY_INFORMATION , "scanCncnOsSm_ActionStartAScan: STA does not work on 5.0 GHz, quitting\n");
+ genSM_Event (pScanCncn->hOSScanSm, SCAN_CNCN_OS_SM_EVENT_SCAN_COMPLETE, hScanCncn);
+ return;
+ }
+
+ /* build scan command header */
+ pScanCncn->tOsScanParams.band = RADIO_BAND_5_0_GHZ;
+ pScanCncn->tOsScanParams.Tid = 0;
+
+ /* query the regulatory domain if 802.11d is in use */
+ tParam.paramType = REGULATORY_DOMAIN_ENABLED_PARAM;
+ regulatoryDomain_getParam (pScanCncn->hRegulatoryDomain, &tParam );
+ bRegulatoryDomainEnabled = tParam.content.regulatoryDomainEnabled;
+
+ /* Get country code status */
+ tParam.paramType = REGULATORY_DOMAIN_IS_COUNTRY_FOUND;
+ tParam.content.eRadioBand = RADIO_BAND_5_0_GHZ;
+ regulatoryDomain_getParam (pScanCncn->hRegulatoryDomain, &tParam);
+
+ /* scan type is passive if 802.11d is enabled and country IE was not yet found, active otherwise */
+ if ( (TI_TRUE == bRegulatoryDomainEnabled) && (TI_FALSE == tParam.content.bIsCountryFound) )
+ {
+ pScanCncn->tOsScanParams.scanType = SCAN_TYPE_NORMAL_PASSIVE;
+ }
+ /* All paramters in the func are hard coded, due to that we set to active if not passive */
+ else
+ {
+ pScanCncn->tOsScanParams.scanType = SCAN_TYPE_NORMAL_ACTIVE;
+ /* also set number and rate of probe requests */
+ pScanCncn->tOsScanParams.probeReqNumber = SCAN_OID_DEFAULT_PROBE_REQUEST_NUMBER_A;
+ pScanCncn->tOsScanParams.probeRequestRate = SCAN_OID_DEFAULT_PROBE_REQUEST_RATE_A;
+ }
+
+ /* add supported channels on G */
+ if (SCAN_TYPE_NORMAL_PASSIVE == pScanCncn->tOsScanParams.scanType )
+ {
+ uValidChannelsCount = scanCncnOsSm_FillAllAvailableChannels (hScanCncn, RADIO_BAND_5_0_GHZ,
+ SCAN_TYPE_NORMAL_PASSIVE, &(pScanCncn->tOsScanParams.channelEntry[0]),
+ SCAN_OID_DEFAULT_MAX_DWELL_TIME_PASSIVE_A,
+ SCAN_OID_DEFAULT_MIN_DWELL_TIME_PASSIVE_A,
+ SCAN_OID_DEFAULT_EARLY_TERMINATION_EVENT_PASSIVE_A,
+ SCAN_OID_DEFAULT_EARLY_TERMINATION_COUNT_PASSIVE_A );
+ }
+ else
+ {
+ uValidChannelsCount = scanCncnOsSm_FillAllAvailableChannels (hScanCncn, RADIO_BAND_5_0_GHZ,
+ SCAN_TYPE_NORMAL_ACTIVE, &(pScanCncn->tOsScanParams.channelEntry[0]),
+ SCAN_OID_DEFAULT_MAX_DWELL_TIME_ACTIVE_A,
+ SCAN_OID_DEFAULT_MIN_DWELL_TIME_ACTIVE_A,
+ SCAN_OID_DEFAULT_EARLY_TERMINATION_EVENT_ACTIVE_A,
+ SCAN_OID_DEFAULT_EARLY_TERMINATION_COUNT_ACTIVE_A );
+ }
+ pScanCncn->tOsScanParams.numOfChannels = uValidChannelsCount;
+
+ /* check that some channels are available */
+ if ( uValidChannelsCount > 0 )
+ {
+ EScanCncnResultStatus eResult;
+
+ /* send command to scan concentrator APP SM */
+ eResult = scanCncn_Start1ShotScan (hScanCncn, SCAN_SCC_APP_ONE_SHOT, &(pScanCncn->tOsScanParams));
+
+ /* if scan failed, send scan complete event to the SM */
+ if (SCAN_CRS_SCAN_RUNNING != eResult)
+ {
+ TRACE0(pScanCncn->hReport, REPORT_SEVERITY_ERROR , "scanCncnOsSm_ActionStartAScan: scan failed on 5.0 GHz, quitting\n");
+ genSM_Event (pScanCncn->hOSScanSm, SCAN_CNCN_OS_SM_EVENT_SCAN_COMPLETE, hScanCncn);
+ }
+ }
+ else
+ {
+ TRACE0(pScanCncn->hReport, REPORT_SEVERITY_ERROR , "scanCncnOsSm_ActionStartGScan: no valid cahnnels on 5.0 GHz, quitting\n");
+ /* no channels to scan, send a scan complete event */
+ genSM_Event (pScanCncn->hOSScanSm, SCAN_CNCN_OS_SM_EVENT_SCAN_COMPLETE, hScanCncn);
+ }
+}
+
+/**
+ * \fn scanCncnOsSm_ActionCompleteScan
+ * \brief Scan concentartor OS state machine complete scan action function
+ *
+ * Scan concentartor OS state machine complete scan action function.
+ * Cleans up after an OS scan cycle - stabilize the scan result table
+ *
+ * \param hScanCncn - handle to the scan concentartor object
+ * \return None
+ */
+void scanCncnOsSm_ActionCompleteScan (TI_HANDLE hScanCncn)
+{
+ TScanCncn *pScanCncn = (TScanCncn*)hScanCncn;
+
+ /* mark that OID scan process is no longer running */
+ pScanCncn->bOSScanRunning = TI_FALSE;
+ /* also mark that no app scan client is running */
+ pScanCncn->eCurrentRunningAppScanClient = SCAN_SCC_NO_CLIENT;
+
+ /*
+ * set the result table to stable state. Note: OID scans are always done for the application, so the
+ * results will always be sent to the scan concentartor app scan result table, regardless of the
+ * SME connection mode. However, it is expected that the SME will NOT attempt to connect when an OID
+ * scan request will be received
+ */
+ scanResultTable_SetStableState (pScanCncn->hScanResultTable);
+
+ /* no need to send scan complete event - WZC (or equivalent other OS apps) will query for the results */
+}
+
+/**
+ * \fn scanCncnOsSm_FillAllAvailableChannels
+ * \brief Fills a chhanel array with valid channels (and their params) according to band and scan type
+ *
+ * Fills a chhanel array with valid channels (and their params) according to band and scan type
+ *
+ * \param hScanCncn - handle to the scan concentrator object
+ * \param eBand - band to extract channels for
+ * \param eScanType - scan type tp ectract channels for
+ * \param pChannelArray - where to store allowed channels information
+ * \param uMaxDwellTime - maximum dwell time value to be used for each channel
+ * \param uMinDwellTime - minimum dwell time value to be used for each channel
+ * \param eETCondition - early termination condition value to be used for each channel
+ * \param uETFrameNumber - early termination frame number value to be used for each channel
+ * \return Number of allowed channels (that were placed in the given channels array)
+ */
+TI_UINT32 scanCncnOsSm_FillAllAvailableChannels (TI_HANDLE hScanCncn, ERadioBand eBand, EScanType eScanType,
+ TScanChannelEntry *pChannelArray, TI_UINT32 uMaxDwellTime,
+ TI_UINT32 uMinChannelTime, EScanEtCondition eETCondition,
+ TI_UINT8 uETFrameNumber)
+{
+ TScanCncn *pScanCncn = (TScanCncn*)hScanCncn;
+ TI_UINT32 i, j, uAllowedChannelsCount, uValidChannelsCnt = 0;
+ paramInfo_t tParam;
+ TI_UINT8 uTempChannelList[ SCAN_MAX_NUM_OF_NORMAL_CHANNELS_PER_COMMAND ];
+
+ /* get the numnber of supported channels for this band */
+ tParam.paramType = REGULATORY_DOMAIN_ALL_SUPPORTED_CHANNELS;
+ tParam.content.siteMgrRadioBand = eBand;
+ regulatoryDomain_getParam (pScanCncn->hRegulatoryDomain, &tParam);
+ uAllowedChannelsCount = tParam.content.supportedChannels.sizeOfList;
+
+ /* for the time being don't scan more channels than fit in one command */
+ if (uAllowedChannelsCount > SCAN_MAX_NUM_OF_NORMAL_CHANNELS_PER_COMMAND)
+ {
+ uAllowedChannelsCount = SCAN_MAX_NUM_OF_NORMAL_CHANNELS_PER_COMMAND;
+ }
+
+ /* Copy allowed channels to reuse param var */
+ os_memoryCopy (pScanCncn->hOS, uTempChannelList,
+ tParam.content.supportedChannels.listOfChannels, uAllowedChannelsCount );
+
+ /* preapre the param var to request channel allowance for the requested scan type */
+ tParam.paramType = REGULATORY_DOMAIN_GET_SCAN_CAPABILITIES;
+ tParam.content.channelCapabilityReq.band = eBand;
+
+ /* add default values to channels allowed for the requested scan type and band */
+ for (i = 0; i < uAllowedChannelsCount; i++)
+ {
+ /* get specific channel allowance for scan type */
+ if ((eScanType == SCAN_TYPE_NORMAL_PASSIVE) ||
+ (eScanType == SCAN_TYPE_TRIGGERED_PASSIVE) ||
+ (eScanType == SCAN_TYPE_SPS))
+ {
+ tParam.content.channelCapabilityReq.scanOption = PASSIVE_SCANNING;
+ }
+ else
+ {
+ tParam.content.channelCapabilityReq.scanOption = ACTIVE_SCANNING;
+ }
+ tParam.content.channelCapabilityReq.channelNum = uTempChannelList[ i ];
+
+ regulatoryDomain_getParam( pScanCncn->hRegulatoryDomain, &tParam );
+ if (TI_TRUE == tParam.content.channelCapabilityRet.channelValidity)
+ {
+ /* add the channel ID */
+ pChannelArray[ uValidChannelsCnt ].normalChannelEntry.channel = uTempChannelList[ i ];
+
+ /* add other default parameters */
+ pChannelArray[ uValidChannelsCnt ].normalChannelEntry.minChannelDwellTime = uMinChannelTime;
+ pChannelArray[ uValidChannelsCnt ].normalChannelEntry.maxChannelDwellTime = uMaxDwellTime;
+ pChannelArray[ uValidChannelsCnt ].normalChannelEntry.earlyTerminationEvent = eETCondition;
+ pChannelArray[ uValidChannelsCnt ].normalChannelEntry.ETMaxNumOfAPframes = uETFrameNumber;
+ pChannelArray[ uValidChannelsCnt ].normalChannelEntry.txPowerDbm =
+ tParam.content.channelCapabilityRet.maxTxPowerDbm;
+
+ /* Fill broadcast BSSID */
+ for (j = 0; j < 6; j++)
+ {
+ pChannelArray[ uValidChannelsCnt ].normalChannelEntry.bssId[ j ] = 0xff;
+ }
+ uValidChannelsCnt++;
+ }
+ }
+
+ /* return the number of channels that are actually allowed for the requested scan type on the requested band */
+ return uValidChannelsCnt;
+}
+
+/**
+ * \fn Function declaration
+ * \brief Function brief description goes here
+ *
+ * Function detailed description goes here
+ *
+ * \note Note is indicated here
+ * \param Parameter name - parameter description
+ * \param …
+ * \return Return code is detailed here
+ * \sa Reference to other relevant functions
+ */
+/**
+ * \\n
+ * \date 11-Jan-2005\n
+ * \brief Handles an unexpected event.\n
+
+ *
+ * Function Scope \e Private.\n
+ * \param hScanCncn - handle to the scan concentrator object.\n
+ * \return always OK.\n
+ */
+void scanCncnOsSm_ActionUnexpected (TI_HANDLE hScanCncn)
+{
+ TScanCncn *pScanCncn = (TScanCncn*)hScanCncn;
+
+ TRACE0(pScanCncn->hReport, REPORT_SEVERITY_ERROR , "scanCncnOsSm_ActionUnexpected: Unexpeted action for current state\n");
+}
+