• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /** \file ScanCncn.h
2  *  \brief This file include private definitions for the scan concentrator module.
3  *  \author Ronen Kalish
4  *  \date 30-Dec-2004
5  */
6  /****************************************************************************
7 **+-----------------------------------------------------------------------+**
8 **|                                                                       |**
9 **| Copyright(c) 1998 - 2008 Texas Instruments. All rights reserved.      |**
10 **| All rights reserved.                                                  |**
11 **|                                                                       |**
12 **| Redistribution and use in source and binary forms, with or without    |**
13 **| modification, are permitted provided that the following conditions    |**
14 **| are met:                                                              |**
15 **|                                                                       |**
16 **|  * Redistributions of source code must retain the above copyright     |**
17 **|    notice, this list of conditions and the following disclaimer.      |**
18 **|  * Redistributions in binary form must reproduce the above copyright  |**
19 **|    notice, this list of conditions and the following disclaimer in    |**
20 **|    the documentation and/or other materials provided with the         |**
21 **|    distribution.                                                      |**
22 **|  * Neither the name Texas Instruments nor the names of its            |**
23 **|    contributors may be used to endorse or promote products derived    |**
24 **|    from this software without specific prior written permission.      |**
25 **|                                                                       |**
26 **| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS   |**
27 **| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT     |**
28 **| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |**
29 **| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT  |**
30 **| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |**
31 **| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT      |**
32 **| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |**
33 **| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |**
34 **| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT   |**
35 **| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |**
36 **| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.  |**
37 **|                                                                       |**
38 **+-----------------------------------------------------------------------+**
39 ****************************************************************************/
40 
41 #ifndef __SCANCNCN_H__
42 #define __SCANCNCN_H__
43 
44 #include "osApi.h"
45 #include "MacServices_api.h"
46 #include "ScanCncnApi.h"
47 #include "fsm.h"
48 #include "ScanCncnDrvSM.h"
49 
50 
51 
52 /*
53  ***********************************************************************
54  *	Constant definitions.
55  ***********************************************************************
56  */
57 
58 /* allocation vector */
59 #define SCAN_ALLOC_OBJECT           0
60 #define SCAN_ALLOC_APP_SM           1
61 #define SCAN_ALLOC_DRV_SM           2
62 #define SCAN_ALLOC_CONT_SM          3
63 #define SCAN_ALLOC_IMMED_SM         4
64 #define SCAN_ALLOC_OID_SM			5
65 
66 /* Used in parameter: bAbortOrStop in scanConcentrator_t. */
67 #define SCAN_CNCN_ABORT         FALSE
68 #define SCAN_CNCN_STOP          TRUE
69 
70 
71 /*
72  ***********************************************************************
73  *	Enums.
74  ***********************************************************************
75  */
76 
77 /*
78  ***********************************************************************
79  *	Typedefs.
80  ***********************************************************************
81  */
82 
83 /*
84  ***********************************************************************
85  *	Structure definitions.
86  ***********************************************************************
87  */
88 
89 /** \struct scanConcentrator_t
90  * \brief This structure contains the scan concentrator object data
91  */
92 typedef struct
93 {
94     /* handles to other modules */
95     TI_HANDLE               hOS;                    /**< OS object handle */
96 	TI_HANDLE				hHalCtrl;				/**< Hal Ctrl object handle */
97     TI_HANDLE               hReport;                /**< report object handle */
98     TI_HANDLE               hRegulatoryDomain;      /**< regulatory domain object handle */
99     TI_HANDLE               hSiteManager;           /**< site manager object handle */
100     TI_HANDLE               hSCR;                   /**< SCR object handle */
101     TI_HANDLE               hMacServices;           /**< Mac SRV object handle */
102     TI_HANDLE               hAPConn;                /**< AP connection object handle */
103     TI_HANDLE               hEventSrv;              /**< Event SRV object handle */
104     TI_HANDLE               hMlme;                  /**< MLME object handle */
105     TI_HANDLE               hCtrlData;              /**< Data CTRL object handle (for retrieving current BSSID) */
106 	TI_HANDLE				hHealthMonitor;			/**< Health Monitor , Originally at scanSrv */
107 
108     /* Scan complete callbacks */
109     scan_resultCB_t         scanResultCB[ SCAN_SCC_NUM_OF_CLIENTS ];          /**<
110                                                                                * scan complete callback function
111                                                                                * pointers, for various clients
112                                                                                */
113     TI_HANDLE               scanResultCBObj[ SCAN_SCC_NUM_OF_CLIENTS ];       /**<
114                                                                                * scan complete callback objects,
115                                                                                * for various clients
116                                                                                */
117     scan_cncnResultStatus_e scanResult[ SCAN_SCC_NUM_OF_CLIENTS ];            /**<
118                                                                                * clients' scan results, used to
119                                                                                * keep information when abort or
120                                                                                * stop or requested or a FW reset
121                                                                                * occurs
122                                                                                */
123     UINT16                  SPSScanResult;                                    /**<
124                                                                                * Indicated which channels were
125                                                                                * actually scanned (valid only
126                                                                                * for SPS scan */
127 
128     /* state machines */
129     fsm_stateMachine_t*     clientSM[ SCAN_SCC_NUM_OF_CLIENTS ];              /**<
130                                                                                * state machines for different
131                                                                                * scan types
132                                                                                */
133     UINT8                   clientSMState[ SCAN_SCC_NUM_OF_CLIENTS ];         /**<
134                                                                                * state machine current states
135                                                                                * for different scan types
136                                                                                */
137 
138     /* Scan requests */
139     scan_CncnClient_e       currentRunningScanClient;                         /**<
140                                                                                * the current client for which
141                                                                                * a scan is in progress
142                                                                                */
143     scan_Params_t           clientScanParams[ SCAN_SCC_NUM_OF_CLIENTS ];      /**<
144                                                                                * scan parameters copy for
145                                                                                * different clients
146                                                                                */
147     scan_Type_e             drvScanRequestType;                               /**<
148                                                                                * the scan type requested by the
149                                                                                * driver scan. Saved if a passive
150                                                                                * scan is done before the requested
151                                                                                * scan type
152                                                                                */
153     ssid_t                  drvScanSsid;                                      /**<
154                                                                                * the desired SSID requested by the
155                                                                                * driver scan. Saved to allow replacing
156                                                                                * original with broadcast for passive
157                                                                                * scan, to find country IE in any beacon
158                                                                                */
159     UINT32                  drvScanMinDwellTime[ SCAN_MAX_NUM_OF_NORMAL_CHANNELS_PER_COMMAND ];
160                                                                               /**<
161                                                                                * The min dwell time for all channels
162                                                                                * requested by driver scan. Saved if a
163                                                                                * passive scan is performed before the
164                                                                                *requested scan type.
165                                                                                */
166     UINT32                  drvScanMaxDwellTime[ SCAN_MAX_NUM_OF_NORMAL_CHANNELS_PER_COMMAND ];
167                                                                               /**<
168                                                                                * The max dwell time for all channels
169                                                                                * requested by driver scan. Saved if a
170                                                                                * passive scan is performed before the
171                                                                                *requested scan type.
172                                                                                */
173     BOOLEAN                 bAbortOrStop;                                     /**<
174                                                                                * FLASE if the cancel reason is
175                                                                                * abort (from SCR), TRUE if stop
176                                                                                * (from requesting client)
177                                                                                */
178     BOOLEAN                 bInRequest;                                       /**<
179                                                                                * Indicates whether the SM is run
180                                                                                * within the scan request context
181                                                                                * (if so, to avoid re-entrance,
182                                                                                * the complete function shouldn't
183                                                                                * be called on failure, but rather
184                                                                                * an invalid status should be returned)
185                                                                                */
186     BOOLEAN					bUseSGParams;									  /**<
187 																			   * Indicates whether to use the new params
188 																			   * of the soft gemini module. This parameter
189 																			   * is TRUE when SG is enabled and FALSE otherwise
190 																			   */
191 	UINT32					SGcompensationPercent;		 					  /**<
192 																			   * the percentage of increasing the dwell time
193 																			   * on each channel when SG is enabled (that is
194 																			   * bUseSGParams == TRUE)
195 																			   */
196 	UINT32					SGcompensationMaxTime;							  /**<
197 																			   * maximum time in microsecond from which we
198 																			   * won't increase the dwelling time on the
199 																			   * channel when SG is enabled
200 																			   */
201 	UINT8					SGnumOfProbeRequest;							  /**<
202 																			   * number of Probes to send
203 																			   * when SG is enabled
204 																			   */
205 
206     /* connection status */
207     connectionStatus_e      connectionStatus;   /**< the current connection status - connected / not connected / IBSS */
208     scanConcentratorInitParams_t    initParams; /**<
209                                                  * parameters read from the registry (min and max dwell time
210                                                  * for driver passive scan
211                                                  */
212 /* OID scan SM */
213 	fsm_stateMachine_t*		hOidSM;				/**< Handle to the OID scan SM - patch for WinCE support */
214 	UINT8				    oidSMState;			/**< current state for the OID scan SM - patch for WinCE support */
215 	scan_Params_t			oidScanParams;		/**< Storage spcae for OID scan parameters */
216 	BOOLEAN					bOidScanRunning;	/**< Inidcates whether an OID scan is currently taking place */
217 	UINT32					oidScanLastTimeStamp; /**< The last time at which an OID scan was performed */
218 } scanConcentrator_t;
219 
220 /*
221  ***********************************************************************
222  *	External data definitions.
223  ***********************************************************************
224  */
225 
226 /*
227  ***********************************************************************
228  *	External functions definitions
229  ***********************************************************************
230  */
231 
232 /**
233  * \author Ronen Kalish\n
234  * \date 05-Jan-2005\n
235  * \brief Frees the scan concentrator memory, according to the init vector.
236  *
237  * Function Scope \e Public.\n
238  * \param hScanCncn - handle to the scan concentrator object.\n
239  * \param initVec - a vector holding on bits for allocated components and off bits for non allocated components
240  */
241 void scanConcentrator_freeMem( TI_HANDLE hScanCncn, UINT16 initVec );
242 
243 /**
244  * \author Ronen Kalish\n
245  * \date 09-Jan-2005\n
246  * \brief Verifies that specified channels are allowed for the specified scan type, and removes those that are not.\n
247  *
248  * Function Scope \e Private.\n
249  * \param hScanCncn - handle to the scan concentrator object.\n
250  * \param pScanParams - a pointer to the structure holding the scan params (inc. channels and scan type)
251  */
252 void scanConcentrator_verifyChannelsWithRegDomain( TI_HANDLE hScanCncn, scan_Params_t* pScanParams );
253 
254 /**
255  * \author Ronen Kalish\n
256  * \date 09-Jan-2005\n
257  * \brief Verifies if a certain channel is allowed according to the given bitmap.\n
258  *
259  * Function Scope \e Private.\n
260  * \param hScanCncn - handle to the scan concentrator object.\n
261  * \param pScanParams - a pointer to the structure holding the scan params (inc. channels and scan type)
262  * \return TRUE if the channel is allowed, FALSE otherwise.\n
263  */
264 BOOLEAN scanConcentrator_isChannelAllowed( UINT8 channel, UINT8* pChannelBitmap );
265 
266 /**
267  * \author Ronen Kalish\n
268  * \date 10-Jan-2005\n
269  * \brief Extracts channel indexes from the bitmap to the list.
270  *
271  * Function Scope \e Private.\n
272  * \param band - the band at which the scan is to be performed (to limit max channel number)
273  * \param pChannelBitmap - the channel bitmap (input).\n
274  * \param pChannelBitmap - the channel list (output).\n
275  * \param pNumOfChannels - the number of channels (input - size of channel list, output - actual number of channels).\n
276  */
277 void scanConcentrator_ExtractBitmapToList( radioBand_e band, UINT8* pChannelBitmap,
278                                            UINT8* pChannelList, UINT8* pNumOfChannels );
279 
280 #endif /* __SCANCNCN_H__ */
281