164064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
264064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
364064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
464064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
564064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved.                                                  |**
664064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
764064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without    |**
864064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions    |**
964064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met:                                                              |**
1064064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1164064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions of source code must retain the above copyright     |**
1264064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer.      |**
1364064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions in binary form must reproduce the above copyright  |**
1464064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer in    |**
1564064216a8433360745f69edddce19a606659163The Android Open Source Project**|    the documentation and/or other materials provided with the         |**
1664064216a8433360745f69edddce19a606659163The Android Open Source Project**|    distribution.                                                      |**
1764064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Neither the name Texas Instruments nor the names of its            |**
1864064216a8433360745f69edddce19a606659163The Android Open Source Project**|    contributors may be used to endorse or promote products derived    |**
1964064216a8433360745f69edddce19a606659163The Android Open Source Project**|    from this software without specific prior written permission.      |**
2064064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
2164064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
2264064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
2364064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
2464064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
2564064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
3264064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
3364064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
3464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/
3564064216a8433360745f69edddce19a606659163The Android Open Source Project
3664064216a8433360745f69edddce19a606659163The Android Open Source Project
3764064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file smeSm.c
3864064216a8433360745f69edddce19a606659163The Android Open Source Project *  \brief SME SM implementation
3964064216a8433360745f69edddce19a606659163The Android Open Source Project *
4064064216a8433360745f69edddce19a606659163The Android Open Source Project *  \see smeSm.h
4164064216a8433360745f69edddce19a606659163The Android Open Source Project */
4264064216a8433360745f69edddce19a606659163The Android Open Source Project
4364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osTIType.h"
4464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h"
4564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramOut.h"
4664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramIn.h"
4764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "srcApi.h"
4864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h"
4964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "connApi.h"
5064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteMgrApi.h"
5164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeSmApi.h"
5264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h"
5364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "fsm.h"
5464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeSm.h"
5564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeApi.h"
5664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "DataCtrl_Api.h"
5764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "regulatoryDomainApi.h"
5864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TrafficMonitorAPI.h"
5964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "PowerMgr_API.h"
6064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "EvHandler.h"
6164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TI_IPC_Api.h"
6264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "ScanCncnApi.h"
6364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
6464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "DataCtrl_Api.h"
6564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
6664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "apConn.h"
6764064216a8433360745f69edddce19a606659163The Android Open Source Project
6864064216a8433360745f69edddce19a606659163The Android Open Source Project
6964064216a8433360745f69edddce19a606659163The Android Open Source Project/* State Machine Functions */
7064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS idle_to_interScan(void *pData);
7164064216a8433360745f69edddce19a606659163The Android Open Source Project
7264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS interScan_to_scanning(void *pData);
7364064216a8433360745f69edddce19a606659163The Android Open Source Project
7464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS interScan_to_idle(void *pData);
7564064216a8433360745f69edddce19a606659163The Android Open Source Project
7664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS scan_to_idle(void *pData);
7764064216a8433360745f69edddce19a606659163The Android Open Source Project
7864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS scan_to_scan(void *pData);
7964064216a8433360745f69edddce19a606659163The Android Open Source Project
8064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS scan_to_select(void *pData);
8164064216a8433360745f69edddce19a606659163The Android Open Source Project
8264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS scan_to_interScan(void *pData);
8364064216a8433360745f69edddce19a606659163The Android Open Source Project
8464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS select_to_InterScan(void *pData);
8564064216a8433360745f69edddce19a606659163The Android Open Source Project
8664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS select_to_connect(void *pData);
8764064216a8433360745f69edddce19a606659163The Android Open Source Project
8864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS connecting_To_Disconnecting(void *pData);
8964064216a8433360745f69edddce19a606659163The Android Open Source Project
9064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS connecting_to_connected(void *pData);
9164064216a8433360745f69edddce19a606659163The Android Open Source Project
9264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS connecting_to_selecting(void *pData);
9364064216a8433360745f69edddce19a606659163The Android Open Source Project
9464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS connected_to_interScan(void *pData);
9564064216a8433360745f69edddce19a606659163The Android Open Source Project
9664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS connected_To_disconnecting(void *pData);
9764064216a8433360745f69edddce19a606659163The Android Open Source Project
9864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS disconnecting_to_interScan(void *pData);
9964064216a8433360745f69edddce19a606659163The Android Open Source Project
10064064216a8433360745f69edddce19a606659163The Android Open Source Project
10164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Local functions prototypes */
10264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS actionUnexpected(void *pData);
10364064216a8433360745f69edddce19a606659163The Android Open Source Project
10464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS actionNop(void *pData);
10564064216a8433360745f69edddce19a606659163The Android Open Source Project
10664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS smeCallScan(void *pData);
10764064216a8433360745f69edddce19a606659163The Android Open Source Project
10864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS chooseScanBand(smeSm_t* pSmeSm, radioBand_e *band);
10964064216a8433360745f69edddce19a606659163The Android Open Source Project
11064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS smeSm_changeBandParams(TI_HANDLE	hSmeSm, radioBand_e radioBand);
11164064216a8433360745f69edddce19a606659163The Android Open Source Project
11264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS smeSm_startInterScanTimeout(TI_HANDLE hSmeSm);
11364064216a8433360745f69edddce19a606659163The Android Open Source Project
11464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS smeSm_stopInterScanTimeout(TI_HANDLE hSmeSm);
11564064216a8433360745f69edddce19a606659163The Android Open Source Project
11664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void		 smeSm_sendDisassociateEvent(smeSm_t* pSmeSm);
11764064216a8433360745f69edddce19a606659163The Android Open Source Project
11864064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************/
11964064216a8433360745f69edddce19a606659163The Android Open Source Project/*		Interface Functions Implementations			*/
12064064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************/
12164064216a8433360745f69edddce19a606659163The Android Open Source Project
12264064216a8433360745f69edddce19a606659163The Android Open Source Project
12364064216a8433360745f69edddce19a606659163The Android Open Source Project/***********************************************************************
12464064216a8433360745f69edddce19a606659163The Android Open Source Project *                        smeSm_smCreate
12564064216a8433360745f69edddce19a606659163The Android Open Source Project ***********************************************************************
12664064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: State machine creation function, called by the SME SM API. Allocates the state machine
12764064216a8433360745f69edddce19a606659163The Android Open Source Project
12864064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT:      hOs	-	OS handle.
12964064216a8433360745f69edddce19a606659163The Android Open Source Project
13064064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT:
13164064216a8433360745f69edddce19a606659163The Android Open Source Project
13264064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN:     State machine pointer on success, NULL otherwise
13364064216a8433360745f69edddce19a606659163The Android Open Source Project
13464064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
13564064216a8433360745f69edddce19a606659163The Android Open Source Projectfsm_stateMachine_t *smeSm_smCreate(TI_HANDLE hOs)
13664064216a8433360745f69edddce19a606659163The Android Open Source Project{
13764064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS status;
13864064216a8433360745f69edddce19a606659163The Android Open Source Project	fsm_stateMachine_t *pFsm;
13964064216a8433360745f69edddce19a606659163The Android Open Source Project
14064064216a8433360745f69edddce19a606659163The Android Open Source Project	status = fsm_Create(hOs, &pFsm, SME_SM_NUM_STATES, SME_SM_NUM_EVENTS);
14164064216a8433360745f69edddce19a606659163The Android Open Source Project
14264064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status != OK)
14364064216a8433360745f69edddce19a606659163The Android Open Source Project		return NULL;
14464064216a8433360745f69edddce19a606659163The Android Open Source Project
14564064216a8433360745f69edddce19a606659163The Android Open Source Project	return pFsm;
14664064216a8433360745f69edddce19a606659163The Android Open Source Project}
14764064216a8433360745f69edddce19a606659163The Android Open Source Project
14864064216a8433360745f69edddce19a606659163The Android Open Source Project/***********************************************************************
14964064216a8433360745f69edddce19a606659163The Android Open Source Project *                        smeSm_smConfig
15064064216a8433360745f69edddce19a606659163The Android Open Source Project ***********************************************************************
15164064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: State machine configuration function, called by the SME SM API. Configures the state machine
15264064216a8433360745f69edddce19a606659163The Android Open Source Project
15364064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT:      pSmeSm	-	SME SM handle.
15464064216a8433360745f69edddce19a606659163The Android Open Source Project
15564064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT:
15664064216a8433360745f69edddce19a606659163The Android Open Source Project
15764064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN:     OK on success, NOK otherwise
15864064216a8433360745f69edddce19a606659163The Android Open Source Project
15964064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
16064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS smeSm_smConfig(smeSm_t *pSmeSm)
16164064216a8433360745f69edddce19a606659163The Android Open Source Project{
16264064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
16364064216a8433360745f69edddce19a606659163The Android Open Source Project
16464064216a8433360745f69edddce19a606659163The Android Open Source Project	fsm_actionCell_t    smMatrix[SME_SM_NUM_STATES][SME_SM_NUM_EVENTS] =
16564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
16664064216a8433360745f69edddce19a606659163The Android Open Source Project		/* next state and actions for IDLE state */
16764064216a8433360745f69edddce19a606659163The Android Open Source Project		{
16864064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_INTER_SCAN, idle_to_interScan},       /*  "EVENT_START",                   */
16964064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_IDLE, actionUnexpected},         		/*  "EVENT_STOP",                    */
17064064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_IDLE, actionUnexpected},         		/*  "EVENT_SCAN_COMPLETE",           */
17164064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_IDLE, actionUnexpected},         		/*  "EVENT_SELECT_SUCCESS",          */
17264064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_IDLE, actionUnexpected},         		/*  "EVENT_SELECT_FAILURE",          */
17364064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_IDLE, actionUnexpected},         		/*  "EVENT_CONN_SUCCESS",            */
17464064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_IDLE, actionUnexpected},         		/*  "EVENT_CONN_FAILURE",                  */
17564064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_IDLE, actionNop},     		    	/*  "EVENT_RESELECT",                */
17664064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_IDLE, actionNop},     		    	/*  "EVENT_DISCONNECT"*/
17764064216a8433360745f69edddce19a606659163The Android Open Source Project		},
17864064216a8433360745f69edddce19a606659163The Android Open Source Project
17964064216a8433360745f69edddce19a606659163The Android Open Source Project		/* next state and actions for SCANNING state */
18064064216a8433360745f69edddce19a606659163The Android Open Source Project		{
18164064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SCANNING, actionUnexpected},          /*  "EVENT_START",                   */
18264064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_IDLE,      scan_to_idle},				/*  "EVENT_STOP",                    */
18364064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SELECTING, scan_to_select},           /*  "EVENT_SCAN_COMPLETE",           */
18464064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SCANNING, actionUnexpected},          /*  "EVENT_SELECT_SUCCESS",          */
18564064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SCANNING, actionUnexpected},          /*  "EVENT_SELECT_FAILURE",          */
18664064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SCANNING, actionUnexpected},          /*  "EVENT_CONN_SUCCESS",            */
18764064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SCANNING, actionUnexpected},          /*  "EVENT_CONN_FAILURE",                  */
18864064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SCANNING, scan_to_scan},              /*  "EVENT_RESELECT",*/
18964064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_INTER_SCAN, scan_to_interScan},     	/*  "EVENT_DISCONNECT"*/
19064064216a8433360745f69edddce19a606659163The Android Open Source Project		},
19164064216a8433360745f69edddce19a606659163The Android Open Source Project
19264064216a8433360745f69edddce19a606659163The Android Open Source Project		/* next state and actions for SELECTING state */
19364064216a8433360745f69edddce19a606659163The Android Open Source Project		{
19464064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SELECTING, actionUnexpected},         /*  "EVENT_START",                   */
19564064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SELECTING, actionUnexpected},			/*  "EVENT_STOP",                    */
19664064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SELECTING, actionUnexpected},         /*  "EVENT_SCAN_COMPLETE",           */
19764064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_CONNECTING, select_to_connect},       /*  "EVENT_SELECT_SUCCESS",          */
19864064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_INTER_SCAN, select_to_InterScan},	   	/*  "EVENT_SELECT_FAILURE",          */
19964064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SELECTING, actionUnexpected},         /*  "EVENT_CONN_SUCCESS",            */
20064064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SELECTING, actionUnexpected},         /*  "EVENT_CONN_FAILURE",                   */
20164064216a8433360745f69edddce19a606659163The Android Open Source Project    		{SME_SM_STATE_SELECTING, actionUnexpected},         /*  "EVENT_RESELECT",                */
20264064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SELECTING, actionUnexpected},         /*  "EVENT_DISCONNECT",*/
20364064216a8433360745f69edddce19a606659163The Android Open Source Project		},
20464064216a8433360745f69edddce19a606659163The Android Open Source Project
20564064216a8433360745f69edddce19a606659163The Android Open Source Project		/* next state and actions for CONNECTING state */
20664064216a8433360745f69edddce19a606659163The Android Open Source Project		{
20764064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SCANNING,      actionUnexpected},               /*  "EVENT_START",                   */
20864064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING, connecting_To_Disconnecting},    /*  "EVENT_STOP",                    */
20964064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_CONNECTING,    actionUnexpected},               /*  "EVENT_SCAN_COMPLETE",           */
21064064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_CONNECTING,    actionUnexpected},               /*  "EVENT_SELECT_SUCCESS",          */
21164064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_CONNECTING,    actionUnexpected},               /*  "EVENT_SELECT_FAILURE",          */
21264064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_CONNECTED,     connecting_to_connected},        /*  "EVENT_CONN_SUCCESS",            */
21364064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SELECTING,     connecting_to_selecting},        /*  "EVENT_CONN_FAILURE",                  */
21464064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING, connecting_To_Disconnecting},    /*  "EVENT_RESELECT",               */
21564064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING, connecting_To_Disconnecting},    /*  "EVENT_DISCONNECT", */
21664064216a8433360745f69edddce19a606659163The Android Open Source Project		},
21764064216a8433360745f69edddce19a606659163The Android Open Source Project
21864064216a8433360745f69edddce19a606659163The Android Open Source Project		/* next state and actions for CONNECTED state */
21964064216a8433360745f69edddce19a606659163The Android Open Source Project		{
22064064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SCANNING, actionUnexpected},			           	/*  "EVENT_START",                   */
22164064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING, connected_To_disconnecting},	   	/*  "EVENT_STOP",                    */
22264064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_CONNECTED, actionUnexpected},				 		/* "EVENT_SCAN_COMPLETE",           */
22364064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_CONNECTED, actionUnexpected},						/*  "EVENT_SELECT_SUCCESS",          */
22464064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_CONNECTED, actionUnexpected},						/*  "EVENT_SELECT_FAILURE",          */
22564064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_CONNECTED, actionUnexpected},		        		/*  "EVENT_CONN_SUCCESS",            */
22664064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_INTER_SCAN, connected_to_interScan},		        /*  "EVENT_CONN_FAILURE",                   */
22764064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING, connected_To_disconnecting},      	/*  "EVENT_RESELECT",                */
22864064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING	,connected_To_disconnecting},      	/*  "EVENT_DISCONNECT",*/
22964064216a8433360745f69edddce19a606659163The Android Open Source Project		},
23064064216a8433360745f69edddce19a606659163The Android Open Source Project
23164064216a8433360745f69edddce19a606659163The Android Open Source Project	    /* next state and actions for DISCONNECTING state */
23264064216a8433360745f69edddce19a606659163The Android Open Source Project		{
23364064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING,      actionNop},   				/*  "EVENT_START",                   */
23464064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING,      actionNop},  					/*  "EVENT_STOP",                    */
23564064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING, actionUnexpected}, 				/*  "EVENT_SCAN_COMPLETE",           */
23664064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING, actionUnexpected}, 				/*  "EVENT_SELECT_SUCCESS",          */
23764064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING, actionUnexpected}, 				/*  "EVENT_SELECT_FAILURE",          */
23864064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING, actionUnexpected},  				/*  "EVENT_CONN_SUCCESS",            */
23964064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_INTER_SCAN, disconnecting_to_interScan}, 			/*  "EVENT_CONN_FAILURE",                  */
24064064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING,  	   actionNop}, 			  	    /*  "EVENT_RESELECT",               */
24164064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_DISCONNECTING,  	   actionNop}, 			  	    /*  "EVENT_DISCONNECT",*/
24264064216a8433360745f69edddce19a606659163The Android Open Source Project		},
24364064216a8433360745f69edddce19a606659163The Android Open Source Project
24464064216a8433360745f69edddce19a606659163The Android Open Source Project
24564064216a8433360745f69edddce19a606659163The Android Open Source Project		/* next state and actions for STATE_INTER_SCAN_TIMEOUT state */
24664064216a8433360745f69edddce19a606659163The Android Open Source Project		{
24764064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_INTER_SCAN, actionUnexpected},          /*  "EVENT_START",                   */
24864064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_IDLE, interScan_to_idle},				  /*  "EVENT_STOP",                    */
24964064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_INTER_SCAN, actionUnexpected},          /*  "EVENT_SCAN_COMPLETE",           */
25064064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_INTER_SCAN, actionUnexpected},          /*  "EVENT_SELECT_SUCCESS",          */
25164064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_INTER_SCAN, actionUnexpected},          /*  "EVENT_SELECT_FAILURE",          */
25264064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_INTER_SCAN, actionUnexpected},          /*  "EVENT_CONN_SUCCESS",            */
25364064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_INTER_SCAN, actionUnexpected},          /*  "EVENT_CONN_FAILURE",                  */
25464064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_SCANNING, interScan_to_scanning},       /*  "EVENT_RESELECT",                */
25564064216a8433360745f69edddce19a606659163The Android Open Source Project			{SME_SM_STATE_INTER_SCAN, actionNop},     			  /*  "EVENT_DISCONNECT",*/
25664064216a8433360745f69edddce19a606659163The Android Open Source Project		},
25764064216a8433360745f69edddce19a606659163The Android Open Source Project
25864064216a8433360745f69edddce19a606659163The Android Open Source Project	};
25964064216a8433360745f69edddce19a606659163The Android Open Source Project
26064064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->dualBandReScanFlag = FALSE;
26164064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->reScanFlag = FALSE;
26264064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->radioOn    = FALSE;
26364064216a8433360745f69edddce19a606659163The Android Open Source Project    pSmeSm->immediateShutdownRequired = FALSE;
26464064216a8433360745f69edddce19a606659163The Android Open Source Project
26564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* if desired SSID is junk SSID, don't connect (until new SSID is set) */
26664064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_DESIRED_SSID_PARAM;
26764064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_getParam( pSmeSm->hSiteMgr, &param );
26864064216a8433360745f69edddce19a606659163The Android Open Source Project
26964064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( utils_isJunkSSID( &(param.content.siteMgrDesiredSSID) ) )
27064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
27164064216a8433360745f69edddce19a606659163The Android Open Source Project        pSmeSm->connectEnabled = FALSE;
27264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
27364064216a8433360745f69edddce19a606659163The Android Open Source Project    else
27464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
27564064216a8433360745f69edddce19a606659163The Android Open Source Project        pSmeSm->connectEnabled = TRUE;
27664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
27764064216a8433360745f69edddce19a606659163The Android Open Source Project
27864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* First event should indicate to the upper layer that STA is disassociated. */
27964064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->DisAssoc.mgmtStatus = STATUS_UNSPECIFIED;
28064064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->DisAssoc.uStatusCode = 0;
28164064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_sendDisassociateEvent(pSmeSm);
28264064216a8433360745f69edddce19a606659163The Android Open Source Project
28364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
28464064216a8433360745f69edddce19a606659163The Android Open Source Project	/* clear statistics */
28564064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_resetStats( (TI_HANDLE)pSmeSm );
28664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
28764064216a8433360745f69edddce19a606659163The Android Open Source Project
28864064216a8433360745f69edddce19a606659163The Android Open Source Project	return fsm_Config(pSmeSm->pFsm, (fsm_Matrix_t)smMatrix, SME_SM_NUM_STATES, SME_SM_NUM_EVENTS, smeSm_SMEvent, pSmeSm->hOs);
28964064216a8433360745f69edddce19a606659163The Android Open Source Project}
29064064216a8433360745f69edddce19a606659163The Android Open Source Project
29164064216a8433360745f69edddce19a606659163The Android Open Source Project/***********************************************************************
29264064216a8433360745f69edddce19a606659163The Android Open Source Project *                        smeSm_smUnLoad
29364064216a8433360745f69edddce19a606659163The Android Open Source Project ***********************************************************************
29464064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: State machine unload function, called by the SME SM API. Unloads the state machine
29564064216a8433360745f69edddce19a606659163The Android Open Source Project
29664064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT:      hOs		-	OS handle.
29764064216a8433360745f69edddce19a606659163The Android Open Source Project			pFsm	-	Pointer to the state machine
29864064216a8433360745f69edddce19a606659163The Android Open Source Project
29964064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT:
30064064216a8433360745f69edddce19a606659163The Android Open Source Project
30164064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN:     State machine pointer on success, NULL otherwise
30264064216a8433360745f69edddce19a606659163The Android Open Source Project
30364064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
30464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS smeSm_smUnLoad(TI_HANDLE hOs, fsm_stateMachine_t *pFsm)
30564064216a8433360745f69edddce19a606659163The Android Open Source Project{
30664064216a8433360745f69edddce19a606659163The Android Open Source Project	fsm_Unload(hOs, pFsm);
30764064216a8433360745f69edddce19a606659163The Android Open Source Project
30864064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
30964064216a8433360745f69edddce19a606659163The Android Open Source Project}
31064064216a8433360745f69edddce19a606659163The Android Open Source Project
31164064216a8433360745f69edddce19a606659163The Android Open Source Project/***********************************************************************
31264064216a8433360745f69edddce19a606659163The Android Open Source Project *                        smeSm_SMEvent
31364064216a8433360745f69edddce19a606659163The Android Open Source Project ***********************************************************************
31464064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: SME SM event processing function, called by the SME SM API
31564064216a8433360745f69edddce19a606659163The Android Open Source Project				Perform the following:
31664064216a8433360745f69edddce19a606659163The Android Open Source Project				-	Print the state movement as a result from the event
31764064216a8433360745f69edddce19a606659163The Android Open Source Project				-	Calls the generic state machine event processing function which preform the following:
31864064216a8433360745f69edddce19a606659163The Android Open Source Project					-	Calls the corresponding callback function
31964064216a8433360745f69edddce19a606659163The Android Open Source Project					-	Move to next state
32064064216a8433360745f69edddce19a606659163The Android Open Source Project
32164064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT:		currentState	-	Pointer to the connection current state.
32264064216a8433360745f69edddce19a606659163The Android Open Source Project			event	-	Received event
32364064216a8433360745f69edddce19a606659163The Android Open Source Project			pSmeSm	-	SME SM handle
32464064216a8433360745f69edddce19a606659163The Android Open Source Project
32564064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT:
32664064216a8433360745f69edddce19a606659163The Android Open Source Project
32764064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN:     OK on success, NOK otherwise
32864064216a8433360745f69edddce19a606659163The Android Open Source Project
32964064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
33064064216a8433360745f69edddce19a606659163The Android Open Source Project
33164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef REPORT_LOG
33264064216a8433360745f69edddce19a606659163The Android Open Source Project
33364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic char *stateDesc[SME_SM_NUM_STATES] =
33464064216a8433360745f69edddce19a606659163The Android Open Source Project	{
33564064216a8433360745f69edddce19a606659163The Android Open Source Project		"STATE_IDLE",
33664064216a8433360745f69edddce19a606659163The Android Open Source Project		"STATE_SCANNING",
33764064216a8433360745f69edddce19a606659163The Android Open Source Project		"STATE_SELECTING",
33864064216a8433360745f69edddce19a606659163The Android Open Source Project		"STATE_CONNECTING",
33964064216a8433360745f69edddce19a606659163The Android Open Source Project		"STATE_CONNECTED",
34064064216a8433360745f69edddce19a606659163The Android Open Source Project		"STATE_DISCONNECTING",
34164064216a8433360745f69edddce19a606659163The Android Open Source Project		"STATE_INTER_SCAN",
34264064216a8433360745f69edddce19a606659163The Android Open Source Project	};
34364064216a8433360745f69edddce19a606659163The Android Open Source Project
34464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic char *eventDesc[SME_SM_NUM_EVENTS] =
34564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
34664064216a8433360745f69edddce19a606659163The Android Open Source Project		"EVENT_START",
34764064216a8433360745f69edddce19a606659163The Android Open Source Project		"EVENT_STOP",
34864064216a8433360745f69edddce19a606659163The Android Open Source Project		"EVENT_SCAN_COMPLETE",
34964064216a8433360745f69edddce19a606659163The Android Open Source Project		"EVENT_SELECT_SUCCESS",
35064064216a8433360745f69edddce19a606659163The Android Open Source Project		"EVENT_SELECT_FAILURE",
35164064216a8433360745f69edddce19a606659163The Android Open Source Project		"EVENT_CONN_SUCCESS",
35264064216a8433360745f69edddce19a606659163The Android Open Source Project		"EVENT_CONN_FAILURE",
35364064216a8433360745f69edddce19a606659163The Android Open Source Project		"EVENT_RESELECT",
35464064216a8433360745f69edddce19a606659163The Android Open Source Project		"EVENT_DISCONNECT",
35564064216a8433360745f69edddce19a606659163The Android Open Source Project	};
35664064216a8433360745f69edddce19a606659163The Android Open Source Project
35764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
35864064216a8433360745f69edddce19a606659163The Android Open Source Project
35964064216a8433360745f69edddce19a606659163The Android Open Source Project
36064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS smeSm_SMEvent(UINT8 *currentState, UINT8 event, TI_HANDLE hSmeSm)
36164064216a8433360745f69edddce19a606659163The Android Open Source Project{
36264064216a8433360745f69edddce19a606659163The Android Open Source Project   smeSm_t *pSmeSm = (smeSm_t *)hSmeSm;
36364064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS 		status;
36464064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8		nextState;
36564064216a8433360745f69edddce19a606659163The Android Open Source Project
36664064216a8433360745f69edddce19a606659163The Android Open Source Project	status = fsm_GetNextState(pSmeSm->pFsm, *currentState, event, &nextState);
36764064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status != OK)
36864064216a8433360745f69edddce19a606659163The Android Open Source Project	{
36964064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_SM(pSmeSm->hReport, SME_SM_MODULE_LOG, ("State machine error, failed getting next state\n"));
37064064216a8433360745f69edddce19a606659163The Android Open Source Project		return(NOK);
37164064216a8433360745f69edddce19a606659163The Android Open Source Project	}
37264064216a8433360745f69edddce19a606659163The Android Open Source Project
37364064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_SM(pSmeSm->hReport, SME_SM_MODULE_LOG,
37464064216a8433360745f69edddce19a606659163The Android Open Source Project							  ("<%s, %s> --> %s\n\n",
37564064216a8433360745f69edddce19a606659163The Android Open Source Project							   stateDesc[*currentState],
37664064216a8433360745f69edddce19a606659163The Android Open Source Project							   eventDesc[event],
37764064216a8433360745f69edddce19a606659163The Android Open Source Project							   stateDesc[nextState]));
37864064216a8433360745f69edddce19a606659163The Android Open Source Project
37964064216a8433360745f69edddce19a606659163The Android Open Source Project	status = fsm_Event(pSmeSm->pFsm, currentState, event, (void *)pSmeSm);
38064064216a8433360745f69edddce19a606659163The Android Open Source Project
38164064216a8433360745f69edddce19a606659163The Android Open Source Project	return status;
38264064216a8433360745f69edddce19a606659163The Android Open Source Project}
38364064216a8433360745f69edddce19a606659163The Android Open Source Project
38464064216a8433360745f69edddce19a606659163The Android Open Source Project
38564064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************************************************/
38664064216a8433360745f69edddce19a606659163The Android Open Source Project/*		In the following section are listed the callback function used by the SME state machine				*/
38764064216a8433360745f69edddce19a606659163The Android Open Source Project/************************************************************************************************************/
38864064216a8433360745f69edddce19a606659163The Android Open Source Project
38964064216a8433360745f69edddce19a606659163The Android Open Source Project/* START_SCAN */
39064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS sme_startScan(void *pData)
39164064216a8433360745f69edddce19a606659163The Android Open Source Project{
39264064216a8433360745f69edddce19a606659163The Android Open Source Project	paramInfo_t	param;
39364064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
39464064216a8433360745f69edddce19a606659163The Android Open Source Project
39564064216a8433360745f69edddce19a606659163The Android Open Source Project   /*
39664064216a8433360745f69edddce19a606659163The Android Open Source Project	* Support Dual Mode Operation
39764064216a8433360745f69edddce19a606659163The Android Open Source Project	*/
39864064216a8433360745f69edddce19a606659163The Android Open Source Project
39964064216a8433360745f69edddce19a606659163The Android Open Source Project    radioBand_e	band;
40064064216a8433360745f69edddce19a606659163The Android Open Source Project
40164064216a8433360745f69edddce19a606659163The Android Open Source Project	/*
40264064216a8433360745f69edddce19a606659163The Android Open Source Project	 * If scan is disabled then send self scan complete event, skipping the scan procedure.
40364064216a8433360745f69edddce19a606659163The Android Open Source Project	 */
40464064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pSmeSm->scanEnabled != SCAN_ENABLED)
40564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
40664064216a8433360745f69edddce19a606659163The Android Open Source Project		if (pSmeSm->scanEnabled == SKIP_NEXT_SCAN)
40764064216a8433360745f69edddce19a606659163The Android Open Source Project		{
40864064216a8433360745f69edddce19a606659163The Android Open Source Project			pSmeSm->scanEnabled = SCAN_ENABLED;
40964064216a8433360745f69edddce19a606659163The Android Open Source Project		}
41064064216a8433360745f69edddce19a606659163The Android Open Source Project		return smeSm_SMEvent(&pSmeSm->state, SME_SM_EVENT_SCAN_COMPLETE , pSmeSm);
41164064216a8433360745f69edddce19a606659163The Android Open Source Project	}
41264064216a8433360745f69edddce19a606659163The Android Open Source Project
41364064216a8433360745f69edddce19a606659163The Android Open Source Project
41464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* if performing a dual band rescan now */
41564064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( TRUE == pSmeSm->dualBandReScanFlag )
41664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
41764064216a8433360745f69edddce19a606659163The Android Open Source Project        /* mark that no more scans are needed */
41864064216a8433360745f69edddce19a606659163The Android Open Source Project        pSmeSm->dualBandReScanFlag = FALSE;
41964064216a8433360745f69edddce19a606659163The Android Open Source Project		chooseScanBand(pSmeSm, &band);
42064064216a8433360745f69edddce19a606659163The Android Open Source Project		smeSm_changeBandParams(pSmeSm, band);
42164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
42264064216a8433360745f69edddce19a606659163The Android Open Source Project    else
42364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
42464064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = SITE_MGR_DESIRED_DOT11_MODE_PARAM;
42564064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_getParam(pSmeSm->hSiteMgr, &param);
42664064216a8433360745f69edddce19a606659163The Android Open Source Project
42764064216a8433360745f69edddce19a606659163The Android Open Source Project        if(param.content.siteMgrDot11Mode == DOT11_DUAL_MODE)
42864064216a8433360745f69edddce19a606659163The Android Open Source Project        {
42964064216a8433360745f69edddce19a606659163The Android Open Source Project	        pSmeSm->dualBandReScanFlag = TRUE;
43064064216a8433360745f69edddce19a606659163The Android Open Source Project	        chooseScanBand(pSmeSm, &band);
43164064216a8433360745f69edddce19a606659163The Android Open Source Project	        smeSm_changeBandParams(pSmeSm, band);
43264064216a8433360745f69edddce19a606659163The Android Open Source Project        }
43364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
43464064216a8433360745f69edddce19a606659163The Android Open Source Project
43564064216a8433360745f69edddce19a606659163The Android Open Source Project    return smeCallScan(pData);
43664064216a8433360745f69edddce19a606659163The Android Open Source Project}
43764064216a8433360745f69edddce19a606659163The Android Open Source Project
43864064216a8433360745f69edddce19a606659163The Android Open Source Project
43964064216a8433360745f69edddce19a606659163The Android Open Source Project/* RESTART_SCAN when exiting from IDLE state*/
44064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS idle_to_interScan(void *pData)
44164064216a8433360745f69edddce19a606659163The Android Open Source Project{
44264064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t         *pSmeSm = (smeSm_t *)pData;
44364064216a8433360745f69edddce19a606659163The Android Open Source Project
44464064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->interScanTimeout = pSmeSm->interScanTimeoutMin;
44564064216a8433360745f69edddce19a606659163The Android Open Source Project
44664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Set the SCR group to inter SCAN */
44764064216a8433360745f69edddce19a606659163The Android Open Source Project    scr_setGroup( pSmeSm->hScr, SCR_GID_INTER_SCAN );
44864064216a8433360745f69edddce19a606659163The Android Open Source Project
44964064216a8433360745f69edddce19a606659163The Android Open Source Project    /*
45064064216a8433360745f69edddce19a606659163The Android Open Source Project	 * If the connection is enabled then initiate "reselect" event that moves the
45164064216a8433360745f69edddce19a606659163The Android Open Source Project	 * SM into scan state.
45264064216a8433360745f69edddce19a606659163The Android Open Source Project	 */
45364064216a8433360745f69edddce19a606659163The Android Open Source Project	if( pSmeSm->connectEnabled ){
45464064216a8433360745f69edddce19a606659163The Android Open Source Project		return smeSm_SMEvent(&pSmeSm->state, SME_SM_EVENT_RESELECT , pSmeSm);
45564064216a8433360745f69edddce19a606659163The Android Open Source Project	}
45664064216a8433360745f69edddce19a606659163The Android Open Source Project	/* connectEnabled is FALSE, need to stay at this state until it will be changed. */
45764064216a8433360745f69edddce19a606659163The Android Open Source Project
45864064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
45964064216a8433360745f69edddce19a606659163The Android Open Source Project}
46064064216a8433360745f69edddce19a606659163The Android Open Source Project
46164064216a8433360745f69edddce19a606659163The Android Open Source Project
46264064216a8433360745f69edddce19a606659163The Android Open Source Project
46364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS interScan_to_scanning(void *pData)
46464064216a8433360745f69edddce19a606659163The Android Open Source Project{
46564064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
46664064216a8433360745f69edddce19a606659163The Android Open Source Project
46764064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->bSendDisAssocEvent = FALSE;
46864064216a8433360745f69edddce19a606659163The Android Open Source Project
46964064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_stopInterScanTimeout(pSmeSm);
47064064216a8433360745f69edddce19a606659163The Android Open Source Project
47164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Set SCR to "first connection" */
47264064216a8433360745f69edddce19a606659163The Android Open Source Project	scr_setGroup( pSmeSm->hScr, SCR_GID_CONNECT );
47364064216a8433360745f69edddce19a606659163The Android Open Source Project
47464064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
47564064216a8433360745f69edddce19a606659163The Android Open Source Project	/* update statistics - count scan attempts for connection */
47664064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->smeStats.currentNumberOfScanAttempts++;
47764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
47864064216a8433360745f69edddce19a606659163The Android Open Source Project	return (sme_startScan(pData));
47964064216a8433360745f69edddce19a606659163The Android Open Source Project}
48064064216a8433360745f69edddce19a606659163The Android Open Source Project
48164064216a8433360745f69edddce19a606659163The Android Open Source Project
48264064216a8433360745f69edddce19a606659163The Android Open Source Project
48364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS disconnecting_to_interScan(void *pData)
48464064216a8433360745f69edddce19a606659163The Android Open Source Project{
48564064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
48664064216a8433360745f69edddce19a606659163The Android Open Source Project
48764064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->interScanTimeout = pSmeSm->interScanTimeoutMin;
48864064216a8433360745f69edddce19a606659163The Android Open Source Project
48964064216a8433360745f69edddce19a606659163The Android Open Source Project    scr_setGroup( pSmeSm->hScr, SCR_GID_INTER_SCAN );
49064064216a8433360745f69edddce19a606659163The Android Open Source Project
49164064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_disSelectSite(pSmeSm->hSiteMgr);
49264064216a8433360745f69edddce19a606659163The Android Open Source Project
49364064216a8433360745f69edddce19a606659163The Android Open Source Project	/*
49464064216a8433360745f69edddce19a606659163The Android Open Source Project	 *  Notify that the driver is disassociated to the supplicant\IP stack.
49564064216a8433360745f69edddce19a606659163The Android Open Source Project	 */
49664064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_sendDisassociateEvent(pSmeSm);
49764064216a8433360745f69edddce19a606659163The Android Open Source Project
49864064216a8433360745f69edddce19a606659163The Android Open Source Project	if (!pSmeSm->scanEnabled)
49964064216a8433360745f69edddce19a606659163The Android Open Source Project	{
50064064216a8433360745f69edddce19a606659163The Android Open Source Project		pSmeSm->connectEnabled = FALSE;
50164064216a8433360745f69edddce19a606659163The Android Open Source Project	}
50264064216a8433360745f69edddce19a606659163The Android Open Source Project
50364064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Radio ON and connection is enabled go to scanning */
50464064216a8433360745f69edddce19a606659163The Android Open Source Project	if( pSmeSm->radioOn )
50564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
50664064216a8433360745f69edddce19a606659163The Android Open Source Project		if(	pSmeSm->connectEnabled )
50764064216a8433360745f69edddce19a606659163The Android Open Source Project			return smeSm_SMEvent(&pSmeSm->state, SME_SM_EVENT_RESELECT , pSmeSm);
50864064216a8433360745f69edddce19a606659163The Android Open Source Project
50964064216a8433360745f69edddce19a606659163The Android Open Source Project		else {
51064064216a8433360745f69edddce19a606659163The Android Open Source Project			/* Radio is on but connection is disabled, stay at interScan state
51164064216a8433360745f69edddce19a606659163The Android Open Source Project				without starting the interscan timer. */
51264064216a8433360745f69edddce19a606659163The Android Open Source Project
51364064216a8433360745f69edddce19a606659163The Android Open Source Project			/* SCR is set to enable only APP scan */
51464064216a8433360745f69edddce19a606659163The Android Open Source Project			return OK;
51564064216a8433360745f69edddce19a606659163The Android Open Source Project		}
51664064216a8433360745f69edddce19a606659163The Android Open Source Project	}
51764064216a8433360745f69edddce19a606659163The Android Open Source Project
51864064216a8433360745f69edddce19a606659163The Android Open Source Project	else{
51964064216a8433360745f69edddce19a606659163The Android Open Source Project			return smeSm_SMEvent(&pSmeSm->state, SME_SM_EVENT_STOP , pSmeSm);
52064064216a8433360745f69edddce19a606659163The Android Open Source Project	}
52164064216a8433360745f69edddce19a606659163The Android Open Source Project}
52264064216a8433360745f69edddce19a606659163The Android Open Source Project
52364064216a8433360745f69edddce19a606659163The Android Open Source Project
52464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS connected_to_interScan(void *pData)
52564064216a8433360745f69edddce19a606659163The Android Open Source Project{
52664064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
52764064216a8433360745f69edddce19a606659163The Android Open Source Project
52864064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->interScanTimeout = pSmeSm->interScanTimeoutMin;
52964064216a8433360745f69edddce19a606659163The Android Open Source Project
53064064216a8433360745f69edddce19a606659163The Android Open Source Project	siteMgr_disSelectSite(pSmeSm->hSiteMgr);
53164064216a8433360745f69edddce19a606659163The Android Open Source Project
53264064216a8433360745f69edddce19a606659163The Android Open Source Project	scr_setGroup( pSmeSm->hScr, SCR_GID_INTER_SCAN );
53364064216a8433360745f69edddce19a606659163The Android Open Source Project
53464064216a8433360745f69edddce19a606659163The Android Open Source Project	/*
53564064216a8433360745f69edddce19a606659163The Android Open Source Project	 *  Notify that the driver is associated to the supplicant\IP stack.
53664064216a8433360745f69edddce19a606659163The Android Open Source Project	 */
53764064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_sendDisassociateEvent(pSmeSm);
53864064216a8433360745f69edddce19a606659163The Android Open Source Project
53964064216a8433360745f69edddce19a606659163The Android Open Source Project	if (!pSmeSm->scanEnabled)
54064064216a8433360745f69edddce19a606659163The Android Open Source Project	{
54164064216a8433360745f69edddce19a606659163The Android Open Source Project		pSmeSm->connectEnabled = FALSE;
54264064216a8433360745f69edddce19a606659163The Android Open Source Project	}
54364064216a8433360745f69edddce19a606659163The Android Open Source Project
54464064216a8433360745f69edddce19a606659163The Android Open Source Project	return smeSm_SMEvent(&pSmeSm->state, SME_SM_EVENT_RESELECT , pSmeSm);
54564064216a8433360745f69edddce19a606659163The Android Open Source Project}
54664064216a8433360745f69edddce19a606659163The Android Open Source Project
54764064216a8433360745f69edddce19a606659163The Android Open Source Project
54864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS select_to_InterScan(void *pData)
54964064216a8433360745f69edddce19a606659163The Android Open Source Project{
55064064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
55164064216a8433360745f69edddce19a606659163The Android Open Source Project
55264064216a8433360745f69edddce19a606659163The Android Open Source Project	siteMgr_disSelectSite(pSmeSm->hSiteMgr);
55364064216a8433360745f69edddce19a606659163The Android Open Source Project
55464064216a8433360745f69edddce19a606659163The Android Open Source Project	/* SCR is set to enable only APP scan */
55564064216a8433360745f69edddce19a606659163The Android Open Source Project    scr_setGroup( pSmeSm->hScr, SCR_GID_INTER_SCAN );
55664064216a8433360745f69edddce19a606659163The Android Open Source Project
55764064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pSmeSm->connectEnabled)
55864064216a8433360745f69edddce19a606659163The Android Open Source Project	{
55964064216a8433360745f69edddce19a606659163The Android Open Source Project		smeSm_startInterScanTimeout(pSmeSm);
56064064216a8433360745f69edddce19a606659163The Android Open Source Project	}
56164064216a8433360745f69edddce19a606659163The Android Open Source Project
56264064216a8433360745f69edddce19a606659163The Android Open Source Project	if ((pSmeSm->bSendDisAssocEvent == TRUE) || (pSmeSm->scanEnabled == FALSE))
56364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
56464064216a8433360745f69edddce19a606659163The Android Open Source Project		/*
56564064216a8433360745f69edddce19a606659163The Android Open Source Project		 *  Notify that the driver is disassociated to the supplicant\IP stack.
56664064216a8433360745f69edddce19a606659163The Android Open Source Project		 */
56764064216a8433360745f69edddce19a606659163The Android Open Source Project		smeSm_sendDisassociateEvent(pSmeSm);
56864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
56964064216a8433360745f69edddce19a606659163The Android Open Source Project
57064064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
57164064216a8433360745f69edddce19a606659163The Android Open Source Project}
57264064216a8433360745f69edddce19a606659163The Android Open Source Project
57364064216a8433360745f69edddce19a606659163The Android Open Source Project
57464064216a8433360745f69edddce19a606659163The Android Open Source Project
57564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS scan_to_interScan(void *pData)
57664064216a8433360745f69edddce19a606659163The Android Open Source Project{
57764064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
57864064216a8433360745f69edddce19a606659163The Android Open Source Project
57964064216a8433360745f69edddce19a606659163The Android Open Source Project	/* SCR is set to enable only APP scan */
58064064216a8433360745f69edddce19a606659163The Android Open Source Project	scr_setGroup( pSmeSm->hScr, SCR_GID_INTER_SCAN );
58164064216a8433360745f69edddce19a606659163The Android Open Source Project
58264064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->interScanTimeout = pSmeSm->interScanTimeoutMin;
58364064216a8433360745f69edddce19a606659163The Android Open Source Project
58464064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pSmeSm->connectEnabled)
58564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
58664064216a8433360745f69edddce19a606659163The Android Open Source Project		smeSm_startInterScanTimeout(pSmeSm);
58764064216a8433360745f69edddce19a606659163The Android Open Source Project	}
58864064216a8433360745f69edddce19a606659163The Android Open Source Project
58964064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
59064064216a8433360745f69edddce19a606659163The Android Open Source Project
59164064216a8433360745f69edddce19a606659163The Android Open Source Project}
59264064216a8433360745f69edddce19a606659163The Android Open Source Project
59364064216a8433360745f69edddce19a606659163The Android Open Source Project
59464064216a8433360745f69edddce19a606659163The Android Open Source Project/* STOP_SCAN, START_SCAN */
59564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS scan_to_scan(void *pData)
59664064216a8433360745f69edddce19a606659163The Android Open Source Project{
59764064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
59864064216a8433360745f69edddce19a606659163The Android Open Source Project
59964064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pSmeSm->hReport, SME_SM_MODULE_LOG, ("Setting reScanFlag to ON\n"));
60064064216a8433360745f69edddce19a606659163The Android Open Source Project
60164064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->reScanFlag = TRUE;
60264064216a8433360745f69edddce19a606659163The Android Open Source Project
60364064216a8433360745f69edddce19a606659163The Android Open Source Project	scanConcentrator_stopScan( pSmeSm->hScanCncn, SCAN_SCC_DRIVER );
60464064216a8433360745f69edddce19a606659163The Android Open Source Project
60564064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
60664064216a8433360745f69edddce19a606659163The Android Open Source Project}
60764064216a8433360745f69edddce19a606659163The Android Open Source Project
60864064216a8433360745f69edddce19a606659163The Android Open Source Project
60964064216a8433360745f69edddce19a606659163The Android Open Source Project
61064064216a8433360745f69edddce19a606659163The Android Open Source Project/* CANCEL INTER_SCAN TIMEOUT*/
61164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS interScan_to_idle(void *pData)
61264064216a8433360745f69edddce19a606659163The Android Open Source Project{
61364064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
61464064216a8433360745f69edddce19a606659163The Android Open Source Project
61564064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_stopInterScanTimeout(pSmeSm);
61664064216a8433360745f69edddce19a606659163The Android Open Source Project
61764064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Change shutdown status flag to indicate SME is in IDLE state */
61864064216a8433360745f69edddce19a606659163The Android Open Source Project    pSmeSm->shutDownStatus |= DRIVER_SHUTDOWN_SME_STOPPED;
61964064216a8433360745f69edddce19a606659163The Android Open Source Project
62064064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Set SCR state to "Idle" */
62164064216a8433360745f69edddce19a606659163The Android Open Source Project    scr_setGroup( pSmeSm->hScr, SCR_GID_IDLE );
62264064216a8433360745f69edddce19a606659163The Android Open Source Project
62364064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
62464064216a8433360745f69edddce19a606659163The Android Open Source Project
62564064216a8433360745f69edddce19a606659163The Android Open Source Project}
62664064216a8433360745f69edddce19a606659163The Android Open Source Project
62764064216a8433360745f69edddce19a606659163The Android Open Source Project
62864064216a8433360745f69edddce19a606659163The Android Open Source Project/* Stop current scanning and  go to idle */
62964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS scan_to_idle(void *pData)
63064064216a8433360745f69edddce19a606659163The Android Open Source Project{
63164064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
63264064216a8433360745f69edddce19a606659163The Android Open Source Project
63364064216a8433360745f69edddce19a606659163The Android Open Source Project	/* stopping the current active scan process */
63464064216a8433360745f69edddce19a606659163The Android Open Source Project	scanConcentrator_stopScan( pSmeSm->hScanCncn, SCAN_SCC_DRIVER );
63564064216a8433360745f69edddce19a606659163The Android Open Source Project
63664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Change shutdown status flag to indicate SME is in IDLE state */
63764064216a8433360745f69edddce19a606659163The Android Open Source Project    pSmeSm->shutDownStatus |= DRIVER_SHUTDOWN_SME_STOPPED;
63864064216a8433360745f69edddce19a606659163The Android Open Source Project
63964064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Set the SCR group to "idle" */
64064064216a8433360745f69edddce19a606659163The Android Open Source Project    scr_setGroup( pSmeSm->hScr, SCR_GID_IDLE );
64164064216a8433360745f69edddce19a606659163The Android Open Source Project
64264064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
64364064216a8433360745f69edddce19a606659163The Android Open Source Project}
64464064216a8433360745f69edddce19a606659163The Android Open Source Project
64564064216a8433360745f69edddce19a606659163The Android Open Source Project/* SELECT */
64664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS scan_to_select(void *pData)
64764064216a8433360745f69edddce19a606659163The Android Open Source Project{
64864064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t 		*pSmeSm = (smeSm_t *)pData;
64964064216a8433360745f69edddce19a606659163The Android Open Source Project
65064064216a8433360745f69edddce19a606659163The Android Open Source Project	if (!pSmeSm->connectEnabled)
65164064216a8433360745f69edddce19a606659163The Android Open Source Project	{
65264064216a8433360745f69edddce19a606659163The Android Open Source Project		return smeSm_SMEvent(&pSmeSm->state, SME_SM_EVENT_SELECT_FAILURE, pSmeSm);
65364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
65464064216a8433360745f69edddce19a606659163The Android Open Source Project
65564064216a8433360745f69edddce19a606659163The Android Open Source Project	siteMgr_resetAttemptsNumberParameter(pSmeSm->hSiteMgr);
65664064216a8433360745f69edddce19a606659163The Android Open Source Project
65764064216a8433360745f69edddce19a606659163The Android Open Source Project	return siteMgr_selectSite(pSmeSm->hSiteMgr);
65864064216a8433360745f69edddce19a606659163The Android Open Source Project}
65964064216a8433360745f69edddce19a606659163The Android Open Source Project
66064064216a8433360745f69edddce19a606659163The Android Open Source Project
66164064216a8433360745f69edddce19a606659163The Android Open Source Project
66264064216a8433360745f69edddce19a606659163The Android Open Source Project/* START_TX, CONNECT */
66364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS select_to_connect(void *pData)
66464064216a8433360745f69edddce19a606659163The Android Open Source Project{
66564064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
66664064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
66764064216a8433360745f69edddce19a606659163The Android Open Source Project
66864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* From this moment forward we will send DisAssociation event even if the connection failed */
66964064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->bSendDisAssocEvent = TRUE;
67064064216a8433360745f69edddce19a606659163The Android Open Source Project
67164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* if we are about o start an IBSS, the conn SM will wait for few seconds before sending connection
67264064216a8433360745f69edddce19a606659163The Android Open Source Project       failure indication, so that the SME will rescan for IBSSes with the same SSID. To enable application
67364064216a8433360745f69edddce19a606659163The Android Open Source Project       scan during this period, in this case ONLY we change here the SCR group ID to inter scan */
67464064216a8433360745f69edddce19a606659163The Android Open Source Project   	param.paramType = CONN_TYPE_PARAM;
67564064216a8433360745f69edddce19a606659163The Android Open Source Project	conn_getParam(pSmeSm->hConn, &param);
67664064216a8433360745f69edddce19a606659163The Android Open Source Project	if (CONNECTION_SELF == param.content.connType)
67764064216a8433360745f69edddce19a606659163The Android Open Source Project	{
67864064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Set SCR group to inter-scan */
67964064216a8433360745f69edddce19a606659163The Android Open Source Project        scr_setGroup( pSmeSm->hScr, SCR_GID_INTER_SCAN );
68064064216a8433360745f69edddce19a606659163The Android Open Source Project	}
68164064216a8433360745f69edddce19a606659163The Android Open Source Project
68264064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Configure QoS manager not to renegotiate TSPECs as this is first time connection */
68364064216a8433360745f69edddce19a606659163The Android Open Source Project	return conn_start(pSmeSm->hConn, CONN_TYPE_FIRST_CONN, smeSm_reportConnStatus, pSmeSm, FALSE, FALSE);
68464064216a8433360745f69edddce19a606659163The Android Open Source Project}
68564064216a8433360745f69edddce19a606659163The Android Open Source Project
68664064216a8433360745f69edddce19a606659163The Android Open Source Project
68764064216a8433360745f69edddce19a606659163The Android Open Source Project
68864064216a8433360745f69edddce19a606659163The Android Open Source Project
68964064216a8433360745f69edddce19a606659163The Android Open Source Project/* Stop the connecting and go to disconnecting */
69064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS connecting_To_Disconnecting(void *pData)
69164064216a8433360745f69edddce19a606659163The Android Open Source Project{
69264064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
69364064216a8433360745f69edddce19a606659163The Android Open Source Project
69464064216a8433360745f69edddce19a606659163The Android Open Source Project	conn_stop(pSmeSm->hConn, DISCONN_TYPE_DEAUTH, STATUS_UNSPECIFIED,
69564064216a8433360745f69edddce19a606659163The Android Open Source Project					   TRUE, smeSm_reportConnStatus, pSmeSm);
69664064216a8433360745f69edddce19a606659163The Android Open Source Project
69764064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
69864064216a8433360745f69edddce19a606659163The Android Open Source Project}
69964064216a8433360745f69edddce19a606659163The Android Open Source Project
70064064216a8433360745f69edddce19a606659163The Android Open Source Project
70164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Stop the connection and go to disconnecting */
70264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS connected_To_disconnecting(void *pData)
70364064216a8433360745f69edddce19a606659163The Android Open Source Project{
70464064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS status;
70564064216a8433360745f69edddce19a606659163The Android Open Source Project	paramInfo_t		param;
70664064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
70764064216a8433360745f69edddce19a606659163The Android Open Source Project
70864064216a8433360745f69edddce19a606659163The Android Open Source Project	scr_setGroup( pSmeSm->hScr, SCR_GID_CONNECT );
70964064216a8433360745f69edddce19a606659163The Android Open Source Project
71064064216a8433360745f69edddce19a606659163The Android Open Source Project	param.paramType = SITE_MGR_CURRENT_BSS_TYPE_PARAM;
71164064216a8433360745f69edddce19a606659163The Android Open Source Project	siteMgr_getParam(pSmeSm->hSiteMgr, &param);
71264064216a8433360745f69edddce19a606659163The Android Open Source Project
71364064216a8433360745f69edddce19a606659163The Android Open Source Project	if(param.content.siteMgrDesiredBSSType == BSS_INFRASTRUCTURE)
71464064216a8433360745f69edddce19a606659163The Android Open Source Project	{
71564064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Call the AP connection to perform disconnect - If immidiateShutdownRequired is TRUE, no need to send DISASSOC frame */
71664064216a8433360745f69edddce19a606659163The Android Open Source Project		 status = apConn_stop(pSmeSm->hApConn, TRUE, pSmeSm->immediateShutdownRequired);
71764064216a8433360745f69edddce19a606659163The Android Open Source Project	}
71864064216a8433360745f69edddce19a606659163The Android Open Source Project	else
71964064216a8433360745f69edddce19a606659163The Android Open Source Project	{
72064064216a8433360745f69edddce19a606659163The Android Open Source Project	    /* In IBSS disconnect is done directly with the connection SM */
72164064216a8433360745f69edddce19a606659163The Android Open Source Project		status = conn_stop(pSmeSm->hConn, DISCONN_TYPE_DEAUTH, STATUS_UNSPECIFIED,
72264064216a8433360745f69edddce19a606659163The Android Open Source Project						   TRUE, smeSm_reportConnStatus,pSmeSm);
72364064216a8433360745f69edddce19a606659163The Android Open Source Project		if (status != OK)
72464064216a8433360745f69edddce19a606659163The Android Open Source Project		{
72564064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_ERROR(pSmeSm->hReport, SME_SM_MODULE_LOG, ("SME status=%d, have to return (%d)\n",status,__LINE__));
72664064216a8433360745f69edddce19a606659163The Android Open Source Project			return status;
72764064216a8433360745f69edddce19a606659163The Android Open Source Project		}
72864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
72964064216a8433360745f69edddce19a606659163The Android Open Source Project
73064064216a8433360745f69edddce19a606659163The Android Open Source Project
73164064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
73264064216a8433360745f69edddce19a606659163The Android Open Source Project}
73364064216a8433360745f69edddce19a606659163The Android Open Source Project
73464064216a8433360745f69edddce19a606659163The Android Open Source Project/* RESET_ATTEMPTS_NUMBER, START_SITE_AGING, START_DATA_ALGO */
73564064216a8433360745f69edddce19a606659163The Android Open Source Project/* CONNECTING -> CONNECTED due to event CONN_SUCC */
73664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS connecting_to_connected(void *pData)
73764064216a8433360745f69edddce19a606659163The Android Open Source Project{
73864064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS status;
73964064216a8433360745f69edddce19a606659163The Android Open Source Project	paramInfo_t	param;
74064064216a8433360745f69edddce19a606659163The Android Open Source Project
74164064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)pData;
74264064216a8433360745f69edddce19a606659163The Android Open Source Project
74364064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Reset the DisAssociation reason since the SME saves that last reason, and if a new connection was made and than aborted by
74464064216a8433360745f69edddce19a606659163The Android Open Source Project	   unspecified reason - no one will clear this value */
74564064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->DisAssoc.mgmtStatus = STATUS_UNSPECIFIED;
74664064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->DisAssoc.uStatusCode = 0;
74764064216a8433360745f69edddce19a606659163The Android Open Source Project
74864064216a8433360745f69edddce19a606659163The Android Open Source Project	status = siteMgr_resetPrevPrimarySiteRssi(pSmeSm->hSiteMgr);
74964064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status != OK)
75064064216a8433360745f69edddce19a606659163The Android Open Source Project      {
75164064216a8433360745f69edddce19a606659163The Android Open Source Project         WLAN_REPORT_ERROR(pSmeSm->hReport, SME_SM_MODULE_LOG, ("SME status=%d, have to return (%d)\n",status,__LINE__));
75264064216a8433360745f69edddce19a606659163The Android Open Source Project         return status;
75364064216a8433360745f69edddce19a606659163The Android Open Source Project      }
75464064216a8433360745f69edddce19a606659163The Android Open Source Project
75564064216a8433360745f69edddce19a606659163The Android Open Source Project	status = siteMgr_resetPrimarySiteAttemptsNumber(pSmeSm->hSiteMgr);
75664064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status != OK)
75764064216a8433360745f69edddce19a606659163The Android Open Source Project      {
75864064216a8433360745f69edddce19a606659163The Android Open Source Project         WLAN_REPORT_ERROR(pSmeSm->hReport, SME_SM_MODULE_LOG, ("SME status=%d, have to return (%d)\n",status,__LINE__));
75964064216a8433360745f69edddce19a606659163The Android Open Source Project         return status;
76064064216a8433360745f69edddce19a606659163The Android Open Source Project      }
76164064216a8433360745f69edddce19a606659163The Android Open Source Project
76264064216a8433360745f69edddce19a606659163The Android Open Source Project	status = siteMgr_resetEventStatisticsHistory(pSmeSm->hSiteMgr);
76364064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status != OK)
76464064216a8433360745f69edddce19a606659163The Android Open Source Project      {
76564064216a8433360745f69edddce19a606659163The Android Open Source Project         WLAN_REPORT_ERROR(pSmeSm->hReport, SME_SM_MODULE_LOG, ("SME status=%d, have to return (%d)\n",status,__LINE__));
76664064216a8433360745f69edddce19a606659163The Android Open Source Project         return status;
76764064216a8433360745f69edddce19a606659163The Android Open Source Project      }
76864064216a8433360745f69edddce19a606659163The Android Open Source Project
76964064216a8433360745f69edddce19a606659163The Android Open Source Project
77064064216a8433360745f69edddce19a606659163The Android Open Source Project	param.paramType = SITE_MGR_CURRENT_BSS_TYPE_PARAM;
77164064216a8433360745f69edddce19a606659163The Android Open Source Project	siteMgr_getParam(pSmeSm->hSiteMgr, &param);
77264064216a8433360745f69edddce19a606659163The Android Open Source Project	if (param.content.siteMgrDesiredBSSType == BSS_INFRASTRUCTURE)
77364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
77464064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Start the AP connection */
77564064216a8433360745f69edddce19a606659163The Android Open Source Project		apConn_start(pSmeSm->hApConn, siteMgr_isThereValidSSID(pSmeSm->hSiteMgr));
77664064216a8433360745f69edddce19a606659163The Android Open Source Project	}
77764064216a8433360745f69edddce19a606659163The Android Open Source Project
77864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Set SCR group to connected */
77964064216a8433360745f69edddce19a606659163The Android Open Source Project    scr_setGroup( pSmeSm->hScr, SCR_GID_CONNECTED );
78064064216a8433360745f69edddce19a606659163The Android Open Source Project
78164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
78264064216a8433360745f69edddce19a606659163The Android Open Source Project	/* update statistics - scan attempts for connection histogran */
78364064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( SCAN_ATTAMEPTS_HISTOGRAM_SIZE < pSmeSm->smeStats.currentNumberOfScanAttempts )
78464064216a8433360745f69edddce19a606659163The Android Open Source Project	{
78564064216a8433360745f69edddce19a606659163The Android Open Source Project		pSmeSm->smeStats.scanAttemptsForConnectionHistogram[ SCAN_ATTAMEPTS_HISTOGRAM_SIZE - 1 ]++;
78664064216a8433360745f69edddce19a606659163The Android Open Source Project	}
78764064216a8433360745f69edddce19a606659163The Android Open Source Project	else
78864064216a8433360745f69edddce19a606659163The Android Open Source Project	{
78964064216a8433360745f69edddce19a606659163The Android Open Source Project		pSmeSm->smeStats.scanAttemptsForConnectionHistogram[ pSmeSm->smeStats.currentNumberOfScanAttempts - 1 ]++;
79064064216a8433360745f69edddce19a606659163The Android Open Source Project	}
79164064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->smeStats.currentNumberOfScanAttempts = 0;
79264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
79364064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
79464064216a8433360745f69edddce19a606659163The Android Open Source Project}
79564064216a8433360745f69edddce19a606659163The Android Open Source Project
79664064216a8433360745f69edddce19a606659163The Android Open Source Project
79764064216a8433360745f69edddce19a606659163The Android Open Source Project
79864064216a8433360745f69edddce19a606659163The Android Open Source Project/* STOP_RX, STOP_TX, UPDATE_PRIMARY_SITE_FAIL_STATUS,  */
79964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS connecting_to_selecting(void *pData)
80064064216a8433360745f69edddce19a606659163The Android Open Source Project{
80164064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS status;
80264064216a8433360745f69edddce19a606659163The Android Open Source Project	paramInfo_t	param;
80364064216a8433360745f69edddce19a606659163The Android Open Source Project    smeSm_t *pSmeSm = (smeSm_t *)pData;
80464064216a8433360745f69edddce19a606659163The Android Open Source Project
80564064216a8433360745f69edddce19a606659163The Android Open Source Project	conn_stop(pSmeSm->hConn, DISCONN_TYPE_IMMEDIATE, STATUS_UNSPECIFIED,
80664064216a8433360745f69edddce19a606659163The Android Open Source Project			  TRUE, smeSm_reportConnStatus,pSmeSm);
80764064216a8433360745f69edddce19a606659163The Android Open Source Project
80864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Remove primary site */
80964064216a8433360745f69edddce19a606659163The Android Open Source Project	status = siteMgr_updatePrimarySiteFailStatus(pSmeSm->hSiteMgr, TRUE);
81064064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status != OK)
81164064216a8433360745f69edddce19a606659163The Android Open Source Project      {
81264064216a8433360745f69edddce19a606659163The Android Open Source Project         WLAN_REPORT_ERROR(pSmeSm->hReport, SME_SM_MODULE_LOG, ("SME status=%d, have to return (%d)\n",status,__LINE__));
81364064216a8433360745f69edddce19a606659163The Android Open Source Project         return status;
81464064216a8433360745f69edddce19a606659163The Android Open Source Project      }
81564064216a8433360745f69edddce19a606659163The Android Open Source Project
81664064216a8433360745f69edddce19a606659163The Android Open Source Project	status = siteMgr_disSelectSite(pSmeSm->hSiteMgr);
81764064216a8433360745f69edddce19a606659163The Android Open Source Project	if (status != OK)
81864064216a8433360745f69edddce19a606659163The Android Open Source Project      {
81964064216a8433360745f69edddce19a606659163The Android Open Source Project         WLAN_REPORT_ERROR(pSmeSm->hReport, SME_SM_MODULE_LOG, ("SME status=%d, have to return (%d)\n",status,__LINE__));
82064064216a8433360745f69edddce19a606659163The Android Open Source Project         return status;
82164064216a8433360745f69edddce19a606659163The Android Open Source Project      }
82264064216a8433360745f69edddce19a606659163The Android Open Source Project
82364064216a8433360745f69edddce19a606659163The Android Open Source Project	/* If we are in IBSS mode we don't try to select another site */
82464064216a8433360745f69edddce19a606659163The Android Open Source Project	param.paramType = SITE_MGR_DESIRED_BSS_TYPE_PARAM;
82564064216a8433360745f69edddce19a606659163The Android Open Source Project	siteMgr_getParam(pSmeSm->hSiteMgr, &param);
82664064216a8433360745f69edddce19a606659163The Android Open Source Project
82764064216a8433360745f69edddce19a606659163The Android Open Source Project	if(param.content.siteMgrDesiredBSSType == BSS_INDEPENDENT)
82864064216a8433360745f69edddce19a606659163The Android Open Source Project		return smeSm_reportSelectStatus(pSmeSm, (mgmtStatus_e)SELECT_STATUS_FAILURE);
82964064216a8433360745f69edddce19a606659163The Android Open Source Project	else
83064064216a8433360745f69edddce19a606659163The Android Open Source Project		return siteMgr_selectSite(pSmeSm->hSiteMgr);
83164064216a8433360745f69edddce19a606659163The Android Open Source Project}
83264064216a8433360745f69edddce19a606659163The Android Open Source Project
83364064216a8433360745f69edddce19a606659163The Android Open Source Project
83464064216a8433360745f69edddce19a606659163The Android Open Source Project
83564064216a8433360745f69edddce19a606659163The Android Open Source Project
83664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS chooseScanBand(smeSm_t* pSmeSm, radioBand_e *band)
83764064216a8433360745f69edddce19a606659163The Android Open Source Project{
83864064216a8433360745f69edddce19a606659163The Android Open Source Project	paramInfo_t	param;
83964064216a8433360745f69edddce19a606659163The Android Open Source Project
84064064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_DESIRED_DOT11_MODE_PARAM;
84164064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_getParam( pSmeSm->hSiteMgr, &param );
84264064216a8433360745f69edddce19a606659163The Android Open Source Project
84364064216a8433360745f69edddce19a606659163The Android Open Source Project	/* if working in dual band, select band according to dualBandReScanFlag */
84464064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( param.content.siteMgrDot11Mode == DOT11_DUAL_MODE )
84564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
84664064216a8433360745f69edddce19a606659163The Android Open Source Project        *band = ( TRUE == pSmeSm->dualBandReScanFlag ? RADIO_BAND_5_0_GHZ : RADIO_BAND_2_4_GHZ);
84764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
84864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* if not working in dual band, return site manager current band */
84964064216a8433360745f69edddce19a606659163The Android Open Source Project    else
85064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
85164064216a8433360745f69edddce19a606659163The Android Open Source Project    	param.paramType = SITE_MGR_RADIO_BAND_PARAM;
85264064216a8433360745f69edddce19a606659163The Android Open Source Project	    siteMgr_getParam(pSmeSm->hSiteMgr, &param);
85364064216a8433360745f69edddce19a606659163The Android Open Source Project	    *band = pSmeSm->currBand = param.content.siteMgrRadioBand;
85464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
85564064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
85664064216a8433360745f69edddce19a606659163The Android Open Source Project}
85764064216a8433360745f69edddce19a606659163The Android Open Source Project
85864064216a8433360745f69edddce19a606659163The Android Open Source Project
85964064216a8433360745f69edddce19a606659163The Android Open Source Project
86064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS smeCallScan(void *pData)
86164064216a8433360745f69edddce19a606659163The Android Open Source Project{
86264064216a8433360745f69edddce19a606659163The Android Open Source Project    smeSm_t	*pSmeSm = (smeSm_t *)pData;
86364064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
86464064216a8433360745f69edddce19a606659163The Android Open Source Project	scan_Params_t* pScanParams = &(pSmeSm->scanParams);
86564064216a8433360745f69edddce19a606659163The Android Open Source Project	sme_scan_Params_t 	*pSmeScanParams;
86664064216a8433360745f69edddce19a606659163The Android Open Source Project	scan_normalChannelEntry_t *pChanEntry;
86764064216a8433360745f69edddce19a606659163The Android Open Source Project	int	chan, k;
86864064216a8433360745f69edddce19a606659163The Android Open Source Project
86964064216a8433360745f69edddce19a606659163The Android Open Source Project	/*
87064064216a8433360745f69edddce19a606659163The Android Open Source Project	 * Check in which band we are in and prepare the scan command.
87164064216a8433360745f69edddce19a606659163The Android Open Source Project	 */
87264064216a8433360745f69edddce19a606659163The Android Open Source Project    pScanParams->scanType = SCAN_TYPE_NORMAL_ACTIVE;
87364064216a8433360745f69edddce19a606659163The Android Open Source Project    pScanParams->Tid = 0;
87464064216a8433360745f69edddce19a606659163The Android Open Source Project
87564064216a8433360745f69edddce19a606659163The Android Open Source Project
87664064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_OPERATIONAL_MODE_PARAM;
87764064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_getParam( pSmeSm->hSiteMgr, &param );
87864064216a8433360745f69edddce19a606659163The Android Open Source Project
87964064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( DOT11_A_MODE == param.content.siteMgrDot11OperationalMode )
88064064216a8433360745f69edddce19a606659163The Android Open Source Project	{
88164064216a8433360745f69edddce19a606659163The Android Open Source Project        pScanParams->band = RADIO_BAND_5_0_GHZ;
88264064216a8433360745f69edddce19a606659163The Android Open Source Project		pSmeScanParams  = &(pSmeSm->scanParamsA);
88364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
88464064216a8433360745f69edddce19a606659163The Android Open Source Project    else
88564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
88664064216a8433360745f69edddce19a606659163The Android Open Source Project         pScanParams->band = RADIO_BAND_2_4_GHZ;
88764064216a8433360745f69edddce19a606659163The Android Open Source Project		 pSmeScanParams  = &(pSmeSm->scanParamsBG);
88864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
88964064216a8433360745f69edddce19a606659163The Android Open Source Project
89064064216a8433360745f69edddce19a606659163The Android Open Source Project	 pScanParams->probeRequestRate 	= pSmeScanParams->probeRequestRate;
89164064216a8433360745f69edddce19a606659163The Android Open Source Project	 pScanParams->numOfChannels 		= pSmeScanParams->numOfChannels;
89264064216a8433360745f69edddce19a606659163The Android Open Source Project	 pScanParams->probeReqNumber 		= pSmeScanParams->probeReqNumber;
89364064216a8433360745f69edddce19a606659163The Android Open Source Project
89464064216a8433360745f69edddce19a606659163The Android Open Source Project	 WLAN_REPORT_INFORMATION(pSmeSm->hReport, SME_SM_MODULE_LOG,
89564064216a8433360745f69edddce19a606659163The Android Open Source Project					("Global Scan Params: Rate=0x%x, Prob#=%d, Channels#=%d\n",
89664064216a8433360745f69edddce19a606659163The Android Open Source Project					 pScanParams->probeRequestRate, pScanParams->probeReqNumber,
89764064216a8433360745f69edddce19a606659163The Android Open Source Project					 pScanParams->numOfChannels));
89864064216a8433360745f69edddce19a606659163The Android Open Source Project
89964064216a8433360745f69edddce19a606659163The Android Open Source Project	 for( chan=0; chan < pScanParams->numOfChannels; chan++ )
90064064216a8433360745f69edddce19a606659163The Android Open Source Project	 {
90164064216a8433360745f69edddce19a606659163The Android Open Source Project		pChanEntry = &(pScanParams->channelEntry[chan].normalChannelEntry);
90264064216a8433360745f69edddce19a606659163The Android Open Source Project
90364064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Fill channel ID */
90464064216a8433360745f69edddce19a606659163The Android Open Source Project		pChanEntry->channel = pSmeScanParams->channelsList[chan];
90564064216a8433360745f69edddce19a606659163The Android Open Source Project
90664064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Set broadcast BSSID */
90764064216a8433360745f69edddce19a606659163The Android Open Source Project		for ( k = 0; k < 6; k++ ) pChanEntry->bssId.addr[ k ] = 0xff;
90864064216a8433360745f69edddce19a606659163The Android Open Source Project
90964064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Set min & max dwell time */
91064064216a8433360745f69edddce19a606659163The Android Open Source Project		pChanEntry->minChannelDwellTime = pSmeScanParams->minDwellTime;
91164064216a8433360745f69edddce19a606659163The Android Open Source Project		pChanEntry->maxChannelDwellTime = pSmeScanParams->maxDwellTime;
91264064216a8433360745f69edddce19a606659163The Android Open Source Project
91364064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Set up early termination params. */
91464064216a8433360745f69edddce19a606659163The Android Open Source Project		pChanEntry->earlyTerminationEvent =  SCAN_DEFAULT_EARLY_TERMINATION_EVENT;
91564064216a8433360745f69edddce19a606659163The Android Open Source Project		pChanEntry->ETMaxNumOfAPframes = SCAN_DEFAULT_EARLY_TERMINATION_NUM_OF_FRAMES;
91664064216a8433360745f69edddce19a606659163The Android Open Source Project
91764064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Set desired tx power */
91864064216a8433360745f69edddce19a606659163The Android Open Source Project		pChanEntry->txPowerDbm = pSmeScanParams->txPowerDbm;
91964064216a8433360745f69edddce19a606659163The Android Open Source Project
92064064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_INFORMATION(pSmeSm->hReport, SME_SM_MODULE_LOG,
92164064216a8433360745f69edddce19a606659163The Android Open Source Project					("Chan %d: CH=%d , DwellTime Min=%d Max=%d, ET=%d, TxPowr=%d, \n",
92264064216a8433360745f69edddce19a606659163The Android Open Source Project					 chan,
92364064216a8433360745f69edddce19a606659163The Android Open Source Project					 pScanParams->channelEntry[chan].normalChannelEntry.channel,
92464064216a8433360745f69edddce19a606659163The Android Open Source Project					 pScanParams->channelEntry[chan].normalChannelEntry.minChannelDwellTime,
92564064216a8433360745f69edddce19a606659163The Android Open Source Project					 pScanParams->channelEntry[chan].normalChannelEntry.maxChannelDwellTime,
92664064216a8433360745f69edddce19a606659163The Android Open Source Project					 pScanParams->channelEntry[chan].normalChannelEntry.earlyTerminationEvent,
92764064216a8433360745f69edddce19a606659163The Android Open Source Project					 pScanParams->channelEntry[chan].normalChannelEntry.txPowerDbm));
92864064216a8433360745f69edddce19a606659163The Android Open Source Project	 } /* Channel list setting */
92964064216a8433360745f69edddce19a606659163The Android Open Source Project
93064064216a8433360745f69edddce19a606659163The Android Open Source Project
93164064216a8433360745f69edddce19a606659163The Android Open Source Project    /*
93264064216a8433360745f69edddce19a606659163The Android Open Source Project     * Set the desired SSID (if any)
93364064216a8433360745f69edddce19a606659163The Android Open Source Project     */
93464064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_DESIRED_SSID_PARAM;
93564064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_getParam( pSmeSm->hSiteMgr, &param );
93664064216a8433360745f69edddce19a606659163The Android Open Source Project
93764064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( utils_isAnySSID( &(param.content.siteMgrDesiredSSID) ) )
93864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
93964064216a8433360745f69edddce19a606659163The Android Open Source Project        pScanParams->desiredSsid.len = 0;
94064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
94164064216a8433360745f69edddce19a606659163The Android Open Source Project    else
94264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
94364064216a8433360745f69edddce19a606659163The Android Open Source Project        pScanParams->desiredSsid.len = param.content.siteMgrDesiredSSID.len;
94464064216a8433360745f69edddce19a606659163The Android Open Source Project        os_memoryCopy( pSmeSm->hOs, (void *)pScanParams->desiredSsid.ssidString,
94564064216a8433360745f69edddce19a606659163The Android Open Source Project                       (void *)param.content.siteMgrDesiredSSID.ssidString,
94664064216a8433360745f69edddce19a606659163The Android Open Source Project                       param.content.siteMgrDesiredSSID.len );
94764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
94864064216a8433360745f69edddce19a606659163The Android Open Source Project
94964064216a8433360745f69edddce19a606659163The Android Open Source Project
95064064216a8433360745f69edddce19a606659163The Android Open Source Project
95164064216a8433360745f69edddce19a606659163The Android Open Source Project	/*
95264064216a8433360745f69edddce19a606659163The Android Open Source Project	 * Prepare scan complete's aging, by increasing the scanned sites
95364064216a8433360745f69edddce19a606659163The Android Open Source Project	 * scan attemps counter. The counter will be checked upon scan complete,
95464064216a8433360745f69edddce19a606659163The Android Open Source Project	 * and the sites with no update scan results will be dropped.
95564064216a8433360745f69edddce19a606659163The Android Open Source Project	 */
95664064216a8433360745f69edddce19a606659163The Android Open Source Project	siteMgr_setNotReceivedParameter(pSmeSm->hSiteMgr, &(pScanParams->desiredSsid), pScanParams->band );
95764064216a8433360745f69edddce19a606659163The Android Open Source Project
95864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
95964064216a8433360745f69edddce19a606659163The Android Open Source Project	/* scan results count statistics - nullify the count before starting scan */
96064064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->smeStats.currentNumberOfScanResults = 0;
96164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
96264064216a8433360745f69edddce19a606659163The Android Open Source Project
96364064216a8433360745f69edddce19a606659163The Android Open Source Project	/*
96464064216a8433360745f69edddce19a606659163The Android Open Source Project	 * Set and send the scan command.
96564064216a8433360745f69edddce19a606659163The Android Open Source Project	 */
96664064216a8433360745f69edddce19a606659163The Android Open Source Project    if (scanConcentrator_scan( pSmeSm->hScanCncn, SCAN_SCC_DRIVER, pScanParams ) !=
96764064216a8433360745f69edddce19a606659163The Android Open Source Project            SCAN_CRS_SCAN_RUNNING)
96864064216a8433360745f69edddce19a606659163The Android Open Source Project	{
96964064216a8433360745f69edddce19a606659163The Android Open Source Project    	/* imitate scan complete event if scan could not be performed.*/
97064064216a8433360745f69edddce19a606659163The Android Open Source Project		smeSm_SMEvent(&pSmeSm->state, SME_SM_EVENT_SCAN_COMPLETE, pSmeSm);
97164064216a8433360745f69edddce19a606659163The Android Open Source Project	}
97264064216a8433360745f69edddce19a606659163The Android Open Source Project
97364064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
97464064216a8433360745f69edddce19a606659163The Android Open Source Project}
97564064216a8433360745f69edddce19a606659163The Android Open Source Project
97664064216a8433360745f69edddce19a606659163The Android Open Source Project
97764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS actionUnexpected(void *pData)
97864064216a8433360745f69edddce19a606659163The Android Open Source Project{
97964064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t	*pSmeSm = (smeSm_t *)pData;
98064064216a8433360745f69edddce19a606659163The Android Open Source Project
98164064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_SM(pSmeSm->hReport, SME_SM_MODULE_LOG,  ("State machine error, unexpected Event\n\n"));
98264064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
98364064216a8433360745f69edddce19a606659163The Android Open Source Project}
98464064216a8433360745f69edddce19a606659163The Android Open Source Project
98564064216a8433360745f69edddce19a606659163The Android Open Source Project
98664064216a8433360745f69edddce19a606659163The Android Open Source Project
98764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS actionNop(void *pData)
98864064216a8433360745f69edddce19a606659163The Android Open Source Project{
98964064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
99064064216a8433360745f69edddce19a606659163The Android Open Source Project}
99164064216a8433360745f69edddce19a606659163The Android Open Source Project
99264064216a8433360745f69edddce19a606659163The Android Open Source Project
99364064216a8433360745f69edddce19a606659163The Android Open Source Project
99464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS smeSm_changeBandParams(TI_HANDLE	hSmeSm, radioBand_e radioBand)
99564064216a8433360745f69edddce19a606659163The Android Open Source Project{
99664064216a8433360745f69edddce19a606659163The Android Open Source Project	paramInfo_t	param;
99764064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)hSmeSm;
99864064216a8433360745f69edddce19a606659163The Android Open Source Project
99964064216a8433360745f69edddce19a606659163The Android Open Source Project	/* change dot11 mode */
100064064216a8433360745f69edddce19a606659163The Android Open Source Project	param.paramType = SITE_MGR_OPERATIONAL_MODE_PARAM;
100164064216a8433360745f69edddce19a606659163The Android Open Source Project	if(radioBand == RADIO_BAND_2_4_GHZ)
100264064216a8433360745f69edddce19a606659163The Android Open Source Project		param.content.siteMgrDot11OperationalMode = DOT11_G_MODE;
100364064216a8433360745f69edddce19a606659163The Android Open Source Project	else
100464064216a8433360745f69edddce19a606659163The Android Open Source Project		param.content.siteMgrDot11OperationalMode = DOT11_A_MODE;
100564064216a8433360745f69edddce19a606659163The Android Open Source Project
100664064216a8433360745f69edddce19a606659163The Android Open Source Project	siteMgr_setParam(pSmeSm->hSiteMgr, &param);
100764064216a8433360745f69edddce19a606659163The Android Open Source Project
100864064216a8433360745f69edddce19a606659163The Android Open Source Project	param.paramType = SITE_MGR_RADIO_BAND_PARAM;
100964064216a8433360745f69edddce19a606659163The Android Open Source Project	param.content.siteMgrRadioBand = radioBand;
101064064216a8433360745f69edddce19a606659163The Android Open Source Project	siteMgr_setParam(pSmeSm->hSiteMgr, &param);
101164064216a8433360745f69edddce19a606659163The Android Open Source Project
101264064216a8433360745f69edddce19a606659163The Android Open Source Project	siteMgr_setCurrentTable(pSmeSm->hSiteMgr, radioBand);
101364064216a8433360745f69edddce19a606659163The Android Open Source Project
101464064216a8433360745f69edddce19a606659163The Android Open Source Project	/* configure hal with common core-hal parameters */
101564064216a8433360745f69edddce19a606659163The Android Open Source Project	whalCtrl_SetRadioBand(pSmeSm->hHalCtrl, radioBand);
101664064216a8433360745f69edddce19a606659163The Android Open Source Project
101764064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
101864064216a8433360745f69edddce19a606659163The Android Open Source Project}
101964064216a8433360745f69edddce19a606659163The Android Open Source Project
102064064216a8433360745f69edddce19a606659163The Android Open Source Project/***********************************************************************
102164064216a8433360745f69edddce19a606659163The Android Open Source Project *                        smeSm_startInterScanTimeout
102264064216a8433360745f69edddce19a606659163The Android Open Source Project ***********************************************************************
102364064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Starts interscan timeout
102464064216a8433360745f69edddce19a606659163The Android Open Source Project
102564064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT:      hSmeSm	-	SME SM handle.
102664064216a8433360745f69edddce19a606659163The Android Open Source Project
102764064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT:
102864064216a8433360745f69edddce19a606659163The Android Open Source Project
102964064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN:     OK on success, NOK otherwise
103064064216a8433360745f69edddce19a606659163The Android Open Source Project
103164064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
103264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS smeSm_startInterScanTimeout(TI_HANDLE hSmeSm)
103364064216a8433360745f69edddce19a606659163The Android Open Source Project{
103464064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t 		*pSmeSm = (smeSm_t *)hSmeSm;
103564064216a8433360745f69edddce19a606659163The Android Open Source Project	paramInfo_t		param;
103664064216a8433360745f69edddce19a606659163The Android Open Source Project
103764064216a8433360745f69edddce19a606659163The Android Open Source Project	/* If the SME scan is disabled, (scan is performed by the application)
103864064216a8433360745f69edddce19a606659163The Android Open Source Project	 * don't start the inter scan timeout
103964064216a8433360745f69edddce19a606659163The Android Open Source Project	 */
104064064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pSmeSm->scanEnabled == SCAN_DISABLED)
104164064216a8433360745f69edddce19a606659163The Android Open Source Project	{
104264064216a8433360745f69edddce19a606659163The Android Open Source Project		return OK;
104364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
104464064216a8433360745f69edddce19a606659163The Android Open Source Project
104564064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pSmeSm->scanEnabled == SKIP_NEXT_SCAN)
104664064216a8433360745f69edddce19a606659163The Android Open Source Project	{
104764064216a8433360745f69edddce19a606659163The Android Open Source Project		pSmeSm->scanEnabled = SCAN_ENABLED;
104864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
104964064216a8433360745f69edddce19a606659163The Android Open Source Project
105064064216a8433360745f69edddce19a606659163The Android Open Source Project	param.paramType = SITE_MGR_DESIRED_BSS_TYPE_PARAM;
105164064216a8433360745f69edddce19a606659163The Android Open Source Project	siteMgr_getParam(pSmeSm->hSiteMgr, &param);
105264064216a8433360745f69edddce19a606659163The Android Open Source Project
105364064216a8433360745f69edddce19a606659163The Android Open Source Project	if (param.content.siteMgrDesiredBSSType == BSS_INDEPENDENT)
105464064216a8433360745f69edddce19a606659163The Android Open Source Project	{
105564064216a8433360745f69edddce19a606659163The Android Open Source Project		os_timerStart(pSmeSm->hOs, pSmeSm->interScanTimeoutTimer, IBSS_INTER_SCAN_PERIOD, FALSE);
105664064216a8433360745f69edddce19a606659163The Android Open Source Project	}
105764064216a8433360745f69edddce19a606659163The Android Open Source Project	else
105864064216a8433360745f69edddce19a606659163The Android Open Source Project	{
105964064216a8433360745f69edddce19a606659163The Android Open Source Project		os_timerStart(pSmeSm->hOs, pSmeSm->interScanTimeoutTimer, pSmeSm->interScanTimeout, FALSE);
106064064216a8433360745f69edddce19a606659163The Android Open Source Project	}
106164064216a8433360745f69edddce19a606659163The Android Open Source Project
106264064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
106364064216a8433360745f69edddce19a606659163The Android Open Source Project}
106464064216a8433360745f69edddce19a606659163The Android Open Source Project
106564064216a8433360745f69edddce19a606659163The Android Open Source Project/***********************************************************************
106664064216a8433360745f69edddce19a606659163The Android Open Source Project *                        smeSm_stopInterScanTimeout
106764064216a8433360745f69edddce19a606659163The Android Open Source Project ***********************************************************************
106864064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Stops scan timeout
106964064216a8433360745f69edddce19a606659163The Android Open Source Project
107064064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT:      hSmeSm	-	SME SM handle.
107164064216a8433360745f69edddce19a606659163The Android Open Source Project
107264064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT:
107364064216a8433360745f69edddce19a606659163The Android Open Source Project
107464064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN:     OK on success, NOK otherwise
107564064216a8433360745f69edddce19a606659163The Android Open Source Project
107664064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
107764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS smeSm_stopInterScanTimeout(TI_HANDLE hSmeSm)
107864064216a8433360745f69edddce19a606659163The Android Open Source Project{
107964064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)hSmeSm;
108064064216a8433360745f69edddce19a606659163The Android Open Source Project
108164064216a8433360745f69edddce19a606659163The Android Open Source Project	os_timerStop(pSmeSm->hOs, pSmeSm->interScanTimeoutTimer);
108264064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
108364064216a8433360745f69edddce19a606659163The Android Open Source Project}
108464064216a8433360745f69edddce19a606659163The Android Open Source Project
108564064216a8433360745f69edddce19a606659163The Android Open Source Project/***********************************************************************
108664064216a8433360745f69edddce19a606659163The Android Open Source Project*                        smeSm_sendDisassociateEvent
108764064216a8433360745f69edddce19a606659163The Android Open Source Project***********************************************************************
108864064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Send disassociate event with the reason
108964064216a8433360745f69edddce19a606659163The Android Open Source Project
109064064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT:      pSmeSm	-	SME SM handle.
109164064216a8433360745f69edddce19a606659163The Android Open Source Project
109264064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT:
109364064216a8433360745f69edddce19a606659163The Android Open Source Project
109464064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN:
109564064216a8433360745f69edddce19a606659163The Android Open Source Project
109664064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
109764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void smeSm_sendDisassociateEvent(smeSm_t* pSmeSm)
109864064216a8433360745f69edddce19a606659163The Android Open Source Project{
109964064216a8433360745f69edddce19a606659163The Android Open Source Project	OS_802_11_DISASSOCIATE_REASON_T	eventReason;
110064064216a8433360745f69edddce19a606659163The Android Open Source Project
110164064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pSmeSm->hReport, SME_SM_MODULE_LOG,
110264064216a8433360745f69edddce19a606659163The Android Open Source Project		("%s uDissconnectType = %d, uStatusCode = %d\n",__FUNCTION__, pSmeSm->DisAssoc.mgmtStatus, pSmeSm->DisAssoc.uStatusCode));
110364064216a8433360745f69edddce19a606659163The Android Open Source Project
110464064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Convert reason to OS layer */
110564064216a8433360745f69edddce19a606659163The Android Open Source Project	switch(pSmeSm->DisAssoc.mgmtStatus)
110664064216a8433360745f69edddce19a606659163The Android Open Source Project	{
110764064216a8433360745f69edddce19a606659163The Android Open Source Project	case STATUS_UNSPECIFIED:
110864064216a8433360745f69edddce19a606659163The Android Open Source Project		eventReason.eDisAssocType = OS_DISASSOC_STATUS_UNSPECIFIED;
110964064216a8433360745f69edddce19a606659163The Android Open Source Project		break;
111064064216a8433360745f69edddce19a606659163The Android Open Source Project	case STATUS_AUTH_REJECT:
111164064216a8433360745f69edddce19a606659163The Android Open Source Project		eventReason.eDisAssocType = OS_DISASSOC_STATUS_AUTH_REJECT;
111264064216a8433360745f69edddce19a606659163The Android Open Source Project	    break;
111364064216a8433360745f69edddce19a606659163The Android Open Source Project	case STATUS_ASSOC_REJECT:
111464064216a8433360745f69edddce19a606659163The Android Open Source Project		eventReason.eDisAssocType = OS_DISASSOC_STATUS_ASSOC_REJECT;
111564064216a8433360745f69edddce19a606659163The Android Open Source Project	    break;
111664064216a8433360745f69edddce19a606659163The Android Open Source Project	case STATUS_SECURITY_FAILURE:
111764064216a8433360745f69edddce19a606659163The Android Open Source Project		eventReason.eDisAssocType = OS_DISASSOC_STATUS_SECURITY_FAILURE;
111864064216a8433360745f69edddce19a606659163The Android Open Source Project		break;
111964064216a8433360745f69edddce19a606659163The Android Open Source Project	case STATUS_AP_DEAUTHENTICATE:
112064064216a8433360745f69edddce19a606659163The Android Open Source Project		eventReason.eDisAssocType = OS_DISASSOC_STATUS_AP_DEAUTHENTICATE;
112164064216a8433360745f69edddce19a606659163The Android Open Source Project		break;
112264064216a8433360745f69edddce19a606659163The Android Open Source Project	case STATUS_AP_DISASSOCIATE:
112364064216a8433360745f69edddce19a606659163The Android Open Source Project		eventReason.eDisAssocType = OS_DISASSOC_STATUS_AP_DISASSOCIATE;
112464064216a8433360745f69edddce19a606659163The Android Open Source Project		break;
112564064216a8433360745f69edddce19a606659163The Android Open Source Project	case STATUS_ROAMING_TRIGGER:
112664064216a8433360745f69edddce19a606659163The Android Open Source Project		eventReason.eDisAssocType = OS_DISASSOC_STATUS_ROAMING_TRIGGER;
112764064216a8433360745f69edddce19a606659163The Android Open Source Project		break;
112864064216a8433360745f69edddce19a606659163The Android Open Source Project	default:
112964064216a8433360745f69edddce19a606659163The Android Open Source Project		eventReason.eDisAssocType = OS_DISASSOC_STATUS_UNSPECIFIED;
113064064216a8433360745f69edddce19a606659163The Android Open Source Project	    break;
113164064216a8433360745f69edddce19a606659163The Android Open Source Project	}
113264064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Use the same status code for OS */
113364064216a8433360745f69edddce19a606659163The Android Open Source Project	eventReason.uStatusCode		 = pSmeSm->DisAssoc.uStatusCode;
113464064216a8433360745f69edddce19a606659163The Android Open Source Project
113564064216a8433360745f69edddce19a606659163The Android Open Source Project	EvHandlerSendEvent(pSmeSm->hEvHandler, IPC_EVENT_DISASSOCIATED, (UINT8*)&eventReason, sizeof(OS_802_11_DISASSOCIATE_REASON_T));
113664064216a8433360745f69edddce19a606659163The Android Open Source Project
113764064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Reset status after sending the event */
113864064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->DisAssoc.mgmtStatus = STATUS_UNSPECIFIED;
113964064216a8433360745f69edddce19a606659163The Android Open Source Project	pSmeSm->DisAssoc.uStatusCode = 0;
114064064216a8433360745f69edddce19a606659163The Android Open Source Project}
114164064216a8433360745f69edddce19a606659163The Android Open Source Project
114264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
114364064216a8433360745f69edddce19a606659163The Android Open Source Project/***********************************************************************
114464064216a8433360745f69edddce19a606659163The Android Open Source Project *                        smeSm_resetStats
114564064216a8433360745f69edddce19a606659163The Android Open Source Project ***********************************************************************
114664064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Reset SME statistics
114764064216a8433360745f69edddce19a606659163The Android Open Source Project
114864064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT:      hSmeSm	-	SME SM handle.
114964064216a8433360745f69edddce19a606659163The Android Open Source Project
115064064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT:
115164064216a8433360745f69edddce19a606659163The Android Open Source Project
115264064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN:
115364064216a8433360745f69edddce19a606659163The Android Open Source Project
115464064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
115564064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid smeSm_resetStats( TI_HANDLE hSmeSm )
115664064216a8433360745f69edddce19a606659163The Android Open Source Project{
115764064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t* pSmeSm = (smeSm_t*)hSmeSm;
115864064216a8433360745f69edddce19a606659163The Android Open Source Project
115964064216a8433360745f69edddce19a606659163The Android Open Source Project	os_memoryZero( pSmeSm->hOs, &(pSmeSm->smeStats), sizeof(smeSmStats_t) );
116064064216a8433360745f69edddce19a606659163The Android Open Source Project}
116164064216a8433360745f69edddce19a606659163The Android Open Source Project
116264064216a8433360745f69edddce19a606659163The Android Open Source Project/***********************************************************************
116364064216a8433360745f69edddce19a606659163The Android Open Source Project *                        smeSm_printStats
116464064216a8433360745f69edddce19a606659163The Android Open Source Project ***********************************************************************
116564064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Print SME statistics
116664064216a8433360745f69edddce19a606659163The Android Open Source Project
116764064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT:      hSmeSm	-	SME SM handle.
116864064216a8433360745f69edddce19a606659163The Android Open Source Project
116964064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT:
117064064216a8433360745f69edddce19a606659163The Android Open Source Project
117164064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN:
117264064216a8433360745f69edddce19a606659163The Android Open Source Project
117364064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
117464064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid smeSm_printStats( TI_HANDLE hSmeSm )
117564064216a8433360745f69edddce19a606659163The Android Open Source Project{
117664064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t* pSmeSm = (smeSm_t*)hSmeSm;
117764064216a8433360745f69edddce19a606659163The Android Open Source Project
117864064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("----------------------- SME statistics -----------------------\n\n"));
117964064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("Scan attempts histogram:\n"));
118064064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("------------------------\n\n"));
118164064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("Attempts: %6d %6d %6d %6d %6d %6d %6d %6d\n", 1, 2, 3, 4, 5, 6, 7, 8));
118264064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("Count:    %6d %6d %6d %6d %6d %6d %6d %6d\n\n", pSmeSm->smeStats.scanAttemptsForConnectionHistogram[ 0 ],
118364064216a8433360745f69edddce19a606659163The Android Open Source Project					pSmeSm->smeStats.scanAttemptsForConnectionHistogram[ 1 ], pSmeSm->smeStats.scanAttemptsForConnectionHistogram[ 2 ],
118464064216a8433360745f69edddce19a606659163The Android Open Source Project					pSmeSm->smeStats.scanAttemptsForConnectionHistogram[ 3 ], pSmeSm->smeStats.scanAttemptsForConnectionHistogram[ 4 ],
118564064216a8433360745f69edddce19a606659163The Android Open Source Project					pSmeSm->smeStats.scanAttemptsForConnectionHistogram[ 5 ], pSmeSm->smeStats.scanAttemptsForConnectionHistogram[ 6 ],
118664064216a8433360745f69edddce19a606659163The Android Open Source Project					pSmeSm->smeStats.scanAttemptsForConnectionHistogram[ 7 ]));
118764064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("Scan result count histogram:\n"));
118864064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("----------------------------\n\n"));
118964064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("Results: %6d %6d %6d %6d %6d %6d %6d %6d\n", 0, 1, 2, 3, 4, 5, 6, 7));
119064064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("Scans:   %6d %6d %6d %6d %6d %6d %6d %6d\n\n", pSmeSm->smeStats.scanResulCountHistogram[ 0 ],
119164064216a8433360745f69edddce19a606659163The Android Open Source Project					pSmeSm->smeStats.scanResulCountHistogram[ 1 ], pSmeSm->smeStats.scanResulCountHistogram[ 2 ],
119264064216a8433360745f69edddce19a606659163The Android Open Source Project					pSmeSm->smeStats.scanResulCountHistogram[ 3 ], pSmeSm->smeStats.scanResulCountHistogram[ 4 ],
119364064216a8433360745f69edddce19a606659163The Android Open Source Project					pSmeSm->smeStats.scanResulCountHistogram[ 5 ], pSmeSm->smeStats.scanResulCountHistogram[ 6 ],
119464064216a8433360745f69edddce19a606659163The Android Open Source Project					pSmeSm->smeStats.scanResulCountHistogram[ 7 ]));
119564064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("Results: %6d %6d %6d %6d %6d %6d %6d %6d\n", 8, 9, 10, 11, 12, 13, 14, 15));
119664064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("Scans:   %6d %6d %6d %6d %6d %6d %6d %6d\n", pSmeSm->smeStats.scanResulCountHistogram[ 8 ],
119764064216a8433360745f69edddce19a606659163The Android Open Source Project					pSmeSm->smeStats.scanResulCountHistogram[ 9 ], pSmeSm->smeStats.scanResulCountHistogram[ 10 ],
119864064216a8433360745f69edddce19a606659163The Android Open Source Project					pSmeSm->smeStats.scanResulCountHistogram[ 11 ], pSmeSm->smeStats.scanResulCountHistogram[ 12 ],
119964064216a8433360745f69edddce19a606659163The Android Open Source Project					pSmeSm->smeStats.scanResulCountHistogram[ 13 ], pSmeSm->smeStats.scanResulCountHistogram[ 14 ],
120064064216a8433360745f69edddce19a606659163The Android Open Source Project					pSmeSm->smeStats.scanResulCountHistogram[ 15 ]));
120164064216a8433360745f69edddce19a606659163The Android Open Source Project}
120264064216a8433360745f69edddce19a606659163The Android Open Source Project
120364064216a8433360745f69edddce19a606659163The Android Open Source Project/***********************************************************************
120464064216a8433360745f69edddce19a606659163The Android Open Source Project *                        smeSm_dbgPrintObject
120564064216a8433360745f69edddce19a606659163The Android Open Source Project ***********************************************************************
120664064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Print the SME object
120764064216a8433360745f69edddce19a606659163The Android Open Source Project
120864064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT:      hSmeSm	-	SME SM handle.
120964064216a8433360745f69edddce19a606659163The Android Open Source Project
121064064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT:
121164064216a8433360745f69edddce19a606659163The Android Open Source Project
121264064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN:
121364064216a8433360745f69edddce19a606659163The Android Open Source Project
121464064216a8433360745f69edddce19a606659163The Android Open Source Project************************************************************************/
121564064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid smeSm_dbgPrintObject( TI_HANDLE hSmeSm )
121664064216a8433360745f69edddce19a606659163The Android Open Source Project{
121764064216a8433360745f69edddce19a606659163The Android Open Source Project	smeSm_t *pSmeSm = (smeSm_t *)hSmeSm;
121864064216a8433360745f69edddce19a606659163The Android Open Source Project
121964064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_OS_REPORT(("Current SME State is <%s>\n",stateDesc[pSmeSm->state]));
122064064216a8433360745f69edddce19a606659163The Android Open Source Project}
122164064216a8433360745f69edddce19a606659163The Android Open Source Project
122264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
122364064216a8433360745f69edddce19a606659163The Android Open Source Project
1224