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 *)&param;
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,&param);
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, &param);
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