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