164064216a8433360745f69edddce19a606659163The Android Open Source Project/** \file measurementSrv.c
264064216a8433360745f69edddce19a606659163The Android Open Source Project *  \brief This file include the measurement SRV interface functions implementation.
364064216a8433360745f69edddce19a606659163The Android Open Source Project *  \author Ronen Kalish
464064216a8433360745f69edddce19a606659163The Android Open Source Project *  \date 09-November-2005
564064216a8433360745f69edddce19a606659163The Android Open Source Project */
664064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************
764064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
864064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
964064216a8433360745f69edddce19a606659163The Android Open Source Project**| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
1064064216a8433360745f69edddce19a606659163The Android Open Source Project**| All rights reserved.                                                  |**
1164064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1264064216a8433360745f69edddce19a606659163The Android Open Source Project**| Redistribution and use in source and binary forms, with or without    |**
1364064216a8433360745f69edddce19a606659163The Android Open Source Project**| modification, are permitted provided that the following conditions    |**
1464064216a8433360745f69edddce19a606659163The Android Open Source Project**| are met:                                                              |**
1564064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
1664064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions of source code must retain the above copyright     |**
1764064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer.      |**
1864064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Redistributions in binary form must reproduce the above copyright  |**
1964064216a8433360745f69edddce19a606659163The Android Open Source Project**|    notice, this list of conditions and the following disclaimer in    |**
2064064216a8433360745f69edddce19a606659163The Android Open Source Project**|    the documentation and/or other materials provided with the         |**
2164064216a8433360745f69edddce19a606659163The Android Open Source Project**|    distribution.                                                      |**
2264064216a8433360745f69edddce19a606659163The Android Open Source Project**|  * Neither the name Texas Instruments nor the names of its            |**
2364064216a8433360745f69edddce19a606659163The Android Open Source Project**|    contributors may be used to endorse or promote products derived    |**
2464064216a8433360745f69edddce19a606659163The Android Open Source Project**|    from this software without specific prior written permission.      |**
2564064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
2664064216a8433360745f69edddce19a606659163The Android Open Source Project**| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
2764064216a8433360745f69edddce19a606659163The Android Open Source Project**| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
2864064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
2964064216a8433360745f69edddce19a606659163The Android Open Source Project**| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
3064064216a8433360745f69edddce19a606659163The Android Open Source Project**| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
3164064216a8433360745f69edddce19a606659163The Android Open Source Project**| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
3264064216a8433360745f69edddce19a606659163The Android Open Source Project**| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
3364064216a8433360745f69edddce19a606659163The Android Open Source Project**| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
3464064216a8433360745f69edddce19a606659163The Android Open Source Project**| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
3564064216a8433360745f69edddce19a606659163The Android Open Source Project**| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
3664064216a8433360745f69edddce19a606659163The Android Open Source Project**| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
3764064216a8433360745f69edddce19a606659163The Android Open Source Project**|                                                                       |**
3864064216a8433360745f69edddce19a606659163The Android Open Source Project**+-----------------------------------------------------------------------+**
3964064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************/
4064064216a8433360745f69edddce19a606659163The Android Open Source Project
4164064216a8433360745f69edddce19a606659163The Android Open Source Project#include "measurementTypes.h"
4264064216a8433360745f69edddce19a606659163The Android Open Source Project#include "MeasurementSrv.h"
4364064216a8433360745f69edddce19a606659163The Android Open Source Project#include "MeasurementSrvSM.h"
4464064216a8433360745f69edddce19a606659163The Android Open Source Project#include "report.h"
4564064216a8433360745f69edddce19a606659163The Android Open Source Project#include "whalCtrl_api.h"
4664064216a8433360745f69edddce19a606659163The Android Open Source Project#include "osApi.h"
4764064216a8433360745f69edddce19a606659163The Android Open Source Project#include "MacServices.h"
4864064216a8433360745f69edddce19a606659163The Android Open Source Project#include "paramIn.h"
4964064216a8433360745f69edddce19a606659163The Android Open Source Project#include "public_event_mbox.h"
5064064216a8433360745f69edddce19a606659163The Android Open Source Project#include "measurementSrvDbgPrint.h"
5164064216a8433360745f69edddce19a606659163The Android Open Source Project
5264064216a8433360745f69edddce19a606659163The Android Open Source Project/**
5364064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
5464064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 08-November-2005\n
5564064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Creates the measurement SRV object
5664064216a8433360745f69edddce19a606659163The Android Open Source Project *
5764064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
5864064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hOS - handle to the OS object.\n
5964064216a8433360745f69edddce19a606659163The Android Open Source Project * \return a handle to the measurement SRV object, NULL if an error occurred.\n
6064064216a8433360745f69edddce19a606659163The Android Open Source Project */
6164064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_HANDLE MacServices_measurementSRV_create( TI_HANDLE hOS )
6264064216a8433360745f69edddce19a606659163The Android Open Source Project{
6364064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV;
6464064216a8433360745f69edddce19a606659163The Android Open Source Project    int i;
6564064216a8433360745f69edddce19a606659163The Android Open Source Project
6664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* allocate the measurement SRV object */
6764064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV = os_memoryAlloc( hOS, sizeof(measurementSRV_t) );
6864064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( NULL == pMeasurementSRV )
6964064216a8433360745f69edddce19a606659163The Android Open Source Project    {
7064064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT( ("ERROR: Failed to create measurement SRV object.") );
7164064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
7264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
7364064216a8433360745f69edddce19a606659163The Android Open Source Project
7464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* nullify the object */
7564064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryZero( hOS, pMeasurementSRV, sizeof(measurementSRV_t) );
7664064216a8433360745f69edddce19a606659163The Android Open Source Project
7764064216a8433360745f69edddce19a606659163The Android Open Source Project    /* store OS handle */
7864064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->hOS = hOS;
7964064216a8433360745f69edddce19a606659163The Android Open Source Project
8064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* allocate the SM */
8164064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( OK != fsm_Create( hOS, &(pMeasurementSRV->SM), MSR_SRV_NUM_OF_STATES, MSR_SRV_NUM_OF_EVENTS ) )
8264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
8364064216a8433360745f69edddce19a606659163The Android Open Source Project        pMeasurementSRV->SM = NULL;
8464064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("Failed to create measurement SRV state machine.\n"));
8564064216a8433360745f69edddce19a606659163The Android Open Source Project        MacServices_measurementSRV_destroy( pMeasurementSRV );
8664064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
8764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
8864064216a8433360745f69edddce19a606659163The Android Open Source Project
8964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* allocate the timers */
9064064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->hStartStopTimer =
9164064216a8433360745f69edddce19a606659163The Android Open Source Project        os_timerCreate( hOS, MacServices_measurementSRV_startStopTimerExpired, (TI_HANDLE)pMeasurementSRV );
9264064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( NULL == pMeasurementSRV->hStartStopTimer )
9364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
9464064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_OS_REPORT(("Failed to create measurement SRV FW guard timer.\n"));
9564064216a8433360745f69edddce19a606659163The Android Open Source Project        MacServices_measurementSRV_destroy( pMeasurementSRV );
9664064216a8433360745f69edddce19a606659163The Android Open Source Project        return NULL;
9764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
9864064216a8433360745f69edddce19a606659163The Android Open Source Project
9964064216a8433360745f69edddce19a606659163The Android Open Source Project    for ( i = 0; i < MAX_NUM_OF_MSR_TYPES_IN_PARALLEL; i++ )
10064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
10164064216a8433360745f69edddce19a606659163The Android Open Source Project        pMeasurementSRV->hRequestTimer[ i ]
10264064216a8433360745f69edddce19a606659163The Android Open Source Project            = os_timerCreate( hOS, MacServices_measurementSRV_requestTimerExpired, (TI_HANDLE)pMeasurementSRV );
10364064216a8433360745f69edddce19a606659163The Android Open Source Project        if ( NULL == pMeasurementSRV->hRequestTimer[ i ] )
10464064216a8433360745f69edddce19a606659163The Android Open Source Project        {
10564064216a8433360745f69edddce19a606659163The Android Open Source Project            WLAN_OS_REPORT(("Failed to create measurement SRV request timers.\n"));
10664064216a8433360745f69edddce19a606659163The Android Open Source Project            MacServices_measurementSRV_destroy( pMeasurementSRV );
10764064216a8433360745f69edddce19a606659163The Android Open Source Project            return NULL;
10864064216a8433360745f69edddce19a606659163The Android Open Source Project        }
10964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
11064064216a8433360745f69edddce19a606659163The Android Open Source Project
11164064216a8433360745f69edddce19a606659163The Android Open Source Project    return (TI_HANDLE)pMeasurementSRV;
11264064216a8433360745f69edddce19a606659163The Android Open Source Project}
11364064216a8433360745f69edddce19a606659163The Android Open Source Project
11464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
11564064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
11664064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 08-November-2005\n
11764064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Initializes the measurement SRV object
11864064216a8433360745f69edddce19a606659163The Android Open Source Project *
11964064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
12064064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
12164064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hReport - handle to the report object.\n
12264064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hHALCtrl - handle to the HAL CTRL object.\n
12364064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hPowerSaveSRV - handle to the power save SRV object.\n
12464064216a8433360745f69edddce19a606659163The Android Open Source Project */
12564064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid MacServices_measurementSRV_init( TI_HANDLE hMeasurementSRV, TI_HANDLE hReport, TI_HANDLE hHALCtrl,
12664064216a8433360745f69edddce19a606659163The Android Open Source Project                                      TI_HANDLE hPowerSaveSRV )
12764064216a8433360745f69edddce19a606659163The Android Open Source Project{
12864064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
12964064216a8433360745f69edddce19a606659163The Android Open Source Project	int i;
13064064216a8433360745f69edddce19a606659163The Android Open Source Project
13164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* store handles */
13264064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->hReport = hReport;
13364064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->hHalCtrl = hHALCtrl;
13464064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->hPowerSaveSRV = hPowerSaveSRV;
13564064216a8433360745f69edddce19a606659163The Android Open Source Project
13664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Initialize the state machine */
13764064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRVSM_init( hMeasurementSRV );
13864064216a8433360745f69edddce19a606659163The Android Open Source Project
13964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* mark that all timers are not running */
14064064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->bStartStopTimerRunning = FALSE;
14164064216a8433360745f69edddce19a606659163The Android Open Source Project    for ( i = 0; i < MAX_NUM_OF_MSR_TYPES_IN_PARALLEL; i++ )
14264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
14364064216a8433360745f69edddce19a606659163The Android Open Source Project        pMeasurementSRV->bRequestTimerRunning[ i ] = FALSE;
14464064216a8433360745f69edddce19a606659163The Android Open Source Project    }
14564064216a8433360745f69edddce19a606659163The Android Open Source Project
14664064216a8433360745f69edddce19a606659163The Android Open Source Project    /* register HAL callbacks */
14764064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Register and Enable the Measure Start event in HAL */
14864064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_EventMbox_RegisterForEvent( pMeasurementSRV->hHalCtrl,
14964064216a8433360745f69edddce19a606659163The Android Open Source Project                                         HAL_EVENT_MEASUREMENT_START,
15064064216a8433360745f69edddce19a606659163The Android Open Source Project                                         (void *)MacServices_measurementSRV_measureStartCB,
15164064216a8433360745f69edddce19a606659163The Android Open Source Project                                         hMeasurementSRV );
15264064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_EventMbox_Enable( pMeasurementSRV->hHalCtrl, HAL_EVENT_MEASUREMENT_START );
15364064216a8433360745f69edddce19a606659163The Android Open Source Project
15464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Register and Enable the Measurement Complete event in HAL.
15564064216a8433360745f69edddce19a606659163The Android Open Source Project    This event will be received when the Measurement duration expired,
15664064216a8433360745f69edddce19a606659163The Android Open Source Project    or after Stop Measure command. */
15764064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_EventMbox_RegisterForEvent( pMeasurementSRV->hHalCtrl,
15864064216a8433360745f69edddce19a606659163The Android Open Source Project                                         HAL_EVENT_MEASUREMENT_COMPLETE,
15964064216a8433360745f69edddce19a606659163The Android Open Source Project                                         (void *)MacServices_measurementSRV_measureCompleteCB,
16064064216a8433360745f69edddce19a606659163The Android Open Source Project                                         hMeasurementSRV );
16164064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_EventMbox_Enable( pMeasurementSRV->hHalCtrl, HAL_EVENT_MEASUREMENT_COMPLETE );
16264064216a8433360745f69edddce19a606659163The Android Open Source Project
16364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Register and Enable the AP Discovery Complete event in HAL */
16464064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_EventMbox_RegisterForEvent( pMeasurementSRV->hHalCtrl,
16564064216a8433360745f69edddce19a606659163The Android Open Source Project                                         HAL_EVENT_AP_DISCOVERY_COMPLETE,
16664064216a8433360745f69edddce19a606659163The Android Open Source Project                                         (void *)MacServices_measurementSRV_apDiscoveryCompleteCB,
16764064216a8433360745f69edddce19a606659163The Android Open Source Project                                         hMeasurementSRV );
16864064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_EventMbox_Enable( pMeasurementSRV->hHalCtrl, HAL_EVENT_AP_DISCOVERY_COMPLETE);
16964064216a8433360745f69edddce19a606659163The Android Open Source Project
17064064216a8433360745f69edddce19a606659163The Android Open Source Project
17164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INIT( hReport, MEASUREMENT_SRV_MODULE_LOG,  (".....Measurement SRV configured successfully.\n") );
17264064216a8433360745f69edddce19a606659163The Android Open Source Project}
17364064216a8433360745f69edddce19a606659163The Android Open Source Project
17464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
17564064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Restart the measurement SRV object upon recovery.
17664064216a8433360745f69edddce19a606659163The Android Open Source Project *
17764064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
17864064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
17964064216a8433360745f69edddce19a606659163The Android Open Source Project */
18064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid measurementSRV_restart( TI_HANDLE hMeasurementSRV)
18164064216a8433360745f69edddce19a606659163The Android Open Source Project{
18264064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
18364064216a8433360745f69edddce19a606659163The Android Open Source Project	int i;
18464064216a8433360745f69edddce19a606659163The Android Open Source Project
18564064216a8433360745f69edddce19a606659163The Android Open Source Project	/* if a timer is running, stop it */
18664064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( TRUE == pMeasurementSRV->bStartStopTimerRunning )
18764064216a8433360745f69edddce19a606659163The Android Open Source Project	{
18864064216a8433360745f69edddce19a606659163The Android Open Source Project		os_timerStop( pMeasurementSRV->hOS, pMeasurementSRV->hStartStopTimer );
18964064216a8433360745f69edddce19a606659163The Android Open Source Project		pMeasurementSRV->bStartStopTimerRunning = FALSE;
19064064216a8433360745f69edddce19a606659163The Android Open Source Project	}
19164064216a8433360745f69edddce19a606659163The Android Open Source Project	for ( i = 0; i < MAX_NUM_OF_MSR_TYPES_IN_PARALLEL; i++ )
19264064216a8433360745f69edddce19a606659163The Android Open Source Project	{
19364064216a8433360745f69edddce19a606659163The Android Open Source Project		if ( TRUE == pMeasurementSRV->bRequestTimerRunning[ i ] )
19464064216a8433360745f69edddce19a606659163The Android Open Source Project		{
19564064216a8433360745f69edddce19a606659163The Android Open Source Project			os_timerStop( pMeasurementSRV->hOS, pMeasurementSRV->hRequestTimer[ i ] );
19664064216a8433360745f69edddce19a606659163The Android Open Source Project			pMeasurementSRV->bRequestTimerRunning[ i ] = FALSE;
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    /* Initialize the state machine */
20264064216a8433360745f69edddce19a606659163The Android Open Source Project	/* initialize current state */
20364064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->SMState = MSR_SRV_STATE_IDLE;
20464064216a8433360745f69edddce19a606659163The Android Open Source Project
20564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* mark that all timers are not running */
20664064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->bStartStopTimerRunning = FALSE;
20764064216a8433360745f69edddce19a606659163The Android Open Source Project    for ( i = 0; i < MAX_NUM_OF_MSR_TYPES_IN_PARALLEL; i++ )
20864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
20964064216a8433360745f69edddce19a606659163The Android Open Source Project        pMeasurementSRV->bRequestTimerRunning[ i ] = FALSE;
21064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
21164064216a8433360745f69edddce19a606659163The Android Open Source Project
21264064216a8433360745f69edddce19a606659163The Android Open Source Project}
21364064216a8433360745f69edddce19a606659163The Android Open Source Project
21464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
21564064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
21664064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 08-November-2005\n
21764064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Destroys the measurement SRV object
21864064216a8433360745f69edddce19a606659163The Android Open Source Project *
21964064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
22064064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
22164064216a8433360745f69edddce19a606659163The Android Open Source Project */
22264064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid MacServices_measurementSRV_destroy( TI_HANDLE hMeasurementSRV )
22364064216a8433360745f69edddce19a606659163The Android Open Source Project{
22464064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
22564064216a8433360745f69edddce19a606659163The Android Open Source Project    int i;
22664064216a8433360745f69edddce19a606659163The Android Open Source Project
22764064216a8433360745f69edddce19a606659163The Android Open Source Project    /* sanity cehcking */
22864064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( NULL == hMeasurementSRV )
22964064216a8433360745f69edddce19a606659163The Android Open Source Project    {
23064064216a8433360745f69edddce19a606659163The Android Open Source Project        return;
23164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
23264064216a8433360745f69edddce19a606659163The Android Open Source Project
23364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* release state machine */
23464064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( NULL != pMeasurementSRV->SM )
23564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
23664064216a8433360745f69edddce19a606659163The Android Open Source Project        fsm_Unload( pMeasurementSRV->hOS, pMeasurementSRV->SM );
23764064216a8433360745f69edddce19a606659163The Android Open Source Project    }
23864064216a8433360745f69edddce19a606659163The Android Open Source Project
23964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* release timers */
24064064216a8433360745f69edddce19a606659163The Android Open Source Project    for ( i = 0; i < MAX_NUM_OF_MSR_TYPES_IN_PARALLEL; i++ )
24164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
24264064216a8433360745f69edddce19a606659163The Android Open Source Project        if ( NULL != pMeasurementSRV->hRequestTimer[ i ] )
24364064216a8433360745f69edddce19a606659163The Android Open Source Project        {
24464064216a8433360745f69edddce19a606659163The Android Open Source Project            if ( TRUE == pMeasurementSRV->bRequestTimerRunning[ i ] )
24564064216a8433360745f69edddce19a606659163The Android Open Source Project            {
24664064216a8433360745f69edddce19a606659163The Android Open Source Project                os_timerStop( pMeasurementSRV->hOS, pMeasurementSRV->hRequestTimer[ i ] );
24764064216a8433360745f69edddce19a606659163The Android Open Source Project            }
24864064216a8433360745f69edddce19a606659163The Android Open Source Project            os_timerDestroy( pMeasurementSRV->hOS, pMeasurementSRV->hRequestTimer[ i ] );
24964064216a8433360745f69edddce19a606659163The Android Open Source Project        }
25064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
25164064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( NULL != pMeasurementSRV->hStartStopTimer )
25264064216a8433360745f69edddce19a606659163The Android Open Source Project    {
25364064216a8433360745f69edddce19a606659163The Android Open Source Project        if ( TRUE == pMeasurementSRV->bStartStopTimerRunning )
25464064216a8433360745f69edddce19a606659163The Android Open Source Project        {
25564064216a8433360745f69edddce19a606659163The Android Open Source Project            os_timerStop( pMeasurementSRV->hOS, pMeasurementSRV->hStartStopTimer );
25664064216a8433360745f69edddce19a606659163The Android Open Source Project        }
25764064216a8433360745f69edddce19a606659163The Android Open Source Project        os_timerDestroy( pMeasurementSRV->hOS, pMeasurementSRV->hStartStopTimer );
25864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
25964064216a8433360745f69edddce19a606659163The Android Open Source Project
26064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* release object space */
26164064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryFree( pMeasurementSRV->hOS, (TI_HANDLE)pMeasurementSRV, sizeof(measurementSRV_t) );
26264064216a8433360745f69edddce19a606659163The Android Open Source Project}
26364064216a8433360745f69edddce19a606659163The Android Open Source Project
26464064216a8433360745f69edddce19a606659163The Android Open Source Project/**
26564064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
26664064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 09-November-2005\n
26764064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Starts a measurement operation.\n
26864064216a8433360745f69edddce19a606659163The Android Open Source Project *
26964064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
27064064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMacServices - handle to the MacServices object.\n
27164064216a8433360745f69edddce19a606659163The Android Open Source Project * \param pMsrRequest - a structure containing measurement parameters.\n
27264064216a8433360745f69edddce19a606659163The Android Open Source Project * \param timeToRequestexpiryMs - the time (in milliseconds) the measurement SRV has to start the request.\n
27364064216a8433360745f69edddce19a606659163The Android Open Source Project * \param cmdResponseCBFunc - callback function to used for command response.\n
27464064216a8433360745f69edddce19a606659163The Android Open Source Project * \param cmdResponseCBObj - handle to pass to command response CB.\n
27564064216a8433360745f69edddce19a606659163The Android Open Source Project * \param cmdCompleteCBFunc - callback function to be used for command complete.\n
27664064216a8433360745f69edddce19a606659163The Android Open Source Project * \param cmdCompleteCBObj - handle to pass to command complete CB.\n
27764064216a8433360745f69edddce19a606659163The Android Open Source Project * \return OK if successful (various, TBD codes if not).\n
27864064216a8433360745f69edddce19a606659163The Android Open Source Project */
27964064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS MacServices_measurementSRV_startMeasurement( TI_HANDLE hMacServices,
28064064216a8433360745f69edddce19a606659163The Android Open Source Project                                                       measurement_request_t* pMsrRequest,
28164064216a8433360745f69edddce19a606659163The Android Open Source Project													   UINT32 timeToRequestExpiryMs,
28264064216a8433360745f69edddce19a606659163The Android Open Source Project                                                       CmdResponseCB_t cmdResponseCBFunc,
28364064216a8433360745f69edddce19a606659163The Android Open Source Project                                                       TI_HANDLE cmdResponseCBObj,
28464064216a8433360745f69edddce19a606659163The Android Open Source Project                                                       measurement_srvCompleteCB_t cmdCompleteCBFunc,
28564064216a8433360745f69edddce19a606659163The Android Open Source Project                                                       TI_HANDLE cmdCompleteCBObj )
28664064216a8433360745f69edddce19a606659163The Android Open Source Project{
28764064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)((MacServices_t*)hMacServices)->hMeasurementSRV;
28864064216a8433360745f69edddce19a606659163The Android Open Source Project	int i;
28964064216a8433360745f69edddce19a606659163The Android Open Source Project
29064064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
29164064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
29264064216a8433360745f69edddce19a606659163The Android Open Source Project							 ("%s: Received measurement request.\n", __FUNCTION__) );
29364064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementSRVPrintRequest( (TI_HANDLE)pMeasurementSRV, pMsrRequest );
29464064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
29564064216a8433360745f69edddce19a606659163The Android Open Source Project							 ("time to expiry: %d ms, cmd response CB: 0x%x, cmd response handle: 0x%x\n",
29664064216a8433360745f69edddce19a606659163The Android Open Source Project							  timeToRequestExpiryMs,
29764064216a8433360745f69edddce19a606659163The Android Open Source Project							  cmdResponseCBFunc,
29864064216a8433360745f69edddce19a606659163The Android Open Source Project							  cmdResponseCBObj) );
29964064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
30064064216a8433360745f69edddce19a606659163The Android Open Source Project							 ("cmd complete CB: 0x%x, cmd complete handle: 0x%x\n",
30164064216a8433360745f69edddce19a606659163The Android Open Source Project							  cmdCompleteCBFunc,
30264064216a8433360745f69edddce19a606659163The Android Open Source Project							  cmdCompleteCBObj) );
30364064216a8433360745f69edddce19a606659163The Android Open Source Project#endif
30464064216a8433360745f69edddce19a606659163The Android Open Source Project
30564064216a8433360745f69edddce19a606659163The Android Open Source Project	/* mark that request is in progress */
30664064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->bInRequest = TRUE;
30764064216a8433360745f69edddce19a606659163The Android Open Source Project
30864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* mark to send NULL data when exiting driver mode (can be changed to FALSE
30964064216a8433360745f69edddce19a606659163The Android Open Source Project	   only when explictly stopping the measurement */
31064064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->bSendNullDataWhenExitPs = TRUE;
31164064216a8433360745f69edddce19a606659163The Android Open Source Project
31264064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Nullify return status */
31364064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->returnStatus = OK;
31464064216a8433360745f69edddce19a606659163The Android Open Source Project
31564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* copy request parameters */
31664064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryCopy( pMeasurementSRV->hOS, (void *)&(pMeasurementSRV->msrRequest), (void *)pMsrRequest,
31764064216a8433360745f69edddce19a606659163The Android Open Source Project                   sizeof(measurement_request_t) );
31864064216a8433360745f69edddce19a606659163The Android Open Source Project
31964064216a8433360745f69edddce19a606659163The Android Open Source Project	/* Mark the current time stamp and the duration to start to cehck expiry later */
32064064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->requestRecptionTimeStampMs = os_timeStampMs( pMeasurementSRV->hOS );
32164064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->timeToRequestExpiryMs = timeToRequestExpiryMs;
32264064216a8433360745f69edddce19a606659163The Android Open Source Project
32364064216a8433360745f69edddce19a606659163The Android Open Source Project	/* copy callbacks */
32464064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->commandResponseCBFunc = cmdResponseCBFunc;
32564064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->commandResponseCBObj = cmdResponseCBObj;
32664064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->measurmentCompleteCBFunc = cmdCompleteCBFunc;
32764064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->measurementCompleteCBObj = cmdCompleteCBObj;
32864064216a8433360745f69edddce19a606659163The Android Open Source Project
32964064216a8433360745f69edddce19a606659163The Android Open Source Project	/* initialize reply */
33064064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->msrReply.numberOfTypes = pMsrRequest->numberOfTypes;
33164064216a8433360745f69edddce19a606659163The Android Open Source Project	for ( i = 0; i < pMsrRequest->numberOfTypes; i++ )
33264064216a8433360745f69edddce19a606659163The Android Open Source Project	{
33364064216a8433360745f69edddce19a606659163The Android Open Source Project		pMeasurementSRV->msrReply.msrTypes[ i ].msrType = pMeasurementSRV->msrRequest.msrTypes[ i ].msrType;
33464064216a8433360745f69edddce19a606659163The Android Open Source Project		pMeasurementSRV->msrReply.msrTypes[ i ].status = OK;
33564064216a8433360745f69edddce19a606659163The Android Open Source Project	}
33664064216a8433360745f69edddce19a606659163The Android Open Source Project
33764064216a8433360745f69edddce19a606659163The Android Open Source Project	/* nullify the pending CBs bitmap */
33864064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->pendingParamCBs = 0;
33964064216a8433360745f69edddce19a606659163The Android Open Source Project
34064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* send a start measurement event to the SM */
34164064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRVSM_SMEvent( (TI_HANDLE)pMeasurementSRV, &(pMeasurementSRV->SMState),
34264064216a8433360745f69edddce19a606659163The Android Open Source Project                              MSR_SRV_EVENT_MEASURE_START_REQUEST );
34364064216a8433360745f69edddce19a606659163The Android Open Source Project
34464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* mark that request has been sent */
34564064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->bInRequest = FALSE;
34664064216a8433360745f69edddce19a606659163The Android Open Source Project
34764064216a8433360745f69edddce19a606659163The Android Open Source Project    return pMeasurementSRV->returnStatus;
34864064216a8433360745f69edddce19a606659163The Android Open Source Project}
34964064216a8433360745f69edddce19a606659163The Android Open Source Project
35064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
35164064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
35264064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 09-November-2005\n
35364064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Stops a measurement operation in progress.\n
35464064216a8433360745f69edddce19a606659163The Android Open Source Project *
35564064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
35664064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMacServices - handle to the MacServices object.\n
35764064216a8433360745f69edddce19a606659163The Android Open Source Project * \param bSendNullData - whether to send NULL data when exiting driver mode.\n
35864064216a8433360745f69edddce19a606659163The Android Open Source Project * \param cmdResponseCBFunc - callback function to used for command response.\n
35964064216a8433360745f69edddce19a606659163The Android Open Source Project * \param cmdResponseCBObj - handle to pass to command response CB.\n
36064064216a8433360745f69edddce19a606659163The Android Open Source Project * \return OK if successful (various, TBD codes if not).\n
36164064216a8433360745f69edddce19a606659163The Android Open Source Project */
36264064216a8433360745f69edddce19a606659163The Android Open Source ProjectTI_STATUS MacServices_measurementSRV_stopMeasurement( TI_HANDLE hMacServices,
36364064216a8433360745f69edddce19a606659163The Android Open Source Project													  BOOLEAN bSendNullData,
36464064216a8433360745f69edddce19a606659163The Android Open Source Project                                                      CmdResponseCB_t cmdResponseCBFunc,
36564064216a8433360745f69edddce19a606659163The Android Open Source Project                                                      TI_HANDLE cmdResponseCBObj )
36664064216a8433360745f69edddce19a606659163The Android Open Source Project{
36764064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)((MacServices_t*)hMacServices)->hMeasurementSRV;
36864064216a8433360745f69edddce19a606659163The Android Open Source Project
36964064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
37064064216a8433360745f69edddce19a606659163The Android Open Source Project							 ("%s: Received measurement stop request.\n", __FUNCTION__) );
37164064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
37264064216a8433360745f69edddce19a606659163The Android Open Source Project							 ("Send null data:%s, cmd response CB: 0x%x, cmd response handle: 0x%x\n",
37364064216a8433360745f69edddce19a606659163The Android Open Source Project							  (TRUE == bSendNullData ? "Yes" : "No"),
37464064216a8433360745f69edddce19a606659163The Android Open Source Project							  cmdResponseCBFunc,
37564064216a8433360745f69edddce19a606659163The Android Open Source Project							  cmdResponseCBObj) );
37664064216a8433360745f69edddce19a606659163The Android Open Source Project
37764064216a8433360745f69edddce19a606659163The Android Open Source Project	/* store callbacks */
37864064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->commandResponseCBFunc = cmdResponseCBFunc;
37964064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->commandResponseCBObj = cmdResponseCBObj;
38064064216a8433360745f69edddce19a606659163The Android Open Source Project
38164064216a8433360745f69edddce19a606659163The Android Open Source Project	/* store NULL data indication */
38264064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->bSendNullDataWhenExitPs = bSendNullData;
38364064216a8433360745f69edddce19a606659163The Android Open Source Project
38464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* mark that current return status is OK */
38564064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->returnStatus = OK;
38664064216a8433360745f69edddce19a606659163The Android Open Source Project
38764064216a8433360745f69edddce19a606659163The Android Open Source Project	/* mark that a stop request is in progress */
38864064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->bInRequest = TRUE;
38964064216a8433360745f69edddce19a606659163The Android Open Source Project
39064064216a8433360745f69edddce19a606659163The Android Open Source Project    /* send a stop event to the SM */
39164064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRVSM_SMEvent( (TI_HANDLE)pMeasurementSRV, &(pMeasurementSRV->SMState),
39264064216a8433360745f69edddce19a606659163The Android Open Source Project                              MSR_SRV_EVENT_MEASURE_STOP_REQUEST );
39364064216a8433360745f69edddce19a606659163The Android Open Source Project
39464064216a8433360745f69edddce19a606659163The Android Open Source Project	/*mark that stop request has completed */
39564064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->bInRequest = FALSE;
39664064216a8433360745f69edddce19a606659163The Android Open Source Project
39764064216a8433360745f69edddce19a606659163The Android Open Source Project    return pMeasurementSRV->returnStatus;
39864064216a8433360745f69edddce19a606659163The Android Open Source Project}
39964064216a8433360745f69edddce19a606659163The Android Open Source Project
40064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
40164064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
40264064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 09-November-2005\n
40364064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Notifies the measurement SRV of a FW reset (recovery).\n
40464064216a8433360745f69edddce19a606659163The Android Open Source Project *
40564064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
40664064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMacServices - handle to the MacServices object.\n
40764064216a8433360745f69edddce19a606659163The Android Open Source Project */
40864064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid MacServices_measurementSRV_FWReset( TI_HANDLE hMacServices )
40964064216a8433360745f69edddce19a606659163The Android Open Source Project{
41064064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)((MacServices_t*)hMacServices)->hMeasurementSRV;
41164064216a8433360745f69edddce19a606659163The Android Open Source Project    int i;
41264064216a8433360745f69edddce19a606659163The Android Open Source Project
41364064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
41464064216a8433360745f69edddce19a606659163The Android Open Source Project							 ("%s: Received FW reset indication.\n", __FUNCTION__) );
41564064216a8433360745f69edddce19a606659163The Android Open Source Project
41664064216a8433360745f69edddce19a606659163The Android Open Source Project	/* if a timer is running, stop it */
41764064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( TRUE == pMeasurementSRV->bStartStopTimerRunning )
41864064216a8433360745f69edddce19a606659163The Android Open Source Project    {
41964064216a8433360745f69edddce19a606659163The Android Open Source Project        os_timerStop( pMeasurementSRV->hOS, pMeasurementSRV->hStartStopTimer );
42064064216a8433360745f69edddce19a606659163The Android Open Source Project        pMeasurementSRV->bStartStopTimerRunning = FALSE;
42164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
42264064216a8433360745f69edddce19a606659163The Android Open Source Project    for ( i = 0; i < MAX_NUM_OF_MSR_TYPES_IN_PARALLEL; i++ )
42364064216a8433360745f69edddce19a606659163The Android Open Source Project    {
42464064216a8433360745f69edddce19a606659163The Android Open Source Project        if ( TRUE == pMeasurementSRV->bRequestTimerRunning[ i ] )
42564064216a8433360745f69edddce19a606659163The Android Open Source Project        {
42664064216a8433360745f69edddce19a606659163The Android Open Source Project            os_timerStop( pMeasurementSRV->hOS, pMeasurementSRV->hRequestTimer[ i ] );
42764064216a8433360745f69edddce19a606659163The Android Open Source Project            pMeasurementSRV->bRequestTimerRunning[ i ] = FALSE;
42864064216a8433360745f69edddce19a606659163The Android Open Source Project        }
42964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
43064064216a8433360745f69edddce19a606659163The Android Open Source Project
43164064216a8433360745f69edddce19a606659163The Android Open Source Project    /* change SM state to idle */
43264064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->SMState = MSR_SRV_STATE_IDLE;
43364064216a8433360745f69edddce19a606659163The Android Open Source Project}
43464064216a8433360745f69edddce19a606659163The Android Open Source Project
43564064216a8433360745f69edddce19a606659163The Android Open Source Project/**
43664064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
43764064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 09-November-2005\n
43864064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief callback function used by the power manager to notify driver mode result
43964064216a8433360745f69edddce19a606659163The Android Open Source Project *
44064064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
44164064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
44264064216a8433360745f69edddce19a606659163The Android Open Source Project * \param PSMode - the power save mode the STA is currently in.\n
44364064216a8433360745f69edddce19a606659163The Android Open Source Project * \param psStatus - the power save request status.\n
44464064216a8433360745f69edddce19a606659163The Android Open Source Project */
44564064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid MacServices_measurementSRV_powerSaveCB( TI_HANDLE hMeasurementSRV, UINT8 PSMode, UINT8 psStatus )
44664064216a8433360745f69edddce19a606659163The Android Open Source Project{
44764064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
44864064216a8433360745f69edddce19a606659163The Android Open Source Project
44964064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
45064064216a8433360745f69edddce19a606659163The Android Open Source Project							 ("%s: Power save SRV CB called. PS mode:%d status: %d\n",
45164064216a8433360745f69edddce19a606659163The Android Open Source Project							  __FUNCTION__, PSMode, psStatus) );
45264064216a8433360745f69edddce19a606659163The Android Open Source Project
45364064216a8433360745f69edddce19a606659163The Android Open Source Project	/* if driver mode entry succeedded */
45464064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( ENTER_POWER_SAVE_SUCCESS == psStatus )
45564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
45664064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
45764064216a8433360745f69edddce19a606659163The Android Open Source Project								 ("%s: PS successful.\n", __FUNCTION__) );
45864064216a8433360745f69edddce19a606659163The Android Open Source Project
45964064216a8433360745f69edddce19a606659163The Android Open Source Project        /* send a RIVER_MODE_SUCCESS event */
46064064216a8433360745f69edddce19a606659163The Android Open Source Project        measurementSRVSM_SMEvent( (TI_HANDLE)pMeasurementSRV, &(pMeasurementSRV->SMState),
46164064216a8433360745f69edddce19a606659163The Android Open Source Project                                  MSR_SRV_EVENT_DRIVER_MODE_SUCCESS );
46264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
46364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* driver mode entry failed */
46464064216a8433360745f69edddce19a606659163The Android Open Source Project    else
46564064216a8433360745f69edddce19a606659163The Android Open Source Project    {
46664064216a8433360745f69edddce19a606659163The Android Open Source Project        WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
46764064216a8433360745f69edddce19a606659163The Android Open Source Project								 ("%s: PS failed, status %d.\n", __FUNCTION__, psStatus) );
46864064216a8433360745f69edddce19a606659163The Android Open Source Project
46964064216a8433360745f69edddce19a606659163The Android Open Source Project        /* Set the return status to NOK */
47064064216a8433360745f69edddce19a606659163The Android Open Source Project        pMeasurementSRV->returnStatus = (TI_STATUS)psStatus;
47164064216a8433360745f69edddce19a606659163The Android Open Source Project
47264064216a8433360745f69edddce19a606659163The Android Open Source Project        /* send a DRIVER_MODE_FAILURE event */
47364064216a8433360745f69edddce19a606659163The Android Open Source Project        measurementSRVSM_SMEvent( (TI_HANDLE)pMeasurementSRV, &(pMeasurementSRV->SMState),
47464064216a8433360745f69edddce19a606659163The Android Open Source Project								  MSR_SRV_EVENT_DRIVER_MODE_FAILURE );
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 * \author Ronen Kalish\n
48064064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 14-November-2005\n
48164064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief callback function used by the HAL for measure start event (sent when the FW
48264064216a8433360745f69edddce19a606659163The Android Open Source Project * has started measurement operation, i.e. switched channel and changed RX filters).\n
48364064216a8433360745f69edddce19a606659163The Android Open Source Project *
48464064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
48564064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
48664064216a8433360745f69edddce19a606659163The Android Open Source Project */
48764064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid MacServices_measurementSRV_measureStartCB( TI_HANDLE hMeasurementSRV )
48864064216a8433360745f69edddce19a606659163The Android Open Source Project{
48964064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t *pMeasurementSRV  = (measurementSRV_t*)hMeasurementSRV;
49064064216a8433360745f69edddce19a606659163The Android Open Source Project
49164064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
49264064216a8433360745f69edddce19a606659163The Android Open Source Project        ("%s: measure start CB called.\n", __FUNCTION__) );
49364064216a8433360745f69edddce19a606659163The Android Open Source Project
49464064216a8433360745f69edddce19a606659163The Android Open Source Project	/* stop the FW guard timer */
49564064216a8433360745f69edddce19a606659163The Android Open Source Project	os_timerStop( pMeasurementSRV->hOS, pMeasurementSRV->hStartStopTimer );
49664064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->bStartStopTimerRunning = FALSE;
49764064216a8433360745f69edddce19a606659163The Android Open Source Project
49864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* clear the CB function, so that it won't be called on stop as well! */
49964064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->commandResponseCBFunc = NULL;
50064064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->commandResponseCBObj = NULL;
50164064216a8433360745f69edddce19a606659163The Android Open Source Project
50264064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRVSM_SMEvent( hMeasurementSRV, &(pMeasurementSRV->SMState),
50364064216a8433360745f69edddce19a606659163The Android Open Source Project							  MSR_SRV_EVENT_START_SUCCESS );
50464064216a8433360745f69edddce19a606659163The Android Open Source Project}
50564064216a8433360745f69edddce19a606659163The Android Open Source Project
50664064216a8433360745f69edddce19a606659163The Android Open Source Project/**
50764064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
50864064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 14-November-2005\n
50964064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief callback function used by the HAL for measure stop event (sent when the FW
51064064216a8433360745f69edddce19a606659163The Android Open Source Project * has finished measurement operation, i.e. switched channel to serving channel and changed back RX filters).\n
51164064216a8433360745f69edddce19a606659163The Android Open Source Project *
51264064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
51364064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
51464064216a8433360745f69edddce19a606659163The Android Open Source Project */
51564064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid MacServices_measurementSRV_measureCompleteCB( TI_HANDLE hMeasurementSRV )
51664064216a8433360745f69edddce19a606659163The Android Open Source Project{
51764064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t *pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
51864064216a8433360745f69edddce19a606659163The Android Open Source Project
51964064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
52064064216a8433360745f69edddce19a606659163The Android Open Source Project                             ("%s: measure complete CB called.\n", __FUNCTION__));
52164064216a8433360745f69edddce19a606659163The Android Open Source Project
52264064216a8433360745f69edddce19a606659163The Android Open Source Project	/* stop the FW guard timer */
52364064216a8433360745f69edddce19a606659163The Android Open Source Project	os_timerStop( pMeasurementSRV->hOS, pMeasurementSRV->hStartStopTimer );
52464064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->bStartStopTimerRunning = FALSE;
52564064216a8433360745f69edddce19a606659163The Android Open Source Project
52664064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRVSM_SMEvent( hMeasurementSRV, &(pMeasurementSRV->SMState),
52764064216a8433360745f69edddce19a606659163The Android Open Source Project							  MSR_SRV_EVENT_STOP_COMPLETE );
52864064216a8433360745f69edddce19a606659163The Android Open Source Project}
52964064216a8433360745f69edddce19a606659163The Android Open Source Project
53064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
53164064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
53264064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 14-November-2005\n
53364064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief callback function used by the HAL for AP discovery stop event (sent when the FW
53464064216a8433360745f69edddce19a606659163The Android Open Source Project * has finished AP discovery operation).\n
53564064216a8433360745f69edddce19a606659163The Android Open Source Project *
53664064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
53764064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
53864064216a8433360745f69edddce19a606659163The Android Open Source Project */
53964064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid MacServices_measurementSRV_apDiscoveryCompleteCB( TI_HANDLE hMeasurementSRV )
54064064216a8433360745f69edddce19a606659163The Android Open Source Project{
54164064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
54264064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t *pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
54364064216a8433360745f69edddce19a606659163The Android Open Source Project
54464064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
54564064216a8433360745f69edddce19a606659163The Android Open Source Project                             ("%s: AP Discovery complete CB called.\n", __FUNCTION__) );
54664064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* TI_DBG */
54764064216a8433360745f69edddce19a606659163The Android Open Source Project}
54864064216a8433360745f69edddce19a606659163The Android Open Source Project
54964064216a8433360745f69edddce19a606659163The Android Open Source Project/**
55064064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
55164064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 14-November-2005\n
55264064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief called when a measurement FW guard timer expires.
55364064216a8433360745f69edddce19a606659163The Android Open Source Project *
55464064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
55564064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasuremntSRV - handle to the measurement SRV object.\n
55664064216a8433360745f69edddce19a606659163The Android Open Source Project */
55764064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid MacServices_measurementSRV_startStopTimerExpired( TI_HANDLE hMeasurementSRV )
55864064216a8433360745f69edddce19a606659163The Android Open Source Project{
55964064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
56064064216a8433360745f69edddce19a606659163The Android Open Source Project    int i;
56164064216a8433360745f69edddce19a606659163The Android Open Source Project
56264064216a8433360745f69edddce19a606659163The Android Open Source Project    WLAN_REPORT_ERROR( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
56364064216a8433360745f69edddce19a606659163The Android Open Source Project                       ("%s: FW guard timer expired.\n", __FUNCTION__) );
56464064216a8433360745f69edddce19a606659163The Android Open Source Project
56564064216a8433360745f69edddce19a606659163The Android Open Source Project    /* mark that the FW guard timer is not running */
56664064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->bStartStopTimerRunning = FALSE;
56764064216a8433360745f69edddce19a606659163The Android Open Source Project
56864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* if any other timer is running - stop it */
56964064216a8433360745f69edddce19a606659163The Android Open Source Project    for ( i = 0; i < MAX_NUM_OF_MSR_TYPES_IN_PARALLEL; i++ )
57064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
57164064216a8433360745f69edddce19a606659163The Android Open Source Project        if ( TRUE == pMeasurementSRV->bRequestTimerRunning[ i ] )
57264064216a8433360745f69edddce19a606659163The Android Open Source Project        {
57364064216a8433360745f69edddce19a606659163The Android Open Source Project            os_timerStop( pMeasurementSRV->hOS, pMeasurementSRV->hRequestTimer[ i ] );
57464064216a8433360745f69edddce19a606659163The Android Open Source Project            pMeasurementSRV->bRequestTimerRunning[ i ] = FALSE;
57564064216a8433360745f69edddce19a606659163The Android Open Source Project        }
57664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
57764064216a8433360745f69edddce19a606659163The Android Open Source Project
57864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* change SM state to idle */
57964064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->SMState = MSR_SRV_STATE_IDLE;
58064064216a8433360745f69edddce19a606659163The Android Open Source Project
58164064216a8433360745f69edddce19a606659163The Android Open Source Project	/*Error Reporting - call the centeral error function in the health monitor if a request for measurement was faield*/
58264064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->failureEventFunc(pMeasurementSRV->failureEventObj ,MEASUREMENT_FAILURE);
58364064216a8433360745f69edddce19a606659163The Android Open Source Project}
58464064216a8433360745f69edddce19a606659163The Android Open Source Project
58564064216a8433360745f69edddce19a606659163The Android Open Source Project/**
58664064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
58764064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 15-November-2005\n
58864064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief called when a measurement type timer expires.\n
58964064216a8433360745f69edddce19a606659163The Android Open Source Project *
59064064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
59164064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasuremntSRV - handle to the measurement SRV object.\n
59264064216a8433360745f69edddce19a606659163The Android Open Source Project */
59364064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid MacServices_measurementSRV_requestTimerExpired( TI_HANDLE hMeasurementSRV )
59464064216a8433360745f69edddce19a606659163The Android Open Source Project{
59564064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
59664064216a8433360745f69edddce19a606659163The Android Open Source Project    int requestIndex;
59764064216a8433360745f69edddce19a606659163The Android Open Source Project
59864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* find the expired measurement type */
59964064216a8433360745f69edddce19a606659163The Android Open Source Project    requestIndex = measurementSRVFindMinDuration( hMeasurementSRV );
60064064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( -1 == requestIndex )
60164064216a8433360745f69edddce19a606659163The Android Open Source Project	{
60264064216a8433360745f69edddce19a606659163The Android Open Source Project		/* indicates we can't find the request in the requets array. Shouldn't happen, but nothing to do */
60364064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
60464064216a8433360745f69edddce19a606659163The Android Open Source Project						   ("%s: Request timer expired and request index from findMinDuration is -1?!?", __FUNCTION__) );
60564064216a8433360745f69edddce19a606659163The Android Open Source Project		return;
60664064216a8433360745f69edddce19a606659163The Android Open Source Project	}
60764064216a8433360745f69edddce19a606659163The Android Open Source Project
60864064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
60964064216a8433360745f69edddce19a606659163The Android Open Source Project							 ("%s: request timer expired, request index: %d.\n", __FUNCTION__, requestIndex) );
61064064216a8433360745f69edddce19a606659163The Android Open Source Project
61164064216a8433360745f69edddce19a606659163The Android Open Source Project	/* mark that the timer is not running and that this request has completed */
61264064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->bRequestTimerRunning[ requestIndex ] = FALSE;
61364064216a8433360745f69edddce19a606659163The Android Open Source Project
61464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* collect results and send stop command if necessary */
61564064216a8433360745f69edddce19a606659163The Android Open Source Project    switch (pMeasurementSRV->msrRequest.msrTypes[ requestIndex ].msrType)
61664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
61764064216a8433360745f69edddce19a606659163The Android Open Source Project    case MSR_TYPE_BEACON_MEASUREMENT:
61864064216a8433360745f69edddce19a606659163The Android Open Source Project        measurementSRVHandleBeaconMsrComplete( hMeasurementSRV, requestIndex );
61964064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
62064064216a8433360745f69edddce19a606659163The Android Open Source Project
62164064216a8433360745f69edddce19a606659163The Android Open Source Project    case MSR_TYPE_CCA_LOAD_MEASUREMENT:
62264064216a8433360745f69edddce19a606659163The Android Open Source Project        measurementSRVHandleChannelLoadComplete( hMeasurementSRV, requestIndex );
62364064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
62464064216a8433360745f69edddce19a606659163The Android Open Source Project
62564064216a8433360745f69edddce19a606659163The Android Open Source Project    case MSR_TYPE_NOISE_HISTOGRAM_MEASUREMENT:
62664064216a8433360745f69edddce19a606659163The Android Open Source Project        measurementSRVHandleNoiseHistogramComplete( hMeasurementSRV, requestIndex );
62764064216a8433360745f69edddce19a606659163The Android Open Source Project        break;
62864064216a8433360745f69edddce19a606659163The Android Open Source Project
62964064216a8433360745f69edddce19a606659163The Android Open Source Project	/* used here to avoid compilation warning only, does nothing */
63064064216a8433360745f69edddce19a606659163The Android Open Source Project	case MSR_TYPE_BASIC_MEASUREMENT:
63164064216a8433360745f69edddce19a606659163The Android Open Source Project	case MSR_TYPE_FRAME_MEASUREMENT:
63264064216a8433360745f69edddce19a606659163The Android Open Source Project	case MSR_TYPE_MAX_NUM_OF_MEASURE_TYPES:
63364064216a8433360745f69edddce19a606659163The Android Open Source Project	default:
63464064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
63564064216a8433360745f69edddce19a606659163The Android Open Source Project						   ("%s: measure type %d not supported for request %d\n",
63664064216a8433360745f69edddce19a606659163The Android Open Source Project							__FUNCTION__,
63764064216a8433360745f69edddce19a606659163The Android Open Source Project							pMeasurementSRV->msrRequest.msrTypes[ requestIndex ].msrType,
63864064216a8433360745f69edddce19a606659163The Android Open Source Project							requestIndex) );
63964064216a8433360745f69edddce19a606659163The Android Open Source Project		break;
64064064216a8433360745f69edddce19a606659163The Android Open Source Project    }
64164064216a8433360745f69edddce19a606659163The Android Open Source Project
64264064216a8433360745f69edddce19a606659163The Android Open Source Project	/* if no measurement are running and no CBs are pending, send ALL TYPES COMPLETE event */
64364064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( TRUE == measurementSRVIsMeasurementComplete( hMeasurementSRV ) )
64464064216a8433360745f69edddce19a606659163The Android Open Source Project	{
64564064216a8433360745f69edddce19a606659163The Android Open Source Project		/* send the event */
64664064216a8433360745f69edddce19a606659163The Android Open Source Project		measurementSRVSM_SMEvent( hMeasurementSRV, &(pMeasurementSRV->SMState),
64764064216a8433360745f69edddce19a606659163The Android Open Source Project								  MSR_SRV_EVENT_ALL_TYPES_COMPLETE );
64864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
64964064216a8433360745f69edddce19a606659163The Android Open Source Project}
65064064216a8433360745f69edddce19a606659163The Android Open Source Project
65164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
65264064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
65364064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 13-November-2005\n
65464064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Checks whether a beacon measurement is part of current measurement request
65564064216a8433360745f69edddce19a606659163The Android Open Source Project *
65664064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Private.\n
65764064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
65864064216a8433360745f69edddce19a606659163The Android Open Source Project * \return TRUE if a beacon measurement is part of current request, FALSE otherwise.\n
65964064216a8433360745f69edddce19a606659163The Android Open Source Project */
66064064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOLEAN measurementSRVIsBeaconMeasureIncluded( TI_HANDLE hMeasurementSRV )
66164064216a8433360745f69edddce19a606659163The Android Open Source Project{
66264064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
66364064216a8433360745f69edddce19a606659163The Android Open Source Project    int i;
66464064216a8433360745f69edddce19a606659163The Android Open Source Project
66564064216a8433360745f69edddce19a606659163The Android Open Source Project    for ( i = 0; i < MAX_NUM_OF_MSR_TYPES_IN_PARALLEL; i++ )
66664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
66764064216a8433360745f69edddce19a606659163The Android Open Source Project        if ( MSR_TYPE_BEACON_MEASUREMENT == pMeasurementSRV->msrRequest.msrTypes[ i ].msrType )
66864064216a8433360745f69edddce19a606659163The Android Open Source Project        {
66964064216a8433360745f69edddce19a606659163The Android Open Source Project            return TRUE;
67064064216a8433360745f69edddce19a606659163The Android Open Source Project        }
67164064216a8433360745f69edddce19a606659163The Android Open Source Project    }
67264064216a8433360745f69edddce19a606659163The Android Open Source Project    return FALSE;
67364064216a8433360745f69edddce19a606659163The Android Open Source Project}
67464064216a8433360745f69edddce19a606659163The Android Open Source Project
67564064216a8433360745f69edddce19a606659163The Android Open Source Project/**
67664064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
67764064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 15-November-2005\n
67864064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Finds the index for the measurement request with the shortest period
67964064216a8433360745f69edddce19a606659163The Android Open Source Project * (the one that has now completed).\n
68064064216a8433360745f69edddce19a606659163The Android Open Source Project *
68164064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Private.\n
68264064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
68364064216a8433360745f69edddce19a606659163The Android Open Source Project * \return index of the measurement request with the shortest duration.\n
68464064216a8433360745f69edddce19a606659163The Android Open Source Project */
68564064216a8433360745f69edddce19a606659163The Android Open Source Projectint measurementSRVFindMinDuration( TI_HANDLE hMeasurementSRV )
68664064216a8433360745f69edddce19a606659163The Android Open Source Project{
68764064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
68864064216a8433360745f69edddce19a606659163The Android Open Source Project    int i, minIndex;
68964064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT32 minValue;
69064064216a8433360745f69edddce19a606659163The Android Open Source Project
69164064216a8433360745f69edddce19a606659163The Android Open Source Project
69264064216a8433360745f69edddce19a606659163The Android Open Source Project    minIndex = minValue = 0; /* minIndex is initialized only to avoid compilation warning! */
69364064216a8433360745f69edddce19a606659163The Android Open Source Project
69464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* find the index with the minimum duration */
69564064216a8433360745f69edddce19a606659163The Android Open Source Project    for ( i = 0; i < pMeasurementSRV->msrRequest.numberOfTypes; i++ )
69664064216a8433360745f69edddce19a606659163The Android Open Source Project    {
69764064216a8433360745f69edddce19a606659163The Android Open Source Project        if ( TRUE == pMeasurementSRV->bRequestTimerRunning[ i ] )
69864064216a8433360745f69edddce19a606659163The Android Open Source Project        {
69964064216a8433360745f69edddce19a606659163The Android Open Source Project			if ( (0 == minValue) ||
70064064216a8433360745f69edddce19a606659163The Android Open Source Project				 (pMeasurementSRV->msrRequest.msrTypes[ i ].duration < minValue) )
70164064216a8433360745f69edddce19a606659163The Android Open Source Project			{
70264064216a8433360745f69edddce19a606659163The Android Open Source Project				minValue = pMeasurementSRV->msrRequest.msrTypes[ i ].duration;
70364064216a8433360745f69edddce19a606659163The Android Open Source Project				minIndex = i;
70464064216a8433360745f69edddce19a606659163The Android Open Source Project			}
70564064216a8433360745f69edddce19a606659163The Android Open Source Project        }
70664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
70764064216a8433360745f69edddce19a606659163The Android Open Source Project
70864064216a8433360745f69edddce19a606659163The Android Open Source Project    /* if no entry with positive duration exists, return -1 */
70964064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( 0 == minValue )
71064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
71164064216a8433360745f69edddce19a606659163The Android Open Source Project        return -1;
71264064216a8433360745f69edddce19a606659163The Android Open Source Project    }
71364064216a8433360745f69edddce19a606659163The Android Open Source Project    else
71464064216a8433360745f69edddce19a606659163The Android Open Source Project    { /* otherwise, return the index of the type with the shortest duration */
71564064216a8433360745f69edddce19a606659163The Android Open Source Project        return minIndex;
71664064216a8433360745f69edddce19a606659163The Android Open Source Project    }
71764064216a8433360745f69edddce19a606659163The Android Open Source Project}
71864064216a8433360745f69edddce19a606659163The Android Open Source Project
71964064216a8433360745f69edddce19a606659163The Android Open Source Project/**
72064064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
72164064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 15-November-2005\n
72264064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Handles an AP discovery timer expiry, by setting necessary values in the
72364064216a8433360745f69edddce19a606659163The Android Open Source Project * reply struct.\n
72464064216a8433360745f69edddce19a606659163The Android Open Source Project *
72564064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Private.\n
72664064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
72764064216a8433360745f69edddce19a606659163The Android Open Source Project * \param requestIndex - index of the beacon request in the request structure.\n
72864064216a8433360745f69edddce19a606659163The Android Open Source Project */
72964064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid measurementSRVHandleBeaconMsrComplete( TI_HANDLE hMeasurementSRV, int requestIndex )
73064064216a8433360745f69edddce19a606659163The Android Open Source Project{
73164064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
73264064216a8433360745f69edddce19a606659163The Android Open Source Project	int status;
73364064216a8433360745f69edddce19a606659163The Android Open Source Project
73464064216a8433360745f69edddce19a606659163The Android Open Source Project
73564064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION(pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
73664064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: Sending AP Discovery Stop to the HAL...", __FUNCTION__) );
73764064216a8433360745f69edddce19a606659163The Android Open Source Project
73864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* send stop AP discovery command */
73964064216a8433360745f69edddce19a606659163The Android Open Source Project	status = whalCtrl_ApDiscoveryStop( pMeasurementSRV->hHalCtrl );
74064064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( OK != status )
74164064216a8433360745f69edddce19a606659163The Android Open Source Project	{
74264064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
74364064216a8433360745f69edddce19a606659163The Android Open Source Project				("%s: status %d received from whalCtrl_ApDiscoveryStop\n", __FUNCTION__, status) );
74464064216a8433360745f69edddce19a606659163The Android Open Source Project	}
74564064216a8433360745f69edddce19a606659163The Android Open Source Project}
74664064216a8433360745f69edddce19a606659163The Android Open Source Project
74764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
74864064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
74964064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 15-November-2005\n
75064064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Handles a channel load timer expiry, by requesting channel load
75164064216a8433360745f69edddce19a606659163The Android Open Source Project * results from the FW.\n
75264064216a8433360745f69edddce19a606659163The Android Open Source Project *
75364064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Private.\n
75464064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
75564064216a8433360745f69edddce19a606659163The Android Open Source Project * \param requestIndex - index of the channel load request in the request structure.\n
75664064216a8433360745f69edddce19a606659163The Android Open Source Project */
75764064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid measurementSRVHandleChannelLoadComplete( TI_HANDLE hMeasurementSRV, int requestIndex )
75864064216a8433360745f69edddce19a606659163The Android Open Source Project{
75964064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementSRV_t*		pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
76064064216a8433360745f69edddce19a606659163The Android Open Source Project	whalParamInfo_t			whalParam;
76164064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS               status;
76264064216a8433360745f69edddce19a606659163The Android Open Source Project
76364064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Getting the Medium Occupancy Register */
76464064216a8433360745f69edddce19a606659163The Android Open Source Project	whalParam.paramType = HAL_CTRL_MEDIUM_OCCUPANCY_PARAM;
76564064216a8433360745f69edddce19a606659163The Android Open Source Project    whalParam.content.interogateCmdCBParams.CB_Func = (void *)MacServices_measurementSRV_channelLoadParamCB;
76664064216a8433360745f69edddce19a606659163The Android Open Source Project    whalParam.content.interogateCmdCBParams.CB_handle = hMeasurementSRV;
76764064216a8433360745f69edddce19a606659163The Android Open Source Project    whalParam.content.interogateCmdCBParams.CB_buf = (UINT8*)(&(pMeasurementSRV->mediumOccupancyResults));
76864064216a8433360745f69edddce19a606659163The Android Open Source Project	status = whalCtrl_GetParam( pMeasurementSRV->hHalCtrl, &whalParam );
76964064216a8433360745f69edddce19a606659163The Android Open Source Project
77064064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( status != OK )
77164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
77264064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
77364064216a8433360745f69edddce19a606659163The Android Open Source Project						   ("%s: whalCtrl_GetParam returned status %d\n", __FUNCTION__, status) );
77464064216a8433360745f69edddce19a606659163The Android Open Source Project
77564064216a8433360745f69edddce19a606659163The Android Open Source Project		/* mark that the specific measurment type has failed */
77664064216a8433360745f69edddce19a606659163The Android Open Source Project		pMeasurementSRV->msrReply.msrTypes[ requestIndex ].status = NOK;
77764064216a8433360745f69edddce19a606659163The Android Open Source Project
77864064216a8433360745f69edddce19a606659163The Android Open Source Project		/* if all measurement types has finished, an event will be send by request timer expired */
77964064216a8433360745f69edddce19a606659163The Android Open Source Project    }
78064064216a8433360745f69edddce19a606659163The Android Open Source Project    else
78164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
78264064216a8433360745f69edddce19a606659163The Android Open Source Project		/* mark that channel load param CB is pending */
78364064216a8433360745f69edddce19a606659163The Android Open Source Project		pMeasurementSRV->pendingParamCBs |= MSR_SRV_WAITING_CHANNEL_LOAD_RESULTS;
78464064216a8433360745f69edddce19a606659163The Android Open Source Project	}
78564064216a8433360745f69edddce19a606659163The Android Open Source Project}
78664064216a8433360745f69edddce19a606659163The Android Open Source Project
78764064216a8433360745f69edddce19a606659163The Android Open Source Project/**
78864064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
78964064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 15-November-2005\n
79064064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Handles a noise histogram timer expiry, by requesting noise histogram
79164064216a8433360745f69edddce19a606659163The Android Open Source Project * reaults from the FW.\n
79264064216a8433360745f69edddce19a606659163The Android Open Source Project *
79364064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Private.\n
79464064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
79564064216a8433360745f69edddce19a606659163The Android Open Source Project * \param requestIndex - index of the beacon request in the request structure.\n
79664064216a8433360745f69edddce19a606659163The Android Open Source Project */
79764064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid measurementSRVHandleNoiseHistogramComplete( TI_HANDLE hMeasurementSRV, int requestIndex )
79864064216a8433360745f69edddce19a606659163The Android Open Source Project{
79964064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t		    *pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
80064064216a8433360745f69edddce19a606659163The Android Open Source Project	whalParamInfo_t	            whalParam;
80164064216a8433360745f69edddce19a606659163The Android Open Source Project    whalCtrl_noiseHistogram_t   pNoiseHistParams;
80264064216a8433360745f69edddce19a606659163The Android Open Source Project	TI_STATUS	                status;
80364064216a8433360745f69edddce19a606659163The Android Open Source Project
80464064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Set Noise Histogram Cmd Params */
80564064216a8433360745f69edddce19a606659163The Android Open Source Project    pNoiseHistParams.cmd = STOP_NOISE_HIST;
80664064216a8433360745f69edddce19a606659163The Android Open Source Project    pNoiseHistParams.sampleInterval = 0;
80764064216a8433360745f69edddce19a606659163The Android Open Source Project    os_memoryZero( pMeasurementSRV->hOS, &(pNoiseHistParams.ranges[0]), MEASUREMENT_NOISE_HISTOGRAM_NUM_OF_RANGES );
80864064216a8433360745f69edddce19a606659163The Android Open Source Project
80964064216a8433360745f69edddce19a606659163The Android Open Source Project    /* Send a Stop command to the FW */
81064064216a8433360745f69edddce19a606659163The Android Open Source Project    status = (TI_STATUS)whalCtrl_NoiseHistogramCmd( pMeasurementSRV->hHalCtrl, &pNoiseHistParams );
81164064216a8433360745f69edddce19a606659163The Android Open Source Project
81264064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( OK != status )
81364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
81464064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
81564064216a8433360745f69edddce19a606659163The Android Open Source Project						   ("%s: whalCtrl_NoiseHistogramCmd returned status %d\n", __FUNCTION__, status) );
81664064216a8433360745f69edddce19a606659163The Android Open Source Project
81764064216a8433360745f69edddce19a606659163The Android Open Source Project		/* mark that the specific measurment type has failed */
81864064216a8433360745f69edddce19a606659163The Android Open Source Project		pMeasurementSRV->msrReply.msrTypes[ requestIndex ].status = NOK;
81964064216a8433360745f69edddce19a606659163The Android Open Source Project
82064064216a8433360745f69edddce19a606659163The Android Open Source Project		/* if all measurement types has finished, an event will be send by request timer expired */
82164064216a8433360745f69edddce19a606659163The Android Open Source Project	}
82264064216a8433360745f69edddce19a606659163The Android Open Source Project
82364064216a8433360745f69edddce19a606659163The Android Open Source Project   	/* Get measurement results */
82464064216a8433360745f69edddce19a606659163The Android Open Source Project	whalParam.paramType = HAL_CTRL_NOISE_HISTOGRAM_PARAM;
82564064216a8433360745f69edddce19a606659163The Android Open Source Project    whalParam.content.interogateCmdCBParams.CB_Func = (void *)MacServices_measurementSRV_noiseHistCallBack;
82664064216a8433360745f69edddce19a606659163The Android Open Source Project    whalParam.content.interogateCmdCBParams.CB_handle = hMeasurementSRV;
82764064216a8433360745f69edddce19a606659163The Android Open Source Project    whalParam.content.interogateCmdCBParams.CB_buf = (UINT8*)(&(pMeasurementSRV->noiseHistogramResults));
82864064216a8433360745f69edddce19a606659163The Android Open Source Project	status = whalCtrl_GetParam( pMeasurementSRV->hHalCtrl, &whalParam );
82964064216a8433360745f69edddce19a606659163The Android Open Source Project
83064064216a8433360745f69edddce19a606659163The Android Open Source Project    if ( OK == status )
83164064216a8433360745f69edddce19a606659163The Android Open Source Project    {
83264064216a8433360745f69edddce19a606659163The Android Open Source Project		/* setting On the Waitng for Noise Histogram Results Bit */
83364064216a8433360745f69edddce19a606659163The Android Open Source Project		pMeasurementSRV->pendingParamCBs |= MSR_SRV_WAITING_NOISE_HIST_RESULTS;
83464064216a8433360745f69edddce19a606659163The Android Open Source Project
83564064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
83664064216a8433360745f69edddce19a606659163The Android Open Source Project								 ("%s: sent noise histogram stop command.\n",
83764064216a8433360745f69edddce19a606659163The Android Open Source Project								  __FUNCTION__) );
83864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
83964064216a8433360745f69edddce19a606659163The Android Open Source Project    else
84064064216a8433360745f69edddce19a606659163The Android Open Source Project    {
84164064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
84264064216a8433360745f69edddce19a606659163The Android Open Source Project						   ("%s: whalCtrl_GetParam returned status %d\n", __FUNCTION__, status) );
84364064216a8433360745f69edddce19a606659163The Android Open Source Project
84464064216a8433360745f69edddce19a606659163The Android Open Source Project		/* mark that the specific measurment type has failed */
84564064216a8433360745f69edddce19a606659163The Android Open Source Project		pMeasurementSRV->msrReply.msrTypes[ requestIndex ].status = NOK;
84664064216a8433360745f69edddce19a606659163The Android Open Source Project
84764064216a8433360745f69edddce19a606659163The Android Open Source Project		/* if all measurement types has finished, an event will be send by request timer expired */
84864064216a8433360745f69edddce19a606659163The Android Open Source Project    }
84964064216a8433360745f69edddce19a606659163The Android Open Source Project}
85064064216a8433360745f69edddce19a606659163The Android Open Source Project
85164064216a8433360745f69edddce19a606659163The Android Open Source Project/**
85264064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
85364064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 16-November-2005\n
85464064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Callback for channel load get param call.\n
85564064216a8433360745f69edddce19a606659163The Android Open Source Project *
85664064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
85764064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
85864064216a8433360745f69edddce19a606659163The Android Open Source Project * \param status - the get_param call status.\n
85964064216a8433360745f69edddce19a606659163The Android Open Source Project * \param CB_buf - pointer to the results buffer (already on the measurement SRV object)
86064064216a8433360745f69edddce19a606659163The Android Open Source Project */
86164064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid MacServices_measurementSRV_channelLoadParamCB( TI_HANDLE hMeasurementSRV, TI_STATUS status,
86264064216a8433360745f69edddce19a606659163The Android Open Source Project													UINT8* CB_buf )
86364064216a8433360745f69edddce19a606659163The Android Open Source Project{
86464064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t	    *pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
86564064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32                  mediumUsageInMs, periodInMs;
86664064216a8433360745f69edddce19a606659163The Android Open Source Project	int 					requestIndex;
86764064216a8433360745f69edddce19a606659163The Android Open Source Project
86864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* when this CB is called as a result of the nulify call at the measurement beginning,
86964064216a8433360745f69edddce19a606659163The Android Open Source Project	   the handle will be NULL. In this case, nothing needs to be done. */
87064064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( NULL == hMeasurementSRV )
87164064216a8433360745f69edddce19a606659163The Android Open Source Project	{
87264064216a8433360745f69edddce19a606659163The Android Open Source Project		return;
87364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
87464064216a8433360745f69edddce19a606659163The Android Open Source Project
87564064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
87664064216a8433360745f69edddce19a606659163The Android Open Source Project							 ("%s: Channel load CB called, status:%d\n", __FUNCTION__, status) );
87764064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
87864064216a8433360745f69edddce19a606659163The Android Open Source Project							 ("result address (reported): 0x%x, result address (assumed): 0x%x, results (reported):\n",
87964064216a8433360745f69edddce19a606659163The Android Open Source Project							  CB_buf, &(pMeasurementSRV->mediumOccupancyResults)) );
88064064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_HEX_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG, CB_buf, sizeof(mediumOccupancy_t) );
88164064216a8433360745f69edddce19a606659163The Android Open Source Project
88264064216a8433360745f69edddce19a606659163The Android Open Source Project	/* setting Off the Waitng for Channel Load Results Bit */
88364064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->pendingParamCBs &= ~MSR_SRV_WAITING_CHANNEL_LOAD_RESULTS;
88464064216a8433360745f69edddce19a606659163The Android Open Source Project
88564064216a8433360745f69edddce19a606659163The Android Open Source Project	/* find the request index */
88664064216a8433360745f69edddce19a606659163The Android Open Source Project	requestIndex = measurementSRVFindIndexByType( hMeasurementSRV, MSR_TYPE_CCA_LOAD_MEASUREMENT );
88764064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( -1 == requestIndex )
88864064216a8433360745f69edddce19a606659163The Android Open Source Project	{
88964064216a8433360745f69edddce19a606659163The Android Open Source Project		/* indicates we can't find the request in the requets array. Shouldn't happen, but nothing to do */
89064064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
89164064216a8433360745f69edddce19a606659163The Android Open Source Project						   ("%s: request index from measurementSRVFindIndexByType is -1?!?", __FUNCTION__) );
89264064216a8433360745f69edddce19a606659163The Android Open Source Project		return;
89364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
89464064216a8433360745f69edddce19a606659163The Android Open Source Project
89564064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( (OK == status) && (0 != pMeasurementSRV->mediumOccupancyResults.Period) )
89664064216a8433360745f69edddce19a606659163The Android Open Source Project	{
89764064216a8433360745f69edddce19a606659163The Android Open Source Project		/* calculate results */
89864064216a8433360745f69edddce19a606659163The Android Open Source Project		mediumUsageInMs = pMeasurementSRV->mediumOccupancyResults.MediumUsage / 1000;
89964064216a8433360745f69edddce19a606659163The Android Open Source Project		periodInMs      = pMeasurementSRV->mediumOccupancyResults.Period / 1000;
90064064216a8433360745f69edddce19a606659163The Android Open Source Project
90164064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
90264064216a8433360745f69edddce19a606659163The Android Open Source Project								 ("%s: MediumUsage = %d Period = %d\n",
90364064216a8433360745f69edddce19a606659163The Android Open Source Project								  __FUNCTION__,mediumUsageInMs, periodInMs) );
90464064216a8433360745f69edddce19a606659163The Android Open Source Project
90564064216a8433360745f69edddce19a606659163The Android Open Source Project		if ( periodInMs <= pMeasurementSRV->msrRequest.msrTypes[ requestIndex ].duration )
90664064216a8433360745f69edddce19a606659163The Android Open Source Project		{
90764064216a8433360745f69edddce19a606659163The Android Open Source Project			pMeasurementSRV->msrReply.msrTypes[ requestIndex ].replyValue.CCABusyFraction =
90864064216a8433360745f69edddce19a606659163The Android Open Source Project				( 255 * pMeasurementSRV->mediumOccupancyResults.MediumUsage ) /
90964064216a8433360745f69edddce19a606659163The Android Open Source Project					pMeasurementSRV->mediumOccupancyResults.Period;
91064064216a8433360745f69edddce19a606659163The Android Open Source Project		}
91164064216a8433360745f69edddce19a606659163The Android Open Source Project		else
91264064216a8433360745f69edddce19a606659163The Android Open Source Project		{
91364064216a8433360745f69edddce19a606659163The Android Open Source Project			pMeasurementSRV->msrReply.msrTypes[ requestIndex ].replyValue.CCABusyFraction =
91464064216a8433360745f69edddce19a606659163The Android Open Source Project				( 255 * pMeasurementSRV->mediumOccupancyResults.MediumUsage ) /
91564064216a8433360745f69edddce19a606659163The Android Open Source Project					(pMeasurementSRV->msrRequest.msrTypes[ requestIndex ].duration * 1000);
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		WLAN_REPORT_ERROR( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
92164064216a8433360745f69edddce19a606659163The Android Open Source Project						   ("%s: channel load failed. Status=%d, period=%d\n",
92264064216a8433360745f69edddce19a606659163The Android Open Source Project							__FUNCTION__,
92364064216a8433360745f69edddce19a606659163The Android Open Source Project							status,
92464064216a8433360745f69edddce19a606659163The Android Open Source Project							pMeasurementSRV->mediumOccupancyResults.Period) );
92564064216a8433360745f69edddce19a606659163The Android Open Source Project
92664064216a8433360745f69edddce19a606659163The Android Open Source Project		/* mark result status */
92764064216a8433360745f69edddce19a606659163The Android Open Source Project		pMeasurementSRV->msrReply.msrTypes[ requestIndex ].status = NOK;
92864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
92964064216a8433360745f69edddce19a606659163The Android Open Source Project
93064064216a8433360745f69edddce19a606659163The Android Open Source Project	/* if no measurement are running and no CBs are pending,
93164064216a8433360745f69edddce19a606659163The Android Open Source Project	   send ALL TYPES COMPLETE event */
93264064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( TRUE == measurementSRVIsMeasurementComplete( hMeasurementSRV ) )
93364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
93464064216a8433360745f69edddce19a606659163The Android Open Source Project		/* send the event */
93564064216a8433360745f69edddce19a606659163The Android Open Source Project		measurementSRVSM_SMEvent( hMeasurementSRV, &(pMeasurementSRV->SMState),
93664064216a8433360745f69edddce19a606659163The Android Open Source Project								  MSR_SRV_EVENT_ALL_TYPES_COMPLETE );
93764064216a8433360745f69edddce19a606659163The Android Open Source Project	}
93864064216a8433360745f69edddce19a606659163The Android Open Source Project}
93964064216a8433360745f69edddce19a606659163The Android Open Source Project
94064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
94164064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 03-January-2005\n
94264064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Dummy callback for channel load get param call. Used to clear the channel load tracker.\n
94364064216a8433360745f69edddce19a606659163The Android Open Source Project *
94464064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
94564064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
94664064216a8433360745f69edddce19a606659163The Android Open Source Project * \param status - the get_param call status.\n
94764064216a8433360745f69edddce19a606659163The Android Open Source Project * \param CB_buf - pointer to the results buffer (already on the measurement SRV object)
94864064216a8433360745f69edddce19a606659163The Android Open Source Project */
94964064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid MacServices_measurementSRV_dummyChannelLoadParamCB( TI_HANDLE hMeasurementSRV, TI_STATUS status,
95064064216a8433360745f69edddce19a606659163The Android Open Source Project													UINT8* CB_buf )
95164064216a8433360745f69edddce19a606659163The Android Open Source Project{
95264064216a8433360745f69edddce19a606659163The Android Open Source Project#ifdef TI_DBG
95364064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t *pMeasurementSRV = (measurementSRV_t*) hMeasurementSRV;
95464064216a8433360745f69edddce19a606659163The Android Open Source Project
95564064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
95664064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: Dummy Channel Load callback called (status = %d)\n", __FUNCTION__, status));
95764064216a8433360745f69edddce19a606659163The Android Open Source Project#endif /* TI_DBG */
95864064216a8433360745f69edddce19a606659163The Android Open Source Project}
95964064216a8433360745f69edddce19a606659163The Android Open Source Project
96064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
96164064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
96264064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 16-November-2005\n
96364064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Callback for noise histogram get param call.\n
96464064216a8433360745f69edddce19a606659163The Android Open Source Project *
96564064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
96664064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
96764064216a8433360745f69edddce19a606659163The Android Open Source Project * \param status - the get_param call status.\n
96864064216a8433360745f69edddce19a606659163The Android Open Source Project * \param CB_buf - pointer to the results buffer (already on the measurement SRV object)
96964064216a8433360745f69edddce19a606659163The Android Open Source Project */
97064064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid MacServices_measurementSRV_noiseHistCallBack( TI_HANDLE hMeasurementSRV, TI_STATUS status,
97164064216a8433360745f69edddce19a606659163The Android Open Source Project												   UINT8* CB_buf )
97264064216a8433360745f69edddce19a606659163The Android Open Source Project{
97364064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t		    *pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
97464064216a8433360745f69edddce19a606659163The Android Open Source Project	UINT8		                index;
97564064216a8433360745f69edddce19a606659163The Android Open Source Project    UINT32                      sumOfSamples;
97664064216a8433360745f69edddce19a606659163The Android Open Source Project    int							requestIndex;
97764064216a8433360745f69edddce19a606659163The Android Open Source Project
97864064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
97964064216a8433360745f69edddce19a606659163The Android Open Source Project   							 ("%s: noise histogram CB called, status: %d\n", __FUNCTION__, status) );
98064064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
98164064216a8433360745f69edddce19a606659163The Android Open Source Project							 ("result address (reported): 0x%x, result address (assumed): 0x%x, results (reported):\n",
98264064216a8433360745f69edddce19a606659163The Android Open Source Project							  CB_buf, &(pMeasurementSRV->noiseHistogramResults)) );
98364064216a8433360745f69edddce19a606659163The Android Open Source Project	WLAN_REPORT_HEX_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG, CB_buf, sizeof(noiseHistogramResults_t) );
98464064216a8433360745f69edddce19a606659163The Android Open Source Project
98564064216a8433360745f69edddce19a606659163The Android Open Source Project	/* setting Off the Waitng for noise histogram Results Bit */
98664064216a8433360745f69edddce19a606659163The Android Open Source Project	pMeasurementSRV->pendingParamCBs &= ~MSR_SRV_WAITING_NOISE_HIST_RESULTS;
98764064216a8433360745f69edddce19a606659163The Android Open Source Project
98864064216a8433360745f69edddce19a606659163The Android Open Source Project	/* find the request index */
98964064216a8433360745f69edddce19a606659163The Android Open Source Project	requestIndex = measurementSRVFindIndexByType( hMeasurementSRV, MSR_TYPE_NOISE_HISTOGRAM_MEASUREMENT );
99064064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( -1 == requestIndex )
99164064216a8433360745f69edddce19a606659163The Android Open Source Project	{
99264064216a8433360745f69edddce19a606659163The Android Open Source Project		/* indicates we can't find the request in the requets array. Shouldn't happen, but nothing to do */
99364064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_ERROR( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
99464064216a8433360745f69edddce19a606659163The Android Open Source Project						   ("%s: request index from measurementSRVFindIndexByType is -1?!?", __FUNCTION__) );
99564064216a8433360745f69edddce19a606659163The Android Open Source Project		return;
99664064216a8433360745f69edddce19a606659163The Android Open Source Project	}
99764064216a8433360745f69edddce19a606659163The Android Open Source Project
99864064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( OK == status )
99964064216a8433360745f69edddce19a606659163The Android Open Source Project	{
100064064216a8433360745f69edddce19a606659163The Android Open Source Project		sumOfSamples = pMeasurementSRV->noiseHistogramResults.numOfLostCycles;
100164064216a8433360745f69edddce19a606659163The Android Open Source Project
100264064216a8433360745f69edddce19a606659163The Android Open Source Project		/* Print For Debug */
100364064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
100464064216a8433360745f69edddce19a606659163The Android Open Source Project			("%s: numOfLostCycles = %d "
100564064216a8433360745f69edddce19a606659163The Android Open Source Project			 "numOfTxHwGenLostCycles = %d numOfRxLostCycles = %d numOfExceedLastThresholdLostCycles = %d\n",
100664064216a8433360745f69edddce19a606659163The Android Open Source Project			__FUNCTION__,
100764064216a8433360745f69edddce19a606659163The Android Open Source Project			pMeasurementSRV->noiseHistogramResults.numOfLostCycles,
100864064216a8433360745f69edddce19a606659163The Android Open Source Project			pMeasurementSRV->noiseHistogramResults.numOfTxHwGenLostCycles,
100964064216a8433360745f69edddce19a606659163The Android Open Source Project			pMeasurementSRV->noiseHistogramResults.numOfRxLostCycles,
101064064216a8433360745f69edddce19a606659163The Android Open Source Project			pMeasurementSRV->noiseHistogramResults.numOfLostCycles -
101164064216a8433360745f69edddce19a606659163The Android Open Source Project			 (pMeasurementSRV->noiseHistogramResults.numOfTxHwGenLostCycles +
101264064216a8433360745f69edddce19a606659163The Android Open Source Project			  pMeasurementSRV->noiseHistogramResults.numOfRxLostCycles)) );
101364064216a8433360745f69edddce19a606659163The Android Open Source Project
101464064216a8433360745f69edddce19a606659163The Android Open Source Project		for ( index = 0; index < NUM_OF_NOISE_HISTOGRAM_COUNTERS; index++ )
101564064216a8433360745f69edddce19a606659163The Android Open Source Project		{
101664064216a8433360745f69edddce19a606659163The Android Open Source Project			sumOfSamples += pMeasurementSRV->noiseHistogramResults.counters[ index ];
101764064216a8433360745f69edddce19a606659163The Android Open Source Project
101864064216a8433360745f69edddce19a606659163The Android Open Source Project			/* Print For Debug */
101964064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
102064064216a8433360745f69edddce19a606659163The Android Open Source Project				("%s: Counter #%d = %x\n",
102164064216a8433360745f69edddce19a606659163The Android Open Source Project				__FUNCTION__, index, pMeasurementSRV->noiseHistogramResults.counters[index]));
102264064216a8433360745f69edddce19a606659163The Android Open Source Project		}
102364064216a8433360745f69edddce19a606659163The Android Open Source Project
102464064216a8433360745f69edddce19a606659163The Android Open Source Project		/* If there weren't enough samples --> Reject the Request */
102564064216a8433360745f69edddce19a606659163The Android Open Source Project		if ( (sumOfSamples - pMeasurementSRV->noiseHistogramResults.numOfLostCycles) <
102664064216a8433360745f69edddce19a606659163The Android Open Source Project				NOISE_HISTOGRAM_THRESHOLD )
102764064216a8433360745f69edddce19a606659163The Android Open Source Project		{
102864064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_WARNING( pMeasurementSRV->hReport,  MEASUREMENT_SRV_MODULE_LOG,
102964064216a8433360745f69edddce19a606659163The Android Open Source Project								 ("%s: noise histogram CB, rejecting request because %d samples received.\n",
103064064216a8433360745f69edddce19a606659163The Android Open Source Project								  __FUNCTION__,
103164064216a8433360745f69edddce19a606659163The Android Open Source Project								  sumOfSamples - pMeasurementSRV->noiseHistogramResults.numOfLostCycles) );
103264064216a8433360745f69edddce19a606659163The Android Open Source Project
103364064216a8433360745f69edddce19a606659163The Android Open Source Project			/* set negative result status */
103464064216a8433360745f69edddce19a606659163The Android Open Source Project			pMeasurementSRV->msrReply.msrTypes[ requestIndex ].status = NOK;
103564064216a8433360745f69edddce19a606659163The Android Open Source Project		}
103664064216a8433360745f69edddce19a606659163The Android Open Source Project		else
103764064216a8433360745f69edddce19a606659163The Android Open Source Project		{
103864064216a8433360745f69edddce19a606659163The Android Open Source Project 			for (index = 0; index < NUM_OF_NOISE_HISTOGRAM_COUNTERS; index++)
103964064216a8433360745f69edddce19a606659163The Android Open Source Project			{
104064064216a8433360745f69edddce19a606659163The Android Open Source Project				pMeasurementSRV->msrReply.msrTypes[ requestIndex ].replyValue.RPIDensity[ index ] =
104164064216a8433360745f69edddce19a606659163The Android Open Source Project					( 255 * pMeasurementSRV->noiseHistogramResults.counters[ index ]) / sumOfSamples;
104264064216a8433360745f69edddce19a606659163The Android Open Source Project			}
104364064216a8433360745f69edddce19a606659163The Android Open Source Project
104464064216a8433360745f69edddce19a606659163The Android Open Source Project			WLAN_REPORT_INFORMATION( pMeasurementSRV->hReport, MEASUREMENT_SRV_MODULE_LOG,
104564064216a8433360745f69edddce19a606659163The Android Open Source Project									 ("%s: Valid noise histogram reply. RPIDensity: %d %d %d %d %d %d %d %d\n",
104664064216a8433360745f69edddce19a606659163The Android Open Source Project									  __FUNCTION__,
104764064216a8433360745f69edddce19a606659163The Android Open Source Project									  pMeasurementSRV->msrReply.msrTypes[ requestIndex ].replyValue.RPIDensity[ 0 ],
104864064216a8433360745f69edddce19a606659163The Android Open Source Project									  pMeasurementSRV->msrReply.msrTypes[ requestIndex ].replyValue.RPIDensity[ 1 ],
104964064216a8433360745f69edddce19a606659163The Android Open Source Project									  pMeasurementSRV->msrReply.msrTypes[ requestIndex ].replyValue.RPIDensity[ 2 ],
105064064216a8433360745f69edddce19a606659163The Android Open Source Project									  pMeasurementSRV->msrReply.msrTypes[ requestIndex ].replyValue.RPIDensity[ 3 ],
105164064216a8433360745f69edddce19a606659163The Android Open Source Project									  pMeasurementSRV->msrReply.msrTypes[ requestIndex ].replyValue.RPIDensity[ 4 ],
105264064216a8433360745f69edddce19a606659163The Android Open Source Project									  pMeasurementSRV->msrReply.msrTypes[ requestIndex ].replyValue.RPIDensity[ 5 ],
105364064216a8433360745f69edddce19a606659163The Android Open Source Project									  pMeasurementSRV->msrReply.msrTypes[ requestIndex ].replyValue.RPIDensity[ 6 ],
105464064216a8433360745f69edddce19a606659163The Android Open Source Project									  pMeasurementSRV->msrReply.msrTypes[ requestIndex ].replyValue.RPIDensity[ 7 ]) );
105564064216a8433360745f69edddce19a606659163The Android Open Source Project		}
105664064216a8433360745f69edddce19a606659163The Android Open Source Project	}
105764064216a8433360745f69edddce19a606659163The Android Open Source Project	else
105864064216a8433360745f69edddce19a606659163The Android Open Source Project	{
105964064216a8433360745f69edddce19a606659163The Android Open Source Project		WLAN_REPORT_WARNING( pMeasurementSRV->hReport,  MEASUREMENT_SRV_MODULE_LOG,
106064064216a8433360745f69edddce19a606659163The Android Open Source Project							 ("%s: noise histogram CB with status: %d, rejecting request.\n",
106164064216a8433360745f69edddce19a606659163The Android Open Source Project							  __FUNCTION__, status) );
106264064216a8433360745f69edddce19a606659163The Android Open Source Project		/* set negative result status */
106364064216a8433360745f69edddce19a606659163The Android Open Source Project		pMeasurementSRV->msrReply.msrTypes[ requestIndex ].status = NOK;
106464064216a8433360745f69edddce19a606659163The Android Open Source Project	}
106564064216a8433360745f69edddce19a606659163The Android Open Source Project
106664064216a8433360745f69edddce19a606659163The Android Open Source Project	/* if no measurement are running and no CBs are pending,
106764064216a8433360745f69edddce19a606659163The Android Open Source Project	   send ALL TYPES COMPLETE event */
106864064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( TRUE == measurementSRVIsMeasurementComplete( hMeasurementSRV ) )
106964064216a8433360745f69edddce19a606659163The Android Open Source Project	{
107064064216a8433360745f69edddce19a606659163The Android Open Source Project		/* send the event */
107164064216a8433360745f69edddce19a606659163The Android Open Source Project		measurementSRVSM_SMEvent( hMeasurementSRV, &(pMeasurementSRV->SMState),
107264064216a8433360745f69edddce19a606659163The Android Open Source Project								  MSR_SRV_EVENT_ALL_TYPES_COMPLETE );
107364064216a8433360745f69edddce19a606659163The Android Open Source Project	}
107464064216a8433360745f69edddce19a606659163The Android Open Source Project}
107564064216a8433360745f69edddce19a606659163The Android Open Source Project
107664064216a8433360745f69edddce19a606659163The Android Open Source Project/**
107764064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
107864064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 16-November-2005\n
107964064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Checks whether all measuremtn types had completed and all param CBs had been called.\n
108064064216a8433360745f69edddce19a606659163The Android Open Source Project *
108164064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
108264064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
108364064216a8433360745f69edddce19a606659163The Android Open Source Project * \param status - the get_param call status.\n
108464064216a8433360745f69edddce19a606659163The Android Open Source Project * \param CB_buf - pointer to the results buffer (already on the measurement SRV object)
108564064216a8433360745f69edddce19a606659163The Android Open Source Project */
108664064216a8433360745f69edddce19a606659163The Android Open Source ProjectBOOLEAN measurementSRVIsMeasurementComplete( TI_HANDLE hMeasurementSRV )
108764064216a8433360745f69edddce19a606659163The Android Open Source Project{
108864064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
108964064216a8433360745f69edddce19a606659163The Android Open Source Project	int i;
109064064216a8433360745f69edddce19a606659163The Android Open Source Project
109164064216a8433360745f69edddce19a606659163The Android Open Source Project	/* verify that no request is currently running */
109264064216a8433360745f69edddce19a606659163The Android Open Source Project	for ( i = 0; i < pMeasurementSRV->msrRequest.numberOfTypes; i++ )
109364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
109464064216a8433360745f69edddce19a606659163The Android Open Source Project		if ( TRUE == pMeasurementSRV->bRequestTimerRunning[ i ] )
109564064216a8433360745f69edddce19a606659163The Android Open Source Project		{
109664064216a8433360745f69edddce19a606659163The Android Open Source Project			return FALSE;
109764064216a8433360745f69edddce19a606659163The Android Open Source Project		}
109864064216a8433360745f69edddce19a606659163The Android Open Source Project	}
109964064216a8433360745f69edddce19a606659163The Android Open Source Project
110064064216a8433360745f69edddce19a606659163The Android Open Source Project	/* verify that no CBs are pending */
110164064216a8433360745f69edddce19a606659163The Android Open Source Project	if ( 0 != (pMeasurementSRV->pendingParamCBs &
110264064216a8433360745f69edddce19a606659163The Android Open Source Project			   (MSR_SRV_WAITING_CHANNEL_LOAD_RESULTS | MSR_SRV_WAITING_NOISE_HIST_RESULTS)) )
110364064216a8433360745f69edddce19a606659163The Android Open Source Project	{
110464064216a8433360745f69edddce19a606659163The Android Open Source Project		return FALSE;
110564064216a8433360745f69edddce19a606659163The Android Open Source Project	}
110664064216a8433360745f69edddce19a606659163The Android Open Source Project
110764064216a8433360745f69edddce19a606659163The Android Open Source Project	return TRUE;
110864064216a8433360745f69edddce19a606659163The Android Open Source Project}
110964064216a8433360745f69edddce19a606659163The Android Open Source Project
111064064216a8433360745f69edddce19a606659163The Android Open Source Project/**
111164064216a8433360745f69edddce19a606659163The Android Open Source Project * \author Ronen Kalish\n
111264064216a8433360745f69edddce19a606659163The Android Open Source Project * \date 17-November-2005\n
111364064216a8433360745f69edddce19a606659163The Android Open Source Project * \brief Finds a measure type index in the measure request array.\n
111464064216a8433360745f69edddce19a606659163The Android Open Source Project *
111564064216a8433360745f69edddce19a606659163The Android Open Source Project * Function Scope \e Public.\n
111664064216a8433360745f69edddce19a606659163The Android Open Source Project * \param hMeasurementSRV - handle to the measurement SRV object.\n
111764064216a8433360745f69edddce19a606659163The Android Open Source Project * \param type - the measure type to look for.\n
111864064216a8433360745f69edddce19a606659163The Android Open Source Project * \return the type index, -1 if not found.\n
111964064216a8433360745f69edddce19a606659163The Android Open Source Project */
112064064216a8433360745f69edddce19a606659163The Android Open Source Projectint measurementSRVFindIndexByType( TI_HANDLE hMeasurementSRV, measurement_type_e type )
112164064216a8433360745f69edddce19a606659163The Android Open Source Project{
112264064216a8433360745f69edddce19a606659163The Android Open Source Project	measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
112364064216a8433360745f69edddce19a606659163The Android Open Source Project	int i;
112464064216a8433360745f69edddce19a606659163The Android Open Source Project
112564064216a8433360745f69edddce19a606659163The Android Open Source Project	for ( i = 0; i < pMeasurementSRV->msrRequest.numberOfTypes; i++ )
112664064216a8433360745f69edddce19a606659163The Android Open Source Project	{
112764064216a8433360745f69edddce19a606659163The Android Open Source Project		if ( type == pMeasurementSRV->msrRequest.msrTypes[ i ].msrType )
112864064216a8433360745f69edddce19a606659163The Android Open Source Project		{
112964064216a8433360745f69edddce19a606659163The Android Open Source Project			return i;
113064064216a8433360745f69edddce19a606659163The Android Open Source Project		}
113164064216a8433360745f69edddce19a606659163The Android Open Source Project	}
113264064216a8433360745f69edddce19a606659163The Android Open Source Project	return -1;
113364064216a8433360745f69edddce19a606659163The Android Open Source Project}
113464064216a8433360745f69edddce19a606659163The Android Open Source Project
113564064216a8433360745f69edddce19a606659163The Android Open Source Project
113664064216a8433360745f69edddce19a606659163The Android Open Source Project
113764064216a8433360745f69edddce19a606659163The Android Open Source Project/****************************************************************************************
113864064216a8433360745f69edddce19a606659163The Android Open Source Project *                        measurementSRVRegisterFailureEventCB													*
113964064216a8433360745f69edddce19a606659163The Android Open Source Project ****************************************************************************************
114064064216a8433360745f69edddce19a606659163The Android Open Source ProjectDESCRIPTION: Registers a failure event callback for scan error notifications.
114164064216a8433360745f69edddce19a606659163The Android Open Source Project
114264064216a8433360745f69edddce19a606659163The Android Open Source Project
114364064216a8433360745f69edddce19a606659163The Android Open Source ProjectINPUT:     	- hMeasurementSRV	- handle to the Measurement SRV object.
114464064216a8433360745f69edddce19a606659163The Android Open Source Project			- failureEventCB 		- the failure event callback function.\n
114564064216a8433360745f69edddce19a606659163The Android Open Source Project			- hFailureEventObj 	- handle to the object passed to the failure event callback function.
114664064216a8433360745f69edddce19a606659163The Android Open Source Project
114764064216a8433360745f69edddce19a606659163The Android Open Source ProjectOUTPUT:
114864064216a8433360745f69edddce19a606659163The Android Open Source ProjectRETURN:    void.
114964064216a8433360745f69edddce19a606659163The Android Open Source Project****************************************************************************************/
115064064216a8433360745f69edddce19a606659163The Android Open Source Project
115164064216a8433360745f69edddce19a606659163The Android Open Source Projectvoid measurementSRVRegisterFailureEventCB( TI_HANDLE hMeasurementSRV,
115264064216a8433360745f69edddce19a606659163The Android Open Source Project                                     void * failureEventCB, TI_HANDLE hFailureEventObj )
115364064216a8433360745f69edddce19a606659163The Android Open Source Project{
115464064216a8433360745f69edddce19a606659163The Android Open Source Project    measurementSRV_t* pMeasurementSRV = (measurementSRV_t*)hMeasurementSRV;
115564064216a8433360745f69edddce19a606659163The Android Open Source Project
115664064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->failureEventFunc	= (failureEventCB_t)failureEventCB;
115764064216a8433360745f69edddce19a606659163The Android Open Source Project    pMeasurementSRV->failureEventObj	= hFailureEventObj;
115864064216a8433360745f69edddce19a606659163The Android Open Source Project}
115964064216a8433360745f69edddce19a606659163The Android Open Source Project
116064064216a8433360745f69edddce19a606659163The Android Open Source Project
1161