⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tclcmd.c

📁 vt6528芯片交换机API函数和文档运行程序
💻 C
📖 第 1 页 / 共 5 页
字号:
            return FALSE;   
        }
    }
    return TRUE;
}

/************************************************************************
 * Parsing each argument into aszArgus array
 ************************************************************************/
static void 
s_vParseArgus(char* pszCmdBuf, char aszArgus[][ARGU_SIZE])
{
    char *      pszCmd;
    UINT32      u32Argc;
    UINT32      uu;
    
    u32Argc = 0;
    pszCmd  = pszCmdBuf;
    STR_pvMemset(aszArgus, 0, (ARGU_CNT * ARGU_SIZE));
    
    while (*pszCmd != 0)
    {
        
        /*
         * Skip Space, Tab
         */
        while (((*pszCmd == ' ') || (*pszCmd == '\t')) &&
               (*pszCmd != 0)) 
        {
            pszCmd++; 
        }
        
        uu = 0;
        /*
         * Copy pszCmd to aszArgus
         */
        while ((*pszCmd != ' ') && (*pszCmd != '\t') && (*pszCmd != '\0'))
        {
            aszArgus[u32Argc][uu] = *pszCmd;
            pszCmd++;
            uu++;
        }
        aszArgus[u32Argc][uu] = 0;
        u32Argc++;
    }
} /* end s_vParseArgus */


// TCL command engine
void TCLCMD_vEngine(void)
{
    char   aszCmdBuf[MAX_BUF_SIZE];
    char   aszArgus[ARGU_CNT][ARGU_SIZE];
    BOOL   bCmdFound = FALSE;
    UINT8  uu;


    while (1) {
#ifdef __TEST_API
        TTY_vGetStr(aszCmdBuf, MAX_BUF_SIZE, 0);
#else
        TTY_vGetStr(aszCmdBuf, MAX_BUF_SIZE, 2);
#endif

#ifdef __TCL_UART1
        if (!aszCmdBuf[0]) //means empty
            return;
#endif

        s_vParseArgus(aszCmdBuf, aszArgus);
        
        // quit TCL command engine
        if (0 == STR_iStrcmp(aszArgus[0], "quit"))
            break;

        // Search command table
        for (uu = 0; s_aSCmdTbl[uu].szCmd; uu++) {
            if (0 == STR_iStrcmp(aszArgus[0], s_aSCmdTbl[uu].szCmd)) {
                s_aSCmdTbl[uu].pfnCmd(aszArgus);
                bCmdFound = TRUE;
                break;
            }
        }

        // command not recognized
        if (!bCmdFound)
            TTY_vPutStr("fail: command not found.\r");
#ifdef __TCL_UART1
#else
        else
            bCmdFound = FALSE;
#endif
    }
}


/************************************************************************
 * Version Command
 *  Argv[0] =   "ver" command
 * Return:
 *  XXXX(AnalyzerVer)  XXXX(SWAPI)
 * Eg.  Analyzer 1.25, SWAPI 1.13
 *      0124 0112
 ************************************************************************/
static void 
s_vVerGet (char aszArgus[][ARGU_SIZE])
{
#if 0    
    char        aszOutBuf[MAX_BUF_SIZE];
    PRNT_iSprintf(aszOutBuf, "%02u%02u %02u%02u\r",
            ANALYZER_VER_MAJOR, ANALYZER_VER_MINOR,
            SWAPI_VER_MAJOR, SWAPI_VER_MINOR);
    TTY_vPutStr(aszOutBuf);
#endif    
    
} /* end s_VerGet */

