• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * scanMngr.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  scanMngr.h
35  *  \brief This file include private definitions for the scan manager module.
36  *
37  *  \see   scanMngr.c, scanMngrApi.h, scanMngrTypes.h
38  */
39 
40 
41 #ifndef __SCAN_MNGR_H__
42 #define __SCAN_MNGR_H__
43 
44 #include "scanMngrApi.h"
45 
46 /*
47  ***********************************************************************
48  *  Constant definitions.
49  ***********************************************************************
50  */
51 
52 /* SPS guard times */
53 #ifdef TI_DBG
54 #define SCAN_SPS_GUARD_FROM_CURRENT_TSF         300000 /* 300 msecs - to allow for some debug printouts */
55 #else
56 #define SCAN_SPS_GUARD_FROM_CURRENT_TSF         50000 /* 50 msecs */
57 #endif /* TI_DBG */
58 #define SCAN_SPS_GUARD_FROM_LAST_BSS            2000 /* 2 msecs */
59 #define SCAN_SPS_DURATION_PART_IN_ADVANCE       4 /* 1/4 of scan duration in advance */
60 #define SCAN_SPS_USE_DRIFT_COMPENSATION         1 /* if defined, use drift compensation algorithm */
61 #define SCAN_SPS_NUM_OF_TSF_DELTA_ENTRIES       4 /* number of TSF delta ^ 2 entries */
62 #define SCAN_SPS_FW_DTIM_LENGTH                 1000 /* time (in usec) for a DTIM event to complete in the FW */
63 
64 /* Quality calculation constants */
65 #define RSSI_PREVIOUS_COEFFICIENT               9
66 
67 /* scan iteration number after which, if no new AP was found, pre-auth needs to be re-done */
68 #define SCAN_MNGR_CONSEC_SCAN_ITER_FOR_PRE_AUTH 50
69 
70 #define MAX_DESC_LENGTH                         50 /* max characters for a description string */
71 #define SCAN_MNGR_STAT_MAX_TRACK_FAILURE        10 /* max track filures for statistics histogram */
72 
73 #ifdef TI_DBG
74 /*#define SCAN_MNGR_DBG 1
75 #define SCAN_MNGR_SPS_DBG 1
76 #define SCAN_MNGR_DTIM_DBG 1 */
77 #endif
78 
79  /*
80  ***********************************************************************
81  *  Enums.
82  ***********************************************************************
83  */
84 
85  /** \enum scan_immedScanState_e
86  * \brief enumerates immediate scan internal status
87  */
88 typedef enum
89 {
90     SCAN_ISS_IDLE = 0,                  /**< immediate scan is not running */
91     SCAN_ISS_G_BAND,                    /**< immediate scan is running on G band */
92     SCAN_ISS_A_BAND,                    /**< immediate scan is running on A band */
93     SCAN_ISS_STOPPING,                  /**< stop was requested and is now pending */
94     SCAN_ISS_NUM_OF_STATES              /**< number of available immediate scan states states */
95 } scan_immedScanState_e;
96 
97 /** \enum scan_contScanState_e
98  * \brief enumerates continuous scan internal status
99  */
100 typedef enum
101 {
102     SCAN_CSS_IDLE = 0,                  /**< continuous scan is not running */
103     SCAN_CSS_TRACKING_G_BAND,           /**< continuous scan is performing tracking scan on G */
104     SCAN_CSS_TRACKING_A_BAND,           /**< continuous scan is performing tracking scan on A */
105     SCAN_CSS_DISCOVERING,               /**< continuous scan is performing discovery scan */
106     SCAN_CSS_STOPPING,                  /**< continuous scan is waiting for scan complete notification */
107     SCAN_CSS_NUM_OF_STATES              /**< number of available continuous scan states */
108 } scan_contScanState_e;
109 
110 /** \enum scan_discoveryPart_e
111  * \brief enumerates the different parts in the discovery process
112  */
113 typedef enum
114 {
115     SCAN_SDP_NEIGHBOR_G = 0,            /**< attempting to discover neighbor APs in G band */
116     SCAN_SDP_NEIGHBOR_A,                /**< attempting to discover neighbor APs in A band */
117     SCAN_SDP_CHANNEL_LIST_G,            /**< attempting to discover all APs in G band */
118     SCAN_SDP_CHANNEL_LIST_A,            /**< attempting to discover all APs in A band */
119     SCAN_SDP_NO_DISCOVERY,              /**< no discovery should be attempted */
120     SCAN_SDP_NUMBER_OF_DISCOVERY_PARTS  /**< number of discovery parts available */
121 } scan_discoveryPart_e;
122 
123 /** \enum scan_neighborDiscoveryState_e
124  * \brief enumerates the different discovery states possible for a neighbor AP
125  */
126 typedef enum
127 {
128     SCAN_NDS_DISCOVERED = 0,            /**< Neighbor AP was discovered and is now being tracked */
129     SCAN_NDS_NOT_DISCOVERED,            /**< Neighbor AP was not yet discovered, and should be */
130     SCAN_NDS_CURRENT_AP,                /**<
131                                          * Neighbor AP is the AP STA is currently connected to,
132                                          * and shouldn't be discovered
133                                          */
134     SCAN_NDS_NUMBER_OF_NEIGHBOR_DISCOVERY_STATES
135                                         /**< number of available neighbor disocvery states */
136 } scan_neighborDiscoveryState_e;
137 
138 /*
139  ***********************************************************************
140  *  Typedefs.
141  ***********************************************************************
142  */
143 
144 #define WAS_SPS_CHANNEL_ATTENDED( SPSStatus, i )    \
145     (0 != (SPSStatus & (1<<i)) ? TI_TRUE : TI_FALSE)
146 
147 /*
148  ***********************************************************************
149  *  Structure definitions.
150  ***********************************************************************
151  */
152 
153 /** \struct scan_neighborAPListDiscovery_t
154  * \brief This structure contains Neighbor AP list and their detection status
155  */
156 typedef struct
157 {
158     TI_UINT8                            numOfEntries;                                   /**< number of entries in the list */
159     neighborAP_t                    APListPtr[ MAX_NUM_OF_NEIGHBOR_APS ];           /**< neighbor APs list */
160     scan_neighborDiscoveryState_e   trackStatusList[ MAX_NUM_OF_NEIGHBOR_APS ];     /**< tracking status list */
161 } scan_neighborAPListDiscovery_t;
162 
163 /** \struct scan_BSSEntry
164  * \brief This structure contains information relevant only for scan manager module on a BSS
165  */
166 typedef struct
167 {
168     TI_UINT8                    trackFailCount;                 /**< number of consecutive failed track attempts */
169     TI_UINT64                   localTSF;                       /**<
170                                                              * the TSF of the AP the station is connected to at the
171                                                              * reception of the last frame from this AP
172                                                              */
173 #ifdef SCAN_SPS_USE_DRIFT_COMPENSATION
174     TI_INT64               prevTSFDelta;                                               /**< Previous TSF delta */
175     TI_INT32               deltaChangeArray[ SCAN_SPS_NUM_OF_TSF_DELTA_ENTRIES ];      /**<
176                                                                                      * Array holding deltas
177                                                                                      * between prev. TSF delta
178                                                                                      */
179     int                 deltaChangeArrayIndex;                                      /**<
180                                                                                      * index to where next entry
181                                                                                      * in the delta array should
182                                                                                      * be stored
183                                                                                      */
184 #endif
185 } scan_BSSEntry_t;
186 
187 /** \struct scan_BSSList
188  * \brief This structure contains the BSS tracking list.
189  */
190 typedef struct
191 {
192     TI_UINT8               numOfEntries;                                               /**< Number of entries in the list */
193     bssEntry_t          BSSList[ MAX_SIZE_OF_BSS_TRACK_LIST ];                      /**< BSS public information */
194     scan_BSSEntry_t     scanBSSList[ MAX_SIZE_OF_BSS_TRACK_LIST ];                  /**<
195                                                                                      * BSS scan manager private
196                                                                                      * information
197                                                                                      */
198 } scan_BSSList_t;
199 
200 /** \struct scan_SPSHelper_t
201  * \brief This structure contains information used for building SPS scan command
202  */
203 typedef struct
204 {
205     TI_UINT64                          nextEventTSF;                                   /**<
206                                                                                      * local TSF value of AP next frame
207                                                                                      * transmission
208                                                                                      */
209     int                             trackListIndex;                                 /**< index to BSS info in the track list */
210     int                             nextAPIndex;                                    /**< index of next AP entry */
211 } scan_SPSHelper_t;
212 
213 #ifdef TI_DBG
214 /** \struct scan_mngrStat_t
215  * \brief holds all scan manager statistics
216  */
217 typedef struct
218 {
219     TI_UINT32      receivedFrames;                                     /**< Number of scan results received */
220     TI_UINT32      discardedFramesLowRSSI;                             /**<
221                                                                      * Number of frames discarded due
222                                                                      * to RSSI lower than threshold
223                                                                      */
224     TI_UINT32      discardedFramesOther;                               /**<
225                                                                      * Number of frames discarded due to
226                                                                      * other reasons (invalid band,
227                                                                      * list full)
228                                                                      */
229     TI_UINT32      SPSSavedByDTIMCheck;                                /**<
230                                                                      * Number of SPS scans that were moved
231                                                                      * due to the DTIM collision detection mechanism
232                                                                      */
233     TI_UINT32      APsRemovedDTIMOverlap;                              /**<
234                                                                      * Number of times APs were removed from
235                                                                      * tracking list because all their beacons
236                                                                      * collide with current AP DTIMs
237                                                                      */
238     TI_UINT32      APsRemovedInvalidChannel;                           /**<
239                                                                      * Number of times APs were removed from
240                                                                      * tracking list because their channel was
241                                                                      * not valid for tracking scan type
242                                                                      */
243     TI_UINT32      TrackingGByStatus[ SCAN_CRS_NUM_OF_RES_STATUS ];    /**<
244                                                                      * Number of track scans on G,
245                                                                      * according to completion status
246                                                                      */
247     TI_UINT32      TrackingAByStatus[ SCAN_CRS_NUM_OF_RES_STATUS ];    /**<
248                                                                      * Number of track scans on A,
249                                                                      * according to completion status
250                                                                      */
251     TI_UINT32      DiscoveryGByStatus[ SCAN_CRS_NUM_OF_RES_STATUS ];   /**<
252                                                                      * Number of discovery scans on G,
253                                                                      * according to completion status
254                                                                      */
255     TI_UINT32      DiscoveryAByStatus[ SCAN_CRS_NUM_OF_RES_STATUS ];   /**<
256                                                                      * Number of discovery scans on A,
257                                                                      * according to completion status
258                                                                      */
259     TI_UINT32      ImmediateGByStatus[ SCAN_CRS_NUM_OF_RES_STATUS ];   /**<
260                                                                      * Number of immediate scans on G,
261                                                                      * according to completion status
262                                                                      */
263     TI_UINT32      ImmediateAByStatus[ SCAN_CRS_NUM_OF_RES_STATUS ];   /**<
264                                                                      * Number of immediate scans on A,
265                                                                      * according to completion status
266                                                                      */
267     TI_UINT32      ConsecutiveTrackFailCountHistogram[ SCAN_MNGR_STAT_MAX_TRACK_FAILURE ];
268                                                                     /**<
269                                                                      * Number of consecutive track
270                                                                      * fail counts */
271     TI_UINT32      SPSChannelsNotAttended[ SCAN_MAX_NUM_OF_SPS_CHANNELS_PER_COMMAND ];
272                                                                     /**<
273                                                                      * Number of times SPS channels were
274                                                                      * not scanned by FW, according to
275                                                                      * their location in the scan command
276                                                                      */
277 } scan_mngrStat_t;
278 #endif
279 
280 /** \struct scanMngr_t
281  * \brief This structure contains the scan manager object data
282  */
283 typedef struct
284 {
285     TTsfDtim                        currTsfDtimMib;
286     /* handles to other modules */
287     TI_HANDLE                       hOS;                                            /**< handle to the OS object */
288     TI_HANDLE                       hReport;                                        /**< handle to the report object */
289     TI_HANDLE                       hRegulatoryDomain;                              /**<
290                                                                                      * handle to the regulatory domain
291                                                                                      * object
292                                                                                      */
293     TI_HANDLE                       hScanCncn;                                      /**<
294                                                                                      * handle to the scan concentrator
295                                                                                      * object
296                                                                                      */
297     TI_HANDLE                       hRoamingMngr;                                   /**<
298                                                                                      * handle to the roaming manager
299                                                                                      * object
300                                                                                      */
301     TI_HANDLE                       hSiteMngr;                                      /**<
302                                                                                      * handle to the site manager object*/
303     TI_HANDLE                       hTWD;
304 
305     TI_HANDLE                       hTimer;                                         /* handle to the timer module */
306 
307     TI_HANDLE                       hEvHandler;                                     /* handle to the eventHandler module */
308     TI_HANDLE                       hAPConnection;                                  /* handle to the AP connection module */
309     /* start / stop flag */
310     TI_BOOL                         bContinuousScanStarted;                         /**<
311                                                                                      * Indicates whether continuous scan
312                                                                                      * was started
313                                                                                      */
314     /* Timer */
315     TI_HANDLE                       hContinuousScanTimer;                           /**< continuous scan timer object */
316     TI_BOOL                         bTimerRunning;                                  /**<
317                                                                                      * indicates whether the timer was
318                                                                                      * started
319                                                                                      */
320 
321     /* scan policy */
322     TScanPolicy                     scanPolicy;                                     /**< scan policy */
323     TI_BOOL                         bLowQuality;                                    /**<
324                                                                                      * Indicates whether to use the low
325                                                                                      * quality time or normal quality
326                                                                                      * timer for continuous scan.
327                                                                                      */
328 
329     /* tracking and discovery information */
330     scan_contScanState_e            contScanState;                                  /**< current continuous scan state */
331     scan_immedScanState_e           immedScanState;                                 /**< current immediate scan state */
332     TI_BOOL                         bImmedNeighborAPsOnly;                          /**<
333                                                                                      * whether immediate scan is to search
334                                                                                      * for neighbor AP's only
335                                                                                      */
336     scan_neighborAPListDiscovery_t  neighborAPsDiscoveryList[ RADIO_BAND_NUM_OF_BANDS ];
337                                                                                     /**<
338                                                                                      * List of neighbor APs and their
339                                                                                      * discovery status
340                                                                                      */
341     TI_UINT8                        neighborAPsDiscoveryIndex[ RADIO_BAND_NUM_OF_BANDS ];
342                                                                                     /**<
343                                                                                      * Indexes for the neighbor APs
344                                                                                      * discovery lists
345                                                                                      */
346     TI_UINT8                        channelDiscoveryIndex[ RADIO_BAND_NUM_OF_BANDS ];  /**< Indexes for the channels lists */
347     scan_discoveryPart_e            currentDiscoveryPart;                           /**< current discovery part */
348     TI_BOOL                         bSynchronized;                                  /**<
349                                                                                      * TI_TRUE if SPS data is synchronized
350                                                                                      * (no TSF error event occurred)
351                                                                                      */
352     TI_UINT64                       currentTSF;                                     /**<
353                                                                                      * the local current TSF value
354                                                                                      */
355     TI_UINT32                       currentHostTimeStamp;                           /**<
356                                                                                      * The current local host time stamp
357                                                                                      * (at the time of the above TSF value)
358                                                                                      */
359     TI_UINT8                        lastLocalBcnDTIMCount;                          /**<
360                                                                                      * the DTIM count at the last
361                                                                                      * local beacon reception in the FW
362                                                                                      */
363     TI_UINT64                       lastLocalBcnTSF;                                /**<
364                                                                                      * The local TSF value at the last
365                                                                                      * local beacon reception
366                                                                                      */
367     TMacAddr                        currentBSS;                                     /**< MAC address of current BSS */
368     ERadioBand                      currentBSSBand;                                 /**< band of current BSS */
369     TI_UINT32                       currentBSSBeaconInterval;                       /**< Beacon interval of current BSS */
370     TI_UINT32                       currentBSSDtimPeriod;                           /**< DTIM period of current BSS */
371     TI_BOOL                         bNewBSSFound;                                   /**<
372                                                                                      * Indicates whether a new BSS was
373                                                                                      * found during the last discovery
374                                                                                      * stage
375                                                                                      */
376     TI_UINT16                       consecNotFound;                                 /**<
377                                                                                      * consecutive number of scan
378                                                                                      * cycles in which no new AP was found
379                                                                                      * (used to re-pre-auth current APs)
380                                                                                      */
381     TScanParams                     scanParams;                                     /**< temporary storage for scan command */
382     scan_BSSList_t                  BSSList;                                        /**< BSS list (also used for tracking) */
383 
384     scanMngr_connStatus_e           connStatus;                                /* save the connection status during manual roaming */
385 	TI_UINT8                        scanningOperationalMode;                   /* 0 - manual ,  1 - auto */
386     TScanParams                     manualScanParams;                          /* temporary storage for manual scan command */
387 
388 
389 
390 #ifdef TI_DBG
391     scan_mngrStat_t                 stats;                                          /**< statistics */
392     ERadioBand                      statsLastDiscoveryBand;                         /**<
393                                                                                      * For statistics: the band on which
394                                                                                      * discovery was last performed.
395                                                                                      */
396 #endif
397 
398 } scanMngr_t;
399 
400 /*
401  ***********************************************************************
402  *  External data definitions.
403  ***********************************************************************
404  */
405 
406 /*
407  ***********************************************************************
408  *  External functions definitions
409  ***********************************************************************
410  */
411 
412 /**
413  * \\n
414  * \date 01-Mar-2005\n
415  * \brief Frees scan manager resources.\n
416  *
417  * Function Scope \e Private.\n
418  * \param hScanMngr - handle to the scan manager object.\n
419  */
420 void scanMngrFreeMem (TI_HANDLE hScanMngr);
421 
422 /**
423  * \\n
424  * \date 01-Mar-2005\n
425  * \brief Starts a continuous scan operation.\n
426  *
427  * Function Scope \e Private.\n
428  * \param hScanMngr - handle to the scan manager object.\n
429  */
430 void scanMngrPerformContinuousScan( TI_HANDLE hScanMngr );
431 
432 void scanMngrGetCurrentTsfDtimMibCB(TI_HANDLE hScanMngr, TI_STATUS status, TI_UINT8* CB_buf) ;
433 void scanMngr_GetUpdatedTsfDtimMibForScan (TI_HANDLE hScanMngr, TI_BOOL bTwdInitOccured) ;
434 
435 /**
436  * \\n
437  * \date 01-Mar-2005\n
438  * \brief Perform aging on the BSS list.\n
439  *
440  * Function Scope \e Private.\n
441  * \param hScanMngr - handle to the scan manager object.\n
442  */
443 void scanMngrPerformAging( TI_HANDLE hScanMngr );
444 
445 /**
446  * \\n
447  * \date 01-Mar-2005\n
448  * \brief Updates object data according to a received frame.\n
449  *
450  * Function Scope \e Private.\n
451  * \param hScanMngr - handle to the scan manager object.\n
452  * \param frameInfo - all frame related information.\n
453  */
454 void scanMngrUpdateReceivedFrame( TI_HANDLE hScanMngr, TScanFrameInfo* frameInfo );
455 
456 /**
457  * \\n
458  * \date 17-Mar-2005\n
459  * \brief Cerate a new tracking entry and store the newly discovered AP info in it.\n
460  *
461  * Function Scope \e Private.\n
462  * \param hScanMngr - handle to the scan manager object.\n
463  * \param frameInfo - a pointer to the information received from this AP.\n
464  */
465 void scanMngrInsertNewBSSToTrackingList( TI_HANDLE hScanMngr, TScanFrameInfo* frameInfo );
466 
467 /**
468  * \\n
469  * \date 17-Mar-2005\n
470  * \brief Updates tracked AP information.\n
471  *
472  * Function Scope \e Private.\n
473  * \param hScanMngr - handle to the scan manager object.\n
474  * \param BSSListIndex - index to the BSS list where the AP information is stored.\n
475  * \param frameInfo - a pointer to the information received from this AP.\n
476  */
477 void scanMngrUpdateBSSInfo( TI_HANDLE hScanMngr, TI_UINT8 BSSListIndex, TScanFrameInfo* frameInfo );
478 
479 /**
480  * \\n
481  * \date 16-Mar-2005\n
482  * \brief Searched tracking list for an entry matching given BSSID.\n
483  *
484  * Function Scope \e Private.\n
485  * \param hScanMngr - handle to the scan manager object.\n
486  * \param bssId - the BSSID to search for.\n
487  * \return entry index if found, -1 if no entry matching the BSSID was found.\n
488  */
489 TI_INT8 scanMngrGetTrackIndexByBssid( TI_HANDLE hScanMngr, TMacAddr* bssId );
490 
491 /**
492  * \\n
493  * \date 02-Mar-2005\n
494  * \brief Search current policy for band policy
495  *
496  * Function Scope \e Private.\n
497  * \param hScanMngr - handle to the scan manager object.\n
498  * \param band - the band to find policy for.\n
499  * \return the policy structure if found, NULL if no policy configured for this band.\n
500  */
501 TScanBandPolicy* scanMngrGetPolicyByBand( TI_HANDLE hScanMngr, ERadioBand band );
502 
503 /**
504  * \\n
505  * \date 06-Mar-2005\n
506  * \brief Sets the next discovery part according to current discovery part, policies and neighbor APs availability .\n
507  *
508  * Function Scope \e Private.\n
509  * \param hScanMngr - handle to the scan manager object.\n
510  */
511 void scanMngrSetNextDiscoveryPart( TI_HANDLE hScanMngr );
512 
513 /**
514  * \\n
515  * \date 06-Mar-2005\n
516  * \brief Checks whether discovery should be performed on the specified discovery part.\n
517  *
518  * Function Scope \e Private.\n
519  * \param hScanMngr - handle to the scan manager object.\n
520  * \param discoveryPart - the discovery part to check.\n
521  */
522 TI_BOOL scanMngrIsDiscoveryValid( TI_HANDLE hScanMngr, scan_discoveryPart_e discoveryPart );
523 
524 /**
525  * \\n
526  * \date 07-Mar-2005\n
527  * \brief Check whether there are neighbor APs to track on the given band.\n
528  *
529  * Function Scope \e Private.\n
530  * \param hScanMngr - handle to the scan manager object.\n
531  * \param bandPolicy - The scan policy for the requested band.\n
532  * \param bNeighborAPsOnly - whether to scan for neighbor APs only or for all policy defined channels.\n
533  */
534 TI_BOOL scanMngrNeighborAPsAvailableForDiscovery( TI_HANDLE hScanMngr, ERadioBand band );
535 
536 /**
537  * \\n
538  * \date 02-Mar-2005\n
539  * \brief Builds a scan command on the object workspace for immediate scan.\n
540  *
541  * Function Scope \e Private.\n
542  * \param hScanMngr - handle to the scan manager object.\n
543  * \param bandPolicy - The scan policy for the requested band.\n
544  * \param bNeighborAPsOnly - whether to scan for neighbor APs only or for all policy defined channels.\n
545  */
546 void scanMngrBuildImmediateScanCommand( TI_HANDLE hScanMngr, TScanBandPolicy* bandPolicy, TI_BOOL bNeighborAPsOnly );
547 
548 /**
549  * \\n
550  * \date 03-Mar-2005\n
551  * \brief Builds a scan command on the object workspace for tracking.\n
552  *
553  * Function Scope \e Private.\n
554  * \param hScanMngr - handle to the scan manager object.\n
555  * \param bandPolicy - The scan policy for the band to track on.\n
556  * \param band - the band to scan.\n
557  */
558 void scanMngrBuildTrackScanCommand( TI_HANDLE hScanMngr, TScanBandPolicy* bandPolicy, ERadioBand band );
559 
560 /**
561  * \\n
562  * \date 03-Mar-2005\n
563  * \brief Builds a scan command on the object workspace for discovery.\n
564  *
565  * Function Scope \e Private.\n
566  * \param hScanMngr - handle to the scan manager object.\n
567  */
568 void scanMngrBuildDiscoveryScanCommand( TI_HANDLE hScanMngr );
569 
570 /**
571  * \\n
572  * \date 02-Mar-2005\n
573  * \brief Builds the scan command header on the object workspace.\n
574  *
575  * Function Scope \e Private.\n
576  * \param hScanMngr - handle to the scan manager object.\n
577  * \param scanMethod - The scan method (and parameters) to use.\n
578  * \param band - the band to scan.\n
579  */
580 void scanMngrBuildScanCommandHeader( TI_HANDLE hScanMngr, TScanMethod* scanMethod, ERadioBand band );
581 
582 /**
583  * \\n
584  * \date 06-Mar-2005\n
585  * \brief Add neighbor APs to scan command on the object workspace for discovery scan.\n
586  *
587  * Function Scope \e Private.\n
588  * \param hScanMngr - handle to the scan manager object.\n
589  * \param bandPolicy - the scan policy for the band to use.\n
590  */
591 void scanMngrAddNeighborAPsForDiscovery( TI_HANDLE hScanMngr, TScanBandPolicy* bandPolicy );
592 
593 /**
594  * \\n
595  * \date 06-Mar-2005\n
596  * \brief Add channel from policy channels list to scan command on the object workspace for discovery scan.\n
597  *
598  * Function Scope \e Private.\n
599  * \param hScanMngr - handle to the scan manager object.\n
600  * \param bandPolicy - the scan policy for the band to use.\n
601  */
602 void scanMngrAddChannelListForDiscovery( TI_HANDLE hScanMngr, TScanBandPolicy* bandPolicy );
603 
604 /**
605  * \\n
606  * \date 02-Mar-2005\n
607  * \brief Add SPS channels to scan command on the object workspace.\n
608  *
609  * Function Scope \e Private.\n
610  * \param hScanMngr - handle to the scan manager object.\n
611  * \param scanMethod - The scan method (and parameters) to use.\n
612  * \param band - the band to scan.\n
613  */
614 void scanMngrAddSPSChannels( TI_HANDLE hScanMngr, TScanMethod* scanMethod, ERadioBand band );
615 
616 /**
617  * \\n
618  * \date 07-Mar-2005\n
619  * \brief Calculates local TSF of the next event (beacon or GPR) of the given tracked AP.\n
620  *
621  * Function Scope \e Private.\n
622  * \param hScanMngr - handle to the scan manager object.\n
623  * \param BSSList - a pointer to the track list.\n
624  * \param entryIndex - the index of the AP for which calculation is requires in the tracking list.\n
625  * \param initialTSFValue - local TSF value AFTER which the next event is to found.\n
626  * \return The approximate current TSF
627  */
628 TI_UINT64 scanMngrCalculateNextEventTSF( TI_HANDLE hScanMngr, scan_BSSList_t* BSSList, TI_UINT8 entryIndex, TI_UINT64 initialTSFValue );
629 
630 /**
631  * \\n
632  * \date 20-September-2005\n
633  * \brief Check whether a time range collides with current AP DTIM
634  *
635  * Function Scope \e Private.\n
636  * \param hScanMngr - handle to the scan manager object.\n
637  * \param rangeStart - the time range start TSF.\n
638  * \param eventEnd - the time range end TSF.\n
639  * \return Whether the event collides with a DTIM (TRUF if it does, TI_FALSE if it doesn't).\n
640  */
641 TI_BOOL scanMngrDTIMInRange( TI_HANDLE hScanMngr, TI_UINT64 eventStart, TI_UINT64 eventEnd );
642 
643 /**
644  * \\n
645  * \date 03-Mar-2005\n
646  * \brief Add a normal channel entry to the object workspace scan command.\n
647  *
648  * Function Scope \e Private.\n
649  * \param hScanMngr - handle to the scan manager object.\n
650  * \param scanMethod - The scan method (and parameters) to use.\n
651  * \param channel - the channel index.\n
652  * \param BSSID - pointer to the BSSID to use (may be broadcast.\n
653  * \param txPowerDbm - Tx power to transmit probe requests.\n
654  */
655 void scanMngrAddNormalChannel( TI_HANDLE hScanMngr, TScanMethod* scanMethod, TI_UINT8 channel,
656                                TMacAddr* BSSID, TI_UINT8 txPowerDbm );
657 /**
658  * \\n
659  * \date 02-Mar-2005\n
660  * \brief Removes an entry from the BSS list (by replacing it with another entry, if any).\n
661  *
662  * Function Scope \e Private.\n
663  * \param hScanMngr - handle to the scan manager object.\n
664  * \param BSSEntryIndex - index of the entry to remove.\n
665  */
666 void scanMngrRemoveBSSListEntry( TI_HANDLE hScanMngr, TI_UINT8 BSSEntryIndex );
667 
668 /**
669  * \\n
670  * \date 02-Mar-2005\n
671  * \brief Removes all BSS list entries that are neither neighbor APs not on a policy defined channel.\n
672  *
673  * Function Scope \e Private.\n
674  * \param hScanMngr - handle to the scan manager object.\n
675  * \param bCheckNeighborAPs - whether to verify that APs marked as neighbor APs are really neighbor APs.\n
676  * \param bCheckChannels - whether to verify that APs not marked as neighbor APs are on policy defined channel.\n
677  */
678 void scanMngrUpdateBSSList( TI_HANDLE hScanMngr, TI_BOOL bCheckNeighborAPs, TI_BOOL bCheckChannels );
679 
680 /**
681  * \\n
682  * \date 02-Mar-2005\n
683  * \brief returns the index of a neighbor AP.\n
684  *
685  * Function Scope \e Private.\n
686  * \param hScanMngr - handle to the scan manager object.\n
687  * \param band - the band on which the AP resides.\n
688  * \param bssId - the AP's BSSID.\n
689  * \return the index into the neighbor AP list for the given address, -1 if AP is not in list.\n
690  */
691 TI_INT8 scanMngrGetNeighborAPIndex( TI_HANDLE hScanMngr, ERadioBand band, TMacAddr* bssId );
692 
693 /**
694  * \\n
695  * \date 02-Mar-2005\n
696  * \brief Checks whether a channel is defined on a policy.\n
697  *
698  * Function Scope \e Private.\n
699  * \param hScanMngr - handle to the scan manager object.\n
700  * \param band - the band on which the channel is.\n
701  * \param channel - the channel number.\n
702  * \return TI_TRUE if channel is defined on policy, TI_FALSE otherwise.\n
703  */
704 TI_BOOL scanMngrIsPolicyChannel( TI_HANDLE hScanMngr, ERadioBand band, TI_UINT8 channel );
705 
706 /**
707  * \\n
708  * \date 18-Apr-2005\n
709  * \brief Converts scan concentrator result status to scan manager result status, to be returned to roaming manager.\n
710  *
711  * Function Scope \e Private.\n
712  * \param result status - scan concentrator result status.\n
713  * \return appropriate scan manager status.\n
714  */
715 scan_mngrResultStatus_e scanMngrConvertResultStatus( EScanCncnResultStatus resultStatus );
716 
717 /**
718  * \\n
719  * \date 09-Mar-2005\n
720  * \brief Print a neighbor AP list.\n
721  *
722  * Function Scope \e Private.\n
723  * \param hScanMngr - handle to the scan manager object.\n
724  * \param neighborAPList - the list of neighbor APs to print
725  */
726 void scanMngrTracePrintNeighborAPsList( TI_HANDLE hScanMngr, neighborAPList_t *neighborAPList );
727 
728 /**
729  * \\n
730  * \date 09-Mar-2005\n
731  * \brief Print a neighbor AP.\n
732  *
733  * Function Scope \e Private.\n
734  * \param hScanMngr - handle to the scan manager object.\n
735  * \param neighborAP - the neighbor AP to print
736  */
737 void scanMngrTracePrintNeighborAP( TI_HANDLE hScanMngr, neighborAP_t* neighborAP );
738 
739 /**
740  * \\n
741  * \date 09-Mar-2005\n
742  * \brief Print a band scan policy AP.\n
743  *
744  * Function Scope \e Private.\n
745  * \param bandPolicy - the band scan policy to print.\n
746  */
747 void scanMngrTracePrintBandScanPolicy( TScanBandPolicy* bandPolicy );
748 
749 /**
750  * \\n
751  * \date 09-Mar-2005\n
752  * \brief Print a scan method
753  *
754  * Function Scope \e Private.\n
755  * \param scanMethod - the scan method to print.\n
756  */
757 void scanMngrTracePrintScanMethod( TScanMethod* scanMethod );
758 
759 /**
760  * \\n
761  * \date 09-Mar-2005\n
762  * \brief print a normal scan method
763  *
764  * Function Scope \e Private.\n
765  * \param basicMethodParams - the basic method parameters to print.\n
766  */
767 void scanMngrTracePrintNormalScanMethod( TScanBasicMethodParams* basicMethodParams );
768 
769 /**
770  * \\n
771  * \date 09-Mar-2005\n
772  * \brief print an AC triggered scan method
773  *
774  * Function Scope \e Private.\n
775  * \param triggeredMethodParams - the Tid-triggered method parameters to print.\n
776  */
777 void scanMngrTracePrintTriggeredScanMethod( TScanTidTriggeredMethodParams* triggeredMethodParams );
778 
779 /**
780  * \\n
781  * \date 09-Mar-2005\n
782  * \brief print a SPS scan method
783  *
784  * Function Scope \e Private.\n
785  * \param SPSMethodParams - the SPS method parameters to print.\n
786  */
787 void scanMngrTracePrintSPSScanMethod( TScanSPSMethodParams* SPSMethodParams );
788 
789 #ifdef TI_DBG
790 /**
791  * \\n
792  * \date 31-Mar-2005\n
793  * \brief print debug information for every received frame.\n
794  *
795  * Function Scope \e Private.\n
796  * \param hScanMngr - handle to the scan manager object.\n
797  * \param frameInfo - holding all frame related information.\n
798  */
799 void scanMngrDebugPrintReceivedFrame( TI_HANDLE hScanMngr, TScanFrameInfo *frameInfo );
800 
801 /**
802  * \\n
803  * \date 31-Mar-2005\n
804  * \brief print BSS list.\n
805  *
806  * Function Scope \e Private.\n
807  * \param hScanMngr - handle to the scan manager object.\n
808  */
809 void scanMngrDebugPrintBSSList( TI_HANDLE hScanMngr );
810 
811 /**
812  * \\n
813  * \date 31-Mar-2005\n
814  * \brief print one entry in the BSS list.\n
815  *
816  * Function Scope \e Private.\n
817  * \param hScanMngr - handle to the scan manager object.\n
818  * \param entryIndex - the index of the entry to print.\n
819  */
820 void scanMngrDebugPrintBSSEntry( TI_HANDLE hScanMngr, TI_UINT8 entryIndex );
821 
822 /**
823  * \\n
824  * \date 14-Apr-2005\n
825  * \brief print SPS helper list
826  *
827  * Function Scope \e Private.\n
828  * \param hScanMngr - handle to the scan manager object.\n
829  * \param spsHelperList - the list to print.\n
830  * \param arrayHead - the index of the first element in the list.\n
831  * \param arraySize - the size of the array.\n
832  */
833 void scanMngrDebugPrintSPSHelperList( TI_HANDLE hScanMngr, scan_SPSHelper_t* spsHelperList, int arrayHead, int arraySize );
834 
835 /**
836  * \\n
837  * \date 26-May-2005\n
838  * \brief Print scan result histogram statistics.\n
839  *
840  * Function Scope \e Private.\n
841  * \param scanResultHistogram - Scan results histogram (by scan complete reason).\n
842  */
843 void scanMngrStatsPrintScanResultHistogram( TI_UINT32 scanResultHistogram[] );
844 
845 /**
846  * \\n
847  * \date 26-May-2005\n
848  * \brief Print track fail count histogram statistics.\n
849  *
850  * Function Scope \e Private.\n
851  * \param trackFailHistogram - tracking failure histogram (by tracking retry).\n
852  */
853 void scanMngrStatsPrintTrackFailHistogrsm( TI_UINT32 trackFailHistogram[] );
854 
855 /**
856  * \\n
857  * \date 26-May-2005\n
858  * \brief Print SPS attendant channel histogram statistics.\n
859  *
860  * Function Scope \e Private.\n
861  * \param SPSChannelsNotAttendedHistogram - SPS channels attendant histogram.\n
862  */
863 void scanMngrStatsPrintSPSChannelsHistogram( TI_UINT32 SPSChannelsNotAttendedHistogram[] );
864 
865 /**
866  * \\n
867  * \date 25-July-2005\n
868  * \brief Print One neighbor AP entry.\n
869  *
870  * Function Scope \e Private.\n
871  * \param pNeighborAp - pointer to the neighbor AP data.\n
872  * \param discovery state - the discovery state of this neighbor AP.\n
873  */
874 void scanMngrDebugPrintNeighborAP( neighborAP_t* pNeighborAp, scan_neighborDiscoveryState_e discoveryState );
875 
876 /**
877  * \\n
878  * \date 27-July-2005\n
879  * \brief Prints a scan command.\n
880  *
881  * Function Scope \e Private.\n
882  * \param pScanParams - a pointer to the scan parameters structure.\n
883  */
884 void scanMngrDebugPrintScanCommand( TScanParams* pScanParams );
885 
886 /**
887  * \\n
888  * \date 27-July-2005\n
889  * \brief Prints scan command single normal channel.\n
890  *
891  * Function Scope \e Private.\n
892  * \param pNormalChannel - a pointer to the normal channel to print.\n
893  */
894 void scanMngrDebugPrintNormalChannelParam( TScanNormalChannelEntry* pNormalChannel );
895 
896 /**
897  * \\n
898  * \date 27-July-2005\n
899  * \brief Prints scan command single SPS channel.\n
900  *
901  * Function Scope \e Private.\n
902  * \param pSPSChannel - a pointer to the SPS channel to print.\n
903  */
904 void scanMngrDebugPrintSPSChannelParam( TScanSpsChannelEntry* pSPSChannel );
905 
906 
907 #endif /* TI_DBG */
908 
909 #endif /* __SCAN_MNGR_H__ */
910