diff options
Diffstat (limited to 'wilink_6_1/Test/fwdriverdebug.c')
-rw-r--r-- | wilink_6_1/Test/fwdriverdebug.c | 398 |
1 files changed, 398 insertions, 0 deletions
diff --git a/wilink_6_1/Test/fwdriverdebug.c b/wilink_6_1/Test/fwdriverdebug.c new file mode 100644 index 0000000..c7f1ba3 --- /dev/null +++ b/wilink_6_1/Test/fwdriverdebug.c @@ -0,0 +1,398 @@ +/* + * fwdriverdebug.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. + */ + + +/***************************************************************************/ +/* */ +/* MODULE: FW_debug.c */ +/* PURPOSE: FW debug implementation */ +/* */ +/***************************************************************************/ +#include "tidef.h" +#include "DrvMain.h" +#include "CmdQueue_api.h" +#include "debug.h" +#include "connDebug.h" +#include "siteMgrDebug.h" +#include "dataCtrlDbg.h" +#include "rsnDbg.h" +#include "osApi.h" +#include "report.h" +#include "qosMngrDbg.h" +#include "PowerMgrDebug.h" +#include "roamingMgrDebug.h" +#include "scanCncnDbg.h" +#include "ScanMngrDbg.h" +#include "scrDbg.h" +#include "SoftGeminiDbg.h" +#include "HealthMonitorDbg.h" +#include "smeDebug.h" +#include "TWDriver.h" +#include "CmdBld.h" +#include "commonTypes.h" +#include "siteHash.h" +#include "txCtrl.h" +#include "802_11Defs.h" +#include "fwdriverdebug.h" +#include "mlmeBuilder.h" +#include "Ethernet.h" + +static TI_HANDLE dTimer; +static TI_HANDLE tmp_hMlme; +static TI_HANDLE tmp_hTWD; +static TI_HANDLE tmp_hTxCtrl; +static TI_BOOL SendFlag = 0; +static TI_BOOL bSendDataPkt; +static volatile TI_UINT32 numOfPackets; +static volatile TI_UINT8 infinitLoopFl = 0; +static TI_UINT32 packetsNum; +static TI_UINT32 packetLength; + +typedef TI_STATUS (*TCmdCfgFuncB) (TI_HANDLE); + +extern TI_STATUS cmdBld_CmdJoinBss (TI_HANDLE hCmdBld, TJoinBss *pJoinBssParams, void *fCb, TI_HANDLE hCb); +void sendMgmtPacket (TI_HANDLE hOs); +void sendDataPacket (TI_HANDLE hOs); + +void FWDebugFunction(TI_HANDLE hDrvMain, + TI_HANDLE hOs, + TI_HANDLE hTWD, + TI_HANDLE hMlme, + TI_HANDLE hTxMgmtQ, + TI_HANDLE hTxCtrl, + unsigned long funcType, + void *pParam) +{ + tmp_hMlme = hMlme; + tmp_hTWD = hTWD; + tmp_hTxCtrl = hTxCtrl; + + switch (funcType) + { + case DBG_FW_PRINT_HELP: + printFWDbgFunctions(); + break; + case DBG_FW_SEND_GENERAL_TEST_CMD: + FW_debugSendGeneralTestCmd(hTWD, pParam); + break; + case DBG_FW_IBSS_CONNECTION: + FW_DebugSendJoinCommand(hTWD, hTxMgmtQ); + break; + case DBG_FW_SEND_MGMT_PACKET: + bSendDataPkt = TI_FALSE; + FW_DebugSendPacket(hDrvMain, hOs, hTxMgmtQ, pParam); + break; + case DBG_FW_SEND_DATA_PACKET: + bSendDataPkt = TI_TRUE; + FW_DebugSendPacket(hDrvMain, hOs, hTxMgmtQ, pParam); + break; + case DBG_FW_START_LOOPBACK: + FW_DebugStartLoopBack (hDrvMain, hTWD); + break; + case DBG_FW_STOP_LOOPBACK: + FW_DebugStopLoopBack (hDrvMain, hTWD); + break; + case DBG_FW_INFINIT_SEND: + FW_DebugInfinitSendPacket (hDrvMain, hTWD); + break; + + case DBG_FW_GENERAL: + FW_DebugGeneral (hTWD, pParam); + break; + default: + break; + + + } +} + +void printFWDbgFunctions(void) +{ + WLAN_OS_REPORT((" FW Debug Functions \n")); + WLAN_OS_REPORT(("---------------------------------------------------\n")); + WLAN_OS_REPORT(("2200 - Print the FW Debug Help \n")); + WLAN_OS_REPORT(("2201 - Send General Test Command \n")); + WLAN_OS_REPORT(("2202 - create IBSS connection \n")); + WLAN_OS_REPORT(("2203[n] - Send n<=999 Packets \n")); + WLAN_OS_REPORT(("2205 - Start LoopBack \n")); + WLAN_OS_REPORT(("2206 - Stop LoopBack \n")); +} + + +void FW_debugSendGeneralTestCmd(TI_HANDLE hTWD, void *pParam) +{ + TTwd *pTWD = (TTwd *)hTWD; + FWDebugTestCmdParamter_t Cfg; + unsigned char Len; + Len = *(unsigned char *)pParam; + + os_memoryCopy(pTWD->hOs, Cfg.buf,(unsigned long*)pParam + sizeof(TI_UINT8),Len * 4 ); + + Cfg.len = Len; + + /* Set information element header */ + Cfg.EleHdr.id = CMD_TEST; + Cfg.EleHdr.len = sizeof(Cfg) - sizeof(EleHdrStruct); + + cmdQueue_SendCommand (pTWD->hCmdQueue, CMD_CONFIGURE, (void*)&Cfg, sizeof(Cfg), NULL, NULL, NULL); +} + +void FW_DebugSendJoinCommand(TI_HANDLE hTWD, TI_HANDLE hTxMgmtQ) +{ + TTwd *pTWD = (TTwd *)hTWD; + TCmdBld *pCmdBld = (TCmdBld *)(pTWD->hCmdBld); + TI_STATUS res; + TJoinBss JoinBss; + char ssid[10]; + unsigned char Bssid[6] = {0x0,0x12,0x43,0xad,0xe5,0x10}; + + os_memoryCopy(pTWD->hOs,ssid,"ronit",5); + + JoinBss.basicRateSet = DRV_RATE_2M; + JoinBss.radioBand = RADIO_BAND_2_4_GHZ; + JoinBss.pBSSID = Bssid; + + JoinBss.bssType = BSS_INDEPENDENT; + JoinBss.pSSID =ssid; + JoinBss.ssidLength = 5; + JoinBss.channel = 1; + JoinBss.beaconInterval = 100; + JoinBss.dtimInterval = 2; + + pCmdBld->hReport = pTWD->hReport; + pCmdBld->tDb.bss.BssId[0] = 0x0; + pCmdBld->tDb.bss.BssId[1] = 0x12; + pCmdBld->tDb.bss.BssId[2] = 0x43; + pCmdBld->tDb.bss.BssId[3] = 0xad; + pCmdBld->tDb.bss.BssId[4] = 0xe5; + pCmdBld->tDb.bss.BssId[5] = 0x10; + pCmdBld->tDb.bss.RadioChannel = 1; + + txMgmtQ_SetConnState(hTxMgmtQ,TX_CONN_STATE_MGMT); + + res = cmdBld_CmdJoinBss (pCmdBld, + &JoinBss, + NULL,//cmdBld_ConfigSeq, + NULL);//pTWD->hCmdBld + + if (res) + { + os_printf("\n failed to make IBSS connection\n"); + } + + os_printf("\n res = %d\n", res); + + txMgmtQ_SetConnState(hTxMgmtQ, TX_CONN_STATE_MGMT); + +} + + +void sendDataPacket (TI_HANDLE hOs) +{ + TI_UINT32 i; + TTxCtrlBlk * pPktCtrlBlk; + TI_UINT8 * pPktBuf; + TEthernetHeader tEthHeader; + char SrcBssid[6] = {0x88,0x88,0x88,0x88,0x88,0x88}; + char DesBssid[6] = {0x22,0x22,0x22,0x22,0x22,0x22}; + + /* Allocate a TxCtrlBlk for the Tx packet and save timestamp, length and packet handle */ + pPktCtrlBlk = TWD_txCtrlBlk_Alloc (tmp_hTWD); + pPktCtrlBlk->tTxDescriptor.startTime = os_timeStampMs (hOs); + pPktCtrlBlk->tTxDescriptor.length = (TI_UINT16)packetLength + ETHERNET_HDR_LEN; + pPktCtrlBlk->tTxDescriptor.tid = 0; + pPktCtrlBlk->tTxPktParams.uPktType = TX_PKT_TYPE_ETHER; + + /* Allocate buffer with headroom for getting the IP header in a 4-byte aligned address */ + pPktBuf = txCtrl_AllocPacketBuffer (tmp_hTxCtrl, pPktCtrlBlk, packetLength + ETHERNET_HDR_LEN + 2); + + /* Prepare Ethernet header */ + tEthHeader.type = HTOWLANS(ETHERTYPE_IP); + MAC_COPY (tEthHeader.src, SrcBssid); + MAC_COPY (tEthHeader.dst, DesBssid); + os_memoryCopy (hOs, pPktBuf + 2, &tEthHeader, ETHERNET_HDR_LEN); + + /* Build BDL */ + BUILD_TX_TWO_BUF_PKT_BDL (pPktCtrlBlk, + pPktBuf + 2, + ETHERNET_HDR_LEN, + pPktBuf + 2 + ETHERNET_HDR_LEN, + packetLength) + + /* Fill data buffer with incremented numbers */ + for (i = 0; i < packetLength; i++) + { + *(pPktBuf + 2 + ETHERNET_HDR_LEN + i) = i; + } + + /* Send Ether packet to TxCtrl */ + txCtrl_XmitData (tmp_hTxCtrl, pPktCtrlBlk); +} + + + +void sendMgmtPacket(TI_HANDLE hOs) +{ + static TI_UINT8 aMsg[2000]; + TI_UINT32 i; + dot11MgmtSubType_e eMsgType = DE_AUTH; + + for (i = 0; i < packetLength; i++) + { + aMsg[i] = i; + } + + mlmeBuilder_sendFrame(tmp_hMlme, eMsgType, aMsg, packetLength, 0); + + numOfPackets++; + if ((infinitLoopFl == 0) && (numOfPackets > packetsNum)) + { + os_timerStop(hOs, dTimer); + os_printf("\n *********** Last Packet was sent **********"); + os_timerDestroy(hOs, dTimer); + } + else + { + os_timerStart(hOs, dTimer, 1000); + } +} + +void FW_DebugSendPacket(TI_HANDLE hDrvMain ,TI_HANDLE hOs, TI_HANDLE hTxMgmtQ, void *pParam) +{ + void *fSendPkt; + + if ( pParam == NULL ) + { + os_printf("\nFW_DebugSendPacket Error: received NULL parameter\n"); + return; + } + + /* Open Tx path for all packet types */ + txMgmtQ_SetConnState (hTxMgmtQ, TX_CONN_STATE_MGMT); + txMgmtQ_SetConnState (hTxMgmtQ, TX_CONN_STATE_EAPOL); + txMgmtQ_SetConnState (hTxMgmtQ, TX_CONN_STATE_OPEN); + + infinitLoopFl = 0; + numOfPackets = 1; + packetsNum = 1; + packetLength = *(TI_UINT32*)pParam; + os_printf("\nFW_DebugSendPacket: packetsNum = %d, packetLength = %d\n",packetsNum, packetLength); + fSendPkt = bSendDataPkt ? sendDataPacket : sendMgmtPacket; + dTimer = os_timerCreate(hOs, fSendPkt, hDrvMain); + os_timerStart(hOs, dTimer, 1000); + + SendFlag = TI_TRUE; +} + +void FW_DebugInfinitSendPacket(TI_HANDLE hDrvMain ,TI_HANDLE hOs) +{ + infinitLoopFl = 1; + numOfPackets = 1; + + dTimer = os_timerCreate(hOs, sendMgmtPacket, hDrvMain); + os_timerStart(hOs, dTimer, 1000); + SendFlag = TI_TRUE; +} + +void FW_DebugStartLoopBack (TI_HANDLE hDrvMain, TI_HANDLE hTWD) +{ + TTwd *pTWD = (TTwd *)hTWD; + TTestCmd Plt; + + Plt.testCmdId = TEST_CMD_LOOPBACK_START; + os_printf("\n send loopback start command"); + cmdQueue_SendCommand (pTWD->hCmdQueue, CMD_TEST, (char*)&Plt, sizeof(Plt), NULL, NULL, NULL); +} + + +void FW_DebugStopLoopBack (TI_HANDLE hDrvMain, TI_HANDLE hTWD) +{ + TTwd *pTWD = (TTwd *)hTWD; + TTestCmd Plt; + + Plt.testCmdId = TEST_CMD_LOOPBACK_STOP; + os_printf("\n send loopback stop command"); + cmdQueue_SendCommand (pTWD->hCmdQueue, CMD_TEST, (char*)&Plt, sizeof(Plt), NULL, NULL, NULL); +} + + +void FW_DebugGeneral(TI_HANDLE hTWD, void *pParam) +{ + TTwd *pTWD = (TTwd *)hTWD; + TI_UINT32 size = *((TI_UINT32*) pParam) + sizeof(TI_UINT32); + + cmdQueue_SendCommand (pTWD->hCmdQueue, CMD_DEBUG, (char*)pParam, size, NULL, NULL, NULL); +} + + +/* +void FW_ComparePacket (char *buf) + { + char *ptemp; + int i; + + if (SendFlag) + { + ptemp = CompBuf; + os_printf("\n print before compare save buf"); + os_printf("\n"); + for (i=0;i<Len;i++) { + os_printf(" 0x%02x ",*ptemp++); + if (i %5 == 0) { os_printf("\n"); + } + + } + + os_printf("\n print before compare recived packet"); + ptemp = buf; + os_printf("\n"); + for (i=0;i<Len;i++) { + os_printf(" 0x%02x ",*ptemp++); + if (i %5 == 0) { + } + + } + + + if(memcmp(CompBuf,buf,Len)) + os_printf("\n LoopBack Packet failed"); + else + os_printf("\n LoopBack Packet success"); + + SendFlag = TI_FALSE; + } + + } +*/ + + |