1 /* 2 * scanMngrApi.h 3 * 4 * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions 9 * are met: 10 * 11 * * Redistributions of source code must retain the above copyright 12 * notice, this list of conditions and the following disclaimer. 13 * * Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * * Neither the name Texas Instruments nor the names of its 18 * contributors may be used to endorse or promote products derived 19 * from this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 32 */ 33 34 /** \file scanMngrApi.h 35 * \brief This file include public definitions for the scan manager module, comprising its API. 36 * 37 * \see scanMngr.c, scanMngr.h, scanMngrTypes.h 38 */ 39 40 41 #ifndef __SCAN_MNGR_API_H__ 42 #define __SCAN_MNGR_API_H__ 43 44 #include "scanMngrTypes.h" 45 #include "bssTypes.h" 46 #include "ScanCncn.h" 47 #include "DrvMainModules.h" 48 49 50 /* 51 *********************************************************************** 52 * Constant definitions. 53 *********************************************************************** 54 */ 55 56 #define SCANNING_OPERATIONAL_MODE_MANUAL 0 57 #define SCANNING_OPERATIONAL_MODE_AUTO 1 58 59 60 /* 61 *********************************************************************** 62 * Enums. 63 *********************************************************************** 64 */ 65 /** \enum scan_mngrResultStatus_e 66 * 67 * \brief Scan Manager Result Status 68 * 69 * \par Description 70 * Enumerates the possible Scan result statuses. 71 * Returned as a response to an immediate scan request. 72 * 73 * \sa 74 */ 75 typedef enum 76 { 77 /* 0 */ SCAN_MRS_SCAN_COMPLETE_OK, /**< Scan was completed successfully */ 78 /* 1 */ SCAN_MRS_SCAN_RUNNING, /**< Scan was started successfully and is now running */ 79 /* 2 */ SCAN_MRS_SCAN_NOT_ATTEMPTED_ALREADY_RUNNING, /**< scan was not attempted because it is already running */ 80 /* 3 */ SCAN_MRS_SCAN_NOT_ATTEMPTED_EMPTY_POLICY, /**< 81 * Scan was not attempted because the policy defines 82 * NULL scan type 83 */ 84 /* 4 */ SCAN_MRS_SCAN_NOT_ATTEMPTED_NO_CHANNLES_AVAILABLE, /**< 85 * Scan was not attempted because no channels are 86 * available for scan, according to the defined policy. 87 */ 88 /* 5 */ SCAN_MRS_SCAN_FAILED, /**< Scan failed to start */ 89 /* 6 */ SCAN_MRS_SCAN_STOPPED, /**< Scan was stopped by caller */ 90 /* 7 */ SCAN_MRS_SCAN_ABORTED_FW_RESET, /**< Scan was aborted due to recovery */ 91 /* 8 */ SCAN_MRS_SCAN_ABORTED_HIGHER_PRIORITY /**< Scan was aborted due to a higher priority client */ 92 93 } scan_mngrResultStatus_e; 94 95 typedef enum { 96 CONNECTION_STATUS_CONNECTED =0, 97 CONNECTION_STATUS_NOT_CONNECTED 98 } scanMngr_connStatus_e; 99 100 101 102 103 /* 104 *********************************************************************** 105 * Typedefs. 106 *********************************************************************** 107 */ 108 109 /* 110 *********************************************************************** 111 * Structure definitions. 112 *********************************************************************** 113 */ 114 115 typedef struct { 116 TI_UINT8 numOfChannels; /**< Number of channels to scan */ 117 TScanChannelEntry channelEntry[ MAX_NUMBER_OF_CHANNELS_PER_SCAN ]; /**< Channel data array, actual size according to the above field. */ 118 } channelList_t; 119 120 typedef struct _BssListEx_t 121 { 122 bssList_t *pListOfAPs; 123 TI_BOOL scanIsRunning; 124 } BssListEx_t; 125 126 127 /* 128 *********************************************************************** 129 * External data definitions. 130 *********************************************************************** 131 */ 132 /* 133 *********************************************************************** 134 * External functions definitions 135 *********************************************************************** 136 */ 137 /** 138 * \brief Creates the scan manager object 139 * 140 * \param hScanMngr - handle to the OS object 141 * \return Handle to the Scan Manager Object on Success, NULL otherwise 142 * 143 * \par Description 144 * Creates (allocates) the scan manager object and its database 145 * 146 * \sa 147 */ 148 TI_HANDLE scanMngr_create( TI_HANDLE hOS ); 149 /** 150 * \brief Initializes the scan manager 151 * 152 * \param pStadHandles - The driver modules handles 153 * \return void 154 * 155 * \par Description 156 * Initializes the scan manager object with other object handlers called by the driver core logic, 157 * and creates Scan Manager Timer 158 * 159 * \sa scanMngr_unload 160 */ 161 void scanMngr_init (TStadHandlesList *pStadHandles); 162 /** 163 * \brief Unloads the scan manager object 164 * 165 * \param hScanMngr - Handle to the scan manager object to unload 166 * \return void 167 * 168 * \par Description 169 * Frees the memory allocated by the scan manager. 170 * The function is called as part of the unloading process of the driver. 171 * 172 * \sa 173 */ 174 void scanMngr_unload( TI_HANDLE hScanMngr ); 175 /** 176 * \brief Starts an immediate scan operation 177 * 178 * \param hScanMngr - handle to the scan manager object 179 * \param pNeighborAPsOnly - Indicates whether to scan only neighbor APs (or all channels defined by the policy) 180 * TI_TRUE if scan for neighbor APs only, TI_FALSE if scan on all channels 181 * \return Scan Result Status 182 * 183 * \par Description 184 * 185 * \sa scanMngr_create 186 */ 187 scan_mngrResultStatus_e scanMngr_startImmediateScan( TI_HANDLE hScanMngr, TI_BOOL bNeighborAPsOnly ); 188 /** 189 * \brief Stops the immediate scan operation 190 * 191 * \param hScanMngr - handle to the scan manager object 192 * \return void 193 * 194 * \par Description 195 * 196 * \sa 197 */ 198 void scanMngr_stopImmediateScan( TI_HANDLE hScanMngr ); 199 /** 200 * \brief Starts the continuous scan timer 201 * 202 * \param hScanMngr - Handle to the scan manager object 203 * \param currentBSS - BSSID of the AP to which the STA is connected 204 * \param currentBSSBand - Band of the AP to which the STA is connected 205 * \return void 206 * 207 * \par Description 208 * Starts the continuous scan process performed by the scan manager. 209 * It is called by the roaming manager when an STA connection is established 210 * 211 * \sa 212 */ 213 void scanMngr_startContScan( TI_HANDLE hScanMngr, TMacAddr* currentBSS, ERadioBand currentBSSBand ); 214 /** 215 * \brief Stops the continuous scan timer 216 * 217 * \param hScanMngr - Handle to the scan manager object 218 * \return void 219 * 220 * \par Description 221 * Stops the continues scan performed by the scan manager. 222 * It is called by the roaming manager when the STA disconnects 223 * 224 * \sa 225 */ 226 void scanMngr_stopContScan( TI_HANDLE hScanMngr ); 227 /** 228 * \brief Returns the currently available BSS list 229 * 230 * \param hScanMngr - Handle to the scan manager object 231 * \return Pointer to BSS list 232 * 233 * \par Description 234 * Used by the roaming manager to obtain the scan manager BSS list. 235 * 236 * \sa 237 */ 238 bssList_t *scanMngr_getBSSList( TI_HANDLE hScanMngr ); 239 /** 240 * \brief Sets the neighbor APs 241 * 242 * \param hScanMngr - Handle to the scan manager object 243 * \param neighborAPList - Pointer to the neighbor AP list 244 * \return void 245 * 246 * \par Description 247 * Used by the roaming manager to set a list of neighbor APs for the scan manager, 248 * which are then given priority over policy channels in the discovery phase 249 * 250 * \sa 251 */ 252 void scanMngr_setNeighborAPs( TI_HANDLE hScanMngr, neighborAPList_t* neighborAPList ); 253 /** 254 * \brief Change quality level (normal / deteriorating) 255 * 256 * \param hScanMngr - Handle to the scan manager object 257 * \param bLowQuality - TI_TRUE if quality is deteriorating, TI_FALSE if quality is normal 258 * \return void 259 * 260 * \par Description 261 * Used by the roaming manager to set the scan interval used by the scan manager, 262 * according to the current AP quality level 263 * 264 * \sa 265 */ 266 void scanMngr_qualityChangeTrigger( TI_HANDLE hScanMngr, TI_BOOL bLowQuality ); 267 /** 268 * \brief Change quality level (normal / deteriorating) 269 * 270 * \param hScanMngr - Handle to the scan manager object 271 * \param macAddress - MAC address of the new AP (to which the STA is currently connected to) 272 * \param band - Band of the new AP (to which the STA is currently connected to) 273 * \return void 274 * 275 * \par Description 276 * Used by the roaming manager to notify the scan manager that roaming is complete. 277 * This is done so that the scan manager does not attempt to discover the current AP, 278 * in case it is also a neighbor AP 279 * 280 * \sa 281 */ 282 void scanMngr_handoverDone( TI_HANDLE hScanMngr, TMacAddr* macAddress, ERadioBand band ); 283 /** 284 * \brief Get Scan Manager Parameters 285 * 286 * \param hScanMngr - Handle to the scan manager object 287 * \param pParam - Pointer to get Parameter 288 * \return TI_OK if the parameter got successfully, TI_NOK otherwise 289 * 290 * \par Description 291 * Parses and executes a get parameter command 292 * 293 * \sa 294 */ 295 TI_STATUS scanMngr_getParam( TI_HANDLE hScanMngr, paramInfo_t *pParam ); 296 /** 297 * \brief Set Scan Manager Parameters 298 * 299 * \param hScanMngr - Handle to the scan manager object 300 * \param pParam - Pointer to set Parameter 301 * \return TI_OK if the parameter was set successfully, TI_NOK otherwise 302 * 303 * \par Description 304 * Called when the user configures scan parameters. It parses and executes a set parameter command 305 * 306 * \sa 307 */ 308 TI_STATUS scanMngr_setParam( TI_HANDLE hScanMngr, paramInfo_t *pParam ); 309 310 311 312 313 314 /********** New APIs added for EMP manual scan support ******/ 315 316 void scanMngr_startManual(TI_HANDLE hScanMngr); 317 318 void scanMngr_stopManual(TI_HANDLE hScanMngr); 319 320 TI_STATUS scanMngr_setManualScanChannelList (TI_HANDLE hScanMngr, channelList_t* pChannelList); 321 322 EScanCncnResultStatus scanMngr_Start1ShotScan (TI_HANDLE hScanMngr, EScanCncnClient eClient); 323 324 TI_STATUS scanMngr_immediateScanComplete(TI_HANDLE hScanMngr, scan_mngrResultStatus_e scanCmpltStatus); 325 326 TI_STATUS scanMngr_reportImmediateScanResults(TI_HANDLE hScanMngr, scan_mngrResultStatus_e scanCmpltStatus); 327 328 TI_STATUS scanMngr_startContinuousScanByApp (TI_HANDLE hScanMngr, channelList_t* pChannelList); 329 330 TI_STATUS scanMngr_stopContinuousScanByApp (TI_HANDLE hScanMngr); 331 332 /********** New APIs added for EMP manual scan support ******/ 333 334 335 #ifdef TI_DBG 336 /** 337 * \brief Print scan policy 338 * 339 * \param scanPolicy - scan policy to print 340 * \return void 341 * 342 * \par Description 343 * 344 * \sa 345 */ 346 void scanMngrTracePrintScanPolicy( TScanPolicy* scanPolicy ); 347 /** 348 * \brief Print scan manager statistics 349 * 350 * \param hScanMngr - handle to the scan manager object.\n 351 * \return void 352 * 353 * \par Description 354 * 355 * \sa 356 */ 357 void scanMngr_statsPrint( TI_HANDLE hScanMngr ); 358 /** 359 * \brief Reset scan manager statistics 360 * 361 * \param hScanMngr - handle to the scan manager object.\n 362 * \return void 363 * 364 * \par Description 365 * 366 * \sa 367 */ 368 void scanMngr_statsReset( TI_HANDLE hScanMngr ); 369 /** 370 * \brief Print Neighbor AP list 371 * 372 * \param hScanMngr - handle to the scan manager object.\n 373 * \return void 374 * 375 * \par Description 376 * 377 * \sa 378 */ 379 void scanMngrDebugPrintNeighborAPList( TI_HANDLE hScanMngr ); 380 /** 381 * \brief Prints all data in the scan manager object 382 * 383 * \param hScanMngr - handle to the scan manager object.\n 384 * \return void 385 * 386 * \par Description 387 * 388 * \sa 389 */ 390 void scanMngrDebugPrintObject( TI_HANDLE hScanMngr ); 391 392 #endif /* TI_DBG */ 393 394 void scanMngr_SetDefaults (TI_HANDLE hScanMngr, TRoamScanMngrInitParams *pInitParams); 395 396 #endif /* __SCAN_MNGR_API_H__ */ 397