Home | History | Annotate | Download | only in Test
      1 /*
      2  * smeDebug.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 smeDbg.c
     35  *  \brief This file include the SME debug module implementation
     36  *  \
     37  *  \date 13-February-2006
     38  */
     39 
     40 #include "smePrivate.h"
     41 #include "smeDebug.h"
     42 #include "report.h"
     43 
     44 void printSmeDbgFunctions (void);
     45 void sme_dbgPrintObject (TI_HANDLE hSme);
     46 void sme_printStats (TI_HANDLE hSme);
     47 void sme_resetStats(TI_HANDLE hSme);
     48 void sme_printBssidList(TI_HANDLE hSme);
     49 
     50 #define CHAN_FREQ_TABLE_SIZE        (sizeof(ChanFreq) / sizeof(struct CHAN_FREQ))
     51 
     52 struct  CHAN_FREQ {
     53     unsigned char  chan;
     54     unsigned long  freq;
     55 } ChanFreq[] = {
     56     {1,2412000}, {2,2417000}, {3,2422000}, {4,2427000},
     57     {5,2432000}, {6,2437000}, {7,2442000}, {8,2447000},
     58     {9,2452000},
     59     {10,2457000}, {11,2462000}, {12,2467000}, {13,2472000},
     60     {14,2484000}, {36,5180000}, {40,5200000}, {44,5220000},
     61     {48,5240000}, {52,5260000}, {56,5280000}, {60,5300000},
     62     {64,5320000},
     63     {100,5500000}, {104,5520000}, {108,5540000}, {112,5560000},
     64     {116,5580000}, {120,5600000}, {124,5620000}, {128,5640000},
     65     {132,5660000}, {136,5680000}, {140,5700000}, {149,5745000},
     66     {153,5765000}, {157,5785000}, {161,5805000} };
     67 
     68 TI_UINT32 scanResultTable_CalculateBssidListSize (TI_HANDLE hScanResultTable, TI_BOOL bAllVarIes);
     69 TI_STATUS scanResultTable_GetBssidList (TI_HANDLE hScanResultTable,
     70                                         OS_802_11_BSSID_LIST_EX *pBssidList,
     71                                         TI_UINT32 *pLength,
     72                                         TI_BOOL bAllVarIes);
     73 
     74 /**
     75  * \fn     smeDebugFunction
     76  * \brief  Main SME debug function
     77  *
     78  * Main SME debug function
     79  *
     80  * \param  hSme - handle to the SME object
     81  * \param  funcType - the specific debug function
     82  * \param  pParam - parameters for the debug function
     83  * \return None
     84  */
     85 void smeDebugFunction (TI_HANDLE hSme, TI_UINT32 funcType, void *pParam)
     86 {
     87     switch (funcType)
     88     {
     89     case DBG_SME_PRINT_HELP:
     90         printSmeDbgFunctions();
     91         break;
     92 
     93     case DBG_SME_PRINT_OBJECT:
     94         sme_dbgPrintObject( hSme );
     95         break;
     96 
     97     case DBG_SME_PRINT_STATS:
     98         sme_printStats( hSme );
     99         break;
    100 
    101     case DBG_SME_CLEAR_STATS:
    102         sme_resetStats( hSme );
    103         break;
    104 
    105    case DBG_SME_BSSID_LIST:
    106 	sme_printBssidList( hSme );
    107 	break;
    108 
    109 	default:
    110    		WLAN_OS_REPORT(("Invalid function type in SME debug function: %d\n", funcType));
    111         break;
    112     }
    113 }
    114 
    115 int sme_strlen(char *s)
    116 {
    117     int x=0;
    118     while (*s++)
    119         x++;
    120     return(x);
    121 }
    122 
    123 
    124 char* sme_strcpy(char *s1,char *s2)
    125 {
    126     while (*s2)
    127     {
    128         *s1++ = *s2++;
    129     }
    130     *s1 = '\0';
    131 
    132 	return s1;
    133 }
    134 
    135 
    136 int sme_memcmp(char* s1, char* s2, int n)
    137 {
    138 	while(n-- > 0 && *s1 == *s2)
    139 		s1++, s2++;
    140 
    141 	return( n < 0 ? 0 : *s1 - *s2 );
    142 }
    143 
    144 
    145 
    146 
    147 /**
    148  * \fn     printSmeDbgFunctions
    149  * \brief  Print the SME debug menu
    150  *
    151  * Print the SME debug menu
    152  *
    153  * \param  hSme - handle to the SME object
    154  * \return None
    155  */
    156 void printSmeDbgFunctions(void)
    157 {
    158     WLAN_OS_REPORT(("   SME Debug Functions   \n"));
    159 	WLAN_OS_REPORT(("-------------------------\n"));
    160 	WLAN_OS_REPORT(("1900 - Print the SME Debug Help\n"));
    161 	WLAN_OS_REPORT(("1901 - Print the SME object\n"));
    162 	WLAN_OS_REPORT(("1902 - Print the SME statistics\n"));
    163     WLAN_OS_REPORT(("1903 - Reset the SME statistics\n"));
    164 	WLAN_OS_REPORT(("1904 - Print BSSID list\n"));
    165 }
    166 
    167 #ifdef REPORT_LOG
    168 static TI_UINT8 Freq2Chan(TI_UINT32 freq)
    169 {
    170     TI_UINT32 i;
    171 
    172     for(i=0; i<CHAN_FREQ_TABLE_SIZE; i++)
    173         if(ChanFreq[i].freq == freq)
    174             return ChanFreq[i].chan;
    175 
    176     return 0;
    177 }
    178 #endif
    179 
    180 static void PrintBssidList(OS_802_11_BSSID_LIST_EX* bssidList, TI_UINT32 IsFullPrint, TMacAddr CurrentBssid)
    181 {
    182     TI_UINT32 i;
    183     TI_INT8  connectionTypeStr[50];
    184     POS_802_11_BSSID_EX pBssid = &bssidList->Bssid[0];
    185 
    186     WLAN_OS_REPORT(("BssId List: Num=%u\n", bssidList->NumberOfItems));
    187     WLAN_OS_REPORT(("         MAC        Privacy Rssi  Mode    Channel    SSID\n"));
    188     for(i=0; i<bssidList->NumberOfItems; i++)
    189     {
    190         switch (pBssid->InfrastructureMode)
    191         {
    192             case os802_11IBSS:
    193                 sme_strcpy (connectionTypeStr, "Adhoc");
    194                 break;
    195             case os802_11Infrastructure:
    196                 sme_strcpy (connectionTypeStr, "Infra");
    197                 break;
    198             case os802_11AutoUnknown:
    199                 sme_strcpy (connectionTypeStr, "Auto");
    200                 break;
    201             default:
    202                 sme_strcpy (connectionTypeStr, " --- ");
    203                 break;
    204         }
    205         WLAN_OS_REPORT(("%s%02x.%02x.%02x.%02x.%02x.%02x   %3u   %4d   %s %6d       %s\n",
    206             (!sme_memcmp(CurrentBssid, pBssid->MacAddress, MAC_ADDR_LEN))?"*":" ",
    207             pBssid->MacAddress[0],
    208             pBssid->MacAddress[1],
    209             pBssid->MacAddress[2],
    210             pBssid->MacAddress[3],
    211             pBssid->MacAddress[4],
    212             pBssid->MacAddress[5],
    213             pBssid->Privacy,
    214             pBssid->Rssi,
    215             connectionTypeStr,
    216             Freq2Chan(pBssid->Configuration.Union.channel),
    217             (pBssid->Ssid.Ssid[0] == '\0')?(TI_INT8*)"****":((TI_INT8*)pBssid->Ssid.Ssid) ));
    218 
    219         if (IsFullPrint)
    220         {
    221             WLAN_OS_REPORT(("   BeaconInterval %d\n",  pBssid->Configuration.BeaconPeriod));
    222             WLAN_OS_REPORT(("   Capabilities   0x%x\n",  pBssid->Capabilities));
    223         }
    224 #ifdef _WINDOWS /*temp fix until bringing the dual OS fix*/
    225 		pBssid = (POS_802_11_BSSID_EX)((TI_INT8*)pBssid + (pBssid->Length ? pBssid->Length : sizeof(OS_802_11_BSSID_EX)));
    226 #else /*for Linux*/
    227 		pBssid = &bssidList->Bssid[i+1];
    228 #endif
    229     }
    230 }
    231 
    232 void sme_printBssidList(TI_HANDLE hSme)
    233 {
    234 	TSme* sme = (TSme*) hSme;
    235 	TI_UINT32 length;
    236 	TI_UINT8* blist;
    237 	TMacAddr temp_bssid = {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
    238 
    239 	length = scanResultTable_CalculateBssidListSize (sme->hScanResultTable, TI_FALSE);
    240 
    241 	blist = os_memoryAlloc(NULL, length);
    242 
    243 	if(!blist)
    244     {
    245 		WLAN_OS_REPORT(("ERROR. sme_printBssidList(): Cannot allocate memory!! length = %d\n", length));
    246 		return;
    247 	}
    248 
    249 	scanResultTable_GetBssidList (sme->hScanResultTable, (POS_802_11_BSSID_LIST_EX)blist, &length, TI_FALSE);
    250 
    251 	PrintBssidList((OS_802_11_BSSID_LIST_EX*)blist, 0, temp_bssid);
    252 
    253 	os_memoryFree(NULL, blist, length);
    254 }
    255 
    256 /**
    257  * \fn     sme_dbgPrintObject
    258  * \brief  Print the SME object
    259  *
    260  * Print the SME object
    261  *
    262  * \param  hSme - handle to the SME object
    263  * \return None
    264  */
    265 void sme_dbgPrintObject (TI_HANDLE hSme)
    266 {
    267     WLAN_OS_REPORT(("Not yet implemented!\n"));
    268 }
    269 
    270 /**
    271  * \fn     sme_printStats
    272  * \brief  Print the SME statistics
    273  *
    274  * Print the SME statistics
    275  *
    276  * \param  hSme - handle to the SME object
    277  * \return None
    278  */
    279 void sme_printStats (TI_HANDLE hSme)
    280 {
    281     WLAN_OS_REPORT(("Not yet implemented!\n"));
    282 }
    283 
    284 /**
    285  * \fn     sme_resetStats
    286  * \brief  Reset the SME statistics
    287  *
    288  * Reset the SME statistics
    289  *
    290  * \param  hSme - handle to the SME object
    291  * \return None
    292  */
    293 void sme_resetStats(TI_HANDLE hSme)
    294 {
    295     WLAN_OS_REPORT(("Not yet implemented!\n"));
    296 }
    297 
    298