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, ¶m ); 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, ¶m); 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, ¶m); 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, ¶m); 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, ¶m); 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, ¶m); 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, ¶m ); 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, ¶m); 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, ¶m ); 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, ¶m ); 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, ¶m); 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, ¶m); 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, ¶m); 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