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

📄 dbgmenu.c

📁 vt6528芯片交换机API函数和文档运行程序
💻 C
📖 第 1 页 / 共 2 页
字号:
        UART_vPutChar(')');
    }
}


static void s_vSramMenu(void)
{
    BOOL    bInput; 
    UINT8   byOp, byEntrySize;
    UINT8   abySramData[SRAM_ENTRY_SIZE_16Byte];
    UINT32  u32SramAddr;



    while (1) {
        // get input
        TTY_vPutStrOnPos(8, 30, "Sram Addr    [      ]");
        TTY_vPutStrOnPos(9, 30, "Operation (R/E) < >");

        TTY_vSetCurPos(8,44);
        u32SramAddr = s_u32GetHexValue(6, &bInput);
        TTY_vSetCurPos(8,44);
        TTY_vPutU32Hex(u32SramAddr);

        TTY_vSetCurPos(9,47);
        byOp = TTY_cGetChar();

        switch (byOp) {
        case 'e':
        case 'E':
            return;

        case 'r':
        case 'R':
            break;

        default:
            TTY_vDrawLine(11,20,' ',25);
            TTY_vDrawLine(12,20,' ',60);
            continue;
        }

        if (u32SramAddr > SRAM_MCAST_CNTR_TBL_END_ADDR){
            TTY_vPutStrOnPos(11, 20, "Address out of range. ");
            continue;
        }
        // read current value and print result
        SWSRAM_bReadEntry(u32SramAddr, abySramData);
        TTY_vDrawLine(11,20,' ',25);
        TTY_vDrawLine(12,20,' ',30);

        TTY_vPutStrOnPos(11,20, "Addr (");
        TTY_vPutU32Hex(u32SramAddr);
        UART_vPutChar(')');
        TTY_vPutStrOnPos(12,20,"Data ( ");

        if ((u32SramAddr >= SRAM_SGMNT_LNK_BASE_ADDR && u32SramAddr <= SRAM_SGMNT_LNK_END_ADDR) ||
            (u32SramAddr >= SRAM_PTMSK_TBL_BASE_ADDR && u32SramAddr <= SRAM_MCAST_CNTR_TBL_END_ADDR))
            byEntrySize = SRAM_ENTRY_SIZE_4Byte;
        // If 64 bits width memory
        else if ((u32SramAddr >= SRAM_RULE_ACT_CODE_BASE_ADDR && u32SramAddr <= SRAM_SECOND_MAC_TBL_END_ADDR))
            byEntrySize = SRAM_ENTRY_SIZE_8Byte;
        // If 128 bits width memory
        else
            byEntrySize = SRAM_ENTRY_SIZE_16Byte;

        for (byOp=0; byOp<byEntrySize; byOp++) {
            TTY_vPutHex(abySramData[byOp]);
            UART_vPutChar(' ');
        }

        UART_vPutChar(')');
    }
}


