diff -r 000000000000 -r 10c42ec6c05f TWD/MacServices/ScanSrv.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TWD/MacServices/ScanSrv.h Tue Jun 29 12:34:26 2010 +0100 @@ -0,0 +1,310 @@ +/* + * ScanSrv.h + * + * Copyright(c) 1998 - 2010 Texas Instruments. All rights reserved. + * All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v1.0 or BSD License which accompanies + * this distribution. The Eclipse Public License is available at + * http://www.eclipse.org/legal/epl-v10.html and the BSD License is as below. + * + * 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 ScanSrv.h + * \brief This file include private definitions for the scan SRV module. + * + * \see ScanSrv.c, ScanSrvSM.c, ScanSrvSM.h + */ + + +#ifndef __SCANSRV_H__ +#define __SCANSRV_H__ + +#include "TWDriverInternal.h" +#include "MacServices_api.h" +#include "fsm.h" +#include "ScanSrvSM.h" + +/* + *********************************************************************** + * Constant definitions. + *********************************************************************** + */ +/* guard time for scan (added to calculated scan duration) + Value to support extreme case such as A2DP mode */ +#define SCAN_SRV_FW_GUARD_TIME_MS 62000 +/* module name for driver mode requests */ +#define SCAN_SRV_NAME "SSRV" + + +/* + *********************************************************************** + * Enums. + *********************************************************************** + */ + + +/* + *********************************************************************** + * Typedefs. + *********************************************************************** + */ + +/* + *********************************************************************** + * Structure definitions. + *********************************************************************** + */ + +/** \struct scanSRV_t + * \brief This structure contains the scan SRV object data + */ +typedef struct +{ + TI_HANDLE hOS; /**< OS object handle */ + TI_HANDLE hReport; /**< report object handle */ + TI_HANDLE hPowerSrv; /**< power Server object handle */ + TI_HANDLE hTWD; /**< TWD layer handle */ + TI_HANDLE hTimer; /**< Timer module object handle */ + TI_HANDLE hEventMbox; /**< EventMbox module object handle */ + TI_HANDLE hCmdBld; /**< Command builder object handle */ + TScanSrvCompleteCb scanCompleteNotificationFunc; /**< + * upper layer (scan concentrator) scan complete + * callback function + */ + TI_HANDLE scanCompleteNotificationObj; /**< + * upper layer (scan concentrator) scan complete + * callback function + */ + + TCmdResponseCb commandResponseFunc; /**< + * upper layer command response CB. Passed down into the HAL + * and called when the scan command has been received by the FW + */ + TI_HANDLE commandResponseObj; /**< + * 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 + */ + TI_UINT16 SPSScanResult; /**< + * bitmap indicating which channels were scanned + * in an SPS scan + */ + TI_BOOL bTSFError; /** indicates whether a TSF error occured */ /**< + * scan result: indicates a TSF error event and + * which channels were scanned in SPS + */ + TI_BOOL bDtimOverlapping; /**< Indicates whether the scan is overlapping DTIM */ + TI_BOOL bExitFromDriverMode; /**< + * Indicates whether to exit driver mode once scan + * is finished + */ + TI_BOOL bSendNullData; /**< + * Indicates whether to send Null data when exiting driver + * mode once scan is finished + */ + TI_BOOL bScanOnDriverModeFailure; /**< + * Indicates whether to scan if driver mode entry + * wasn't successful + */ + TI_BOOL bHighPriority; /**< + * Indicates whether to request high priority + * (overlapping DTIM) scan + */ + TI_BOOL bSPSScan; /**< + * whether the running scan type is SPS (TI_TRUE) + * or something else (TI_FALSE). Used to stop a + * running scan. + */ + TScanParams* scanParams; /**< scan parameters */ + EScanResultTag eScanTag; /**< scan result tag */ + TI_UINT32 uResultCount; /**< number of scan results (received from the FW) */ + TI_HANDLE hScanSrvTimer; /**< scan operation timer */ + TI_BOOL bTimerRunning; /**< whether the above timer is running */ + TI_BOOL bInRequest; /**< + * Indicates whether the SM is run within + * the scan 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. + */ + /* state machine */ + fsm_stateMachine_t* SM; /**< + * state machines for different + * scan types + */ + scan_SRVSMStates_e SMState; /**< + * state machine current states + * for different scan types + */ + E80211PsMode psRequest; /**< + * Indicates if PS was requested or not + * for current scan + */ + TI_UINT32 numberOfNoScanCompleteToRecovery; + /**< + * The number of consecutive no scan complete + * that will trigger a recovery notification + */ + TI_UINT32 currentNumberOfConsecutiveNoScanCompleteEvents; + /**< + * The number of consecutivre no scan complete + * events at present + */ + TI_BOOL bNoScanCompleteFlag; /**< + * Indicates if the last event was start scan + * (true) or no scan complete (false) to be able + * to nullify correctly the above counter */ + TI_UINT32 uTriggeredScanTimeOut; /**< + * Time out for starting triggered scan between + * 2 channels */ + TI_UINT8 uDtimPeriod; + TI_UINT16 uBeaconInterval; +} scanSRV_t; + +/* + *********************************************************************** + * External data definitions. + *********************************************************************** + */ + +/* + *********************************************************************** + * External functions definitions + *********************************************************************** + */ + +/** + * \date 16-Oct-2004\n + * \brief Creates the scan SRV object + * + * Function Scope \e Public.\n + * \param hOS - handle to the OS object.\n + * \return a handle to the scan SRV object, NULL if an error occurred.\n + */ +TI_HANDLE MacServices_scanSRV_create( TI_HANDLE hOS ); + +/** + * \date 29-Dec-2004\n + * \brief Finalizes the scan SRV module (releasing memory and timer) + * + * Function Scope \e Public.\n + * \param hScanSRV - handle to the scan SRV object.\n + */ +void MacServices_scanSRV_destroy( TI_HANDLE hScanSRV ); + +/** + * \date 29-Dec-2004\n + * \brief Initializes the scan SRV module, registers SCAN_COMPLETE to HAL. + * + * Function Scope \e Public.\n + * \param hScanSRV - handle to the scan SRV object.\n + * \param Handles of other modules.\n + */ +TI_STATUS MacServices_scanSRV_init (TI_HANDLE hMacServices, + TI_HANDLE hReport, + TI_HANDLE hTWD, + TI_HANDLE hTimer, + TI_HANDLE hEventMbox, + TI_HANDLE hCmdBld); + +/** + * \author Ronen Kalish\n + * \date 26-July-2006\n + * \brief Configures the scan SRV module with initialization values + * + * Function Scope \e Public.\n + * \param hScanSRV - handle to the scan SRV object.\n + * \param hReport - handle to the report object.\n + * \param hHalCtrl - handle to the HAL ctrl object.\n + */ +void MacServices_scanSrv_config( TI_HANDLE hMacServices, TScanSrvInitParams* pInitParams ); + +/** + * \author Ronen Kalish\n + * \date 29-Dec-2004\n + * \brief Calculates the maximal time required for a scan operation + * + * Function Scope \e Public.\n + * \param hScanSRV - handle to the scan SRV object.\n + * \param scanParams - the scan parameters + * \param bConsiderDTIM - whether this scan overlaps DTIM + * \return the time (in milliseconds) + */ +TI_UINT32 MacServices_scanSRVcalculateScanTimeout( TI_HANDLE hScanSrv, TScanParams* scanParams, TI_BOOL bConsiderDTIM ); + +/** + * \author Ronen Kalish\n + * \date 16-Jan-2005\n + * \brief Convert time units (1024 usecs) to millisecs + * + * Function Scope \e Private.\n + * \param tu - the time in time units + * \return the time in milliseconds + */ +TI_UINT32 MacServices_scanSRVConvertTUToMsec( TI_UINT32 tu ); + +/** + * \date 27-Sep-2005\n + * \brief This function is the CB which is called as response to 'StartScan' or 'StopScan' \n. + * here we check if there is a GWSI command response , and call it if necessary .\n + * Function Scope \e Private.\n + * \param hScanSrv - handle to the scan SRV object.\n + * \param MboxStatus - mailbox status. \n + */ + +void MacServices_scanSRVCommandMailBoxCB(TI_HANDLE hScanSrv,TI_UINT16 MboxStatus); + + +/** + * \brief Registers a failure event callback for scan error notifications. + * + * Function Scope \e Public.\n + * \param hMacServices - handle to the MacServices object.\n + * \param failureEventCB - the failure event callback function.\n + * \param hFailureEventObj - handle to the object passed to the failure event callback function.\n + */ +void scanSRV_registerFailureEventCB( TI_HANDLE hScanSRV, + void * failureEventCB, TI_HANDLE hFailureEventObj ); + +void scanSRV_restart( TI_HANDLE hScanSRV); + + +#endif /* __SCANSRV_H__ */