1 /*
2 * roamingMgrDebug.c
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 reportReplvl.c
35 * \brief Report level implementation
36 *
37 * \see reportReplvl.h
38 */
39
40 /***************************************************************************/
41 /* */
42 /* MODULE: reportReplvl.c */
43 /* PURPOSE: Report level implementation */
44 /* */
45 /***************************************************************************/
46 #include "tidef.h"
47 #include "report.h"
48 #include "paramOut.h"
49 #include "roamingMgrDebug.h"
50 #include "roamingMngrApi.h"
51 #include "apConnApi.h"
52
53
54 void printRoamingMgrHelpMenu(void);
55 void PrintBssListGotAfterImemediateScan(TI_HANDLE hScanMgr);
56
57
58 /* Function implementation */
roamingMgrDebugFunction(TI_HANDLE hRoamingMngr,TI_UINT32 funcType,void * pParam)59 void roamingMgrDebugFunction(TI_HANDLE hRoamingMngr,
60 TI_UINT32 funcType,
61 void *pParam)
62 {
63 paramInfo_t param;
64
65
66 switch (funcType)
67 {
68 case ROAMING_MGR_DEBUG_HELP_MENU:
69 printRoamingMgrHelpMenu();
70 break;
71
72 case PRINT_ROAMING_STATISTICS:
73 param.paramType = ROAMING_MNGR_PRINT_STATISTICS;
74 roamingMngr_getParam(hRoamingMngr, ¶m);
75 break;
76
77 case RESET_ROAMING_STATISTICS:
78 param.paramType = ROAMING_MNGR_RESET_STATISTICS;
79 roamingMngr_getParam(hRoamingMngr, ¶m);
80 break;
81
82 case PRINT_ROAMING_CURRENT_STATUS:
83 param.paramType = ROAMING_MNGR_PRINT_CURRENT_STATUS;
84 roamingMngr_getParam(hRoamingMngr, ¶m);
85 break;
86
87 case PRINT_ROAMING_CANDIDATE_TABLE:
88 param.paramType = ROAMING_MNGR_PRINT_CANDIDATE_TABLE;
89 roamingMngr_getParam(hRoamingMngr, ¶m);
90 break;
91
92 case TRIGGER_ROAMING_LOW_QUALITY_EVENT:
93 param.paramType = ROAMING_MNGR_TRIGGER_EVENT;
94 param.content.roamingTriggerType = ROAMING_TRIGGER_LOW_QUALITY;
95 roamingMngr_setParam(hRoamingMngr, ¶m);
96 break;
97
98 case TRIGGER_ROAMING_BSS_LOSS_EVENT:
99 param.paramType = ROAMING_MNGR_TRIGGER_EVENT;
100 param.content.roamingTriggerType = ROAMING_TRIGGER_BSS_LOSS;
101 roamingMngr_setParam(hRoamingMngr, ¶m);
102 break;
103
104 case TRIGGER_ROAMING_SWITCH_CHANNEL_EVENT:
105 param.paramType = ROAMING_MNGR_TRIGGER_EVENT;
106 param.content.roamingTriggerType = ROAMING_TRIGGER_SWITCH_CHANNEL;
107 roamingMngr_setParam(hRoamingMngr, ¶m);
108 break;
109
110 case TRIGGER_ROAMING_AP_DISCONNECT_EVENT:
111 param.paramType = ROAMING_MNGR_TRIGGER_EVENT;
112 param.content.roamingTriggerType = ROAMING_TRIGGER_AP_DISCONNECT;
113 roamingMngr_setParam(hRoamingMngr, ¶m);
114 break;
115
116 case TRIGGER_ROAMING_CONNECT_EVENT:
117 param.paramType = ROAMING_MNGR_CONN_STATUS;
118 param.content.roamingConnStatus = CONN_STATUS_CONNECTED;
119 roamingMngr_setParam(hRoamingMngr, ¶m);
120 break;
121
122 case TRIGGER_ROAMING_NOT_CONNECTED_EVENT:
123 param.paramType = ROAMING_MNGR_CONN_STATUS;
124 param.content.roamingConnStatus = CONN_STATUS_NOT_CONNECTED;
125 roamingMngr_setParam(hRoamingMngr, ¶m);
126 break;
127
128 case TRIGGER_ROAMING_HANDOVER_SUCCESS_EVENT:
129 param.paramType = ROAMING_MNGR_CONN_STATUS;
130 param.content.roamingConnStatus = CONN_STATUS_HANDOVER_SUCCESS;
131 roamingMngr_setParam(hRoamingMngr, ¶m);
132 break;
133
134 case TRIGGER_ROAMING_HANDOVER_FAILURE_EVENT:
135 param.paramType = ROAMING_MNGR_CONN_STATUS;
136 param.content.roamingConnStatus = CONN_STATUS_HANDOVER_FAILURE;
137 roamingMngr_setParam(hRoamingMngr, ¶m);
138 break;
139
140 case ROAMING_REGISTER_BSS_LOSS_EVENT: /* 1613 */
141 roamingMngr_setBssLossThreshold(hRoamingMngr, 10, 1);
142 break;
143 case ROAMING_START_IMMEDIATE_SCAN: /* 1614 */
144 {
145 int i=0,j =0;
146 channelList_t channels;
147 channels.numOfChannels = 14;
148
149
150 for ( i = 0; i < channels.numOfChannels; i++ )
151 {
152 for ( j = 0; j < 6; j++ )
153 {
154 channels.channelEntry[i].normalChannelEntry.bssId[j] = 0xff;
155 }
156
157 channels.channelEntry[i].normalChannelEntry.earlyTerminationEvent = SCAN_ET_COND_DISABLE;
158 channels.channelEntry[i].normalChannelEntry.ETMaxNumOfAPframes = 0;
159 channels.channelEntry[i].normalChannelEntry.maxChannelDwellTime = 60000;
160 channels.channelEntry[i].normalChannelEntry.minChannelDwellTime = 30000;
161 channels.channelEntry[i].normalChannelEntry.txPowerDbm = DEF_TX_POWER;
162 channels.channelEntry[i].normalChannelEntry.channel = i + 1;
163 }
164
165 /* upon this call the scanMngr_reportImmediateScanResults() should be invoked and the BssList should be printed */
166 roamingMngr_startImmediateScan(hRoamingMngr, &channels);
167 }
168
169 break;
170 case ROAMING_CONNECT: /* 1615 */
171 {
172 TargetAp_t targetAP;
173 bssList_t *bssList;
174 roamingMngr_t *pRoamingMngr = (roamingMngr_t*)hRoamingMngr;
175
176 bssList = scanMngr_getBSSList(((roamingMngr_t*)hRoamingMngr)->hScanMngr);
177
178 WLAN_OS_REPORT(("Roaming connect: BSS LIST num of entries=%d \n", bssList->numOfEntries));
179 PrintBssListGotAfterImemediateScan(((roamingMngr_t*)hRoamingMngr)->hScanMngr);
180
181 /* The values below must be configured in manual mode */
182 targetAP.connRequest.requestType = AP_CONNECT_FULL_TO_AP;
183 targetAP.connRequest.dataBufLength = 0;
184 targetAP.transitionMethod = ReAssoc;
185
186 os_memoryCopy(((roamingMngr_t*)hRoamingMngr)->hOs, &(targetAP.newAP), &(bssList->BSSList[0]), sizeof(bssEntry_t));
187
188 /* test if no buffer is present */
189 targetAP.newAP.bufferLength =0;
190 targetAP.newAP.pBuffer = 0;
191 /* ----------------------------- */
192
193 os_memoryCopy(pRoamingMngr->hOs, &(pRoamingMngr->targetAP), &targetAP , sizeof(TargetAp_t));
194
195 roamingMngr_connect(hRoamingMngr, &(pRoamingMngr->targetAP));
196 }
197
198 break;
199
200 case ROAMING_START_CONT_SCAN_BY_APP: /* 1616 */
201 {
202 roamingMngr_t *pRoamingMngr = (roamingMngr_t*)hRoamingMngr;
203 int i=0,j =0;
204 channelList_t channels;
205 channels.numOfChannels = 14;
206
207 for ( i = 0; i < channels.numOfChannels; i++ )
208 {
209 for ( j = 0; j < 6; j++ )
210 {
211 channels.channelEntry[i].normalChannelEntry.bssId[j] = 0xff;
212 }
213
214 channels.channelEntry[i].normalChannelEntry.earlyTerminationEvent = SCAN_ET_COND_DISABLE;
215 channels.channelEntry[i].normalChannelEntry.ETMaxNumOfAPframes = 0;
216 channels.channelEntry[i].normalChannelEntry.maxChannelDwellTime = 60000;
217 channels.channelEntry[i].normalChannelEntry.minChannelDwellTime = 30000;
218 channels.channelEntry[i].normalChannelEntry.txPowerDbm = DEF_TX_POWER;
219 channels.channelEntry[i].normalChannelEntry.channel = i + 1;
220 }
221
222 scanMngr_startContinuousScanByApp(pRoamingMngr->hScanMngr, &channels);
223 }
224
225 break;
226
227 case ROAMING_STOP_CONT_SCAN_BY_APP:
228 {
229 roamingMngr_t *pRoamingMngr = (roamingMngr_t*)hRoamingMngr;
230 scanMngr_stopContinuousScanByApp(pRoamingMngr->hScanMngr);
231 }
232 break;
233
234
235 case RAOMING_SET_DEFAULT_SCAN_POLICY: /* 1618 */
236 {
237 int i=0;
238 roamingMngr_t *pRoamingMngr = (roamingMngr_t*)hRoamingMngr;
239 TScanPolicy scanPolicy;
240 param.paramType = SCAN_MNGR_SET_CONFIGURATION;
241 param.content.pScanPolicy = &scanPolicy;
242
243 // init default scan policy
244 scanPolicy.normalScanInterval = 10000;
245 scanPolicy.deterioratingScanInterval = 5000;
246 scanPolicy.maxTrackFailures = 3;
247 scanPolicy.BSSListSize = 4;
248 scanPolicy.BSSNumberToStartDiscovery = 1;
249 scanPolicy.numOfBands = 1;
250 scanPolicy.bandScanPolicy[ 0 ].band = RADIO_BAND_2_4_GHZ;
251 scanPolicy.bandScanPolicy[ 0 ].rxRSSIThreshold = -80;
252 scanPolicy.bandScanPolicy[ 0 ].numOfChannles = 14;
253 scanPolicy.bandScanPolicy[ 0 ].numOfChannlesForDiscovery = 3;
254
255 for ( i = 0; i < 14; i++ )
256 {
257 scanPolicy.bandScanPolicy[ 0 ].channelList[ i ] = i + 1;
258 }
259
260 scanPolicy.bandScanPolicy[ 0 ].trackingMethod.scanType = SCAN_TYPE_NORMAL_ACTIVE;
261 scanPolicy.bandScanPolicy[ 0 ].trackingMethod.method.basicMethodParams.earlyTerminationEvent = SCAN_ET_COND_DISABLE;
262 scanPolicy.bandScanPolicy[ 0 ].trackingMethod.method.basicMethodParams.ETMaxNumberOfApFrames = 0;
263 scanPolicy.bandScanPolicy[ 0 ].trackingMethod.method.basicMethodParams.maxChannelDwellTime = 30000;
264 scanPolicy.bandScanPolicy[ 0 ].trackingMethod.method.basicMethodParams.minChannelDwellTime = 15000;
265 scanPolicy.bandScanPolicy[ 0 ].trackingMethod.method.basicMethodParams.probReqParams.bitrate = RATE_MASK_UNSPECIFIED; /* Let the FW select */
266 scanPolicy.bandScanPolicy[ 0 ].trackingMethod.method.basicMethodParams.probReqParams.numOfProbeReqs = 3;
267 scanPolicy.bandScanPolicy[ 0 ].trackingMethod.method.basicMethodParams.probReqParams.txPowerDbm = DEF_TX_POWER;
268 scanPolicy.bandScanPolicy[ 0 ].discoveryMethod.scanType = SCAN_TYPE_NORMAL_ACTIVE;
269 scanPolicy.bandScanPolicy[ 0 ].discoveryMethod.method.basicMethodParams.earlyTerminationEvent = SCAN_ET_COND_DISABLE;
270 scanPolicy.bandScanPolicy[ 0 ].discoveryMethod.method.basicMethodParams.ETMaxNumberOfApFrames = 0;
271 scanPolicy.bandScanPolicy[ 0 ].discoveryMethod.method.basicMethodParams.maxChannelDwellTime = 30000;
272 scanPolicy.bandScanPolicy[ 0 ].discoveryMethod.method.basicMethodParams.minChannelDwellTime = 15000;
273 scanPolicy.bandScanPolicy[ 0 ].discoveryMethod.method.basicMethodParams.probReqParams.bitrate = RATE_MASK_UNSPECIFIED; /* Let the FW select */;
274 scanPolicy.bandScanPolicy[ 0 ].discoveryMethod.method.basicMethodParams.probReqParams.numOfProbeReqs = 3;
275 scanPolicy.bandScanPolicy[ 0 ].discoveryMethod.method.basicMethodParams.probReqParams.txPowerDbm = DEF_TX_POWER;
276 scanPolicy.bandScanPolicy[ 0 ].immediateScanMethod.scanType = SCAN_TYPE_NORMAL_ACTIVE;
277 scanPolicy.bandScanPolicy[ 0 ].immediateScanMethod.method.basicMethodParams.earlyTerminationEvent = SCAN_ET_COND_DISABLE;
278 scanPolicy.bandScanPolicy[ 0 ].immediateScanMethod.method.basicMethodParams.ETMaxNumberOfApFrames = 0;
279 scanPolicy.bandScanPolicy[ 0 ].immediateScanMethod.method.basicMethodParams.maxChannelDwellTime = 30000;
280 scanPolicy.bandScanPolicy[ 0 ].immediateScanMethod.method.basicMethodParams.minChannelDwellTime = 15000;
281 scanPolicy.bandScanPolicy[ 0 ].immediateScanMethod.method.basicMethodParams.probReqParams.bitrate = RATE_MASK_UNSPECIFIED; /* Let the FW select */;
282 scanPolicy.bandScanPolicy[ 0 ].immediateScanMethod.method.basicMethodParams.probReqParams.numOfProbeReqs = 3;
283 scanPolicy.bandScanPolicy[ 0 ].immediateScanMethod.method.basicMethodParams.probReqParams.txPowerDbm = DEF_TX_POWER;
284 /* we should noe store the scanPolicy now */
285 scanMngr_setParam(pRoamingMngr->hScanMngr, ¶m);
286
287
288 /* Enable roaming! */
289 param.paramType = ROAMING_MNGR_APPLICATION_CONFIGURATION;
290 param.content.roamingConfigBuffer.roamingMngrConfig.enableDisable = ROAMING_ENABLED;
291 roamingMngr_setParam(hRoamingMngr,¶m);
292 }
293
294 break;
295
296 case ROAMING_PRINT_MANUAL_MODE: /* 1617 */
297 WLAN_OS_REPORT(("\n ROAMING MANUAL MODE IS: %d \n",((roamingMngr_t*)hRoamingMngr)->RoamingOperationalMode));
298 break;
299
300 default:
301 WLAN_OS_REPORT(("Invalid function type in Debug Function Command, funcType= %d\n\n", funcType));
302 break;
303 }
304 }
305
306
printRoamingMgrHelpMenu(void)307 void printRoamingMgrHelpMenu(void)
308 {
309 WLAN_OS_REPORT(("\n\n Roaming Manager Debug Menu \n"));
310 WLAN_OS_REPORT(("------------------------\n"));
311
312
313 WLAN_OS_REPORT((" %02d - ROAMING_MGR_DEBUG_HELP_MENU \n", ROAMING_MGR_DEBUG_HELP_MENU));
314
315 WLAN_OS_REPORT((" %02d - PRINT_ROAMING_STATISTICS \n", PRINT_ROAMING_STATISTICS));
316 WLAN_OS_REPORT((" %02d - RESET_ROAMING_STATISTICS \n", RESET_ROAMING_STATISTICS));
317
318 WLAN_OS_REPORT((" %02d - PRINT_ROAMING_CURRENT_STATUS \n", PRINT_ROAMING_CURRENT_STATUS));
319 WLAN_OS_REPORT((" %02d - PRINT_ROAMING_CANDIDATE_TABLE \n", PRINT_ROAMING_CANDIDATE_TABLE));
320
321 WLAN_OS_REPORT((" %02d - TRIGGER_ROAMING_LOW_QUALITY_EVENT \n", TRIGGER_ROAMING_LOW_QUALITY_EVENT));
322 WLAN_OS_REPORT((" %02d - TRIGGER_ROAMING_BSS_LOSS_EVENT \n", TRIGGER_ROAMING_BSS_LOSS_EVENT));
323 WLAN_OS_REPORT((" %02d - TRIGGER_ROAMING_SWITCH_CHANNEL_EVENT \n", TRIGGER_ROAMING_SWITCH_CHANNEL_EVENT));
324 WLAN_OS_REPORT((" %02d - TRIGGER_ROAMING_AP_DISCONNECT_EVENT \n", TRIGGER_ROAMING_AP_DISCONNECT_EVENT));
325
326 WLAN_OS_REPORT((" %02d - TRIGGER_ROAMING_CONNECT_EVENT \n", TRIGGER_ROAMING_CONNECT_EVENT));
327 WLAN_OS_REPORT((" %02d - TRIGGER_ROAMING_NOT_CONNECTED_EVENT \n", TRIGGER_ROAMING_NOT_CONNECTED_EVENT));
328
329 WLAN_OS_REPORT((" %02d - TRIGGER_ROAMING_HANDOVER_SUCCESS_EVENT \n", TRIGGER_ROAMING_HANDOVER_SUCCESS_EVENT));
330 WLAN_OS_REPORT((" %02d - TRIGGER_ROAMING_HANDOVER_FAILURE_EVENT \n", TRIGGER_ROAMING_HANDOVER_FAILURE_EVENT));
331
332
333 WLAN_OS_REPORT(("\n------------------------\n"));
334 }
335
PrintBssListGotAfterImemediateScan(TI_HANDLE hScanMgr)336 void PrintBssListGotAfterImemediateScan(TI_HANDLE hScanMgr)
337 {
338 bssList_t *bssList;
339 bssEntry_t* pBssEntry;
340 int i=0;
341
342 WLAN_OS_REPORT(("------ PRINTING BSS FOUND AFTER IMMEDIATE SCAN - MANUAL MODE----------\n"));
343
344 bssList = scanMngr_getBSSList(hScanMgr);
345
346 for (i=0 ; i< bssList->numOfEntries ; i++)
347 {
348 pBssEntry = &(bssList->BSSList[i]);
349
350 WLAN_OS_REPORT( ("BSSID: %02x:%02x:%02x:%02x:%02x:%02x, band: %d\n", pBssEntry->BSSID[ 0 ],
351 pBssEntry->BSSID[ 1 ], pBssEntry->BSSID[ 2 ],
352 pBssEntry->BSSID[ 3 ], pBssEntry->BSSID[ 4 ],
353 pBssEntry->BSSID[ 5 ], pBssEntry->band));
354 WLAN_OS_REPORT( ("channel: %d, beacon interval: %d, average RSSI: %d dBm\n",
355 pBssEntry->channel, pBssEntry->beaconInterval, pBssEntry->RSSI));
356
357 }
358
359 WLAN_OS_REPORT(("-----------------------------------------------------------------------\n"));
360
361 }
362