📄 dbgmenu.c
字号:
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 + -