static void s_vModEEPMenu (void)
{
    BOOL    bInput;    
    CHAR    szModDscrp[MOD_DSCRP_SIZE];
    UINT8   uu, byOp, u8Data, u8ModId, u8EEPSign, u8EEPVer, u8EEPSize, u8ModType;


    while (1) {
        TTY_vPutStrOnPos(7,  25, "Module ID      [  ] (0 or 1)");        
        TTY_vPutStrOnPos(8,  25, "EEP Sign.      [  ] (Default: 73H)");
        TTY_vPutStrOnPos(9,  25, "EEP Ver.       [  ] (Default: 2");
        TTY_vPutStrOnPos(10, 25, "EEP Size       [  ] (Default: 1. Unit: 64-Bytes)");
        TTY_vPutStrOnPos(11, 25, "Module Type    [  ]");
        TTY_vPutStrOnPos(12, 25, "Module Dscrp   [                               ]");
        TTY_vPutStrOnPos(13, 25, "Operation(R/W/E)< >");
    
        // get input       
        // module id
        TTY_vSetCurPos(7, 41);
        u8ModId = s_u32GetHexValue(2, &bInput);
        if (!bInput) {
            u8ModId = 0;
            TTY_vSetCurPos(7, 41);
            TTY_vPrintf("%02x", u8ModId); 
        }        
        // eep signature
        TTY_vSetCurPos(8, 41);
        u8EEPSign = s_u32GetHexValue(2, &bInput);
        if (!bInput) {
            u8EEPSign = 0x73;
            TTY_vSetCurPos(8, 41);
            TTY_vPrintf("%02x", u8EEPSign); 
        }
        // eep version
        TTY_vSetCurPos(9, 41);
        u8EEPVer = s_u32GetHexValue(2, &bInput);
        if (!bInput) {
            u8EEPVer = 2;
            TTY_vSetCurPos(9, 41);
            TTY_vPrintf("%02x", u8EEPVer); 
        }
        // eep content size
        TTY_vSetCurPos(10, 41);
        u8EEPSize = s_u32GetHexValue(2, &bInput);
        if (!bInput) {
            u8EEPSize = 1;
            TTY_vSetCurPos(10, 41);
            TTY_vPrintf("%02x", u8EEPSize); 
        }
        // module type
        TTY_vSetCurPos(11, 41);
        u8ModType = s_u32GetHexValue(2, &bInput);
        if (!bInput) {
            u8ModType = 0;
            TTY_vSetCurPos(11, 41);
            TTY_vPrintf("%02x", u8ModType); 
        }
        // module description
        TTY_vSetCurPos(12, 41);
        TTY_vGetStr(szModDscrp, MOD_DSCRP_SIZE, 0);
        
        // get operation
        TTY_vSetCurPos(13, 42);
        byOp = TTY_cGetChar();

        switch (byOp) {
        case 'e':
        case 'E':
            return;

        case 'w':
        case 'W':
            SWEEP_bReadU8(MOD_CARD0_EEP_ADDR_SIGNATURE + u8ModId * MOD_CARD_EEP_SIZE, &u8Data);
            if (u8Data != MOD_CARD_SIGNATURE) {  // EEPROM isn't present
                TTY_vDrawLine(15, 20, ' ', 60);
                TTY_vDrawLine(16, 20, ' ', 60);
                TTY_vPutStrOnPos(15, 20, "EEPROM isn't present.");
                continue;
            }
            SWEEP_bWriteU8(MOD_CARD0_EEP_ADDR_SIGNATURE + u8ModId * MOD_CARD_EEP_SIZE, u8EEPSign);
            SWEEP_bWriteU8(MOD_CARD0_EEP_ADDR_VERSION   + u8ModId * MOD_CARD_EEP_SIZE, u8EEPVer);
            SWEEP_bWriteU8(MOD_CARD0_EEP_ADDR_CKSUMSIZE + u8ModId * MOD_CARD_EEP_SIZE, u8EEPSize);
            SWEEP_bWriteU8(MOD_CARD0_EEP_ADDR_TYPE      + u8ModId * MOD_CARD_EEP_SIZE, u8ModType);
            uu = 0;
            while (0 != szModDscrp[uu]) {            
                SWEEP_bWriteU8(MOD_CARD0_EEP_ADDR_DESCRIP + u8ModId * MOD_CARD_EEP_SIZE + uu, szModDscrp[uu]);
                uu++;
            }
            //write '\0' indicate end of string
            SWEEP_bWriteU8(MOD_CARD0_EEP_ADDR_DESCRIP + u8ModId * MOD_CARD_EEP_SIZE + uu, szModDscrp[uu]);
            
            // update checksum
            SWMODL_vEEPCalCheckSum(u8ModId, u8EEPSize * CHECKSUM_SIZE_UNIT);
            break;
        case 'r':
        case 'R':
            SWEEP_bReadU8(MOD_CARD0_EEP_ADDR_SIGNATURE + u8ModId * MOD_CARD_EEP_SIZE, &u8Data);
            if (u8Data != MOD_CARD_SIGNATURE) {  // EEPROM isn't present
                TTY_vDrawLine(15, 20, ' ', 60);
                TTY_vDrawLine(16, 20, ' ', 60);
                TTY_vPutStrOnPos(15, 20, "EEPROM isn't present.");
                continue;
            }
            break;

        default:
            TTY_vDrawLine(15, 20, ' ', 60);
            TTY_vDrawLine(16, 20, ' ', 60);
            continue;
        }

        TTY_vDrawLine(15, 20, ' ', 60);
        TTY_vDrawLine(16, 20, ' ', 60);
        
        SWEEP_bReadU8(MOD_CARD0_EEP_ADDR_VERSION + u8ModId * MOD_CARD_EEP_SIZE, &u8EEPVer);            
        SWEEP_bReadU8(MOD_CARD0_EEP_ADDR_CKSUMSIZE + u8ModId * MOD_CARD_EEP_SIZE, &u8EEPSize);            
        SWEEP_bReadU8(MOD_CARD0_EEP_ADDR_TYPE + u8ModId * MOD_CARD_EEP_SIZE, &u8ModType);            
        for (uu = 0; uu < MOD_DSCRP_SIZE; uu++)
            SWEEP_bReadU8(MOD_CARD0_EEP_ADDR_DESCRIP + u8ModId * MOD_CARD_EEP_SIZE + uu, (PUINT8)&szModDscrp[uu]);
                                            
        TTY_vSetCurPos(15, 20);
        TTY_vPrintf("Mod (%2d), Sign(%02x), Ver(%02x), Size(%d * 64Bytes)", u8ModId
                                                                          , u8Data
                                                                          , u8EEPVer
                                                                          , u8EEPSize);
        TTY_vSetCurPos(16, 20);
        TTY_vPrintf("Type(%02x), Description(%s)", u8ModType, szModDscrp);
    }    
}


