/*
* 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_*/