/* * smeDebug.c * * Copyright(c) 1998 - 2009 Texas Instruments. All rights reserved. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * Neither the name Texas Instruments nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /** \file smeDbg.c * \brief This file include the SME debug module implementation * \ * \date 13-February-2006 */ #include "smePrivate.h" #include "smeDebug.h" #include "report.h" void printSmeDbgFunctions (void); void sme_dbgPrintObject (TI_HANDLE hSme); void sme_printStats (TI_HANDLE hSme); void sme_resetStats(TI_HANDLE hSme); void sme_printBssidList(TI_HANDLE hSme); #define CHAN_FREQ_TABLE_SIZE (sizeof(ChanFreq) / sizeof(struct CHAN_FREQ)) struct CHAN_FREQ { unsigned char chan; unsigned long freq; } ChanFreq[] = { {1,2412000}, {2,2417000}, {3,2422000}, {4,2427000}, {5,2432000}, {6,2437000}, {7,2442000}, {8,2447000}, {9,2452000}, {10,2457000}, {11,2462000}, {12,2467000}, {13,2472000}, {14,2484000}, {36,5180000}, {40,5200000}, {44,5220000}, {48,5240000}, {52,5260000}, {56,5280000}, {60,5300000}, {64,5320000}, {100,5500000}, {104,5520000}, {108,5540000}, {112,5560000}, {116,5580000}, {120,5600000}, {124,5620000}, {128,5640000}, {132,5660000}, {136,5680000}, {140,5700000}, {149,5745000}, {153,5765000}, {157,5785000}, {161,5805000} }; TI_UINT32 scanResultTable_CalculateBssidListSize (TI_HANDLE hScanResultTable, TI_BOOL bAllVarIes); TI_STATUS scanResultTable_GetBssidList (TI_HANDLE hScanResultTable, OS_802_11_BSSID_LIST_EX *pBssidList, TI_UINT32 *pLength, TI_BOOL bAllVarIes); /** * \fn smeDebugFunction * \brief Main SME debug function * * Main SME debug function * * \param hSme - handle to the SME object * \param funcType - the specific debug function * \param pParam - parameters for the debug function * \return None */ void smeDebugFunction (TI_HANDLE hSme, TI_UINT32 funcType, void *pParam) { switch (funcType) { case DBG_SME_PRINT_HELP: printSmeDbgFunctions(); break; case DBG_SME_PRINT_OBJECT: sme_dbgPrintObject( hSme ); break; case DBG_SME_PRINT_STATS: sme_printStats( hSme ); break; case DBG_SME_CLEAR_STATS: sme_resetStats( hSme ); break; case DBG_SME_BSSID_LIST: sme_printBssidList( hSme ); break; default: WLAN_OS_REPORT(("Invalid function type in SME debug function: %d\n", funcType)); break; } } int sme_strlen(char *s) { int x=0; while (*s++) x++; return(x); } char* sme_strcpy(char *s1,char *s2) { while (*s2) { *s1++ = *s2++; } *s1 = '\0'; return s1; } int sme_memcmp(char* s1, char* s2, int n) { while(n-- > 0 && *s1 == *s2) s1++, s2++; return( n < 0 ? 0 : *s1 - *s2 ); } /** * \fn printSmeDbgFunctions * \brief Print the SME debug menu * * Print the SME debug menu * * \param hSme - handle to the SME object * \return None */ void printSmeDbgFunctions(void) { WLAN_OS_REPORT((" SME Debug Functions \n")); WLAN_OS_REPORT(("-------------------------\n")); WLAN_OS_REPORT(("1900 - Print the SME Debug Help\n")); WLAN_OS_REPORT(("1901 - Print the SME object\n")); WLAN_OS_REPORT(("1902 - Print the SME statistics\n")); WLAN_OS_REPORT(("1903 - Reset the SME statistics\n")); WLAN_OS_REPORT(("1904 - Print BSSID list\n")); } #ifdef REPORT_LOG static TI_UINT8 Freq2Chan(TI_UINT32 freq) { TI_UINT32 i; for(i=0; i<CHAN_FREQ_TABLE_SIZE; i++) if(ChanFreq[i].freq == freq) return ChanFreq[i].chan; return 0; } #endif static void PrintBssidList(OS_802_11_BSSID_LIST_EX* bssidList, TI_UINT32 IsFullPrint, TMacAddr CurrentBssid) { TI_UINT32 i; TI_INT8 connectionTypeStr[50]; POS_802_11_BSSID_EX pBssid = &bssidList->Bssid[0]; WLAN_OS_REPORT(("BssId List: Num=%u\n", bssidList->NumberOfItems)); WLAN_OS_REPORT((" MAC Privacy Rssi Mode Channel SSID\n")); for(i=0; i<bssidList->NumberOfItems; i++) { switch (pBssid->InfrastructureMode) { case os802_11IBSS: sme_strcpy (connectionTypeStr, "Adhoc"); break; case os802_11Infrastructure: sme_strcpy (connectionTypeStr, "Infra"); break; case os802_11AutoUnknown: sme_strcpy (connectionTypeStr, "Auto"); break; default: sme_strcpy (connectionTypeStr, " --- "); break; } WLAN_OS_REPORT(("%s%02x.%02x.%02x.%02x.%02x.%02x %3u %4d %s %6d %s\n", (!sme_memcmp(CurrentBssid, pBssid->MacAddress, MAC_ADDR_LEN))?"*":" ", pBssid->MacAddress[0], pBssid->MacAddress[1], pBssid->MacAddress[2], pBssid->MacAddress[3], pBssid->MacAddress[4], pBssid->MacAddress[5], pBssid->Privacy, pBssid->Rssi, connectionTypeStr, Freq2Chan(pBssid->Configuration.Union.channel), (pBssid->Ssid.Ssid[0] == '\0')?(TI_INT8*)"****":((TI_INT8*)pBssid->Ssid.Ssid) )); if (IsFullPrint) { WLAN_OS_REPORT((" BeaconInterval %d\n", pBssid->Configuration.BeaconPeriod)); WLAN_OS_REPORT((" Capabilities 0x%x\n", pBssid->Capabilities)); } #ifdef _WINDOWS /*temp fix until bringing the dual OS fix*/ pBssid = (POS_802_11_BSSID_EX)((TI_INT8*)pBssid + (pBssid->Length ? pBssid->Length : sizeof(OS_802_11_BSSID_EX))); #else /*for Linux*/ pBssid = &bssidList->Bssid[i+1]; #endif } } void sme_printBssidList(TI_HANDLE hSme) { TSme* sme = (TSme*) hSme; TI_UINT32 length; TI_UINT8* blist; TMacAddr temp_bssid = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF}; length = scanResultTable_CalculateBssidListSize (sme->hScanResultTable, TI_FALSE); blist = os_memoryAlloc(NULL, length); if(!blist) { WLAN_OS_REPORT(("ERROR. sme_printBssidList(): Cannot allocate memory!! length = %d\n", length)); return; } scanResultTable_GetBssidList (sme->hScanResultTable, (POS_802_11_BSSID_LIST_EX)blist, &length, TI_FALSE); PrintBssidList((OS_802_11_BSSID_LIST_EX*)blist, 0, temp_bssid); os_memoryFree(NULL, blist, length); } /** * \fn sme_dbgPrintObject * \brief Print the SME object * * Print the SME object * * \param hSme - handle to the SME object * \return None */ void sme_dbgPrintObject (TI_HANDLE hSme) { WLAN_OS_REPORT(("Not yet implemented!\n")); } /** * \fn sme_printStats * \brief Print the SME statistics * * Print the SME statistics * * \param hSme - handle to the SME object * \return None */ void sme_printStats (TI_HANDLE hSme) { WLAN_OS_REPORT(("Not yet implemented!\n")); } /** * \fn sme_resetStats * \brief Reset the SME statistics * * Reset the SME statistics * * \param hSme - handle to the SME object * \return None */ void sme_resetStats(TI_HANDLE hSme) { WLAN_OS_REPORT(("Not yet implemented!\n")); }