/* * scrDbg.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 scrDbg.c * \brief This file include the SCR debug module implementation * * \see scrDbg.h, scrApi.h */ #include "tidef.h" #include "scrDbg.h" #include "osApi.h" #include "report.h" #define MAX_DESC_LENGTH 50 char clientDesc[ SCR_CID_NO_CLIENT + 1 ][ MAX_DESC_LENGTH ] = { "SCR_CID_APP_SCAN", "SCR_CID_DRIVER_FG_SCAN", "SCR_CID_CONT_SCAN", "SCR_CID_XCC_MEASURE", "SCR_CID_BASIC_MEASURE", "SCR_CID_CONNECT", "SCR_CID_IMMED_SCAN", "SCR_CID_SWITCH_CHAN", "SCR_CID_NUM_OF_CLIENTS", "SCR_CID_NO_CLIENT" }; char requestStatusDesc[ 4 ][ MAX_DESC_LENGTH ] = { "SCR_CRS_RUN", "SCR_CRS_PEND", "SCR_CRS_ABORT", "SCR_CRS_FW_RESET" }; char pendReasonDesc[ SCR_PR_NONE + 1 ][ MAX_DESC_LENGTH ] = { "SCR_PR_OTHER_CLIENT_ABORTING", "SCR_PR_OTHER_CLIENT_RUNNING", "SCR_PR_DIFFERENT_GROUP_RUNNING", "SCR_PR_NONE" }; char groupDesc[ SCR_GID_NUM_OF_GROUPS ][ MAX_DESC_LENGTH ] = { "SCR_GID_IDLE", "SCR_GID_DRV_SCAN", "SCR_GID_APP_SCAN", "SCR_GID_CONNECT", "SCR_GID_CONNECTED", "SCR_GID_ROAMING" }; char stateDesc[ SCR_CS_ABORTING + 1 ][ MAX_DESC_LENGTH ] = { "SCR_CS_IDLE", "SCR_CS_PENDING", "SCR_CS_RUNNING", "SCR_CS_ABORTING" }; char modeDesc[ SCR_MID_NUM_OF_MODES][ MAX_DESC_LENGTH ] = { "SCR_MID_NORMAL", "SCR_MID_SG", }; char resourceDesc[ SCR_RESOURCE_NUM_OF_RESOURCES ][ MAX_DESC_LENGTH ]= { "SCR_RESOURCE_SERVING_CHANNEL", "SCR_RESOURCE_PERIODIC_SCAN" }; /** * \\n * \date 01-May-2005\n * \brief Main SCR debug function * * Function Scope \e Public.\n * \param hScr - handle to the SCR object.\n * \param funcType - the specific debug function.\n * \param pParam - parameters for the debug function.\n */ void scrDebugFunction( TI_HANDLE hScr, TI_UINT32 funcType, void *pParam ) { switch (funcType) { case DBG_SCR_PRINT_HELP: printScrDbgFunctions(); break; case DBG_SCR_CLIENT_REQUEST_SERVING_CHANNEL: requestAsClient( hScr, *((EScrClientId*)pParam), SCR_RESOURCE_SERVING_CHANNEL ); break; case DBG_SCR_CLIENT_RELEASE_SERVING_CHANNEL: releaseAsClient( hScr, *((EScrClientId*)pParam), SCR_RESOURCE_SERVING_CHANNEL ); break; case DBG_SCR_CLIENT_REQUEST_PERIODIC_SCAN: requestAsClient( hScr, *((EScrClientId*)pParam), SCR_RESOURCE_PERIODIC_SCAN ); break; case DBG_SCR_CLIENT_RELEASE_PERIODIC_SCAN: releaseAsClient( hScr, *((EScrClientId*)pParam), SCR_RESOURCE_PERIODIC_SCAN ); break; case DBG_SCR_SET_GROUP: changeGroup( hScr, *((EScrGroupId*)pParam) ); break; case DBG_SCR_PRINT_OBJECT: printSCRObject( hScr ); break; case DBG_SCR_SET_MODE: changeMode(hScr, *((EScrModeId*)pParam)); break; default: WLAN_OS_REPORT(("Invalid function type in SCR debug function: %d\n", funcType)); break; } } /** * \\n * \date 01-May-2005\n * \brief Prints SCR debug menu * * Function Scope \e Public.\n */ void printScrDbgFunctions(void) { WLAN_OS_REPORT((" SCR Debug Functions \n")); WLAN_OS_REPORT(("-------------------------\n")); WLAN_OS_REPORT(("1700 - Print the SCR Debug Help\n")); WLAN_OS_REPORT(("1701 <client> - Request SCR as one shot scan (set client 0-7).\n")); WLAN_OS_REPORT(("1702 <client> - Release SCR as one shot scan (set client 0-7).\n")); WLAN_OS_REPORT(("1703 <client> - Request SCR as periodic scan (set client 0-7).\n")); WLAN_OS_REPORT(("1704 <client> - Release SCR as periodic scan (set client 0-7).\n")); WLAN_OS_REPORT(("1705 - Change SCR group\n")); WLAN_OS_REPORT(("1706 - Print SCR object\n")); WLAN_OS_REPORT(("1707 - Change SCR mode\n")); } /** * \\n * \date 29-March-2005\n * \brief Request the SCR with a given client ID.\n * * Function Scope \e Public.\n * \param hScr - handle to the SCR object.\n * \param client - the client to request as.\n\ * \param eResource - the requested resource.\n */ void requestAsClient( TI_HANDLE hScr, EScrClientId client, EScrResourceId eResource ) { EScePendReason pendReason; EScrClientRequestStatus requestStatus; requestStatus = scr_clientRequest( hScr, client, eResource, &pendReason ); WLAN_OS_REPORT(("Resource %s was requested as client %s, result %s, pend reason %s\n", resourceDesc[ eResource ], clientDesc[ client ], requestStatusDesc[ requestStatus ], pendReasonDesc[ pendReason ])); } /** * \\n * \date 01-May-2005\n * \brief Stops continuous scan process.\n * * Function Scope \e Public.\n * \param hScr - handle to the SCR object.\n * \param client - the client to release as.\n * \param eResource - the released resource.\n */ void releaseAsClient( TI_HANDLE hScr, EScrClientId client, EScrResourceId eResource ) { scr_clientComplete( hScr, client, eResource ); WLAN_OS_REPORT(("Resource %s was released as client %s\n", resourceDesc[ eResource ], clientDesc[ client ])); } /** * \\n * \date 01-May-2005\n * \brief Change the SCR group.\n * * Function Scope \e Public.\n * \param hScr - handle to the SCR object.\n * \param group - the group to change to.\n */ void changeGroup( TI_HANDLE hScr, EScrGroupId group ) { scr_setGroup( hScr, group ); WLAN_OS_REPORT(("SCR group was changed to %s\n", groupDesc[ group ])); } /** * \\n * \date 23-Nov-2005\n * \brief Change the SCR mode.\n * * Function Scope \e Public.\n * \param hScr - handle to the SCR object.\n * \param mode - the mode to change to.\n */ void changeMode( TI_HANDLE hScr, EScrModeId mode ) { scr_setMode( hScr, mode ); WLAN_OS_REPORT(("SCR mode was changed to %s\n", modeDesc[ mode ])); } /** * \\n * \date 15-June-2005\n * \brief Prints the SCR object.\n * * Function Scope \e Public.\n * \param hScr - handle to the SCR object.\n */ void printSCRObject( TI_HANDLE hScr ) { #ifdef REPORT_LOG TScr* pScr = (TScr*)hScr; int i; WLAN_OS_REPORT( ("SCR current group:%s, mode: %s, serving channel owner:%s, periodic scan owner: %s " "within request:%s\n", groupDesc[ pScr->currentGroup ],modeDesc[ pScr->currentMode ], clientDesc[ pScr->runningClient[ SCR_RESOURCE_SERVING_CHANNEL ] ], clientDesc[ pScr->runningClient[ SCR_RESOURCE_PERIODIC_SCAN ] ], (TI_TRUE == pScr->statusNotficationPending ? "Yes" : "No" )) ); WLAN_OS_REPORT( ("%-22s %-15s %-15s %-15s %-15s\n", "Client", "State (SC)", "State (PS)", "Pend Reason (SC)", "Pend Reason (PS)") ); WLAN_OS_REPORT( ("----------------------------------------------------------------------\n")); for ( i = 0; i < SCR_CID_NUM_OF_CLIENTS; i++ ) { WLAN_OS_REPORT( ("%-22s %-15s %-15s %-15s %-15s \n", clientDesc[ i ], stateDesc[ pScr->clientArray[ i ].state[ SCR_RESOURCE_SERVING_CHANNEL ] ], stateDesc[ pScr->clientArray[ i ].state[ SCR_RESOURCE_PERIODIC_SCAN ] ], pendReasonDesc[ pScr->clientArray[ i ].currentPendingReason[ SCR_RESOURCE_SERVING_CHANNEL ] ], pendReasonDesc[ pScr->clientArray[ i ].currentPendingReason[ SCR_RESOURCE_PERIODIC_SCAN ] ]) ); } #endif }