164064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
264064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
364064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
464064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
564064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved.                                                  |**
664064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
764064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without    |**
864064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions    |**
964064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met:                                                              |**
1064064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1164064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions of source code must retain the above copyright     |**
1264064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer.      |**
1364064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions in binary form must reproduce the above copyright  |**
1464064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer in    |**
1564064216a8433360745f69edddce19a606659163The Android Open Source Project**|    the documentation and/or other materials provided with the         |**
1664064216a8433360745f69edddce19a606659163The Android Open Source Project**|    distribution.                                                      |**
1764064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Neither the name Texas Instruments nor the names of its            |**
1864064216a8433360745f69edddce19a606659163The Android Open Source Project**|    contributors may be used to endorse or promote products derived    |**
1964064216a8433360745f69edddce19a606659163The Android Open Source Project**|    from this software without specific prior written permission.      |**
2064064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
2164064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
2264064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
2364064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
2464064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
2564064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
3264064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
3364064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
3464064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/
3564064216a8433360745f69edddce19a606659163The Android Open Source Project
3664064216a8433360745f69edddce19a606659163The Android Open Source Project
3764064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file apConn.c
3864064216a8433360745f69edddce19a606659163The Android Open Source Project *  \brief AP Connection
3964064216a8433360745f69edddce19a606659163The Android Open Source Project *
4064064216a8433360745f69edddce19a606659163The Android Open Source Project *  \see apConn.h
4164064216a8433360745f69edddce19a606659163The Android Open Source Project */
4264064216a8433360745f69edddce19a606659163The Android Open Source Project
4364064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
4464064216a8433360745f69edddce19a606659163The Android Open Source Project *                                                                          *
4564064216a8433360745f69edddce19a606659163The Android Open Source Project *   MODULE:  AP Connection                                                 *
4664064216a8433360745f69edddce19a606659163The Android Open Source Project *   PURPOSE:                                                               *
4764064216a8433360745f69edddce19a606659163The Android Open Source Project *   Roaming ability of eSTA is implemented by Roaming Manager Component and
4864064216a8433360745f69edddce19a606659163The Android Open Source Project *   described in "Roaming Manager module LLD" document, and by
4964064216a8433360745f69edddce19a606659163The Android Open Source Project *   AP Connection module. AP Connection module implemented as two sub-modules:
5064064216a8433360745f69edddce19a606659163The Android Open Source Project *   The major one is AP Connection, that is responsible for:
5164064216a8433360745f69edddce19a606659163The Android Open Source Project *   - providing Roaming Manager with access to other parts of WLAN Driver,
5264064216a8433360745f69edddce19a606659163The Android Open Source Project *   - implementing low levels of roaming mechanism.
5364064216a8433360745f69edddce19a606659163The Android Open Source Project *   Current BSS sub-module takes care of:
5464064216a8433360745f69edddce19a606659163The Android Open Source Project *   - maintaining database of current AP info,
5564064216a8433360745f69edddce19a606659163The Android Open Source Project *   - providing access to database of current AP info.
5664064216a8433360745f69edddce19a606659163The Android Open Source Project *                                                                          *
5764064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************/
5864064216a8433360745f69edddce19a606659163The Android Open Source Project
5964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h"
6064064216a8433360745f69edddce19a606659163The Android Open Source Project
6164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramIn.h"
6264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h"
6364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h"
6464064216a8433360745f69edddce19a606659163The Android Open Source Project
6564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeSmApi.h"
6664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteMgrApi.h"
6764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeApi.h"
6864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "PowerMgr_API.h"
6964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TrafficMonitorAPI.h"
7064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "RateAdaptation.h"
7164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "qosMngr_API.h"
7264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
7364064216a8433360745f69edddce19a606659163The Android Open Source Project #include "excMngr.h"
7464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
7564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "measurementMgrApi.h"
7664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "connApi.h"
7764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "EvHandler.h"
7864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "apConn.h"
7964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "currBss.h"
8064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "Ctrl.h"
8164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "fsm.h"
8264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "scrApi.h"
8364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "regulatoryDomainApi.h"
8464064216a8433360745f69edddce19a606659163The Android Open Source Project
8564064216a8433360745f69edddce19a606659163The Android Open Source Project/* Constants and macros */
8664064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
8764064216a8433360745f69edddce19a606659163The Android Open Source Project #define    AP_CONN_VALIDATE_HANDLE(hAPConnection)  \
8864064216a8433360745f69edddce19a606659163The Android Open Source Project    if (hAPConnection == NULL)  \
8964064216a8433360745f69edddce19a606659163The Android Open Source Project    {   \
9064064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("FATAL ERROR: AP Connection context is not initiated\n"));  \
9164064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK; \
9264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
9364064216a8433360745f69edddce19a606659163The Android Open Source Project#else
9464064216a8433360745f69edddce19a606659163The Android Open Source Project #define    AP_CONN_VALIDATE_HANDLE(hAPConnection)
9564064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
9664064216a8433360745f69edddce19a606659163The Android Open Source Project
9764064216a8433360745f69edddce19a606659163The Android Open Source Project#define MAX_ROAMING_TRIGGERS  ROAMING_TRIGGER_LAST
9864064216a8433360745f69edddce19a606659163The Android Open Source Project
9964064216a8433360745f69edddce19a606659163The Android Open Source Project#define UPDATE_SEND_DEAUTH_PACKET_FLAG(roamingEventType) \
10064064216a8433360745f69edddce19a606659163The Android Open Source Project            if ((roamingEventType >= ROAMING_TRIGGER_MAX_TX_RETRIES) && \
10164064216a8433360745f69edddce19a606659163The Android Open Source Project                (roamingEventType != ROAMING_TRIGGER_SECURITY_ATTACK)) \
10264064216a8433360745f69edddce19a606659163The Android Open Source Project            { \
10364064216a8433360745f69edddce19a606659163The Android Open Source Project                pAPConnection->sendDeauthPacket = FALSE; \
10464064216a8433360745f69edddce19a606659163The Android Open Source Project            }
10564064216a8433360745f69edddce19a606659163The Android Open Source Project
10664064216a8433360745f69edddce19a606659163The Android Open Source Project/* Init bits */
10764064216a8433360745f69edddce19a606659163The Android Open Source Project
10864064216a8433360745f69edddce19a606659163The Android Open Source Project
10964064216a8433360745f69edddce19a606659163The Android Open Source Project/* Enumerations */
11064064216a8433360745f69edddce19a606659163The Android Open Source Project
11164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
11264064216a8433360745f69edddce19a606659163The Android Open Source Project* AP Connection state machine states
11364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
11464064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef enum
11564064216a8433360745f69edddce19a606659163The Android Open Source Project{
11664064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_STATE_IDLE = 0,          /**< Initial state */
11764064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_STATE_WAIT_ROAM,         /**< Connected to AP, waiting for start roaming command */
11864064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_STATE_SWITCHING_CHANNEL, /**< Connected to AP, switch channel in progress */
11964064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_STATE_WAIT_CONNECT_CMD,  /**< SCR allocated, PS mode entered; wait for cmd from Roam Mngr */
12064064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_STATE_PREPARE_HAND_OFF,  /**< Request CCKM for new AP, wait for response */
12164064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_STATE_CONNECTING,        /**< Performing Connection to new AP; wait for response from Conn SM */
12264064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_STATE_DISCONNECTING,     /**< Wait for completion of current link disconnection */
12364064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_STATE_REESTABLISH_VOICE, /**< Wait for completion of voice TSPEC re-negotiation */
12464064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_STATE_LAST
12564064216a8433360745f69edddce19a606659163The Android Open Source Project} apConn_smStates;
12664064216a8433360745f69edddce19a606659163The Android Open Source Project
12764064216a8433360745f69edddce19a606659163The Android Open Source Project
12864064216a8433360745f69edddce19a606659163The Android Open Source Project/**
12964064216a8433360745f69edddce19a606659163The Android Open Source Project* AP Connection state machine events
13064064216a8433360745f69edddce19a606659163The Android Open Source Project*/
13164064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef enum
13264064216a8433360745f69edddce19a606659163The Android Open Source Project{
13364064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_EVENT_PREPARE_FOR_ROAMING= 0,/**< Sent by Roam MNGR when roaming event occurs */
13464064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_EVENT_FINISHED_OK,           /**< Indicates successful completion of request sent to Conn SM */
13564064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_EVENT_FINISHED_NOT_OK,       /**< Indicates unsuccessful completion of request sent to Conn SM */
13664064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_EVENT_RETAIN_CURRENT_AP,     /**< Sent by Roam MNGR when it wishes to give-up roaming */
13764064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_EVENT_START,                 /**< Sent by SME when first time link to AP is established */
13864064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_EVENT_START_ROAM,            /**< Sent by Roam MNGR when it wishes to roam to new AP */
13964064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_EVENT_START_SWITCH_CHANNEL,  /**< Sent by Switch channel module when starting switch channel process (tx enabled) */
14064064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_EVENT_FINISHED_SWITCH_CH,    /**< Sent by Switch channel module when finishing switch channel process (tx enabled) */
14164064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_EVENT_FINISHED_HAND_OVER,    /**< Sent by EXC module when finishing hand-over */
14264064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_EVENT_STOP,                  /**< Disconnect current link, send stop indication to other modules */
14364064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONNECT_EVENT_LAST
14464064216a8433360745f69edddce19a606659163The Android Open Source Project} apConn_smEvents;
14564064216a8433360745f69edddce19a606659163The Android Open Source Project
14664064216a8433360745f69edddce19a606659163The Android Open Source Project#define AP_CONNECT_NUM_STATES       AP_CONNECT_STATE_LAST
14764064216a8433360745f69edddce19a606659163The Android Open Source Project#define AP_CONNECT_NUM_EVENTS       AP_CONNECT_EVENT_LAST
14864064216a8433360745f69edddce19a606659163The Android Open Source Project
14964064216a8433360745f69edddce19a606659163The Android Open Source Project
15064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef REPORT_LOG
15164064216a8433360745f69edddce19a606659163The Android Open Source Project
15264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Global variables */
15364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic char *apConn_stateDesc[AP_CONNECT_NUM_STATES] = {
15464064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_STATE_IDLE",
15564064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_STATE_WAIT_ROAM",
15664064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_STATE_SWITCHING_CHANNEL",
15764064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_STATE_WAIT_CONNECT_CMD",
15864064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_STATE_PREPARE_HAND_OFF",
15964064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_STATE_CONNECTING",
16064064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_STATE_DISCONNECTING",
16164064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_STATE_REESTABLISH_VOICE"
16264064216a8433360745f69edddce19a606659163The Android Open Source Project    };
16364064216a8433360745f69edddce19a606659163The Android Open Source Project
16464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic char *apConn_eventDesc[AP_CONNECT_NUM_EVENTS] = {
16564064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_EVENT_PREPARE_FOR_ROAMING",
16664064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_EVENT_FINISHED_OK",
16764064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_EVENT_FINISHED_NOT_OK",
16864064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_EVENT_RETAIN_CURRENT_AP",
16964064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_EVENT_START",
17064064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_EVENT_START_ROAM",
17164064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_EVENT_START_SWITCH_CHANNEL",
17264064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_EVENT_FINISHED_SWITCH_CHANNEL",
17364064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_EVENT_FINISHED_HAND_OVER",
17464064216a8433360745f69edddce19a606659163The Android Open Source Project        "APC_EVENT_STOP"
17564064216a8433360745f69edddce19a606659163The Android Open Source Project    };
17664064216a8433360745f69edddce19a606659163The Android Open Source Project
17764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
17864064216a8433360745f69edddce19a606659163The Android Open Source Project
17964064216a8433360745f69edddce19a606659163The Android Open Source Project
18064064216a8433360745f69edddce19a606659163The Android Open Source Project/* Typedefs */
18164064216a8433360745f69edddce19a606659163The Android Open Source Project
18264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Structures */
18364064216a8433360745f69edddce19a606659163The Android Open Source Project
18464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
18564064216a8433360745f69edddce19a606659163The Android Open Source Project* AP Connection control block
18664064216a8433360745f69edddce19a606659163The Android Open Source Project* Following structure defines parameters that can be configured externally,
18764064216a8433360745f69edddce19a606659163The Android Open Source Project* internal variables, AP Connection state machine and handlers of other modules
18864064216a8433360745f69edddce19a606659163The Android Open Source Project* used by AP Connection module
18964064216a8433360745f69edddce19a606659163The Android Open Source Project*/
19064064216a8433360745f69edddce19a606659163The Android Open Source Projecttypedef struct _apConn_t
19164064216a8433360745f69edddce19a606659163The Android Open Source Project{
19264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* AP Connection state machine */
19364064216a8433360745f69edddce19a606659163The Android Open Source Project    fsm_stateMachine_t      *apConnSM;          /**< AP Connection module state machine */
19464064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_smStates         currentState;       /**< AP Connection state machine current state */
19564064216a8433360745f69edddce19a606659163The Android Open Source Project
19664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Internal parameters */
19764064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    firstAttempt2Roam;  /**< TRUE if still connected to original AP, FALSE otherwise */
19864064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    roamingEnabled;     /**< If FALSE, act like if no roaming callback registered. */
19964064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_roamingTrigger_e roamReason;         /**< The most severe and recent reason for roaming */
20064064216a8433360745f69edddce19a606659163The Android Open Source Project    APDisconnect_t          APDisconnect;       /**< The AP disconnect trigger extra information */
20164064216a8433360745f69edddce19a606659163The Android Open Source Project    bssEntry_t              *newAP;             /**< Stores parameters of roaming candidate */
20264064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_connRequest_e    requestType;        /**< Stores type of roaming request */
20364064216a8433360745f69edddce19a606659163The Android Open Source Project    INT8                    rssiThreshold;      /**< Stores recently configured RSSI threshold */
20464064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8                   snrThreshold;       /**< Stores recently configured SNR threshold */
20564064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8                   txFailureThreshold; /**< Stores recently configured consec. no ack threshold */
20664064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8                   lowRateThreshold;   /**< Stores recently configured consec. no ack threshold */
20764064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32                  vsIElength;         /**< Length of vendor specific info-element for assoc req (if defined) */
20864064216a8433360745f69edddce19a606659163The Android Open Source Project    char                    *vsIEbuf;           /**< Pointer to vendor specific info-element for assoc req (if defined) */
20964064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    isRssiTriggerMaskedOut;
21064064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    isSnrTriggerMaskedOut;
21164064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    isConsTxFailureMaskedOut;
21264064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    islowRateTriggerMaskedOut;
21364064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    removeKeys;         /**< Indicates whether keys should be removed after disconnect or not */
21464064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    ignoreDeauthReason0;/**< Indicates whether to ignore DeAuth with reason 0, required for Rogue AP test EXC-V2 */
21564064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    sendDeauthPacket;   /**< Indicates whether to send DEAUTH packet when discommecting or not */
21664064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    voiceTspecConfigured;/**< Shall be set to TRUE before roaming in case the TSPEC is configured */
21764064216a8433360745f69edddce19a606659163The Android Open Source Project	BOOL                    videoTspecConfigured;/**< Shall be set to TRUE before roaming in case the TSPEC is configured */
21864064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    reNegotiateTSPEC;   /**< Shall be set to TRUE before hand-over if requested by Roaming Manager */
21964064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    resetReportedRoamingStatistics; /**< Shall be set to TRUE if starting to measure traffic */
22064064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT16                  lastRoamingDelay;
22164064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32                  roamingStartedTimestamp;
22264064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8                   roamingSuccesfulHandoverNum;
22364064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL                    bNonRoamingDisAssocReason; /**< Indicate whether last disconnection was called from outside (SME) */
22464064216a8433360745f69edddce19a606659163The Android Open Source Project    /** Callback functions, registered by Roaming manager */
22564064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_roamMngrCallb_t  roamEventCallb;         /**< roam event triggers */
22664064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_roamMngrCallb_t  reportStatusCallb;      /**< connection status events  */
22764064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_roamMngrCallb_t  returnNeighborApsCallb; /**< neighbor APs list update */
22864064216a8433360745f69edddce19a606659163The Android Open Source Project
22964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Handlers of other modules used by AP Connection */
23064064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hOs;
23164064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hReport;
23264064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hCurrBSS;
23364064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hRoamMng;
23464064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hSme;
23564064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hSiteMgr;
23664064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hExcMngr;
23764064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hConnSm;
23864064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hPrivacy;
23964064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hQos;
24064064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hRateAdapt;
24164064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hEvHandler;
24264064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hScr;
24364064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hAssoc;
24464064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_HANDLE               hRegulatoryDomain;
24564064216a8433360745f69edddce19a606659163The Android Open Source Project
24664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Counters for statistics */
24764064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32                  roamingTriggerEvents[MAX_ROAMING_TRIGGERS];
24864064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32                  roamingSuccesfulHandoverTotalNum;
24964064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32                  roamingFailedHandoverNum;
25064064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32                  retainCurrAPNum;
25164064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32                  disconnectFromRoamMngrNum;
25264064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32                  stopFromSmeNum;
25364064216a8433360745f69edddce19a606659163The Android Open Source Project} apConn_t;
25464064216a8433360745f69edddce19a606659163The Android Open Source Project
25564064216a8433360745f69edddce19a606659163The Android Open Source Project
25664064216a8433360745f69edddce19a606659163The Android Open Source Project/* Internal functions prototypes */
25764064216a8433360745f69edddce19a606659163The Android Open Source Project
25864064216a8433360745f69edddce19a606659163The Android Open Source Project/* SM functions */
25964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_smEvent(apConn_smStates *currState, UINT8 event, void* data);
26064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_smNop(void *pData);
26164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_smUnexpected(void *pData);
26264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_startWaitingForTriggers(void *pData);
26364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_connectedToNewAP(void *pData);
26464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_configureDriverBeforeRoaming(void *pData);
26564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_stopConnection(void *pData);
26664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_invokeConnectionToNewAp(void *pData);
26764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_reportDisconnected(void *pData);
26864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_retainAP(void *pData);
26964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_requestCCKM(void *pData);
27064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_reportConnFail(void *pData);
27164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_swChFinished(void *pData);
27264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_handleTspecReneg (void *pData);
27364064216a8433360745f69edddce19a606659163The Android Open Source Project
27464064216a8433360745f69edddce19a606659163The Android Open Source Project/* other functions */
27564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
27664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void apConn_calcNewTsf(apConn_t *hAPConnection, UINT8 *tsfTimeStamp, UINT32 newSiteOsTimeStamp, UINT32 beaconInterval);
27764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
27864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_qosMngrReportResultCallb (TI_HANDLE hApConn, trafficAdmRequestStatus_e result);
27964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void      apConn_reportConnStatusToSME    (apConn_t *pAPConnection);
28064064216a8433360745f69edddce19a606659163The Android Open Source Project
28164064216a8433360745f69edddce19a606659163The Android Open Source Project
28264064216a8433360745f69edddce19a606659163The Android Open Source Project/* Public functions implementation */
28364064216a8433360745f69edddce19a606659163The Android Open Source Project
28464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
28564064216a8433360745f69edddce19a606659163The Android Open Source Project*
28664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_create
28764064216a8433360745f69edddce19a606659163The Android Open Source Project*
28864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
28964064216a8433360745f69edddce19a606659163The Android Open Source Project*
29064064216a8433360745f69edddce19a606659163The Android Open Source Project* Create the AP Connection context:
29164064216a8433360745f69edddce19a606659163The Android Open Source Project* allocate memory for internal variables;
29264064216a8433360745f69edddce19a606659163The Android Open Source Project* create state machine.
29364064216a8433360745f69edddce19a606659163The Android Open Source Project*
29464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
29564064216a8433360745f69edddce19a606659163The Android Open Source Project*
29664064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hOs - OS handler
29764064216a8433360745f69edddce19a606659163The Android Open Source Project*
29864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
29964064216a8433360745f69edddce19a606659163The Android Open Source Project*
30064064216a8433360745f69edddce19a606659163The Android Open Source Project* Pointer to the AP Connection on success, NULL on failure
30164064216a8433360745f69edddce19a606659163The Android Open Source Project* (unable to allocate memory or other error).
30264064216a8433360745f69edddce19a606659163The Android Open Source Project*
30364064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
30464064216a8433360745f69edddce19a606659163The Android Open Source Project*/
30564064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE apConn_create(TI_HANDLE hOs)
30664064216a8433360745f69edddce19a606659163The Android Open Source Project{
30764064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS   status;
30864064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t    *pAPConnection;
30964064216a8433360745f69edddce19a606659163The Android Open Source Project
31064064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pAPConnection = os_memoryAlloc(hOs, sizeof(apConn_t))) != NULL)
31164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
31264064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hOs = hOs;
31364064216a8433360745f69edddce19a606659163The Android Open Source Project
31464064216a8433360745f69edddce19a606659163The Android Open Source Project        status = fsm_Create(hOs, &(pAPConnection->apConnSM), AP_CONNECT_NUM_STATES, AP_CONNECT_NUM_EVENTS);
31564064216a8433360745f69edddce19a606659163The Android Open Source Project        if (status == OK)
31664064216a8433360745f69edddce19a606659163The Android Open Source Project        {
31764064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Succeeded to create AP Connection module context - return pointer to it */
31864064216a8433360745f69edddce19a606659163The Android Open Source Project            return pAPConnection;
31964064216a8433360745f69edddce19a606659163The Android Open Source Project        }
32064064216a8433360745f69edddce19a606659163The Android Open Source Project        else /* Failed to create state machine */
32164064216a8433360745f69edddce19a606659163The Android Open Source Project        {
32264064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_OS_REPORT(("FATAL ERROR: apConn_create(): Error creating apConnSM - aborting\n"));
32364064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Free pre-allocated control block */
32464064216a8433360745f69edddce19a606659163The Android Open Source Project            utils_nullMemoryFree(hOs, pAPConnection, sizeof(apConn_t));
32564064216a8433360745f69edddce19a606659163The Android Open Source Project            return NULL;
32664064216a8433360745f69edddce19a606659163The Android Open Source Project        }
32764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
32864064216a8433360745f69edddce19a606659163The Android Open Source Project    else /* Failed to allocate control block */
32964064216a8433360745f69edddce19a606659163The Android Open Source Project    {
33064064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("FATAL ERROR: apConn_create(): Error allocating cb - aborting\n"));
33164064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
33264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
33364064216a8433360745f69edddce19a606659163The Android Open Source Project}
33464064216a8433360745f69edddce19a606659163The Android Open Source Project
33564064216a8433360745f69edddce19a606659163The Android Open Source Project/**
33664064216a8433360745f69edddce19a606659163The Android Open Source Project*
33764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_unload
33864064216a8433360745f69edddce19a606659163The Android Open Source Project*
33964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
34064064216a8433360745f69edddce19a606659163The Android Open Source Project*
34164064216a8433360745f69edddce19a606659163The Android Open Source Project* Finish AP Connection module work:
34264064216a8433360745f69edddce19a606659163The Android Open Source Project* release the allocation for state machine and internal variables.
34364064216a8433360745f69edddce19a606659163The Android Open Source Project*
34464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
34564064216a8433360745f69edddce19a606659163The Android Open Source Project*
34664064216a8433360745f69edddce19a606659163The Android Open Source Project*
34764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
34864064216a8433360745f69edddce19a606659163The Android Open Source Project*
34964064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
35064064216a8433360745f69edddce19a606659163The Android Open Source Project*
35164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
35264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
35364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_unload(TI_HANDLE hAPConnection)
35464064216a8433360745f69edddce19a606659163The Android Open Source Project{
35564064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection;
35664064216a8433360745f69edddce19a606659163The Android Open Source Project
35764064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
35864064216a8433360745f69edddce19a606659163The Android Open Source Project
35964064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection = (apConn_t *)hAPConnection;
36064064216a8433360745f69edddce19a606659163The Android Open Source Project
36164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Unload state machine */
36264064216a8433360745f69edddce19a606659163The Android Open Source Project    fsm_Unload(pAPConnection->hOs, pAPConnection->apConnSM);
36364064216a8433360745f69edddce19a606659163The Android Open Source Project
36464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Free pre-allocated control block */
36564064216a8433360745f69edddce19a606659163The Android Open Source Project    utils_nullMemoryFree(pAPConnection->hOs, pAPConnection, sizeof(apConn_t));
36664064216a8433360745f69edddce19a606659163The Android Open Source Project
36764064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
36864064216a8433360745f69edddce19a606659163The Android Open Source Project}
36964064216a8433360745f69edddce19a606659163The Android Open Source Project
37064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
37164064216a8433360745f69edddce19a606659163The Android Open Source Project*
37264064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_config
37364064216a8433360745f69edddce19a606659163The Android Open Source Project*
37464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
37564064216a8433360745f69edddce19a606659163The Android Open Source Project*
37664064216a8433360745f69edddce19a606659163The Android Open Source Project* Prepare AP Connection module to work: initiate internal variables, start state machine
37764064216a8433360745f69edddce19a606659163The Android Open Source Project*
37864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
37964064216a8433360745f69edddce19a606659163The Android Open Source Project*
38064064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hCurrAP - Current BSS handle \n
38164064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hRoamMng - Roaming Manager handle  \n
38264064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hSme - SME context  \n
38364064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hPowerMgr - Power Manager context  \n
38464064216a8433360745f69edddce19a606659163The Android Open Source Project*
38564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
38664064216a8433360745f69edddce19a606659163The Android Open Source Project*
38764064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK on failure.
38864064216a8433360745f69edddce19a606659163The Android Open Source Project*
38964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
39064064216a8433360745f69edddce19a606659163The Android Open Source Project*/
39164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_config(TI_HANDLE hAPConnection,
39264064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hReport,
39364064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hCurrAP,
39464064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hRoamMng,
39564064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hSme,
39664064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hSiteMgr,
39764064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hExcMngr,
39864064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hConnSm,
39964064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hPrivacy,
40064064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hQos,
40164064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hCtrl,
40264064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hEvHandler,
40364064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hScr,
40464064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hAssoc,
40564064216a8433360745f69edddce19a606659163The Android Open Source Project                        TI_HANDLE hRegulatoryDomain,
40664064216a8433360745f69edddce19a606659163The Android Open Source Project                        apConnParams_t *pApConnParams)
40764064216a8433360745f69edddce19a606659163The Android Open Source Project{
40864064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
40964064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS status;
41064064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32  index;
41164064216a8433360745f69edddce19a606659163The Android Open Source Project
41264064216a8433360745f69edddce19a606659163The Android Open Source Project    /** State Machine matrix */
41364064216a8433360745f69edddce19a606659163The Android Open Source Project    fsm_actionCell_t apConn_matrix[AP_CONNECT_NUM_STATES][AP_CONNECT_NUM_EVENTS] =
41464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
41564064216a8433360745f69edddce19a606659163The Android Open Source Project        /* next state and actions for IDLE state */
41664064216a8433360745f69edddce19a606659163The Android Open Source Project        {   {AP_CONNECT_STATE_IDLE, apConn_smUnexpected},               /* PREPARE_FOR_ROAMING  */
41764064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_IDLE, apConn_smUnexpected},               /* FINISHED_OK          */
41864064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_IDLE, apConn_smUnexpected},               /* FINISHED_NOT_OK      */
41964064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_IDLE, apConn_smUnexpected},               /* RETAIN_CURRENT_AP    */
42064064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_ROAM,apConn_startWaitingForTriggers},/* START                */
42164064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_IDLE, apConn_smUnexpected},               /* START_ROAM           */
42264064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_IDLE, apConn_smUnexpected},               /* START_SWITCH_CHANNEL */
42364064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_IDLE, apConn_smNop},                      /* FINISHED_SWITCH_CH   */
42464064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_IDLE, apConn_smNop},                      /* FINISHED_HAND_OVER   */
42564064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_IDLE, apConn_smUnexpected}                /* STOP                 */
42664064216a8433360745f69edddce19a606659163The Android Open Source Project        },
42764064216a8433360745f69edddce19a606659163The Android Open Source Project        /* next state and actions for WAIT_ROAM state */
42864064216a8433360745f69edddce19a606659163The Android Open Source Project        {   {AP_CONNECT_STATE_WAIT_CONNECT_CMD,apConn_configureDriverBeforeRoaming},/* PREPARE_FOR_ROAMING  */
42964064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected},      /* FINISHED_OK          */
43064064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected},      /* FINISHED_NOT_OK      */
43164064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected},      /* RETAIN_CURRENT_AP    */
43264064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected},      /* START                */
43364064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected},      /* START_ROAM           */
43464064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smNop},     /* START_SWITCH_CHANNEL */
43564064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected},      /* FINISHED_SWITCH_CH   */
43664064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_ROAM, apConn_smUnexpected},      /* FINISHED_HAND_OVER   */
43764064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_stopConnection} /* STOP                 */
43864064216a8433360745f69edddce19a606659163The Android Open Source Project        },
43964064216a8433360745f69edddce19a606659163The Android Open Source Project        /* next state and actions for SWITCHING_CHANNEL state */
44064064216a8433360745f69edddce19a606659163The Android Open Source Project        {   {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected},  /* PREPARE_FOR_ROAMING  */
44164064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected},  /* FINISHED_OK          */
44264064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected},  /* FINISHED_NOT_OK      */
44364064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected},  /* RETAIN_CURRENT_AP    */
44464064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected},  /* START                */
44564064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected},  /* START_ROAM           */
44664064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_swChFinished},  /* START_SWITCH_CHANNEL */
44764064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_ROAM, apConn_smNop},                 /* FINISHED_SWITCH_CH   */
44864064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_SWITCHING_CHANNEL, apConn_smUnexpected},  /* FINISHED_HAND_OVER   */
44964064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_stopConnection}     /* STOP                 */
45064064216a8433360745f69edddce19a606659163The Android Open Source Project        },
45164064216a8433360745f69edddce19a606659163The Android Open Source Project        /* next state and actions for WAIT_CONNECT_CMD state */
45264064216a8433360745f69edddce19a606659163The Android Open Source Project        {   {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected},   /* PREPARE_FOR_ROAMING  */
45364064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected},   /* FINISHED_OK          */
45464064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected},   /* FINISHED_NOT_OK      */
45564064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_ROAM, apConn_retainAP},              /* RETAIN_CURRENT_AP    */
45664064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected},   /* START                */
45764064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_requestCCKM},    /* START_ROAM           */
45864064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected},   /* START_SWITCH_CHANNEL */
45964064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected},   /* FINISHED_SWITCH_CH   */
46064064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_smUnexpected},   /* FINISHED_HAND_OVER   */
46164064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_stopConnection}     /* STOP                 */
46264064216a8433360745f69edddce19a606659163The Android Open Source Project        },
46364064216a8433360745f69edddce19a606659163The Android Open Source Project        /* next state and actions for PREPARE_HAND_OFF state */
46464064216a8433360745f69edddce19a606659163The Android Open Source Project        {   {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected},   /* PREPARE_FOR_ROAMING  */
46564064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected},   /* FINISHED_OK          */
46664064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected},   /* FINISHED_NOT_OK      */
46764064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected},   /* RETAIN_CURRENT_AP    */
46864064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected},   /* START                */
46964064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected},   /* START_ROAM           */
47064064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected},   /* START_SWITCH_CHANNEL */
47164064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_PREPARE_HAND_OFF, apConn_smUnexpected},   /* FINISHED_SWITCH_CH   */
47264064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_CONNECTING, apConn_invokeConnectionToNewAp},/* FINISHED_HAND_OVER */
47364064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_stopConnection}     /* STOP                 */
47464064216a8433360745f69edddce19a606659163The Android Open Source Project        },
47564064216a8433360745f69edddce19a606659163The Android Open Source Project        /* next state and actions for CONNECTING state */
47664064216a8433360745f69edddce19a606659163The Android Open Source Project        {   {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected},         /* PREPARE_FOR_ROAMING  */
47764064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_REESTABLISH_VOICE,apConn_handleTspecReneg},/* FINISHED_OK             */
47864064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_reportConnFail}, /* FINISHED_NOT_OK      */
47964064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected},         /* RETAIN_CURRENT_AP    */
48064064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected},         /* START                */
48164064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected},         /* START_ROAM           */
48264064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected},         /* START_SWITCH_CHANNEL */
48364064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected},         /* FINISHED_SWITCH_CH   */
48464064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_CONNECTING, apConn_smUnexpected},         /* FINISHED_HAND_OVER   */
48564064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_stopConnection}     /* STOP                 */
48664064216a8433360745f69edddce19a606659163The Android Open Source Project        },
48764064216a8433360745f69edddce19a606659163The Android Open Source Project        /* next state and actions for DISCONNECTING state */
48864064216a8433360745f69edddce19a606659163The Android Open Source Project        {   {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop},         /* PREPARE_FOR_ROAMING  */
48964064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_IDLE, apConn_reportDisconnected},     /* FINISHED_OK          */
49064064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_IDLE, apConn_reportDisconnected},     /* FINISHED_NOT_OK      */
49164064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop},         /* RETAIN_CURRENT_AP    */
49264064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_smUnexpected},  /* START                */
49364064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop},         /* START_ROAM           */
49464064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop},         /* START_SWITCH_CHANNEL */
49564064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop},         /* FINISHED_SWITCH_CH   */
49664064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop},         /* FINISHED_HAND_OVER   */
49764064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_smNop},         /* STOP                 */
49864064216a8433360745f69edddce19a606659163The Android Open Source Project        },
49964064216a8433360745f69edddce19a606659163The Android Open Source Project        /* next state and actions for REESTABLISH_VOICE state */
50064064216a8433360745f69edddce19a606659163The Android Open Source Project        {   {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected},  /* PREPARE_FOR_ROAMING  */
50164064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_ROAM,apConn_connectedToNewAP},       /* FINISHED_OK          */
50264064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_WAIT_CONNECT_CMD, apConn_reportConnFail}, /* FINISHED_NOT_OK      */
50364064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected},  /* RETAIN_CURRENT_AP    */
50464064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected},  /* START                */
50564064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected},  /* START_ROAM           */
50664064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected},  /* START_SWITCH_CHANNEL */
50764064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected},  /* FINISHED_SWITCH_CH   */
50864064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_REESTABLISH_VOICE, apConn_smUnexpected},  /* FINISHED_HAND_OVER   */
50964064216a8433360745f69edddce19a606659163The Android Open Source Project            {AP_CONNECT_STATE_DISCONNECTING, apConn_stopConnection}     /* STOP                 */
51064064216a8433360745f69edddce19a606659163The Android Open Source Project        }
51164064216a8433360745f69edddce19a606659163The Android Open Source Project    };
51264064216a8433360745f69edddce19a606659163The Android Open Source Project
51364064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
51464064216a8433360745f69edddce19a606659163The Android Open Source Project
51564064216a8433360745f69edddce19a606659163The Android Open Source Project    status = fsm_Config(pAPConnection->apConnSM,
51664064216a8433360745f69edddce19a606659163The Android Open Source Project                        (fsm_Matrix_t)&apConn_matrix[0][0],
51764064216a8433360745f69edddce19a606659163The Android Open Source Project                        AP_CONNECT_NUM_STATES,
51864064216a8433360745f69edddce19a606659163The Android Open Source Project                        AP_CONNECT_NUM_EVENTS,
51964064216a8433360745f69edddce19a606659163The Android Open Source Project                        (fsm_eventActivation_t)apConn_smEvent,
52064064216a8433360745f69edddce19a606659163The Android Open Source Project                        pAPConnection->hOs);
52164064216a8433360745f69edddce19a606659163The Android Open Source Project
52264064216a8433360745f69edddce19a606659163The Android Open Source Project
52364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (status == OK)
52464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
52564064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->currentState = AP_CONNECT_STATE_IDLE;
52664064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->firstAttempt2Roam = TRUE;
52764064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hReport = hReport;
52864064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hCurrBSS = hCurrAP;
52964064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hRoamMng = hRoamMng;
53064064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hSme = hSme;
53164064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hSiteMgr = hSiteMgr;
53264064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hExcMngr = hExcMngr;
53364064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hConnSm = hConnSm;
53464064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hPrivacy = hPrivacy;
53564064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hQos = hQos;
53664064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hRateAdapt = ((ctrlData_t *)hCtrl)->pRateAdaptation;
53764064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hEvHandler = hEvHandler;
53864064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hScr = hScr;
53964064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hAssoc = hAssoc;
54064064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->hRegulatoryDomain = hRegulatoryDomain;
54164064216a8433360745f69edddce19a606659163The Android Open Source Project
54264064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamingEnabled = TRUE;
54364064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->reportStatusCallb = NULL;
54464064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamEventCallb = NULL;
54564064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->returnNeighborApsCallb = NULL;
54664064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->ignoreDeauthReason0 = pApConnParams->ignoreDeauthReason0;
54764064216a8433360745f69edddce19a606659163The Android Open Source Project
54864064216a8433360745f69edddce19a606659163The Android Open Source Project        for (index=ROAMING_TRIGGER_NONE; index<ROAMING_TRIGGER_LAST; index++)
54964064216a8433360745f69edddce19a606659163The Android Open Source Project        {
55064064216a8433360745f69edddce19a606659163The Android Open Source Project            pAPConnection->roamingTriggerEvents[index] = 0;
55164064216a8433360745f69edddce19a606659163The Android Open Source Project        }
55264064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamingSuccesfulHandoverNum = 0;
55364064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamingSuccesfulHandoverTotalNum = 0;
55464064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamingFailedHandoverNum = 0;
55564064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->retainCurrAPNum = 0;
55664064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->disconnectFromRoamMngrNum = 0;
55764064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->stopFromSmeNum = 0;
55864064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->txFailureThreshold = NO_ACK_DEFAULT_THRESHOLD;
55964064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->lowRateThreshold = LOW_RATE_DEFAULT_THRESHOLD;
56064064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->rssiThreshold = RSSI_DEFAULT_THRESHOLD;
56164064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->snrThreshold = SNR_DEFAULT_THRESHOLD;
56264064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->vsIElength = 0;
56364064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->isRssiTriggerMaskedOut = FALSE;
56464064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->isSnrTriggerMaskedOut = TRUE;
56564064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->islowRateTriggerMaskedOut = FALSE;
56664064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->isConsTxFailureMaskedOut = FALSE;
56764064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->removeKeys = TRUE;
56864064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->sendDeauthPacket = TRUE;       /* Default behavior is radio On - send DISASSOC frame */
56964064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->voiceTspecConfigured = FALSE;
57064064216a8433360745f69edddce19a606659163The Android Open Source Project		pAPConnection->videoTspecConfigured = FALSE;
57164064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->resetReportedRoamingStatistics = FALSE;
57264064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->reNegotiateTSPEC = FALSE;
57364064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->bNonRoamingDisAssocReason = FALSE;
57464064216a8433360745f69edddce19a606659163The Android Open Source Project
57564064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamingStartedTimestamp = 0;
57664064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->lastRoamingDelay = 0;
57764064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamingSuccesfulHandoverNum = 0;
57864064216a8433360745f69edddce19a606659163The Android Open Source Project
57964064216a8433360745f69edddce19a606659163The Android Open Source Project        return OK;
58064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
58164064216a8433360745f69edddce19a606659163The Android Open Source Project    else/* Unable to configure State Machine */
58264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
58364064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, ("FATAL ERROR: apConn_config(): Failed to configure sm\n"));
58464064216a8433360745f69edddce19a606659163The Android Open Source Project        return status;
58564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
58664064216a8433360745f69edddce19a606659163The Android Open Source Project}
58764064216a8433360745f69edddce19a606659163The Android Open Source Project
58864064216a8433360745f69edddce19a606659163The Android Open Source Project
58964064216a8433360745f69edddce19a606659163The Android Open Source Project/**
59064064216a8433360745f69edddce19a606659163The Android Open Source Project*
59164064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_isPsRequiredBeforeScan
59264064216a8433360745f69edddce19a606659163The Android Open Source Project*
59364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
59464064216a8433360745f69edddce19a606659163The Android Open Source Project*
59564064216a8433360745f69edddce19a606659163The Android Open Source Project* verify if the PS required before scan according if roaming triger is part of ROAMING_TRIGGER_LOW_QUALITY_GROUP
59664064216a8433360745f69edddce19a606659163The Android Open Source Project*
59764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
59864064216a8433360745f69edddce19a606659163The Android Open Source Project*
59964064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hAPConnection - pointer to module\n
60064064216a8433360745f69edddce19a606659163The Android Open Source Project*
60164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
60264064216a8433360745f69edddce19a606659163The Android Open Source Project*
60364064216a8433360745f69edddce19a606659163The Android Open Source Project*  TRUE or FALSE.
60464064216a8433360745f69edddce19a606659163The Android Open Source Project*
60564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
60664064216a8433360745f69edddce19a606659163The Android Open Source Project*/
60764064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOLEAN apConn_isPsRequiredBeforeScan(TI_HANDLE hAPConnection)
60864064216a8433360745f69edddce19a606659163The Android Open Source Project{
60964064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t * pAPConnection = (apConn_t *) hAPConnection;
61064064216a8433360745f69edddce19a606659163The Android Open Source Project
61164064216a8433360745f69edddce19a606659163The Android Open Source Project	/* check if part of ROAMING_TRIGGER_LOW_QUALITY_GROUP */
61264064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pAPConnection->roamReason <= ROAMING_TRIGGER_MAX_TX_RETRIES)
61364064216a8433360745f69edddce19a606659163The Android Open Source Project		return TRUE;
61464064216a8433360745f69edddce19a606659163The Android Open Source Project	else
61564064216a8433360745f69edddce19a606659163The Android Open Source Project		return FALSE;
61664064216a8433360745f69edddce19a606659163The Android Open Source Project}
61764064216a8433360745f69edddce19a606659163The Android Open Source Project
61864064216a8433360745f69edddce19a606659163The Android Open Source Project/**
61964064216a8433360745f69edddce19a606659163The Android Open Source Project*
62064064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_ConnCompleteInd
62164064216a8433360745f69edddce19a606659163The Android Open Source Project*
62264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
62364064216a8433360745f69edddce19a606659163The Android Open Source Project*
62464064216a8433360745f69edddce19a606659163The Android Open Source Project* Inform AP Connection about successful / unsuccessful completion
62564064216a8433360745f69edddce19a606659163The Android Open Source Project* of link establishing
62664064216a8433360745f69edddce19a606659163The Android Open Source Project*
62764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
62864064216a8433360745f69edddce19a606659163The Android Open Source Project*
62964064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - result - OK if successfully connected, NOK otherwise  \n
63064064216a8433360745f69edddce19a606659163The Android Open Source Project*
63164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
63264064216a8433360745f69edddce19a606659163The Android Open Source Project*
63364064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
63464064216a8433360745f69edddce19a606659163The Android Open Source Project*
63564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
63664064216a8433360745f69edddce19a606659163The Android Open Source Project*/
63764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_ConnCompleteInd(TI_HANDLE hAPConnection, mgmtStatus_e status, UINT32 uStatusCode)
63864064216a8433360745f69edddce19a606659163The Android Open Source Project{
63964064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
64064064216a8433360745f69edddce19a606659163The Android Open Source Project
64164064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
64264064216a8433360745f69edddce19a606659163The Android Open Source Project
64364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (status == STATUS_SUCCESSFUL)
64464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
64564064216a8433360745f69edddce19a606659163The Android Open Source Project        apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_OK, pAPConnection);
64664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
64764064216a8433360745f69edddce19a606659163The Android Open Source Project    else
64864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
64964064216a8433360745f69edddce19a606659163The Android Open Source Project        apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_NOT_OK, pAPConnection);
65064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
65164064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
65264064216a8433360745f69edddce19a606659163The Android Open Source Project}
65364064216a8433360745f69edddce19a606659163The Android Open Source Project
65464064216a8433360745f69edddce19a606659163The Android Open Source Project
65564064216a8433360745f69edddce19a606659163The Android Open Source Project/**
65664064216a8433360745f69edddce19a606659163The Android Open Source Project*
65764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_getRoamThresholds
65864064216a8433360745f69edddce19a606659163The Android Open Source Project*
65964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
66064064216a8433360745f69edddce19a606659163The Android Open Source Project*
66164064216a8433360745f69edddce19a606659163The Android Open Source Project* Used to query for the current roaming thresholds configuration
66264064216a8433360745f69edddce19a606659163The Android Open Source Project*
66364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
66464064216a8433360745f69edddce19a606659163The Android Open Source Project*
66564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hAPConnection - pointer to module\n
66664064216a8433360745f69edddce19a606659163The Android Open Source Project*  O   - pParam - pointer to buffer to store the thresholds\n
66764064216a8433360745f69edddce19a606659163The Android Open Source Project*
66864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
66964064216a8433360745f69edddce19a606659163The Android Open Source Project*
67064064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
67164064216a8433360745f69edddce19a606659163The Android Open Source Project*
67264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
67364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
67464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_getRoamThresholds(TI_HANDLE hAPConnection, roamingMngrThresholdsConfig_t *pParam)
67564064216a8433360745f69edddce19a606659163The Android Open Source Project{
67664064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t * pAPConnection = (apConn_t *) hAPConnection;
67764064216a8433360745f69edddce19a606659163The Android Open Source Project
67864064216a8433360745f69edddce19a606659163The Android Open Source Project    pParam->lowRssiThreshold = pAPConnection->rssiThreshold;
67964064216a8433360745f69edddce19a606659163The Android Open Source Project    pParam->lowSnrThreshold = pAPConnection->snrThreshold;
68064064216a8433360745f69edddce19a606659163The Android Open Source Project    pParam->txRateThreshold = pAPConnection->lowRateThreshold;
68164064216a8433360745f69edddce19a606659163The Android Open Source Project    pParam->dataRetryThreshold = pAPConnection->txFailureThreshold;
68264064216a8433360745f69edddce19a606659163The Android Open Source Project
68364064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_getRoamingParams(pAPConnection->hCurrBSS,
68464064216a8433360745f69edddce19a606659163The Android Open Source Project                             &pParam->numExpectedTbttForBSSLoss,
68564064216a8433360745f69edddce19a606659163The Android Open Source Project                             &pParam->lowQualityForBackgroungScanCondition,
68664064216a8433360745f69edddce19a606659163The Android Open Source Project                             &pParam->normalQualityForBackgroungScanCondition,
68764064216a8433360745f69edddce19a606659163The Android Open Source Project                             &pParam->rssiFilterWeight,
68864064216a8433360745f69edddce19a606659163The Android Open Source Project                             &pParam->snrFilterWeight);
68964064216a8433360745f69edddce19a606659163The Android Open Source Project
69064064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
69164064216a8433360745f69edddce19a606659163The Android Open Source Project}
69264064216a8433360745f69edddce19a606659163The Android Open Source Project
69364064216a8433360745f69edddce19a606659163The Android Open Source Project
69464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
69564064216a8433360745f69edddce19a606659163The Android Open Source Project*
69664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_setRoamThresholds
69764064216a8433360745f69edddce19a606659163The Android Open Source Project*
69864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
69964064216a8433360745f69edddce19a606659163The Android Open Source Project*
70064064216a8433360745f69edddce19a606659163The Android Open Source Project* Used to configure roaming thresholds
70164064216a8433360745f69edddce19a606659163The Android Open Source Project*
70264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
70364064216a8433360745f69edddce19a606659163The Android Open Source Project*
70464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pParam - pointer to type and details of configuration request\n
70564064216a8433360745f69edddce19a606659163The Android Open Source Project*
70664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
70764064216a8433360745f69edddce19a606659163The Android Open Source Project*
70864064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
70964064216a8433360745f69edddce19a606659163The Android Open Source Project*
71064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
71164064216a8433360745f69edddce19a606659163The Android Open Source Project*/
71264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_setRoamThresholds(TI_HANDLE hAPConnection, roamingMngrThresholdsConfig_t *pParam)
71364064216a8433360745f69edddce19a606659163The Android Open Source Project{
71464064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
71564064216a8433360745f69edddce19a606659163The Android Open Source Project
71664064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
71764064216a8433360745f69edddce19a606659163The Android Open Source Project
71864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* If low quality trigger threshold is set to 0 - this is the request to ignore this trigger */
71964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Otherwise store it */
72064064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pParam->lowRssiThreshold == (INT8)AP_CONNECT_TRIGGER_IGNORED)
72164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
72264064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->isRssiTriggerMaskedOut = TRUE;
72364064216a8433360745f69edddce19a606659163The Android Open Source Project        pParam->lowRssiThreshold = pAPConnection->rssiThreshold;
72464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
72564064216a8433360745f69edddce19a606659163The Android Open Source Project    else
72664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
72764064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->isRssiTriggerMaskedOut = FALSE;
72864064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->rssiThreshold = pParam->lowRssiThreshold;
72964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
73064064216a8433360745f69edddce19a606659163The Android Open Source Project
73164064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pParam->txRateThreshold == AP_CONNECT_TRIGGER_IGNORED)
73264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
73364064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->islowRateTriggerMaskedOut = TRUE;
73464064216a8433360745f69edddce19a606659163The Android Open Source Project        pParam->txRateThreshold = pAPConnection->lowRateThreshold;
73564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
73664064216a8433360745f69edddce19a606659163The Android Open Source Project    else
73764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
73864064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->islowRateTriggerMaskedOut = FALSE;
73964064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->lowRateThreshold = pParam->txRateThreshold;
74064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
74164064216a8433360745f69edddce19a606659163The Android Open Source Project
74264064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pParam->dataRetryThreshold == AP_CONNECT_TRIGGER_IGNORED)
74364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
74464064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->isConsTxFailureMaskedOut = TRUE;
74564064216a8433360745f69edddce19a606659163The Android Open Source Project        pParam->dataRetryThreshold = pAPConnection->txFailureThreshold;
74664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
74764064216a8433360745f69edddce19a606659163The Android Open Source Project    else
74864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
74964064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->isConsTxFailureMaskedOut = FALSE;
75064064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->txFailureThreshold = pParam->dataRetryThreshold;
75164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
75264064216a8433360745f69edddce19a606659163The Android Open Source Project
75364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pParam->rssiFilterWeight == (UINT8)AP_CONNECT_TRIGGER_IGNORED)
75464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
75564064216a8433360745f69edddce19a606659163The Android Open Source Project        pParam->rssiFilterWeight = RSSI_DEFAULT_WEIGHT;
75664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
75764064216a8433360745f69edddce19a606659163The Android Open Source Project
75864064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pParam->snrFilterWeight == (UINT8)AP_CONNECT_TRIGGER_IGNORED)
75964064216a8433360745f69edddce19a606659163The Android Open Source Project    {
76064064216a8433360745f69edddce19a606659163The Android Open Source Project        pParam->snrFilterWeight = SNR_DEFAULT_WEIGHT;
76164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
76264064216a8433360745f69edddce19a606659163The Android Open Source Project
76364064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->isSnrTriggerMaskedOut = FALSE;
76464064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->snrThreshold = pParam->lowSnrThreshold;
76564064216a8433360745f69edddce19a606659163The Android Open Source Project
76664064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_updateRoamingTriggers(pAPConnection->hCurrBSS, pParam);
76764064216a8433360745f69edddce19a606659163The Android Open Source Project
76864064216a8433360745f69edddce19a606659163The Android Open Source Project    rateAdaptation_configLowRateThrsh(pAPConnection->hRateAdapt,pParam->txRateThreshold);
76964064216a8433360745f69edddce19a606659163The Android Open Source Project
77064064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
77164064216a8433360745f69edddce19a606659163The Android Open Source Project}
77264064216a8433360745f69edddce19a606659163The Android Open Source Project
77364064216a8433360745f69edddce19a606659163The Android Open Source Project/**
77464064216a8433360745f69edddce19a606659163The Android Open Source Project*
77564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_registerRoamMngrCallb
77664064216a8433360745f69edddce19a606659163The Android Open Source Project*
77764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
77864064216a8433360745f69edddce19a606659163The Android Open Source Project*
77964064216a8433360745f69edddce19a606659163The Android Open Source Project* Used to store method of Roaming Manager in the internal database of AP Connection Module.
78064064216a8433360745f69edddce19a606659163The Android Open Source Project* If this function was never called, any roaming event would cause disconnect.
78164064216a8433360745f69edddce19a606659163The Android Open Source Project*
78264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
78364064216a8433360745f69edddce19a606659163The Android Open Source Project*
78464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - callbackType - type of callback \n
78564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - callbackFunction - pointer to callback \n
78664064216a8433360745f69edddce19a606659163The Android Open Source Project*
78764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
78864064216a8433360745f69edddce19a606659163The Android Open Source Project*
78964064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
79064064216a8433360745f69edddce19a606659163The Android Open Source Project*
79164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
79264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
79364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_registerRoamMngrCallb(TI_HANDLE hAPConnection,
79464064216a8433360745f69edddce19a606659163The Android Open Source Project                                       apConn_roamMngrCallb_t roamEventCallb,
79564064216a8433360745f69edddce19a606659163The Android Open Source Project                                       apConn_roamMngrCallb_t reportStatusCallb,
79664064216a8433360745f69edddce19a606659163The Android Open Source Project                                       apConn_roamMngrCallb_t returnNeighborApsCallb)
79764064216a8433360745f69edddce19a606659163The Android Open Source Project{
79864064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection;
79964064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_connStatus_t reportStatus;
80064064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
80164064216a8433360745f69edddce19a606659163The Android Open Source Project
80264064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
80364064216a8433360745f69edddce19a606659163The Android Open Source Project
80464064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection = (apConn_t *)hAPConnection;
80564064216a8433360745f69edddce19a606659163The Android Open Source Project
80664064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->roamEventCallb = roamEventCallb;
80764064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->reportStatusCallb = reportStatusCallb;
80864064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pAPConnection->roamingEnabled) && (pAPConnection->currentState != AP_CONNECT_STATE_IDLE))
80964064216a8433360745f69edddce19a606659163The Android Open Source Project    {
81064064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType   = ASSOC_ASSOCIATION_RESP_PARAM;
81164064216a8433360745f69edddce19a606659163The Android Open Source Project
81264064216a8433360745f69edddce19a606659163The Android Open Source Project        assoc_getParam(pAPConnection->hAssoc, &param);
81364064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.dataBuf = (char *)(param.content.applicationConfigBuffer.buffer);
81464064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.dataBufLength = param.content.applicationConfigBuffer.bufferSize;
81564064216a8433360745f69edddce19a606659163The Android Open Source Project
81664064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.status = CONN_STATUS_CONNECTED;
81764064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatusCallb(pAPConnection->hRoamMng, &reportStatus);
81864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
81964064216a8433360745f69edddce19a606659163The Android Open Source Project    ((apConn_t *)hAPConnection)->returnNeighborApsCallb = returnNeighborApsCallb;
82064064216a8433360745f69edddce19a606659163The Android Open Source Project
82164064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
82264064216a8433360745f69edddce19a606659163The Android Open Source Project}
82364064216a8433360745f69edddce19a606659163The Android Open Source Project
82464064216a8433360745f69edddce19a606659163The Android Open Source Project
82564064216a8433360745f69edddce19a606659163The Android Open Source Project/**
82664064216a8433360745f69edddce19a606659163The Android Open Source Project*
82764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_unregisterRoamMngrCallb
82864064216a8433360745f69edddce19a606659163The Android Open Source Project*
82964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
83064064216a8433360745f69edddce19a606659163The Android Open Source Project*
83164064216a8433360745f69edddce19a606659163The Android Open Source Project* Used to Erase methods of Roaming Manager from the internal database of AP Connection
83264064216a8433360745f69edddce19a606659163The Android Open Source Project* module. From the moment this function was called, any roaming event would cause disconnect.
83364064216a8433360745f69edddce19a606659163The Android Open Source Project*
83464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
83564064216a8433360745f69edddce19a606659163The Android Open Source Project*
83664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
83764064216a8433360745f69edddce19a606659163The Android Open Source Project*
83864064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
83964064216a8433360745f69edddce19a606659163The Android Open Source Project*
84064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
84164064216a8433360745f69edddce19a606659163The Android Open Source Project*/
84264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_unregisterRoamMngrCallb(TI_HANDLE hAPConnection)
84364064216a8433360745f69edddce19a606659163The Android Open Source Project{
84464064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection;
84564064216a8433360745f69edddce19a606659163The Android Open Source Project
84664064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
84764064216a8433360745f69edddce19a606659163The Android Open Source Project
84864064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection = (apConn_t *)hAPConnection;
84964064216a8433360745f69edddce19a606659163The Android Open Source Project
85064064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamEventCallb = NULL;
85164064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->reportStatusCallb = NULL;
85264064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->returnNeighborApsCallb = NULL;
85364064216a8433360745f69edddce19a606659163The Android Open Source Project
85464064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pAPConnection->currentState != AP_CONNECT_STATE_IDLE) && (pAPConnection->currentState != AP_CONNECT_STATE_WAIT_ROAM))
85564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
85664064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Roaming Manager is unregistering it's callbacks in the middle of roaming - disconnect */
85764064216a8433360745f69edddce19a606659163The Android Open Source Project        apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_STOP, pAPConnection);
85864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
85964064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
86064064216a8433360745f69edddce19a606659163The Android Open Source Project}
86164064216a8433360745f69edddce19a606659163The Android Open Source Project
86264064216a8433360745f69edddce19a606659163The Android Open Source Project
86364064216a8433360745f69edddce19a606659163The Android Open Source Project/**
86464064216a8433360745f69edddce19a606659163The Android Open Source Project*
86564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_disconnect
86664064216a8433360745f69edddce19a606659163The Android Open Source Project*
86764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
86864064216a8433360745f69edddce19a606659163The Android Open Source Project*
86964064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function when it fails to find candidate for roaming from
87064064216a8433360745f69edddce19a606659163The Android Open Source Project* one hand, and the connection with current AP is not possible from another.
87164064216a8433360745f69edddce19a606659163The Android Open Source Project*
87264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
87364064216a8433360745f69edddce19a606659163The Android Open Source Project*
87464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
87564064216a8433360745f69edddce19a606659163The Android Open Source Project*
87664064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
87764064216a8433360745f69edddce19a606659163The Android Open Source Project*
87864064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
87964064216a8433360745f69edddce19a606659163The Android Open Source Project*/
88064064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_disconnect(TI_HANDLE hAPConnection)
88164064216a8433360745f69edddce19a606659163The Android Open Source Project{
88264064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection;
88364064216a8433360745f69edddce19a606659163The Android Open Source Project
88464064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
88564064216a8433360745f69edddce19a606659163The Android Open Source Project
88664064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection = (apConn_t *)hAPConnection;
88764064216a8433360745f69edddce19a606659163The Android Open Source Project
88864064216a8433360745f69edddce19a606659163The Android Open Source Project    UPDATE_SEND_DEAUTH_PACKET_FLAG(pAPConnection->roamReason);
88964064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_STOP, pAPConnection);
89064064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->disconnectFromRoamMngrNum++;
89164064216a8433360745f69edddce19a606659163The Android Open Source Project
89264064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
89364064216a8433360745f69edddce19a606659163The Android Open Source Project}
89464064216a8433360745f69edddce19a606659163The Android Open Source Project
89564064216a8433360745f69edddce19a606659163The Android Open Source Project
89664064216a8433360745f69edddce19a606659163The Android Open Source Project/**
89764064216a8433360745f69edddce19a606659163The Android Open Source Project*
89864064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_getStaCapabilities
89964064216a8433360745f69edddce19a606659163The Android Open Source Project*
90064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
90164064216a8433360745f69edddce19a606659163The Android Open Source Project*
90264064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function during selection of new candidate for roaming.
90364064216a8433360745f69edddce19a606659163The Android Open Source Project* Returned are local Station capabilities (IEs) of quality and privacy, needed to
90464064216a8433360745f69edddce19a606659163The Android Open Source Project* evaluate AP sites as suitable for roaming.
90564064216a8433360745f69edddce19a606659163The Android Open Source Project*
90664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
90764064216a8433360745f69edddce19a606659163The Android Open Source Project*
90864064216a8433360745f69edddce19a606659163The Android Open Source Project*  O   - ie_list - station capabilities \n
90964064216a8433360745f69edddce19a606659163The Android Open Source Project*
91064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
91164064216a8433360745f69edddce19a606659163The Android Open Source Project*
91264064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
91364064216a8433360745f69edddce19a606659163The Android Open Source Project*
91464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
91564064216a8433360745f69edddce19a606659163The Android Open Source Project*/
91664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_getStaCapabilities(TI_HANDLE hAPConnection,
91764064216a8433360745f69edddce19a606659163The Android Open Source Project                                    apConn_staCapabilities_t *ie_list)
91864064216a8433360745f69edddce19a606659163The Android Open Source Project{
91964064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
92064064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_staCapabilities_t *pList;
92164064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
92264064216a8433360745f69edddce19a606659163The Android Open Source Project
92364064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
92464064216a8433360745f69edddce19a606659163The Android Open Source Project
92564064216a8433360745f69edddce19a606659163The Android Open Source Project        pList = ie_list;
92664064216a8433360745f69edddce19a606659163The Android Open Source Project
92764064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Get authentication suite type */
92864064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = RSN_EXT_AUTHENTICATION_MODE;
92964064216a8433360745f69edddce19a606659163The Android Open Source Project    rsn_getParam(pAPConnection->hPrivacy, &param);
93064064216a8433360745f69edddce19a606659163The Android Open Source Project
93164064216a8433360745f69edddce19a606659163The Android Open Source Project    switch (param.content.rsnExtAuthneticationMode)
93264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
93364064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_EXT_AUTH_MODE_OPEN:
93464064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->authMode = os802_11AuthModeOpen;
93564064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
93664064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_EXT_AUTH_MODE_SHARED_KEY:
93764064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->authMode = os802_11AuthModeShared;
93864064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
93964064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_EXT_AUTH_MODE_AUTO_SWITCH:
94064064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->authMode = os802_11AuthModeAutoSwitch;
94164064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
94264064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_EXT_AUTH_MODE_WPA:
94364064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->authMode = os802_11AuthModeWPA;
94464064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
94564064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_EXT_AUTH_MODE_WPAPSK:
94664064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->authMode = os802_11AuthModeWPAPSK;
94764064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
94864064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_EXT_AUTH_MODE_WPANONE:
94964064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->authMode = os802_11AuthModeWPANone;
95064064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
95164064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_EXT_AUTH_MODE_WPA2:
95264064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->authMode = os802_11AuthModeWPA2;
95364064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
95464064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_EXT_AUTH_MODE_WPA2PSK:
95564064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->authMode = os802_11AuthModeWPA2PSK;
95664064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
95764064216a8433360745f69edddce19a606659163The Android Open Source Project        default:
95864064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->authMode = os802_11AuthModeOpen;
95964064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
96064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
96164064216a8433360745f69edddce19a606659163The Android Open Source Project
96264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Get encryption type */
96364064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = RSN_ENCRYPTION_STATUS_PARAM;
96464064216a8433360745f69edddce19a606659163The Android Open Source Project    rsn_getParam(pAPConnection->hPrivacy, &param);
96564064216a8433360745f69edddce19a606659163The Android Open Source Project
96664064216a8433360745f69edddce19a606659163The Android Open Source Project    switch (param.content.rsnEncryptionStatus)
96764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
96864064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_CIPHER_NONE:
96964064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->encryptionType = OS_ENCRYPTION_TYPE_NONE;
97064064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
97164064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_CIPHER_WEP:
97264064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_CIPHER_WEP104:
97364064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->encryptionType = OS_ENCRYPTION_TYPE_WEP;
97464064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
97564064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_CIPHER_TKIP:
97664064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_CIPHER_CKIP:
97764064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->encryptionType = OS_ENCRYPTION_TYPE_TKIP;
97864064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
97964064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_CIPHER_AES_WRAP:
98064064216a8433360745f69edddce19a606659163The Android Open Source Project        case RSN_CIPHER_AES_CCMP:
98164064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->encryptionType = OS_ENCRYPTION_TYPE_AES;
98264064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
98364064216a8433360745f69edddce19a606659163The Android Open Source Project        default:
98464064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->encryptionType = OS_ENCRYPTION_TYPE_NONE;
98564064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
98664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
98764064216a8433360745f69edddce19a606659163The Android Open Source Project
98864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Get supported rates */
98964064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_DESIRED_SUPPORTED_RATE_SET_PARAM;
99064064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_getParam(pAPConnection->hSiteMgr, &param);
99164064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryCopy(pAPConnection->hOs, (void *)param.content.siteMgrDesiredSupportedRateSet.ratesString, pList->rateMask, sizeof(OS_802_11_RATES_EX));
99264064216a8433360745f69edddce19a606659163The Android Open Source Project
99364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Get mode: 2.4G, 5G or Dual */
99464064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = SITE_MGR_DESIRED_DOT11_MODE_PARAM;
99564064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_getParam(pAPConnection->hSiteMgr, &param);
99664064216a8433360745f69edddce19a606659163The Android Open Source Project    pList->networkType = (OS_802_11_NETWORK_TYPE)param.content.siteMgrDot11Mode;
99764064216a8433360745f69edddce19a606659163The Android Open Source Project    switch(param.content.siteMgrDot11Mode)
99864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
99964064216a8433360745f69edddce19a606659163The Android Open Source Project        case DOT11_B_MODE:
100064064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->networkType = os802_11DS;
100164064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
100264064216a8433360745f69edddce19a606659163The Android Open Source Project        case DOT11_A_MODE:
100364064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->networkType = os802_11OFDM5;
100464064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
100564064216a8433360745f69edddce19a606659163The Android Open Source Project        case DOT11_G_MODE:
100664064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->networkType = os802_11OFDM24;
100764064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
100864064216a8433360745f69edddce19a606659163The Android Open Source Project        case DOT11_DUAL_MODE:
100964064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->networkType = os802_11Automode;
101064064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
101164064216a8433360745f69edddce19a606659163The Android Open Source Project        default:
101264064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->networkType = os802_11DS;
101364064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
101464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
101564064216a8433360745f69edddce19a606659163The Android Open Source Project
101664064216a8433360745f69edddce19a606659163The Android Open Source Project
101764064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Get EXC status */
101864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
101964064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = EXC_ENABLED;
102064064216a8433360745f69edddce19a606659163The Android Open Source Project    excMngr_getParam(pAPConnection->hExcMngr, &param);
102164064216a8433360745f69edddce19a606659163The Android Open Source Project    pList->excEnabled = (param.content.excEnabled==EXC_MODE_ENABLED)? TRUE : FALSE;
102264064216a8433360745f69edddce19a606659163The Android Open Source Project#else
102364064216a8433360745f69edddce19a606659163The Android Open Source Project    pList->excEnabled = FALSE;
102464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
102564064216a8433360745f69edddce19a606659163The Android Open Source Project
102664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Get QoS type */
102764064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = QOS_MNGR_ACTIVE_PROTOCOL;
102864064216a8433360745f69edddce19a606659163The Android Open Source Project    qosMngr_getParams(pAPConnection->hQos, &param);
102964064216a8433360745f69edddce19a606659163The Android Open Source Project    pList->qosEnabled = (param.content.qosSiteProtocol==NONE_QOS)? FALSE : TRUE;
103064064216a8433360745f69edddce19a606659163The Android Open Source Project
103164064216a8433360745f69edddce19a606659163The Android Open Source Project    pList->regDomain = REG_DOMAIN_FIXED;
103264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Get regulatory domain type */
103364064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = REGULATORY_DOMAIN_MANAGEMENT_CAPABILITY_ENABLED_PARAM;
103464064216a8433360745f69edddce19a606659163The Android Open Source Project    regulatoryDomain_getParam(pAPConnection->hRegulatoryDomain, &param);
103564064216a8433360745f69edddce19a606659163The Android Open Source Project    if (param.content.spectrumManagementEnabled)
103664064216a8433360745f69edddce19a606659163The Android Open Source Project    {   /* 802.11h is enabled (802.11h includes 802.11d) */
103764064216a8433360745f69edddce19a606659163The Android Open Source Project        pList->regDomain = REG_DOMAIN_80211H;
103864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
103964064216a8433360745f69edddce19a606659163The Android Open Source Project    else
104064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
104164064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = REGULATORY_DOMAIN_ENABLED_PARAM;
104264064216a8433360745f69edddce19a606659163The Android Open Source Project    regulatoryDomain_getParam(pAPConnection->hRegulatoryDomain, &param);
104364064216a8433360745f69edddce19a606659163The Android Open Source Project        if (param.content.regulatoryDomainEnabled)
104464064216a8433360745f69edddce19a606659163The Android Open Source Project        {   /* 802.11d is enabled */
104564064216a8433360745f69edddce19a606659163The Android Open Source Project            pList->regDomain = REG_DOMAIN_80211D;
104664064216a8433360745f69edddce19a606659163The Android Open Source Project        }
104764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
104864064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
104964064216a8433360745f69edddce19a606659163The Android Open Source Project}
105064064216a8433360745f69edddce19a606659163The Android Open Source Project
105164064216a8433360745f69edddce19a606659163The Android Open Source Project
105264064216a8433360745f69edddce19a606659163The Android Open Source Project/**
105364064216a8433360745f69edddce19a606659163The Android Open Source Project*
105464064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_connectToAP
105564064216a8433360745f69edddce19a606659163The Android Open Source Project*
105664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
105764064216a8433360745f69edddce19a606659163The Android Open Source Project*
105864064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function when it has completed the process of selection
105964064216a8433360745f69edddce19a606659163The Android Open Source Project* of new AP candidate for roaming. In addition, Roaming manager informs AP Connection
106064064216a8433360745f69edddce19a606659163The Android Open Source Project* module whether this is new AP or the current one, and whether to perform full
106164064216a8433360745f69edddce19a606659163The Android Open Source Project* roaming procedure or just to retain to current AP.
106264064216a8433360745f69edddce19a606659163The Android Open Source Project*
106364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
106464064216a8433360745f69edddce19a606659163The Android Open Source Project*
106564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - requestType - Connect to new AP, current AP (retain to current AP or re-connect) \n
106664064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - newAP - Pointer to parameters list of AP candidate for roaming \n
106764064216a8433360745f69edddce19a606659163The Android Open Source Project*
106864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
106964064216a8433360745f69edddce19a606659163The Android Open Source Project*
107064064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
107164064216a8433360745f69edddce19a606659163The Android Open Source Project*
107264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
107364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
107464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_connectToAP(TI_HANDLE hAPConnection,
107564064216a8433360745f69edddce19a606659163The Android Open Source Project                             bssEntry_t *newAP,
107664064216a8433360745f69edddce19a606659163The Android Open Source Project                             apConn_connRequest_t *request,
107764064216a8433360745f69edddce19a606659163The Android Open Source Project                             BOOL reNegotiateTspec)
107864064216a8433360745f69edddce19a606659163The Android Open Source Project{
107964064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
108064064216a8433360745f69edddce19a606659163The Android Open Source Project
108164064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
108264064216a8433360745f69edddce19a606659163The Android Open Source Project
108364064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->requestType = request->requestType;
108464064216a8433360745f69edddce19a606659163The Android Open Source Project
108564064216a8433360745f69edddce19a606659163The Android Open Source Project    switch (request->requestType)
108664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
108764064216a8433360745f69edddce19a606659163The Android Open Source Project        case AP_CONNECT_RETAIN_CURR_AP:
108864064216a8433360745f69edddce19a606659163The Android Open Source Project            apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_RETAIN_CURRENT_AP, pAPConnection);
108964064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
109064064216a8433360745f69edddce19a606659163The Android Open Source Project
109164064216a8433360745f69edddce19a606659163The Android Open Source Project        case AP_CONNECT_FULL_TO_AP:
109264064216a8433360745f69edddce19a606659163The Android Open Source Project            pAPConnection->removeKeys = TRUE;
109364064216a8433360745f69edddce19a606659163The Android Open Source Project            pAPConnection->newAP = newAP;
109464064216a8433360745f69edddce19a606659163The Android Open Source Project            pAPConnection->roamingFailedHandoverNum++;
109564064216a8433360745f69edddce19a606659163The Android Open Source Project            pAPConnection->reNegotiateTSPEC = reNegotiateTspec;
109664064216a8433360745f69edddce19a606659163The Android Open Source Project            apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_START_ROAM, pAPConnection);
109764064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
109864064216a8433360745f69edddce19a606659163The Android Open Source Project
109964064216a8433360745f69edddce19a606659163The Android Open Source Project        case AP_CONNECT_FAST_TO_AP:
110064064216a8433360745f69edddce19a606659163The Android Open Source Project        case AP_CONNECT_RECONNECT_CURR_AP:
110164064216a8433360745f69edddce19a606659163The Android Open Source Project            pAPConnection->removeKeys = FALSE;
110264064216a8433360745f69edddce19a606659163The Android Open Source Project            pAPConnection->newAP = newAP;
110364064216a8433360745f69edddce19a606659163The Android Open Source Project            pAPConnection->roamingFailedHandoverNum++;
110464064216a8433360745f69edddce19a606659163The Android Open Source Project            pAPConnection->reNegotiateTSPEC = reNegotiateTspec;
110564064216a8433360745f69edddce19a606659163The Android Open Source Project            apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_START_ROAM, pAPConnection);
110664064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
110764064216a8433360745f69edddce19a606659163The Android Open Source Project
110864064216a8433360745f69edddce19a606659163The Android Open Source Project        default:
110964064216a8433360745f69edddce19a606659163The Android Open Source Project            break;
111064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
111164064216a8433360745f69edddce19a606659163The Android Open Source Project
111264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* If there is vendor specific IE to attach to Assoc req, store it now */
111364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (request->dataBufLength > 0)
111464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
111564064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->vsIEbuf = request->dataBuf;
111664064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->vsIElength = request->dataBufLength;
111764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
111864064216a8433360745f69edddce19a606659163The Android Open Source Project
111964064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
112064064216a8433360745f69edddce19a606659163The Android Open Source Project}
112164064216a8433360745f69edddce19a606659163The Android Open Source Project
112264064216a8433360745f69edddce19a606659163The Android Open Source Project
112364064216a8433360745f69edddce19a606659163The Android Open Source Project/**
112464064216a8433360745f69edddce19a606659163The Android Open Source Project*
112564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_getBSSParams
112664064216a8433360745f69edddce19a606659163The Android Open Source Project*
112764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
112864064216a8433360745f69edddce19a606659163The Android Open Source Project*
112964064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function in order to evaluate the quality of new
113064064216a8433360745f69edddce19a606659163The Android Open Source Project* AP candidates for roaming against the quality of current AP.
113164064216a8433360745f69edddce19a606659163The Android Open Source Project* The function returns parameters of current AP.
113264064216a8433360745f69edddce19a606659163The Android Open Source Project*
113364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
113464064216a8433360745f69edddce19a606659163The Android Open Source Project*
113564064216a8433360745f69edddce19a606659163The Android Open Source Project*  O   - currentAP - Pointer to parameters list of current AP \n
113664064216a8433360745f69edddce19a606659163The Android Open Source Project*
113764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
113864064216a8433360745f69edddce19a606659163The Android Open Source Project*
113964064216a8433360745f69edddce19a606659163The Android Open Source Project*  Pointer to current BSS parameters database if successful, NULL otherwise.
114064064216a8433360745f69edddce19a606659163The Android Open Source Project*
114164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
114264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
114364064216a8433360745f69edddce19a606659163The Android Open Source ProjectbssEntry_t *apConn_getBSSParams(TI_HANDLE hAPConnection)
114464064216a8433360745f69edddce19a606659163The Android Open Source Project{
114564064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
114664064216a8433360745f69edddce19a606659163The Android Open Source Project    if (hAPConnection == NULL) /* Failed to allocate control block */
114764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
114864064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("FATAL ERROR: apConn_create(): Error allocating cb - aborting\n"));
114964064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
115064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
115164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
115264064216a8433360745f69edddce19a606659163The Android Open Source Project
115364064216a8433360745f69edddce19a606659163The Android Open Source Project    return currBSS_getBssInfo(((apConn_t *)hAPConnection)->hCurrBSS);
115464064216a8433360745f69edddce19a606659163The Android Open Source Project}
115564064216a8433360745f69edddce19a606659163The Android Open Source Project
115664064216a8433360745f69edddce19a606659163The Android Open Source Project
115764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
115864064216a8433360745f69edddce19a606659163The Android Open Source Project *
115964064216a8433360745f69edddce19a606659163The Android Open Source Project * apConn_isSiteBanned
116064064216a8433360745f69edddce19a606659163The Android Open Source Project *
116164064216a8433360745f69edddce19a606659163The Android Open Source Project * \b Description:
116264064216a8433360745f69edddce19a606659163The Android Open Source Project *
116364064216a8433360745f69edddce19a606659163The Android Open Source Project * Roaming Manager calls this function during selection of new candidate for roaming.
116464064216a8433360745f69edddce19a606659163The Android Open Source Project * Only APs which are not marked as banned are allowed to be selected.
116564064216a8433360745f69edddce19a606659163The Android Open Source Project *
116664064216a8433360745f69edddce19a606659163The Android Open Source Project * \b ARGS:
116764064216a8433360745f69edddce19a606659163The Android Open Source Project *
116864064216a8433360745f69edddce19a606659163The Android Open Source Project *  O   - givenAp - Pointer to BSSID to check if banned \n
116964064216a8433360745f69edddce19a606659163The Android Open Source Project *
117064064216a8433360745f69edddce19a606659163The Android Open Source Project * \b RETURNS:
117164064216a8433360745f69edddce19a606659163The Android Open Source Project *
117264064216a8433360745f69edddce19a606659163The Android Open Source Project *  TRUE if banned, FALSE otherwise.
117364064216a8433360745f69edddce19a606659163The Android Open Source Project *
117464064216a8433360745f69edddce19a606659163The Android Open Source Project * \sa
117564064216a8433360745f69edddce19a606659163The Android Open Source Project */
117664064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOL apConn_isSiteBanned(TI_HANDLE hAPConnection, macAddress_t * givenAp)
117764064216a8433360745f69edddce19a606659163The Android Open Source Project{
117864064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t * pAPConnection = (apConn_t *) hAPConnection;
117964064216a8433360745f69edddce19a606659163The Android Open Source Project
118064064216a8433360745f69edddce19a606659163The Android Open Source Project    return rsn_isSiteBanned(pAPConnection->hPrivacy, *givenAp);
118164064216a8433360745f69edddce19a606659163The Android Open Source Project}
118264064216a8433360745f69edddce19a606659163The Android Open Source Project
118364064216a8433360745f69edddce19a606659163The Android Open Source Project
118464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
118564064216a8433360745f69edddce19a606659163The Android Open Source Project*
118664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_getPreAuthAPStatus
118764064216a8433360745f69edddce19a606659163The Android Open Source Project*
118864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
118964064216a8433360745f69edddce19a606659163The Android Open Source Project*
119064064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function during selection of new candidate for roaming.
119164064216a8433360745f69edddce19a606659163The Android Open Source Project* Among all APs with good quality, those who were pre-authenticated are preferred.
119264064216a8433360745f69edddce19a606659163The Android Open Source Project*
119364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
119464064216a8433360745f69edddce19a606659163The Android Open Source Project*
119564064216a8433360745f69edddce19a606659163The Android Open Source Project*  O   - givenAp - Pointer to BSSID to check the pre-authenticated status for \n
119664064216a8433360745f69edddce19a606659163The Android Open Source Project*
119764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
119864064216a8433360745f69edddce19a606659163The Android Open Source Project*
119964064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
120064064216a8433360745f69edddce19a606659163The Android Open Source Project*
120164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
120264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
120364064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOL apConn_getPreAuthAPStatus(TI_HANDLE hAPConnection,
120464064216a8433360745f69edddce19a606659163The Android Open Source Project                              macAddress_t *givenAp)
120564064216a8433360745f69edddce19a606659163The Android Open Source Project{
120664064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
120745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    paramInfoPartial_t   param;
120864064216a8433360745f69edddce19a606659163The Android Open Source Project
120964064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
121064064216a8433360745f69edddce19a606659163The Android Open Source Project
121164064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = RSN_PRE_AUTH_STATUS;
121264064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryCopy(pAPConnection->hOs, (void *)param.content.rsnApMac.addr, (void *)givenAp->addr, MAC_ADDR_LEN);
121345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    rsn_getParamPartial(pAPConnection->hPrivacy, &param);
121464064216a8433360745f69edddce19a606659163The Android Open Source Project
121564064216a8433360745f69edddce19a606659163The Android Open Source Project    return param.content.rsnPreAuthStatus;
121664064216a8433360745f69edddce19a606659163The Android Open Source Project}
121764064216a8433360745f69edddce19a606659163The Android Open Source Project
121864064216a8433360745f69edddce19a606659163The Android Open Source Project
121964064216a8433360745f69edddce19a606659163The Android Open Source Project/**
122064064216a8433360745f69edddce19a606659163The Android Open Source Project*
122164064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_preAuthenticate
122264064216a8433360745f69edddce19a606659163The Android Open Source Project*
122364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
122464064216a8433360745f69edddce19a606659163The Android Open Source Project*
122564064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function periodically in order to update the list
122664064216a8433360745f69edddce19a606659163The Android Open Source Project* of pre-authenticated APs. The list is managed by WLAN driver and required
122764064216a8433360745f69edddce19a606659163The Android Open Source Project* by Roaming Manager during selection of roaming candidate process.
122864064216a8433360745f69edddce19a606659163The Android Open Source Project*
122964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
123064064216a8433360745f69edddce19a606659163The Android Open Source Project*
123164064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - listAPs - List of APs to pre-authenticate \n
123264064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - sizeOfList - Size of list of APs to pre-authenticate \n
123364064216a8433360745f69edddce19a606659163The Android Open Source Project*
123464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
123564064216a8433360745f69edddce19a606659163The Android Open Source Project*
123664064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
123764064216a8433360745f69edddce19a606659163The Android Open Source Project*
123864064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
123964064216a8433360745f69edddce19a606659163The Android Open Source Project*/
124045544f73189f4649d4afb21a0dab72cd70971e2fDmitry ShmidtTI_STATUS apConn_preAuthenticate(TI_HANDLE hAPConnection, bssList_t *listAPs, UINT8 listAPs_numOfEntries)
124164064216a8433360745f69edddce19a606659163The Android Open Source Project{
124264064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
124364064216a8433360745f69edddce19a606659163The Android Open Source Project    bssidList4PreAuth_t apList;
124464064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32              listIndex, apListIndex;
124564064216a8433360745f69edddce19a606659163The Android Open Source Project    bssEntry_t          *pCurrentAP;
124664064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8               *pRsnIEs;
124764064216a8433360745f69edddce19a606659163The Android Open Source Project
124864064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
124964064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((hAPConnection == NULL) || (listAPs == NULL))
125064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
125164064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("FATAL ERROR: AP Connection context is not initiated\n"));
125264064216a8433360745f69edddce19a606659163The Android Open Source Project        return NOK;
125364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
125464064216a8433360745f69edddce19a606659163The Android Open Source Project
125564064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pAPConnection->hReport, SITE_MGR_MODULE_LOG, ("apConn_reserveResources \n"));
125664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
125764064216a8433360745f69edddce19a606659163The Android Open Source Project
125845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt	if (listAPs_numOfEntries != 0) {
125945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt		for (listIndex=0, apListIndex=0; listIndex<listAPs->numOfEntries; listIndex++)
126045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt		{
126145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt			os_memoryCopy(pAPConnection->hOs, &(apList.bssidList[apListIndex].bssId),
126245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt						  (void *)listAPs->BSSList[listIndex].BSSID.addr, MAC_ADDR_LEN);
126345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
126445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt			/* search in the buffer pointer to the beginning of the
126545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt				RSN IE according to the IE ID */
126645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt			if (!parseIeBuffer(pAPConnection->hOs, listAPs->BSSList[listIndex].pBuffer, listAPs->BSSList[listIndex].bufferLength, RSN_IE_ID, &pRsnIEs, NULL, 0))
126745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt			{
126845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt				WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
126945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt									  ("apConn_preAuthenticate, no RSN IE was found \n"));
127045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt				WLAN_REPORT_HEX_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
127145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt									  listAPs->BSSList[listIndex].pBuffer, listAPs->BSSList[listIndex].bufferLength);
127245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
127345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt				continue;
127445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt			}
127545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
127645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt			apList.bssidList[apListIndex].pRsnIEs = (dot11_RSN_t*)pRsnIEs;
127745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt			apList.bssidList[apListIndex].rsnIeLen = apList.bssidList[apListIndex].pRsnIEs->hdr.eleLen+2;
127845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt			apListIndex++;
127945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt		}
128045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt	}
128145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt        else
128264064216a8433360745f69edddce19a606659163The Android Open Source Project        {
128345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt           listIndex=0;
128445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt           apListIndex=0;
128545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt         }
128664064216a8433360745f69edddce19a606659163The Android Open Source Project
128764064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Start pre-auth after any Conn succ (including first),
128864064216a8433360745f69edddce19a606659163The Android Open Source Project    and not only when a New BSSID was added, in order to save/refresh
128964064216a8433360745f69edddce19a606659163The Android Open Source Project    PMKID of the current AP.*/
129064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
129164064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Add the current BSSID to the list */
129264064216a8433360745f69edddce19a606659163The Android Open Source Project        pCurrentAP = apConn_getBSSParams(pAPConnection);
129364064216a8433360745f69edddce19a606659163The Android Open Source Project        os_memoryCopy(pAPConnection->hOs, &(apList.bssidList[apListIndex].bssId),
129464064216a8433360745f69edddce19a606659163The Android Open Source Project                      (void *)pCurrentAP->BSSID.addr, MAC_ADDR_LEN);
129564064216a8433360745f69edddce19a606659163The Android Open Source Project        /* search in the buffer pointer to the beginning of the
129664064216a8433360745f69edddce19a606659163The Android Open Source Project            RSN IE according to the IE ID */
129764064216a8433360745f69edddce19a606659163The Android Open Source Project
129864064216a8433360745f69edddce19a606659163The Android Open Source Project        if (!parseIeBuffer(pAPConnection->hOs, pCurrentAP->pBuffer, pCurrentAP->bufferLength, RSN_IE_ID, &pRsnIEs, NULL, 0))
129964064216a8433360745f69edddce19a606659163The Android Open Source Project        {
130064064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_REPORT_ERROR(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
130164064216a8433360745f69edddce19a606659163The Android Open Source Project                                  ("apConn_preAuthenticate, no RSN IE was found in the current BSS, BSSID=0x%x-0x%x-0x%x-0x%x-0x%x-0x%x \n",
130264064216a8433360745f69edddce19a606659163The Android Open Source Project                                   pCurrentAP->BSSID.addr[0], pCurrentAP->BSSID.addr[1], pCurrentAP->BSSID.addr[2],
130364064216a8433360745f69edddce19a606659163The Android Open Source Project                                   pCurrentAP->BSSID.addr[3], pCurrentAP->BSSID.addr[4], pCurrentAP->BSSID.addr[5]));
130464064216a8433360745f69edddce19a606659163The Android Open Source Project            HexDumpData(pCurrentAP->pBuffer, pCurrentAP->bufferLength);
130564064216a8433360745f69edddce19a606659163The Android Open Source Project            apList.bssidList[apListIndex].pRsnIEs = NULL;
130664064216a8433360745f69edddce19a606659163The Android Open Source Project            apList.bssidList[apListIndex].rsnIeLen = 0;
130764064216a8433360745f69edddce19a606659163The Android Open Source Project        }
130864064216a8433360745f69edddce19a606659163The Android Open Source Project        else
130964064216a8433360745f69edddce19a606659163The Android Open Source Project        {
131064064216a8433360745f69edddce19a606659163The Android Open Source Project            apList.bssidList[apListIndex].pRsnIEs = (dot11_RSN_t*)pRsnIEs;
131164064216a8433360745f69edddce19a606659163The Android Open Source Project            apList.bssidList[apListIndex].rsnIeLen = apList.bssidList[apListIndex].pRsnIEs->hdr.eleLen+2;
131264064216a8433360745f69edddce19a606659163The Android Open Source Project        }
131364064216a8433360745f69edddce19a606659163The Android Open Source Project        apList.NumOfItems = apListIndex+1;
131464064216a8433360745f69edddce19a606659163The Android Open Source Project        rsn_startPreAuth(pAPConnection->hPrivacy, &apList);
131564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
131664064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
131764064216a8433360745f69edddce19a606659163The Android Open Source Project}
131864064216a8433360745f69edddce19a606659163The Android Open Source Project
131964064216a8433360745f69edddce19a606659163The Android Open Source Project
132064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
132164064216a8433360745f69edddce19a606659163The Android Open Source Project*
132264064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_prepareToRoaming
132364064216a8433360745f69edddce19a606659163The Android Open Source Project*
132464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
132564064216a8433360745f69edddce19a606659163The Android Open Source Project*
132664064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager calls this function when roaming event is received and Roaming Manager
132764064216a8433360745f69edddce19a606659163The Android Open Source Project* wishes to start the roaming process, thus want to prevent scan and measurement in the
132864064216a8433360745f69edddce19a606659163The Android Open Source Project* system. The function will return OK if the allocation is performed, PEND if the
132964064216a8433360745f69edddce19a606659163The Android Open Source Project* allocation is started, NOK in case the allocation is not possible.
133064064216a8433360745f69edddce19a606659163The Android Open Source Project* In case of successful allocation, Roaming Manager will be informed via callback about
133164064216a8433360745f69edddce19a606659163The Android Open Source Project* the end of the allocation.
133264064216a8433360745f69edddce19a606659163The Android Open Source Project*
133364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
133464064216a8433360745f69edddce19a606659163The Android Open Source Project*
133564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - reason - the reason for roaming \n
133664064216a8433360745f69edddce19a606659163The Android Open Source Project*
133764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
133864064216a8433360745f69edddce19a606659163The Android Open Source Project*
133964064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
134064064216a8433360745f69edddce19a606659163The Android Open Source Project*
134164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
134264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
134364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_prepareToRoaming(TI_HANDLE hAPConnection, apConn_roamingTrigger_e reason)
134464064216a8433360745f69edddce19a606659163The Android Open Source Project{
134564064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
134664064216a8433360745f69edddce19a606659163The Android Open Source Project
134764064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
134864064216a8433360745f69edddce19a606659163The Android Open Source Project
134964064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->roamReason = reason;
135064064216a8433360745f69edddce19a606659163The Android Open Source Project
135164064216a8433360745f69edddce19a606659163The Android Open Source Project    return apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_PREPARE_FOR_ROAMING, pAPConnection);
135264064216a8433360745f69edddce19a606659163The Android Open Source Project}
135364064216a8433360745f69edddce19a606659163The Android Open Source Project
135464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
135564064216a8433360745f69edddce19a606659163The Android Open Source Project*
135664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_indicateSwitchChannelInProgress
135764064216a8433360745f69edddce19a606659163The Android Open Source Project*
135864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
135964064216a8433360745f69edddce19a606659163The Android Open Source Project*
136064064216a8433360745f69edddce19a606659163The Android Open Source Project* This function is called when switch channel process is started; it will trigger
136164064216a8433360745f69edddce19a606659163The Android Open Source Project* AP Connection state machine from 'Wait for roaming start' to 'Switch channel in progress'
136264064216a8433360745f69edddce19a606659163The Android Open Source Project* state.
136364064216a8433360745f69edddce19a606659163The Android Open Source Project*
136464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
136564064216a8433360745f69edddce19a606659163The Android Open Source Project*
136664064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - reason - the reason for roaming \n
136764064216a8433360745f69edddce19a606659163The Android Open Source Project*
136864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
136964064216a8433360745f69edddce19a606659163The Android Open Source Project*
137064064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
137164064216a8433360745f69edddce19a606659163The Android Open Source Project*
137264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
137364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
137464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_indicateSwitchChannelInProgress(TI_HANDLE hAPConnection)
137564064216a8433360745f69edddce19a606659163The Android Open Source Project{
137664064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
137764064216a8433360745f69edddce19a606659163The Android Open Source Project
137864064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
137964064216a8433360745f69edddce19a606659163The Android Open Source Project
138064064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_START_SWITCH_CHANNEL, pAPConnection);
138164064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
138264064216a8433360745f69edddce19a606659163The Android Open Source Project}
138364064216a8433360745f69edddce19a606659163The Android Open Source Project
138464064216a8433360745f69edddce19a606659163The Android Open Source Project
138564064216a8433360745f69edddce19a606659163The Android Open Source Project/**
138664064216a8433360745f69edddce19a606659163The Android Open Source Project*
138764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_indicateSwitchChannelFinished
138864064216a8433360745f69edddce19a606659163The Android Open Source Project*
138964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
139064064216a8433360745f69edddce19a606659163The Android Open Source Project*
139164064216a8433360745f69edddce19a606659163The Android Open Source Project* This function is called when switch channel process is finished
139264064216a8433360745f69edddce19a606659163The Android Open Source Project*
139364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
139464064216a8433360745f69edddce19a606659163The Android Open Source Project*
139564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - reason - the reason for roaming \n
139664064216a8433360745f69edddce19a606659163The Android Open Source Project*
139764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
139864064216a8433360745f69edddce19a606659163The Android Open Source Project*
139964064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
140064064216a8433360745f69edddce19a606659163The Android Open Source Project*
140164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
140264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
140364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_indicateSwitchChannelFinished(TI_HANDLE hAPConnection)
140464064216a8433360745f69edddce19a606659163The Android Open Source Project{
140564064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
140664064216a8433360745f69edddce19a606659163The Android Open Source Project
140764064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
140864064216a8433360745f69edddce19a606659163The Android Open Source Project
140964064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_SWITCH_CH, pAPConnection);
141064064216a8433360745f69edddce19a606659163The Android Open Source Project
141164064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
141264064216a8433360745f69edddce19a606659163The Android Open Source Project}
141364064216a8433360745f69edddce19a606659163The Android Open Source Project
141464064216a8433360745f69edddce19a606659163The Android Open Source Project
141564064216a8433360745f69edddce19a606659163The Android Open Source Project/**
141664064216a8433360745f69edddce19a606659163The Android Open Source Project*
141764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_start
141864064216a8433360745f69edddce19a606659163The Android Open Source Project*
141964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
142064064216a8433360745f69edddce19a606659163The Android Open Source Project*
142164064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by SME module when new connection has been successfully established (first time connection)
142264064216a8433360745f69edddce19a606659163The Android Open Source Project*
142364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
142464064216a8433360745f69edddce19a606659163The Android Open Source Project*
142564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - isValidBSS - if FALSE, no roaming shall be performed, disconnect upon any roaming event;
142664064216a8433360745f69edddce19a606659163The Android Open Source Project*                   other parameters of current AP can be received from Current BSS module
142764064216a8433360745f69edddce19a606659163The Android Open Source Project*
142864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
142964064216a8433360745f69edddce19a606659163The Android Open Source Project*
143064064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
143164064216a8433360745f69edddce19a606659163The Android Open Source Project*
143264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
143364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
143464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_start(TI_HANDLE hAPConnection, BOOLEAN roamingEnabled)
143564064216a8433360745f69edddce19a606659163The Android Open Source Project{
143664064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
143764064216a8433360745f69edddce19a606659163The Android Open Source Project
143864064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
143964064216a8433360745f69edddce19a606659163The Android Open Source Project
144064064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->roamingEnabled = roamingEnabled;
144164064216a8433360745f69edddce19a606659163The Android Open Source Project
144264064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_START, pAPConnection);
144364064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
144464064216a8433360745f69edddce19a606659163The Android Open Source Project}
144564064216a8433360745f69edddce19a606659163The Android Open Source Project
144664064216a8433360745f69edddce19a606659163The Android Open Source Project
144764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
144864064216a8433360745f69edddce19a606659163The Android Open Source Project*
144964064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_stop
145064064216a8433360745f69edddce19a606659163The Android Open Source Project*
145164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
145264064216a8433360745f69edddce19a606659163The Android Open Source Project*
145364064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by SME module when current connection must be taken down
145464064216a8433360745f69edddce19a606659163The Android Open Source Project* (due to driver download, connection failure or any other reason)
145564064216a8433360745f69edddce19a606659163The Android Open Source Project*
145664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
145764064216a8433360745f69edddce19a606659163The Android Open Source Project*
145864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
145964064216a8433360745f69edddce19a606659163The Android Open Source Project*
146064064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
146164064216a8433360745f69edddce19a606659163The Android Open Source Project*
146264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
146364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
146464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_stop(TI_HANDLE hAPConnection, BOOLEAN removeKeys, BOOLEAN immediateShutdown)
146564064216a8433360745f69edddce19a606659163The Android Open Source Project{
146664064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
146764064216a8433360745f69edddce19a606659163The Android Open Source Project
146864064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->stopFromSmeNum++;
146964064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->removeKeys = removeKeys;
147064064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->sendDeauthPacket = !(immediateShutdown); /* If immediateShutdown is TRUE, no need to send DISASSOC frame - used during unload process */
147164064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->reNegotiateTSPEC = FALSE;
147264064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->voiceTspecConfigured = FALSE;
147364064216a8433360745f69edddce19a606659163The Android Open Source Project	pAPConnection->videoTspecConfigured = FALSE;
147464064216a8433360745f69edddce19a606659163The Android Open Source Project
147564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Mark that the connection is stopped due to reason outside the scope of this module */
147664064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->bNonRoamingDisAssocReason = TRUE;
147764064216a8433360745f69edddce19a606659163The Android Open Source Project
147864064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_STOP, pAPConnection);
147964064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
148064064216a8433360745f69edddce19a606659163The Android Open Source Project}
148164064216a8433360745f69edddce19a606659163The Android Open Source Project
148245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt/**
148345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
148445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* apConn_reportRoamingEventDisconnect
148545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
148645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b Description:
148745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
148845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* Called by Roaming Manager to inform of Disconnect
148945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*   uStatusCode - status code of deauth/disassoc packet
149045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*   bDeAuthenticate - Whether this packet is DeAuth ( if
149145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*                     DisAssoc than FALSE)
149245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
149345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b ARGS:
149445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
149545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
149645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b RETURNS:
149745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
149845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*  OK if successful, NOK otherwise.
149945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
150045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \sa
150145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*/
150245544f73189f4649d4afb21a0dab72cd70971e2fDmitry ShmidtTI_STATUS apConn_reportRoamingEventDisconnect(TI_HANDLE hAPConnection,UINT16 uStatusCode,BOOLEAN  bDeAuthenticate )
150345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt{
150445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt	apConn_t *pAPConnection = (apConn_t *)hAPConnection;
150545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt	roamingEventData_u RoamingEventData;
150645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
150745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt	RoamingEventData.APDisconnect.uStatusCode = uStatusCode ; /* status code of deauth/disassoc packet */
150845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt	RoamingEventData.APDisconnect.bDeAuthenticate = bDeAuthenticate; /* TRUE state that it is DeAuth packet */
150945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt	apConn_reportRoamingEvent(pAPConnection, ROAMING_TRIGGER_AP_DISCONNECT, &RoamingEventData);
151045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt	return( TI_OK );
151145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt}
151245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
151364064216a8433360745f69edddce19a606659163The Android Open Source Project
151464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
151564064216a8433360745f69edddce19a606659163The Android Open Source Project*
151664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_reportRoamingEvent
151764064216a8433360745f69edddce19a606659163The Android Open Source Project*
151864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
151964064216a8433360745f69edddce19a606659163The Android Open Source Project*
152064064216a8433360745f69edddce19a606659163The Android Open Source Project* Called when one of roaming events occur
152164064216a8433360745f69edddce19a606659163The Android Open Source Project*
152264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
152364064216a8433360745f69edddce19a606659163The Android Open Source Project*
152464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - roamingEventType
152564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pRoamingEventData - in case of 'Tx rate' event, or AP disconnect
152664064216a8433360745f69edddce19a606659163The Android Open Source Project*
152764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
152864064216a8433360745f69edddce19a606659163The Android Open Source Project*
152964064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
153064064216a8433360745f69edddce19a606659163The Android Open Source Project*
153164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
153264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
153364064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_reportRoamingEvent(TI_HANDLE hAPConnection,
153464064216a8433360745f69edddce19a606659163The Android Open Source Project                                    apConn_roamingTrigger_e roamingEventType,
153564064216a8433360745f69edddce19a606659163The Android Open Source Project                                    roamingEventData_u *pRoamingEventData)
153664064216a8433360745f69edddce19a606659163The Android Open Source Project{
153764064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t    *pAPConnection = (apConn_t *)hAPConnection;
153864064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t  param;  /* parameter for retrieving BSSID */
153964064216a8433360745f69edddce19a606659163The Android Open Source Project
154064064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
154164064216a8433360745f69edddce19a606659163The Android Open Source Project
154264064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
154364064216a8433360745f69edddce19a606659163The Android Open Source Project                          ("apConn_reportRoamingEvent, type=%d, cur_state=%d, roamingEnabled=%d, roamEventCallb=%p  \n",
154464064216a8433360745f69edddce19a606659163The Android Open Source Project                           roamingEventType, pAPConnection->currentState,
154564064216a8433360745f69edddce19a606659163The Android Open Source Project                           pAPConnection->roamingEnabled, pAPConnection->roamEventCallb));
154664064216a8433360745f69edddce19a606659163The Android Open Source Project
154764064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 1. Check if this is Rogue AP test case */
154864064216a8433360745f69edddce19a606659163The Android Open Source Project    if (roamingEventType == ROAMING_TRIGGER_AP_DISCONNECT)
154964064216a8433360745f69edddce19a606659163The Android Open Source Project    {
155064064216a8433360745f69edddce19a606659163The Android Open Source Project        if (pRoamingEventData != NULL)
155164064216a8433360745f69edddce19a606659163The Android Open Source Project        {   /* Save the disconnect reason for future use */
155264064216a8433360745f69edddce19a606659163The Android Open Source Project            pAPConnection->APDisconnect.uStatusCode     = pRoamingEventData->APDisconnect.uStatusCode;
155364064216a8433360745f69edddce19a606659163The Android Open Source Project            pAPConnection->APDisconnect.bDeAuthenticate = pRoamingEventData->APDisconnect.bDeAuthenticate;
155464064216a8433360745f69edddce19a606659163The Android Open Source Project        }
155564064216a8433360745f69edddce19a606659163The Android Open Source Project        if ((pAPConnection->ignoreDeauthReason0) && (pRoamingEventData!=NULL) &&
155664064216a8433360745f69edddce19a606659163The Android Open Source Project               (pAPConnection->APDisconnect.uStatusCode == 0))
155764064216a8433360745f69edddce19a606659163The Android Open Source Project        {   /* This is required for Rogue AP test,
155864064216a8433360745f69edddce19a606659163The Android Open Source Project                When Rogue AP due to invalid User name, deauth with reason 0 arrives before the Rogue AP,
155964064216a8433360745f69edddce19a606659163The Android Open Source Project                and this EXC test fails.*/
156064064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
156164064216a8433360745f69edddce19a606659163The Android Open Source Project                  ("apConn_reportRoamingEvent, Ignore DeAuth with reason 0 \n"));
156264064216a8433360745f69edddce19a606659163The Android Open Source Project            return OK;
156364064216a8433360745f69edddce19a606659163The Android Open Source Project        }
156464064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
156564064216a8433360745f69edddce19a606659163The Android Open Source Project              ("apConn_reportRoamingEvent, DeAuth with reason %d \n", pAPConnection->APDisconnect.uStatusCode));
156664064216a8433360745f69edddce19a606659163The Android Open Source Project
156764064216a8433360745f69edddce19a606659163The Android Open Source Project        if (pAPConnection->APDisconnect.uStatusCode == STATUS_CODE_802_1X_AUTHENTICATION_FAILED)
156864064216a8433360745f69edddce19a606659163The Android Open Source Project        {
156964064216a8433360745f69edddce19a606659163The Android Open Source Project          #ifdef EXC_MODULE_INCLUDED
157064064216a8433360745f69edddce19a606659163The Android Open Source Project            TI_STATUS    status;
157164064216a8433360745f69edddce19a606659163The Android Open Source Project
157264064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Raise the EAP-Failure as event */
157364064216a8433360745f69edddce19a606659163The Android Open Source Project            status = excMngr_rogueApDetected (pAPConnection->hExcMngr, RSN_AUTH_STATUS_CHALLENGE_FROM_AP_FAILED);
157464064216a8433360745f69edddce19a606659163The Android Open Source Project          #endif
157564064216a8433360745f69edddce19a606659163The Android Open Source Project
157664064216a8433360745f69edddce19a606659163The Android Open Source Project
157764064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Remove AP from candidate list for a specified amount of time */
157864064216a8433360745f69edddce19a606659163The Android Open Source Project            param.paramType = SITE_MGR_CURRENT_BSSID_PARAM;
157964064216a8433360745f69edddce19a606659163The Android Open Source Project            siteMgr_getParam(pAPConnection->hSiteMgr, &param);
158064064216a8433360745f69edddce19a606659163The Android Open Source Project
158164064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
158264064216a8433360745f69edddce19a606659163The Android Open Source Project                 ("current station is banned from the roaming candidates list for %d Ms\n",
158364064216a8433360745f69edddce19a606659163The Android Open Source Project                  RSN_AUTH_FAILURE_TIMEOUT));
158464064216a8433360745f69edddce19a606659163The Android Open Source Project
158564064216a8433360745f69edddce19a606659163The Android Open Source Project            rsn_banSite(pAPConnection->hPrivacy, param.content.siteMgrDesiredBSSID, RSN_SITE_BAN_LEVEL_FULL, RSN_AUTH_FAILURE_TIMEOUT);
158664064216a8433360745f69edddce19a606659163The Android Open Source Project        }
158764064216a8433360745f69edddce19a606659163The Android Open Source Project
158864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
158964064216a8433360745f69edddce19a606659163The Android Open Source Project
159064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 2. Check if received trigger is masked out */
159164064216a8433360745f69edddce19a606659163The Android Open Source Project    if (((pAPConnection->isConsTxFailureMaskedOut) && (roamingEventType == ROAMING_TRIGGER_MAX_TX_RETRIES)) ||
159264064216a8433360745f69edddce19a606659163The Android Open Source Project        ((pAPConnection->isRssiTriggerMaskedOut)   && (roamingEventType == ROAMING_TRIGGER_LOW_QUALITY)) ||
159364064216a8433360745f69edddce19a606659163The Android Open Source Project        ((pAPConnection->isSnrTriggerMaskedOut)    && (roamingEventType == ROAMING_TRIGGER_LOW_SNR)) ||
159464064216a8433360745f69edddce19a606659163The Android Open Source Project        ((pAPConnection->islowRateTriggerMaskedOut)&& (roamingEventType == ROAMING_TRIGGER_LOW_TX_RATE)))
159564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
159664064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, ("apConn_reportRoamingEvent, trigger ignored \n"));
159764064216a8433360745f69edddce19a606659163The Android Open Source Project        return OK;
159864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
159964064216a8433360745f69edddce19a606659163The Android Open Source Project
160064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 3.  Valid trigger received: */
160164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 3a. Update statistics */
160264064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->roamingTriggerEvents[roamingEventType]++;
160364064216a8433360745f69edddce19a606659163The Android Open Source Project
160464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 3b. Store the most severe trigger */
160564064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->roamReason < roamingEventType)
160664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
160764064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamReason = roamingEventType;
160864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
160964064216a8433360745f69edddce19a606659163The Android Open Source Project
161064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 3c. Check if Roaming Manager is available */
161164064216a8433360745f69edddce19a606659163The Android Open Source Project    if (((!pAPConnection->roamingEnabled) || (pAPConnection->roamEventCallb == NULL) ||
161264064216a8433360745f69edddce19a606659163The Android Open Source Project          (pAPConnection->currentState == AP_CONNECT_STATE_IDLE))
161364064216a8433360745f69edddce19a606659163The Android Open Source Project        && (roamingEventType > ROAMING_TRIGGER_LOW_QUALITY)
161464064216a8433360745f69edddce19a606659163The Android Open Source Project        && (roamingEventType != ROAMING_TRIGGER_MAX_TX_RETRIES))
161564064216a8433360745f69edddce19a606659163The Android Open Source Project        /*
161664064216a8433360745f69edddce19a606659163The Android Open Source Project         * The last condition was added so that MAX_TX_RETRIES would not cause a disconnect.
161764064216a8433360745f69edddce19a606659163The Android Open Source Project         * This is done because the current default value for max TX retries is good enough for
161864064216a8433360745f69edddce19a606659163The Android Open Source Project         * roaming (i.e. it indicates a low quality AP), but would cause unnecessary disconnects
161964064216a8433360745f69edddce19a606659163The Android Open Source Project         * if used when roaming is disabled
162064064216a8433360745f69edddce19a606659163The Android Open Source Project         */
162164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
162264064216a8433360745f69edddce19a606659163The Android Open Source Project        /* 'Any SSID' configured, meaning Roaming Manager is not allowed to perform roaming,
162364064216a8433360745f69edddce19a606659163The Android Open Source Project           or Roaming Manager is not registered for roaming events;
162464064216a8433360745f69edddce19a606659163The Android Open Source Project           unless this is trigger to change parameters of background scan, disconnect the link */
162564064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, ("Disconnecting link due to roaming event: ev = %d\n", roamingEventType));
162664064216a8433360745f69edddce19a606659163The Android Open Source Project
162764064216a8433360745f69edddce19a606659163The Android Open Source Project        /*  Handle IBSS case TBD to remove
162864064216a8433360745f69edddce19a606659163The Android Open Source Project            Handle also the case where A first connection is in progress, and
162964064216a8433360745f69edddce19a606659163The Android Open Source Project            de-auth arrived. */
163064064216a8433360745f69edddce19a606659163The Android Open Source Project        if (pAPConnection->currentState == AP_CONNECT_STATE_IDLE)
163164064216a8433360745f69edddce19a606659163The Android Open Source Project        {
163264064216a8433360745f69edddce19a606659163The Android Open Source Project            apConn_reportConnStatusToSME(pAPConnection);
163364064216a8433360745f69edddce19a606659163The Android Open Source Project        }
163464064216a8433360745f69edddce19a606659163The Android Open Source Project        else
163564064216a8433360745f69edddce19a606659163The Android Open Source Project        {
163664064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Infra-structure BSS case - disconnect the link */
163764064216a8433360745f69edddce19a606659163The Android Open Source Project            if (roamingEventType >= ROAMING_TRIGGER_AP_DISCONNECT)
163864064216a8433360745f69edddce19a606659163The Android Open Source Project            {
163964064216a8433360745f69edddce19a606659163The Android Open Source Project                pAPConnection->removeKeys = TRUE;
164064064216a8433360745f69edddce19a606659163The Android Open Source Project            }
164164064216a8433360745f69edddce19a606659163The Android Open Source Project            else
164264064216a8433360745f69edddce19a606659163The Android Open Source Project            {
164364064216a8433360745f69edddce19a606659163The Android Open Source Project                pAPConnection->removeKeys = FALSE;
164464064216a8433360745f69edddce19a606659163The Android Open Source Project            }
164564064216a8433360745f69edddce19a606659163The Android Open Source Project            UPDATE_SEND_DEAUTH_PACKET_FLAG(roamingEventType);
164664064216a8433360745f69edddce19a606659163The Android Open Source Project            apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_STOP, pAPConnection);
164764064216a8433360745f69edddce19a606659163The Android Open Source Project        }
164864064216a8433360745f69edddce19a606659163The Android Open Source Project        return OK;
164964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
165064064216a8433360745f69edddce19a606659163The Android Open Source Project
165164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 4. Check if we are in the middle of switching channel */
165264064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->currentState == AP_CONNECT_STATE_SWITCHING_CHANNEL)
165364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
165464064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Trigger received in the middle of switch channel, continue without reporting Roaming Manager */
165564064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, ("Roaming event during switch channel: ev = %d\n", roamingEventType));
165664064216a8433360745f69edddce19a606659163The Android Open Source Project        return OK;
165764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
165864064216a8433360745f69edddce19a606659163The Android Open Source Project
165964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* 5. Report Roaming Manager */
166064064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pAPConnection->roamingEnabled == TRUE) && (pAPConnection->roamEventCallb != NULL))
166164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
166264064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, ("Roaming event raised: ev = %d\n", roamingEventType));
166345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt        if (roamingEventType == ROAMING_TRIGGER_LOW_QUALITY)
166445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt        {
166545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt            EvHandlerSendEvent(pAPConnection->hEvHandler, IPC_EVENT_LOW_RSSI, NULL,0);
166645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt        }
166764064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Report to Roaming Manager */
166864064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamEventCallb(pAPConnection->hRoamMng, &roamingEventType);
166964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
167064064216a8433360745f69edddce19a606659163The Android Open Source Project
167164064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
167264064216a8433360745f69edddce19a606659163The Android Open Source Project}
167364064216a8433360745f69edddce19a606659163The Android Open Source Project
167464064216a8433360745f69edddce19a606659163The Android Open Source Project
167564064216a8433360745f69edddce19a606659163The Android Open Source Project/**
167664064216a8433360745f69edddce19a606659163The Android Open Source Project*
167764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_RoamHandoffFinished
167864064216a8433360745f69edddce19a606659163The Android Open Source Project*
167964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
168064064216a8433360745f69edddce19a606659163The Android Open Source Project*
168164064216a8433360745f69edddce19a606659163The Android Open Source Project* Called when EXC module receives response from the supplicant or recognizes
168264064216a8433360745f69edddce19a606659163The Android Open Source Project* timeout while waiting for the response
168364064216a8433360745f69edddce19a606659163The Android Open Source Project*
168464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
168564064216a8433360745f69edddce19a606659163The Android Open Source Project*
168664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
168764064216a8433360745f69edddce19a606659163The Android Open Source Project*
168864064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
168964064216a8433360745f69edddce19a606659163The Android Open Source Project*/
169064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid apConn_RoamHandoffFinished(TI_HANDLE hAPConnection)
169164064216a8433360745f69edddce19a606659163The Android Open Source Project{
169264064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
169364064216a8433360745f69edddce19a606659163The Android Open Source Project
169464064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
169564064216a8433360745f69edddce19a606659163The Android Open Source Project    if (hAPConnection == NULL) /* Failed to allocate control block */
169664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
169764064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("FATAL ERROR: apConn_create(): Error allocating cb - aborting\n"));
169864064216a8433360745f69edddce19a606659163The Android Open Source Project        return;
169964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
170064064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
170164064216a8433360745f69edddce19a606659163The Android Open Source Project
170264064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_HAND_OVER, pAPConnection);
170364064216a8433360745f69edddce19a606659163The Android Open Source Project}
170464064216a8433360745f69edddce19a606659163The Android Open Source Project
170564064216a8433360745f69edddce19a606659163The Android Open Source Project
170664064216a8433360745f69edddce19a606659163The Android Open Source Project/**
170764064216a8433360745f69edddce19a606659163The Android Open Source Project*
170864064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_DisconnCompleteInd
170964064216a8433360745f69edddce19a606659163The Android Open Source Project*
171064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
171164064216a8433360745f69edddce19a606659163The Android Open Source Project*
171264064216a8433360745f69edddce19a606659163The Android Open Source Project* DISASSOCIATE Packet was sent - proceed with stopping the module
171364064216a8433360745f69edddce19a606659163The Android Open Source Project*
171464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
171564064216a8433360745f69edddce19a606659163The Android Open Source Project*
171664064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context\n
171764064216a8433360745f69edddce19a606659163The Android Open Source Project*
171864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
171964064216a8433360745f69edddce19a606659163The Android Open Source Project*
172064064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
172164064216a8433360745f69edddce19a606659163The Android Open Source Project*
172264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
172364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
172464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_DisconnCompleteInd(TI_HANDLE hAPConnection, mgmtStatus_e status, UINT32 uStatusCode)
172564064216a8433360745f69edddce19a606659163The Android Open Source Project{
172664064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
172764064216a8433360745f69edddce19a606659163The Android Open Source Project
172864064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hAPConnection);
172964064216a8433360745f69edddce19a606659163The Android Open Source Project
173064064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_OK, pAPConnection);
173164064216a8433360745f69edddce19a606659163The Android Open Source Project
173264064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
173364064216a8433360745f69edddce19a606659163The Android Open Source Project}
173464064216a8433360745f69edddce19a606659163The Android Open Source Project
173564064216a8433360745f69edddce19a606659163The Android Open Source Project
173664064216a8433360745f69edddce19a606659163The Android Open Source Project/**
173764064216a8433360745f69edddce19a606659163The Android Open Source Project*
173864064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_updateNeighborAPsList
173964064216a8433360745f69edddce19a606659163The Android Open Source Project*
174064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
174164064216a8433360745f69edddce19a606659163The Android Open Source Project*
174264064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by EXC Manager when Priority APs are found
174364064216a8433360745f69edddce19a606659163The Android Open Source Project*
174464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
174564064216a8433360745f69edddce19a606659163The Android Open Source Project*
174664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
174764064216a8433360745f69edddce19a606659163The Android Open Source Project*
174864064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
174964064216a8433360745f69edddce19a606659163The Android Open Source Project*
175064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
175164064216a8433360745f69edddce19a606659163The Android Open Source Project*/
175264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid apConn_updateNeighborAPsList(TI_HANDLE hAPConnection, neighborAPList_t *pListOfpriorityAps)
175364064216a8433360745f69edddce19a606659163The Android Open Source Project{
175464064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
175564064216a8433360745f69edddce19a606659163The Android Open Source Project
175664064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->returnNeighborApsCallb != NULL )
175764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
175864064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->returnNeighborApsCallb(pAPConnection->hRoamMng, pListOfpriorityAps);
175964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
176064064216a8433360745f69edddce19a606659163The Android Open Source Project}
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* apConn_getRoamingStatistics
176664064216a8433360745f69edddce19a606659163The Android Open Source Project*
176764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
176864064216a8433360745f69edddce19a606659163The Android Open Source Project*
176964064216a8433360745f69edddce19a606659163The Android Open Source Project* Called from Measurement EXC sub-module when preparing TSM report to the AP.
177064064216a8433360745f69edddce19a606659163The Android Open Source Project*
177164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: AP Connection handle
177264064216a8433360745f69edddce19a606659163The Android Open Source Project*
177364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
177464064216a8433360745f69edddce19a606659163The Android Open Source Project*
177564064216a8433360745f69edddce19a606659163The Android Open Source Project*  total number of successful roams
177664064216a8433360745f69edddce19a606659163The Android Open Source Project*  delay of the latest successful roam
177764064216a8433360745f69edddce19a606659163The Android Open Source Project*
177864064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
177964064216a8433360745f69edddce19a606659163The Android Open Source Project*/
178064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid apConn_getRoamingStatistics(TI_HANDLE hAPConnection, UINT8 *roamingCount, UINT16 *roamingDelay)
178164064216a8433360745f69edddce19a606659163The Android Open Source Project{
178264064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
178364064216a8433360745f69edddce19a606659163The Android Open Source Project
178464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Get (and clear) total number of successful roams */
178564064216a8433360745f69edddce19a606659163The Android Open Source Project    *roamingCount = pAPConnection->roamingSuccesfulHandoverNum;
178664064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->roamingSuccesfulHandoverNum = 0;
178764064216a8433360745f69edddce19a606659163The Android Open Source Project
178864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Get delay of the latest roam */
178964064216a8433360745f69edddce19a606659163The Android Open Source Project    *roamingDelay = pAPConnection->lastRoamingDelay;
179064064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->lastRoamingDelay = 0;
179164064216a8433360745f69edddce19a606659163The Android Open Source Project}
179264064216a8433360745f69edddce19a606659163The Android Open Source Project
179364064216a8433360745f69edddce19a606659163The Android Open Source Project
179464064216a8433360745f69edddce19a606659163The Android Open Source Project
179564064216a8433360745f69edddce19a606659163The Android Open Source Project
179664064216a8433360745f69edddce19a606659163The Android Open Source Project/**
179764064216a8433360745f69edddce19a606659163The Android Open Source Project*
179864064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_resetRoamingStatistics
179964064216a8433360745f69edddce19a606659163The Android Open Source Project*
180064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
180164064216a8433360745f69edddce19a606659163The Android Open Source Project*
180264064216a8433360745f69edddce19a606659163The Android Open Source Project* Called from Measurement EXC sub-module in order to re-start roaming statistics.
180364064216a8433360745f69edddce19a606659163The Android Open Source Project*
180464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: AP Connection handle
180564064216a8433360745f69edddce19a606659163The Android Open Source Project*
180664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
180764064216a8433360745f69edddce19a606659163The Android Open Source Project*
180864064216a8433360745f69edddce19a606659163The Android Open Source Project*  total number of successful roams
180964064216a8433360745f69edddce19a606659163The Android Open Source Project*  delay of the latest successful roam
181064064216a8433360745f69edddce19a606659163The Android Open Source Project*
181164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
181264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
181364064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid apConn_resetRoamingStatistics(TI_HANDLE hAPConnection)
181464064216a8433360745f69edddce19a606659163The Android Open Source Project{
181564064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
181664064216a8433360745f69edddce19a606659163The Android Open Source Project
181764064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->resetReportedRoamingStatistics = TRUE;
181864064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->roamingSuccesfulHandoverNum = 0;
181964064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->lastRoamingDelay = 0;
182064064216a8433360745f69edddce19a606659163The Android Open Source Project}
182164064216a8433360745f69edddce19a606659163The Android Open Source Project
182264064216a8433360745f69edddce19a606659163The Android Open Source Project
182364064216a8433360745f69edddce19a606659163The Android Open Source Project/**
182464064216a8433360745f69edddce19a606659163The Android Open Source Project*
182545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* apConn_stopRoamingStatistics
182645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
182745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b Description:
182845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
182945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* Called from Measurement CCX sub-module in order to stop roaming statistics.
183045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
183145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b ARGS: AP Connection handle
183245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
183345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \b RETURNS:
183445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
183545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt* \sa
183645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*/
183745544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidtvoid apConn_stopRoamingStatistics(TI_HANDLE hAPConnection)
183845544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt{
183945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
184045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
184145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    pAPConnection->resetReportedRoamingStatistics = FALSE;
184245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt}
184345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
184445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt
184545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt/**
184645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt*
184764064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_printStatistics
184864064216a8433360745f69edddce19a606659163The Android Open Source Project*
184964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
185064064216a8433360745f69edddce19a606659163The Android Open Source Project*
185164064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by Site Manager when request to print statistics is requested from CLI
185264064216a8433360745f69edddce19a606659163The Android Open Source Project*
185364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS: AP Connection handle
185464064216a8433360745f69edddce19a606659163The Android Open Source Project*
185564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
185664064216a8433360745f69edddce19a606659163The Android Open Source Project*
185764064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
185864064216a8433360745f69edddce19a606659163The Android Open Source Project*
185964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
186064064216a8433360745f69edddce19a606659163The Android Open Source Project*/
186164064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid apConn_printStatistics(TI_HANDLE hAPConnection)
186264064216a8433360745f69edddce19a606659163The Android Open Source Project{
186364064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("-------------- Roaming Statistics ---------------\n\n"));
186464064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("- Low TX rate = %d\n",     ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_LOW_TX_RATE]));
186564064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("- Low SNR = %d\n",         ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_LOW_SNR]));
186664064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("- Low Quality = %d\n",     ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_LOW_QUALITY]));
186764064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("- MAX TX retries = %d\n",  ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_MAX_TX_RETRIES]));
186864064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("- BSS Loss TX = %d\n",     ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_BSS_LOSS]));
186964064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("- Switch Channel = %d\n",  ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_SWITCH_CHANNEL]));
187064064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("- AP Disconnect = %d\n",   ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_AP_DISCONNECT]));
187164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("- SEC attack = %d\n",      ((apConn_t *)hAPConnection)->roamingTriggerEvents[ROAMING_TRIGGER_SECURITY_ATTACK]));
187264064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("\n"));
187345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    WLAN_OS_REPORT(("- Succesfull Total roaming = %d\n",                  ((apConn_t *)hAPConnection)->roamingSuccesfulHandoverTotalNum));
187464064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("- Unsuccesfull roaming = %d\n",                ((apConn_t *)hAPConnection)->roamingFailedHandoverNum));
187564064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("- Giving up roaming = %d\n",                   ((apConn_t *)hAPConnection)->retainCurrAPNum));
187664064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("- Disconnect cmd from roaming manager = %d\n", ((apConn_t *)hAPConnection)->disconnectFromRoamMngrNum));
187764064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("- Disconnect cmd from SME = %d\n",             ((apConn_t *)hAPConnection)->stopFromSmeNum));
187864064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_OS_REPORT(("\n"));
187964064216a8433360745f69edddce19a606659163The Android Open Source Project}
188064064216a8433360745f69edddce19a606659163The Android Open Source Project
188164064216a8433360745f69edddce19a606659163The Android Open Source Project
188264064216a8433360745f69edddce19a606659163The Android Open Source Project
188364064216a8433360745f69edddce19a606659163The Android Open Source Project/**
188464064216a8433360745f69edddce19a606659163The Android Open Source Project*
188564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_getVendorSpecificIE
188664064216a8433360745f69edddce19a606659163The Android Open Source Project*
188764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
188864064216a8433360745f69edddce19a606659163The Android Open Source Project*
188964064216a8433360745f69edddce19a606659163The Android Open Source Project* Called by Association SM when request to associate is built and sent to AP;
189064064216a8433360745f69edddce19a606659163The Android Open Source Project* returns request updated with vendor specific info-element
189164064216a8433360745f69edddce19a606659163The Android Open Source Project*
189264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
189364064216a8433360745f69edddce19a606659163The Android Open Source Project*
189464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hAPConnection - AP Connection handle\n
189564064216a8433360745f69edddce19a606659163The Android Open Source Project*  O   - pRequest - pointer to request buffer\n
189664064216a8433360745f69edddce19a606659163The Android Open Source Project*  O   - len - size of returned IE\n
189764064216a8433360745f69edddce19a606659163The Android Open Source Project*
189864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
189964064216a8433360745f69edddce19a606659163The Android Open Source Project*
190064064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
190164064216a8433360745f69edddce19a606659163The Android Open Source Project*
190264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
190364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
190464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS apConn_getVendorSpecificIE(TI_HANDLE hAPConnection, UINT8 *pRequest, UINT32 *len)
190564064216a8433360745f69edddce19a606659163The Android Open Source Project{
190664064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hAPConnection;
190764064216a8433360745f69edddce19a606659163The Android Open Source Project
190864064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->vsIElength > 0)
190964064216a8433360745f69edddce19a606659163The Android Open Source Project    {
191064064216a8433360745f69edddce19a606659163The Android Open Source Project        *len = pAPConnection->vsIElength;
191164064216a8433360745f69edddce19a606659163The Android Open Source Project        os_memoryCopy(pAPConnection->hOs, pRequest, pAPConnection->vsIEbuf, pAPConnection->vsIElength);
191264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
191364064216a8433360745f69edddce19a606659163The Android Open Source Project    else
191464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
191564064216a8433360745f69edddce19a606659163The Android Open Source Project        *len = 0;
191664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
191764064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
191864064216a8433360745f69edddce19a606659163The Android Open Source Project}
191964064216a8433360745f69edddce19a606659163The Android Open Source Project
192064064216a8433360745f69edddce19a606659163The Android Open Source Project
192164064216a8433360745f69edddce19a606659163The Android Open Source Project/* Internal functions implementation */
192264064216a8433360745f69edddce19a606659163The Android Open Source Project
192364064216a8433360745f69edddce19a606659163The Android Open Source Project
192464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
192564064216a8433360745f69edddce19a606659163The Android Open Source Project*
192664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_smEvent
192764064216a8433360745f69edddce19a606659163The Android Open Source Project*
192864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
192964064216a8433360745f69edddce19a606659163The Android Open Source Project*
193064064216a8433360745f69edddce19a606659163The Android Open Source Project* AP Connection state machine transition function
193164064216a8433360745f69edddce19a606659163The Android Open Source Project*
193264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
193364064216a8433360745f69edddce19a606659163The Android Open Source Project*
193464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I/O - currentState - current state in the state machine\n
193564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - event - specific event for the state machine\n
193664064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context\n
193764064216a8433360745f69edddce19a606659163The Android Open Source Project*
193864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
193964064216a8433360745f69edddce19a606659163The Android Open Source Project*
194064064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
194164064216a8433360745f69edddce19a606659163The Android Open Source Project*
194264064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
194364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
194464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_smEvent(apConn_smStates *currState, UINT8 event, void* data)
194564064216a8433360745f69edddce19a606659163The Android Open Source Project{
194664064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS   status;
194764064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8       nextState;
194864064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t    *pAPConnection;
194964064216a8433360745f69edddce19a606659163The Android Open Source Project
195064064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection = (apConn_t *)data;
195164064216a8433360745f69edddce19a606659163The Android Open Source Project    status = fsm_GetNextState(pAPConnection->apConnSM, (UINT8)*currState, event, &nextState);
195264064216a8433360745f69edddce19a606659163The Android Open Source Project    if (status == OK)
195364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
195464064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_SM(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
195564064216a8433360745f69edddce19a606659163The Android Open Source Project                                  ("<%s, %s> --> %s\n\n",
195664064216a8433360745f69edddce19a606659163The Android Open Source Project                                   apConn_stateDesc[*currState],
195764064216a8433360745f69edddce19a606659163The Android Open Source Project                                   apConn_eventDesc[event],
195864064216a8433360745f69edddce19a606659163The Android Open Source Project                                   apConn_stateDesc[nextState]));
195964064216a8433360745f69edddce19a606659163The Android Open Source Project
196064064216a8433360745f69edddce19a606659163The Android Open Source Project        status = fsm_Event(pAPConnection->apConnSM, (UINT8 *)currState, event, pAPConnection);
196164064216a8433360745f69edddce19a606659163The Android Open Source Project        return status;
196264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
196364064216a8433360745f69edddce19a606659163The Android Open Source Project    else
196464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
196564064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG, ("apConn_smEvent, fsm_GetNextState error\n"));
196664064216a8433360745f69edddce19a606659163The Android Open Source Project        return status;
196764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
196864064216a8433360745f69edddce19a606659163The Android Open Source Project}
196964064216a8433360745f69edddce19a606659163The Android Open Source Project
197064064216a8433360745f69edddce19a606659163The Android Open Source Project
197164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
197264064216a8433360745f69edddce19a606659163The Android Open Source Project*
197364064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_smNop - Do nothing
197464064216a8433360745f69edddce19a606659163The Android Open Source Project*
197564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
197664064216a8433360745f69edddce19a606659163The Android Open Source Project*
197764064216a8433360745f69edddce19a606659163The Android Open Source Project* Do nothing in the SM.
197864064216a8433360745f69edddce19a606659163The Android Open Source Project*
197964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
198064064216a8433360745f69edddce19a606659163The Android Open Source Project*
198164064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context \n
198264064216a8433360745f69edddce19a606659163The Android Open Source Project*
198364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
198464064216a8433360745f69edddce19a606659163The Android Open Source Project*
198564064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
198664064216a8433360745f69edddce19a606659163The Android Open Source Project*
198764064216a8433360745f69edddce19a606659163The Android Open Source Project*
198864064216a8433360745f69edddce19a606659163The Android Open Source Project*/
198964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_smNop(void *pData)
199064064216a8433360745f69edddce19a606659163The Android Open Source Project{
199164064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION((((apConn_t *)pData)->hReport), ROAMING_MANAGER_MODULE_LOG, ("apConn_smNop\n"));
199264064216a8433360745f69edddce19a606659163The Android Open Source Project        return OK;
199364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
199464064216a8433360745f69edddce19a606659163The Android Open Source Project
199564064216a8433360745f69edddce19a606659163The Android Open Source Project
199664064216a8433360745f69edddce19a606659163The Android Open Source Project/**
199764064216a8433360745f69edddce19a606659163The Android Open Source Project*
199864064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_smUnexpected - Unexpected event
199964064216a8433360745f69edddce19a606659163The Android Open Source Project*
200064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
200164064216a8433360745f69edddce19a606659163The Android Open Source Project*
200264064216a8433360745f69edddce19a606659163The Android Open Source Project* Unexpected event in the SM.
200364064216a8433360745f69edddce19a606659163The Android Open Source Project*
200464064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
200564064216a8433360745f69edddce19a606659163The Android Open Source Project*
200664064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context \n
200764064216a8433360745f69edddce19a606659163The Android Open Source Project*
200864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
200964064216a8433360745f69edddce19a606659163The Android Open Source Project*
201064064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK if successful, NOK otherwise.
201164064216a8433360745f69edddce19a606659163The Android Open Source Project*
201264064216a8433360745f69edddce19a606659163The Android Open Source Project*
201364064216a8433360745f69edddce19a606659163The Android Open Source Project*/
201464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_smUnexpected(void *pData)
201564064216a8433360745f69edddce19a606659163The Android Open Source Project{
201664064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(((apConn_t *)pData)->hReport, ROAMING_MANAGER_MODULE_LOG, ("apConn_smUnexpected\n"));
201764064216a8433360745f69edddce19a606659163The Android Open Source Project    return NOK;
201864064216a8433360745f69edddce19a606659163The Android Open Source Project}
201964064216a8433360745f69edddce19a606659163The Android Open Source Project
202064064216a8433360745f69edddce19a606659163The Android Open Source Project
202164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
202264064216a8433360745f69edddce19a606659163The Android Open Source Project*
202364064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_startWaitingForTriggers
202464064216a8433360745f69edddce19a606659163The Android Open Source Project*
202564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
202664064216a8433360745f69edddce19a606659163The Android Open Source Project*
202764064216a8433360745f69edddce19a606659163The Android Open Source Project* SME informs AP Connection module about successfull link establishment; start wiating for roaming triggers
202864064216a8433360745f69edddce19a606659163The Android Open Source Project*
202964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
203064064216a8433360745f69edddce19a606659163The Android Open Source Project*
203164064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context \n
203264064216a8433360745f69edddce19a606659163The Android Open Source Project*
203364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
203464064216a8433360745f69edddce19a606659163The Android Open Source Project*
203564064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
203664064216a8433360745f69edddce19a606659163The Android Open Source Project*
203764064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
203864064216a8433360745f69edddce19a606659163The Android Open Source Project*/
203964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_startWaitingForTriggers(void *pData)
204064064216a8433360745f69edddce19a606659163The Android Open Source Project{
204164064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t    *pAPConnection;
204264064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_connStatus_t reportStatus;
204345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    paramInfoPartial_t param;
204464064216a8433360745f69edddce19a606659163The Android Open Source Project
204564064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection = (apConn_t *)pData;
204664064216a8433360745f69edddce19a606659163The Android Open Source Project
204764064216a8433360745f69edddce19a606659163The Android Open Source Project    if ((pAPConnection->roamingEnabled) && (pAPConnection->reportStatusCallb != NULL))
204864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
204964064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType   = ASSOC_ASSOCIATION_RESP_PARAM;
205064064216a8433360745f69edddce19a606659163The Android Open Source Project
205145544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt        assoc_getParamPartial(pAPConnection->hAssoc, &param);
205264064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.dataBuf = (char *)(param.content.applicationConfigBuffer.buffer);
205364064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.dataBufLength = param.content.applicationConfigBuffer.bufferSize;
205464064216a8433360745f69edddce19a606659163The Android Open Source Project
205564064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.status = CONN_STATUS_CONNECTED;
205664064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->reportStatusCallb(pAPConnection->hRoamMng, &reportStatus);
205764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
205864064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->firstAttempt2Roam = TRUE;
205964064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->roamReason = ROAMING_TRIGGER_NONE;
206064064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->removeKeys = TRUE;
206164064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->sendDeauthPacket = TRUE;
206264064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->reNegotiateTSPEC = FALSE;
206364064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->voiceTspecConfigured = FALSE;
206464064216a8433360745f69edddce19a606659163The Android Open Source Project	pAPConnection->videoTspecConfigured = FALSE;
206564064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
206664064216a8433360745f69edddce19a606659163The Android Open Source Project}
206764064216a8433360745f69edddce19a606659163The Android Open Source Project
206864064216a8433360745f69edddce19a606659163The Android Open Source Project
206964064216a8433360745f69edddce19a606659163The Android Open Source Project/**
207064064216a8433360745f69edddce19a606659163The Android Open Source Project*
207164064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_connectedToNewAP
207264064216a8433360745f69edddce19a606659163The Android Open Source Project*
207364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
207464064216a8433360745f69edddce19a606659163The Android Open Source Project*
207564064216a8433360745f69edddce19a606659163The Android Open Source Project* After roaming was requested, Connection SM informs AP Connection module about
207664064216a8433360745f69edddce19a606659163The Android Open Source Project* successful link re-establishment; start waiting for roaming triggers
207764064216a8433360745f69edddce19a606659163The Android Open Source Project*
207864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
207964064216a8433360745f69edddce19a606659163The Android Open Source Project*
208064064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context \n
208164064216a8433360745f69edddce19a606659163The Android Open Source Project*
208264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
208364064216a8433360745f69edddce19a606659163The Android Open Source Project*
208464064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
208564064216a8433360745f69edddce19a606659163The Android Open Source Project*
208664064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
208764064216a8433360745f69edddce19a606659163The Android Open Source Project*/
208864064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_connectedToNewAP(void *pData)
208964064216a8433360745f69edddce19a606659163The Android Open Source Project{
209064064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t    *pAPConnection;
209164064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_connStatus_t reportStatus;
209245544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    paramInfoPartial_t param;
209364064216a8433360745f69edddce19a606659163The Android Open Source Project
209464064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection = (apConn_t *)pData;
209564064216a8433360745f69edddce19a606659163The Android Open Source Project
209664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Configure SCR group back to connection */
209764064216a8433360745f69edddce19a606659163The Android Open Source Project    scr_setGroup (pAPConnection->hScr, SCR_GID_CONNECTED);
209864064216a8433360745f69edddce19a606659163The Android Open Source Project
209964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Erase vendor specific info-element if was defined for last AP Assoc request */
210064064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->vsIElength = 0;
210164064216a8433360745f69edddce19a606659163The Android Open Source Project
210264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* TBD Notify Curr BSS module about update of current AP database */
210364064216a8433360745f69edddce19a606659163The Android Open Source Project
210464064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->roamingFailedHandoverNum>0)
210564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
210664064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamingFailedHandoverNum--;
210764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
210864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Report Roaming Manager */
210964064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->reportStatusCallb != NULL)
211064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
211164064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType   = ASSOC_ASSOCIATION_RESP_PARAM;
211264064216a8433360745f69edddce19a606659163The Android Open Source Project
211345544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt        assoc_getParamPartial(pAPConnection->hAssoc, &param);
211464064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.dataBuf = (char *)(param.content.applicationConfigBuffer.buffer);
211564064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.dataBufLength = param.content.applicationConfigBuffer.bufferSize;
211664064216a8433360745f69edddce19a606659163The Android Open Source Project
211764064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.status = CONN_STATUS_HANDOVER_SUCCESS;
211864064216a8433360745f69edddce19a606659163The Android Open Source Project
211964064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->reportStatusCallb(pAPConnection->hRoamMng, &reportStatus);
212064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
212164064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->firstAttempt2Roam = TRUE;
212264064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->roamReason = ROAMING_TRIGGER_NONE;
212364064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->roamingSuccesfulHandoverTotalNum++;
212464064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->removeKeys = TRUE;
212564064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->sendDeauthPacket = TRUE;
212664064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->reNegotiateTSPEC = FALSE;
212764064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->voiceTspecConfigured = FALSE;
212864064216a8433360745f69edddce19a606659163The Android Open Source Project	pAPConnection->videoTspecConfigured = FALSE;
212964064216a8433360745f69edddce19a606659163The Android Open Source Project
213064064216a8433360745f69edddce19a606659163The Android Open Source Project
213164064216a8433360745f69edddce19a606659163The Android Open Source Project    if (!pAPConnection->resetReportedRoamingStatistics)
213264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
213364064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamingSuccesfulHandoverNum++;
213464064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->lastRoamingDelay =
213564064216a8433360745f69edddce19a606659163The Android Open Source Project            (UINT16)os_timeStampMs(pAPConnection->hOs) - pAPConnection->roamingStartedTimestamp;
213664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
213764064216a8433360745f69edddce19a606659163The Android Open Source Project    else
213864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
213964064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->resetReportedRoamingStatistics = FALSE;
214064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
214164064216a8433360745f69edddce19a606659163The Android Open Source Project
214264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Raise event of Roaming Completion */
214364064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
214464064216a8433360745f69edddce19a606659163The Android Open Source Project                            ("EvHandlerSendEvent -ROAMING_COMPLETE\n" ));
214564064216a8433360745f69edddce19a606659163The Android Open Source Project    EvHandlerSendEvent(pAPConnection->hEvHandler, IPC_EVENT_ROAMING_COMPLETE, NULL, 0);
214664064216a8433360745f69edddce19a606659163The Android Open Source Project
214764064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
214864064216a8433360745f69edddce19a606659163The Android Open Source Project}
214964064216a8433360745f69edddce19a606659163The Android Open Source Project
215064064216a8433360745f69edddce19a606659163The Android Open Source Project
215164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
215264064216a8433360745f69edddce19a606659163The Android Open Source Project*
215364064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_stopConnection
215464064216a8433360745f69edddce19a606659163The Android Open Source Project*
215564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
215664064216a8433360745f69edddce19a606659163The Android Open Source Project*
215764064216a8433360745f69edddce19a606659163The Android Open Source Project* Stop required before roaming was started
215864064216a8433360745f69edddce19a606659163The Android Open Source Project*
215964064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
216064064216a8433360745f69edddce19a606659163The Android Open Source Project*
216164064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context\n
216264064216a8433360745f69edddce19a606659163The Android Open Source Project*
216364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
216464064216a8433360745f69edddce19a606659163The Android Open Source Project*
216564064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
216664064216a8433360745f69edddce19a606659163The Android Open Source Project*
216764064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
216864064216a8433360745f69edddce19a606659163The Android Open Source Project*/
216964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_stopConnection(void *pData)
217064064216a8433360745f69edddce19a606659163The Android Open Source Project{
217164064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection;
217264064216a8433360745f69edddce19a606659163The Android Open Source Project    disConnType_e disConnType;
217364064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection = (apConn_t *)pData;
217464064216a8433360745f69edddce19a606659163The Android Open Source Project
217564064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
217664064216a8433360745f69edddce19a606659163The Android Open Source Project                    ("apConn_stopConnection, calls conn_stop, removeKeys=%d, sendDeauthPacket=%d \n", pAPConnection->removeKeys, pAPConnection->sendDeauthPacket));
217764064216a8433360745f69edddce19a606659163The Android Open Source Project
217864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Erase vendor specific info-element if was defined for last AP Assoc request */
217964064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->vsIElength = 0;
218064064216a8433360745f69edddce19a606659163The Android Open Source Project
218164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* In case AP connection was stopped by SME, and radioOn is false, meaning immidiate shutdown is required without disassoc frame */
218264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Otherwise, ask for normal disconnection with disassoc frame */
218364064216a8433360745f69edddce19a606659163The Android Open Source Project    disConnType = (pAPConnection->sendDeauthPacket == TRUE) ? DISCONN_TYPE_DEAUTH : DISCONN_TYPE_IMMEDIATE;
218464064216a8433360745f69edddce19a606659163The Android Open Source Project
218564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Stop Connection state machine - always immediate TBD */
218664064216a8433360745f69edddce19a606659163The Android Open Source Project    conn_stop(pAPConnection->hConnSm,
218764064216a8433360745f69edddce19a606659163The Android Open Source Project              disConnType,
218864064216a8433360745f69edddce19a606659163The Android Open Source Project              STATUS_UNSPECIFIED,
218964064216a8433360745f69edddce19a606659163The Android Open Source Project              FALSE,   /* pAPConnection->removeKeys - for Roaming, do not remove the keys */
219064064216a8433360745f69edddce19a606659163The Android Open Source Project              apConn_DisconnCompleteInd,
219164064216a8433360745f69edddce19a606659163The Android Open Source Project              pAPConnection);
219264064216a8433360745f69edddce19a606659163The Android Open Source Project
219364064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
219464064216a8433360745f69edddce19a606659163The Android Open Source Project}
219564064216a8433360745f69edddce19a606659163The Android Open Source Project
219664064216a8433360745f69edddce19a606659163The Android Open Source Project
219764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
219864064216a8433360745f69edddce19a606659163The Android Open Source Project*
219964064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_reportDisconnected
220064064216a8433360745f69edddce19a606659163The Android Open Source Project*
220164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
220264064216a8433360745f69edddce19a606659163The Android Open Source Project*
220364064216a8433360745f69edddce19a606659163The Android Open Source Project* Moving from 'Disconnecting' state to 'Idle':
220464064216a8433360745f69edddce19a606659163The Android Open Source Project*   RoamMgr.status("not-connected")
220564064216a8433360745f69edddce19a606659163The Android Open Source Project*
220664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
220764064216a8433360745f69edddce19a606659163The Android Open Source Project*
220864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context\n
220964064216a8433360745f69edddce19a606659163The Android Open Source Project*
221064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
221164064216a8433360745f69edddce19a606659163The Android Open Source Project*
221264064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
221364064216a8433360745f69edddce19a606659163The Android Open Source Project*
221464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
221564064216a8433360745f69edddce19a606659163The Android Open Source Project*/
221664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_reportDisconnected(void *pData)
221764064216a8433360745f69edddce19a606659163The Android Open Source Project{
221864064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t    *pAPConnection;
221964064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_connStatus_t reportStatus;
222064064216a8433360745f69edddce19a606659163The Android Open Source Project
222164064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection = (apConn_t *)pData;
222264064216a8433360745f69edddce19a606659163The Android Open Source Project
222364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->reportStatusCallb != NULL)
222464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
222564064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.status = CONN_STATUS_NOT_CONNECTED;
222664064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->reportStatusCallb(pAPConnection->hRoamMng, &reportStatus);
222764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
222864064216a8433360745f69edddce19a606659163The Android Open Source Project
222964064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->firstAttempt2Roam = TRUE;
223064064216a8433360745f69edddce19a606659163The Android Open Source Project
223164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Notify SME */
223264064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_reportConnStatusToSME(pAPConnection);
223364064216a8433360745f69edddce19a606659163The Android Open Source Project
223464064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
223564064216a8433360745f69edddce19a606659163The Android Open Source Project}
223664064216a8433360745f69edddce19a606659163The Android Open Source Project
223764064216a8433360745f69edddce19a606659163The Android Open Source Project
223864064216a8433360745f69edddce19a606659163The Android Open Source Project/**
223964064216a8433360745f69edddce19a606659163The Android Open Source Project*
224064064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_retainAP
224164064216a8433360745f69edddce19a606659163The Android Open Source Project*
224264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
224364064216a8433360745f69edddce19a606659163The Android Open Source Project*
224464064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager gives up on roaming.
224564064216a8433360745f69edddce19a606659163The Android Open Source Project* Moving from 'Wait for connection command' back to 'Wait for roam started.
224664064216a8433360745f69edddce19a606659163The Android Open Source Project*
224764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
224864064216a8433360745f69edddce19a606659163The Android Open Source Project*
224964064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context\n
225064064216a8433360745f69edddce19a606659163The Android Open Source Project*
225164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
225264064216a8433360745f69edddce19a606659163The Android Open Source Project*
225364064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
225464064216a8433360745f69edddce19a606659163The Android Open Source Project*
225564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
225664064216a8433360745f69edddce19a606659163The Android Open Source Project*/
225764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_retainAP(void *data)
225864064216a8433360745f69edddce19a606659163The Android Open Source Project{
225964064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t    *pAPConnection;
226064064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_connStatus_t reportStatus;
226164064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
226264064216a8433360745f69edddce19a606659163The Android Open Source Project
226364064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection = (apConn_t *)data;
226464064216a8433360745f69edddce19a606659163The Android Open Source Project
226564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Configure SCR group back to connection */
226664064216a8433360745f69edddce19a606659163The Android Open Source Project    scr_setGroup (pAPConnection->hScr, SCR_GID_CONNECTED);
226764064216a8433360745f69edddce19a606659163The Android Open Source Project
226864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Report Roaming Manager */
226964064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->reportStatusCallb != NULL)
227064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
227164064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType   = ASSOC_ASSOCIATION_RESP_PARAM;
227264064216a8433360745f69edddce19a606659163The Android Open Source Project
227364064216a8433360745f69edddce19a606659163The Android Open Source Project        assoc_getParam(pAPConnection->hAssoc, &param);
227464064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.dataBuf = (char *)(param.content.applicationConfigBuffer.buffer);
227564064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.dataBufLength = param.content.applicationConfigBuffer.bufferSize;
227664064216a8433360745f69edddce19a606659163The Android Open Source Project
227764064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.status = CONN_STATUS_HANDOVER_SUCCESS;
227864064216a8433360745f69edddce19a606659163The Android Open Source Project
227964064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->reportStatusCallb(pAPConnection->hRoamMng, &reportStatus);
228064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
228164064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->retainCurrAPNum++;
228264064216a8433360745f69edddce19a606659163The Android Open Source Project
228364064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->roamReason = ROAMING_TRIGGER_NONE;
228464064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->removeKeys = TRUE;
228564064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->sendDeauthPacket = TRUE;
228664064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->reNegotiateTSPEC = FALSE;
228764064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->voiceTspecConfigured = FALSE;
228864064216a8433360745f69edddce19a606659163The Android Open Source Project	pAPConnection->videoTspecConfigured = FALSE;
228964064216a8433360745f69edddce19a606659163The Android Open Source Project
229064064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
229164064216a8433360745f69edddce19a606659163The Android Open Source Project}
229264064216a8433360745f69edddce19a606659163The Android Open Source Project
229364064216a8433360745f69edddce19a606659163The Android Open Source Project
229464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
229564064216a8433360745f69edddce19a606659163The Android Open Source Project*
229664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_requestCCKM
229764064216a8433360745f69edddce19a606659163The Android Open Source Project*
229864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
229964064216a8433360745f69edddce19a606659163The Android Open Source Project*
230064064216a8433360745f69edddce19a606659163The Android Open Source Project* Roaming Manager requests to roaming.
230164064216a8433360745f69edddce19a606659163The Android Open Source Project* Get CCKM (prepare hand-off).
230264064216a8433360745f69edddce19a606659163The Android Open Source Project*
230364064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
230464064216a8433360745f69edddce19a606659163The Android Open Source Project*
230564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context\n
230664064216a8433360745f69edddce19a606659163The Android Open Source Project*
230764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
230864064216a8433360745f69edddce19a606659163The Android Open Source Project*
230964064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
231064064216a8433360745f69edddce19a606659163The Android Open Source Project*
231164064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
231264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
231364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_requestCCKM(void *data)
231464064216a8433360745f69edddce19a606659163The Android Open Source Project{
231564064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t    *pAPConnection;
231664064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS   status;
231764064216a8433360745f69edddce19a606659163The Android Open Source Project
231864064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection = (apConn_t *)data;
231964064216a8433360745f69edddce19a606659163The Android Open Source Project
232064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
232164064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Send request to EXC module */
232264064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_calcNewTsf(pAPConnection, (UINT8 *)&(pAPConnection->newAP->lastRxTSF), pAPConnection->newAP->lastRxHostTimestamp, pAPConnection->newAP->beaconInterval);
232364064216a8433360745f69edddce19a606659163The Android Open Source Project    status = excMngr_startCckm(pAPConnection->hExcMngr, &(pAPConnection->newAP->BSSID), (UINT8 *)&(pAPConnection->newAP->lastRxTSF));
232464064216a8433360745f69edddce19a606659163The Android Open Source Project#else
232564064216a8433360745f69edddce19a606659163The Android Open Source Project        status  = OK;
232664064216a8433360745f69edddce19a606659163The Android Open Source Project        apConn_RoamHandoffFinished(pAPConnection);
232764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
232864064216a8433360745f69edddce19a606659163The Android Open Source Project        return status;
232964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
233064064216a8433360745f69edddce19a606659163The Android Open Source Project
233164064216a8433360745f69edddce19a606659163The Android Open Source Project
233264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
233364064216a8433360745f69edddce19a606659163The Android Open Source Project/**
233464064216a8433360745f69edddce19a606659163The Android Open Source Project*
233564064216a8433360745f69edddce19a606659163The Android Open Source Project* calcNewTsfTimestamp - Calculates the TSF
233664064216a8433360745f69edddce19a606659163The Android Open Source Project*
233764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
233864064216a8433360745f69edddce19a606659163The Android Open Source Project*
233964064216a8433360745f69edddce19a606659163The Android Open Source Project* Calculates the TSF according to the delta of the TSF from the last Beacon/Probe Resp and the current time.
234064064216a8433360745f69edddce19a606659163The Android Open Source Project*
234164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
234264064216a8433360745f69edddce19a606659163The Android Open Source Project*
234364064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hRoamingMngr - pointer to the roamingMngr SM context  \n
234464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I/O - tsfTimeStamp - the TSF field in the site entry of the roaming candidate AP
234564064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - newSiteOsTimeStamp - the TS field in the site entry of the roaming candidate AP
234664064216a8433360745f69edddce19a606659163The Android Open Source Project*
234764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
234864064216a8433360745f69edddce19a606659163The Android Open Source Project*
234964064216a8433360745f69edddce19a606659163The Android Open Source Project*  Nothing.
235064064216a8433360745f69edddce19a606659163The Android Open Source Project*
235164064216a8433360745f69edddce19a606659163The Android Open Source Project*
235264064216a8433360745f69edddce19a606659163The Android Open Source Project*/
235364064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void apConn_calcNewTsf(apConn_t *hAPConnection, UINT8 *tsfTimeStamp, UINT32 newSiteOsTimeStamp, UINT32 beaconInterval)
235464064216a8433360745f69edddce19a606659163The Android Open Source Project{
235564064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t    *pAPConnection = hAPConnection;
235664064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32      osTimeStamp = os_timeStampMs(pAPConnection->hOs);
235764064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32      deltaTimeStamp;
235864064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32      tsfLsdw,tsfMsdw, newOsTimeStamp;
235964064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32      remainder;
236064064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8       newTsfTimestamp[TIME_STAMP_LEN];
236164064216a8433360745f69edddce19a606659163The Android Open Source Project
236264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* get the delta TS between the TS of the last Beacon/ProbeResp-from the site table
236364064216a8433360745f69edddce19a606659163The Android Open Source Project    and the current TS */
236464064216a8433360745f69edddce19a606659163The Android Open Source Project    deltaTimeStamp = osTimeStamp - newSiteOsTimeStamp;
236564064216a8433360745f69edddce19a606659163The Android Open Source Project    tsfLsdw = *((UINT32*)&tsfTimeStamp[0]);
236664064216a8433360745f69edddce19a606659163The Android Open Source Project    tsfMsdw = *((UINT32*)&tsfTimeStamp[4]);
236764064216a8433360745f69edddce19a606659163The Android Open Source Project
236864064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
236964064216a8433360745f69edddce19a606659163The Android Open Source Project                            (" TSF time LSDW reversed=%x, TSF time MSDW reversed=%x\n",
237064064216a8433360745f69edddce19a606659163The Android Open Source Project                             tsfLsdw, tsfMsdw));
237164064216a8433360745f69edddce19a606659163The Android Open Source Project
237264064216a8433360745f69edddce19a606659163The Android Open Source Project    deltaTimeStamp = deltaTimeStamp*1000;/* from mSec to uSec*/
237364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Before adding, save remainder */
237464064216a8433360745f69edddce19a606659163The Android Open Source Project    remainder = tsfTimeStamp[3] + ((deltaTimeStamp & 0xff000000) >> 24);
237564064216a8433360745f69edddce19a606659163The Android Open Source Project
237664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* The LS DW of the TS is the TSF taken from the last Beacon/Probe Resp
237764064216a8433360745f69edddce19a606659163The Android Open Source Project        + the delta TS from the time the Beacon/Probe Resp arrive till now. */
237864064216a8433360745f69edddce19a606659163The Android Open Source Project    newOsTimeStamp = deltaTimeStamp+tsfLsdw;
237964064216a8433360745f69edddce19a606659163The Android Open Source Project
238064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* substracting one beacon interval */
238164064216a8433360745f69edddce19a606659163The Android Open Source Project    newOsTimeStamp -= (beaconInterval * 1024); /* im usec */
238264064216a8433360745f69edddce19a606659163The Android Open Source Project
238364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* save just for debug printout */
238464064216a8433360745f69edddce19a606659163The Android Open Source Project    deltaTimeStamp +=osTimeStamp; /* uMsec */
238564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* update the LSB of the TSF */
238664064216a8433360745f69edddce19a606659163The Android Open Source Project    newTsfTimestamp[0] = newOsTimeStamp & 0x000000ff;
238764064216a8433360745f69edddce19a606659163The Android Open Source Project    newTsfTimestamp[1] = (newOsTimeStamp & 0x0000ff00) >> 8;
238864064216a8433360745f69edddce19a606659163The Android Open Source Project    newTsfTimestamp[2] = (newOsTimeStamp & 0x00ff0000) >> 16;
238964064216a8433360745f69edddce19a606659163The Android Open Source Project    newTsfTimestamp[3] = (newOsTimeStamp & 0xff000000) >> 24;
239064064216a8433360745f69edddce19a606659163The Android Open Source Project
239164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* increase the MSB in case of overflow */
239264064216a8433360745f69edddce19a606659163The Android Open Source Project    if (remainder > 0xff)
239364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
239464064216a8433360745f69edddce19a606659163The Android Open Source Project        tsfMsdw++;
239564064216a8433360745f69edddce19a606659163The Android Open Source Project
239664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
239764064216a8433360745f69edddce19a606659163The Android Open Source Project    /* update the MSB of the TSF */
239864064216a8433360745f69edddce19a606659163The Android Open Source Project    newTsfTimestamp[4] = tsfMsdw & 0x000000ff;
239964064216a8433360745f69edddce19a606659163The Android Open Source Project    newTsfTimestamp[5] = (tsfMsdw & 0x0000ff00) >> 8;
240064064216a8433360745f69edddce19a606659163The Android Open Source Project    newTsfTimestamp[6] = (tsfMsdw & 0x00ff0000) >> 16;
240164064216a8433360745f69edddce19a606659163The Android Open Source Project    newTsfTimestamp[7] = (tsfMsdw & 0xff000000) >> 24;
240264064216a8433360745f69edddce19a606659163The Android Open Source Project
240364064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
240464064216a8433360745f69edddce19a606659163The Android Open Source Project                            (" NEW TSF time: reversedTsfTimeStamp= 0x%x, New deltaTimeStamp= 0x%x, \n remainder=0x%x, new tsfTimeStamp=%x-%x-%x-%x-%x-%x-%x-%x\n",
240564064216a8433360745f69edddce19a606659163The Android Open Source Project                             newOsTimeStamp, deltaTimeStamp, remainder,
240664064216a8433360745f69edddce19a606659163The Android Open Source Project                             newTsfTimestamp[0], newTsfTimestamp[1], newTsfTimestamp[2], newTsfTimestamp[3],
240764064216a8433360745f69edddce19a606659163The Android Open Source Project                             newTsfTimestamp[4], newTsfTimestamp[5], newTsfTimestamp[6], newTsfTimestamp[7]));
240864064216a8433360745f69edddce19a606659163The Android Open Source Project
240964064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryCopy(pAPConnection->hOs, tsfTimeStamp, newTsfTimestamp, TIME_STAMP_LEN);
241064064216a8433360745f69edddce19a606659163The Android Open Source Project}
241164064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
241264064216a8433360745f69edddce19a606659163The Android Open Source Project
241364064216a8433360745f69edddce19a606659163The Android Open Source Project
241464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
241564064216a8433360745f69edddce19a606659163The Android Open Source Project*
241664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_invokeConnectionToNewAp
241764064216a8433360745f69edddce19a606659163The Android Open Source Project*
241864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
241964064216a8433360745f69edddce19a606659163The Android Open Source Project*
242064064216a8433360745f69edddce19a606659163The Android Open Source Project* Got CCKM (hand-off), start re-connection to another AP
242164064216a8433360745f69edddce19a606659163The Android Open Source Project*
242264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
242364064216a8433360745f69edddce19a606659163The Android Open Source Project*
242464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context\n
242564064216a8433360745f69edddce19a606659163The Android Open Source Project*
242664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
242764064216a8433360745f69edddce19a606659163The Android Open Source Project*
242864064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
242964064216a8433360745f69edddce19a606659163The Android Open Source Project*
243064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
243164064216a8433360745f69edddce19a606659163The Android Open Source Project*/
243264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_invokeConnectionToNewAp(void *data)
243364064216a8433360745f69edddce19a606659163The Android Open Source Project{
243464064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t    *pAPConnection;
243564064216a8433360745f69edddce19a606659163The Android Open Source Project    connType_e  connType;
243645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    paramInfoPartial_t param;
243764064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8   staPrivacySupported, apPrivacySupported;
243864064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL    renegotiateTspec = FALSE;
243964064216a8433360745f69edddce19a606659163The Android Open Source Project
244064064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection = (apConn_t *)data;
244164064216a8433360745f69edddce19a606659163The Android Open Source Project
244264064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->roamingStartedTimestamp = os_timeStampMs(pAPConnection->hOs);
244364064216a8433360745f69edddce19a606659163The Android Open Source Project
244464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Check privacy compatibility */
244564064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = RSN_ENCRYPTION_STATUS_PARAM;
244645544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    rsn_getParamPartial(pAPConnection->hPrivacy, &param);
244764064216a8433360745f69edddce19a606659163The Android Open Source Project
244864064216a8433360745f69edddce19a606659163The Android Open Source Project    staPrivacySupported = (param.content.rsnEncryptionStatus == RSN_CIPHER_NONE) ? FALSE : TRUE;
244964064216a8433360745f69edddce19a606659163The Android Open Source Project    apPrivacySupported  = ((pAPConnection->newAP->capabilities >> CAP_PRIVACY_SHIFT) & CAP_PRIVACY_MASK) ? TRUE : FALSE;
245064064216a8433360745f69edddce19a606659163The Android Open Source Project
245164064216a8433360745f69edddce19a606659163The Android Open Source Project    if (staPrivacySupported != apPrivacySupported)
245264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
245364064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = RSN_MIXED_MODE;
245445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt        rsn_getParamPartial(pAPConnection->hPrivacy, &param);
245564064216a8433360745f69edddce19a606659163The Android Open Source Project
245664064216a8433360745f69edddce19a606659163The Android Open Source Project        if (apPrivacySupported ||
245764064216a8433360745f69edddce19a606659163The Android Open Source Project            (!param.content.rsnMixedMode && staPrivacySupported))
245864064216a8433360745f69edddce19a606659163The Android Open Source Project        {
245964064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_REPORT_WARNING(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
246064064216a8433360745f69edddce19a606659163The Android Open Source Project                                ("%s: failed privacy comparison %d vs. %d\n", __FUNCTION__, staPrivacySupported, apPrivacySupported));
246164064216a8433360745f69edddce19a606659163The Android Open Source Project            return (apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_NOT_OK, pAPConnection));
246264064216a8433360745f69edddce19a606659163The Android Open Source Project        }
246364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
246464064216a8433360745f69edddce19a606659163The Android Open Source Project
246564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Update data info of desired AP; in case of first attempt to roam,
246664064216a8433360745f69edddce19a606659163The Android Open Source Project       store previous primary site info */
246764064216a8433360745f69edddce19a606659163The Android Open Source Project    if (siteMgr_overwritePrimarySite(pAPConnection->hSiteMgr, pAPConnection->newAP, pAPConnection->firstAttempt2Roam) != OK)
246864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
246964064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_WARNING(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
247064064216a8433360745f69edddce19a606659163The Android Open Source Project                            ("%s: failed to ovewrite Primary Site\n", __FUNCTION__));
247164064216a8433360745f69edddce19a606659163The Android Open Source Project        return (apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_NOT_OK, pAPConnection));
247264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
247364064216a8433360745f69edddce19a606659163The Android Open Source Project
247464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Update re-associate parameter of MLME */
247564064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->requestType == AP_CONNECT_FAST_TO_AP)
247664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
247764064216a8433360745f69edddce19a606659163The Android Open Source Project        connType = CONN_TYPE_ROAM;
247864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
247964064216a8433360745f69edddce19a606659163The Android Open Source Project    else
248064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
248164064216a8433360745f69edddce19a606659163The Android Open Source Project        connType = CONN_TYPE_FIRST_CONN;
248264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
248364064216a8433360745f69edddce19a606659163The Android Open Source Project
248464064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
248564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Check the need in TSPEC re-negotiation */
248664064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( (pAPConnection->voiceTspecConfigured || pAPConnection->videoTspecConfigured)
248764064216a8433360745f69edddce19a606659163The Android Open Source Project		 && pAPConnection->reNegotiateTSPEC )
248864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
248964064216a8433360745f69edddce19a606659163The Android Open Source Project        /* If the candidate AP is at least EXCver4 AP, try to re-negotiate TSPECs */
249064064216a8433360745f69edddce19a606659163The Android Open Source Project        if (excMngr_parseExcVer(pAPConnection->hExcMngr,
249164064216a8433360745f69edddce19a606659163The Android Open Source Project                                pAPConnection->newAP->pBuffer,
249264064216a8433360745f69edddce19a606659163The Android Open Source Project                                pAPConnection->newAP->bufferLength) >= 4)
249364064216a8433360745f69edddce19a606659163The Android Open Source Project        {
249464064216a8433360745f69edddce19a606659163The Android Open Source Project            renegotiateTspec = TRUE;
249564064216a8433360745f69edddce19a606659163The Android Open Source Project        }
249664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
249764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
249864064216a8433360745f69edddce19a606659163The Android Open Source Project
249964064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
250064064216a8433360745f69edddce19a606659163The Android Open Source Project                            ("%s: calls conn_start, removeKeys=%d, renegotiateTSPEC=%d\n", __FUNCTION__,
250164064216a8433360745f69edddce19a606659163The Android Open Source Project                             pAPConnection->removeKeys, renegotiateTspec));
250264064216a8433360745f69edddce19a606659163The Android Open Source Project
250364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Start Connection state machine */
250464064216a8433360745f69edddce19a606659163The Android Open Source Project    return conn_start(pAPConnection->hConnSm,
250564064216a8433360745f69edddce19a606659163The Android Open Source Project                      connType,
250664064216a8433360745f69edddce19a606659163The Android Open Source Project                      apConn_ConnCompleteInd,
250764064216a8433360745f69edddce19a606659163The Android Open Source Project                      pAPConnection,
250864064216a8433360745f69edddce19a606659163The Android Open Source Project                      pAPConnection->removeKeys,
250964064216a8433360745f69edddce19a606659163The Android Open Source Project                      renegotiateTspec);
251064064216a8433360745f69edddce19a606659163The Android Open Source Project}
251164064216a8433360745f69edddce19a606659163The Android Open Source Project
251264064216a8433360745f69edddce19a606659163The Android Open Source Project
251364064216a8433360745f69edddce19a606659163The Android Open Source Project/**
251464064216a8433360745f69edddce19a606659163The Android Open Source Project*
251564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_reportConnFail
251664064216a8433360745f69edddce19a606659163The Android Open Source Project*
251764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
251864064216a8433360745f69edddce19a606659163The Android Open Source Project*
251964064216a8433360745f69edddce19a606659163The Android Open Source Project* Got 'Failed' indication from Connection state machine - inform Roaming Manager Module
252064064216a8433360745f69edddce19a606659163The Android Open Source Project*
252164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
252264064216a8433360745f69edddce19a606659163The Android Open Source Project*
252364064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context\n
252464064216a8433360745f69edddce19a606659163The Android Open Source Project*
252564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
252664064216a8433360745f69edddce19a606659163The Android Open Source Project*
252764064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
252864064216a8433360745f69edddce19a606659163The Android Open Source Project*
252964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
253064064216a8433360745f69edddce19a606659163The Android Open Source Project*/
253164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_reportConnFail(void *data)
253264064216a8433360745f69edddce19a606659163The Android Open Source Project{
253364064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection;
253464064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_connStatus_t reportStatus;
253545544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    paramInfoPartial_t param;
253664064216a8433360745f69edddce19a606659163The Android Open Source Project
253764064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection = (apConn_t *)data;
253864064216a8433360745f69edddce19a606659163The Android Open Source Project
253964064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->firstAttempt2Roam = FALSE;
254064064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->resetReportedRoamingStatistics = FALSE;
254164064216a8433360745f69edddce19a606659163The Android Open Source Project
254264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Erase vendor specific info-element if was defined for last AP Assoc request */
254364064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->vsIElength = 0;
254464064216a8433360745f69edddce19a606659163The Android Open Source Project
254564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Report to Roaming Manager */
254664064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->reportStatusCallb != NULL)
254764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
254864064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType   = ASSOC_ASSOCIATION_RESP_PARAM;
254964064216a8433360745f69edddce19a606659163The Android Open Source Project
255045544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt        assoc_getParamPartial(pAPConnection->hAssoc, &param);
255164064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.dataBuf = (char *)(param.content.applicationConfigBuffer.buffer);
255264064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.dataBufLength = param.content.applicationConfigBuffer.bufferSize;
255364064216a8433360745f69edddce19a606659163The Android Open Source Project
255464064216a8433360745f69edddce19a606659163The Android Open Source Project        reportStatus.status = CONN_STATUS_HANDOVER_FAILURE;
255564064216a8433360745f69edddce19a606659163The Android Open Source Project
255664064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->reportStatusCallb(pAPConnection->hRoamMng, &reportStatus);
255764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
255864064216a8433360745f69edddce19a606659163The Android Open Source Project
255964064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
256064064216a8433360745f69edddce19a606659163The Android Open Source Project}
256164064216a8433360745f69edddce19a606659163The Android Open Source Project
256264064216a8433360745f69edddce19a606659163The Android Open Source Project
256364064216a8433360745f69edddce19a606659163The Android Open Source Project/**
256464064216a8433360745f69edddce19a606659163The Android Open Source Project*
256564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_configureSCR
256664064216a8433360745f69edddce19a606659163The Android Open Source Project*
256764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
256864064216a8433360745f69edddce19a606659163The Android Open Source Project*
256964064216a8433360745f69edddce19a606659163The Android Open Source Project* Got 'Failed' indication from Connection state machine - inform Roaming Manager Module
257064064216a8433360745f69edddce19a606659163The Android Open Source Project*
257164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
257264064216a8433360745f69edddce19a606659163The Android Open Source Project*
257364064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context\n
257464064216a8433360745f69edddce19a606659163The Android Open Source Project*
257564064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
257664064216a8433360745f69edddce19a606659163The Android Open Source Project*
257764064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
257864064216a8433360745f69edddce19a606659163The Android Open Source Project*
257964064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
258064064216a8433360745f69edddce19a606659163The Android Open Source Project*/
258164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_configureDriverBeforeRoaming(void *pData)
258264064216a8433360745f69edddce19a606659163The Android Open Source Project{
258364064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t    *pAPConnection = (apConn_t*)pData;
258445544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    paramInfoPartial_t param;
258564064216a8433360745f69edddce19a606659163The Android Open Source Project
258664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Configure SCR group of allowed clients according to 'Roaming' rule */
258764064216a8433360745f69edddce19a606659163The Android Open Source Project    scr_setGroup (pAPConnection->hScr, SCR_GID_ROAMING);
258864064216a8433360745f69edddce19a606659163The Android Open Source Project    param.paramType = QOS_MNGR_VOICE_RE_NEGOTIATE_TSPEC;
258945544f73189f4649d4afb21a0dab72cd70971e2fDmitry Shmidt    qosMngr_getParamsPatial(pAPConnection->hQos, &param);
259064064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->voiceTspecConfigured = param.content.TspecConfigure.voiceTspecConfigure;
259164064216a8433360745f69edddce19a606659163The Android Open Source Project	pAPConnection->videoTspecConfigured = param.content.TspecConfigure.videoTspecConfigure;
259264064216a8433360745f69edddce19a606659163The Android Open Source Project    pAPConnection->resetReportedRoamingStatistics = FALSE;
259364064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
259464064216a8433360745f69edddce19a606659163The Android Open Source Project}
259564064216a8433360745f69edddce19a606659163The Android Open Source Project
259664064216a8433360745f69edddce19a606659163The Android Open Source Project
259764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
259864064216a8433360745f69edddce19a606659163The Android Open Source Project*
259964064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_swChFinished
260064064216a8433360745f69edddce19a606659163The Android Open Source Project*
260164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
260264064216a8433360745f69edddce19a606659163The Android Open Source Project*
260364064216a8433360745f69edddce19a606659163The Android Open Source Project* Switch channel completed; if there were roaming Manager triggers meanwhile,
260464064216a8433360745f69edddce19a606659163The Android Open Source Project* inform Roaming Manager Module
260564064216a8433360745f69edddce19a606659163The Android Open Source Project*
260664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
260764064216a8433360745f69edddce19a606659163The Android Open Source Project*
260864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context\n
260964064216a8433360745f69edddce19a606659163The Android Open Source Project*
261064064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
261164064216a8433360745f69edddce19a606659163The Android Open Source Project*
261264064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
261364064216a8433360745f69edddce19a606659163The Android Open Source Project*
261464064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
261564064216a8433360745f69edddce19a606659163The Android Open Source Project*/
261664064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_swChFinished(void *pData)
261764064216a8433360745f69edddce19a606659163The Android Open Source Project{
261864064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)pData;
261964064216a8433360745f69edddce19a606659163The Android Open Source Project
262064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Inform Current BSS module */
262164064216a8433360745f69edddce19a606659163The Android Open Source Project    currBSS_restartRssiCounting(pAPConnection->hCurrBSS);
262264064216a8433360745f69edddce19a606659163The Android Open Source Project
262364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* If there are unreported roaming triggers of 'No AP' type,
262464064216a8433360745f69edddce19a606659163The Android Open Source Project       report them now to roaming manager */
262564064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->roamReason >= ROAMING_TRIGGER_MAX_TX_RETRIES)
262664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
262764064216a8433360745f69edddce19a606659163The Android Open Source Project        if ((pAPConnection->roamingEnabled == TRUE) &&
262864064216a8433360745f69edddce19a606659163The Android Open Source Project            (pAPConnection->roamEventCallb != NULL))
262964064216a8433360745f69edddce19a606659163The Android Open Source Project        {
263064064216a8433360745f69edddce19a606659163The Android Open Source Project            /* Report to Roaming Manager */
263164064216a8433360745f69edddce19a606659163The Android Open Source Project            pAPConnection->roamEventCallb(pAPConnection->hRoamMng, &pAPConnection->roamReason);
263264064216a8433360745f69edddce19a606659163The Android Open Source Project        }
263364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
263464064216a8433360745f69edddce19a606659163The Android Open Source Project    else
263564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
263664064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->roamReason = ROAMING_TRIGGER_NONE;
263764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
263864064216a8433360745f69edddce19a606659163The Android Open Source Project
263964064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
264064064216a8433360745f69edddce19a606659163The Android Open Source Project}
264164064216a8433360745f69edddce19a606659163The Android Open Source Project
264264064216a8433360745f69edddce19a606659163The Android Open Source Project
264364064216a8433360745f69edddce19a606659163The Android Open Source Project/**
264464064216a8433360745f69edddce19a606659163The Android Open Source Project*
264564064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_handleTspecReneg
264664064216a8433360745f69edddce19a606659163The Android Open Source Project*
264764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
264864064216a8433360745f69edddce19a606659163The Android Open Source Project*
264964064216a8433360745f69edddce19a606659163The Android Open Source Project* This function will be called when moving from CONNECTING state to
265064064216a8433360745f69edddce19a606659163The Android Open Source Project* START_TSPEC_RENEGOTIATION state. It checks if TSPEC re-negotiation was requested
265164064216a8433360745f69edddce19a606659163The Android Open Source Project* by roaming manager, if the TSPEC for voice was defined by user application,
265264064216a8433360745f69edddce19a606659163The Android Open Source Project* if the re-negotiation was performed during hand-over.
265364064216a8433360745f69edddce19a606659163The Android Open Source Project* If so, it will trigger moving to WAIT_ROAM state, otherwise it will start
265464064216a8433360745f69edddce19a606659163The Android Open Source Project* TSPEC negotiation, staying in the REESTABLISHING_VOICE state and waiting
265564064216a8433360745f69edddce19a606659163The Android Open Source Project* for results.
265664064216a8433360745f69edddce19a606659163The Android Open Source Project*
265764064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
265864064216a8433360745f69edddce19a606659163The Android Open Source Project*
265964064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pData - pointer to AP Connection context\n
266064064216a8433360745f69edddce19a606659163The Android Open Source Project*
266164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
266264064216a8433360745f69edddce19a606659163The Android Open Source Project*
266364064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
266464064216a8433360745f69edddce19a606659163The Android Open Source Project*
266564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
266664064216a8433360745f69edddce19a606659163The Android Open Source Project*/
266764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_handleTspecReneg (void *pData)
266864064216a8433360745f69edddce19a606659163The Android Open Source Project{
266964064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)pData;
267064064216a8433360745f69edddce19a606659163The Android Open Source Project    paramInfo_t param;
267164064216a8433360745f69edddce19a606659163The Android Open Source Project
267264064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->voiceTspecConfigured && pAPConnection->reNegotiateTSPEC)
267364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
267464064216a8433360745f69edddce19a606659163The Android Open Source Project        param.paramType = QOS_MNGR_VOICE_RE_NEGOTIATE_TSPEC;
267564064216a8433360745f69edddce19a606659163The Android Open Source Project        qosMngr_getParams(pAPConnection->hQos, &param);
267664064216a8433360745f69edddce19a606659163The Android Open Source Project
267764064216a8433360745f69edddce19a606659163The Android Open Source Project        if (param.content.TspecConfigure.voiceTspecConfigure == TRUE)
267864064216a8433360745f69edddce19a606659163The Android Open Source Project        {
267964064216a8433360745f69edddce19a606659163The Android Open Source Project            /* TSPEC is already configured, move to CONNECTED */
268064064216a8433360745f69edddce19a606659163The Android Open Source Project            return apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_OK, pAPConnection);
268164064216a8433360745f69edddce19a606659163The Android Open Source Project        }
268264064216a8433360745f69edddce19a606659163The Android Open Source Project        else
268364064216a8433360745f69edddce19a606659163The Android Open Source Project        {
268464064216a8433360745f69edddce19a606659163The Android Open Source Project            param.paramType = QOS_MNGR_RESEND_TSPEC_REQUEST;
268564064216a8433360745f69edddce19a606659163The Android Open Source Project            param.content.qosRenegotiateTspecRequest.callback = (void *)apConn_qosMngrReportResultCallb;
268664064216a8433360745f69edddce19a606659163The Android Open Source Project            param.content.qosRenegotiateTspecRequest.handler = pData;
268764064216a8433360745f69edddce19a606659163The Android Open Source Project
268864064216a8433360745f69edddce19a606659163The Android Open Source Project            if (qosMngr_setParams(pAPConnection->hQos, &param) != OK)
268964064216a8433360745f69edddce19a606659163The Android Open Source Project            {
269064064216a8433360745f69edddce19a606659163The Android Open Source Project                /* Re-negotiation of TSPEC cannot be performed */
269164064216a8433360745f69edddce19a606659163The Android Open Source Project                return apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_NOT_OK, pAPConnection);
269264064216a8433360745f69edddce19a606659163The Android Open Source Project            }
269364064216a8433360745f69edddce19a606659163The Android Open Source Project            return OK;
269464064216a8433360745f69edddce19a606659163The Android Open Source Project        }
269564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
269664064216a8433360745f69edddce19a606659163The Android Open Source Project    else
269764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
269864064216a8433360745f69edddce19a606659163The Android Open Source Project        /* No need to re-negotiate TSPEC, move to CONNECTED */
269964064216a8433360745f69edddce19a606659163The Android Open Source Project        return apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_OK, pAPConnection);
270064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
270164064216a8433360745f69edddce19a606659163The Android Open Source Project}
270264064216a8433360745f69edddce19a606659163The Android Open Source Project
270364064216a8433360745f69edddce19a606659163The Android Open Source Project
270464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
270564064216a8433360745f69edddce19a606659163The Android Open Source Project*
270664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_qosMngrReportResultCallb
270764064216a8433360745f69edddce19a606659163The Android Open Source Project*
270864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
270964064216a8433360745f69edddce19a606659163The Android Open Source Project*
271064064216a8433360745f69edddce19a606659163The Android Open Source Project* This function will be transferred to QoS manager upon request to start negotiation
271164064216a8433360745f69edddce19a606659163The Android Open Source Project* of the TSPEC for voice and signaling, and will be called when the voice TSPEC
271264064216a8433360745f69edddce19a606659163The Android Open Source Project* renegotiation is completed. The function will generate FINISHED_OK or
271364064216a8433360745f69edddce19a606659163The Android Open Source Project* FINISHED_NOK events to the state machine of AP Connection, triggering change of
271464064216a8433360745f69edddce19a606659163The Android Open Source Project* the current state.
271564064216a8433360745f69edddce19a606659163The Android Open Source Project*
271664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
271764064216a8433360745f69edddce19a606659163The Android Open Source Project*
271864064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - hApConn - pointer to AP Connection context\n
271964064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - result - returned by Traffic admission control\n
272064064216a8433360745f69edddce19a606659163The Android Open Source Project*
272164064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
272264064216a8433360745f69edddce19a606659163The Android Open Source Project*
272364064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
272464064216a8433360745f69edddce19a606659163The Android Open Source Project*
272564064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
272664064216a8433360745f69edddce19a606659163The Android Open Source Project*/
272764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic TI_STATUS apConn_qosMngrReportResultCallb (TI_HANDLE hApConn, trafficAdmRequestStatus_e result)
272864064216a8433360745f69edddce19a606659163The Android Open Source Project{
272964064216a8433360745f69edddce19a606659163The Android Open Source Project    apConn_t *pAPConnection = (apConn_t *)hApConn;
273064064216a8433360745f69edddce19a606659163The Android Open Source Project
273164064216a8433360745f69edddce19a606659163The Android Open Source Project    AP_CONN_VALIDATE_HANDLE(hApConn);
273264064216a8433360745f69edddce19a606659163The Android Open Source Project
273364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (result == STATUS_TRAFFIC_ADM_REQUEST_ACCEPT)
273464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
273564064216a8433360745f69edddce19a606659163The Android Open Source Project        apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_OK, pAPConnection);
273664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
273764064216a8433360745f69edddce19a606659163The Android Open Source Project    else
273864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
273964064216a8433360745f69edddce19a606659163The Android Open Source Project        apConn_smEvent(&(pAPConnection->currentState), AP_CONNECT_EVENT_FINISHED_NOT_OK, pAPConnection);
274064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
274164064216a8433360745f69edddce19a606659163The Android Open Source Project    return OK;
274264064216a8433360745f69edddce19a606659163The Android Open Source Project}
274364064216a8433360745f69edddce19a606659163The Android Open Source Project
274464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
274564064216a8433360745f69edddce19a606659163The Android Open Source Project*
274664064216a8433360745f69edddce19a606659163The Android Open Source Project* apConn_reportConnStatusToSME
274764064216a8433360745f69edddce19a606659163The Android Open Source Project*
274864064216a8433360745f69edddce19a606659163The Android Open Source Project* \b Description:
274964064216a8433360745f69edddce19a606659163The Android Open Source Project*
275064064216a8433360745f69edddce19a606659163The Android Open Source Project* Sends report to SME regarding the connection status
275164064216a8433360745f69edddce19a606659163The Android Open Source Project*
275264064216a8433360745f69edddce19a606659163The Android Open Source Project* \b ARGS:
275364064216a8433360745f69edddce19a606659163The Android Open Source Project*
275464064216a8433360745f69edddce19a606659163The Android Open Source Project*  I   - pAPConnection  - pointer to AP Connection context\n
275564064216a8433360745f69edddce19a606659163The Android Open Source Project*
275664064216a8433360745f69edddce19a606659163The Android Open Source Project* \b RETURNS:
275764064216a8433360745f69edddce19a606659163The Android Open Source Project*
275864064216a8433360745f69edddce19a606659163The Android Open Source Project*  OK on success, NOK otherwise.
275964064216a8433360745f69edddce19a606659163The Android Open Source Project*
276064064216a8433360745f69edddce19a606659163The Android Open Source Project* \sa
276164064216a8433360745f69edddce19a606659163The Android Open Source Project*/
276264064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void apConn_reportConnStatusToSME (apConn_t *pAPConnection)
276364064216a8433360745f69edddce19a606659163The Android Open Source Project{
276464064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pAPConnection->hReport, ROAMING_MANAGER_MODULE_LOG,
276564064216a8433360745f69edddce19a606659163The Android Open Source Project        ("%s roamingTrigger = %d, APDisconnectStatusCode = %d, bNonRoamingDisAssocReason = %d\n",
276664064216a8433360745f69edddce19a606659163The Android Open Source Project        __FUNCTION__, pAPConnection->roamReason, pAPConnection->APDisconnect.uStatusCode,
276764064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->bNonRoamingDisAssocReason));
276864064216a8433360745f69edddce19a606659163The Android Open Source Project
276964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Check if an outside reason caused the disconnection. */
277064064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pAPConnection->bNonRoamingDisAssocReason)
277164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
277264064216a8433360745f69edddce19a606659163The Android Open Source Project        pAPConnection->bNonRoamingDisAssocReason = FALSE;
277364064216a8433360745f69edddce19a606659163The Android Open Source Project        smeSm_reportConnStatus(pAPConnection->hSme, STATUS_UNSPECIFIED, 0);
277464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
277564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* DisAssociation happened due to roaming trigger */
277664064216a8433360745f69edddce19a606659163The Android Open Source Project    else if (pAPConnection->roamReason == ROAMING_TRIGGER_AP_DISCONNECT)
277764064216a8433360745f69edddce19a606659163The Android Open Source Project    {   /* AP disconnect is a special case of the status delivered to SME */
277864064216a8433360745f69edddce19a606659163The Android Open Source Project        mgmtStatus_e mgmtStatus = ( pAPConnection->APDisconnect.bDeAuthenticate ? STATUS_AP_DEAUTHENTICATE : STATUS_AP_DISASSOCIATE );
277964064216a8433360745f69edddce19a606659163The Android Open Source Project        smeSm_reportConnStatus(pAPConnection->hSme, mgmtStatus, pAPConnection->APDisconnect.uStatusCode);
278064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
278164064216a8433360745f69edddce19a606659163The Android Open Source Project    else    /* Finally, just send the last roaming trigger */
278264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
278364064216a8433360745f69edddce19a606659163The Android Open Source Project        smeSm_reportConnStatus(pAPConnection->hSme, STATUS_ROAMING_TRIGGER, (UINT32)pAPConnection->roamReason);
278464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
278564064216a8433360745f69edddce19a606659163The Android Open Source Project}
278664064216a8433360745f69edddce19a606659163The Android Open Source Project
278764064216a8433360745f69edddce19a606659163The Android Open Source Project
2788