/* * currBss.h * * Copyright(c) 1998 - 2010 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 currBss.h * \brief Current BSS module API * * \see currBss.c */ /**************************************************************************** * * * MODULE: Current BSS * * PURPOSE: Current BSS Module API * * * ****************************************************************************/ #ifndef _CURR_BSS_H_ #define _CURR_BSS_H_ #include "siteMgrApi.h" #include "roamingMngrTypes.h" #include "paramOut.h" /* Constants */ #define MAX_NUM_OF_RSSI_SNR_TRIGGERS 8 /* Enumerations */ /** * Current BSS module configurable parameters type */ typedef enum { CURR_BSS_TYPE = 0, /**< BSS or IBSS */ CURR_BSS_CONNECTED_STATE, /**< Connected or not connected, roaming enabled or not */ CURR_BSS_LOW_RSSI_SCAN_COND,/**< Set by AP Connection when Roaming Manager configures low RSSI threshold for BG scan */ CURR_BSS_HI_RSSI_SCAN_COND, /**< Set by AP Connection when Roaming Manager configures normal RSSI threshold for BG scan */ CURR_BSS_QUALITY_THRESHOLD, /**< Set by AP Connection when Roaming Manager configures event of type 'Low RSSI' */ CURR_BSS_NO_BSS_THRESHOLDS, /**< Set by AP Connection when Roaming Manager configures event of type 'BSS Loss' */ CURR_BSS_NUM_OF_TEST_REPEAT,/**< Set by AP Connection when Roaming Manager configures event of type 'BSS Loss' */ CURR_BSS_CONSEC_NACK, /**< Set by AP Connection when Roaming Manager configures event of type 'Consecutive nack' */ CURR_BSS_INFO /**< Requested by AP Connection: includes quality and last beacon info */ } currBSS_configParam_e; /* Structures */ typedef struct triggerDataEx { TI_UINT8 data; TI_UINT16 clientID; } triggerDataEx_t; typedef struct triggerDesc { TI_UINT16 clientID; TI_HANDLE fCB; TI_HANDLE hCB; TI_BOOL WasRegisteredByApp; } triggerDesc_t; /** * Current BSS control block * Following structure defines parameters that can be configured externally, * internal variables, and handlers of other modules used by Current BSS module */ typedef struct _currBSS_t { /* Internal variables and configurable parameters */ ScanBssType_e type; /**< Set by SME module; EBSS, IBSS or none */ ERadioBand band; /**< Set by SME module */ TI_UINT8 channel; /**< Set by AP Connection, SME and Switch Channel modules */ TI_BOOL isConnected; /**< Default: not connected */ bssEntry_t currAPInfo; /**< Set by SME upon request from AP Connection */ TI_INT8 lowRssiThreshold; /**< Last configured threshold for Low-RSSI */ TI_INT8 lowSnrThreshold; /**< Last configured threshold Low-SNR */ TI_INT8 lowQualityForBkgrdScan; /**< Indicator used to increase the background scan period when quality is low */ TI_INT8 highQualityForBkgrdScan;/**< Indicator used to reduce the background scan period when quality is normal */ TI_UINT8 numExpectedTbttForBSSLoss;/**< last configured value without Soft Gemini compensation */ TI_UINT8 maxTxRetryThreshold; /**< last configured threshold for max Tx retry */ TI_BOOL bUseSGParams; /**< Whether to use the Soft Gemini compensation on the roaming triggers (currently: BSS Loss) */ /**< This compensation is needed since BT Activity might over-run beacons */ TI_UINT32 SGcompensationPercent; /**< the percentage of increasing the TbttForBSSLoss value when SG is enabled */ TI_UINT8 uDefaultKeepAlivePeriod;/**< The default keep-alive period in seconds */ TI_UINT8 keepAliveBuffer[ WLAN_WITH_SNAP_QOS_HEADER_MAX_SIZE ]; /**< Buffer to store null-data keep-alive template */ triggerDesc_t aTriggersDesc[MAX_NUM_OF_RSSI_SNR_TRIGGERS]; /* static table to be used for trigger event registration*/ TI_UINT8 RoamingOperationalMode; /* 0 - manual , 1 - Auto */ /* Handlers of other modules used by AP Connection */ TI_HANDLE hOs; TI_HANDLE hPowerMngr; TI_HANDLE hAPConn; TI_HANDLE hSme; TI_HANDLE hTWD; TI_HANDLE hMlme; TI_HANDLE hReport; TI_HANDLE hRegulatoryDomain; TI_HANDLE hSiteMgr; TI_HANDLE hConn; TI_HANDLE hScanMngr; TI_HANDLE hEvHandler; TI_HANDLE hTxCtrl; } currBSS_t; /* Typedefs */ typedef void (*TCurrBssDataCb) (TI_HANDLE hCurrBSS, TI_UINT8 *data, TI_UINT8 dataLength); /* External data definitions */ /* External functions definitions */ /* Function prototypes */ TI_HANDLE currBSS_create(TI_HANDLE hOs); void currBSS_init (TStadHandlesList *pStadHandles); TI_STATUS currBSS_SetDefaults (TI_HANDLE hCurrBSS, TCurrBssInitParams *pInitParams); TI_STATUS currBSS_unload(TI_HANDLE hCurrBSS); void currBSS_updateConnectedState(TI_HANDLE hCurrBSS, TI_BOOL isConnected, ScanBssType_e type); TI_STATUS currBSS_updateRoamingTriggers(TI_HANDLE hCurrBSS, roamingMngrThresholdsConfig_t *params); void currBSS_SGconfigureBSSLoss(TI_HANDLE hCurrBSS, TI_UINT32 SGcompensationPercent , TI_BOOL bUseSGParams); bssEntry_t *currBSS_getBssInfo(TI_HANDLE hCurrBSS); TI_STATUS currBSS_getRoamingParams(TI_HANDLE hCurrBSS, TI_UINT8 * aNumExpectedTbttForBSSLoss, TI_INT8 * aLowQualityForBackgroungScanCondition, TI_INT8 * aNormalQualityForBackgroungScanCondition); TI_STATUS currBSS_probRespReceivedCallb(TI_HANDLE hCurrBSS, TRxAttr *pRxAttr, TMacAddr *bssid, mlmeFrameInfo_t *pFrameInfo, TI_UINT8 *dataBuffer, TI_UINT16 bufLength); TI_STATUS currBSS_beaconReceivedCallb(TI_HANDLE hCurrBSS, TRxAttr *pRxAttr, TMacAddr *bssid, mlmeFrameInfo_t *pFrameInfo, TI_UINT8 *dataBuffer, TI_UINT16 bufLength); void currBSS_restartRssiCounting(TI_HANDLE hCurrBSS); void currBSS_GetDefaultKeepAlivePeriod(TI_HANDLE hCurrBSS, TI_UINT8* uDefaultKeepAlivePeriod); void currBss_DbgPrintTriggersTable(TI_HANDLE hCurrBSS); #endif /* _CURR_BSS_H_*/