// register read/write command.
// first param  :  read/write
// second param :  address
// third param  :  byte count
// fourth param :  (write) value
static void s_vRegOp (char aszArgus[][ARGU_SIZE])
{
    char   aszOutBuf[MAX_BUF_SIZE];
    char   *pszOp, *pszValue;
    UINT8  uu, u8ByteCnt, u8Data;
    UINT16 u16Addr = 0;

    
    // check arguments
    if (!s_bCheckArgus(&aszArgus[1], 3)) {
        return;
    }    

    pszOp     = aszArgus[1];
    u16Addr   = STR_u32StrHexToU32(aszArgus[2]);
    u8ByteCnt = STR_u32StrDecToU32(aszArgus[3]);
    pszValue  = aszArgus[4];

    // reg. read
    if (0 == STR_iStrcmp("read", pszOp)) {
        for (uu = 0; uu < u8ByteCnt; uu++) {
            SWREG_vReadU8(u16Addr + uu, &u8Data);
            STR_iU32ToStrHexPad(aszOutBuf + (uu * 2), u8Data, 2);
        }
        
        TTY_vPutStr(STR_pszStrcatchr(aszOutBuf, '\r'));
    }
    // reg. write
    else if (0 == STR_iStrcmp("write", pszOp)) {        
        if (NULL == pszValue) {
            TTY_vPutStr("fail: params error.\r");
            return;
        }

        STR_pvMemset(aszOutBuf, 0, 3);
        for (uu = 0; ((uu < u8ByteCnt) && (*pszValue != 0)); uu++) {
            STR_pvMemcpy(aszOutBuf, pszValue, 2);
            u8Data = (UINT8) STR_u32StrHexToU32(aszOutBuf);
            SWREG_vWriteU8(u16Addr + uu, u8Data);
            pszValue += 2;
        }
        
        TTY_vPutStr("success.\r");
    }
}


// phy. read/write command.
// first param  :  read/write
// second param :  phy address
// third param  :  phy id
// four param   :  (write) value
static void s_vPhyOp (char aszArgus[][ARGU_SIZE])
{
    char   aszOutBuf[MAX_BUF_SIZE];
    char   *pszOp, *pszValue;
    UINT8  u8PortId = 0, u8Addr = 0;
    UINT16 u16Data = 0;


    // check arguments
    if (!s_bCheckArgus(&aszArgus[1], 3)) {
        return;
    }    

    pszOp    = aszArgus[1];
    u8Addr   = STR_u32StrHexToU32(aszArgus[2]);
    u8PortId = STR_u32StrHexToU32(aszArgus[3]);
    pszValue = aszArgus[4];

    // phy. read
    if (0 == STR_iStrcmp("read", pszOp)) {
        SWMII_bReadU16(u8PortId, u8Addr, &u16Data);
        STR_iU32ToStrHexPad(aszOutBuf, u16Data, 4);
        
        TTY_vPutStr(STR_pszStrcatchr(aszOutBuf, '\r'));
    }
    // phy. write
    else if (0 == STR_iStrcmp("write", pszOp)) {
        if (NULL == pszValue) {
            TTY_vPutStr("fail: params error.\r");
            return;
        }
        u16Data = STR_u32StrHexToU32(pszValue);
        SWMII_bWriteU16(u8PortId, u8Addr, u16Data);
        
        TTY_vPutStr("success.\r");
    }
}


// sram read/write command.
// first param  :  read/write
// second param :  address
// third parm   : (write) value
static void s_vSramOp (char aszArgus[][ARGU_SIZE])
{
    char    aszOutBuf[MAX_BUF_SIZE];
    char    *pszOp, *pszValue, *pszBuf = aszOutBuf;
    UINT8   au8Data[16], uu;
    UINT32  u32Addr;


    // check arguments
    if (!s_bCheckArgus(&aszArgus[1], 2)) {
        return;
    }    

    pszOp    = aszArgus[1];
    u32Addr  = STR_u32StrHexToU32(aszArgus[2]);
    pszValue = aszArgus[3];

    STR_pvMemset(aszOutBuf, 0, MAX_BUF_SIZE);
    // sram read
    if (0 == STR_iStrcmp("read", pszOp)) {
        SWSRAM_bReadEntry(u32Addr, au8Data);                
        for (uu = 0; uu < 16; uu++)
            pszBuf += STR_iU32ToStrHexPad(pszBuf, au8Data[uu], 2);
                                
        TTY_vPutStr(STR_pszStrcatchr(aszOutBuf, '\r'));
    }
    // sram write
    else if (0 == STR_iStrcmp("write", pszOp)) {
        if (NULL == pszValue) {
            TTY_vPutStr("fail: params error.\r");
            return;
        }
        
        STR_pvMemset(au8Data, 0, 16);
        for (uu = 0; uu < 16; uu++) {
            STR_pvMemcpy(aszOutBuf, pszValue, 2);
            au8Data[uu] = STR_u32StrHexToU32(aszOutBuf);
            pszValue += 2;
        }
        SWSRAM_bWriteEntry(u32Addr, au8Data);

        TTY_vPutStr("success.\r");
    }
}