static void s_vBoardEEPMenu (void)
{
    UINT8   byKey, u8RdData;
    UINT32  ui, u32CurIdx, u32CurX, u32CurY;
           
        
    // Dump EEPROM content
    TTY_vPutStrOnPos(2, 10, "00  01  02  03  04  05  06  07 -08  09  0A  0B  0C  0D  0E  0F");
    TTY_vPutStrOnPos(3, 10, "--------------------------------------------------------------");
    for (ui = 0; ui < ONBOARD_EEP_SIZE; ui++) {        
        if (0 == (ui % 16)) {            
            TTY_vSetCurPos(4 + (ui /16), 2);
            TTY_vPrintf("%04X  ", ui);
        }
        
        if (8 == (ui % 16)) 
            TTY_vPutStr(" -");
        else
            TTY_vPutStr("  ");
        
        SWEEP_bReadU8(ONBOARD_EEP_ADDR + ui, &u8RdData);
        TTY_vPrintf("%02X", u8RdData);
    }
    
    // Set Default Cursor location
    u32CurX = 10; u32CurY = 4; u32CurIdx   = 0;
    TTY_vSetCurPos(u32CurY, u32CurX);
    
    // Wait for user input
    do {
        TTY_vSetCurPos(u32CurY, u32CurX);
        byKey = STR_cToUpper(TTY_cGetChar());       
        switch (byKey) {
            case MK_V_UP:
                if (u32CurY != 4) {
                    u32CurY--;
                    u32CurIdx -= 16;
                }
                break;            
            case MK_V_DOWN:
                if (u32CurY != 19) {
                    u32CurY++;
                    u32CurIdx += 16;
                }
                break;         
            case MK_V_LEFT:
                if (u32CurX != 10) {
                    u32CurX -= 4;
                    u32CurIdx--;
                }
                break;   
            case MK_V_RIGHT:
                if (u32CurX != 70) {
                    u32CurX += 4;
                    u32CurIdx++;
                }
                break;        
            case MK_ENTER: {              
                UINT8  u8InData;
                BOOL   bInput;
                

                DBGMENU_BAR_CLEAR();
                DBGMENU_BAR_PRINT(30, "* New Hex Value : [  ] *");
                TTY_vSetCurPos(21, 49);
                u8InData = s_u32GetHexValue(2, &bInput);
                if (!bInput)
                    break;
                
                // Write the byte on the screen and into the EEPROM
                if (FALSE == SWEEP_bWriteU8(ONBOARD_EEP_ADDR + u32CurIdx, u8InData))  
                    goto fail;
                
                if (FALSE == SWEEP_bReadU8(ONBOARD_EEP_ADDR + u32CurIdx, &u8RdData))  
                    goto fail;
                               
                if (u8InData == u8RdData) {
                    DBGMENU_BAR_CLEAR();
                    DBGMENU_BAR_PRINT(30, "* EEPROM Write OK *     ");
                    TTY_vSetCurPos(u32CurY, u32CurX);
                    TTY_vPrintf("%02X", u8InData);
                }
                else {
fail:
                    DBGMENU_BAR_CLEAR();
                    DBGMENU_BAR_PRINT(30, "* EEPROM Write Failed * ");
                }
                break;
            }
                      
            default:
                break;
        }    
    } while ((byKey != MK_ESCAPE) && (byKey != 'E'));   
}


static UINT32 s_u32GetHexValue(UINT8 byMaxDigiCnt, PBOOL pbInput)
{
    char    acInBuf[10];
    UINT8   byTmp, sj;
    UINT8   byCharCnt=0;


    // get hex string
    while (1) {
        // get a digit
        byTmp = TTY_cGetChar();

        // check if input finished
        if (!STR_bIsXDigit(byTmp)) {
            // check if ctrl-key without any valid input
            if (byCharCnt == 0) {
                *pbInput = FALSE;
                return 0;
            }
            // check if input backspace
            else if (byTmp == MK_BACKSPACE) {
                TTY_vBackspace();
                byCharCnt --;
            }
            else {
                break;
            }
        }
        // check if input illegal
        else if (byCharCnt < byMaxDigiCnt && STR_bIsXDigit(byTmp) ) {
            // clear input buffer if first time valid input encountered
            if (byCharCnt == 0) {
                for (sj = 0; sj < byMaxDigiCnt - 1; sj++)
                    UART_vPutChar(' ');
                for (sj = 0; sj < byMaxDigiCnt - 1; sj++)
                    UART_vPutChar(MC_BACKSPACE);
            }
            byTmp = STR_cToUpper(byTmp);
            UART_vPutChar(byTmp);
            acInBuf[byCharCnt] = byTmp;
            byCharCnt ++;
        }
    }

    *pbInput = TRUE;
    // transfer string into hex value
    return (UINT32)STR_u32StrHexToU32(acInBuf);
}

⌨️ 快捷键说明

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