164064216a8433360745f69edddce19a606659163The Android Open Source Project
264064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
364064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
464064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
564064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
664064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved.                                                  |**
764064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
864064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without    |**
964064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions    |**
1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met:                                                              |**
1164064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1264064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions of source code must retain the above copyright     |**
1364064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer.      |**
1464064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions in binary form must reproduce the above copyright  |**
1564064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer in    |**
1664064216a8433360745f69edddce19a606659163The Android Open Source Project**|    the documentation and/or other materials provided with the         |**
1764064216a8433360745f69edddce19a606659163The Android Open Source Project**|    distribution.                                                      |**
1864064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Neither the name Texas Instruments nor the names of its            |**
1964064216a8433360745f69edddce19a606659163The Android Open Source Project**|    contributors may be used to endorse or promote products derived    |**
2064064216a8433360745f69edddce19a606659163The Android Open Source Project**|    from this software without specific prior written permission.      |**
2164064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
2264064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
2364064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
2464064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
2564064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
3364064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
3464064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
3564064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/
3664064216a8433360745f69edddce19a606659163The Android Open Source Project
3764064216a8433360745f69edddce19a606659163The Android Open Source Project/***************************************************************************/
3864064216a8433360745f69edddce19a606659163The Android Open Source Project/*																		   */
3964064216a8433360745f69edddce19a606659163The Android Open Source Project/*	  MODULE:	measurementMgr.c										   */
4064064216a8433360745f69edddce19a606659163The Android Open Source Project/*    PURPOSE:	measurement Manager module file							   */
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
4664064216a8433360745f69edddce19a606659163The Android Open Source Project
4764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "measurementMgr.h"
4864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "regulatoryDomainApi.h"
4964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "healthMonitor.h"
5064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "siteMgrApi.h"
5164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "utils.h"
5264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "TrafficMonitorAPI.h"
5364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "smeApi.h"
5464064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
5564064216a8433360745f69edddce19a606659163The Android Open Source Project #include "excTSMngr.h"
5664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
5764064216a8433360745f69edddce19a606659163The Android Open Source Project
5864064216a8433360745f69edddce19a606659163The Android Open Source Project
5964064216a8433360745f69edddce19a606659163The Android Open Source Project
6064064216a8433360745f69edddce19a606659163The Android Open Source Project/* allocation vector */
6164064216a8433360745f69edddce19a606659163The Android Open Source Project#define MEASUREMENT_INIT_BIT								(1)
6264064216a8433360745f69edddce19a606659163The Android Open Source Project#define MEASUREMENT_ACTIVATION_DELAY_TIMER_INIT_BIT			(2)
6364064216a8433360745f69edddce19a606659163The Android Open Source Project#define MEASUREMENT_SM_INIT_BIT                             (3)
6464064216a8433360745f69edddce19a606659163The Android Open Source Project#define MEASUREMENT_REQUEST_HANDLER_SUB_MODULE_INIT_BIT		(4)
6564064216a8433360745f69edddce19a606659163The Android Open Source Project
6664064216a8433360745f69edddce19a606659163The Android Open Source Project
6764064216a8433360745f69edddce19a606659163The Android Open Source Project/* default measurement parameters */
6864064216a8433360745f69edddce19a606659163The Android Open Source Project#define MEASUREMENT_CAPABILITIES_NONE					0x00
6964064216a8433360745f69edddce19a606659163The Android Open Source Project#define MEASUREMENT_CAPABILITIES_DOT11H					0x01
7064064216a8433360745f69edddce19a606659163The Android Open Source Project#define MEASUREMENT_CAPABILITIES_EXC_RM					0x02
7164064216a8433360745f69edddce19a606659163The Android Open Source Project
7264064216a8433360745f69edddce19a606659163The Android Open Source Project
7364064216a8433360745f69edddce19a606659163The Android Open Source Project#define MEASUREMENT_BEACON_INTERVAL_IN_MICRO_SEC		1024
7464064216a8433360745f69edddce19a606659163The Android Open Source Project#define MEASUREMENT_MSEC_IN_MICRO                       1000
7564064216a8433360745f69edddce19a606659163The Android Open Source Project
7664064216a8433360745f69edddce19a606659163The Android Open Source Project
7764064216a8433360745f69edddce19a606659163The Android Open Source Project
7864064216a8433360745f69edddce19a606659163The Android Open Source Project
7964064216a8433360745f69edddce19a606659163The Android Open Source Project
8064064216a8433360745f69edddce19a606659163The Android Open Source Project
8164064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
8264064216a8433360745f69edddce19a606659163The Android Open Source Project/*						Internal functions prototypes.							*/
8364064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
8464064216a8433360745f69edddce19a606659163The Android Open Source Project
8564064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void measurementMgr_releaseModule(measurementMgr_t * pMeasurementMgr, UINT32 initVec);
8664064216a8433360745f69edddce19a606659163The Android Open Source Project
8764064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic BOOL measurementMgr_isTrafficIntensityHigherThanThreshold(measurementMgr_t * pMeasurementMgr);
8864064216a8433360745f69edddce19a606659163The Android Open Source Project
8964064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic BOOL	measurementMgr_isRequestValid(TI_HANDLE hMeasurementMgr, MeasurementRequest_t *pRequestArr[], UINT8 numOfRequest);
9064064216a8433360745f69edddce19a606659163The Android Open Source Project
9164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void	measurementMgr_uponActivationDelayTimeout(TI_HANDLE Context);
9264064216a8433360745f69edddce19a606659163The Android Open Source Project
9364064216a8433360745f69edddce19a606659163The Android Open Source Project
9464064216a8433360745f69edddce19a606659163The Android Open Source Project
9564064216a8433360745f69edddce19a606659163The Android Open Source Project
9664064216a8433360745f69edddce19a606659163The Android Open Source Project
9764064216a8433360745f69edddce19a606659163The Android Open Source Project
9864064216a8433360745f69edddce19a606659163The Android Open Source Project
9964064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
10064064216a8433360745f69edddce19a606659163The Android Open Source Project/*						Interface functions Implementation.						*/
10164064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
10264064216a8433360745f69edddce19a606659163The Android Open Source Project
10364064216a8433360745f69edddce19a606659163The Android Open Source Project
10464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
10564064216a8433360745f69edddce19a606659163The Android Open Source Project * Creates the Measurement Manager moodule.
10664064216a8433360745f69edddce19a606659163The Android Open Source Project *
10764064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hOs A handle to the OS object.
10864064216a8433360745f69edddce19a606659163The Android Open Source Project *
10964064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 16-Dec-2005
11064064216a8433360745f69edddce19a606659163The Android Open Source Project */
11164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE measurementMgr_create(TI_HANDLE hOs)
11264064216a8433360745f69edddce19a606659163The Android Open Source Project{
11364064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgr_t * pMeasurementMgr = NULL;
11464064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT32 initVec = 0;
11564064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS status;
11664064216a8433360745f69edddce19a606659163The Android Open Source Project
11764064216a8433360745f69edddce19a606659163The Android Open Source Project	/* allocating the MeasurementMgr object */
11864064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr = os_memoryAlloc(hOs, sizeof(measurementMgr_t));
11964064216a8433360745f69edddce19a606659163The Android Open Source Project
12064064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pMeasurementMgr == NULL)
12164064216a8433360745f69edddce19a606659163The Android Open Source Project		return NULL;
12264064216a8433360745f69edddce19a606659163The Android Open Source Project
12364064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryZero(hOs, pMeasurementMgr, sizeof(measurementMgr_t));
12464064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->hOs = hOs;
12564064216a8433360745f69edddce19a606659163The Android Open Source Project
12664064216a8433360745f69edddce19a606659163The Android Open Source Project	initVec |= (1 << MEASUREMENT_INIT_BIT);
12764064216a8433360745f69edddce19a606659163The Android Open Source Project
12864064216a8433360745f69edddce19a606659163The Android Open Source Project
12964064216a8433360745f69edddce19a606659163The Android Open Source Project	/* allocating the measurement Activation Delay timer */
13064064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->pActivationDelayTimer = os_timerCreate(hOs, measurementMgr_uponActivationDelayTimeout,
13164064216a8433360745f69edddce19a606659163The Android Open Source Project                                                         pMeasurementMgr);
13264064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pMeasurementMgr->pActivationDelayTimer == NULL)
13364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
13464064216a8433360745f69edddce19a606659163The Android Open Source Project		measurementMgr_releaseModule(pMeasurementMgr, initVec);
13564064216a8433360745f69edddce19a606659163The Android Open Source Project		return NULL;
13664064216a8433360745f69edddce19a606659163The Android Open Source Project	}
13764064216a8433360745f69edddce19a606659163The Android Open Source Project
13864064216a8433360745f69edddce19a606659163The Android Open Source Project	initVec |= (1<<MEASUREMENT_ACTIVATION_DELAY_TIMER_INIT_BIT);
13964064216a8433360745f69edddce19a606659163The Android Open Source Project
14064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
14164064216a8433360745f69edddce19a606659163The Android Open Source Project	if ((pMeasurementMgr->pTsMetricsReportTimer[QOS_AC_BE] =
14264064216a8433360745f69edddce19a606659163The Android Open Source Project		os_timerCreate(hOs, measurementMgr_sendTSMReport_AC_BE, pMeasurementMgr)) == NULL)
14364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
14464064216a8433360745f69edddce19a606659163The Android Open Source Project		measurementMgr_releaseModule(pMeasurementMgr, initVec);
14564064216a8433360745f69edddce19a606659163The Android Open Source Project		return NULL;
14664064216a8433360745f69edddce19a606659163The Android Open Source Project	}
14764064216a8433360745f69edddce19a606659163The Android Open Source Project
14864064216a8433360745f69edddce19a606659163The Android Open Source Project	if ((pMeasurementMgr->pTsMetricsReportTimer[QOS_AC_BK] =
14964064216a8433360745f69edddce19a606659163The Android Open Source Project		os_timerCreate(hOs, measurementMgr_sendTSMReport_AC_BK, pMeasurementMgr)) == NULL)
15064064216a8433360745f69edddce19a606659163The Android Open Source Project	{
15164064216a8433360745f69edddce19a606659163The Android Open Source Project		measurementMgr_releaseModule(pMeasurementMgr, initVec);
15264064216a8433360745f69edddce19a606659163The Android Open Source Project		return NULL;
15364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
15464064216a8433360745f69edddce19a606659163The Android Open Source Project	if ((pMeasurementMgr->pTsMetricsReportTimer[QOS_AC_VI] =
15564064216a8433360745f69edddce19a606659163The Android Open Source Project		os_timerCreate(hOs, measurementMgr_sendTSMReport_AC_VI, pMeasurementMgr)) == NULL)
15664064216a8433360745f69edddce19a606659163The Android Open Source Project	{
15764064216a8433360745f69edddce19a606659163The Android Open Source Project		measurementMgr_releaseModule(pMeasurementMgr, initVec);
15864064216a8433360745f69edddce19a606659163The Android Open Source Project		return NULL;
15964064216a8433360745f69edddce19a606659163The Android Open Source Project	}
16064064216a8433360745f69edddce19a606659163The Android Open Source Project	if ((pMeasurementMgr->pTsMetricsReportTimer[QOS_AC_VO] =
16164064216a8433360745f69edddce19a606659163The Android Open Source Project		os_timerCreate(hOs, measurementMgr_sendTSMReport_AC_VO, pMeasurementMgr)) == NULL)
16264064216a8433360745f69edddce19a606659163The Android Open Source Project	{
16364064216a8433360745f69edddce19a606659163The Android Open Source Project		measurementMgr_releaseModule(pMeasurementMgr, initVec);
16464064216a8433360745f69edddce19a606659163The Android Open Source Project		return NULL;
16564064216a8433360745f69edddce19a606659163The Android Open Source Project	}
16664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
16764064216a8433360745f69edddce19a606659163The Android Open Source Project
16864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* creating the Measurement SM */
16964064216a8433360745f69edddce19a606659163The Android Open Source Project    status = fsm_Create(pMeasurementMgr->hOs, &(pMeasurementMgr->pMeasurementMgrSm),
17064064216a8433360745f69edddce19a606659163The Android Open Source Project                        MEASUREMENTMGR_NUM_STATES , MEASUREMENTMGR_NUM_EVENTS);
17164064216a8433360745f69edddce19a606659163The Android Open Source Project	if(status != OK)
17264064216a8433360745f69edddce19a606659163The Android Open Source Project	{
17364064216a8433360745f69edddce19a606659163The Android Open Source Project		measurementMgr_releaseModule(pMeasurementMgr, initVec);
17464064216a8433360745f69edddce19a606659163The Android Open Source Project		return NULL;
17564064216a8433360745f69edddce19a606659163The Android Open Source Project	}
17664064216a8433360745f69edddce19a606659163The Android Open Source Project
17764064216a8433360745f69edddce19a606659163The Android Open Source Project	initVec |= (1<<MEASUREMENT_SM_INIT_BIT);
17864064216a8433360745f69edddce19a606659163The Android Open Source Project
17964064216a8433360745f69edddce19a606659163The Android Open Source Project
18064064216a8433360745f69edddce19a606659163The Android Open Source Project
18164064216a8433360745f69edddce19a606659163The Android Open Source Project	/* creating the sub modules of measurement module */
18264064216a8433360745f69edddce19a606659163The Android Open Source Project
18364064216a8433360745f69edddce19a606659163The Android Open Source Project	/* creating Request Handler sub module */
18464064216a8433360745f69edddce19a606659163The Android Open Source Project	if( (pMeasurementMgr->hRequestH = requestHandler_create(hOs)) == NULL)
18564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
18664064216a8433360745f69edddce19a606659163The Android Open Source Project		measurementMgr_releaseModule(pMeasurementMgr, initVec);
18764064216a8433360745f69edddce19a606659163The Android Open Source Project		return NULL;
18864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
18964064216a8433360745f69edddce19a606659163The Android Open Source Project
19064064216a8433360745f69edddce19a606659163The Android Open Source Project	initVec |= (1<<MEASUREMENT_REQUEST_HANDLER_SUB_MODULE_INIT_BIT);
19164064216a8433360745f69edddce19a606659163The Android Open Source Project
19264064216a8433360745f69edddce19a606659163The Android Open Source Project
19364064216a8433360745f69edddce19a606659163The Android Open Source Project    return(pMeasurementMgr);
19464064216a8433360745f69edddce19a606659163The Android Open Source Project}
19564064216a8433360745f69edddce19a606659163The Android Open Source Project
19664064216a8433360745f69edddce19a606659163The Android Open Source Project
19764064216a8433360745f69edddce19a606659163The Android Open Source Project
19864064216a8433360745f69edddce19a606659163The Android Open Source Project
19964064216a8433360745f69edddce19a606659163The Android Open Source Project
20064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
20164064216a8433360745f69edddce19a606659163The Android Open Source Project * Configures the Measurement Manager module.
20264064216a8433360745f69edddce19a606659163The Android Open Source Project *
20364064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hXXXX Handles to other modules the Measurement Manager needs.
20464064216a8433360745f69edddce19a606659163The Android Open Source Project * @param pMeasurementInitParams A pointer to the measurement init parameters.
20564064216a8433360745f69edddce19a606659163The Android Open Source Project *
20664064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 16-Dec-2005
20764064216a8433360745f69edddce19a606659163The Android Open Source Project */
20864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS measurementMgr_config(TI_HANDLE 	hMeasurementMgr,
20964064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE	hMacServices,
21064064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE	hRegulatoryDomain,
21164064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE	hExcMngr,
21264064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE	hSiteMgr,
21364064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE	hHalCtrl,
21464064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE	hMlme,
21564064216a8433360745f69edddce19a606659163The Android Open Source Project                                TI_HANDLE	hTrafficMonitor,
21664064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE	hReport,
21764064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE	hOs,
21864064216a8433360745f69edddce19a606659163The Android Open Source Project                                TI_HANDLE	hScr,
21964064216a8433360745f69edddce19a606659163The Android Open Source Project                                TI_HANDLE	hHealthMonitor,
22064064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE	hApConn,
22164064216a8433360745f69edddce19a606659163The Android Open Source Project								TI_HANDLE	hTx,
22264064216a8433360745f69edddce19a606659163The Android Open Source Project								measurementInitParams_t * pMeasurementInitParams)
22364064216a8433360745f69edddce19a606659163The Android Open Source Project{
22464064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
22564064216a8433360745f69edddce19a606659163The Android Open Source Project	paramInfo_t param;
22664064216a8433360745f69edddce19a606659163The Android Open Source Project    TI_STATUS status;
22764064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
22864064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT32 currAC;
22964064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
23064064216a8433360745f69edddce19a606659163The Android Open Source Project
23164064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Init Handlers */
23264064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->hMacServices		= hMacServices;
23364064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->hRegulatoryDomain	= hRegulatoryDomain;
23464064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->hExcMngr			= hExcMngr;
23564064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->hSiteMgr			= hSiteMgr;
23664064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->hHalCtrl			= hHalCtrl;
23764064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->hMlme				= hMlme;
23864064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->hTrafficMonitor	= hTrafficMonitor;
23964064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->hReport			= hReport;
24064064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->hOs				= hOs;
24164064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->hScr				= hScr;
24264064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->hHealthMonitor		= hHealthMonitor;
24364064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->hApConn			= hApConn;
24464064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->hTx				= hTx;
24564064216a8433360745f69edddce19a606659163The Android Open Source Project
24664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* initialize variables to default values */
24764064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->Enabled = TRUE;
24864064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->Connected = FALSE;
24964064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->Capabilities = MEASUREMENT_CAPABILITIES_NONE;
25064064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->Mode = MSR_MODE_NONE;
25164064216a8433360745f69edddce19a606659163The Android Open Source Project
25264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Getting management capability status */
25364064216a8433360745f69edddce19a606659163The Android Open Source Project	param.paramType = REGULATORY_DOMAIN_MANAGEMENT_CAPABILITY_ENABLED_PARAM;
25464064216a8433360745f69edddce19a606659163The Android Open Source Project	regulatoryDomain_getParam(pMeasurementMgr->hRegulatoryDomain, &param);
25564064216a8433360745f69edddce19a606659163The Android Open Source Project	if (param.content.spectrumManagementEnabled)
25664064216a8433360745f69edddce19a606659163The Android Open Source Project	{
25764064216a8433360745f69edddce19a606659163The Android Open Source Project		pMeasurementMgr->Capabilities |= MEASUREMENT_CAPABILITIES_DOT11H;
25864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
25964064216a8433360745f69edddce19a606659163The Android Open Source Project
26064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
26164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Check in the Registry if the station supports EXC RM */
26264064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pMeasurementInitParams->excEnabled == EXC_MODE_ENABLED)
26364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
26464064216a8433360745f69edddce19a606659163The Android Open Source Project        pMeasurementMgr->Capabilities |= MEASUREMENT_CAPABILITIES_EXC_RM;
26564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
26664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
26764064216a8433360745f69edddce19a606659163The Android Open Source Project
26864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Init Functions */
26964064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->parserFrameReq = NULL;
27064064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->isTypeValid = NULL;
27164064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->buildReport = NULL;
27264064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->buildRejectReport = NULL;
27364064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->sendReportAndCleanObj = NULL;
27464064216a8433360745f69edddce19a606659163The Android Open Source Project
27564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* initialize variables */
27664064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->currentState = MEASUREMENTMGR_STATE_IDLE;
27764064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->isModuleRegistered = FALSE;
27864064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->currentFrameType = MSR_FRAME_TYPE_NO_ACTIVE;
27964064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->measuredChannelID = 0;
28064064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->currentNumOfRequestsInParallel = 0;
28164064216a8433360745f69edddce19a606659163The Android Open Source Project
28264064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->trafficIntensityThreshold = pMeasurementInitParams->trafficIntensityThreshold;
28364064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->maxDurationOnNonServingChannel = pMeasurementInitParams->maxDurationOnNonServingChannel;
28464064216a8433360745f69edddce19a606659163The Android Open Source Project
28564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* config sub modules */
28664064216a8433360745f69edddce19a606659163The Android Open Source Project	RequestHandler_config(pMeasurementMgr->hRequestH, hReport, hOs);
28764064216a8433360745f69edddce19a606659163The Android Open Source Project
28864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Register to the SCR module */
28964064216a8433360745f69edddce19a606659163The Android Open Source Project    scr_registerClientCB(pMeasurementMgr->hScr, SCR_CID_EXC_MEASURE, measurementMgr_scrResponseCB, pMeasurementMgr);
29064064216a8433360745f69edddce19a606659163The Android Open Source Project
29164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
29264064216a8433360745f69edddce19a606659163The Android Open Source Project	for (currAC = 0; currAC < MAX_NUM_OF_AC; currAC++)
29364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
29464064216a8433360745f69edddce19a606659163The Android Open Source Project		pMeasurementMgr->isTsMetricsEnabled[currAC] = FALSE;
29564064216a8433360745f69edddce19a606659163The Android Open Source Project		os_timerStop(pMeasurementMgr->hOs, pMeasurementMgr->pTsMetricsReportTimer[currAC]);
29664064216a8433360745f69edddce19a606659163The Android Open Source Project	}
29764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
29864064216a8433360745f69edddce19a606659163The Android Open Source Project
29964064216a8433360745f69edddce19a606659163The Android Open Source Project	status = measurementMgrSM_config(hMeasurementMgr);
30064064216a8433360745f69edddce19a606659163The Android Open Source Project
30164064216a8433360745f69edddce19a606659163The Android Open Source Project	if(status == OK)
30264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
30364064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INIT(hReport, MEASUREMENT_MNGR_MODULE_LOG,
30464064216a8433360745f69edddce19a606659163The Android Open Source Project				("%s: Measurement Manager configured successfully\n", __FUNCTION__));
30564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
30664064216a8433360745f69edddce19a606659163The Android Open Source Project    else
30764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
30864064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(hReport, MEASUREMENT_MNGR_MODULE_LOG,
30964064216a8433360745f69edddce19a606659163The Android Open Source Project				("%s: Measurement Manager configuration failed\n", __FUNCTION__));
31064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
31164064216a8433360745f69edddce19a606659163The Android Open Source Project
31264064216a8433360745f69edddce19a606659163The Android Open Source Project	return status;
31364064216a8433360745f69edddce19a606659163The Android Open Source Project}
31464064216a8433360745f69edddce19a606659163The Android Open Source Project
31564064216a8433360745f69edddce19a606659163The Android Open Source Project
31664064216a8433360745f69edddce19a606659163The Android Open Source Project
31764064216a8433360745f69edddce19a606659163The Android Open Source Project
31864064216a8433360745f69edddce19a606659163The Android Open Source Project
31964064216a8433360745f69edddce19a606659163The Android Open Source Project/**
32064064216a8433360745f69edddce19a606659163The Android Open Source Project * Sets the specified Measurement Manager parameter.
32164064216a8433360745f69edddce19a606659163The Android Open Source Project *
32264064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hMeasurementMgr A handle to the Measurement Manager module.
32364064216a8433360745f69edddce19a606659163The Android Open Source Project * @param pParam The parameter to set.
32464064216a8433360745f69edddce19a606659163The Android Open Source Project *
32564064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 16-Dec-2005
32664064216a8433360745f69edddce19a606659163The Android Open Source Project */
32764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS measurementMgr_setParam(TI_HANDLE hMeasurementMgr, paramInfo_t * pParam)
32864064216a8433360745f69edddce19a606659163The Android Open Source Project{
32964064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
33064064216a8433360745f69edddce19a606659163The Android Open Source Project
33164064216a8433360745f69edddce19a606659163The Android Open Source Project	switch (pParam->paramType)
33264064216a8433360745f69edddce19a606659163The Android Open Source Project	{
33364064216a8433360745f69edddce19a606659163The Android Open Source Project		case MEASUREMENT_ENABLE_DISABLE_PARAM:
33464064216a8433360745f69edddce19a606659163The Android Open Source Project		{
33564064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
33664064216a8433360745f69edddce19a606659163The Android Open Source Project					("%s: MEASUREMENT_ENABLE_DISABLE_PARAM <- %d\n", __FUNCTION__, pParam->content.measurementEnableDisableStatus));
33764064216a8433360745f69edddce19a606659163The Android Open Source Project
33864064216a8433360745f69edddce19a606659163The Android Open Source Project			if (pParam->content.measurementEnableDisableStatus)
33964064216a8433360745f69edddce19a606659163The Android Open Source Project			{
34064064216a8433360745f69edddce19a606659163The Android Open Source Project				measurementMgr_enable(pMeasurementMgr);
34164064216a8433360745f69edddce19a606659163The Android Open Source Project			}
34264064216a8433360745f69edddce19a606659163The Android Open Source Project			else
34364064216a8433360745f69edddce19a606659163The Android Open Source Project			{
34464064216a8433360745f69edddce19a606659163The Android Open Source Project				measurementMgr_disable(pMeasurementMgr);
34564064216a8433360745f69edddce19a606659163The Android Open Source Project			}
34664064216a8433360745f69edddce19a606659163The Android Open Source Project
34764064216a8433360745f69edddce19a606659163The Android Open Source Project			break;
34864064216a8433360745f69edddce19a606659163The Android Open Source Project		}
34964064216a8433360745f69edddce19a606659163The Android Open Source Project
35064064216a8433360745f69edddce19a606659163The Android Open Source Project		case MEASUREMENT_TRAFFIC_THRESHOLD_PARAM:
35164064216a8433360745f69edddce19a606659163The Android Open Source Project		{
35264064216a8433360745f69edddce19a606659163The Android Open Source Project			if ((pParam->content.measurementTrafficThreshold >= MEASUREMENT_TRAFFIC_THRSHLD_MIN) &&
35364064216a8433360745f69edddce19a606659163The Android Open Source Project				(pParam->content.measurementTrafficThreshold <= MEASUREMENT_TRAFFIC_THRSHLD_MAX))
35464064216a8433360745f69edddce19a606659163The Android Open Source Project			{
35564064216a8433360745f69edddce19a606659163The Android Open Source Project				WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
35664064216a8433360745f69edddce19a606659163The Android Open Source Project						("%s: MEASUREMENT_TRAFFIC_THRESHOLD_PARAM <- %d\n", __FUNCTION__, pParam->content.measurementTrafficThreshold));
35764064216a8433360745f69edddce19a606659163The Android Open Source Project
35864064216a8433360745f69edddce19a606659163The Android Open Source Project				pMeasurementMgr->trafficIntensityThreshold = pParam->content.measurementTrafficThreshold;
35964064216a8433360745f69edddce19a606659163The Android Open Source Project			}
36064064216a8433360745f69edddce19a606659163The Android Open Source Project			else
36164064216a8433360745f69edddce19a606659163The Android Open Source Project			{
36264064216a8433360745f69edddce19a606659163The Android Open Source Project				WLAN_REPORT_ERROR(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
36364064216a8433360745f69edddce19a606659163The Android Open Source Project						("%s: Invalid value for MEASUREMENT_TRAFFIC_THRESHOLD_PARAM (%d)\n", __FUNCTION__, pParam->content.measurementTrafficThreshold));
36464064216a8433360745f69edddce19a606659163The Android Open Source Project			}
36564064216a8433360745f69edddce19a606659163The Android Open Source Project
36664064216a8433360745f69edddce19a606659163The Android Open Source Project			break;
36764064216a8433360745f69edddce19a606659163The Android Open Source Project		}
36864064216a8433360745f69edddce19a606659163The Android Open Source Project
36964064216a8433360745f69edddce19a606659163The Android Open Source Project
37064064216a8433360745f69edddce19a606659163The Android Open Source Project		case MEASUREMENT_MAX_DURATION_PARAM:
37164064216a8433360745f69edddce19a606659163The Android Open Source Project		{
37264064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
37364064216a8433360745f69edddce19a606659163The Android Open Source Project					("%s: MEASUREMENT_MAX_DURATION_PARAM <- %d\n", __FUNCTION__, pParam->content.measurementMaxDuration));
37464064216a8433360745f69edddce19a606659163The Android Open Source Project
37564064216a8433360745f69edddce19a606659163The Android Open Source Project			pMeasurementMgr->maxDurationOnNonServingChannel = pParam->content.measurementMaxDuration;
37664064216a8433360745f69edddce19a606659163The Android Open Source Project
37764064216a8433360745f69edddce19a606659163The Android Open Source Project			break;
37864064216a8433360745f69edddce19a606659163The Android Open Source Project		}
37964064216a8433360745f69edddce19a606659163The Android Open Source Project
38064064216a8433360745f69edddce19a606659163The Android Open Source Project
38164064216a8433360745f69edddce19a606659163The Android Open Source Project		default:
38264064216a8433360745f69edddce19a606659163The Android Open Source Project		{
38364064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_ERROR(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
38464064216a8433360745f69edddce19a606659163The Android Open Source Project					("%s: Specified parameter is not supported (%d)\n", __FUNCTION__, pParam->paramType));
38564064216a8433360745f69edddce19a606659163The Android Open Source Project
38664064216a8433360745f69edddce19a606659163The Android Open Source Project			return PARAM_NOT_SUPPORTED;
38764064216a8433360745f69edddce19a606659163The Android Open Source Project		}
38864064216a8433360745f69edddce19a606659163The Android Open Source Project
38964064216a8433360745f69edddce19a606659163The Android Open Source Project	}
39064064216a8433360745f69edddce19a606659163The Android Open Source Project
39164064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
39264064216a8433360745f69edddce19a606659163The Android Open Source Project}
39364064216a8433360745f69edddce19a606659163The Android Open Source Project
39464064216a8433360745f69edddce19a606659163The Android Open Source Project
39564064216a8433360745f69edddce19a606659163The Android Open Source Project
39664064216a8433360745f69edddce19a606659163The Android Open Source Project
39764064216a8433360745f69edddce19a606659163The Android Open Source Project
39864064216a8433360745f69edddce19a606659163The Android Open Source Project/**
39964064216a8433360745f69edddce19a606659163The Android Open Source Project * Gets the specified parameter from the Measurement Manager.
40064064216a8433360745f69edddce19a606659163The Android Open Source Project *
40164064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hMeasurementMgr A handle to the Measurement Manager module.
40264064216a8433360745f69edddce19a606659163The Android Open Source Project * @param pParam The parameter to get.
40364064216a8433360745f69edddce19a606659163The Android Open Source Project *
40464064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 16-Dec-2005
40564064216a8433360745f69edddce19a606659163The Android Open Source Project */
40664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS measurementMgr_getParam(TI_HANDLE hMeasurementMgr, paramInfo_t * pParam)
40764064216a8433360745f69edddce19a606659163The Android Open Source Project{
40864064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
40964064216a8433360745f69edddce19a606659163The Android Open Source Project
41064064216a8433360745f69edddce19a606659163The Android Open Source Project	switch(pParam->paramType)
41164064216a8433360745f69edddce19a606659163The Android Open Source Project	{
41264064216a8433360745f69edddce19a606659163The Android Open Source Project
41364064216a8433360745f69edddce19a606659163The Android Open Source Project		case MEASUREMENT_GET_STATUS_PARAM:
41464064216a8433360745f69edddce19a606659163The Android Open Source Project		{
41564064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_OS_REPORT(("%s: \n\n", __FUNCTION__));
41664064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_OS_REPORT(("MeasurementMgr Status Report:\n\n"));
41764064216a8433360745f69edddce19a606659163The Android Open Source Project
41864064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_OS_REPORT(("Current State: %d\n\n", pMeasurementMgr->currentState));
41964064216a8433360745f69edddce19a606659163The Android Open Source Project
42064064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_OS_REPORT(("Connected: %d\n", pMeasurementMgr->Connected));
42164064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_OS_REPORT(("Enabled: %d\n\n", pMeasurementMgr->Enabled));
42264064216a8433360745f69edddce19a606659163The Android Open Source Project
42364064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_OS_REPORT(("Mode: %d\n", pMeasurementMgr->Mode));
42464064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_OS_REPORT(("Capabilities: %d\n\n", pMeasurementMgr->Capabilities));
42564064216a8433360745f69edddce19a606659163The Android Open Source Project
42664064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_OS_REPORT(("current Frame Type: %d\n", pMeasurementMgr->currentFrameType));
42764064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_OS_REPORT(("Measured Channel: %d\n", pMeasurementMgr->measuredChannelID));
42864064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_OS_REPORT(("Serving Channel: %d\n", pMeasurementMgr->servingChannelID));
42964064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_OS_REPORT(("Traffic Intensity Threshold: %d\n", pMeasurementMgr->trafficIntensityThreshold));
43064064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_OS_REPORT(("Max Duration on Nonserving Channel: %d\n", pMeasurementMgr->maxDurationOnNonServingChannel));
43164064216a8433360745f69edddce19a606659163The Android Open Source Project
43264064216a8433360745f69edddce19a606659163The Android Open Source Project			break;
43364064216a8433360745f69edddce19a606659163The Android Open Source Project		}
43464064216a8433360745f69edddce19a606659163The Android Open Source Project
43564064216a8433360745f69edddce19a606659163The Android Open Source Project
43664064216a8433360745f69edddce19a606659163The Android Open Source Project		default:
43764064216a8433360745f69edddce19a606659163The Android Open Source Project		{
43864064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_ERROR(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
43964064216a8433360745f69edddce19a606659163The Android Open Source Project					("%s: Specified parameter is not supported (%d)\n", __FUNCTION__, pParam->paramType));
44064064216a8433360745f69edddce19a606659163The Android Open Source Project
44164064216a8433360745f69edddce19a606659163The Android Open Source Project			return PARAM_NOT_SUPPORTED;
44264064216a8433360745f69edddce19a606659163The Android Open Source Project		}
44364064216a8433360745f69edddce19a606659163The Android Open Source Project
44464064216a8433360745f69edddce19a606659163The Android Open Source Project	}
44564064216a8433360745f69edddce19a606659163The Android Open Source Project
44664064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
44764064216a8433360745f69edddce19a606659163The Android Open Source Project}
44864064216a8433360745f69edddce19a606659163The Android Open Source Project
44964064216a8433360745f69edddce19a606659163The Android Open Source Project
45064064216a8433360745f69edddce19a606659163The Android Open Source Project
45164064216a8433360745f69edddce19a606659163The Android Open Source Project
45264064216a8433360745f69edddce19a606659163The Android Open Source Project
45364064216a8433360745f69edddce19a606659163The Android Open Source Project
45464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
45564064216a8433360745f69edddce19a606659163The Android Open Source Project * Signals the Measurement Manager that the STA is connected.
45664064216a8433360745f69edddce19a606659163The Android Open Source Project *
45764064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hMeasurementMgr A handle to the Measurement Manager module.
45864064216a8433360745f69edddce19a606659163The Android Open Source Project *
45964064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 16-Dec-2005
46064064216a8433360745f69edddce19a606659163The Android Open Source Project */
46164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS measurementMgr_connected(TI_HANDLE hMeasurementMgr)
46264064216a8433360745f69edddce19a606659163The Android Open Source Project{
46364064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
46464064216a8433360745f69edddce19a606659163The Android Open Source Project
46564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* checking if measurement is enabled */
46664064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pMeasurementMgr->Mode == MSR_MODE_NONE)
46764064216a8433360745f69edddce19a606659163The Android Open Source Project		return OK;
46864064216a8433360745f69edddce19a606659163The Android Open Source Project
46964064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
47064064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: MeasurementMgr set to connected.\n", __FUNCTION__));
47164064216a8433360745f69edddce19a606659163The Android Open Source Project
47264064216a8433360745f69edddce19a606659163The Android Open Source Project    return measurementMgrSM_event((UINT8 *) &(pMeasurementMgr->currentState),
47364064216a8433360745f69edddce19a606659163The Android Open Source Project                               MEASUREMENTMGR_EVENT_CONNECTED, pMeasurementMgr);
47464064216a8433360745f69edddce19a606659163The Android Open Source Project}
47564064216a8433360745f69edddce19a606659163The Android Open Source Project
47664064216a8433360745f69edddce19a606659163The Android Open Source Project
47764064216a8433360745f69edddce19a606659163The Android Open Source Project
47864064216a8433360745f69edddce19a606659163The Android Open Source Project
47964064216a8433360745f69edddce19a606659163The Android Open Source Project
48064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
48164064216a8433360745f69edddce19a606659163The Android Open Source Project * Signals the Measurement Manager that the STA is disconnected.
48264064216a8433360745f69edddce19a606659163The Android Open Source Project *
48364064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hMeasurementMgr A handle to the Measurement Manager module.
48464064216a8433360745f69edddce19a606659163The Android Open Source Project *
48564064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 16-Dec-2005
48664064216a8433360745f69edddce19a606659163The Android Open Source Project */
48764064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS measurementMgr_disconnected(TI_HANDLE hMeasurementMgr)
48864064216a8433360745f69edddce19a606659163The Android Open Source Project{
48964064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
49064064216a8433360745f69edddce19a606659163The Android Open Source Project
49164064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
49264064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: MeasurementMgr set to disconnected.\n", __FUNCTION__));
49364064216a8433360745f69edddce19a606659163The Android Open Source Project
49464064216a8433360745f69edddce19a606659163The Android Open Source Project	return measurementMgrSM_event((UINT8 *) &(pMeasurementMgr->currentState),
49564064216a8433360745f69edddce19a606659163The Android Open Source Project								MEASUREMENTMGR_EVENT_DISCONNECTED, pMeasurementMgr);
49664064216a8433360745f69edddce19a606659163The Android Open Source Project}
49764064216a8433360745f69edddce19a606659163The Android Open Source Project
49864064216a8433360745f69edddce19a606659163The Android Open Source Project
49964064216a8433360745f69edddce19a606659163The Android Open Source Project
50064064216a8433360745f69edddce19a606659163The Android Open Source Project
50164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
50264064216a8433360745f69edddce19a606659163The Android Open Source Project * Enables the Measurement Manager module.
50364064216a8433360745f69edddce19a606659163The Android Open Source Project *
50464064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 10-Jan-2006
50564064216a8433360745f69edddce19a606659163The Android Open Source Project */
50664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS measurementMgr_enable(TI_HANDLE hMeasurementMgr)
50764064216a8433360745f69edddce19a606659163The Android Open Source Project{
50864064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
50964064216a8433360745f69edddce19a606659163The Android Open Source Project
51064064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
51164064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: MeasurementMgr set to enabled.\n", __FUNCTION__));
51264064216a8433360745f69edddce19a606659163The Android Open Source Project
51364064216a8433360745f69edddce19a606659163The Android Open Source Project	return measurementMgrSM_event((UINT8 *) &(pMeasurementMgr->currentState),
51464064216a8433360745f69edddce19a606659163The Android Open Source Project								MEASUREMENTMGR_EVENT_ENABLE, pMeasurementMgr);
51564064216a8433360745f69edddce19a606659163The Android Open Source Project}
51664064216a8433360745f69edddce19a606659163The Android Open Source Project
51764064216a8433360745f69edddce19a606659163The Android Open Source Project
51864064216a8433360745f69edddce19a606659163The Android Open Source Project
51964064216a8433360745f69edddce19a606659163The Android Open Source Project
52064064216a8433360745f69edddce19a606659163The Android Open Source Project
52164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
52264064216a8433360745f69edddce19a606659163The Android Open Source Project * Disables the Measurement Manager module.
52364064216a8433360745f69edddce19a606659163The Android Open Source Project *
52464064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 10-Jan-2006
52564064216a8433360745f69edddce19a606659163The Android Open Source Project */
52664064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS measurementMgr_disable(TI_HANDLE hMeasurementMgr)
52764064216a8433360745f69edddce19a606659163The Android Open Source Project{
52864064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
52964064216a8433360745f69edddce19a606659163The Android Open Source Project
53064064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
53164064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: MeasurementMgr set to disabled.\n", __FUNCTION__));
53264064216a8433360745f69edddce19a606659163The Android Open Source Project
53364064216a8433360745f69edddce19a606659163The Android Open Source Project	return measurementMgrSM_event((UINT8 *) &(pMeasurementMgr->currentState),
53464064216a8433360745f69edddce19a606659163The Android Open Source Project								MEASUREMENTMGR_EVENT_DISABLE, pMeasurementMgr);
53564064216a8433360745f69edddce19a606659163The Android Open Source Project}
53664064216a8433360745f69edddce19a606659163The Android Open Source Project
53764064216a8433360745f69edddce19a606659163The Android Open Source Project
53864064216a8433360745f69edddce19a606659163The Android Open Source Project
53964064216a8433360745f69edddce19a606659163The Android Open Source Project
54064064216a8433360745f69edddce19a606659163The Android Open Source Project
54164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
54264064216a8433360745f69edddce19a606659163The Android Open Source Project * Destroys the Measurement Manager module.
54364064216a8433360745f69edddce19a606659163The Android Open Source Project *
54464064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hMeasurementMgr A handle to the Measurement Manager module.
54564064216a8433360745f69edddce19a606659163The Android Open Source Project *
54664064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 16-Dec-2005
54764064216a8433360745f69edddce19a606659163The Android Open Source Project */
54864064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS measurementMgr_destroy(TI_HANDLE hMeasurementMgr)
54964064216a8433360745f69edddce19a606659163The Android Open Source Project{
55064064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
55164064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT32 initVec;
55264064216a8433360745f69edddce19a606659163The Android Open Source Project
55364064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pMeasurementMgr == NULL)
55464064216a8433360745f69edddce19a606659163The Android Open Source Project		return OK;
55564064216a8433360745f69edddce19a606659163The Android Open Source Project
55664064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
55764064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: MeasurementMgr is being destroyed\n", __FUNCTION__));
55864064216a8433360745f69edddce19a606659163The Android Open Source Project
55964064216a8433360745f69edddce19a606659163The Android Open Source Project	initVec = 0xFFFF;	/* release everything */
56064064216a8433360745f69edddce19a606659163The Android Open Source Project
56164064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgr_releaseModule(pMeasurementMgr, initVec);
56264064216a8433360745f69edddce19a606659163The Android Open Source Project
56364064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
56464064216a8433360745f69edddce19a606659163The Android Open Source Project}
56564064216a8433360745f69edddce19a606659163The Android Open Source Project
56664064216a8433360745f69edddce19a606659163The Android Open Source Project
56764064216a8433360745f69edddce19a606659163The Android Open Source Project
56864064216a8433360745f69edddce19a606659163The Android Open Source Project
56964064216a8433360745f69edddce19a606659163The Android Open Source Project
57064064216a8433360745f69edddce19a606659163The Android Open Source Project
57164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
57264064216a8433360745f69edddce19a606659163The Android Open Source Project * Sets the Measurement Mode.
57364064216a8433360745f69edddce19a606659163The Android Open Source Project *
57464064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hMeasurementMgr A handle to the Measurement Manager module.
57564064216a8433360745f69edddce19a606659163The Android Open Source Project * @param capabilities The AP capabilities.
57664064216a8433360745f69edddce19a606659163The Android Open Source Project * @param pIeBuffer Pointer to the list of IEs.
57764064216a8433360745f69edddce19a606659163The Android Open Source Project * @param length Length of the IE list.
57864064216a8433360745f69edddce19a606659163The Android Open Source Project *
57964064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 16-Dec-2005
58064064216a8433360745f69edddce19a606659163The Android Open Source Project */
58164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS measurementMgr_setMeasurementMode(TI_HANDLE hMeasurementMgr, UINT16 capabilities,
58264064216a8433360745f69edddce19a606659163The Android Open Source Project                                         UINT8 * pIeBuffer, UINT16 length)
58364064216a8433360745f69edddce19a606659163The Android Open Source Project{
58464064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
58564064216a8433360745f69edddce19a606659163The Android Open Source Project
58664064216a8433360745f69edddce19a606659163The Android Open Source Project	/*
58764064216a8433360745f69edddce19a606659163The Android Open Source Project	 * 11h Measurement is not supported in the current version.
58864064216a8433360745f69edddce19a606659163The Android Open Source Project	 */
58964064216a8433360745f69edddce19a606659163The Android Open Source Project/*	if( (pMeasurementMgr->Capabilities & MEASUREMENT_CAPABILITIES_DOT11H) &&
59064064216a8433360745f69edddce19a606659163The Android Open Source Project        (capabilities & DOT11_SPECTRUM_MANAGEMENT) )
59164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
59264064216a8433360745f69edddce19a606659163The Android Open Source Project        pMeasurementMgr->Mode = MSR_MODE_SPECTRUM_MANAGEMENT;
59364064216a8433360745f69edddce19a606659163The Android Open Source Project    }
59464064216a8433360745f69edddce19a606659163The Android Open Source Project    else
59564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
59664064216a8433360745f69edddce19a606659163The Android Open Source Project*/
59764064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
59864064216a8433360745f69edddce19a606659163The Android Open Source Project
59964064216a8433360745f69edddce19a606659163The Android Open Source Project        if(pMeasurementMgr->Capabilities & MEASUREMENT_CAPABILITIES_EXC_RM)
60064064216a8433360745f69edddce19a606659163The Android Open Source Project        {
60164064216a8433360745f69edddce19a606659163The Android Open Source Project                    pMeasurementMgr->Mode = MSR_MODE_EXC;
60264064216a8433360745f69edddce19a606659163The Android Open Source Project        }
60364064216a8433360745f69edddce19a606659163The Android Open Source Project        else
60464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
60564064216a8433360745f69edddce19a606659163The Android Open Source Project        {
60664064216a8433360745f69edddce19a606659163The Android Open Source Project            pMeasurementMgr->Mode = MSR_MODE_NONE;
60764064216a8433360745f69edddce19a606659163The Android Open Source Project        }
60864064216a8433360745f69edddce19a606659163The Android Open Source Project
60964064216a8433360745f69edddce19a606659163The Android Open Source Project
61064064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
61164064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: MeasurementMgr mode changed to: %d\n", __FUNCTION__, pMeasurementMgr->Mode));
61264064216a8433360745f69edddce19a606659163The Android Open Source Project
61364064216a8433360745f69edddce19a606659163The Android Open Source Project	return OK;
61464064216a8433360745f69edddce19a606659163The Android Open Source Project}
61564064216a8433360745f69edddce19a606659163The Android Open Source Project
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
62164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
62264064216a8433360745f69edddce19a606659163The Android Open Source Project * Called when a frame with type measurement request is received.
62364064216a8433360745f69edddce19a606659163The Android Open Source Project *
62464064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hMeasurementMgr A handle to the Measurement Manager module.
62564064216a8433360745f69edddce19a606659163The Android Open Source Project * @param frameType The frame type.
62664064216a8433360745f69edddce19a606659163The Android Open Source Project * @param dataLen The length of the frame.
62764064216a8433360745f69edddce19a606659163The Android Open Source Project * @param pData A pointer to the frame's content.
62864064216a8433360745f69edddce19a606659163The Android Open Source Project *
62964064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 16-Dec-2005
63064064216a8433360745f69edddce19a606659163The Android Open Source Project */
63164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS measurementMgr_receiveFrameRequest(TI_HANDLE hMeasurementMgr,
63264064216a8433360745f69edddce19a606659163The Android Open Source Project											measurement_frameType_e frameType,
63364064216a8433360745f69edddce19a606659163The Android Open Source Project											INT32 dataLen,
63464064216a8433360745f69edddce19a606659163The Android Open Source Project											UINT8 * pData)
63564064216a8433360745f69edddce19a606659163The Android Open Source Project{
63664064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
63764064216a8433360745f69edddce19a606659163The Android Open Source Project
63864064216a8433360745f69edddce19a606659163The Android Open Source Project    measurement_frameRequest_t * frame = &(pMeasurementMgr->newFrameRequest);
63964064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT16 currentFrameToken;
64064064216a8433360745f69edddce19a606659163The Android Open Source Project
64164064216a8433360745f69edddce19a606659163The Android Open Source Project	/* checking if measurement is enabled */
64264064216a8433360745f69edddce19a606659163The Android Open Source Project	if (pMeasurementMgr->Mode == MSR_MODE_NONE)
64364064216a8433360745f69edddce19a606659163The Android Open Source Project		return NOK;
64464064216a8433360745f69edddce19a606659163The Android Open Source Project
64564064216a8433360745f69edddce19a606659163The Android Open Source Project	/* ignore broadcast/multicast request if unicast request is active */
64664064216a8433360745f69edddce19a606659163The Android Open Source Project	if (frameType != MSR_FRAME_TYPE_UNICAST && pMeasurementMgr->currentFrameType == MSR_FRAME_TYPE_UNICAST)
64764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
64864064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
64964064216a8433360745f69edddce19a606659163The Android Open Source Project	           ("%s: Broadcast/Multicast measurement frame has been ignored\n", __FUNCTION__));
65064064216a8433360745f69edddce19a606659163The Android Open Source Project
65164064216a8433360745f69edddce19a606659163The Android Open Source Project		return MEASUREMENT_REQUEST_IGNORED;
65264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
65364064216a8433360745f69edddce19a606659163The Android Open Source Project
65464064216a8433360745f69edddce19a606659163The Android Open Source Project	/* ignore broadcast request if multicast request is active */
65564064216a8433360745f69edddce19a606659163The Android Open Source Project	if (frameType == MSR_FRAME_TYPE_BROADCAST && pMeasurementMgr->currentFrameType == MSR_FRAME_TYPE_MULTICAST)
65664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
65764064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
65864064216a8433360745f69edddce19a606659163The Android Open Source Project		        ("%s: Broadcast measurement frame has been ignored\n", __FUNCTION__));
65964064216a8433360745f69edddce19a606659163The Android Open Source Project
66064064216a8433360745f69edddce19a606659163The Android Open Source Project		return MEASUREMENT_REQUEST_IGNORED;
66164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
66264064216a8433360745f69edddce19a606659163The Android Open Source Project
66364064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
66464064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: Measurement frame received\n", __FUNCTION__));
66564064216a8433360745f69edddce19a606659163The Android Open Source Project
66664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Parsing the Frame Request Header */
66764064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->parserFrameReq(hMeasurementMgr, pData, dataLen,
66864064216a8433360745f69edddce19a606659163The Android Open Source Project										frame);
66964064216a8433360745f69edddce19a606659163The Android Open Source Project
67064064216a8433360745f69edddce19a606659163The Android Open Source Project    frame->frameType = frameType;
67164064216a8433360745f69edddce19a606659163The Android Open Source Project
67264064216a8433360745f69edddce19a606659163The Android Open Source Project	/* checking if the received token frame is the same as the one that is being processed */
67364064216a8433360745f69edddce19a606659163The Android Open Source Project	if ((requestHandler_getFrameToken(pMeasurementMgr->hRequestH, &currentFrameToken) == OK)
67464064216a8433360745f69edddce19a606659163The Android Open Source Project		&& (currentFrameToken == frame->hdr->dialogToken))
67564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
67664064216a8433360745f69edddce19a606659163The Android Open Source Project		os_memoryZero(pMeasurementMgr->hOs, &pMeasurementMgr->newFrameRequest,
67764064216a8433360745f69edddce19a606659163The Android Open Source Project                      sizeof(measurement_frameRequest_t));
67864064216a8433360745f69edddce19a606659163The Android Open Source Project
67964064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
68064064216a8433360745f69edddce19a606659163The Android Open Source Project				("%s: Measurement frame token %d is identical to current frame token - ignoring frame\n", __FUNCTION__, currentFrameToken));
68164064216a8433360745f69edddce19a606659163The Android Open Source Project
68264064216a8433360745f69edddce19a606659163The Android Open Source Project		return MEASUREMENT_REQUEST_IGNORED;
68364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
68464064216a8433360745f69edddce19a606659163The Android Open Source Project
68564064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
68664064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: Measurement frame token is %d\n", __FUNCTION__, frame->hdr->dialogToken));
68764064216a8433360745f69edddce19a606659163The Android Open Source Project
68864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Frame is Received for processing */
68964064216a8433360745f69edddce19a606659163The Android Open Source Project    return measurementMgrSM_event((UINT8 *) &(pMeasurementMgr->currentState),
69064064216a8433360745f69edddce19a606659163The Android Open Source Project                               MEASUREMENTMGR_EVENT_FRAME_RECV, pMeasurementMgr);
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
69764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
69864064216a8433360745f69edddce19a606659163The Android Open Source Project * Activates the next measurement request.
69964064216a8433360745f69edddce19a606659163The Android Open Source Project *
70064064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hMeasurementMgr A handle to the Measurement Manager module.
70164064216a8433360745f69edddce19a606659163The Android Open Source Project *
70264064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 16-Dec-2005
70364064216a8433360745f69edddce19a606659163The Android Open Source Project */
70464064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS measurementMgr_activateNextRequest(TI_HANDLE hMeasurementMgr)
70564064216a8433360745f69edddce19a606659163The Android Open Source Project{
70664064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
70764064216a8433360745f69edddce19a606659163The Android Open Source Project	requestHandler_t * pRequestH = (requestHandler_t *) pMeasurementMgr->hRequestH;
70864064216a8433360745f69edddce19a606659163The Android Open Source Project	MeasurementRequest_t * pRequestArr[MAX_NUM_REQ];
70964064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8 numOfRequestsInParallel = 0;
71064064216a8433360745f69edddce19a606659163The Android Open Source Project	BOOL valid;
71164064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8 index;
71264064216a8433360745f69edddce19a606659163The Android Open Source Project
71364064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Keep note of the time we started processing the request. this will be used */
71464064216a8433360745f69edddce19a606659163The Android Open Source Project	/* to give the measurementSRV a time frame to perform the measurement operation */
71564064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementMgr->currentRequestStartTime = os_timeStampMs(pMeasurementMgr->hOs);
71664064216a8433360745f69edddce19a606659163The Android Open Source Project
71764064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
71864064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: Timer started at %d, we have 20ms to begin measurement...\n", __FUNCTION__,
71964064216a8433360745f69edddce19a606659163The Android Open Source Project					pMeasurementMgr->currentRequestStartTime));
72064064216a8433360745f69edddce19a606659163The Android Open Source Project
72164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
72264064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: Looking for a valid request\n", __FUNCTION__));
72364064216a8433360745f69edddce19a606659163The Android Open Source Project
72464064216a8433360745f69edddce19a606659163The Android Open Source Project	do
72564064216a8433360745f69edddce19a606659163The Android Open Source Project	{
72664064216a8433360745f69edddce19a606659163The Android Open Source Project		TI_STATUS status;
72764064216a8433360745f69edddce19a606659163The Android Open Source Project
72864064216a8433360745f69edddce19a606659163The Android Open Source Project		if (numOfRequestsInParallel != 0)
72964064216a8433360745f69edddce19a606659163The Android Open Source Project		{
73064064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
73164064216a8433360745f69edddce19a606659163The Android Open Source Project					("%s: Changing activeRequestID from %d to %d, and numOfWaitingRequests from %d to %d.\n", __FUNCTION__,
73264064216a8433360745f69edddce19a606659163The Android Open Source Project							pRequestH->activeRequestID, pRequestH->activeRequestID + numOfRequestsInParallel, pRequestH->numOfWaitingRequests, pRequestH->numOfWaitingRequests - numOfRequestsInParallel));
73364064216a8433360745f69edddce19a606659163The Android Open Source Project		}
73464064216a8433360745f69edddce19a606659163The Android Open Source Project
73564064216a8433360745f69edddce19a606659163The Android Open Source Project		pRequestH->activeRequestID += numOfRequestsInParallel;
73664064216a8433360745f69edddce19a606659163The Android Open Source Project        pRequestH->numOfWaitingRequests -= numOfRequestsInParallel;
73764064216a8433360745f69edddce19a606659163The Android Open Source Project
73864064216a8433360745f69edddce19a606659163The Android Open Source Project        for (index = 0; index < MAX_NUM_REQ; index++)
73964064216a8433360745f69edddce19a606659163The Android Open Source Project        {
74064064216a8433360745f69edddce19a606659163The Android Open Source Project            pRequestArr[index] = NULL;
74164064216a8433360745f69edddce19a606659163The Android Open Source Project        }
74264064216a8433360745f69edddce19a606659163The Android Open Source Project		numOfRequestsInParallel = 0;
74364064216a8433360745f69edddce19a606659163The Android Open Source Project
74464064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Getting the next request/requests from the request handler */
74564064216a8433360745f69edddce19a606659163The Android Open Source Project		status = requestHandler_getNextReq(pMeasurementMgr->hRequestH, FALSE, pRequestArr,
74664064216a8433360745f69edddce19a606659163The Android Open Source Project										   &numOfRequestsInParallel);
74764064216a8433360745f69edddce19a606659163The Android Open Source Project
74864064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Checking if there are no waiting requests */
74964064216a8433360745f69edddce19a606659163The Android Open Source Project		if (status != OK)
75064064216a8433360745f69edddce19a606659163The Android Open Source Project		{
75164064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
75264064216a8433360745f69edddce19a606659163The Android Open Source Project				    ("%s: There are no waiting requests in the queue\n", __FUNCTION__));
75364064216a8433360745f69edddce19a606659163The Android Open Source Project
75464064216a8433360745f69edddce19a606659163The Android Open Source Project			return measurementMgrSM_event((UINT8 *) &(pMeasurementMgr->currentState),
75564064216a8433360745f69edddce19a606659163The Android Open Source Project                               MEASUREMENTMGR_EVENT_SEND_REPORT, pMeasurementMgr);
75664064216a8433360745f69edddce19a606659163The Android Open Source Project		}
75764064216a8433360745f69edddce19a606659163The Android Open Source Project
75864064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Checking validity of request/s */
75964064216a8433360745f69edddce19a606659163The Android Open Source Project		valid = measurementMgr_isRequestValid(pMeasurementMgr, pRequestArr,
76064064216a8433360745f69edddce19a606659163The Android Open Source Project								numOfRequestsInParallel);
76164064216a8433360745f69edddce19a606659163The Android Open Source Project
76264064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Checking if the current request is Beacon Table */
76364064216a8433360745f69edddce19a606659163The Android Open Source Project        if( (numOfRequestsInParallel == 1) &&
76464064216a8433360745f69edddce19a606659163The Android Open Source Project            (pRequestArr[0]->Type == MSR_TYPE_BEACON_MEASUREMENT) &&
76564064216a8433360745f69edddce19a606659163The Android Open Source Project            (pRequestArr[0]->ScanMode == MSR_SCAN_MODE_BEACON_TABLE) )
76664064216a8433360745f69edddce19a606659163The Android Open Source Project        {
76764064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
76864064216a8433360745f69edddce19a606659163The Android Open Source Project					("%s: Received Beacon Table request, building a report for it and continuing\n", __FUNCTION__));
76964064216a8433360745f69edddce19a606659163The Android Open Source Project
77064064216a8433360745f69edddce19a606659163The Android Open Source Project            pMeasurementMgr->buildReport(hMeasurementMgr, *(pRequestArr[0]), NULL);
77164064216a8433360745f69edddce19a606659163The Android Open Source Project            valid = FALSE; /* In order to get the next request/s*/
77264064216a8433360745f69edddce19a606659163The Android Open Source Project        }
77364064216a8433360745f69edddce19a606659163The Android Open Source Project
77464064216a8433360745f69edddce19a606659163The Android Open Source Project	} while (valid == FALSE);
77564064216a8433360745f69edddce19a606659163The Android Open Source Project
77664064216a8433360745f69edddce19a606659163The Android Open Source Project
77764064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
77864064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: Request(s) for activation:\n", __FUNCTION__));
77964064216a8433360745f69edddce19a606659163The Android Open Source Project
78064064216a8433360745f69edddce19a606659163The Android Open Source Project	for (index = 0; index < numOfRequestsInParallel; index++)
78164064216a8433360745f69edddce19a606659163The Android Open Source Project	{
78264064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
78364064216a8433360745f69edddce19a606659163The Android Open Source Project				("%s: \n\nRequest #%d:\n Type: %d\n Measured Channel: %d (Serving Channel: %d)\n Scan Mode: %d\n Duration: %d\n\n", __FUNCTION__,
78464064216a8433360745f69edddce19a606659163The Android Open Source Project						index+1, pRequestArr[index]->Type, pRequestArr[index]->channelNumber,
78564064216a8433360745f69edddce19a606659163The Android Open Source Project						pMeasurementMgr->servingChannelID, pRequestArr[index]->ScanMode, pRequestArr[index]->DurationTime));
78664064216a8433360745f69edddce19a606659163The Android Open Source Project	}
78764064216a8433360745f69edddce19a606659163The Android Open Source Project
78864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Ignore requests if traffic intensity is high */
78964064216a8433360745f69edddce19a606659163The Android Open Source Project	if (measurementMgr_isTrafficIntensityHigherThanThreshold(pMeasurementMgr) == TRUE)
79064064216a8433360745f69edddce19a606659163The Android Open Source Project	{
79164064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
79264064216a8433360745f69edddce19a606659163The Android Open Source Project				("%s: Traffic intensity too high, giving up...\n", __FUNCTION__));
79364064216a8433360745f69edddce19a606659163The Android Open Source Project
79464064216a8433360745f69edddce19a606659163The Android Open Source Project		measurementMgr_rejectPendingRequests(pMeasurementMgr, MSR_REJECT_TRAFFIC_INTENSITY_TOO_HIGH);
79564064216a8433360745f69edddce19a606659163The Android Open Source Project
79664064216a8433360745f69edddce19a606659163The Android Open Source Project		return measurementMgrSM_event((UINT8 *) &(pMeasurementMgr->currentState),
79764064216a8433360745f69edddce19a606659163The Android Open Source Project                               MEASUREMENTMGR_EVENT_SEND_REPORT, pMeasurementMgr);
79864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
79964064216a8433360745f69edddce19a606659163The Android Open Source Project
80064064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
80164064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: Request is Valid, about to start\n", __FUNCTION__));
80264064216a8433360745f69edddce19a606659163The Android Open Source Project
80364064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementMgr->measuredChannelID = pRequestArr[0]->channelNumber;
80464064216a8433360745f69edddce19a606659163The Android Open Source Project
80564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Request resource from the SCR */
80664064216a8433360745f69edddce19a606659163The Android Open Source Project    return measurementMgrSM_event((UINT8 *) &(pMeasurementMgr->currentState),
80764064216a8433360745f69edddce19a606659163The Android Open Source Project        MEASUREMENTMGR_EVENT_REQUEST_SCR, pMeasurementMgr);
80864064216a8433360745f69edddce19a606659163The Android Open Source Project}
80964064216a8433360745f69edddce19a606659163The Android Open Source Project
81064064216a8433360745f69edddce19a606659163The Android Open Source Project
81164064216a8433360745f69edddce19a606659163The Android Open Source Project
81264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid measurementMgr_rejectPendingRequests(TI_HANDLE hMeasurementMgr, measurement_rejectReason_e rejectReason)
81364064216a8433360745f69edddce19a606659163The Android Open Source Project{
81464064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
81564064216a8433360745f69edddce19a606659163The Android Open Source Project	requestHandler_t * pRequestH = (requestHandler_t *) pMeasurementMgr->hRequestH;
81664064216a8433360745f69edddce19a606659163The Android Open Source Project    MeasurementRequest_t * pRequestArr[MAX_NUM_REQ];
81764064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8 numOfRequestsInParallel;
81864064216a8433360745f69edddce19a606659163The Android Open Source Project
81964064216a8433360745f69edddce19a606659163The Android Open Source Project	/* reject all pending measurement requests */
82064064216a8433360745f69edddce19a606659163The Android Open Source Project	while (requestHandler_getNextReq(pMeasurementMgr->hRequestH, TRUE,
82164064216a8433360745f69edddce19a606659163The Android Open Source Project				pRequestArr, &numOfRequestsInParallel) == OK)
82264064216a8433360745f69edddce19a606659163The Android Open Source Project	{
82364064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
82464064216a8433360745f69edddce19a606659163The Android Open Source Project					("%s: Rejecting pending request (activeRequestID = %d)...\n", __FUNCTION__, pRequestH->activeRequestID));
82564064216a8433360745f69edddce19a606659163The Android Open Source Project
82664064216a8433360745f69edddce19a606659163The Android Open Source Project        pMeasurementMgr->buildRejectReport(pMeasurementMgr, pRequestArr,
82764064216a8433360745f69edddce19a606659163The Android Open Source Project				numOfRequestsInParallel, rejectReason);
82864064216a8433360745f69edddce19a606659163The Android Open Source Project
82964064216a8433360745f69edddce19a606659163The Android Open Source Project		pRequestH->activeRequestID += numOfRequestsInParallel;
83064064216a8433360745f69edddce19a606659163The Android Open Source Project	}
83164064216a8433360745f69edddce19a606659163The Android Open Source Project}
83264064216a8433360745f69edddce19a606659163The Android Open Source Project
83364064216a8433360745f69edddce19a606659163The Android Open Source Project
83464064216a8433360745f69edddce19a606659163The Android Open Source Project
83564064216a8433360745f69edddce19a606659163The Android Open Source Project
83664064216a8433360745f69edddce19a606659163The Android Open Source Project
83764064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
83864064216a8433360745f69edddce19a606659163The Android Open Source Project/*						Callback functions Implementation.						*/
83964064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
84064064216a8433360745f69edddce19a606659163The Android Open Source Project
84164064216a8433360745f69edddce19a606659163The Android Open Source Project
84264064216a8433360745f69edddce19a606659163The Android Open Source Project/**
84364064216a8433360745f69edddce19a606659163The Android Open Source Project * The callback called by the MeasurementSRV module when then
84464064216a8433360745f69edddce19a606659163The Android Open Source Project * measurement operation has ended.
84564064216a8433360745f69edddce19a606659163The Android Open Source Project *
84664064216a8433360745f69edddce19a606659163The Android Open Source Project * @param clientObj A handle to the Measurement Manager module.
84764064216a8433360745f69edddce19a606659163The Android Open Source Project * @param msrReply An array of replies sent by the MeasurementSRV module,
84864064216a8433360745f69edddce19a606659163The Android Open Source Project * where each reply contains the result of a single measurement request.
84964064216a8433360745f69edddce19a606659163The Android Open Source Project *
85064064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 01-Jan-2006
85164064216a8433360745f69edddce19a606659163The Android Open Source Project */
85264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid measurementMgr_MeasurementCompleteCB(TI_HANDLE clientObj, measurement_reply_t * msrReply)
85364064216a8433360745f69edddce19a606659163The Android Open Source Project{
85464064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) clientObj;
85564064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT8 index;
85664064216a8433360745f69edddce19a606659163The Android Open Source Project
85764064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
85864064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: Building reports for measurement requests\n", __FUNCTION__));
85964064216a8433360745f69edddce19a606659163The Android Open Source Project
86064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* build a report for each measurement request/reply pair */
86164064216a8433360745f69edddce19a606659163The Android Open Source Project	for (index = 0; index < msrReply->numberOfTypes; index++)
86264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
86364064216a8433360745f69edddce19a606659163The Android Open Source Project        pMeasurementMgr->buildReport(pMeasurementMgr, *(pMeasurementMgr->currentRequest[index]), &msrReply->msrTypes[index]);
86464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
86564064216a8433360745f69edddce19a606659163The Android Open Source Project
86664064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementMgrSM_event((UINT8 *) &(pMeasurementMgr->currentState),
86764064216a8433360745f69edddce19a606659163The Android Open Source Project			MEASUREMENTMGR_EVENT_COMPLETE, pMeasurementMgr);
86864064216a8433360745f69edddce19a606659163The Android Open Source Project}
86964064216a8433360745f69edddce19a606659163The Android Open Source Project
87064064216a8433360745f69edddce19a606659163The Android Open Source Project
87164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
87264064216a8433360745f69edddce19a606659163The Android Open Source Project * The callback called when the SCR responds to the SCR request.
87364064216a8433360745f69edddce19a606659163The Android Open Source Project *
87464064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hClient A handle to the Measurement Manager module.
87564064216a8433360745f69edddce19a606659163The Android Open Source Project * @param requestStatus The request's status
87664064216a8433360745f69edddce19a606659163The Android Open Source Project * @param pendReason The reason of a PEND status.
87764064216a8433360745f69edddce19a606659163The Android Open Source Project *
87864064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 01-Jan-2006
87964064216a8433360745f69edddce19a606659163The Android Open Source Project */
88064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid measurementMgr_scrResponseCB(TI_HANDLE hClient, scr_clientRequestStatus_e requestStatus,
88164064216a8433360745f69edddce19a606659163The Android Open Source Project							   scr_pendReason_e pendReason )
88264064216a8433360745f69edddce19a606659163The Android Open Source Project{
88364064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hClient;
88464064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgrSM_Events event;
88564064216a8433360745f69edddce19a606659163The Android Open Source Project
88664064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
88764064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: SCR callback entered\n", __FUNCTION__));
88864064216a8433360745f69edddce19a606659163The Android Open Source Project
88964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* If the SM is in a state where it waits for the CB, status of RUN */
89064064216a8433360745f69edddce19a606659163The Android Open Source Project	/* results in the SM asking the measurementSRV to start measurement; */
89164064216a8433360745f69edddce19a606659163The Android Open Source Project	/* otherwise we got an ABORT or a PEND reason worse than the one we */
89264064216a8433360745f69edddce19a606659163The Android Open Source Project	/* got when calling the SCR, so the SM aborts the measurement */
89364064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pMeasurementMgr->currentState == MEASUREMENTMGR_STATE_WAITING_FOR_SCR)
89464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
89564064216a8433360745f69edddce19a606659163The Android Open Source Project		if (requestStatus == SCR_CRS_RUN)
89664064216a8433360745f69edddce19a606659163The Android Open Source Project		{
89764064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
89864064216a8433360745f69edddce19a606659163The Android Open Source Project					("%s: Received SCR status RUN, running...\n", __FUNCTION__));
89964064216a8433360745f69edddce19a606659163The Android Open Source Project
90064064216a8433360745f69edddce19a606659163The Android Open Source Project			event = MEASUREMENTMGR_EVENT_SCR_RUN;
90164064216a8433360745f69edddce19a606659163The Android Open Source Project		}
90264064216a8433360745f69edddce19a606659163The Android Open Source Project		else
90364064216a8433360745f69edddce19a606659163The Android Open Source Project		{
90464064216a8433360745f69edddce19a606659163The Android Open Source Project			if (requestStatus == SCR_CRS_PEND)
90564064216a8433360745f69edddce19a606659163The Android Open Source Project			{
90664064216a8433360745f69edddce19a606659163The Android Open Source Project				WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
90764064216a8433360745f69edddce19a606659163The Android Open Source Project						("%s: Received SCR status PEND with reason %d, aborting...\n", __FUNCTION__, pendReason));
90864064216a8433360745f69edddce19a606659163The Android Open Source Project			}
90964064216a8433360745f69edddce19a606659163The Android Open Source Project			else
91064064216a8433360745f69edddce19a606659163The Android Open Source Project			{
91164064216a8433360745f69edddce19a606659163The Android Open Source Project				WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
91264064216a8433360745f69edddce19a606659163The Android Open Source Project						("%s: Received SCR status ABORT/FW_RESET, aborting...\n", __FUNCTION__));
91364064216a8433360745f69edddce19a606659163The Android Open Source Project			}
91464064216a8433360745f69edddce19a606659163The Android Open Source Project
91564064216a8433360745f69edddce19a606659163The Android Open Source Project			event = MEASUREMENTMGR_EVENT_ABORT;
91664064216a8433360745f69edddce19a606659163The Android Open Source Project		}
91764064216a8433360745f69edddce19a606659163The Android Open Source Project	}
91864064216a8433360745f69edddce19a606659163The Android Open Source Project	else
91964064216a8433360745f69edddce19a606659163The Android Open Source Project	{
92064064216a8433360745f69edddce19a606659163The Android Open Source Project		/* This can only occur if FW reset occurs or when higher priority */
92164064216a8433360745f69edddce19a606659163The Android Open Source Project		/* client is running in all these cases indicate ABORT event */
92264064216a8433360745f69edddce19a606659163The Android Open Source Project
92364064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
92464064216a8433360745f69edddce19a606659163The Android Open Source Project				("%s: MeasurementMgrSM current state is %d (which isn't WAITING_FOR_SCR), aborting...\n", __FUNCTION__, pMeasurementMgr->currentState));
92564064216a8433360745f69edddce19a606659163The Android Open Source Project
92664064216a8433360745f69edddce19a606659163The Android Open Source Project		event = MEASUREMENTMGR_EVENT_ABORT;
92764064216a8433360745f69edddce19a606659163The Android Open Source Project	}
92864064216a8433360745f69edddce19a606659163The Android Open Source Project
92964064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgrSM_event((UINT8 *) &(pMeasurementMgr->currentState),
93064064216a8433360745f69edddce19a606659163The Android Open Source Project		event, pMeasurementMgr);
93164064216a8433360745f69edddce19a606659163The Android Open Source Project}
93264064216a8433360745f69edddce19a606659163The Android Open Source Project
93364064216a8433360745f69edddce19a606659163The Android Open Source Project
93464064216a8433360745f69edddce19a606659163The Android Open Source Project
93564064216a8433360745f69edddce19a606659163The Android Open Source Project
93664064216a8433360745f69edddce19a606659163The Android Open Source Project
93764064216a8433360745f69edddce19a606659163The Android Open Source Project
93864064216a8433360745f69edddce19a606659163The Android Open Source Project/**
93964064216a8433360745f69edddce19a606659163The Android Open Source Project * The callback called by the MLME.
94064064216a8433360745f69edddce19a606659163The Android Open Source Project *
94164064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hMeasurementMgr A handle to the Measurement Manager module.
94264064216a8433360745f69edddce19a606659163The Android Open Source Project *
94364064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 01-Jan-2006
94464064216a8433360745f69edddce19a606659163The Android Open Source Project */
94564064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid measurementMgr_mlmeResultCB(TI_HANDLE hMeasurementMgr, macAddress_t * bssid, mlmeFrameInfo_t * frameInfo,
94664064216a8433360745f69edddce19a606659163The Android Open Source Project								 Rx_attr_t * pRxAttr, UINT8 * buffer, UINT16 bufferLength)
94764064216a8433360745f69edddce19a606659163The Android Open Source Project{
94864064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
94964064216a8433360745f69edddce19a606659163The Android Open Source Project
95064064216a8433360745f69edddce19a606659163The Android Open Source Project	/* check whether the packet was received while the firmware was performing a beacon measurement */
95164064216a8433360745f69edddce19a606659163The Android Open Source Project
95264064216a8433360745f69edddce19a606659163The Android Open Source Project	BOOL receivedWhileMeasuring = ((pRxAttr->packetInfo & RX_PACKET_FLAGS_MEASURMENT) == RX_PACKET_FLAGS_MEASURMENT);
95364064216a8433360745f69edddce19a606659163The Android Open Source Project
95464064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pMeasurementMgr == NULL || pRxAttr == NULL)
95564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
95664064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
95764064216a8433360745f69edddce19a606659163The Android Open Source Project				("%s: MLME callback called with NULL object\n", __FUNCTION__));
95864064216a8433360745f69edddce19a606659163The Android Open Source Project
95964064216a8433360745f69edddce19a606659163The Android Open Source Project        return;
96064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
96164064216a8433360745f69edddce19a606659163The Android Open Source Project
96264064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
96364064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: MLME callback entered\n", __FUNCTION__));
96464064216a8433360745f69edddce19a606659163The Android Open Source Project
96564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* save scan results in site manager */
96664064216a8433360745f69edddce19a606659163The Android Open Source Project    siteMgr_updateSite(pMeasurementMgr->hSiteMgr, bssid, frameInfo, pRxAttr->channel, (radioBand_e)pRxAttr->band, receivedWhileMeasuring);
96764064216a8433360745f69edddce19a606659163The Android Open Source Project
96864064216a8433360745f69edddce19a606659163The Android Open Source Project    if (frameInfo->subType == PROBE_RESPONSE)
96964064216a8433360745f69edddce19a606659163The Android Open Source Project    {
97064064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_saveProbeRespBuffer(pMeasurementMgr->hSiteMgr, bssid, buffer, bufferLength);
97164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
97264064216a8433360745f69edddce19a606659163The Android Open Source Project    else if (frameInfo->subType == BEACON)
97364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
97464064216a8433360745f69edddce19a606659163The Android Open Source Project        siteMgr_saveBeaconBuffer(pMeasurementMgr->hSiteMgr, bssid, buffer, bufferLength);
97564064216a8433360745f69edddce19a606659163The Android Open Source Project    }
97664064216a8433360745f69edddce19a606659163The Android Open Source Project    else
97764064216a8433360745f69edddce19a606659163The Android Open Source Project    {
97864064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_ERROR(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
97964064216a8433360745f69edddce19a606659163The Android Open Source Project				("%s: Unknown frame subtype (%d)\n", __FUNCTION__, frameInfo->subType));
98064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
98164064216a8433360745f69edddce19a606659163The Android Open Source Project
98264064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
98364064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: MLME Frame: rcvWhileMeasuring = %d, Subtype = %d, MAC = %x-%x-%x-%x-%x-%x, RSSI = %d\n",
98464064216a8433360745f69edddce19a606659163The Android Open Source Project					__FUNCTION__, receivedWhileMeasuring, frameInfo->subType,
98564064216a8433360745f69edddce19a606659163The Android Open Source Project					bssid->addr[0], bssid->addr[1], bssid->addr[2],
98664064216a8433360745f69edddce19a606659163The Android Open Source Project					bssid->addr[3], bssid->addr[4], bssid->addr[5],
98764064216a8433360745f69edddce19a606659163The Android Open Source Project					pRxAttr->Rssi));
98864064216a8433360745f69edddce19a606659163The Android Open Source Project}
98964064216a8433360745f69edddce19a606659163The Android Open Source Project
99064064216a8433360745f69edddce19a606659163The Android Open Source Project
99164064216a8433360745f69edddce19a606659163The Android Open Source Project
99264064216a8433360745f69edddce19a606659163The Android Open Source Project
99364064216a8433360745f69edddce19a606659163The Android Open Source Project
99464064216a8433360745f69edddce19a606659163The Android Open Source Project
99564064216a8433360745f69edddce19a606659163The Android Open Source Project
99664064216a8433360745f69edddce19a606659163The Android Open Source Project
99764064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
99864064216a8433360745f69edddce19a606659163The Android Open Source Project/*						Internal functions Implementation.						*/
99964064216a8433360745f69edddce19a606659163The Android Open Source Project/********************************************************************************/
100064064216a8433360745f69edddce19a606659163The Android Open Source Project
100164064216a8433360745f69edddce19a606659163The Android Open Source Project
100264064216a8433360745f69edddce19a606659163The Android Open Source Project/**
100364064216a8433360745f69edddce19a606659163The Android Open Source Project * Releases the module's allocated objects according to the given init vector.
100464064216a8433360745f69edddce19a606659163The Android Open Source Project *
100564064216a8433360745f69edddce19a606659163The Android Open Source Project * @param pMeasurementMgr A handle to the Measurement Manager module.
100664064216a8433360745f69edddce19a606659163The Android Open Source Project * @param initVec The init vector with a bit set for each allocated object.
100764064216a8433360745f69edddce19a606659163The Android Open Source Project *
100864064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 01-Jan-2006
100964064216a8433360745f69edddce19a606659163The Android Open Source Project */
101064064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void measurementMgr_releaseModule(measurementMgr_t * pMeasurementMgr, UINT32 initVec)
101164064216a8433360745f69edddce19a606659163The Android Open Source Project{
101264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
101364064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT32 currAC;
101464064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
101564064216a8433360745f69edddce19a606659163The Android Open Source Project
101664064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
101764064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: InitVec = %d\n", __FUNCTION__, initVec));
101864064216a8433360745f69edddce19a606659163The Android Open Source Project
101964064216a8433360745f69edddce19a606659163The Android Open Source Project	if (initVec & (1 << MEASUREMENT_ACTIVATION_DELAY_TIMER_INIT_BIT))
102064064216a8433360745f69edddce19a606659163The Android Open Source Project	{
102164064216a8433360745f69edddce19a606659163The Android Open Source Project		os_timerStop(pMeasurementMgr->hOs, pMeasurementMgr->pActivationDelayTimer);
102264064216a8433360745f69edddce19a606659163The Android Open Source Project		utils_nullTimerDestroy(pMeasurementMgr->hOs, pMeasurementMgr->pActivationDelayTimer);
102364064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef EXC_MODULE_INCLUDED
102464064216a8433360745f69edddce19a606659163The Android Open Source Project		for (currAC = 0; currAC < MAX_NUM_OF_AC; currAC++)
102564064216a8433360745f69edddce19a606659163The Android Open Source Project		{
102664064216a8433360745f69edddce19a606659163The Android Open Source Project			if (pMeasurementMgr->pTsMetricsReportTimer[currAC] != NULL)
102764064216a8433360745f69edddce19a606659163The Android Open Source Project			{
102864064216a8433360745f69edddce19a606659163The Android Open Source Project				os_timerStop(pMeasurementMgr->hOs, pMeasurementMgr->pTsMetricsReportTimer[currAC]);
102964064216a8433360745f69edddce19a606659163The Android Open Source Project				utils_nullTimerDestroy(pMeasurementMgr->hOs, pMeasurementMgr->pTsMetricsReportTimer[currAC]);
103064064216a8433360745f69edddce19a606659163The Android Open Source Project			}
103164064216a8433360745f69edddce19a606659163The Android Open Source Project		}
103264064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
103364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
103464064216a8433360745f69edddce19a606659163The Android Open Source Project
103564064216a8433360745f69edddce19a606659163The Android Open Source Project    if (initVec & (1 << MEASUREMENT_SM_INIT_BIT))
103664064216a8433360745f69edddce19a606659163The Android Open Source Project		fsm_Unload(pMeasurementMgr->hOs, pMeasurementMgr->pMeasurementMgrSm);
103764064216a8433360745f69edddce19a606659163The Android Open Source Project
103864064216a8433360745f69edddce19a606659163The Android Open Source Project
103964064216a8433360745f69edddce19a606659163The Android Open Source Project	if (initVec & (1 << MEASUREMENT_REQUEST_HANDLER_SUB_MODULE_INIT_BIT))
104064064216a8433360745f69edddce19a606659163The Android Open Source Project		requestHandler_destroy(pMeasurementMgr->hRequestH);
104164064216a8433360745f69edddce19a606659163The Android Open Source Project
104264064216a8433360745f69edddce19a606659163The Android Open Source Project
104364064216a8433360745f69edddce19a606659163The Android Open Source Project	if (initVec & (1 << MEASUREMENT_INIT_BIT))
104464064216a8433360745f69edddce19a606659163The Android Open Source Project		utils_nullMemoryFree(pMeasurementMgr->hOs, pMeasurementMgr, sizeof(measurementMgr_t));
104564064216a8433360745f69edddce19a606659163The Android Open Source Project}
104664064216a8433360745f69edddce19a606659163The Android Open Source Project
104764064216a8433360745f69edddce19a606659163The Android Open Source Project
104864064216a8433360745f69edddce19a606659163The Android Open Source Project
104964064216a8433360745f69edddce19a606659163The Android Open Source Project
105064064216a8433360745f69edddce19a606659163The Android Open Source Project
105164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
105264064216a8433360745f69edddce19a606659163The Android Open Source Project * Checks whether the traffic intensity, i.e. number of packets per seconds, is higher
105364064216a8433360745f69edddce19a606659163The Android Open Source Project * than the preconfigured threshold.
105464064216a8433360745f69edddce19a606659163The Android Open Source Project *
105564064216a8433360745f69edddce19a606659163The Android Open Source Project * @param pMeasurementMgr A handle to the Measurement Manager module.
105664064216a8433360745f69edddce19a606659163The Android Open Source Project *
105764064216a8433360745f69edddce19a606659163The Android Open Source Project * @return True iff the traffic intensity is high
105864064216a8433360745f69edddce19a606659163The Android Open Source Project *
105964064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 01-Jan-2006
106064064216a8433360745f69edddce19a606659163The Android Open Source Project */
106164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic BOOL measurementMgr_isTrafficIntensityHigherThanThreshold(measurementMgr_t * pMeasurementMgr)
106264064216a8433360745f69edddce19a606659163The Android Open Source Project{
106364064216a8433360745f69edddce19a606659163The Android Open Source Project    BOOL trafficIntensityHigh = FALSE;
106464064216a8433360745f69edddce19a606659163The Android Open Source Project    int pcksPerSec;
106564064216a8433360745f69edddce19a606659163The Android Open Source Project
106664064216a8433360745f69edddce19a606659163The Android Open Source Project    pcksPerSec = TrafficMonitor_GetFrameBandwidth(pMeasurementMgr->hTrafficMonitor);
106764064216a8433360745f69edddce19a606659163The Android Open Source Project
106864064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
106964064216a8433360745f69edddce19a606659163The Android Open Source Project	        ("%s: pcksPerSec = %d\n", __FUNCTION__, pcksPerSec));
107064064216a8433360745f69edddce19a606659163The Android Open Source Project
107164064216a8433360745f69edddce19a606659163The Android Open Source Project    if (pcksPerSec >= pMeasurementMgr->trafficIntensityThreshold)
107264064216a8433360745f69edddce19a606659163The Android Open Source Project        trafficIntensityHigh = TRUE;
107364064216a8433360745f69edddce19a606659163The Android Open Source Project
107464064216a8433360745f69edddce19a606659163The Android Open Source Project    return trafficIntensityHigh;
107564064216a8433360745f69edddce19a606659163The Android Open Source Project}
107664064216a8433360745f69edddce19a606659163The Android Open Source Project
107764064216a8433360745f69edddce19a606659163The Android Open Source Project
107864064216a8433360745f69edddce19a606659163The Android Open Source Project
107964064216a8433360745f69edddce19a606659163The Android Open Source Project
108064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
108164064216a8433360745f69edddce19a606659163The Android Open Source Project * Checks whether the given measurement request is valid.
108264064216a8433360745f69edddce19a606659163The Android Open Source Project *
108364064216a8433360745f69edddce19a606659163The Android Open Source Project * @param hMeasurementMgr A handle to the Measurement Manager module.
108464064216a8433360745f69edddce19a606659163The Android Open Source Project * @param pRequestArr The measurement request.
108564064216a8433360745f69edddce19a606659163The Android Open Source Project * @param numOfRequest Number of type requests
108664064216a8433360745f69edddce19a606659163The Android Open Source Project *
108764064216a8433360745f69edddce19a606659163The Android Open Source Project * @return True iff the request is valid
108864064216a8433360745f69edddce19a606659163The Android Open Source Project *
108964064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 01-Jan-2006
109064064216a8433360745f69edddce19a606659163The Android Open Source Project */
109164064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic BOOL	measurementMgr_isRequestValid(TI_HANDLE hMeasurementMgr, MeasurementRequest_t *pRequestArr[],
109264064216a8433360745f69edddce19a606659163The Android Open Source Project						   UINT8 numOfRequest)
109364064216a8433360745f69edddce19a606659163The Android Open Source Project{
109464064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) hMeasurementMgr;
109564064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8			requestIndex;
109664064216a8433360745f69edddce19a606659163The Android Open Source Project	paramInfo_t		param;
109764064216a8433360745f69edddce19a606659163The Android Open Source Project
109864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Checking validity of the measured channel number */
109964064216a8433360745f69edddce19a606659163The Android Open Source Project	param.content.channel = pRequestArr[0]->channelNumber;
110064064216a8433360745f69edddce19a606659163The Android Open Source Project	param.paramType = REGULATORY_DOMAIN_IS_CHANNEL_SUPPORTED;
110164064216a8433360745f69edddce19a606659163The Android Open Source Project	regulatoryDomain_getParam(pMeasurementMgr->hRegulatoryDomain, &param);
110264064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( !param.content.bIsChannelSupprted  )
110364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
110464064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
110564064216a8433360745f69edddce19a606659163The Android Open Source Project	            ("%s: Request rejected due to invalid channel\n", __FUNCTION__));
110664064216a8433360745f69edddce19a606659163The Android Open Source Project
110764064216a8433360745f69edddce19a606659163The Android Open Source Project        if (pMeasurementMgr->currentFrameType == MSR_FRAME_TYPE_UNICAST)
110864064216a8433360745f69edddce19a606659163The Android Open Source Project            pMeasurementMgr->buildRejectReport(pMeasurementMgr, pRequestArr, numOfRequest,
110964064216a8433360745f69edddce19a606659163The Android Open Source Project									MSR_REJECT_INVALID_CHANNEL);
111064064216a8433360745f69edddce19a606659163The Android Open Source Project
111164064216a8433360745f69edddce19a606659163The Android Open Source Project        return FALSE;
111264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
111364064216a8433360745f69edddce19a606659163The Android Open Source Project    else
111464064216a8433360745f69edddce19a606659163The Android Open Source Project    {
111564064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
111664064216a8433360745f69edddce19a606659163The Android Open Source Project	            ("%s: Request channel is Valid\n", __FUNCTION__));
111764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
111864064216a8433360745f69edddce19a606659163The Android Open Source Project
111964064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
112064064216a8433360745f69edddce19a606659163The Android Open Source Project	        ("%s: Starting to check each request:\n", __FUNCTION__));
112164064216a8433360745f69edddce19a606659163The Android Open Source Project
112264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Check Validity of each request */
112364064216a8433360745f69edddce19a606659163The Android Open Source Project	for (requestIndex = 0; requestIndex < numOfRequest; requestIndex++)
112464064216a8433360745f69edddce19a606659163The Android Open Source Project	{
112564064216a8433360745f69edddce19a606659163The Android Open Source Project	    WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
112664064216a8433360745f69edddce19a606659163The Android Open Source Project		        ("%s: Checking request #%d:\n", __FUNCTION__, requestIndex+1));
112764064216a8433360745f69edddce19a606659163The Android Open Source Project
112864064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Checking validity of the Request Type */
112964064216a8433360745f69edddce19a606659163The Android Open Source Project        if (pMeasurementMgr->isTypeValid(hMeasurementMgr, pRequestArr[requestIndex]->Type,
113064064216a8433360745f69edddce19a606659163The Android Open Source Project				pRequestArr[requestIndex]->ScanMode) == FALSE)
113164064216a8433360745f69edddce19a606659163The Android Open Source Project        {
113264064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
113364064216a8433360745f69edddce19a606659163The Android Open Source Project					("%s: Request rejected due to invalid measurement type of request #%d (type = %d)\n", __FUNCTION__, requestIndex+1, pRequestArr[requestIndex]->Type));
113464064216a8433360745f69edddce19a606659163The Android Open Source Project
113564064216a8433360745f69edddce19a606659163The Android Open Source Project            if(pMeasurementMgr->currentFrameType == MSR_FRAME_TYPE_UNICAST)
113664064216a8433360745f69edddce19a606659163The Android Open Source Project                pMeasurementMgr->buildRejectReport(pMeasurementMgr, pRequestArr, numOfRequest,
113764064216a8433360745f69edddce19a606659163The Android Open Source Project										MSR_REJECT_INVALID_MEASUREMENT_TYPE);
113864064216a8433360745f69edddce19a606659163The Android Open Source Project
113964064216a8433360745f69edddce19a606659163The Android Open Source Project            return FALSE;
114064064216a8433360745f69edddce19a606659163The Android Open Source Project        }
114164064216a8433360745f69edddce19a606659163The Android Open Source Project        else
114264064216a8433360745f69edddce19a606659163The Android Open Source Project        {
114364064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
114464064216a8433360745f69edddce19a606659163The Android Open Source Project					("%s: Measurement type of request #%d is supported (type = %d)\n", __FUNCTION__, requestIndex+1, pRequestArr[requestIndex]->Type));
114564064216a8433360745f69edddce19a606659163The Android Open Source Project        }
114664064216a8433360745f69edddce19a606659163The Android Open Source Project
114764064216a8433360745f69edddce19a606659163The Android Open Source Project        /* For measurement types different than Beacon Table */
114864064216a8433360745f69edddce19a606659163The Android Open Source Project        if ((pRequestArr[requestIndex]->Type != MSR_TYPE_BEACON_MEASUREMENT) ||
114964064216a8433360745f69edddce19a606659163The Android Open Source Project            (pRequestArr[requestIndex]->ScanMode != MSR_SCAN_MODE_BEACON_TABLE))
115064064216a8433360745f69edddce19a606659163The Android Open Source Project		{
115164064216a8433360745f69edddce19a606659163The Android Open Source Project    		/* Checking Measurement request's duration only when request is on a non-serving channel */
115264064216a8433360745f69edddce19a606659163The Android Open Source Project            if (pMeasurementMgr->servingChannelID != pRequestArr[requestIndex]->channelNumber)
115364064216a8433360745f69edddce19a606659163The Android Open Source Project			{
115464064216a8433360745f69edddce19a606659163The Android Open Source Project				UINT8 dtimPeriod;
115564064216a8433360745f69edddce19a606659163The Android Open Source Project				UINT32 beaconInterval;
115664064216a8433360745f69edddce19a606659163The Android Open Source Project				UINT32 dtimDuration;
115764064216a8433360745f69edddce19a606659163The Android Open Source Project
115864064216a8433360745f69edddce19a606659163The Android Open Source Project
115964064216a8433360745f69edddce19a606659163The Android Open Source Project				/* Checking duration doesn't exceed given max duration */
116064064216a8433360745f69edddce19a606659163The Android Open Source Project				if (pRequestArr[requestIndex]->DurationTime > pMeasurementMgr->maxDurationOnNonServingChannel)
116164064216a8433360745f69edddce19a606659163The Android Open Source Project				{
116264064216a8433360745f69edddce19a606659163The Android Open Source Project					WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
116364064216a8433360745f69edddce19a606659163The Android Open Source Project							("%s: Request #%d rejected because duration exceeds maximum duration\n", __FUNCTION__, requestIndex+1));
116464064216a8433360745f69edddce19a606659163The Android Open Source Project
116564064216a8433360745f69edddce19a606659163The Android Open Source Project					WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
116664064216a8433360745f69edddce19a606659163The Android Open Source Project							("%s: Duration = %d, MaxDurationOnNonServingChannel = %d\n", __FUNCTION__,
116764064216a8433360745f69edddce19a606659163The Android Open Source Project									pRequestArr[requestIndex]->DurationTime,
116864064216a8433360745f69edddce19a606659163The Android Open Source Project									pMeasurementMgr->maxDurationOnNonServingChannel));
116964064216a8433360745f69edddce19a606659163The Android Open Source Project
117064064216a8433360745f69edddce19a606659163The Android Open Source Project					if (pMeasurementMgr->currentFrameType == MSR_FRAME_TYPE_UNICAST)
117164064216a8433360745f69edddce19a606659163The Android Open Source Project						pMeasurementMgr->buildRejectReport(pMeasurementMgr, pRequestArr, numOfRequest,
117264064216a8433360745f69edddce19a606659163The Android Open Source Project								MSR_REJECT_DURATION_EXCEED_MAX_DURATION);
117364064216a8433360745f69edddce19a606659163The Android Open Source Project
117464064216a8433360745f69edddce19a606659163The Android Open Source Project					return FALSE;
117564064216a8433360745f69edddce19a606659163The Android Open Source Project				}
117664064216a8433360745f69edddce19a606659163The Android Open Source Project				else
117764064216a8433360745f69edddce19a606659163The Android Open Source Project				{
117864064216a8433360745f69edddce19a606659163The Android Open Source Project					WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
117964064216a8433360745f69edddce19a606659163The Android Open Source Project							("%s: Duration of request #%d doesn't exceed max duration\n", __FUNCTION__, requestIndex+1));
118064064216a8433360745f69edddce19a606659163The Android Open Source Project				}
118164064216a8433360745f69edddce19a606659163The Android Open Source Project
118264064216a8433360745f69edddce19a606659163The Android Open Source Project
118364064216a8433360745f69edddce19a606659163The Android Open Source Project				/* Checking DTIM */
118464064216a8433360745f69edddce19a606659163The Android Open Source Project
118564064216a8433360745f69edddce19a606659163The Android Open Source Project				/* Getting the DTIM count */
118664064216a8433360745f69edddce19a606659163The Android Open Source Project				param.paramType = SITE_MGR_DTIM_PERIOD_PARAM;
118764064216a8433360745f69edddce19a606659163The Android Open Source Project				siteMgr_getParam(pMeasurementMgr->hSiteMgr, &param);
118864064216a8433360745f69edddce19a606659163The Android Open Source Project				dtimPeriod = param.content.siteMgrDtimPeriod;
118964064216a8433360745f69edddce19a606659163The Android Open Source Project
119064064216a8433360745f69edddce19a606659163The Android Open Source Project				/* Getting the beacon Interval */
119164064216a8433360745f69edddce19a606659163The Android Open Source Project				param.paramType = SITE_MGR_BEACON_INTERVAL_PARAM;
119264064216a8433360745f69edddce19a606659163The Android Open Source Project				siteMgr_getParam(pMeasurementMgr->hSiteMgr, &param);
119364064216a8433360745f69edddce19a606659163The Android Open Source Project				beaconInterval = param.content.beaconInterval;
119464064216a8433360745f69edddce19a606659163The Android Open Source Project
119564064216a8433360745f69edddce19a606659163The Android Open Source Project				dtimDuration = beaconInterval * MEASUREMENT_BEACON_INTERVAL_IN_MICRO_SEC/MEASUREMENT_MSEC_IN_MICRO*dtimPeriod;
119664064216a8433360745f69edddce19a606659163The Android Open Source Project				if (pRequestArr[requestIndex]->DurationTime > dtimDuration)
119764064216a8433360745f69edddce19a606659163The Android Open Source Project				{
119864064216a8433360745f69edddce19a606659163The Android Open Source Project					WLAN_REPORT_WARNING(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
119964064216a8433360745f69edddce19a606659163The Android Open Source Project							("%s: Request rejected due to DTIM overlap of request #%d\n", __FUNCTION__, requestIndex+1));
120064064216a8433360745f69edddce19a606659163The Android Open Source Project
120164064216a8433360745f69edddce19a606659163The Android Open Source Project					WLAN_REPORT_WARNING(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
120264064216a8433360745f69edddce19a606659163The Android Open Source Project							("%s: Duration = %d, DTIM Duration = %d\n", __FUNCTION__, pRequestArr[requestIndex]->DurationTime, dtimDuration));
120364064216a8433360745f69edddce19a606659163The Android Open Source Project
120464064216a8433360745f69edddce19a606659163The Android Open Source Project					if (pMeasurementMgr->currentFrameType == MSR_FRAME_TYPE_UNICAST)
120564064216a8433360745f69edddce19a606659163The Android Open Source Project						pMeasurementMgr->buildRejectReport(pMeasurementMgr, pRequestArr, numOfRequest,
120664064216a8433360745f69edddce19a606659163The Android Open Source Project												MSR_REJECT_DTIM_OVERLAP);
120764064216a8433360745f69edddce19a606659163The Android Open Source Project
120864064216a8433360745f69edddce19a606659163The Android Open Source Project					return FALSE;
120964064216a8433360745f69edddce19a606659163The Android Open Source Project				}
121064064216a8433360745f69edddce19a606659163The Android Open Source Project				else
121164064216a8433360745f69edddce19a606659163The Android Open Source Project				{
121264064216a8433360745f69edddce19a606659163The Android Open Source Project					WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
121364064216a8433360745f69edddce19a606659163The Android Open Source Project							("%s: DTIM of request #%d doesn't overlap\n", __FUNCTION__, requestIndex+1));
121464064216a8433360745f69edddce19a606659163The Android Open Source Project				}
121564064216a8433360745f69edddce19a606659163The Android Open Source Project	        }
121664064216a8433360745f69edddce19a606659163The Android Open Source Project		}
121764064216a8433360745f69edddce19a606659163The Android Open Source Project	}
121864064216a8433360745f69edddce19a606659163The Android Open Source Project
121964064216a8433360745f69edddce19a606659163The Android Open Source Project	return TRUE;
122064064216a8433360745f69edddce19a606659163The Android Open Source Project}
122164064216a8433360745f69edddce19a606659163The Android Open Source Project
122264064216a8433360745f69edddce19a606659163The Android Open Source Project
122364064216a8433360745f69edddce19a606659163The Android Open Source Project
122464064216a8433360745f69edddce19a606659163The Android Open Source Project
122564064216a8433360745f69edddce19a606659163The Android Open Source Project
122664064216a8433360745f69edddce19a606659163The Android Open Source Project
122764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
122864064216a8433360745f69edddce19a606659163The Android Open Source Project * The callback called when the activation delay timer has ended.
122964064216a8433360745f69edddce19a606659163The Android Open Source Project *
123064064216a8433360745f69edddce19a606659163The Android Open Source Project * @param Context A handle to the Measurement Manager module.
123164064216a8433360745f69edddce19a606659163The Android Open Source Project *
123264064216a8433360745f69edddce19a606659163The Android Open Source Project * @date 01-Jan-2006
123364064216a8433360745f69edddce19a606659163The Android Open Source Project */
123464064216a8433360745f69edddce19a606659163The Android Open Source Projectstatic void	measurementMgr_uponActivationDelayTimeout(TI_HANDLE Context)
123564064216a8433360745f69edddce19a606659163The Android Open Source Project{
123664064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementMgr_t * pMeasurementMgr = (measurementMgr_t *) Context;
123764064216a8433360745f69edddce19a606659163The Android Open Source Project
123864064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pMeasurementMgr->hReport, MEASUREMENT_MNGR_MODULE_LOG,
123964064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: Activation delay timeout callback entered\n", __FUNCTION__));
124064064216a8433360745f69edddce19a606659163The Android Open Source Project
124164064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementMgr_activateNextRequest(Context);
124264064216a8433360745f69edddce19a606659163The Android Open Source Project}
1243