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 * * 3864064216a8433360745f69edddce19a606659163The Android Open Source Project * MODULE: Roaming Manager * 3964064216a8433360745f69edddce19a606659163The Android Open Source Project * PURPOSE: * 4064064216a8433360745f69edddce19a606659163The Android Open Source Project * Roaming manager is responsible to receive Roaming triggers and try 4164064216a8433360745f69edddce19a606659163The Android Open Source Project * to select a better AP. 4264064216a8433360745f69edddce19a606659163The Android Open Source Project * The Roaming triggers are: Low RSSI, PER, consecutive No ACK on TX, 4364064216a8433360745f69edddce19a606659163The Android Open Source Project * beacon Missed or External request. 4464064216a8433360745f69edddce19a606659163The Android Open Source Project * In each Internal Roaming request, scan is performed and selection for 4564064216a8433360745f69edddce19a606659163The Android Open Source Project * better AP. Better AP is defined as a different AP with better RSSI, 4664064216a8433360745f69edddce19a606659163The Android Open Source Project * and similar SSID and security settings. 4764064216a8433360745f69edddce19a606659163The Android Open Source Project * If better AP is found, there is a check for fast-roaming via the 4864064216a8433360745f69edddce19a606659163The Android Open Source Project * Supplicant. Then connection to the new AP is invoked. 4964064216a8433360745f69edddce19a606659163The Android Open Source Project * * 5064064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/ 5164064216a8433360745f69edddce19a606659163The Android Open Source Project 5264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h" 5364064216a8433360745f69edddce19a606659163The Android Open Source Project 5464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramOut.h" 5564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h" 5664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "fsm.h" 5764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h" 5864064216a8433360745f69edddce19a606659163The Android Open Source Project 5964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "scanMngrApi.h" 6064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "roamingMngrApi.h" 6164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "apConnApi.h" 6264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "roamingMngrTypes.h" 6364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "bssTypes.h" 6464064216a8433360745f69edddce19a606659163The Android Open Source Project 6564064216a8433360745f69edddce19a606659163The Android Open Source Project/* Constants */ 6664064216a8433360745f69edddce19a606659163The Android Open Source Project 6764064216a8433360745f69edddce19a606659163The Android Open Source Project/* Init bits */ 6864064216a8433360745f69edddce19a606659163The Android Open Source Project#define ROAMING_MNGR_CONTEXT_INIT_BIT 1 6964064216a8433360745f69edddce19a606659163The Android Open Source Project#define ROAMING_MNGR_SM_INIT_BIT 2 7064064216a8433360745f69edddce19a606659163The Android Open Source Project 7164064216a8433360745f69edddce19a606659163The Android Open Source Project#define DEFAULT_AP_QUALITY (-70) 7264064216a8433360745f69edddce19a606659163The Android Open Source Project#define DEFAULT_LOW_PASS_FILTER (30) 7364064216a8433360745f69edddce19a606659163The Android Open Source Project#define DEFAULT_DATA_RETRY_THRESHOLD (20) 7464064216a8433360745f69edddce19a606659163The Android Open Source Project#define DEFAULT_LOW_QUALITY_SCAN_COND (-60) 7564064216a8433360745f69edddce19a606659163The Android Open Source Project#define DEFAULT_NORMAL_QUALITY_SCAN_COND (-50) 7664064216a8433360745f69edddce19a606659163The Android Open Source Project#define DEFAULT_LOW_RSSI (-70) 7764064216a8433360745f69edddce19a606659163The Android Open Source Project#define DEFAULT_LOW_SNR (0) 7864064216a8433360745f69edddce19a606659163The Android Open Source Project#define DEFAULT_TBTT_4_BSS_LOSS (10) 7964064216a8433360745f69edddce19a606659163The Android Open Source Project#define DEFAULT_LOW_TX_RATE (2) 8064064216a8433360745f69edddce19a606659163The Android Open Source Project 8164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Enumerations */ 8264064216a8433360745f69edddce19a606659163The Android Open Source Project 8364064216a8433360745f69edddce19a606659163The Android Open Source Project/** state machine states */ 8464064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef enum 8564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 8664064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_STATE_IDLE = 0, 8764064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_STATE_WAIT_4_TRIGGER = 1, 8864064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_STATE_WAIT_4_CMD = 2, 8964064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_STATE_SCANNING = 3, 9064064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_STATE_SELECTING = 4, 9164064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_STATE_CONNECTING = 5, 9264064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_STATE_LAST = 6 9364064216a8433360745f69edddce19a606659163The Android Open Source Project} roamingMngr_smStates; 9464064216a8433360745f69edddce19a606659163The Android Open Source Project 9564064216a8433360745f69edddce19a606659163The Android Open Source Project/** State machine events */ 9664064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef enum 9764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 9864064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_EVENT_START = 0, /* CONNECTED */ 9964064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_EVENT_STOP = 1, /* NOT CONNECTED */ 10064064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_EVENT_ROAM_TRIGGER = 2, 10164064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_EVENT_SCAN = 3, 10264064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_EVENT_SELECT = 4, 10364064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_EVENT_REQ_HANDOVER = 5, 10464064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_EVENT_ROAM_SUCCESS = 6, 10564064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_EVENT_FAILURE = 7, 10664064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_EVENT_LAST = 8 10764064216a8433360745f69edddce19a606659163The Android Open Source Project} roamingMngr_smEvents; 10864064216a8433360745f69edddce19a606659163The Android Open Source Project 10964064216a8433360745f69edddce19a606659163The Android Open Source Project/* scan types */ 11064064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef enum 11164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 11264064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_NO_SCAN, 11364064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_PARTIAL_SCAN, 11464064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_PARTIAL_SCAN_RETRY, 11564064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_FULL_SCAN, 11664064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_FULL_SCAN_RETRY 11764064216a8433360745f69edddce19a606659163The Android Open Source Project} scan4RoamingType_e; 11864064216a8433360745f69edddce19a606659163The Android Open Source Project 11964064216a8433360745f69edddce19a606659163The Android Open Source Project/* Roaming Trigger groups, according to Roaming Triggers */ 12064064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef enum 12164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 12264064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_TRIGGER_BG_SCAN_GROUP = ROAMING_TRIGGER_NORMAL_QUALITY_FOR_BG_SCAN, 12364064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_TRIGGER_LOW_QUALITY_GROUP = ROAMING_TRIGGER_MAX_TX_RETRIES, 12464064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_TRIGGER_FAST_CONNECT_GROUP = ROAMING_TRIGGER_SWITCH_CHANNEL, 12564064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_TRIGGER_FULL_CONNECT_GROUP = ROAMING_TRIGGER_SECURITY_ATTACK 12664064216a8433360745f69edddce19a606659163The Android Open Source Project} roamingMngr_connectTypeGroup_e; 12764064216a8433360745f69edddce19a606659163The Android Open Source Project 12864064216a8433360745f69edddce19a606659163The Android Open Source Project 12964064216a8433360745f69edddce19a606659163The Android Open Source Project#define ROAMING_MNGR_NUM_STATES ROAMING_STATE_LAST 13064064216a8433360745f69edddce19a606659163The Android Open Source Project#define ROAMING_MNGR_NUM_EVENTS ROAMING_EVENT_LAST 13164064216a8433360745f69edddce19a606659163The Android Open Source Project 13264064216a8433360745f69edddce19a606659163The Android Open Source Project#define INVALID_CANDIDATE_INDEX 0xFF 13364064216a8433360745f69edddce19a606659163The Android Open Source Project#define CURRENT_AP_INDEX 0xFE 13464064216a8433360745f69edddce19a606659163The Android Open Source Project 13564064216a8433360745f69edddce19a606659163The Android Open Source Project/* Typedefs */ 13664064216a8433360745f69edddce19a606659163The Android Open Source Project 13764064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct _roamingMngr_t roamingMngr_t; 13864064216a8433360745f69edddce19a606659163The Android Open Source Project/* Structures */ 13964064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct 14064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 14164064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 preAuthBSSList[MAX_SIZE_OF_BSS_TRACK_LIST]; 14264064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 numOfPreAuthBSS; 14364064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 neighborBSSList[MAX_SIZE_OF_BSS_TRACK_LIST]; 14464064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 numOfNeighborBSS; 14564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 regularBSSList[MAX_SIZE_OF_BSS_TRACK_LIST]; 14664064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 numOfRegularBSS; 14764064216a8433360745f69edddce19a606659163The Android Open Source Project} listOfCandidateAps_t; 14864064216a8433360745f69edddce19a606659163The Android Open Source Project 14964064216a8433360745f69edddce19a606659163The Android Open Source Project#define MAX_ROAMING_TRIGGERS ROAMING_TRIGGER_LAST 15064064216a8433360745f69edddce19a606659163The Android Open Source Project 15164064216a8433360745f69edddce19a606659163The Android Open Source Projectstruct _roamingMngr_t 15264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 15364064216a8433360745f69edddce19a606659163The Android Open Source Project /*** Roaming manager parameters that can be configured externally ***/ 15464064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngrConfig_t roamingMngrConfig; 15564064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngrThresholdsConfig_t roamingMngrThresholdsConfig; 15664064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 lowPassFilterRoamingAttemptInMsec; 15764064216a8433360745f69edddce19a606659163The Android Open Source Project 15864064216a8433360745f69edddce19a606659163The Android Open Source Project /*** Internal roaming parameters ***/ 15964064216a8433360745f69edddce19a606659163The Android Open Source Project /* the roaming trigger type */ 16064064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_roamingTrigger_e roamingTrigger; 16164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Roaming SM current state */ 16264064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_smStates currentState; 16364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Indicate if a trigger is already in process, and therefore the 16464064216a8433360745f69edddce19a606659163The Android Open Source Project other triggers will be ignored */ 16564064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL maskRoamingEvents; 16664064216a8433360745f69edddce19a606659163The Android Open Source Project /* TS to filter Too many low Quality roaming triggers */ 16764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 lowQualityTriggerTimestamp; 16864064216a8433360745f69edddce19a606659163The Android Open Source Project /* the scan type performed for Roaming */ 16964064216a8433360745f69edddce19a606659163The Android Open Source Project scan4RoamingType_e scanType; 17064064216a8433360745f69edddce19a606659163The Android Open Source Project /* list of BSS received from Scan Manager */ 17164064216a8433360745f69edddce19a606659163The Android Open Source Project bssList_t *pListOfAPs; 17264064216a8433360745f69edddce19a606659163The Android Open Source Project /* Indicating if Neighbor APs exist */ 17364064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL neighborApsExist; 17464064216a8433360745f69edddce19a606659163The Android Open Source Project /* a list of the candiadte APs indexes in pListOfAPs according to 17564064216a8433360745f69edddce19a606659163The Android Open Source Project neighbor APs, pre-auth APs and other APs */ 17664064216a8433360745f69edddce19a606659163The Android Open Source Project listOfCandidateAps_t listOfCandidateAps; 17764064216a8433360745f69edddce19a606659163The Android Open Source Project /* The current candidate AP's index to Roam to */ 17864064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 candidateApIndex; 17964064216a8433360745f69edddce19a606659163The Android Open Source Project /* Indicates whether at least one handover was performed */ 18064064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL handoverWasPerformed; 18164064216a8433360745f69edddce19a606659163The Android Open Source Project /* The station capabilities for the current Connection */ 18264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_staCapabilities_t staCapabilities; 18364064216a8433360745f69edddce19a606659163The Android Open Source Project 18464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Roaming manager SM */ 18564064216a8433360745f69edddce19a606659163The Android Open Source Project fsm_stateMachine_t *pRoamingSm; 18664064216a8433360745f69edddce19a606659163The Android Open Source Project 18764064216a8433360745f69edddce19a606659163The Android Open Source Project /* Roaming manager handles to other objects */ 18864064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hReport; 18964064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hOs; 19064064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hScanMngr; 19164064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hAPConnection; 19264064216a8433360745f69edddce19a606659163The Android Open Source Project 19364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 19464064216a8433360745f69edddce19a606659163The Android Open Source Project 19564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Debug trace for Roaming statistics */ 19664064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingTriggerEvents[MAX_ROAMING_TRIGGERS]; 19764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingHandoverEvents[MAX_ROAMING_TRIGGERS]; 19864064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingSuccesfulHandoverNum; 19964064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingFailedHandoverNum; 20064064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingTriggerTimestamp; 20164064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingHandoverStartedTimestamp; 20264064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingHandoverCompletedTimestamp; 20364064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingAverageSuccHandoverDuration; 20464064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 roamingAverageRoamingDuration; 20564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 20664064216a8433360745f69edddce19a606659163The Android Open Source Project 20764064216a8433360745f69edddce19a606659163The Android Open Source Project}; 20864064216a8433360745f69edddce19a606659163The Android Open Source Project 20964064216a8433360745f69edddce19a606659163The Android Open Source Project/* External data definitions */ 21064064216a8433360745f69edddce19a606659163The Android Open Source Project 21164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Local functions definitions */ 21264064216a8433360745f69edddce19a606659163The Android Open Source Project 21364064216a8433360745f69edddce19a606659163The Android Open Source Project/* Global variables */ 21464064216a8433360745f69edddce19a606659163The Android Open Source Project 21564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef REPORT_LOG 21664064216a8433360745f69edddce19a606659163The Android Open Source Project 21764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic char *roamingMngr_stateDesc[ROAMING_MNGR_NUM_STATES] = { 21864064216a8433360745f69edddce19a606659163The Android Open Source Project "STATE_IDLE", 21964064216a8433360745f69edddce19a606659163The Android Open Source Project "STATE_WAIT_4_TRIGGER", 22064064216a8433360745f69edddce19a606659163The Android Open Source Project "STATE_WAIT_4_CMD", 22164064216a8433360745f69edddce19a606659163The Android Open Source Project "STATE_SCANNING", 22264064216a8433360745f69edddce19a606659163The Android Open Source Project "STATE_SELECTING", 22364064216a8433360745f69edddce19a606659163The Android Open Source Project "CONNECTING" 22464064216a8433360745f69edddce19a606659163The Android Open Source Project }; 22564064216a8433360745f69edddce19a606659163The Android Open Source Project 22664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic char *roamingMngr_eventDesc[ROAMING_MNGR_NUM_EVENTS] = { 22764064216a8433360745f69edddce19a606659163The Android Open Source Project "EVENT_START", 22864064216a8433360745f69edddce19a606659163The Android Open Source Project "EVENT_STOP", 22964064216a8433360745f69edddce19a606659163The Android Open Source Project "EVENT_ROAM_TRIGGER", 23064064216a8433360745f69edddce19a606659163The Android Open Source Project "EVENT_SCAN", 23164064216a8433360745f69edddce19a606659163The Android Open Source Project "EVENT_SELECT", 23264064216a8433360745f69edddce19a606659163The Android Open Source Project "EVENT_REQ_HANDOVER", 23364064216a8433360745f69edddce19a606659163The Android Open Source Project "EVENT_ROAM_SUCCESS", 23464064216a8433360745f69edddce19a606659163The Android Open Source Project "EVENT_FAILURE" 23564064216a8433360745f69edddce19a606659163The Android Open Source Project }; 23664064216a8433360745f69edddce19a606659163The Android Open Source Project 23764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 23864064216a8433360745f69edddce19a606659163The Android Open Source Project 23964064216a8433360745f69edddce19a606659163The Android Open Source Project/* Function prototypes */ 24064064216a8433360745f69edddce19a606659163The Android Open Source Project/* SM functions */ 24164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smEvent(UINT8 *currState, UINT8 event, void* data); 24264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smUnexpected(void *pData); 24364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smNop(void *pData); 24464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smStartIdle(void *pData); 24564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smStop(void *pData); 24664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smStopWhileScanning(void *pData); 24764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smRoamTrigger(TI_HANDLE hRoamingMngr); 24864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smInvokeScan(TI_HANDLE hRoamingMngr); 24964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smSelection(TI_HANDLE hRoamingMngr); 25064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smHandover(TI_HANDLE hRoamingMngr); 25164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smSuccHandover(TI_HANDLE hRoamingMngr); 25264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smFailHandover(TI_HANDLE hRoamingMngr); 25364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smScanFailure(TI_HANDLE hRoamingMngr); 25464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smDisconnectWhileConnecting(TI_HANDLE hRoamingMngr); 25564064216a8433360745f69edddce19a606659163The Android Open Source Project 25664064216a8433360745f69edddce19a606659163The Android Open Source Project 25764064216a8433360745f69edddce19a606659163The Android Open Source Project 25864064216a8433360745f69edddce19a606659163The Android Open Source Project/************** callback funtions called by AP Connection **************/ 25964064216a8433360745f69edddce19a606659163The Android Open Source Project/* called when a trigger for Roaming occurs */ 26064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS roamingMngr_triggerRoamingCb(TI_HANDLE hRoamingMngr, void *pData); 26164064216a8433360745f69edddce19a606659163The Android Open Source Project/* called when CONN status event occurs */ 26264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS roamingMngr_connStatusCb(TI_HANDLE hRoamingMngr, void *pData); 26364064216a8433360745f69edddce19a606659163The Android Open Source Project/* called when Neighbor APs is updated */ 26464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS roamingMngr_updateNeighborApListCb(TI_HANDLE hRoamingMngr, void *pData); 26564064216a8433360745f69edddce19a606659163The Android Open Source Project 26664064216a8433360745f69edddce19a606659163The Android Open Source Project/* internal functions */ 26764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void roamingMngr_releaseModule(roamingMngr_t *pRoamingMngr, UINT32 initVec); 26864064216a8433360745f69edddce19a606659163The Android Open Source Project 26964064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 27064064216a8433360745f69edddce19a606659163The Android Open Source Project/* debug function */ 27164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void roamingMngr_printStatistics(TI_HANDLE hRoamingMngr); 27264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void roamingMngr_resetStatistics(TI_HANDLE hRoamingMngr); 27364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 27464064216a8433360745f69edddce19a606659163The Android Open Source Project 27564064216a8433360745f69edddce19a606659163The Android Open Source Project 27664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 27764064216a8433360745f69edddce19a606659163The Android Open Source Project* 27864064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_create 27964064216a8433360745f69edddce19a606659163The Android Open Source Project* 28064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 28164064216a8433360745f69edddce19a606659163The Android Open Source Project* 28264064216a8433360745f69edddce19a606659163The Android Open Source Project* Create the Roaming Manager context. 28364064216a8433360745f69edddce19a606659163The Android Open Source Project* 28464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 28564064216a8433360745f69edddce19a606659163The Android Open Source Project* 28664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hOs - OS handler \n 28764064216a8433360745f69edddce19a606659163The Android Open Source Project* 28864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 28964064216a8433360745f69edddce19a606659163The Android Open Source Project* 29064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK on failure. 29164064216a8433360745f69edddce19a606659163The Android Open Source Project* 29264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 29364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 29464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE roamingMngr_create(TI_HANDLE hOs) 29564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 29664064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 29764064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 29864064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 initVec; 29964064216a8433360745f69edddce19a606659163The Android Open Source Project 30064064216a8433360745f69edddce19a606659163The Android Open Source Project initVec = 0; 30164064216a8433360745f69edddce19a606659163The Android Open Source Project 30264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = os_memoryAlloc(hOs, sizeof(roamingMngr_t)); 30364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 30464064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 30564064216a8433360745f69edddce19a606659163The Android Open Source Project 30664064216a8433360745f69edddce19a606659163The Android Open Source Project initVec |= (1 << ROAMING_MNGR_CONTEXT_INIT_BIT); 30764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->hOs = hOs; 30864064216a8433360745f69edddce19a606659163The Android Open Source Project 30964064216a8433360745f69edddce19a606659163The Android Open Source Project status = fsm_Create(hOs, &pRoamingMngr->pRoamingSm, ROAMING_MNGR_NUM_STATES, ROAMING_MNGR_NUM_EVENTS); 31064064216a8433360745f69edddce19a606659163The Android Open Source Project if (status != OK) 31164064216a8433360745f69edddce19a606659163The Android Open Source Project { 31264064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_releaseModule(pRoamingMngr, initVec); 31364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("FATAL ERROR: roamingMngr_create(): Error Creating pRoamingSm - Aborting\n")); 31464064216a8433360745f69edddce19a606659163The Android Open Source Project return NULL; 31564064216a8433360745f69edddce19a606659163The Android Open Source Project } 31664064216a8433360745f69edddce19a606659163The Android Open Source Project initVec |= (1 << ROAMING_MNGR_SM_INIT_BIT); 31764064216a8433360745f69edddce19a606659163The Android Open Source Project 31864064216a8433360745f69edddce19a606659163The Android Open Source Project 31964064216a8433360745f69edddce19a606659163The Android Open Source Project return pRoamingMngr; 32064064216a8433360745f69edddce19a606659163The Android Open Source Project} 32164064216a8433360745f69edddce19a606659163The Android Open Source Project 32264064216a8433360745f69edddce19a606659163The Android Open Source Project/** 32364064216a8433360745f69edddce19a606659163The Android Open Source Project* 32464064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_releaseModule 32564064216a8433360745f69edddce19a606659163The Android Open Source Project* 32664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 32764064216a8433360745f69edddce19a606659163The Android Open Source Project* 32864064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by the un load function 32964064216a8433360745f69edddce19a606659163The Android Open Source Project* Go over the vector, for each bit that is set, release the corresponding module. 33064064216a8433360745f69edddce19a606659163The Android Open Source Project* 33164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 33264064216a8433360745f69edddce19a606659163The Android Open Source Project* 33364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pRoamingMngr - Roaming Manager context \n 33464064216a8433360745f69edddce19a606659163The Android Open Source Project* I - initVec - indicates which modules should be released 33564064216a8433360745f69edddce19a606659163The Android Open Source Project* 33664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 33764064216a8433360745f69edddce19a606659163The Android Open Source Project* 33864064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 33964064216a8433360745f69edddce19a606659163The Android Open Source Project* 34064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa roamingMngr_create 34164064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 34264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void roamingMngr_releaseModule(roamingMngr_t *pRoamingMngr, UINT32 initVec) 34364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 34464064216a8433360745f69edddce19a606659163The Android Open Source Project 34564064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr==NULL) 34664064216a8433360745f69edddce19a606659163The Android Open Source Project { 34764064216a8433360745f69edddce19a606659163The Android Open Source Project return; 34864064216a8433360745f69edddce19a606659163The Android Open Source Project } 34964064216a8433360745f69edddce19a606659163The Android Open Source Project if (initVec & (1 << ROAMING_MNGR_SM_INIT_BIT)) 35064064216a8433360745f69edddce19a606659163The Android Open Source Project { 35164064216a8433360745f69edddce19a606659163The Android Open Source Project fsm_Unload(pRoamingMngr->hOs, pRoamingMngr->pRoamingSm); 35264064216a8433360745f69edddce19a606659163The Android Open Source Project } 35364064216a8433360745f69edddce19a606659163The Android Open Source Project 35464064216a8433360745f69edddce19a606659163The Android Open Source Project if (initVec & (1 << ROAMING_MNGR_CONTEXT_INIT_BIT)) 35564064216a8433360745f69edddce19a606659163The Android Open Source Project { 35664064216a8433360745f69edddce19a606659163The Android Open Source Project utils_nullMemoryFree(pRoamingMngr->hOs, pRoamingMngr, sizeof(roamingMngr_t)); 35764064216a8433360745f69edddce19a606659163The Android Open Source Project } 35864064216a8433360745f69edddce19a606659163The Android Open Source Project 35964064216a8433360745f69edddce19a606659163The Android Open Source Project initVec = 0; 36064064216a8433360745f69edddce19a606659163The Android Open Source Project} 36164064216a8433360745f69edddce19a606659163The Android Open Source Project 36264064216a8433360745f69edddce19a606659163The Android Open Source Project 36364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 36464064216a8433360745f69edddce19a606659163The Android Open Source Project* 36564064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_unload 36664064216a8433360745f69edddce19a606659163The Android Open Source Project* 36764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 36864064216a8433360745f69edddce19a606659163The Android Open Source Project* 36964064216a8433360745f69edddce19a606659163The Android Open Source Project* Unload Roaming Manager module from memory 37064064216a8433360745f69edddce19a606659163The Android Open Source Project* 37164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 37264064216a8433360745f69edddce19a606659163The Android Open Source Project* 37364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hAdmCtrl - Roaming Manager context \n 37464064216a8433360745f69edddce19a606659163The Android Open Source Project* 37564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 37664064216a8433360745f69edddce19a606659163The Android Open Source Project* 37764064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 37864064216a8433360745f69edddce19a606659163The Android Open Source Project* 37964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa roamingMngr_create 38064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 38164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS roamingMngr_unload(TI_HANDLE hRoamingMngr) 38264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 38364064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 initVec; 38464064216a8433360745f69edddce19a606659163The Android Open Source Project 38564064216a8433360745f69edddce19a606659163The Android Open Source Project if (hRoamingMngr == NULL) 38664064216a8433360745f69edddce19a606659163The Android Open Source Project { 38764064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 38864064216a8433360745f69edddce19a606659163The Android Open Source Project } 38964064216a8433360745f69edddce19a606659163The Android Open Source Project 39064064216a8433360745f69edddce19a606659163The Android Open Source Project initVec = 0xFFFF; 39164064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_releaseModule(hRoamingMngr, initVec); 39264064216a8433360745f69edddce19a606659163The Android Open Source Project 39364064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 39464064216a8433360745f69edddce19a606659163The Android Open Source Project} 39564064216a8433360745f69edddce19a606659163The Android Open Source Project 39664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 39764064216a8433360745f69edddce19a606659163The Android Open Source Project* 39864064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_config 39964064216a8433360745f69edddce19a606659163The Android Open Source Project* 40064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 40164064216a8433360745f69edddce19a606659163The Android Open Source Project* 40264064216a8433360745f69edddce19a606659163The Android Open Source Project* Configure the Roaming Manager module. 40364064216a8433360745f69edddce19a606659163The Android Open Source Project* 40464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 40564064216a8433360745f69edddce19a606659163The Android Open Source Project* 40664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - Roaming Manager context \n 40764064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hReport - Report context \n 40864064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hOs - OS context \n 40964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hSiteMgr - Site Manager context \n 41064064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hSmeSm - SME context \n 41164064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hCtrlData - Control Data context \n 41264064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hPowerMgr - Power Manager context \n 41364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pRoamingParams - init roaming parameters read from the registry \n 41464064216a8433360745f69edddce19a606659163The Android Open Source Project* 41564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 41664064216a8433360745f69edddce19a606659163The Android Open Source Project* 41764064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK on failure. 41864064216a8433360745f69edddce19a606659163The Android Open Source Project* 41964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 42064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 42164064216a8433360745f69edddce19a606659163The Android Open Source Project 42264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS roamingMngr_init(TI_HANDLE hRoamingMngr, 42364064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hReport, 42464064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hScanMngr, 42564064216a8433360745f69edddce19a606659163The Android Open Source Project TI_HANDLE hAPConnection) 42664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 42764064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 42864064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 42945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt#ifdef ENABLE_ROAMING_BY_DEFAULT 43045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt roamingMngrConfigParams_t InitRoamingParams; 43145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt paramInfo_t param; 43245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt#endif 43364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 43464064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 index; 43564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 43664064216a8433360745f69edddce19a606659163The Android Open Source Project 43764064216a8433360745f69edddce19a606659163The Android Open Source Project /** Station broadcast key State Machine matrix */ 43864064216a8433360745f69edddce19a606659163The Android Open Source Project fsm_actionCell_t roamingMngr_matrix[ROAMING_MNGR_NUM_STATES][ROAMING_MNGR_NUM_EVENTS] = 43964064216a8433360745f69edddce19a606659163The Android Open Source Project { 44064064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for IDLE state */ 44164064216a8433360745f69edddce19a606659163The Android Open Source Project { {ROAMING_STATE_WAIT_4_TRIGGER, roamingMngr_smStartIdle}, /* START */ 44264064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smNop}, /* STOP */ 44364064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smNop}, /* ROAM_TRIGGER */ 44464064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smUnexpected}, /* SCAN */ 44564064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smUnexpected}, /* SELECT */ 44664064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smUnexpected}, /* REQ_HANDOVER */ 44764064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smUnexpected}, /* ROAM_SUCCESS */ 44864064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smUnexpected} /* FAILURE */ 44964064216a8433360745f69edddce19a606659163The Android Open Source Project }, 45064064216a8433360745f69edddce19a606659163The Android Open Source Project 45164064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for WAIT_4_TRIGGER state */ 45264064216a8433360745f69edddce19a606659163The Android Open Source Project { {ROAMING_STATE_WAIT_4_TRIGGER, roamingMngr_smUnexpected}, /* START */ 45364064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smStop}, /* STOP */ 45464064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_WAIT_4_CMD, roamingMngr_smRoamTrigger}, /* ROAM_TRIGGER */ 45564064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_WAIT_4_TRIGGER, roamingMngr_smUnexpected}, /* SCAN */ 45664064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_WAIT_4_TRIGGER, roamingMngr_smUnexpected}, /* SELECT */ 45764064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_WAIT_4_TRIGGER, roamingMngr_smUnexpected}, /* REQ_HANDOVER */ 45864064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_WAIT_4_TRIGGER, roamingMngr_smUnexpected}, /* ROAM_SUCCESS */ 45964064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_WAIT_4_TRIGGER, roamingMngr_smUnexpected} /* FAILURE */ 46064064216a8433360745f69edddce19a606659163The Android Open Source Project }, 46164064216a8433360745f69edddce19a606659163The Android Open Source Project 46264064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for WAIT_4_CMD state */ 46364064216a8433360745f69edddce19a606659163The Android Open Source Project { {ROAMING_STATE_WAIT_4_CMD, roamingMngr_smUnexpected}, /* START */ 46464064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_WAIT_4_CMD, roamingMngr_smUnexpected}, /* STOP */ 46564064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_WAIT_4_CMD, roamingMngr_smUnexpected}, /* ROAM_TRIGGER */ 46664064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SCANNING, roamingMngr_smInvokeScan}, /* SCAN */ 46764064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SELECTING, roamingMngr_smSelection}, /* SELECT */ 46864064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_WAIT_4_CMD, roamingMngr_smUnexpected}, /* REQ_HANDOVER */ 46964064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_WAIT_4_CMD, roamingMngr_smUnexpected}, /* ROAM_SUCCESS */ 47064064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_WAIT_4_CMD, roamingMngr_smUnexpected} /* FAILURE */ 47164064216a8433360745f69edddce19a606659163The Android Open Source Project }, 47264064216a8433360745f69edddce19a606659163The Android Open Source Project 47364064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for SCANNING state */ 47464064216a8433360745f69edddce19a606659163The Android Open Source Project { {ROAMING_STATE_SCANNING, roamingMngr_smUnexpected}, /* START */ 47564064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smStopWhileScanning}, /* STOP */ 47664064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SCANNING, roamingMngr_smNop}, /* ROAM_TRIGGER */ 47764064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SCANNING, roamingMngr_smInvokeScan}, /* SCAN */ 47864064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SELECTING, roamingMngr_smSelection}, /* SELECT */ 47964064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SCANNING, roamingMngr_smUnexpected}, /* REQ_HANDOVER */ 48064064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SCANNING, roamingMngr_smUnexpected}, /* ROAM_SUCCESS */ 48164064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smScanFailure} /* FAILURE */ 48264064216a8433360745f69edddce19a606659163The Android Open Source Project 48364064216a8433360745f69edddce19a606659163The Android Open Source Project }, 48464064216a8433360745f69edddce19a606659163The Android Open Source Project 48564064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for SELECTING state */ 48664064216a8433360745f69edddce19a606659163The Android Open Source Project { {ROAMING_STATE_SELECTING, roamingMngr_smUnexpected}, /* START */ 48764064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SELECTING, roamingMngr_smUnexpected}, /* STOP */ 48864064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SELECTING, roamingMngr_smUnexpected}, /* ROAM_TRIGGER */ 48964064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SELECTING, roamingMngr_smUnexpected}, /* SCAN */ 49064064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SELECTING, roamingMngr_smUnexpected}, /* SELECT */ 49164064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_CONNECTING, roamingMngr_smHandover}, /* REQ_HANDOVER */ 49264064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SELECTING, roamingMngr_smUnexpected}, /* ROAM_SUCCESS */ 49364064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_SELECTING, roamingMngr_smUnexpected} /* FAILURE */ 49464064216a8433360745f69edddce19a606659163The Android Open Source Project 49564064216a8433360745f69edddce19a606659163The Android Open Source Project }, 49664064216a8433360745f69edddce19a606659163The Android Open Source Project 49764064216a8433360745f69edddce19a606659163The Android Open Source Project /* next state and actions for CONNECTING state */ 49864064216a8433360745f69edddce19a606659163The Android Open Source Project { {ROAMING_STATE_CONNECTING, roamingMngr_smUnexpected}, /* START */ 49964064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smStop}, /* STOP */ 50064064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smDisconnectWhileConnecting}, /* ROAM_TRIGGER */ 50164064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_CONNECTING, roamingMngr_smUnexpected}, /* SCAN, */ 50264064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_CONNECTING, roamingMngr_smUnexpected}, /* SELECT */ 50364064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_CONNECTING, roamingMngr_smHandover}, /* REQ_HANDOVER */ 50464064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_WAIT_4_TRIGGER, roamingMngr_smSuccHandover} , /* ROAM_SUCCESS */ 50564064216a8433360745f69edddce19a606659163The Android Open Source Project {ROAMING_STATE_IDLE, roamingMngr_smFailHandover} /* FAILURE */ 50664064216a8433360745f69edddce19a606659163The Android Open Source Project 50764064216a8433360745f69edddce19a606659163The Android Open Source Project } 50864064216a8433360745f69edddce19a606659163The Android Open Source Project 50964064216a8433360745f69edddce19a606659163The Android Open Source Project 51064064216a8433360745f69edddce19a606659163The Android Open Source Project 51164064216a8433360745f69edddce19a606659163The Android Open Source Project }; 51264064216a8433360745f69edddce19a606659163The Android Open Source Project 51364064216a8433360745f69edddce19a606659163The Android Open Source Project if (hRoamingMngr == NULL) 51464064216a8433360745f69edddce19a606659163The Android Open Source Project { 51564064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 51664064216a8433360745f69edddce19a606659163The Android Open Source Project } 51764064216a8433360745f69edddce19a606659163The Android Open Source Project 51864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 51964064216a8433360745f69edddce19a606659163The Android Open Source Project 52064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Update handlers */ 52164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->hReport = hReport; 52264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->hScanMngr = hScanMngr; 52364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->hAPConnection = hAPConnection; 52464064216a8433360745f69edddce19a606659163The Android Open Source Project 52564064216a8433360745f69edddce19a606659163The Android Open Source Project /* Init intrenal variables */ 52664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->currentState = ROAMING_STATE_IDLE; 52764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingMngrConfig.enableDisable = ROAMING_DISABLED; 52864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTrigger = ROAMING_TRIGGER_NONE; 52964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->maskRoamingEvents= TRUE; 53064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->scanType = ROAMING_NO_SCAN; 53164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->candidateApIndex = INVALID_CANDIDATE_INDEX; 53264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->handoverWasPerformed = FALSE; 53364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->lowQualityTriggerTimestamp = 0; 53464064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->neighborApsExist = FALSE; 53564064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs = NULL; 53664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->candidateApIndex = INVALID_CANDIDATE_INDEX; 53764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfNeighborBSS = 0; 53864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfPreAuthBSS = 0; 53964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfRegularBSS = 0; 54064064216a8433360745f69edddce19a606659163The Android Open Source Project 54164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 54264064216a8433360745f69edddce19a606659163The Android Open Source Project /* debug counters */ 54364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingSuccesfulHandoverNum = 0; 54464064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingHandoverStartedTimestamp = 0; 54564064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingHandoverCompletedTimestamp = 0; 54664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingAverageSuccHandoverDuration = 0; 54764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingAverageRoamingDuration = 0; 54864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingFailedHandoverNum = 0; 54964064216a8433360745f69edddce19a606659163The Android Open Source Project 55064064216a8433360745f69edddce19a606659163The Android Open Source Project for (index=ROAMING_TRIGGER_NONE; index<ROAMING_TRIGGER_LAST; index++) 55164064216a8433360745f69edddce19a606659163The Android Open Source Project { 55264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTriggerEvents[index] = 0; 55364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingHandoverEvents[index] = 0; 55464064216a8433360745f69edddce19a606659163The Android Open Source Project } 55564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 55664064216a8433360745f69edddce19a606659163The Android Open Source Project 55764064216a8433360745f69edddce19a606659163The Android Open Source Project /* config the FSM */ 55864064216a8433360745f69edddce19a606659163The Android Open Source Project status = fsm_Config(pRoamingMngr->pRoamingSm, 55964064216a8433360745f69edddce19a606659163The Android Open Source Project &roamingMngr_matrix[0][0], 56064064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_MNGR_NUM_STATES, 56164064216a8433360745f69edddce19a606659163The Android Open Source Project ROAMING_MNGR_NUM_EVENTS, 56264064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_smEvent, pRoamingMngr->hOs); 56345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt#ifdef ENABLE_ROAMING_BY_DEFAULT 56445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt if (status != OK) 56545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt { 56645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt return status; 56745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt } 56845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 56945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt param.paramType = ROAMING_MNGR_APPLICATION_CONFIGURATION; 57045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt param.content.applicationConfigBuffer.bufferSize = sizeof(roamingMngrConfigParams_t); 57145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt param.content.applicationConfigBuffer.buffer = (UINT8 *)¶m; 57245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt InitRoamingParams.roamingMngrConfig.enableDisable = ROAMING_ENABLED; 57345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 57445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt InitRoamingParams.roamingMngrConfig.lowPassFilterRoamingAttempt = 30; 57545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt InitRoamingParams.roamingMngrConfig.apQualityThreshold = -70; 57645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 57745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt InitRoamingParams.roamingMngrThresholdsConfig.dataRetryThreshold = 20; 57845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt InitRoamingParams.roamingMngrThresholdsConfig.numExpectedTbttForBSSLoss = 10; 57945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt InitRoamingParams.roamingMngrThresholdsConfig.txRateThreshold = 2; 58045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt InitRoamingParams.roamingMngrThresholdsConfig.lowRssiThreshold = -80; 58145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt InitRoamingParams.roamingMngrThresholdsConfig.lowSnrThreshold = 0; 58245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt InitRoamingParams.roamingMngrThresholdsConfig.lowQualityForBackgroungScanCondition = -60; 58345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt InitRoamingParams.roamingMngrThresholdsConfig.normalQualityForBackgroungScanCondition = -50; 58445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt InitRoamingParams.roamingMngrThresholdsConfig.rssiFilterWeight = 10; 58545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt InitRoamingParams.roamingMngrThresholdsConfig.snrFilterWeight = 10; 58645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 58745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt param.paramType = ROAMING_MNGR_APPLICATION_CONFIGURATION; 58845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt param.content.applicationConfigBuffer.bufferSize = sizeof(roamingMngrConfigParams_t); 58945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt param.content.applicationConfigBuffer.buffer = (UINT8 *)&InitRoamingParams; 59045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 59145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt roamingMngr_setParam (hRoamingMngr,¶m); 59245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt#endif 59364064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 59464064216a8433360745f69edddce19a606659163The Android Open Source Project} 59564064216a8433360745f69edddce19a606659163The Android Open Source Project 59664064216a8433360745f69edddce19a606659163The Android Open Source Project/* For debug */ 59764064216a8433360745f69edddce19a606659163The Android Open Source Projectextern TI_STATUS apConn_reportRoamingEvent(TI_HANDLE hAPConnection,apConn_roamingTrigger_e roamingEventType,void *pRoamingEventData); 59864064216a8433360745f69edddce19a606659163The Android Open Source Project 59964064216a8433360745f69edddce19a606659163The Android Open Source Project/** 60064064216a8433360745f69edddce19a606659163The Android Open Source Project* 60164064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_setParam - Set a specific parameter to the roamingMngr SM 60264064216a8433360745f69edddce19a606659163The Android Open Source Project* 60364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 60464064216a8433360745f69edddce19a606659163The Android Open Source Project* 60564064216a8433360745f69edddce19a606659163The Android Open Source Project* Set a specific parameter to the roamingMngr SM. 60664064216a8433360745f69edddce19a606659163The Android Open Source Project* 60764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 60864064216a8433360745f69edddce19a606659163The Android Open Source Project* 60964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 61064064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pParam - Parameter \n 61164064216a8433360745f69edddce19a606659163The Android Open Source Project* 61264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 61364064216a8433360745f69edddce19a606659163The Android Open Source Project* 61464064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 61564064216a8433360745f69edddce19a606659163The Android Open Source Project* 61664064216a8433360745f69edddce19a606659163The Android Open Source Project* 61764064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 61864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS roamingMngr_setParam(TI_HANDLE hRoamingMngr, paramInfo_t *pParam) 61964064216a8433360745f69edddce19a606659163The Android Open Source Project{ 62064064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 62164064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status=OK; 62264064216a8433360745f69edddce19a606659163The Android Open Source Project 62364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 62464064216a8433360745f69edddce19a606659163The Android Open Source Project 62564064216a8433360745f69edddce19a606659163The Android Open Source Project if ((hRoamingMngr == NULL) || (pParam == NULL)) 62664064216a8433360745f69edddce19a606659163The Android Open Source Project { 62764064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 62864064216a8433360745f69edddce19a606659163The Android Open Source Project } 62964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 63064064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_setParam %X \n", 63164064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->paramType)); 63264064216a8433360745f69edddce19a606659163The Android Open Source Project 63364064216a8433360745f69edddce19a606659163The Android Open Source Project 63464064216a8433360745f69edddce19a606659163The Android Open Source Project switch (pParam->paramType) 63564064216a8433360745f69edddce19a606659163The Android Open Source Project { 63664064216a8433360745f69edddce19a606659163The Android Open Source Project 63764064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_MNGR_APPLICATION_CONFIGURATION: 63864064216a8433360745f69edddce19a606659163The Android Open Source Project { 63964064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngrConfigParams_t *pRoamingMngrConfigParams; 64064064216a8433360745f69edddce19a606659163The Android Open Source Project 64164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pParam->content.applicationConfigBuffer.bufferSize < sizeof(roamingMngrConfigParams_t)) 64264064216a8433360745f69edddce19a606659163The Android Open Source Project { 64364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 64464064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_setParam bad size = %d \n", 64564064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.applicationConfigBuffer.bufferSize)); 64664064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 64764064216a8433360745f69edddce19a606659163The Android Open Source Project } 64864064216a8433360745f69edddce19a606659163The Android Open Source Project 64964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams = (roamingMngrConfigParams_t*)pParam->content.applicationConfigBuffer.buffer; 65064064216a8433360745f69edddce19a606659163The Android Open Source Project 65164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Configure the Roaming Parmeters */ 65264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG,("roamingMngr_setParam Configuration: \n \ 65364064216a8433360745f69edddce19a606659163The Android Open Source Project enableDisable= %d,\n lowPassFilterRoamingAttempt=%d,\n \ 65464064216a8433360745f69edddce19a606659163The Android Open Source Project apQualityThreshold=%d\n", 65564064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrConfig.enableDisable, 65664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrConfig.lowPassFilterRoamingAttempt, 65764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrConfig.apQualityThreshold)); 65864064216a8433360745f69edddce19a606659163The Android Open Source Project 65964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingMngrConfig.apQualityThreshold = pRoamingMngrConfigParams->roamingMngrConfig.apQualityThreshold; 66064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingMngrConfig.lowPassFilterRoamingAttempt = pRoamingMngrConfigParams->roamingMngrConfig.lowPassFilterRoamingAttempt; 66164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->lowPassFilterRoamingAttemptInMsec = pRoamingMngrConfigParams->roamingMngrConfig.lowPassFilterRoamingAttempt * 1000; 66264064216a8433360745f69edddce19a606659163The Android Open Source Project 66364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Configure the Roaming Trigger thresholds */ 66464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG,("roamingMngr_setParam Thresholds: \n \ 66564064216a8433360745f69edddce19a606659163The Android Open Source Project dataRetryThreshold= %d,\n lowQualityForBackgroungScanCondition=%d,\n \ 66664064216a8433360745f69edddce19a606659163The Android Open Source Project lowRssiThreshold=%d,\n lowSNRThreshold=%d,\n \ 66764064216a8433360745f69edddce19a606659163The Android Open Source Project normalQualityForBackgroungScanCondition=%d,\n \ 66864064216a8433360745f69edddce19a606659163The Android Open Source Project numExpectedTbttForBSSLoss=%d,\n txRateThreshold=%d \n \n", 66964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrThresholdsConfig.dataRetryThreshold, 67064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrThresholdsConfig.lowQualityForBackgroungScanCondition, 67164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrThresholdsConfig.lowRssiThreshold, 67264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrThresholdsConfig.lowSnrThreshold, pRoamingMngrConfigParams->roamingMngrThresholdsConfig.normalQualityForBackgroungScanCondition, 67364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrThresholdsConfig.numExpectedTbttForBSSLoss, 67464064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrThresholdsConfig.txRateThreshold)); 67564064216a8433360745f69edddce19a606659163The Android Open Source Project 67664064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pRoamingMngr->hOs, &pRoamingMngr->roamingMngrThresholdsConfig, &pRoamingMngrConfigParams->roamingMngrThresholdsConfig, sizeof(roamingMngrThresholdsConfig_t)); 67764064216a8433360745f69edddce19a606659163The Android Open Source Project 67864064216a8433360745f69edddce19a606659163The Android Open Source Project status = apConn_setRoamThresholds(pRoamingMngr->hAPConnection, &pRoamingMngrConfigParams->roamingMngrThresholdsConfig); 67964064216a8433360745f69edddce19a606659163The Android Open Source Project 68064064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->roamingMngrConfig.enableDisable && 68164064216a8433360745f69edddce19a606659163The Android Open Source Project !pRoamingMngrConfigParams->roamingMngrConfig.enableDisable) 68264064216a8433360745f69edddce19a606659163The Android Open Source Project { /* disable Roaming Manager */ 68364064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_unregisterRoamMngrCallb(pRoamingMngr->hAPConnection); 68464064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingMngrConfig.enableDisable = ROAMING_DISABLED; 68564064216a8433360745f69edddce19a606659163The Android Open Source Project return (roamingMngr_smEvent((UINT8*)&pRoamingMngr->currentState, ROAMING_EVENT_STOP, pRoamingMngr)); 68664064216a8433360745f69edddce19a606659163The Android Open Source Project } 68764064216a8433360745f69edddce19a606659163The Android Open Source Project else if (!pRoamingMngr->roamingMngrConfig.enableDisable && 68864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrConfig.enableDisable) 68964064216a8433360745f69edddce19a606659163The Android Open Source Project { /* enable Roaming Manager */ 69064064216a8433360745f69edddce19a606659163The Android Open Source Project /* Save the Roaming Configuration parameters */ 69164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingMngrConfig.enableDisable = pRoamingMngrConfigParams->roamingMngrConfig.enableDisable; 69264064216a8433360745f69edddce19a606659163The Android Open Source Project /* register Roaming callback */ 69364064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_registerRoamMngrCallb(pRoamingMngr->hAPConnection, 69464064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_triggerRoamingCb, 69564064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_connStatusCb, 69664064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_updateNeighborApListCb); 69764064216a8433360745f69edddce19a606659163The Android Open Source Project } 69864064216a8433360745f69edddce19a606659163The Android Open Source Project } 69964064216a8433360745f69edddce19a606659163The Android Open Source Project break; 70064064216a8433360745f69edddce19a606659163The Android Open Source Project 70164064216a8433360745f69edddce19a606659163The Android Open Source Project /*********** For Debug Purposes ***********/ 70264064216a8433360745f69edddce19a606659163The Android Open Source Project 70364064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_MNGR_TRIGGER_EVENT: 70464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Enable/disable Internal Roaming */ 70564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 70664064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_setParam TRIGGER_EVENT= %d \n", 70764064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.roamingTriggerType)); 70845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt 70945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt if ((apConn_roamingTrigger_e)pParam->content.roamingTriggerType == ROAMING_TRIGGER_AP_DISCONNECT) 71045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt { 71145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt /* DeAuth packet with status code of deauth/disassoc packet equal to 1 */ 71245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt apConn_reportRoamingEventDisconnect(pRoamingMngr->hAPConnection ,1 ,TRUE); 71345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt } 71445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt else 71545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt { 71645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt apConn_reportRoamingEvent(pRoamingMngr->hAPConnection, (apConn_roamingTrigger_e)pParam->content.roamingTriggerType, NULL); 71745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt } 71864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 71964064216a8433360745f69edddce19a606659163The Android Open Source Project 72064064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_MNGR_CONN_STATUS: 72164064216a8433360745f69edddce19a606659163The Android Open Source Project /* External request to connect to BBSID */ 72264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 72364064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_setParam CONN_STATUS= %d \n", 72464064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->content.roamingConnStatus)); 72564064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_connStatusCb(pRoamingMngr, &pParam->content.roamingConnStatus); 72664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 72764064216a8433360745f69edddce19a606659163The Android Open Source Project 72864064216a8433360745f69edddce19a606659163The Android Open Source Project default: 72964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 73064064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_setParam bad param= %X\n", 73164064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->paramType)); 73264064216a8433360745f69edddce19a606659163The Android Open Source Project 73364064216a8433360745f69edddce19a606659163The Android Open Source Project break; 73464064216a8433360745f69edddce19a606659163The Android Open Source Project } 73564064216a8433360745f69edddce19a606659163The Android Open Source Project 73664064216a8433360745f69edddce19a606659163The Android Open Source Project 73764064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 73864064216a8433360745f69edddce19a606659163The Android Open Source Project} 73964064216a8433360745f69edddce19a606659163The Android Open Source Project 74064064216a8433360745f69edddce19a606659163The Android Open Source Project/** 74164064216a8433360745f69edddce19a606659163The Android Open Source Project* 74264064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_getParam - Get a specific parameter from the roamingMngr SM 74364064216a8433360745f69edddce19a606659163The Android Open Source Project* 74464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 74564064216a8433360745f69edddce19a606659163The Android Open Source Project* 74664064216a8433360745f69edddce19a606659163The Android Open Source Project* Get a specific parameter from the roamingMngr SM. 74764064216a8433360745f69edddce19a606659163The Android Open Source Project* 74864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 74964064216a8433360745f69edddce19a606659163The Android Open Source Project* 75064064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 75164064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - pParam - Parameter \n 75264064216a8433360745f69edddce19a606659163The Android Open Source Project* 75364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 75464064216a8433360745f69edddce19a606659163The Android Open Source Project* 75564064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 75664064216a8433360745f69edddce19a606659163The Android Open Source Project* 75764064216a8433360745f69edddce19a606659163The Android Open Source Project* 75864064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 75964064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS roamingMngr_getParam(TI_HANDLE hRoamingMngr, paramInfo_t *pParam) 76064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 76164064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 76264064216a8433360745f69edddce19a606659163The Android Open Source Project 76364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 76464064216a8433360745f69edddce19a606659163The Android Open Source Project 76564064216a8433360745f69edddce19a606659163The Android Open Source Project if ((hRoamingMngr == NULL) || (pParam == NULL)) 76664064216a8433360745f69edddce19a606659163The Android Open Source Project { 76764064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 76864064216a8433360745f69edddce19a606659163The Android Open Source Project } 76964064216a8433360745f69edddce19a606659163The Android Open Source Project 77064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 77164064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_getParam %X \n", 77264064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->paramType)); 77364064216a8433360745f69edddce19a606659163The Android Open Source Project 77464064216a8433360745f69edddce19a606659163The Android Open Source Project switch (pParam->paramType) 77564064216a8433360745f69edddce19a606659163The Android Open Source Project { 77664064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_MNGR_APPLICATION_CONFIGURATION: 77764064216a8433360745f69edddce19a606659163The Android Open Source Project { 77864064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngrConfigParams_t *pRoamingMngrConfigParams; 77964064216a8433360745f69edddce19a606659163The Android Open Source Project 78064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams = (roamingMngrConfigParams_t *)&pParam->content.roamingConfigBuffer; 78164064216a8433360745f69edddce19a606659163The Android Open Source Project 78264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->roamingMngrConfig.enableDisable == ROAMING_DISABLED) 78364064216a8433360745f69edddce19a606659163The Android Open Source Project { 78464064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrConfig.enableDisable = FALSE; 78564064216a8433360745f69edddce19a606659163The Android Open Source Project } 78664064216a8433360745f69edddce19a606659163The Android Open Source Project else 78764064216a8433360745f69edddce19a606659163The Android Open Source Project { 78864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrConfig.enableDisable = TRUE; 78964064216a8433360745f69edddce19a606659163The Android Open Source Project } 79064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrConfig.apQualityThreshold = pRoamingMngr->roamingMngrConfig.apQualityThreshold; 79164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngrConfigParams->roamingMngrConfig.lowPassFilterRoamingAttempt = pRoamingMngr->roamingMngrConfig.lowPassFilterRoamingAttempt; 79264064216a8433360745f69edddce19a606659163The Android Open Source Project 79364064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_getRoamThresholds(pRoamingMngr->hAPConnection, &pRoamingMngr->roamingMngrThresholdsConfig); 79464064216a8433360745f69edddce19a606659163The Android Open Source Project os_memoryCopy(pRoamingMngr->hOs, &pRoamingMngrConfigParams->roamingMngrThresholdsConfig, &pRoamingMngr->roamingMngrThresholdsConfig, sizeof(roamingMngrThresholdsConfig_t)); 79564064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->paramLength = sizeof(roamingMngrConfigParams_t); 79664064216a8433360745f69edddce19a606659163The Android Open Source Project } 79764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 79864064216a8433360745f69edddce19a606659163The Android Open Source Project 79964064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_MNGR_CONF_PARAM: 80064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("Roaming is: %s \n", pRoamingMngr->roamingMngrConfig.enableDisable ? "Enabled" : "Disabled")); 80164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("lowPassFilterRoamingAttempt = %d msec, apQualityThreshold = %d\n", 80264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingMngrConfig.lowPassFilterRoamingAttempt, 80364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingMngrConfig.apQualityThreshold)); 80464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 80564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 80664064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_MNGR_PRINT_STATISTICS: 80764064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_printStatistics(pRoamingMngr); 80864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 80964064216a8433360745f69edddce19a606659163The Android Open Source Project 81064064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_MNGR_RESET_STATISTICS: 81164064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_resetStatistics(pRoamingMngr); 81264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 81364064216a8433360745f69edddce19a606659163The Android Open Source Project 81464064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_MNGR_PRINT_CURRENT_STATUS: 81564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("Roaming Current State = %s, enableDisable=%d\n, maskRoamingEvents = %d, roamingTrigger=%d \n scanType=%d, handoverWasPerformed=%d \n, candidateApIndex=%d, lowQualityTriggerTimestamp=%d \n", 81664064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_stateDesc[pRoamingMngr->currentState], 81764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingMngrConfig.enableDisable, 81864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->maskRoamingEvents, 81964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTrigger, 82064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->scanType, 82164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->handoverWasPerformed, 82264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->candidateApIndex, 82364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->lowQualityTriggerTimestamp)); 82464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 82564064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_MNGR_PRINT_CANDIDATE_TABLE: 82664064216a8433360745f69edddce19a606659163The Android Open Source Project { 82764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 index; 82864064216a8433360745f69edddce19a606659163The Android Open Source Project 82964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->pListOfAPs==NULL) 83064064216a8433360745f69edddce19a606659163The Android Open Source Project { 83164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 83264064216a8433360745f69edddce19a606659163The Android Open Source Project ("Roaming Mngr the candidate AP list is invalid \n") ); 83364064216a8433360745f69edddce19a606659163The Android Open Source Project break; 83464064216a8433360745f69edddce19a606659163The Android Open Source Project } 83564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 83664064216a8433360745f69edddce19a606659163The Android Open Source Project ("The number of candidates is %d\n", 83764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->numOfEntries) ); 83864064216a8433360745f69edddce19a606659163The Android Open Source Project 83964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 84064064216a8433360745f69edddce19a606659163The Android Open Source Project ("Roaming Mngr Neighbor AP list, num of candidates = %d\n", 84164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfNeighborBSS) ); 84264064216a8433360745f69edddce19a606659163The Android Open Source Project 84364064216a8433360745f69edddce19a606659163The Android Open Source Project for (index=0; index<pRoamingMngr->listOfCandidateAps.numOfNeighborBSS; index++) 84464064216a8433360745f69edddce19a606659163The Android Open Source Project { 84564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 candidateIndex; 84664064216a8433360745f69edddce19a606659163The Android Open Source Project bssEntry_t *pBssEntry; 84764064216a8433360745f69edddce19a606659163The Android Open Source Project 84864064216a8433360745f69edddce19a606659163The Android Open Source Project candidateIndex = pRoamingMngr->listOfCandidateAps.neighborBSSList[index]; 84964064216a8433360745f69edddce19a606659163The Android Open Source Project pBssEntry = &pRoamingMngr->pListOfAPs->BSSList[candidateIndex]; 85064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 85164064216a8433360745f69edddce19a606659163The Android Open Source Project ("candiate %d, BSSID=%x-%x-%x-%x-%x-%x, RSSI =%d \n", 85264064216a8433360745f69edddce19a606659163The Android Open Source Project candidateIndex, pBssEntry->BSSID.addr[0], 85364064216a8433360745f69edddce19a606659163The Android Open Source Project pBssEntry->BSSID.addr[1], pBssEntry->BSSID.addr[2], 85464064216a8433360745f69edddce19a606659163The Android Open Source Project pBssEntry->BSSID.addr[3], pBssEntry->BSSID.addr[4], 85564064216a8433360745f69edddce19a606659163The Android Open Source Project pBssEntry->BSSID.addr[5], pBssEntry->RSSI) ); 85664064216a8433360745f69edddce19a606659163The Android Open Source Project } 85764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 85864064216a8433360745f69edddce19a606659163The Android Open Source Project ("Roaming Mngr Pre-Auth AP list, num of candidates = %d\n", 85964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfPreAuthBSS) ); 86064064216a8433360745f69edddce19a606659163The Android Open Source Project 86164064216a8433360745f69edddce19a606659163The Android Open Source Project for (index=0; index<pRoamingMngr->listOfCandidateAps.numOfPreAuthBSS; index++) 86264064216a8433360745f69edddce19a606659163The Android Open Source Project { 86364064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 candidateIndex; 86464064216a8433360745f69edddce19a606659163The Android Open Source Project bssEntry_t *pBssEntry; 86564064216a8433360745f69edddce19a606659163The Android Open Source Project 86664064216a8433360745f69edddce19a606659163The Android Open Source Project candidateIndex = pRoamingMngr->listOfCandidateAps.preAuthBSSList[index]; 86764064216a8433360745f69edddce19a606659163The Android Open Source Project pBssEntry = &pRoamingMngr->pListOfAPs->BSSList[candidateIndex]; 86864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 86964064216a8433360745f69edddce19a606659163The Android Open Source Project ("candiate %d, BSSID=%x-%x-%x-%x-%x-%x, RSSI =%d \n", 87064064216a8433360745f69edddce19a606659163The Android Open Source Project candidateIndex, pBssEntry->BSSID.addr[0], 87164064216a8433360745f69edddce19a606659163The Android Open Source Project pBssEntry->BSSID.addr[1], pBssEntry->BSSID.addr[2], 87264064216a8433360745f69edddce19a606659163The Android Open Source Project pBssEntry->BSSID.addr[3], pBssEntry->BSSID.addr[4], 87364064216a8433360745f69edddce19a606659163The Android Open Source Project pBssEntry->BSSID.addr[5], pBssEntry->RSSI) ); 87464064216a8433360745f69edddce19a606659163The Android Open Source Project } 87564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 87664064216a8433360745f69edddce19a606659163The Android Open Source Project ("Roaming Mngr Regular AP list, num of candidates = %d\n", 87764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfRegularBSS) ); 87864064216a8433360745f69edddce19a606659163The Android Open Source Project 87964064216a8433360745f69edddce19a606659163The Android Open Source Project for (index=0; index<pRoamingMngr->listOfCandidateAps.numOfRegularBSS; index++) 88064064216a8433360745f69edddce19a606659163The Android Open Source Project { 88164064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 candidateIndex; 88264064216a8433360745f69edddce19a606659163The Android Open Source Project bssEntry_t *pBssEntry; 88364064216a8433360745f69edddce19a606659163The Android Open Source Project 88464064216a8433360745f69edddce19a606659163The Android Open Source Project candidateIndex = pRoamingMngr->listOfCandidateAps.regularBSSList[index]; 88564064216a8433360745f69edddce19a606659163The Android Open Source Project pBssEntry = &pRoamingMngr->pListOfAPs->BSSList[candidateIndex]; 88664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION( pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 88764064216a8433360745f69edddce19a606659163The Android Open Source Project ("candiate %d, BSSID=%x-%x-%x-%x-%x-%x, RSSI =%d \n", 88864064216a8433360745f69edddce19a606659163The Android Open Source Project candidateIndex, pBssEntry->BSSID.addr[0], 88964064216a8433360745f69edddce19a606659163The Android Open Source Project pBssEntry->BSSID.addr[1], pBssEntry->BSSID.addr[2], 89064064216a8433360745f69edddce19a606659163The Android Open Source Project pBssEntry->BSSID.addr[3], pBssEntry->BSSID.addr[4], 89164064216a8433360745f69edddce19a606659163The Android Open Source Project pBssEntry->BSSID.addr[5], pBssEntry->RSSI) ); 89264064216a8433360745f69edddce19a606659163The Android Open Source Project } 89364064216a8433360745f69edddce19a606659163The Android Open Source Project } 89464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 89564064216a8433360745f69edddce19a606659163The Android Open Source Project 89664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /*TI_DBG*/ 89764064216a8433360745f69edddce19a606659163The Android Open Source Project 89864064216a8433360745f69edddce19a606659163The Android Open Source Project default: 89964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 90064064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_getParam bad paramType= %X \n", 90164064216a8433360745f69edddce19a606659163The Android Open Source Project pParam->paramType)); 90264064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 90364064216a8433360745f69edddce19a606659163The Android Open Source Project } 90464064216a8433360745f69edddce19a606659163The Android Open Source Project 90564064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 90664064216a8433360745f69edddce19a606659163The Android Open Source Project} 90764064216a8433360745f69edddce19a606659163The Android Open Source Project 90864064216a8433360745f69edddce19a606659163The Android Open Source Project 90964064216a8433360745f69edddce19a606659163The Android Open Source Project/** 91064064216a8433360745f69edddce19a606659163The Android Open Source Project* 91164064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_triggerRoamingCb 91264064216a8433360745f69edddce19a606659163The Android Open Source Project* 91364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 91464064216a8433360745f69edddce19a606659163The Android Open Source Project* 91564064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when Roaming should be triggered 91664064216a8433360745f69edddce19a606659163The Android Open Source Project * due to one of apConn_roamingTrigger_e Roaming Reasons. 91764064216a8433360745f69edddce19a606659163The Android Open Source Project * Save the trigger and process it only if there's no other Roaming trigger 91864064216a8433360745f69edddce19a606659163The Android Open Source Project * in process. 91964064216a8433360745f69edddce19a606659163The Android Open Source Project* 92064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 92164064216a8433360745f69edddce19a606659163The Android Open Source Project* 92264064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 92364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to roaming trigger 92464064216a8433360745f69edddce19a606659163The Android Open Source Project* 92564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 92664064216a8433360745f69edddce19a606659163The Android Open Source Project* 92764064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 92864064216a8433360745f69edddce19a606659163The Android Open Source Project* 92964064216a8433360745f69edddce19a606659163The Android Open Source Project* 93064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 93164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS roamingMngr_triggerRoamingCb(TI_HANDLE hRoamingMngr, void *pData) 93264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 93364064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 93464064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_roamingTrigger_e roamingTrigger; 93564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 curTimestamp; 93664064216a8433360745f69edddce19a606659163The Android Open Source Project 93764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 93864064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRoamingMngr == NULL) || (pData == NULL)) 93964064216a8433360745f69edddce19a606659163The Android Open Source Project { 94064064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 94164064216a8433360745f69edddce19a606659163The Android Open Source Project } 94264064216a8433360745f69edddce19a606659163The Android Open Source Project 94364064216a8433360745f69edddce19a606659163The Android Open Source Project roamingTrigger = *(apConn_roamingTrigger_e *)pData; 94464064216a8433360745f69edddce19a606659163The Android Open Source Project 94564064216a8433360745f69edddce19a606659163The Android Open Source Project if (roamingTrigger >= ROAMING_TRIGGER_LAST) 94664064216a8433360745f69edddce19a606659163The Android Open Source Project { 94764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 94864064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_triggerRoamingCb, bad roaming trigger = %d\n", roamingTrigger)); 94964064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 95064064216a8433360745f69edddce19a606659163The Android Open Source Project } 95164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 95264064216a8433360745f69edddce19a606659163The Android Open Source Project /* save parameters for debug*/ 95364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTriggerEvents[pRoamingMngr->roamingTrigger]++; 95464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 95564064216a8433360745f69edddce19a606659163The Android Open Source Project if (roamingTrigger <= ROAMING_TRIGGER_BG_SCAN_GROUP) 95664064216a8433360745f69edddce19a606659163The Android Open Source Project { 95764064216a8433360745f69edddce19a606659163The Android Open Source Project BOOL lowQuality = FALSE; 95864064216a8433360745f69edddce19a606659163The Android Open Source Project if (roamingTrigger == ROAMING_TRIGGER_LOW_QUALITY_FOR_BG_SCAN) 95964064216a8433360745f69edddce19a606659163The Android Open Source Project { 96064064216a8433360745f69edddce19a606659163The Android Open Source Project lowQuality = TRUE; 96164064216a8433360745f69edddce19a606659163The Android Open Source Project } 96264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 96364064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_triggerRoamingCb, lowQuality = %d \n", 96464064216a8433360745f69edddce19a606659163The Android Open Source Project lowQuality)); 96564064216a8433360745f69edddce19a606659163The Android Open Source Project scanMngr_qualityChangeTrigger(pRoamingMngr->hScanMngr, lowQuality); 96664064216a8433360745f69edddce19a606659163The Android Open Source Project } 96764064216a8433360745f69edddce19a606659163The Android Open Source Project else 96864064216a8433360745f69edddce19a606659163The Android Open Source Project { 96964064216a8433360745f69edddce19a606659163The Android Open Source Project if (roamingTrigger > pRoamingMngr->roamingTrigger) 97064064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Save the highest priority roaming trigger */ 97164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTrigger = roamingTrigger; 97264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 97364064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_triggerRoamingCb, higher trigger = %d \n", 97464064216a8433360745f69edddce19a606659163The Android Open Source Project roamingTrigger)); 97564064216a8433360745f69edddce19a606659163The Android Open Source Project 97664064216a8433360745f69edddce19a606659163The Android Open Source Project } 97764064216a8433360745f69edddce19a606659163The Android Open Source Project 97864064216a8433360745f69edddce19a606659163The Android Open Source Project curTimestamp = os_timeStampMs(pRoamingMngr->hOs); 97964064216a8433360745f69edddce19a606659163The Android Open Source Project 98064064216a8433360745f69edddce19a606659163The Android Open Source Project /* If "No BSS" trigger received, disable count of low pass filter timer */ 98164064216a8433360745f69edddce19a606659163The Android Open Source Project if (roamingTrigger > ROAMING_TRIGGER_LOW_QUALITY_GROUP) 98264064216a8433360745f69edddce19a606659163The Android Open Source Project { 98364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->lowQualityTriggerTimestamp = 0; 98464064216a8433360745f69edddce19a606659163The Android Open Source Project } 98564064216a8433360745f69edddce19a606659163The Android Open Source Project 98664064216a8433360745f69edddce19a606659163The Android Open Source Project /* Do not invoke a new Roaming Trigger when a previous one is in process */ 98764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->maskRoamingEvents == FALSE) 98864064216a8433360745f69edddce19a606659163The Android Open Source Project { /* No Roaming trigger is in process */ 98964064216a8433360745f69edddce19a606659163The Android Open Source Project /* If the trigger is low quality check the low pass filter */ 99064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 99164064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_triggerRoamingCb, trigger = %d \n", 99264064216a8433360745f69edddce19a606659163The Android Open Source Project roamingTrigger)); 99364064216a8433360745f69edddce19a606659163The Android Open Source Project if (roamingTrigger <= ROAMING_TRIGGER_LOW_QUALITY_GROUP) 99464064216a8433360745f69edddce19a606659163The Android Open Source Project { 99564064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 deltaTs = curTimestamp-pRoamingMngr->lowQualityTriggerTimestamp; 99664064216a8433360745f69edddce19a606659163The Android Open Source Project 99764064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRoamingMngr->lowQualityTriggerTimestamp != 0) && 99864064216a8433360745f69edddce19a606659163The Android Open Source Project (deltaTs < pRoamingMngr->lowPassFilterRoamingAttemptInMsec)) 99964064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Ignore the low quality events. till the low pass time elapses */ 100064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 100164064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_triggerRoamingCb, trigger = %d Ignored!!,deltaTs=%d, curTimestamp = %d, lowQualityTriggerTimestamp = %d, lowPassFilterRoamingAttempt=%d\n", 100264064216a8433360745f69edddce19a606659163The Android Open Source Project roamingTrigger, deltaTs, curTimestamp, pRoamingMngr->lowQualityTriggerTimestamp, pRoamingMngr->lowPassFilterRoamingAttemptInMsec)); 100364064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 100464064216a8433360745f69edddce19a606659163The Android Open Source Project } 100564064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->lowQualityTriggerTimestamp = curTimestamp; 100664064216a8433360745f69edddce19a606659163The Android Open Source Project } 100764064216a8433360745f69edddce19a606659163The Android Open Source Project 100864064216a8433360745f69edddce19a606659163The Android Open Source Project /* Mask all future roaming events */ 100964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->maskRoamingEvents = TRUE; 101064064216a8433360745f69edddce19a606659163The Android Open Source Project 101164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 101264064216a8433360745f69edddce19a606659163The Android Open Source Project /* For debug */ 101364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTriggerTimestamp = curTimestamp; 101464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 101564064216a8433360745f69edddce19a606659163The Android Open Source Project return (roamingMngr_smEvent((UINT8*)&pRoamingMngr->currentState, ROAMING_EVENT_ROAM_TRIGGER, pRoamingMngr)); 101664064216a8433360745f69edddce19a606659163The Android Open Source Project } 101764064216a8433360745f69edddce19a606659163The Android Open Source Project else if (roamingTrigger > ROAMING_TRIGGER_FAST_CONNECT_GROUP) 101864064216a8433360745f69edddce19a606659163The Android Open Source Project { /* If the trigger is from the Full Connect group, then stop the connection. */ 101964064216a8433360745f69edddce19a606659163The Android Open Source Project return (roamingMngr_smEvent((UINT8*)&pRoamingMngr->currentState, ROAMING_EVENT_ROAM_TRIGGER, pRoamingMngr)); 102064064216a8433360745f69edddce19a606659163The Android Open Source Project 102164064216a8433360745f69edddce19a606659163The Android Open Source Project } 102264064216a8433360745f69edddce19a606659163The Android Open Source Project } 102364064216a8433360745f69edddce19a606659163The Android Open Source Project 102464064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 102564064216a8433360745f69edddce19a606659163The Android Open Source Project} 102664064216a8433360745f69edddce19a606659163The Android Open Source Project 102764064216a8433360745f69edddce19a606659163The Android Open Source Project/** 102864064216a8433360745f69edddce19a606659163The Android Open Source Project* 102964064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_connStatusCb 103064064216a8433360745f69edddce19a606659163The Android Open Source Project* 103164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 103264064216a8433360745f69edddce19a606659163The Android Open Source Project* 103364064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when the connection status event 103464064216a8433360745f69edddce19a606659163The Android Open Source Project * is triggered. 103564064216a8433360745f69edddce19a606659163The Android Open Source Project* 103664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 103764064216a8433360745f69edddce19a606659163The Android Open Source Project* 103864064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 103964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to the connection status. 104064064216a8433360745f69edddce19a606659163The Android Open Source Project* 104164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 104264064216a8433360745f69edddce19a606659163The Android Open Source Project* 104364064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 104464064216a8433360745f69edddce19a606659163The Android Open Source Project* 104564064216a8433360745f69edddce19a606659163The Android Open Source Project* 104664064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 104764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS roamingMngr_connStatusCb(TI_HANDLE hRoamingMngr, void *pData) 104864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 104964064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 105064064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_connStatus_e connStatus; 105164064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_smEvents roamingEvent; 105264064216a8433360745f69edddce19a606659163The Android Open Source Project 105364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 105464064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRoamingMngr == NULL) || (pData == NULL)) 105564064216a8433360745f69edddce19a606659163The Android Open Source Project { 105664064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 105764064216a8433360745f69edddce19a606659163The Android Open Source Project } 105864064216a8433360745f69edddce19a606659163The Android Open Source Project 105964064216a8433360745f69edddce19a606659163The Android Open Source Project connStatus = ((apConn_connStatus_t *)pData)->status; 106064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 106164064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_connStatusCb, conn status = %d\n", connStatus)); 106264064216a8433360745f69edddce19a606659163The Android Open Source Project 106364064216a8433360745f69edddce19a606659163The Android Open Source Project if (!pRoamingMngr->roamingMngrConfig.enableDisable) 106464064216a8433360745f69edddce19a606659163The Android Open Source Project { 106564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 106664064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_connStatusCb, connStatus=%d was received while Roaming is disabled. Stop Roaming \n", 106764064216a8433360745f69edddce19a606659163The Android Open Source Project connStatus)); 106864064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 106964064216a8433360745f69edddce19a606659163The Android Open Source Project } 107064064216a8433360745f69edddce19a606659163The Android Open Source Project 107164064216a8433360745f69edddce19a606659163The Android Open Source Project switch (connStatus) 107264064216a8433360745f69edddce19a606659163The Android Open Source Project { 107364064216a8433360745f69edddce19a606659163The Android Open Source Project case CONN_STATUS_CONNECTED: roamingEvent = ROAMING_EVENT_START; 107464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get station capabilities */ 107564064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_getStaCapabilities(pRoamingMngr->hAPConnection, &pRoamingMngr->staCapabilities); 107664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 107764064216a8433360745f69edddce19a606659163The Android Open Source Project case CONN_STATUS_NOT_CONNECTED: roamingEvent = ROAMING_EVENT_STOP; 107864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 107964064216a8433360745f69edddce19a606659163The Android Open Source Project case CONN_STATUS_HANDOVER_SUCCESS: roamingEvent = ROAMING_EVENT_ROAM_SUCCESS; 108064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 108164064216a8433360745f69edddce19a606659163The Android Open Source Project /* For debug */ 108264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingSuccesfulHandoverNum++; 108364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingHandoverCompletedTimestamp = os_timeStampMs(pRoamingMngr->hOs); 108464064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingAverageSuccHandoverDuration += os_timeStampMs(pRoamingMngr->hOs)-pRoamingMngr->roamingHandoverStartedTimestamp; 108564064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingAverageRoamingDuration += os_timeStampMs(pRoamingMngr->hOs)-pRoamingMngr->roamingTriggerTimestamp; 108664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingHandoverEvents[pRoamingMngr->roamingTrigger]++; 108764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 108864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 108964064216a8433360745f69edddce19a606659163The Android Open Source Project case CONN_STATUS_HANDOVER_FAILURE: roamingEvent = ROAMING_EVENT_REQ_HANDOVER; 109064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 109164064216a8433360745f69edddce19a606659163The Android Open Source Project /* For debug */ 109264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingFailedHandoverNum++; 109364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 109464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 109564064216a8433360745f69edddce19a606659163The Android Open Source Project default: 109664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 109764064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_connStatusCb, bad connStatus = %d\n", connStatus)); 109864064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 109964064216a8433360745f69edddce19a606659163The Android Open Source Project/* break; - unreachable */ 110064064216a8433360745f69edddce19a606659163The Android Open Source Project } 110164064216a8433360745f69edddce19a606659163The Android Open Source Project 110264064216a8433360745f69edddce19a606659163The Android Open Source Project return (roamingMngr_smEvent((UINT8*)&pRoamingMngr->currentState, roamingEvent, pRoamingMngr)); 110364064216a8433360745f69edddce19a606659163The Android Open Source Project 110464064216a8433360745f69edddce19a606659163The Android Open Source Project 110564064216a8433360745f69edddce19a606659163The Android Open Source Project} 110664064216a8433360745f69edddce19a606659163The Android Open Source Project 110764064216a8433360745f69edddce19a606659163The Android Open Source Project 110864064216a8433360745f69edddce19a606659163The Android Open Source Project 110964064216a8433360745f69edddce19a606659163The Android Open Source Project 111064064216a8433360745f69edddce19a606659163The Android Open Source Project 111164064216a8433360745f69edddce19a606659163The Android Open Source Project/** 111264064216a8433360745f69edddce19a606659163The Android Open Source Project* 111364064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_updateNeighborApListCb 111464064216a8433360745f69edddce19a606659163The Android Open Source Project* 111564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 111664064216a8433360745f69edddce19a606659163The Android Open Source Project* 111764064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when Neighbor AP list is received from the AP. 111864064216a8433360745f69edddce19a606659163The Android Open Source Project * Save the list, and set them in Scan Manager object. 111964064216a8433360745f69edddce19a606659163The Android Open Source Project* 112064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 112164064216a8433360745f69edddce19a606659163The Android Open Source Project* 112264064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 112364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to the list of Neighbor APs. 112464064216a8433360745f69edddce19a606659163The Android Open Source Project* 112564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 112664064216a8433360745f69edddce19a606659163The Android Open Source Project* 112764064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 112864064216a8433360745f69edddce19a606659163The Android Open Source Project* 112964064216a8433360745f69edddce19a606659163The Android Open Source Project* 113064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 113164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS roamingMngr_updateNeighborApListCb(TI_HANDLE hRoamingMngr, void *pData) 113264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 113364064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 113464064216a8433360745f69edddce19a606659163The Android Open Source Project neighborAPList_t *pNeighborAPList; 113564064216a8433360745f69edddce19a606659163The Android Open Source Project 113664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 113764064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRoamingMngr == NULL) || (pData == NULL)) 113864064216a8433360745f69edddce19a606659163The Android Open Source Project { 113964064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 114064064216a8433360745f69edddce19a606659163The Android Open Source Project } 114164064216a8433360745f69edddce19a606659163The Android Open Source Project 114264064216a8433360745f69edddce19a606659163The Android Open Source Project pNeighborAPList = (neighborAPList_t *)pData; 114364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pNeighborAPList->numOfEntries>0) 114464064216a8433360745f69edddce19a606659163The Android Open Source Project { 114564064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->neighborApsExist = TRUE; 114664064216a8433360745f69edddce19a606659163The Android Open Source Project } 114764064216a8433360745f69edddce19a606659163The Android Open Source Project else 114864064216a8433360745f69edddce19a606659163The Android Open Source Project { 114964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->neighborApsExist = FALSE; 115064064216a8433360745f69edddce19a606659163The Android Open Source Project } 115164064216a8433360745f69edddce19a606659163The Android Open Source Project 115264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->roamingMngrConfig.enableDisable) 115364064216a8433360745f69edddce19a606659163The Android Open Source Project { 115464064216a8433360745f69edddce19a606659163The Android Open Source Project scanMngr_setNeighborAPs (pRoamingMngr->hScanMngr, pNeighborAPList); 115564064216a8433360745f69edddce19a606659163The Android Open Source Project } 115664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 115764064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_updateNeighborApListCb, numberOfAps = %d, enableDisable=%d\n", 115864064216a8433360745f69edddce19a606659163The Android Open Source Project pNeighborAPList->numOfEntries, pRoamingMngr->roamingMngrConfig.enableDisable)); 115964064216a8433360745f69edddce19a606659163The Android Open Source Project 116064064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 116164064216a8433360745f69edddce19a606659163The Android Open Source Project} 116264064216a8433360745f69edddce19a606659163The Android Open Source Project 116364064216a8433360745f69edddce19a606659163The Android Open Source Project/** 116464064216a8433360745f69edddce19a606659163The Android Open Source Project* 116564064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_immediateScanComplete 116664064216a8433360745f69edddce19a606659163The Android Open Source Project* 116764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 116864064216a8433360745f69edddce19a606659163The Android Open Source Project* 116964064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when Scan Manager completed Immediate Scan for Roaming 117064064216a8433360745f69edddce19a606659163The Android Open Source Project * It performs the following: 117164064216a8433360745f69edddce19a606659163The Android Open Source Project * - Partial or Full scan 117264064216a8433360745f69edddce19a606659163The Android Open Source Project * - Re-try Partial or Full scan if the previous scan failed 117364064216a8433360745f69edddce19a606659163The Android Open Source Project * - Full scan if the previous partial scan didn't get any APS 117464064216a8433360745f69edddce19a606659163The Android Open Source Project * - Fail event if all the Scans failed 117564064216a8433360745f69edddce19a606659163The Android Open Source Project* 117664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 117764064216a8433360745f69edddce19a606659163The Android Open Source Project* 117864064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 117964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - scanCmpltStatus - the scan result, success or failure with different reasons 118064064216a8433360745f69edddce19a606659163The Android Open Source Project* 118164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 118264064216a8433360745f69edddce19a606659163The Android Open Source Project* 118364064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 118464064216a8433360745f69edddce19a606659163The Android Open Source Project* 118564064216a8433360745f69edddce19a606659163The Android Open Source Project* 118664064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 118764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS roamingMngr_immediateScanComplete(TI_HANDLE hRoamingMngr, scan_mngrResultStatus_e scanCmpltStatus) 118864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 118964064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 119064064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_smEvents roamingEvent; 119164064216a8433360745f69edddce19a606659163The Android Open Source Project 119264064216a8433360745f69edddce19a606659163The Android Open Source Project 119364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 119464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 119564064216a8433360745f69edddce19a606659163The Android Open Source Project { 119664064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 119764064216a8433360745f69edddce19a606659163The Android Open Source Project } 119864064216a8433360745f69edddce19a606659163The Android Open Source Project 119964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 120064064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_immediateScanComplete, scanCmpltStatus = %d\n", scanCmpltStatus)); 120164064216a8433360745f69edddce19a606659163The Android Open Source Project 120264064216a8433360745f69edddce19a606659163The Android Open Source Project if (scanCmpltStatus == SCAN_MRS_SCAN_COMPLETE_OK) 120364064216a8433360745f69edddce19a606659163The Android Open Source Project { /* The scan completed OK, get the updated list of APs */ 120464064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs = scanMngr_getBSSList(pRoamingMngr->hScanMngr); 120564064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRoamingMngr->pListOfAPs != NULL) && (pRoamingMngr->pListOfAPs->numOfEntries > 0)) 120664064216a8433360745f69edddce19a606659163The Android Open Source Project { /* APs were found, start selection */ 120764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->scanType = ROAMING_NO_SCAN; 120864064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEvent = ROAMING_EVENT_SELECT; 120964064216a8433360745f69edddce19a606659163The Android Open Source Project } 121064064216a8433360745f69edddce19a606659163The Android Open Source Project else 121164064216a8433360745f69edddce19a606659163The Android Open Source Project { /* There were no APs, if the scan was partial, retry full scan */ 121264064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRoamingMngr->scanType == ROAMING_PARTIAL_SCAN) || 121364064216a8433360745f69edddce19a606659163The Android Open Source Project (pRoamingMngr->scanType == ROAMING_PARTIAL_SCAN_RETRY)) 121464064216a8433360745f69edddce19a606659163The Android Open Source Project { 121564064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->scanType = ROAMING_FULL_SCAN; 121664064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEvent = ROAMING_EVENT_SCAN; 121764064216a8433360745f69edddce19a606659163The Android Open Source Project } 121864064216a8433360745f69edddce19a606659163The Android Open Source Project else 121964064216a8433360745f69edddce19a606659163The Android Open Source Project { /* No APs were found in FULL SCAN, report failure */ 122064064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEvent = ROAMING_EVENT_SELECT; 122164064216a8433360745f69edddce19a606659163The Android Open Source Project } 122264064216a8433360745f69edddce19a606659163The Android Open Source Project } 122364064216a8433360745f69edddce19a606659163The Android Open Source Project } 122464064216a8433360745f69edddce19a606659163The Android Open Source Project else 122564064216a8433360745f69edddce19a606659163The Android Open Source Project { /* The scan failed, retry scanning according to the current scan type */ 122664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs = scanMngr_getBSSList(pRoamingMngr->hScanMngr); 122764064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRoamingMngr->pListOfAPs != NULL) && (pRoamingMngr->pListOfAPs->numOfEntries > 0)) 122864064216a8433360745f69edddce19a606659163The Android Open Source Project { /* APs were found, start selection */ 122964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->scanType = ROAMING_NO_SCAN; 123064064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEvent = ROAMING_EVENT_SELECT; 123164064216a8433360745f69edddce19a606659163The Android Open Source Project } 123264064216a8433360745f69edddce19a606659163The Android Open Source Project else 123364064216a8433360745f69edddce19a606659163The Android Open Source Project { /* The scan failed, and there were no APs found. 123464064216a8433360745f69edddce19a606659163The Android Open Source Project Retry scanning according to the current scan type */ 123564064216a8433360745f69edddce19a606659163The Android Open Source Project switch (pRoamingMngr->scanType) 123664064216a8433360745f69edddce19a606659163The Android Open Source Project { 123764064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_PARTIAL_SCAN: 123864064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEvent = ROAMING_EVENT_SCAN; 123964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->scanType = ROAMING_PARTIAL_SCAN_RETRY; 124064064216a8433360745f69edddce19a606659163The Android Open Source Project break; 124164064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_PARTIAL_SCAN_RETRY: 124264064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEvent = ROAMING_EVENT_SELECT; 124364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->scanType = ROAMING_NO_SCAN; 124464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 124564064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_FULL_SCAN: 124664064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEvent = ROAMING_EVENT_SCAN; 124764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->scanType = ROAMING_FULL_SCAN_RETRY; 124864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 124964064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_FULL_SCAN_RETRY: 125064064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEvent = ROAMING_EVENT_SELECT; 125164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->scanType = ROAMING_NO_SCAN; 125264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 125364064216a8433360745f69edddce19a606659163The Android Open Source Project default: 125464064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEvent = ROAMING_EVENT_SELECT; 125564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 125664064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_immediateScanComplete, pRoamingMngr->scanType = %d\n", pRoamingMngr->scanType)); 125764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->scanType = ROAMING_NO_SCAN; 125864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 125964064216a8433360745f69edddce19a606659163The Android Open Source Project } 126064064216a8433360745f69edddce19a606659163The Android Open Source Project 126164064216a8433360745f69edddce19a606659163The Android Open Source Project } 126264064216a8433360745f69edddce19a606659163The Android Open Source Project } 126364064216a8433360745f69edddce19a606659163The Android Open Source Project 126464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 126564064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_immediateScanComplete, roamingEvent = %d, scanType=%d\n", 126664064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEvent, pRoamingMngr->scanType)); 126764064216a8433360745f69edddce19a606659163The Android Open Source Project 126864064216a8433360745f69edddce19a606659163The Android Open Source Project return (roamingMngr_smEvent((UINT8*)&pRoamingMngr->currentState, roamingEvent, pRoamingMngr)); 126964064216a8433360745f69edddce19a606659163The Android Open Source Project 127064064216a8433360745f69edddce19a606659163The Android Open Source Project 127164064216a8433360745f69edddce19a606659163The Android Open Source Project} 127264064216a8433360745f69edddce19a606659163The Android Open Source Project 127364064216a8433360745f69edddce19a606659163The Android Open Source Project 127464064216a8433360745f69edddce19a606659163The Android Open Source Project/* called by the Scan Manager when new BSSID was found */ 127564064216a8433360745f69edddce19a606659163The Android Open Source Project/** 127664064216a8433360745f69edddce19a606659163The Android Open Source Project* 127764064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_updateNewBssList 127864064216a8433360745f69edddce19a606659163The Android Open Source Project* 127964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 128064064216a8433360745f69edddce19a606659163The Android Open Source Project* 128164064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when Scan Manager finds new BSSIDs. 128264064216a8433360745f69edddce19a606659163The Android Open Source Project* These BSSIDs are sent to RSn to invoke Pre-Auth if allowed. 128364064216a8433360745f69edddce19a606659163The Android Open Source Project* 128464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 128564064216a8433360745f69edddce19a606659163The Android Open Source Project* 128664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 128764064216a8433360745f69edddce19a606659163The Android Open Source Project* I - bssList - list of BSSIDs 128864064216a8433360745f69edddce19a606659163The Android Open Source Project* 128964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 129064064216a8433360745f69edddce19a606659163The Android Open Source Project* 129164064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 129264064216a8433360745f69edddce19a606659163The Android Open Source Project* 129364064216a8433360745f69edddce19a606659163The Android Open Source Project* 129464064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 129564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS roamingMngr_updateNewBssList(TI_HANDLE hRoamingMngr, bssList_t *bssList) 129664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 129764064216a8433360745f69edddce19a606659163The Android Open Source Project 129864064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 129964064216a8433360745f69edddce19a606659163The Android Open Source Project 130064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 130164064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRoamingMngr == NULL) || (bssList == NULL)) 130264064216a8433360745f69edddce19a606659163The Android Open Source Project { 130364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 130464064216a8433360745f69edddce19a606659163The Android Open Source Project } 130564064216a8433360745f69edddce19a606659163The Android Open Source Project 130664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 130764064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_updateNewBssList, number of APs = %d\n", bssList->numOfEntries)); 130864064216a8433360745f69edddce19a606659163The Android Open Source Project 130964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->currentState != ROAMING_STATE_WAIT_4_TRIGGER) 131064064216a8433360745f69edddce19a606659163The Android Open Source Project { 131164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_WARNING(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 131264064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_updateNewBssList, ignore APs when not in WAIT_4_TRIGGER state \n")); 131364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 131464064216a8433360745f69edddce19a606659163The Android Open Source Project } 131564064216a8433360745f69edddce19a606659163The Android Open Source Project 131664064216a8433360745f69edddce19a606659163The Android Open Source Project 131764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->staCapabilities.authMode!=os802_11AuthModeWPA2) 131864064216a8433360745f69edddce19a606659163The Android Open Source Project { /* No Pre-Auth is required */ 131964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 132064064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_updateNewBssList, No Pre-Auth is required\n")); 132164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 132264064216a8433360745f69edddce19a606659163The Android Open Source Project } 132345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt apConn_preAuthenticate(pRoamingMngr->hAPConnection, bssList, bssList->numOfEntries); 132464064216a8433360745f69edddce19a606659163The Android Open Source Project 132564064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 132664064216a8433360745f69edddce19a606659163The Android Open Source Project 132764064216a8433360745f69edddce19a606659163The Android Open Source Project} 132864064216a8433360745f69edddce19a606659163The Android Open Source Project 132964064216a8433360745f69edddce19a606659163The Android Open Source Project 133064064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************** 133164064216a8433360745f69edddce19a606659163The Android Open Source Project** Private Function section ** 133264064216a8433360745f69edddce19a606659163The Android Open Source Project*****************************************************************************/ 133364064216a8433360745f69edddce19a606659163The Android Open Source Project 133464064216a8433360745f69edddce19a606659163The Android Open Source Project 133564064216a8433360745f69edddce19a606659163The Android Open Source Project 133664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 133764064216a8433360745f69edddce19a606659163The Android Open Source Project* 133864064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smEvent 133964064216a8433360745f69edddce19a606659163The Android Open Source Project* 134064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 134164064216a8433360745f69edddce19a606659163The Android Open Source Project* 134264064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager state machine transition function 134364064216a8433360745f69edddce19a606659163The Android Open Source Project* 134464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 134564064216a8433360745f69edddce19a606659163The Android Open Source Project* 134664064216a8433360745f69edddce19a606659163The Android Open Source Project* I/O - currentState - current state in the state machine\n 134764064216a8433360745f69edddce19a606659163The Android Open Source Project* I - event - specific event for the state machine\n 134864064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - Data for state machine action function\n 134964064216a8433360745f69edddce19a606659163The Android Open Source Project* 135064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 135164064216a8433360745f69edddce19a606659163The Android Open Source Project* 135264064216a8433360745f69edddce19a606659163The Android Open Source Project* OK on success, NOK otherwise. 135364064216a8433360745f69edddce19a606659163The Android Open Source Project* 135464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa 135564064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 135664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smEvent(UINT8 *currState, UINT8 event, void* data) 135764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 135864064216a8433360745f69edddce19a606659163The Android Open Source Project TI_STATUS status; 135964064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 nextState; 136064064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr = (roamingMngr_t*)data; 136164064216a8433360745f69edddce19a606659163The Android Open Source Project 136264064216a8433360745f69edddce19a606659163The Android Open Source Project 136364064216a8433360745f69edddce19a606659163The Android Open Source Project status = fsm_GetNextState(pRoamingMngr->pRoamingSm, *currState, event, &nextState); 136464064216a8433360745f69edddce19a606659163The Android Open Source Project if (status != OK) 136564064216a8433360745f69edddce19a606659163The Android Open Source Project { 136664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, ("roamingMngr_smEvent, fsm_GetNextState error\n")); 136764064216a8433360745f69edddce19a606659163The Android Open Source Project return(NOK); 136864064216a8433360745f69edddce19a606659163The Android Open Source Project } 136964064216a8433360745f69edddce19a606659163The Android Open Source Project 137064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 137164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_SM(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 137264064216a8433360745f69edddce19a606659163The Android Open Source Project ("<%s, %s> --> %s\n\n", 137364064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_stateDesc[*currState], 137464064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_eventDesc[event], 137564064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_stateDesc[nextState])); 137664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 137764064216a8433360745f69edddce19a606659163The Android Open Source Project 137864064216a8433360745f69edddce19a606659163The Android Open Source Project status = fsm_Event(pRoamingMngr->pRoamingSm, currState, event, (void *)pRoamingMngr); 137964064216a8433360745f69edddce19a606659163The Android Open Source Project 138064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 138164064216a8433360745f69edddce19a606659163The Android Open Source Project if (status != OK) 138264064216a8433360745f69edddce19a606659163The Android Open Source Project { 138364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, ("roamingMngr_smEvent fsm_Event error\n")); 138464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 138564064216a8433360745f69edddce19a606659163The Android Open Source Project ("<%s, %s> --> %s\n\n", 138664064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_stateDesc[*currState], 138764064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_eventDesc[event], 138864064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_stateDesc[nextState])); 138964064216a8433360745f69edddce19a606659163The Android Open Source Project } 139064064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 139164064216a8433360745f69edddce19a606659163The Android Open Source Project 139264064216a8433360745f69edddce19a606659163The Android Open Source Project return status; 139364064216a8433360745f69edddce19a606659163The Android Open Source Project 139464064216a8433360745f69edddce19a606659163The Android Open Source Project} 139564064216a8433360745f69edddce19a606659163The Android Open Source Project 139664064216a8433360745f69edddce19a606659163The Android Open Source Project/** 139764064216a8433360745f69edddce19a606659163The Android Open Source Project* 139864064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smRoamTrigger 139964064216a8433360745f69edddce19a606659163The Android Open Source Project* 140064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 140164064216a8433360745f69edddce19a606659163The Android Open Source Project* 140264064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when an Roaming event occurs: BSS LOSS, LOW Quality etc. 140364064216a8433360745f69edddce19a606659163The Android Open Source Project * Performs the following: 140464064216a8433360745f69edddce19a606659163The Android Open Source Project * - If Roaming is disabled, ignore. 140564064216a8433360745f69edddce19a606659163The Android Open Source Project * - Indicate Driver that Roaming process is starting 140664064216a8433360745f69edddce19a606659163The Android Open Source Project * - Get the BSS list from the Scan Manager. 140764064216a8433360745f69edddce19a606659163The Android Open Source Project * - If the list is not empty, start SELECTION 140864064216a8433360745f69edddce19a606659163The Android Open Source Project * - If the list is empty, start SCANNING. The type of scan is decided 140964064216a8433360745f69edddce19a606659163The Android Open Source Project * according to the Neigbor APs existence. 141064064216a8433360745f69edddce19a606659163The Android Open Source Project* 141164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 141264064216a8433360745f69edddce19a606659163The Android Open Source Project* 141364064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 141464064216a8433360745f69edddce19a606659163The Android Open Source Project* 141564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 141664064216a8433360745f69edddce19a606659163The Android Open Source Project* 141764064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 141864064216a8433360745f69edddce19a606659163The Android Open Source Project* 141964064216a8433360745f69edddce19a606659163The Android Open Source Project* 142064064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 142164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smRoamTrigger(TI_HANDLE hRoamingMngr) 142264064216a8433360745f69edddce19a606659163The Android Open Source Project{ 142364064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 142464064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_smEvents roamingEvent; 142564064216a8433360745f69edddce19a606659163The Android Open Source Project 142664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 142764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 142864064216a8433360745f69edddce19a606659163The Android Open Source Project { 142964064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 143064064216a8433360745f69edddce19a606659163The Android Open Source Project } 143164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 143264064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smRoamTrigger, enableDisable = %d\n",pRoamingMngr->roamingMngrConfig.enableDisable)); 143364064216a8433360745f69edddce19a606659163The Android Open Source Project 143464064216a8433360745f69edddce19a606659163The Android Open Source Project 143564064216a8433360745f69edddce19a606659163The Android Open Source Project if (!pRoamingMngr->roamingMngrConfig.enableDisable) 143664064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Ignore any other Roaming event when Roaming is disabled */ 143764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 143864064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smRoamTrigger, when Roaming is disabled\n")); 143964064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 144064064216a8433360745f69edddce19a606659163The Android Open Source Project } 144164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Indicate the driver that Roaming process is starting */ 144264064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_prepareToRoaming(pRoamingMngr->hAPConnection, pRoamingMngr->roamingTrigger); 144364064216a8433360745f69edddce19a606659163The Android Open Source Project 144464064216a8433360745f69edddce19a606659163The Android Open Source Project /* Get the current BSSIDs from ScanMngr */ 1445dccaf9af25422ede0e8468a6d7d850e5cb343519Dmitry Shmidt#if 0 144664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs = scanMngr_getBSSList(pRoamingMngr->hScanMngr); 1447dccaf9af25422ede0e8468a6d7d850e5cb343519Dmitry Shmidt#else 1448dccaf9af25422ede0e8468a6d7d850e5cb343519Dmitry Shmidt pRoamingMngr->pListOfAPs = NULL; /* force immediate scan */ 1449dccaf9af25422ede0e8468a6d7d850e5cb343519Dmitry Shmidt#endif 145064064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRoamingMngr->pListOfAPs != NULL) && (pRoamingMngr->pListOfAPs->numOfEntries > 0)) 145164064216a8433360745f69edddce19a606659163The Android Open Source Project { /* No need to SCAN, start SELECTING */ 145264064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEvent = ROAMING_EVENT_SELECT; 145364064216a8433360745f69edddce19a606659163The Android Open Source Project } 145464064216a8433360745f69edddce19a606659163The Android Open Source Project else 145564064216a8433360745f69edddce19a606659163The Android Open Source Project { /* check if list of APs exists in order to verify which scan to start */ 145664064216a8433360745f69edddce19a606659163The Android Open Source Project roamingEvent = ROAMING_EVENT_SCAN; 145764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->neighborApsExist) 145864064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Scan only Neighbor APs */ 145964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->scanType = ROAMING_PARTIAL_SCAN; 146064064216a8433360745f69edddce19a606659163The Android Open Source Project } 146164064216a8433360745f69edddce19a606659163The Android Open Source Project else 146264064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Scan all channels */ 146364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->scanType = ROAMING_FULL_SCAN; 146464064216a8433360745f69edddce19a606659163The Android Open Source Project } 146564064216a8433360745f69edddce19a606659163The Android Open Source Project } 146664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 146764064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smRoamTrigger, scanType = %d\n", pRoamingMngr->scanType)); 146864064216a8433360745f69edddce19a606659163The Android Open Source Project 146964064216a8433360745f69edddce19a606659163The Android Open Source Project return (roamingMngr_smEvent((UINT8*)&pRoamingMngr->currentState, roamingEvent, pRoamingMngr)); 147064064216a8433360745f69edddce19a606659163The Android Open Source Project} 147164064216a8433360745f69edddce19a606659163The Android Open Source Project 147264064216a8433360745f69edddce19a606659163The Android Open Source Project/** 147364064216a8433360745f69edddce19a606659163The Android Open Source Project* 147464064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smInvokeScan 147564064216a8433360745f69edddce19a606659163The Android Open Source Project* 147664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 147764064216a8433360745f69edddce19a606659163The Android Open Source Project* 147864064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when scan should be performed in order 147964064216a8433360745f69edddce19a606659163The Android Open Source Project * to select an AP to roam to. 148064064216a8433360745f69edddce19a606659163The Android Open Source Project * This can be the first scan, a second scan after partail scan, 148164064216a8433360745f69edddce19a606659163The Android Open Source Project * or scan after previous scan was failed. 148264064216a8433360745f69edddce19a606659163The Android Open Source Project * In any case, the scan can either be: 148364064216a8433360745f69edddce19a606659163The Android Open Source Project * partail, on list of channles or 148464064216a8433360745f69edddce19a606659163The Android Open Source Project * full on all channels. 148564064216a8433360745f69edddce19a606659163The Android Open Source Project* 148664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 148764064216a8433360745f69edddce19a606659163The Android Open Source Project* 148864064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 148964064216a8433360745f69edddce19a606659163The Android Open Source Project* 149064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 149164064216a8433360745f69edddce19a606659163The Android Open Source Project* 149264064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 149364064216a8433360745f69edddce19a606659163The Android Open Source Project* 149464064216a8433360745f69edddce19a606659163The Android Open Source Project* 149564064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 149664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smInvokeScan(TI_HANDLE hRoamingMngr) 149764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 149864064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 149964064216a8433360745f69edddce19a606659163The Android Open Source Project scan_mngrResultStatus_e scanResult; 150064064216a8433360745f69edddce19a606659163The Android Open Source Project 150164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 150264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 150364064216a8433360745f69edddce19a606659163The Android Open Source Project { 150464064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 150564064216a8433360745f69edddce19a606659163The Android Open Source Project } 150664064216a8433360745f69edddce19a606659163The Android Open Source Project 1507dccaf9af25422ede0e8468a6d7d850e5cb343519Dmitry Shmidt scanMngrClearBSSListEntry(pRoamingMngr->hScanMngr); 1508dccaf9af25422ede0e8468a6d7d850e5cb343519Dmitry Shmidt 150964064216a8433360745f69edddce19a606659163The Android Open Source Project /* check which scan should be performed: Partial on list of channels, or full scan */ 151064064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRoamingMngr->scanType == ROAMING_PARTIAL_SCAN) || 151164064216a8433360745f69edddce19a606659163The Android Open Source Project (pRoamingMngr->scanType == ROAMING_PARTIAL_SCAN_RETRY)) 151264064216a8433360745f69edddce19a606659163The Android Open Source Project { 151364064216a8433360745f69edddce19a606659163The Android Open Source Project scanResult = scanMngr_startImmediateScan (pRoamingMngr->hScanMngr, TRUE); 151464064216a8433360745f69edddce19a606659163The Android Open Source Project } 151564064216a8433360745f69edddce19a606659163The Android Open Source Project else 151664064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Scan all channels */ 151764064216a8433360745f69edddce19a606659163The Android Open Source Project scanResult = scanMngr_startImmediateScan (pRoamingMngr->hScanMngr, FALSE); 151864064216a8433360745f69edddce19a606659163The Android Open Source Project } 151964064216a8433360745f69edddce19a606659163The Android Open Source Project 152064064216a8433360745f69edddce19a606659163The Android Open Source Project if (scanResult != SCAN_MRS_SCAN_RUNNING) 152164064216a8433360745f69edddce19a606659163The Android Open Source Project { /* the scan failed, immitate scan complete event */ 152264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 152364064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smInvokeScan, scanResult = %d\n", scanResult)); 152464064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_immediateScanComplete(pRoamingMngr, scanResult); 152564064216a8433360745f69edddce19a606659163The Android Open Source Project } 152664064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 152764064216a8433360745f69edddce19a606659163The Android Open Source Project 152864064216a8433360745f69edddce19a606659163The Android Open Source Project} 152964064216a8433360745f69edddce19a606659163The Android Open Source Project 153064064216a8433360745f69edddce19a606659163The Android Open Source Project/** 153164064216a8433360745f69edddce19a606659163The Android Open Source Project* 153264064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smSelection 153364064216a8433360745f69edddce19a606659163The Android Open Source Project* 153464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 153564064216a8433360745f69edddce19a606659163The Android Open Source Project* 153664064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when selection should be performed. 153764064216a8433360745f69edddce19a606659163The Android Open Source Project* It perform the following: 153864064216a8433360745f69edddce19a606659163The Android Open Source Project * Prepare the candidate APs to roam according to: 153964064216a8433360745f69edddce19a606659163The Android Open Source Project * - Priority APs 154064064216a8433360745f69edddce19a606659163The Android Open Source Project * - Pre-Authenticated APs 154164064216a8433360745f69edddce19a606659163The Android Open Source Project * If the candidate AP list is empty, only the current AP can be re-selected 154264064216a8433360745f69edddce19a606659163The Android Open Source Project * Select one AP and trigger REQ_HANDOVER event. 154364064216a8433360745f69edddce19a606659163The Android Open Source Project * 154464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 154564064216a8433360745f69edddce19a606659163The Android Open Source Project* 154664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 154764064216a8433360745f69edddce19a606659163The Android Open Source Project* 154864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 154964064216a8433360745f69edddce19a606659163The Android Open Source Project* 155064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 155164064216a8433360745f69edddce19a606659163The Android Open Source Project* 155264064216a8433360745f69edddce19a606659163The Android Open Source Project* 155364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 155464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smSelection(TI_HANDLE hRoamingMngr) 155564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 155664064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 155764064216a8433360745f69edddce19a606659163The Android Open Source Project UINT32 index; 155864064216a8433360745f69edddce19a606659163The Android Open Source Project 155964064216a8433360745f69edddce19a606659163The Android Open Source Project 156064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 156164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 156264064216a8433360745f69edddce19a606659163The Android Open Source Project { 156364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 156464064216a8433360745f69edddce19a606659163The Android Open Source Project } 156564064216a8433360745f69edddce19a606659163The Android Open Source Project 156664064216a8433360745f69edddce19a606659163The Android Open Source Project 156764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfNeighborBSS = 0; 156864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfPreAuthBSS = 0; 156964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfRegularBSS = 0; 157064064216a8433360745f69edddce19a606659163The Android Open Source Project 157164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->candidateApIndex = INVALID_CANDIDATE_INDEX; 157264064216a8433360745f69edddce19a606659163The Android Open Source Project 157364064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRoamingMngr->pListOfAPs == NULL) || 157464064216a8433360745f69edddce19a606659163The Android Open Source Project (pRoamingMngr->pListOfAPs->numOfEntries == 0)) 157564064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Error, there cannot be selection */ 157664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 157764064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smSelection pListOfAPs is empty \n")); 157864064216a8433360745f69edddce19a606659163The Android Open Source Project return (roamingMngr_smEvent((UINT8*)&pRoamingMngr->currentState, ROAMING_EVENT_REQ_HANDOVER, pRoamingMngr)); 157964064216a8433360745f69edddce19a606659163The Android Open Source Project } 158064064216a8433360745f69edddce19a606659163The Android Open Source Project 158164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Build the candidate AP list */ 158264064216a8433360745f69edddce19a606659163The Android Open Source Project for (index=0; index<pRoamingMngr->pListOfAPs->numOfEntries; index++ ) 158364064216a8433360745f69edddce19a606659163The Android Open Source Project { 158464064216a8433360745f69edddce19a606659163The Android Open Source Project if ( (pRoamingMngr->roamingTrigger <= ROAMING_TRIGGER_LOW_QUALITY_GROUP) && 158564064216a8433360745f69edddce19a606659163The Android Open Source Project (pRoamingMngr->pListOfAPs->BSSList[index].RSSI < pRoamingMngr->roamingMngrConfig.apQualityThreshold)) 158664064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Do not insert APs with low quality to the selection table, 158764064216a8433360745f69edddce19a606659163The Android Open Source Project if the Roaming Trigger was low Quality */ 158864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 158964064216a8433360745f69edddce19a606659163The Android Open Source Project ("candidate AP %x-%x-%x-%x-%x-%x with RSSI too low =%d, Quality=%d \n", 159064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].BSSID.addr[0], 159164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].BSSID.addr[1], 159264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].BSSID.addr[2], 159364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].BSSID.addr[3], 159464064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].BSSID.addr[4], 159564064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].BSSID.addr[5], 159664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].RSSI, 159764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingMngrConfig.apQualityThreshold)); 159864064216a8433360745f69edddce19a606659163The Android Open Source Project 159964064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 160064064216a8433360745f69edddce19a606659163The Android Open Source Project } 160164064216a8433360745f69edddce19a606659163The Android Open Source Project 160264064216a8433360745f69edddce19a606659163The Android Open Source Project if (apConn_isSiteBanned(pRoamingMngr->hAPConnection, &pRoamingMngr->pListOfAPs->BSSList[index].BSSID) == TRUE) 160364064216a8433360745f69edddce19a606659163The Android Open Source Project { 160464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 160564064216a8433360745f69edddce19a606659163The Android Open Source Project ("%s: Candidate AP %02X-%02X-%02X-%02X-%02X-%02X is banned!\n", __FUNCTION__, 160664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].BSSID.addr[0], 160764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].BSSID.addr[1], 160864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].BSSID.addr[2], 160964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].BSSID.addr[3], 161064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].BSSID.addr[4], 161164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->pListOfAPs->BSSList[index].BSSID.addr[5])); 161264064216a8433360745f69edddce19a606659163The Android Open Source Project continue; 161364064216a8433360745f69edddce19a606659163The Android Open Source Project } 161464064216a8433360745f69edddce19a606659163The Android Open Source Project 161564064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->pListOfAPs->BSSList[index].bNeighborAP) 161664064216a8433360745f69edddce19a606659163The Android Open Source Project { /* The AP is a neighbor AP, insert its index to the neighbor APs list */ 161764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.neighborBSSList[pRoamingMngr->listOfCandidateAps.numOfNeighborBSS] = index; 161864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfNeighborBSS++; 161964064216a8433360745f69edddce19a606659163The Android Open Source Project } 162064064216a8433360745f69edddce19a606659163The Android Open Source Project else if (apConn_getPreAuthAPStatus(pRoamingMngr->hAPConnection, 162164064216a8433360745f69edddce19a606659163The Android Open Source Project &pRoamingMngr->pListOfAPs->BSSList[index].BSSID)) 162264064216a8433360745f69edddce19a606659163The Android Open Source Project { /* This AP is a pre-auth AP */ 162364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.preAuthBSSList[pRoamingMngr->listOfCandidateAps.numOfPreAuthBSS] = index; 162464064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfPreAuthBSS++; 162564064216a8433360745f69edddce19a606659163The Android Open Source Project } 162664064216a8433360745f69edddce19a606659163The Android Open Source Project else 162764064216a8433360745f69edddce19a606659163The Android Open Source Project { /* This AP is not Neighbor nor Pre-Auth */ 162864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.regularBSSList[pRoamingMngr->listOfCandidateAps.numOfRegularBSS] = index; 162964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfRegularBSS++; 163064064216a8433360745f69edddce19a606659163The Android Open Source Project } 163164064216a8433360745f69edddce19a606659163The Android Open Source Project } 163264064216a8433360745f69edddce19a606659163The Android Open Source Project 163364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 163464064216a8433360745f69edddce19a606659163The Android Open Source Project { /* for debug */ 163564064216a8433360745f69edddce19a606659163The Android Open Source Project paramInfo_t param; 163664064216a8433360745f69edddce19a606659163The Android Open Source Project 163764064216a8433360745f69edddce19a606659163The Android Open Source Project param.paramType = ROAMING_MNGR_PRINT_CANDIDATE_TABLE; 163864064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_getParam(pRoamingMngr, ¶m); 163964064216a8433360745f69edddce19a606659163The Android Open Source Project 164064064216a8433360745f69edddce19a606659163The Android Open Source Project } 164164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 164264064216a8433360745f69edddce19a606659163The Android Open Source Project return (roamingMngr_smEvent((UINT8*)&pRoamingMngr->currentState, ROAMING_EVENT_REQ_HANDOVER, pRoamingMngr)); 164364064216a8433360745f69edddce19a606659163The Android Open Source Project 164464064216a8433360745f69edddce19a606659163The Android Open Source Project} 164564064216a8433360745f69edddce19a606659163The Android Open Source Project 164664064216a8433360745f69edddce19a606659163The Android Open Source Project 164764064216a8433360745f69edddce19a606659163The Android Open Source Project 164864064216a8433360745f69edddce19a606659163The Android Open Source Project/** 164964064216a8433360745f69edddce19a606659163The Android Open Source Project* 165064064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smHandover 165164064216a8433360745f69edddce19a606659163The Android Open Source Project* 165264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 165364064216a8433360745f69edddce19a606659163The Android Open Source Project* 165464064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when handover should be invoked. 165564064216a8433360745f69edddce19a606659163The Android Open Source Project* Go over the candidate APs and start handover to each of them. 165664064216a8433360745f69edddce19a606659163The Android Open Source Project * If there's no candidate APs, disconnect. 165764064216a8433360745f69edddce19a606659163The Android Open Source Project * Handover to the current AP is allowed only if the trigger is 165864064216a8433360745f69edddce19a606659163The Android Open Source Project * low quality. 165964064216a8433360745f69edddce19a606659163The Android Open Source Project * 166064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 166164064216a8433360745f69edddce19a606659163The Android Open Source Project* 166264064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 166364064216a8433360745f69edddce19a606659163The Android Open Source Project* 166464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 166564064216a8433360745f69edddce19a606659163The Android Open Source Project* 166664064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 166764064216a8433360745f69edddce19a606659163The Android Open Source Project* 166864064216a8433360745f69edddce19a606659163The Android Open Source Project* 166964064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 167064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smHandover(TI_HANDLE hRoamingMngr) 167164064216a8433360745f69edddce19a606659163The Android Open Source Project{ 167264064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 167364064216a8433360745f69edddce19a606659163The Android Open Source Project bssEntry_t *pApToConnect; 167464064216a8433360745f69edddce19a606659163The Android Open Source Project apConn_connRequest_t requestToApConn; 167564064216a8433360745f69edddce19a606659163The Android Open Source Project 167664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 167764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 167864064216a8433360745f69edddce19a606659163The Android Open Source Project { 167964064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 168064064216a8433360745f69edddce19a606659163The Android Open Source Project } 168164064216a8433360745f69edddce19a606659163The Android Open Source Project 168264064216a8433360745f69edddce19a606659163The Android Open Source Project 168364064216a8433360745f69edddce19a606659163The Android Open Source Project if ((pRoamingMngr->handoverWasPerformed) && (pRoamingMngr->candidateApIndex == CURRENT_AP_INDEX)) 168464064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Handover with the current AP already failed, Disconnect */ 168564064216a8433360745f69edddce19a606659163The Android Open Source Project return (roamingMngr_smEvent((UINT8*)&pRoamingMngr->currentState, ROAMING_EVENT_FAILURE, pRoamingMngr)); 168664064216a8433360745f69edddce19a606659163The Android Open Source Project } 168764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->listOfCandidateAps.numOfNeighborBSS > 0) 168864064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Neighbor APs are the highest priority to Roam */ 168964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->candidateApIndex = 169064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.neighborBSSList[pRoamingMngr->listOfCandidateAps.numOfNeighborBSS-1]; 169164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfNeighborBSS--; 169264064216a8433360745f69edddce19a606659163The Android Open Source Project } 169364064216a8433360745f69edddce19a606659163The Android Open Source Project else if (pRoamingMngr->listOfCandidateAps.numOfPreAuthBSS > 0) 169464064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Pre-Auth APs are the second priority to Roam */ 169564064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->candidateApIndex = 169664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.preAuthBSSList[pRoamingMngr->listOfCandidateAps.numOfPreAuthBSS-1]; 169764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfPreAuthBSS--; 169864064216a8433360745f69edddce19a606659163The Android Open Source Project } 169964064216a8433360745f69edddce19a606659163The Android Open Source Project else if (pRoamingMngr->listOfCandidateAps.numOfRegularBSS > 0) 170064064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Regular APs are APs that are not pre-authenticated and not Neighbor */ 170164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->candidateApIndex = 170264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.regularBSSList[pRoamingMngr->listOfCandidateAps.numOfRegularBSS-1]; 170364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->listOfCandidateAps.numOfRegularBSS--; 170464064216a8433360745f69edddce19a606659163The Android Open Source Project } 170564064216a8433360745f69edddce19a606659163The Android Open Source Project else 170664064216a8433360745f69edddce19a606659163The Android Open Source Project { /* No Candidate APs */ 170764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->candidateApIndex = INVALID_CANDIDATE_INDEX; 170864064216a8433360745f69edddce19a606659163The Android Open Source Project } 170964064216a8433360745f69edddce19a606659163The Android Open Source Project 171064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 171164064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smHandover, candidateApIndex=%d \n", pRoamingMngr->candidateApIndex)); 171264064216a8433360745f69edddce19a606659163The Android Open Source Project 171364064216a8433360745f69edddce19a606659163The Android Open Source Project 171464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->candidateApIndex == INVALID_CANDIDATE_INDEX) 171564064216a8433360745f69edddce19a606659163The Android Open Source Project { /* No cnadidate to Roam to, only the current AP is candidate */ 171664064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->roamingTrigger <= ROAMING_TRIGGER_LOW_QUALITY_GROUP) 171764064216a8433360745f69edddce19a606659163The Android Open Source Project { /* If the trigger to Roam is low quality, and there are no candidate APs 171864064216a8433360745f69edddce19a606659163The Android Open Source Project to roam to, retain connected to the current AP */ 171964064216a8433360745f69edddce19a606659163The Android Open Source Project requestToApConn.requestType = (pRoamingMngr->handoverWasPerformed) ? AP_CONNECT_RECONNECT_CURR_AP : AP_CONNECT_RETAIN_CURR_AP; 172064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->candidateApIndex = CURRENT_AP_INDEX; 172164064216a8433360745f69edddce19a606659163The Android Open Source Project } 172264064216a8433360745f69edddce19a606659163The Android Open Source Project else 172364064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Disconnect the BSS, there are no more APs to roam to */ 172464064216a8433360745f69edddce19a606659163The Android Open Source Project return (roamingMngr_smEvent((UINT8*)&pRoamingMngr->currentState, ROAMING_EVENT_FAILURE, pRoamingMngr)); 172564064216a8433360745f69edddce19a606659163The Android Open Source Project } 172664064216a8433360745f69edddce19a606659163The Android Open Source Project } 172764064216a8433360745f69edddce19a606659163The Android Open Source Project else 172864064216a8433360745f69edddce19a606659163The Android Open Source Project { /* There is a valid candidate AP */ 172964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->roamingTrigger > ROAMING_TRIGGER_FAST_CONNECT_GROUP) 173064064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Full re-connection should be perfromed */ 173164064216a8433360745f69edddce19a606659163The Android Open Source Project requestToApConn.requestType = AP_CONNECT_FULL_TO_AP; 173264064216a8433360745f69edddce19a606659163The Android Open Source Project } 173364064216a8433360745f69edddce19a606659163The Android Open Source Project else 173464064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Fast re-connection should be perfromed */ 173564064216a8433360745f69edddce19a606659163The Android Open Source Project requestToApConn.requestType = AP_CONNECT_FAST_TO_AP; 173664064216a8433360745f69edddce19a606659163The Android Open Source Project } 173764064216a8433360745f69edddce19a606659163The Android Open Source Project } 173864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 173964064216a8433360745f69edddce19a606659163The Android Open Source Project /* For debug */ 174064064216a8433360745f69edddce19a606659163The Android Open Source Project if (!pRoamingMngr->handoverWasPerformed) 174164064216a8433360745f69edddce19a606659163The Android Open Source Project { /* Take the time before the first handover started */ 174264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingHandoverStartedTimestamp = os_timeStampMs(pRoamingMngr->hOs); 174364064216a8433360745f69edddce19a606659163The Android Open Source Project } 174464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 174564064216a8433360745f69edddce19a606659163The Android Open Source Project 174664064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->candidateApIndex == CURRENT_AP_INDEX) 174764064216a8433360745f69edddce19a606659163The Android Open Source Project { /* get the current AP */ 174864064216a8433360745f69edddce19a606659163The Android Open Source Project pApToConnect = apConn_getBSSParams(pRoamingMngr->hAPConnection); 174964064216a8433360745f69edddce19a606659163The Android Open Source Project } 175064064216a8433360745f69edddce19a606659163The Android Open Source Project else 175164064216a8433360745f69edddce19a606659163The Android Open Source Project { /* get the candidate AP */ 175264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->handoverWasPerformed = TRUE; 175364064216a8433360745f69edddce19a606659163The Android Open Source Project pApToConnect = &pRoamingMngr->pListOfAPs->BSSList[pRoamingMngr->candidateApIndex]; 175464064216a8433360745f69edddce19a606659163The Android Open Source Project } 175564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 175664064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smHandover, candidateApIndex=%d, requestType = %d, channel=%d \n", 175764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->candidateApIndex, requestToApConn.requestType, pApToConnect->channel)); 175864064216a8433360745f69edddce19a606659163The Android Open Source Project 175964064216a8433360745f69edddce19a606659163The Android Open Source Project requestToApConn.dataBufLength = 0; 176064064216a8433360745f69edddce19a606659163The Android Open Source Project return (apConn_connectToAP(pRoamingMngr->hAPConnection, pApToConnect, &requestToApConn, TRUE)); 176164064216a8433360745f69edddce19a606659163The Android Open Source Project} 176264064216a8433360745f69edddce19a606659163The Android Open Source Project 176364064216a8433360745f69edddce19a606659163The Android Open Source Project 176464064216a8433360745f69edddce19a606659163The Android Open Source Project 176564064216a8433360745f69edddce19a606659163The Android Open Source Project/** 176664064216a8433360745f69edddce19a606659163The Android Open Source Project* 176764064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smDisconnectWhileConnecting 176864064216a8433360745f69edddce19a606659163The Android Open Source Project* 176964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 177064064216a8433360745f69edddce19a606659163The Android Open Source Project* 177164064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when the Station is in the process of connection, 177264064216a8433360745f69edddce19a606659163The Android Open Source Project * and the AP disconnects the station. 177364064216a8433360745f69edddce19a606659163The Android Open Source Project * 177464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 177564064216a8433360745f69edddce19a606659163The Android Open Source Project* 177664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 177764064216a8433360745f69edddce19a606659163The Android Open Source Project* 177864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 177964064216a8433360745f69edddce19a606659163The Android Open Source Project* 178064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 178164064216a8433360745f69edddce19a606659163The Android Open Source Project* 178264064216a8433360745f69edddce19a606659163The Android Open Source Project* 178364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 178464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smDisconnectWhileConnecting(TI_HANDLE hRoamingMngr) 178564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 178664064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 178764064216a8433360745f69edddce19a606659163The Android Open Source Project 178864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 178964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 179064064216a8433360745f69edddce19a606659163The Android Open Source Project { 179164064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 179264064216a8433360745f69edddce19a606659163The Android Open Source Project } 179364064216a8433360745f69edddce19a606659163The Android Open Source Project 179464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 179564064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smDisconnectWhileConnecting, candidateApIndex=%d \n", pRoamingMngr->candidateApIndex)); 179664064216a8433360745f69edddce19a606659163The Android Open Source Project 179764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->roamingTrigger > ROAMING_TRIGGER_FAST_CONNECT_GROUP) 179864064216a8433360745f69edddce19a606659163The Android Open Source Project { /* If the trigger is from the Full Connect group, then stop the connection. */ 179964064216a8433360745f69edddce19a606659163The Android Open Source Project /* clean intenal variables */ 180064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->maskRoamingEvents = TRUE; 180164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTrigger = ROAMING_TRIGGER_NONE; 180264064216a8433360745f69edddce19a606659163The Android Open Source Project 180364064216a8433360745f69edddce19a606659163The Android Open Source Project scanMngr_stopContScan(pRoamingMngr->hScanMngr); 180464064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 180564064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingFailedHandoverNum++; 180664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 180764064216a8433360745f69edddce19a606659163The Android Open Source Project return (apConn_disconnect(pRoamingMngr->hAPConnection)); 180864064216a8433360745f69edddce19a606659163The Android Open Source Project 180964064216a8433360745f69edddce19a606659163The Android Open Source Project } 181064064216a8433360745f69edddce19a606659163The Android Open Source Project 181164064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 181264064216a8433360745f69edddce19a606659163The Android Open Source Project 181364064216a8433360745f69edddce19a606659163The Android Open Source Project} 181464064216a8433360745f69edddce19a606659163The Android Open Source Project 181564064216a8433360745f69edddce19a606659163The Android Open Source Project/** 181664064216a8433360745f69edddce19a606659163The Android Open Source Project* 181764064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smSuccHandover 181864064216a8433360745f69edddce19a606659163The Android Open Source Project* 181964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 182064064216a8433360745f69edddce19a606659163The Android Open Source Project* 182164064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when handover succeeded. 182264064216a8433360745f69edddce19a606659163The Android Open Source Project * Inform Scan Manager about the new AP. 182364064216a8433360745f69edddce19a606659163The Android Open Source Project * UnMask Roaming Triggers. 182464064216a8433360745f69edddce19a606659163The Android Open Source Project * 182564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 182664064216a8433360745f69edddce19a606659163The Android Open Source Project* 182764064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 182864064216a8433360745f69edddce19a606659163The Android Open Source Project* 182964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 183064064216a8433360745f69edddce19a606659163The Android Open Source Project* 183164064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 183264064216a8433360745f69edddce19a606659163The Android Open Source Project* 183364064216a8433360745f69edddce19a606659163The Android Open Source Project* 183464064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 183564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smSuccHandover(TI_HANDLE hRoamingMngr) 183664064216a8433360745f69edddce19a606659163The Android Open Source Project{ 183764064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 183864064216a8433360745f69edddce19a606659163The Android Open Source Project bssEntry_t *pNewConnectedAp; 183964064216a8433360745f69edddce19a606659163The Android Open Source Project 184064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 184164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 184264064216a8433360745f69edddce19a606659163The Android Open Source Project { 184364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 184464064216a8433360745f69edddce19a606659163The Android Open Source Project } 184564064216a8433360745f69edddce19a606659163The Android Open Source Project 184664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 184764064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smSuccHandover, candidateApIndex=%d \n", pRoamingMngr->candidateApIndex)); 184864064216a8433360745f69edddce19a606659163The Android Open Source Project 184964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->handoverWasPerformed && 185064064216a8433360745f69edddce19a606659163The Android Open Source Project (pRoamingMngr->pListOfAPs != NULL) && 185164064216a8433360745f69edddce19a606659163The Android Open Source Project (pRoamingMngr->pListOfAPs->numOfEntries>0)) 185264064216a8433360745f69edddce19a606659163The Android Open Source Project { 185364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->candidateApIndex == CURRENT_AP_INDEX) 185464064216a8433360745f69edddce19a606659163The Android Open Source Project { /* get the current AP */ 185564064216a8433360745f69edddce19a606659163The Android Open Source Project pNewConnectedAp = apConn_getBSSParams(pRoamingMngr->hAPConnection); 185664064216a8433360745f69edddce19a606659163The Android Open Source Project } 185764064216a8433360745f69edddce19a606659163The Android Open Source Project else 185864064216a8433360745f69edddce19a606659163The Android Open Source Project { /* get the candidate AP */ 185964064216a8433360745f69edddce19a606659163The Android Open Source Project pNewConnectedAp = &pRoamingMngr->pListOfAPs->BSSList[pRoamingMngr->candidateApIndex]; 186064064216a8433360745f69edddce19a606659163The Android Open Source Project } 186164064216a8433360745f69edddce19a606659163The Android Open Source Project 186264064216a8433360745f69edddce19a606659163The Android Open Source Project scanMngr_handoverDone(pRoamingMngr->hScanMngr, 186364064216a8433360745f69edddce19a606659163The Android Open Source Project &pNewConnectedAp->BSSID, 186464064216a8433360745f69edddce19a606659163The Android Open Source Project pNewConnectedAp->band); 186564064216a8433360745f69edddce19a606659163The Android Open Source Project } 186664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->maskRoamingEvents = FALSE; 186764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->candidateApIndex = INVALID_CANDIDATE_INDEX; 186864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->handoverWasPerformed = FALSE; 186964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTrigger = ROAMING_TRIGGER_NONE; 187064064216a8433360745f69edddce19a606659163The Android Open Source Project 187164064216a8433360745f69edddce19a606659163The Android Open Source Project /* Start pre-authentication in order to set PMKID 187264064216a8433360745f69edddce19a606659163The Android Open Source Project for the current AP */ 187364064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->staCapabilities.authMode==os802_11AuthModeWPA2) 187464064216a8433360745f69edddce19a606659163The Android Open Source Project { /* No Pre-Auth is required */ 187545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt UINT8 dummy; 187664064216a8433360745f69edddce19a606659163The Android Open Source Project 187764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 187864064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smStartIdle, Pre-Auth to cur AP\n")); 187945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt apConn_preAuthenticate(pRoamingMngr->hAPConnection, (bssList_t *)&dummy, 0); 188064064216a8433360745f69edddce19a606659163The Android Open Source Project } 188164064216a8433360745f69edddce19a606659163The Android Open Source Project 188264064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 188364064216a8433360745f69edddce19a606659163The Android Open Source Project} 188464064216a8433360745f69edddce19a606659163The Android Open Source Project 188564064216a8433360745f69edddce19a606659163The Android Open Source Project 188664064216a8433360745f69edddce19a606659163The Android Open Source Project 188764064216a8433360745f69edddce19a606659163The Android Open Source Project 188864064216a8433360745f69edddce19a606659163The Android Open Source Project/** 188964064216a8433360745f69edddce19a606659163The Android Open Source Project* 189064064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smFailHandover 189164064216a8433360745f69edddce19a606659163The Android Open Source Project* 189264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 189364064216a8433360745f69edddce19a606659163The Android Open Source Project* 189464064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when handover failed and there are no more 189564064216a8433360745f69edddce19a606659163The Android Open Source Project * APs to roam to. Disconnect the BSS and retrun to IDLE state. 189664064216a8433360745f69edddce19a606659163The Android Open Source Project* 189764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 189864064216a8433360745f69edddce19a606659163The Android Open Source Project* 189964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 190064064216a8433360745f69edddce19a606659163The Android Open Source Project* 190164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 190264064216a8433360745f69edddce19a606659163The Android Open Source Project* 190364064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 190464064216a8433360745f69edddce19a606659163The Android Open Source Project* 190564064216a8433360745f69edddce19a606659163The Android Open Source Project* 190664064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 190764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smFailHandover(TI_HANDLE hRoamingMngr) 190864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 190964064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 191064064216a8433360745f69edddce19a606659163The Android Open Source Project 191164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 191264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 191364064216a8433360745f69edddce19a606659163The Android Open Source Project { 191464064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 191564064216a8433360745f69edddce19a606659163The Android Open Source Project } 191664064216a8433360745f69edddce19a606659163The Android Open Source Project 191764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 191864064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smFailHandover \n")); 191964064216a8433360745f69edddce19a606659163The Android Open Source Project 192064064216a8433360745f69edddce19a606659163The Android Open Source Project /* clean intenal variables */ 192164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->maskRoamingEvents = TRUE; 192264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTrigger = ROAMING_TRIGGER_NONE; 192364064216a8433360745f69edddce19a606659163The Android Open Source Project 192464064216a8433360745f69edddce19a606659163The Android Open Source Project scanMngr_stopContScan(pRoamingMngr->hScanMngr); 192564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 192664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingFailedHandoverNum++; 192764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 192864064216a8433360745f69edddce19a606659163The Android Open Source Project return (apConn_disconnect(pRoamingMngr->hAPConnection)); 192964064216a8433360745f69edddce19a606659163The Android Open Source Project} 193064064216a8433360745f69edddce19a606659163The Android Open Source Project 193164064216a8433360745f69edddce19a606659163The Android Open Source Project 193264064216a8433360745f69edddce19a606659163The Android Open Source Project 193364064216a8433360745f69edddce19a606659163The Android Open Source Project 193464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 193564064216a8433360745f69edddce19a606659163The Android Open Source Project* 193664064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smScanFailure 193764064216a8433360745f69edddce19a606659163The Android Open Source Project* 193864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 193964064216a8433360745f69edddce19a606659163The Android Open Source Project* 194064064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when all scan attempts failed. 194164064216a8433360745f69edddce19a606659163The Android Open Source Project * Send Disconnect event and return to IDLE state. 194264064216a8433360745f69edddce19a606659163The Android Open Source Project * 194364064216a8433360745f69edddce19a606659163The Android Open Source Project* 194464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 194564064216a8433360745f69edddce19a606659163The Android Open Source Project* 194664064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 194764064216a8433360745f69edddce19a606659163The Android Open Source Project* 194864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 194964064216a8433360745f69edddce19a606659163The Android Open Source Project* 195064064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 195164064216a8433360745f69edddce19a606659163The Android Open Source Project* 195264064216a8433360745f69edddce19a606659163The Android Open Source Project* 195364064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 195464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smScanFailure(TI_HANDLE hRoamingMngr) 195564064216a8433360745f69edddce19a606659163The Android Open Source Project{ 195664064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 195764064216a8433360745f69edddce19a606659163The Android Open Source Project 195864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 195964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 196064064216a8433360745f69edddce19a606659163The Android Open Source Project { 196164064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 196264064216a8433360745f69edddce19a606659163The Android Open Source Project } 196364064216a8433360745f69edddce19a606659163The Android Open Source Project 196464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 196564064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smScanFailure \n")); 196664064216a8433360745f69edddce19a606659163The Android Open Source Project 196764064216a8433360745f69edddce19a606659163The Android Open Source Project /* clean intenal variables */ 196864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->maskRoamingEvents = TRUE; 196964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTrigger = ROAMING_TRIGGER_NONE; 197064064216a8433360745f69edddce19a606659163The Android Open Source Project 197164064216a8433360745f69edddce19a606659163The Android Open Source Project scanMngr_stopContScan(pRoamingMngr->hScanMngr); 197264064216a8433360745f69edddce19a606659163The Android Open Source Project 197364064216a8433360745f69edddce19a606659163The Android Open Source Project return (apConn_disconnect(pRoamingMngr->hAPConnection)); 197464064216a8433360745f69edddce19a606659163The Android Open Source Project} 197564064216a8433360745f69edddce19a606659163The Android Open Source Project 197664064216a8433360745f69edddce19a606659163The Android Open Source Project#if 0 197764064216a8433360745f69edddce19a606659163The Android Open Source Project/** 197864064216a8433360745f69edddce19a606659163The Android Open Source Project* 197964064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smCmdFailure 198064064216a8433360745f69edddce19a606659163The Android Open Source Project* 198164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 198264064216a8433360745f69edddce19a606659163The Android Open Source Project* 198364064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called when all the driver failed to prepare to Roaming. 198464064216a8433360745f69edddce19a606659163The Android Open Source Project * Mask all future Roaming triggers. 198564064216a8433360745f69edddce19a606659163The Android Open Source Project * 198664064216a8433360745f69edddce19a606659163The Android Open Source Project* 198764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 198864064216a8433360745f69edddce19a606659163The Android Open Source Project* 198964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 199064064216a8433360745f69edddce19a606659163The Android Open Source Project* 199164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 199264064216a8433360745f69edddce19a606659163The Android Open Source Project* 199364064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 199464064216a8433360745f69edddce19a606659163The Android Open Source Project* 199564064216a8433360745f69edddce19a606659163The Android Open Source Project* 199664064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 199764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smCmdFailure(TI_HANDLE hRoamingMngr) 199864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 199964064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 200064064216a8433360745f69edddce19a606659163The Android Open Source Project 200164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 200264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 200364064216a8433360745f69edddce19a606659163The Android Open Source Project { 200464064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 200564064216a8433360745f69edddce19a606659163The Android Open Source Project } 200664064216a8433360745f69edddce19a606659163The Android Open Source Project 200764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 200864064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smCmdFailure \n")); 200964064216a8433360745f69edddce19a606659163The Android Open Source Project 201064064216a8433360745f69edddce19a606659163The Android Open Source Project /* clean intenal variables */ 201164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->maskRoamingEvents = TRUE; 201264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTrigger = ROAMING_TRIGGER_NONE; 201364064216a8433360745f69edddce19a606659163The Android Open Source Project 201464064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 201564064216a8433360745f69edddce19a606659163The Android Open Source Project 201664064216a8433360745f69edddce19a606659163The Android Open Source Project} 201764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif 201864064216a8433360745f69edddce19a606659163The Android Open Source Project 201964064216a8433360745f69edddce19a606659163The Android Open Source Project/** 202064064216a8433360745f69edddce19a606659163The Android Open Source Project* 202164064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smStartIdle - Start event when in Idle state 202264064216a8433360745f69edddce19a606659163The Android Open Source Project* 202364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 202464064216a8433360745f69edddce19a606659163The Android Open Source Project* 202564064216a8433360745f69edddce19a606659163The Android Open Source Project* Start event when in Idle state. 202664064216a8433360745f69edddce19a606659163The Android Open Source Project * This function is called when the station becomes CONNECTED. 202764064216a8433360745f69edddce19a606659163The Android Open Source Project * Perform the following: 202864064216a8433360745f69edddce19a606659163The Android Open Source Project * - The current state becomes WAIT_4_TRIGGER 202964064216a8433360745f69edddce19a606659163The Android Open Source Project * - Unmask Roaming events 203064064216a8433360745f69edddce19a606659163The Android Open Source Project * - Set handoverWasPerformed to FALSE 203164064216a8433360745f69edddce19a606659163The Android Open Source Project * - Start the Scan Manager 203264064216a8433360745f69edddce19a606659163The Android Open Source Project* 203364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 203464064216a8433360745f69edddce19a606659163The Android Open Source Project* 203564064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to the roamingMngr SM context \n 203664064216a8433360745f69edddce19a606659163The Android Open Source Project* 203764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 203864064216a8433360745f69edddce19a606659163The Android Open Source Project* 203964064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 204064064216a8433360745f69edddce19a606659163The Android Open Source Project* 204164064216a8433360745f69edddce19a606659163The Android Open Source Project* 204264064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 204364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smStartIdle(void *pData) 204464064216a8433360745f69edddce19a606659163The Android Open Source Project{ 204564064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 204664064216a8433360745f69edddce19a606659163The Android Open Source Project bssEntry_t *pCurBssEntry; 204764064216a8433360745f69edddce19a606659163The Android Open Source Project 204864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)pData; 204964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 205064064216a8433360745f69edddce19a606659163The Android Open Source Project { 205164064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 205264064216a8433360745f69edddce19a606659163The Android Open Source Project } 205364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 205464064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smStartIdle, Unmask Roaming events and start continuos scan \n")); 205564064216a8433360745f69edddce19a606659163The Android Open Source Project 205664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->maskRoamingEvents = FALSE; 205764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->handoverWasPerformed = FALSE; 205864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTrigger = ROAMING_TRIGGER_NONE; 205964064216a8433360745f69edddce19a606659163The Android Open Source Project 206064064216a8433360745f69edddce19a606659163The Android Open Source Project pCurBssEntry = apConn_getBSSParams(pRoamingMngr->hAPConnection); 206164064216a8433360745f69edddce19a606659163The Android Open Source Project scanMngr_startContScan(pRoamingMngr->hScanMngr, &pCurBssEntry->BSSID, pCurBssEntry->band); 206264064216a8433360745f69edddce19a606659163The Android Open Source Project 206364064216a8433360745f69edddce19a606659163The Android Open Source Project /* Start pre-authentication in order to set PMKID 206464064216a8433360745f69edddce19a606659163The Android Open Source Project for the current AP */ 206564064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->staCapabilities.authMode==os802_11AuthModeWPA2) 206664064216a8433360745f69edddce19a606659163The Android Open Source Project { /* No Pre-Auth is required */ 206745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt UINT8 dummy; 206864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 206964064216a8433360745f69edddce19a606659163The Android Open Source Project ("roamingMngr_smStartIdle, Pre-Auth to cur AP\n")); 207045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt apConn_preAuthenticate(pRoamingMngr->hAPConnection, (bssList_t *)&dummy, 0); 207164064216a8433360745f69edddce19a606659163The Android Open Source Project } 207264064216a8433360745f69edddce19a606659163The Android Open Source Project 207364064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 207464064216a8433360745f69edddce19a606659163The Android Open Source Project} 207564064216a8433360745f69edddce19a606659163The Android Open Source Project 207664064216a8433360745f69edddce19a606659163The Android Open Source Project 207764064216a8433360745f69edddce19a606659163The Android Open Source Project 207864064216a8433360745f69edddce19a606659163The Android Open Source Project/** 207964064216a8433360745f69edddce19a606659163The Android Open Source Project* 208064064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smNop - Do nothing 208164064216a8433360745f69edddce19a606659163The Android Open Source Project* 208264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 208364064216a8433360745f69edddce19a606659163The Android Open Source Project* 208464064216a8433360745f69edddce19a606659163The Android Open Source Project* Do nothing in the SM. 208564064216a8433360745f69edddce19a606659163The Android Open Source Project* 208664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 208764064216a8433360745f69edddce19a606659163The Android Open Source Project* 208864064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to the roamingMngr SM context \n 208964064216a8433360745f69edddce19a606659163The Android Open Source Project* 209064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 209164064216a8433360745f69edddce19a606659163The Android Open Source Project* 209264064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 209364064216a8433360745f69edddce19a606659163The Android Open Source Project* 209464064216a8433360745f69edddce19a606659163The Android Open Source Project* 209564064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 209664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smNop(void *pData) 209764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 209864064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 209964064216a8433360745f69edddce19a606659163The Android Open Source Project 210064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)pData; 210164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 210264064216a8433360745f69edddce19a606659163The Android Open Source Project { 210364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 210464064216a8433360745f69edddce19a606659163The Android Open Source Project } 210564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 210664064216a8433360745f69edddce19a606659163The Android Open Source Project (" roamingMngr_smNop\n")); 210764064216a8433360745f69edddce19a606659163The Android Open Source Project 210864064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 210964064216a8433360745f69edddce19a606659163The Android Open Source Project} 211064064216a8433360745f69edddce19a606659163The Android Open Source Project 211164064216a8433360745f69edddce19a606659163The Android Open Source Project/** 211264064216a8433360745f69edddce19a606659163The Android Open Source Project* 211364064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smUnexpected - Unexpected event 211464064216a8433360745f69edddce19a606659163The Android Open Source Project* 211564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 211664064216a8433360745f69edddce19a606659163The Android Open Source Project* 211764064216a8433360745f69edddce19a606659163The Android Open Source Project* Unexpected event in the SM. 211864064216a8433360745f69edddce19a606659163The Android Open Source Project* 211964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 212064064216a8433360745f69edddce19a606659163The Android Open Source Project* 212164064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to the roamingMngr SM context \n 212264064216a8433360745f69edddce19a606659163The Android Open Source Project* 212364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 212464064216a8433360745f69edddce19a606659163The Android Open Source Project* 212564064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 212664064216a8433360745f69edddce19a606659163The Android Open Source Project* 212764064216a8433360745f69edddce19a606659163The Android Open Source Project* 212864064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 212964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smUnexpected(void *pData) 213064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 213164064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 213264064216a8433360745f69edddce19a606659163The Android Open Source Project 213364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)pData; 213464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 213564064216a8433360745f69edddce19a606659163The Android Open Source Project { 213664064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 213764064216a8433360745f69edddce19a606659163The Android Open Source Project } 213864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_ERROR(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 213964064216a8433360745f69edddce19a606659163The Android Open Source Project (" roamingMngr_smUnexpected, state = %d\n", pRoamingMngr->currentState)); 214064064216a8433360745f69edddce19a606659163The Android Open Source Project 214164064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 214264064216a8433360745f69edddce19a606659163The Android Open Source Project} 214364064216a8433360745f69edddce19a606659163The Android Open Source Project 214464064216a8433360745f69edddce19a606659163The Android Open Source Project 214564064216a8433360745f69edddce19a606659163The Android Open Source Project 214664064216a8433360745f69edddce19a606659163The Android Open Source Project 214764064216a8433360745f69edddce19a606659163The Android Open Source Project 214864064216a8433360745f69edddce19a606659163The Android Open Source Project/** 214964064216a8433360745f69edddce19a606659163The Android Open Source Project* 215064064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smStop - Stop all timers and clean DB 215164064216a8433360745f69edddce19a606659163The Android Open Source Project* 215264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 215364064216a8433360745f69edddce19a606659163The Android Open Source Project* 215464064216a8433360745f69edddce19a606659163The Android Open Source Project* Stop event in start state. Stop timers, clean internal vars 215564064216a8433360745f69edddce19a606659163The Android Open Source Project * and exit PS if necessary. 215664064216a8433360745f69edddce19a606659163The Android Open Source Project* 215764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 215864064216a8433360745f69edddce19a606659163The Android Open Source Project* 215964064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to the roamingMngr SM context \n 216064064216a8433360745f69edddce19a606659163The Android Open Source Project* 216164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 216264064216a8433360745f69edddce19a606659163The Android Open Source Project* 216364064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 216464064216a8433360745f69edddce19a606659163The Android Open Source Project* 216564064216a8433360745f69edddce19a606659163The Android Open Source Project* 216664064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 216764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smStop(void *pData) 216864064216a8433360745f69edddce19a606659163The Android Open Source Project{ 216964064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 217064064216a8433360745f69edddce19a606659163The Android Open Source Project 217164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)pData; 217264064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 217364064216a8433360745f69edddce19a606659163The Android Open Source Project { 217464064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 217564064216a8433360745f69edddce19a606659163The Android Open Source Project } 217664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 217764064216a8433360745f69edddce19a606659163The Android Open Source Project (" roamingMngr_smStop\n")); 217864064216a8433360745f69edddce19a606659163The Android Open Source Project 217964064216a8433360745f69edddce19a606659163The Android Open Source Project scanMngr_stopContScan(pRoamingMngr->hScanMngr); 218064064216a8433360745f69edddce19a606659163The Android Open Source Project /* clean intenal variables */ 218164064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->maskRoamingEvents = TRUE; 218264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->neighborApsExist = FALSE; 218364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTrigger = ROAMING_TRIGGER_NONE; 218464064216a8433360745f69edddce19a606659163The Android Open Source Project 218564064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 218664064216a8433360745f69edddce19a606659163The Android Open Source Project} 218764064216a8433360745f69edddce19a606659163The Android Open Source Project/** 218864064216a8433360745f69edddce19a606659163The Android Open Source Project* 218964064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_smStopWhileScanning - 219064064216a8433360745f69edddce19a606659163The Android Open Source Project* 219164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 219264064216a8433360745f69edddce19a606659163The Android Open Source Project* 219364064216a8433360745f69edddce19a606659163The Android Open Source Project* Stop event means that the station is not in Connected State. 219464064216a8433360745f69edddce19a606659163The Android Open Source Project * Stop continuos and immediate scans and clean internal vars. 219564064216a8433360745f69edddce19a606659163The Android Open Source Project* 219664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 219764064216a8433360745f69edddce19a606659163The Android Open Source Project* 219864064216a8433360745f69edddce19a606659163The Android Open Source Project* I - pData - pointer to the roamingMngr SM context \n 219964064216a8433360745f69edddce19a606659163The Android Open Source Project* 220064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 220164064216a8433360745f69edddce19a606659163The Android Open Source Project* 220264064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 220364064216a8433360745f69edddce19a606659163The Android Open Source Project* 220464064216a8433360745f69edddce19a606659163The Android Open Source Project* 220564064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 220664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS roamingMngr_smStopWhileScanning(void *pData) 220764064216a8433360745f69edddce19a606659163The Android Open Source Project{ 220864064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 220964064216a8433360745f69edddce19a606659163The Android Open Source Project 221064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)pData; 221164064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 221264064216a8433360745f69edddce19a606659163The Android Open Source Project { 221364064216a8433360745f69edddce19a606659163The Android Open Source Project return NOK; 221464064216a8433360745f69edddce19a606659163The Android Open Source Project } 221564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_REPORT_INFORMATION(pRoamingMngr->hReport, ROAMING_MANAGER_MODULE_LOG, 221664064216a8433360745f69edddce19a606659163The Android Open Source Project (" roamingMngr_smStopWhileScanning\n")); 221764064216a8433360745f69edddce19a606659163The Android Open Source Project 221864064216a8433360745f69edddce19a606659163The Android Open Source Project scanMngr_stopImmediateScan(pRoamingMngr->hScanMngr); 221964064216a8433360745f69edddce19a606659163The Android Open Source Project scanMngr_stopContScan(pRoamingMngr->hScanMngr); 222064064216a8433360745f69edddce19a606659163The Android Open Source Project 222164064216a8433360745f69edddce19a606659163The Android Open Source Project /* clean intenal variables */ 222264064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->maskRoamingEvents = TRUE; 222364064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->neighborApsExist = FALSE; 222464064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTrigger = ROAMING_TRIGGER_NONE; 222564064216a8433360745f69edddce19a606659163The Android Open Source Project 222664064216a8433360745f69edddce19a606659163The Android Open Source Project return OK; 222764064216a8433360745f69edddce19a606659163The Android Open Source Project} 222864064216a8433360745f69edddce19a606659163The Android Open Source Project 222964064216a8433360745f69edddce19a606659163The Android Open Source Project 223064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG 223164064216a8433360745f69edddce19a606659163The Android Open Source Project/** 223264064216a8433360745f69edddce19a606659163The Android Open Source Project* 223364064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_debugTrace 223464064216a8433360745f69edddce19a606659163The Android Open Source Project* 223564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 223664064216a8433360745f69edddce19a606659163The Android Open Source Project* 223764064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called for debug only, to trace the roaming triggers and events 223864064216a8433360745f69edddce19a606659163The Android Open Source Project* 223964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 224064064216a8433360745f69edddce19a606659163The Android Open Source Project* 224164064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 224264064216a8433360745f69edddce19a606659163The Android Open Source Project* 224364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 224464064216a8433360745f69edddce19a606659163The Android Open Source Project* 224564064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 224664064216a8433360745f69edddce19a606659163The Android Open Source Project* 224764064216a8433360745f69edddce19a606659163The Android Open Source Project* 224864064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 224964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void roamingMngr_printStatistics(TI_HANDLE hRoamingMngr) 225064064216a8433360745f69edddce19a606659163The Android Open Source Project{ 225164064216a8433360745f69edddce19a606659163The Android Open Source Project 225264064216a8433360745f69edddce19a606659163The Android Open Source Project 225364064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 225464064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 index; 225564064216a8433360745f69edddce19a606659163The Android Open Source Project 225664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 225764064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 225864064216a8433360745f69edddce19a606659163The Android Open Source Project { 225964064216a8433360745f69edddce19a606659163The Android Open Source Project return; 226064064216a8433360745f69edddce19a606659163The Android Open Source Project } 226164064216a8433360745f69edddce19a606659163The Android Open Source Project 226264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("******** ROAMING_TRIGGERS ********\n")); 226364064216a8433360745f69edddce19a606659163The Android Open Source Project for (index=ROAMING_TRIGGER_LOW_TX_RATE; index<ROAMING_TRIGGER_LAST; index++) 226464064216a8433360745f69edddce19a606659163The Android Open Source Project { 226564064216a8433360745f69edddce19a606659163The Android Open Source Project switch (index) 226664064216a8433360745f69edddce19a606659163The Android Open Source Project { 226764064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_LOW_TX_RATE: 226864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Low TX rate = %d\n", pRoamingMngr->roamingTriggerEvents[index])); 226964064216a8433360745f69edddce19a606659163The Android Open Source Project break; 227064064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_LOW_SNR: 227164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Low Snr = %d\n", pRoamingMngr->roamingTriggerEvents[index])); 227264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 227364064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_LOW_QUALITY: 227464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Low Quality = %d\n", pRoamingMngr->roamingTriggerEvents[index])); 227564064216a8433360745f69edddce19a606659163The Android Open Source Project break; 227664064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_MAX_TX_RETRIES: 227764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- MAX TX retries = %d\n", pRoamingMngr->roamingTriggerEvents[index])); 227864064216a8433360745f69edddce19a606659163The Android Open Source Project break; 227964064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_BSS_LOSS: 228064064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- BSS Loss TX = %d\n", pRoamingMngr->roamingTriggerEvents[index])); 228164064216a8433360745f69edddce19a606659163The Android Open Source Project break; 228264064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_SWITCH_CHANNEL: 228364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Switch Channel = %d\n", pRoamingMngr->roamingTriggerEvents[index])); 228464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 228564064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_AP_DISCONNECT: 228664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- AP Disconnect = %d\n", pRoamingMngr->roamingTriggerEvents[index])); 228764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 228864064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_SECURITY_ATTACK: 228964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- SEC attack = %d\n", pRoamingMngr->roamingTriggerEvents[index])); 229064064216a8433360745f69edddce19a606659163The Android Open Source Project break; 229164064216a8433360745f69edddce19a606659163The Android Open Source Project default: 229264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 229364064216a8433360745f69edddce19a606659163The Android Open Source Project } 229464064216a8433360745f69edddce19a606659163The Android Open Source Project } 229564064216a8433360745f69edddce19a606659163The Android Open Source Project 229664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("******** Succ ROAMING_HANDOVERS ********\n")); 229764064216a8433360745f69edddce19a606659163The Android Open Source Project 229864064216a8433360745f69edddce19a606659163The Android Open Source Project for (index=ROAMING_TRIGGER_LOW_QUALITY; index<ROAMING_TRIGGER_LAST; index++) 229964064216a8433360745f69edddce19a606659163The Android Open Source Project { 230064064216a8433360745f69edddce19a606659163The Android Open Source Project switch (index) 230164064216a8433360745f69edddce19a606659163The Android Open Source Project { 230264064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_LOW_TX_RATE: 230364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Low TX rate = %d\n", pRoamingMngr->roamingHandoverEvents[index])); 230464064216a8433360745f69edddce19a606659163The Android Open Source Project break; 230564064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_LOW_SNR: 230664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Low Snre = %d\n", pRoamingMngr->roamingHandoverEvents[index])); 230764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 230864064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_LOW_QUALITY: 230964064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Low Quality = %d\n", pRoamingMngr->roamingHandoverEvents[index])); 231064064216a8433360745f69edddce19a606659163The Android Open Source Project break; 231164064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_MAX_TX_RETRIES: 231264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- MAX TX retries = %d\n", pRoamingMngr->roamingHandoverEvents[index])); 231364064216a8433360745f69edddce19a606659163The Android Open Source Project break; 231464064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_BSS_LOSS: 231564064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- BSS Loss TX = %d\n", pRoamingMngr->roamingHandoverEvents[index])); 231664064216a8433360745f69edddce19a606659163The Android Open Source Project break; 231764064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_SWITCH_CHANNEL: 231864064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Switch Channel = %d\n", pRoamingMngr->roamingHandoverEvents[index])); 231964064216a8433360745f69edddce19a606659163The Android Open Source Project break; 232064064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_AP_DISCONNECT: 232164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- AP Disconnect = %d\n", pRoamingMngr->roamingHandoverEvents[index])); 232264064216a8433360745f69edddce19a606659163The Android Open Source Project break; 232364064216a8433360745f69edddce19a606659163The Android Open Source Project case ROAMING_TRIGGER_SECURITY_ATTACK: 232464064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- SEC attack = %d\n", pRoamingMngr->roamingHandoverEvents[index])); 232564064216a8433360745f69edddce19a606659163The Android Open Source Project break; 232664064216a8433360745f69edddce19a606659163The Android Open Source Project default: 232764064216a8433360745f69edddce19a606659163The Android Open Source Project break; 232864064216a8433360745f69edddce19a606659163The Android Open Source Project } 232964064216a8433360745f69edddce19a606659163The Android Open Source Project } 233064064216a8433360745f69edddce19a606659163The Android Open Source Project 233164064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("******** ROAMING STATISTICS ********\n")); 233264064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Num of succesful handovers = %d\n", pRoamingMngr->roamingSuccesfulHandoverNum)); 233364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Num of failed handovers = %d\n", pRoamingMngr->roamingFailedHandoverNum)); 233464064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr->roamingSuccesfulHandoverNum >0) 233564064216a8433360745f69edddce19a606659163The Android Open Source Project { 233664064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Succesful average succesful handover duration = %d\n", pRoamingMngr->roamingAverageSuccHandoverDuration/pRoamingMngr->roamingSuccesfulHandoverNum)); 233764064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("- Succesful average roaming duration = %d\n", pRoamingMngr->roamingAverageRoamingDuration/pRoamingMngr->roamingSuccesfulHandoverNum)); 233864064216a8433360745f69edddce19a606659163The Android Open Source Project } 233964064216a8433360745f69edddce19a606659163The Android Open Source Project 234064064216a8433360745f69edddce19a606659163The Android Open Source Project 234164064216a8433360745f69edddce19a606659163The Android Open Source Project} 234264064216a8433360745f69edddce19a606659163The Android Open Source Project 234364064216a8433360745f69edddce19a606659163The Android Open Source Project 234464064216a8433360745f69edddce19a606659163The Android Open Source Project/** 234564064216a8433360745f69edddce19a606659163The Android Open Source Project* 234664064216a8433360745f69edddce19a606659163The Android Open Source Project* roamingMngr_resetDebugTrace 234764064216a8433360745f69edddce19a606659163The Android Open Source Project* 234864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description: 234964064216a8433360745f69edddce19a606659163The Android Open Source Project* 235064064216a8433360745f69edddce19a606659163The Android Open Source Project* This procedure is called for debug only, to reset Roaming debug trace 235164064216a8433360745f69edddce19a606659163The Android Open Source Project* 235264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: 235364064216a8433360745f69edddce19a606659163The Android Open Source Project* 235464064216a8433360745f69edddce19a606659163The Android Open Source Project* I - hRoamingMngr - roamingMngr SM context \n 235564064216a8433360745f69edddce19a606659163The Android Open Source Project* 235664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS: 235764064216a8433360745f69edddce19a606659163The Android Open Source Project* 235864064216a8433360745f69edddce19a606659163The Android Open Source Project* OK if successful, NOK otherwise. 235964064216a8433360745f69edddce19a606659163The Android Open Source Project* 236064064216a8433360745f69edddce19a606659163The Android Open Source Project* 236164064216a8433360745f69edddce19a606659163The Android Open Source Project*/ 236264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void roamingMngr_resetStatistics(TI_HANDLE hRoamingMngr) 236364064216a8433360745f69edddce19a606659163The Android Open Source Project{ 236464064216a8433360745f69edddce19a606659163The Android Open Source Project 236564064216a8433360745f69edddce19a606659163The Android Open Source Project roamingMngr_t *pRoamingMngr; 236664064216a8433360745f69edddce19a606659163The Android Open Source Project UINT8 index; 236764064216a8433360745f69edddce19a606659163The Android Open Source Project 236864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr = (roamingMngr_t*)hRoamingMngr; 236964064216a8433360745f69edddce19a606659163The Android Open Source Project if (pRoamingMngr == NULL) 237064064216a8433360745f69edddce19a606659163The Android Open Source Project { 237164064216a8433360745f69edddce19a606659163The Android Open Source Project return; 237264064216a8433360745f69edddce19a606659163The Android Open Source Project } 237364064216a8433360745f69edddce19a606659163The Android Open Source Project WLAN_OS_REPORT(("Resetting all ROAMING_EVENTS \n")); 237464064216a8433360745f69edddce19a606659163The Android Open Source Project 237564064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingSuccesfulHandoverNum = 0; 237664064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingHandoverStartedTimestamp = 0; 237764064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingHandoverCompletedTimestamp = 0; 237864064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingAverageSuccHandoverDuration = 0; 237964064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingAverageRoamingDuration = 0; 238064064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingFailedHandoverNum = 0; 238164064216a8433360745f69edddce19a606659163The Android Open Source Project 238264064216a8433360745f69edddce19a606659163The Android Open Source Project for (index=ROAMING_TRIGGER_LOW_QUALITY; index<ROAMING_TRIGGER_LAST; index++) 238364064216a8433360745f69edddce19a606659163The Android Open Source Project { 238464064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingHandoverEvents[index] = 0; 238564064216a8433360745f69edddce19a606659163The Android Open Source Project pRoamingMngr->roamingTriggerEvents[index] = 0; 238664064216a8433360745f69edddce19a606659163The Android Open Source Project } 238764064216a8433360745f69edddce19a606659163The Android Open Source Project} 238864064216a8433360745f69edddce19a606659163The Android Open Source Project 238964064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /*TI_DBG*/ 2390