| /* |
| * MeasurementSrv.h |
| * |
| * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions |
| * are met: |
| * |
| * * Redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer. |
| * * Redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in |
| * the documentation and/or other materials provided with the |
| * distribution. |
| * * Neither the name Texas Instruments nor the names of its |
| * contributors may be used to endorse or promote products derived |
| * from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| /** \file MeasurementSrv.h |
| * \brief This file include private definitions for the Measurement SRV module. |
| * \author Ronen Kalish |
| * \date 08-November-2005 |
| */ |
| |
| #ifndef __MEASUREMENT_SRV_H__ |
| #define __MEASUREMENT_SRV_H__ |
| |
| #include "TWDriverInternal.h" |
| #include "MacServices_api.h" |
| #include "fsm.h" |
| #include "MeasurementSrvSM.h" |
| |
| /* |
| *********************************************************************** |
| * Constant definitions. |
| *********************************************************************** |
| */ |
| /* Time in milliseconds to receive a command complete for measure start / stop from the FW */ |
| #define MSR_FW_GUARD_TIME 100 |
| #define DEF_SAMPLE_INTERVAL (100) /* expressed in microsec */ |
| #define NOISE_HISTOGRAM_THRESHOLD 100 |
| /* Get param callback flags */ |
| #define MSR_SRV_WAITING_CHANNEL_LOAD_RESULTS 0x01 /* channel load results are still pending */ |
| #define MSR_SRV_WAITING_NOISE_HIST_RESULTS 0x02 /* noise histogram results are still pending */ |
| |
| /* |
| *********************************************************************** |
| * Enums. |
| *********************************************************************** |
| */ |
| |
| |
| /* |
| *********************************************************************** |
| * Typedefs. |
| *********************************************************************** |
| */ |
| |
| /* |
| *********************************************************************** |
| * Structure definitions. |
| *********************************************************************** |
| */ |
| |
| /** \struct measurementSRV_t |
| * \brief This structure contains the measurement SRV object data |
| */ |
| typedef struct |
| { |
| TMediumOccupancy mediumOccupancyResults; /**< channel load results buffer */ |
| TNoiseHistogramResults noiseHistogramResults; /**< noise histogram results buffer */ |
| |
| /* module handles */ |
| TI_HANDLE hOS; /**< OS object handle */ |
| TI_HANDLE hReport; /**< report object handle */ |
| TI_HANDLE hPowerSaveSRV; /**< power save SRV object handle */ |
| TI_HANDLE hCmdBld; /**< Command Builder object handle */ |
| TI_HANDLE hEventMbox; /**< Event Mbox handle */ |
| TI_HANDLE hTimer ; /**< Timer Module handle */ |
| /* CB functions and objects */ |
| TMeasurementSrvCompleteCb measurmentCompleteCBFunc; |
| /**< |
| * upper layer (measurement manager) measurement complete |
| * callback function |
| */ |
| TI_HANDLE measurementCompleteCBObj; /**< |
| * upper layer (measurement manager) measurement complete |
| * callback object |
| */ |
| |
| TCmdResponseCb commandResponseCBFunc; /**< |
| * upper layer command response CB, used for both start |
| * and stop. Passed down to the HAL and called when |
| * the measurement command has been received by the FW |
| */ |
| TI_HANDLE commandResponseCBObj; /**< |
| * object parameter passed to the commandResposeFunc by |
| * the HAL when it is called |
| */ |
| |
| TFailureEventCb failureEventFunc; /**< |
| * upper layer Failure Event CB. |
| * called when the scan command has been Timer Expiry |
| */ |
| TI_HANDLE failureEventObj; /**< |
| * object parameter passed to the failureEventFunc |
| * when it is called |
| */ |
| /* Timers */ |
| TI_HANDLE hRequestTimer[ MAX_NUM_OF_MSR_TYPES_IN_PARALLEL ]; |
| /**< Timers for different measurement types */ |
| TI_BOOL bRequestTimerRunning[ MAX_NUM_OF_MSR_TYPES_IN_PARALLEL ]; |
| /**< Indicates whether each request timer is running */ |
| TI_HANDLE hStartStopTimer; /**< Timer for start / stop commands guard */ |
| TI_BOOL bStartStopTimerRunning; /**< |
| * Indicates whether the start / stop command guard |
| * timer is running |
| */ |
| /* Misc stuff */ |
| TI_BOOL bInRequest; /**< |
| * Indicates whether the SM is run within |
| * the measurement request context (if so, to avoid |
| * re-entrance, the complete function shouldn't |
| * be called on failure, but rather an invalid |
| * status should be returned) |
| */ |
| TI_STATUS returnStatus; /**< |
| * Holds the return code to the upper layer |
| * Used to save errors during SM operation. |
| */ |
| TI_BOOL bSendNullDataWhenExitPs; /**< whether to send NULL data frame when exiting |
| * driver mode |
| */ |
| /* state machine */ |
| fsm_stateMachine_t* SM; /**< |
| * state machines for different |
| * scan types |
| */ |
| measurements_SRVSMStates_e SMState; /**< state machine current states */ |
| /* measurement request */ |
| TMeasurementRequest msrRequest; /**< measurement request parameters */ |
| TMeasurementReply msrReply; /**< measurement reply values */ |
| TI_UINT32 requestRecptionTimeStampMs; /**< The time in which the request was received. */ |
| TI_UINT32 timeToRequestExpiryMs; /**< |
| * The duration (in ms) from request receiption |
| * until it should actually start. Request is |
| * discarded if a longer period is required |
| */ |
| TI_UINT8 pendingParamCBs; /**< |
| * a bitmap indicating which get_param CBs are |
| * currently pending (noise histogram and/or |
| * channel load). |
| */ |
| } measurementSRV_t; |
| |
| /* |
| *********************************************************************** |
| * External data definitions. |
| *********************************************************************** |
| */ |
| |
| /* |
| *********************************************************************** |
| * External functions definitions |
| *********************************************************************** |
| */ |
| |
| /** |
| * \author Ronen Kalish\n |
| * \date 08-November-2005\n |
| * \brief Creates the measurement SRV object |
| * |
| * Function Scope \e Public.\n |
| * \param hOS - handle to the OS object.\n |
| * \return a handle to the measurement SRV object, NULL if an error occurred.\n |
| */ |
| TI_HANDLE MacServices_measurementSRV_create( TI_HANDLE hOS ); |
| |
| /** |
| * \author Ronen Kalish\n |
| * \date 08-November-2005\n |
| * \brief Initializes the measurement SRV object |
| * |
| * Function Scope \e Public.\n |
| * \param hMeasurementSRV - handle to the measurement SRV object.\n |
| * \param hReport - handle to the report object.\n |
| * \param hCmdBld - handle to the Command Builder object.\n |
| * \param hEventMbox - handle to the Event Mbox object.\n |
| * \param hPowerSaveSRV - handle to the power save SRV object.\n |
| * \param hTimer - handle to the Timer module object.\n |
| */ |
| TI_STATUS MacServices_measurementSRV_init (TI_HANDLE hMeasurementSRV, |
| TI_HANDLE hReport, |
| TI_HANDLE hCmdBld, |
| TI_HANDLE hEventMbox, |
| TI_HANDLE hPowerSaveSRV, |
| TI_HANDLE hTimer); |
| |
| /** |
| * \author Ronen Kalish\n |
| * \date 08-November-2005\n |
| * \brief Destroys the measurement SRV object |
| * |
| * Function Scope \e Public.\n |
| * \param hMeasurementSRV - handle to the measurement SRV object.\n |
| */ |
| void MacServices_measurementSRV_destroy( TI_HANDLE hMeasurementSRV ); |
| |
| /** |
| * \author Ronen Kalish\n |
| * \date 13-November-2005\n |
| * \brief Checks whether a beacon measurement is part of current measurement request |
| * |
| * Function Scope \e Private.\n |
| * \param hMeasurementSRV - handle to the measurement SRV object.\n |
| * \return TI_TRUE if a beacon measurement is part of current request, TI_FALSE otherwise.\n |
| */ |
| TI_BOOL measurementSRVIsBeaconMeasureIncluded( TI_HANDLE hMeasurementSRV ); |
| |
| /** |
| * \author Ronen Kalish\n |
| * \date 15-November-2005\n |
| * \brief Finds the index for the measurement request with the shortest period |
| * (the one that has now completed).\n |
| * |
| * Function Scope \e Private.\n |
| * \param hMeasurementSRV - handle to the measurement SRV object.\n |
| * \return index of the measurement request with the shortest duration.\n |
| */ |
| TI_INT32 measurementSRVFindMinDuration( TI_HANDLE hMeasurementSRV ); |
| |
| /** |
| * \author Ronen Kalish\n |
| * \date 15-November-2005\n |
| * \brief Handles an AP discovery timer expiry, by setting necessary values in the |
| * reply struct.\n |
| * |
| * Function Scope \e Private.\n |
| * \param hMeasurementSRV - handle to the measurement SRV object.\n |
| * \param requestIndex - index of the beacon request in the request structure.\n |
| */ |
| void measurementSRVHandleBeaconMsrComplete( TI_HANDLE hMeasurementSRV, TI_INT32 requestIndex ); |
| |
| /** |
| * \author Ronen Kalish\n |
| * \date 15-November-2005\n |
| * \brief Handles a channel load timer expiry, by requesting channel load |
| * results from the FW.\n |
| * |
| * Function Scope \e Private.\n |
| * \param hMeasurementSRV - handle to the measurement SRV object.\n |
| * \param requestIndex - index of the channel load request in the request structure.\n |
| */ |
| void measurementSRVHandleChannelLoadComplete( TI_HANDLE hMeasurementSRV, TI_INT32 requestIndex ); |
| |
| /** |
| * \author Ronen Kalish\n |
| * \date 15-November-2005\n |
| * \brief Handles a nois histogram timer expiry, by requesting noise histogram |
| * reaults from the FW.\n |
| * |
| * Function Scope \e Private.\n |
| * \param hMeasurementSRV - handle to the measurement SRV object.\n |
| * \param requestIndex - indexof the beacon request in the request structure.\n |
| */ |
| void measurementSRVHandleNoiseHistogramComplete( TI_HANDLE hMeasurementSRV, TI_INT32 requestIndex ); |
| |
| /** |
| * \author Ronen Kalish\n |
| * \date 16-November-2005\n |
| * \brief Checks whether all measuremtn types had completed and all param CBs had been called.\n |
| * |
| * Function Scope \e Public.\n |
| * \param hMeasurementSRV - handle to the measurement SRV object.\n |
| * \param status - the get_param call status.\n |
| * \param CB_buf - pointer to the results buffer (already on the measurement SRV object) |
| */ |
| TI_BOOL measurementSRVIsMeasurementComplete( TI_HANDLE hMeasurementSRV ); |
| |
| /** |
| * \author Ronen Kalish\n |
| * \date 17-November-2005\n |
| * \brief Finds a measure type index in the measure request array.\n |
| * |
| * Function Scope \e Public.\n |
| * \param hMeasurementSRV - handle to the measurement SRV object.\n |
| * \param type - the measure type to look for.\n |
| * \return the type index, -1 if not found.\n |
| */ |
| TI_INT32 measurementSRVFindIndexByType( TI_HANDLE hMeasurementSRV, EMeasurementType type ); |
| |
| /**************************************************************************************** |
| * measurementSRVRegisterFailureEventCB * |
| **************************************************************************************** |
| DESCRIPTION: Registers a failure event callback for scan error notifications. |
| |
| |
| INPUT: - hMeasurementSRV - handle to the Measurement SRV object. |
| - failureEventCB - the failure event callback function.\n |
| - hFailureEventObj - handle to the object passed to the failure event callback function. |
| |
| OUTPUT: |
| RETURN: void. |
| ****************************************************************************************/ |
| void measurementSRVRegisterFailureEventCB( TI_HANDLE hMeasurementSRV, |
| void * failureEventCB, TI_HANDLE hFailureEventObj ); |
| |
| void measurementSRV_restart( TI_HANDLE hMeasurementSRV); |
| |
| |
| #endif /* __MEASUREMENT_SRV_H__ */ |
| |