// mac adress change log table command.
// 1st param    :  read
// 2nd param    :  entry index
static void s_vLogTb (char aszArgus[][ARGU_SIZE])
{
    char       aszOutBuf[MAX_BUF_SIZE];
    char       *pszOp, *pszBuf = aszOutBuf;
    UINT32     u32EntryAddr;
    SLogEntry  SEntry;
    char       szMacStr[20];


    // check arguments
    if (!s_bCheckArgus(&aszArgus[1], 2)) {
        return;
    }    
    
    pszOp = aszArgus[1];
    u32EntryAddr = SRAM_MAC_LOG_TBL_BASE_ADDR + STR_u32StrHexToU32(aszArgus[2])*0x10;

    if (0 == STR_iStrcmp("read", pszOp)) {
        //TTY_vPutStr("0,00CD,01,0,0,0,0,000E,000F,1122334455FF,0\r");
        SWLOGTB_bGetEntryByIndx(MACLOG_SA_TO_INDEX(u32EntryAddr), &SEntry);
        pszBuf += STR_iU32ToStrDec(pszBuf, SEntry.bTypeMcst); APPEND_SPACE(pszBuf);        // bit 114
        if (FALSE == SEntry.bTypeMcst) { // unicast                                                    
            pszBuf += STR_iU32ToStrDec(pszBuf, SEntry.bFltrSmac);                      // bit 113
            pszBuf += STR_iU32ToStrDec(pszBuf, SEntry.bNotRedirSmac);                  // bit 112
            pszBuf += STR_iU32ToStrDec(pszBuf, SEntry.bTrkGrp); APPEND_SPACE(pszBuf);  // bit 109     
            
            pszBuf += STR_iU32ToStrDec(pszBuf, SEntry.u8SrcId);                        // bit 108~104
        }
        else { // multicast
            pszBuf += STR_iU32ToStrHexPad(pszBuf, SEntry.u16McstIdx, 4);               // bit 113~104
        }
        APPEND_SPACE(pszBuf);                                                                   
        
        pszBuf += STR_iU32ToStrHexPad(pszBuf, SEntry.u8SecuVio, 2); APPEND_SPACE(pszBuf); // bit 103~96
        pszBuf += STR_iU32ToStrDec(pszBuf, SEntry.bLearning);       APPEND_SPACE(pszBuf); // bit 103~96
        pszBuf += STR_iU32ToStrDec(pszBuf, SEntry.u8Scan);          APPEND_SPACE(pszBuf); // bit 103~96
        pszBuf += STR_iU32ToStrDec(pszBuf, SEntry.bAgeOut);         APPEND_SPACE(pszBuf); // bit 103~96
        pszBuf += STR_iU32ToStrDec(pszBuf, SEntry.bLocChg);         APPEND_SPACE(pszBuf); // bit 103~96
                                            
        pszBuf += STR_iU32ToStrHexPad(pszBuf, SEntry.u16ExtraEntryId, 4); APPEND_SPACE(pszBuf); // bit 95~80
        pszBuf += STR_iU32ToStrHexPad(pszBuf, SEntry.u16EntryId, 4);      APPEND_SPACE(pszBuf); // bit 79~64
        s_vCvtMacValtoStr (szMacStr, (char*)SEntry.abyMacAddr);
        pszBuf += STR_iStrcpy(pszBuf, szMacStr);                APPEND_SPACE(pszBuf);   // bit 63~16
        pszBuf += STR_iU32ToStrDec(pszBuf, SEntry.u16Fid);                                      // bit 12~0

        TTY_vPutStr(STR_pszStrcatchr(aszOutBuf, '\r'));
    }
}


// primary mac table command.
// 1st param            : read/write/del
// 2nd param            : mac address     (hex)
// 3rd param            : fid             (hex, Bit[12:0])
// 4th param  (write)   : static          (dec, Bit[27])
// 5th param  (write)   : cast type       (dec, Bit[26])
// 6th param  (write)   : port index      (hex, Bit[25:16])
// 7th param  (write)   : option          (hex, Bit[15:13])
// 8th param  (write)   : overwrite       (hex, 1:overwrite entry if exist; 0:don't overwrite entry)
static void s_vPMacTb (char aszArgus[][ARGU_SIZE])
{
    char       aszOutBuf[MAX_BUF_SIZE], szMacStr[20];
    char       *pszOp, *pszMac, *pszBuf = aszOutBuf;
    UINT8      au8MacAddr[MAC_ADDR_SIZE];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -