📄 sysdebug.c
字号:
EA = 0;
W99AV_Command1(COMMAND_RDEBUGINFO,CMDARG_RDEBUGINFO); // Chuan2.80p Use define instead of number
W99AV_OutIndex(0x10000000);
__dwTemp=W99AV_InData();
EA = 1;
printf("\nCmd_Debug1=0x%lx", __dwTemp);
printf("\n__SetupInfo:");
printf("\nbSetupVersion=0x%hx", __SetupInfo.bSetupVersion);
printf("\twDefaultPassword=0x%x", __SetupInfo.wDefaultPassword);
printf("\tbAspectRatio=0x%hx", __SetupInfo.bAspectRatio);
printf("\tbSCRControl=0x%hx", __SetupInfo.bSCRControl);
printf("\tbTVSystem=0x%hx", __SetupInfo.bTVSystem);
printf("\tbProgressiveScan=0x%hx", __SetupInfo.bProgressiveScan);
printf("\tbBrightness=0x%hx", __SetupInfo.bBrightness);
printf("\tbContrast=0x%hx", __SetupInfo.bContrast);
printf("\nbVideoOutput=0x%hx", __SetupInfo.bVideoOutput);
printf("\tbAudioOutput=0x%hx", __SetupInfo.bAudioOutput);
printf("\tbAudioDigitalOut=0x%hx", __SetupInfo.bAudioDigitalOut);
printf("\tbAudioAnalogOut=0x%hx", __SetupInfo.bAudioAnalogOut);
printf("\tbAudioLPCM=0x%hx", __SetupInfo.bAudioLPCM);
printf("\tbRegionControl=0x%hx", __SetupInfo.bRegionControl);
printf("\tbAPSControl=0x%hx", __SetupInfo.bAPSControl);
printf("\nwParentalCtl=0x%hx", __SetupInfo.wParentalCtl);
printf("\tbOSDLanguage=0x%hx", __SetupInfo.bOSDLanguage);
printf("\tbAudioCenter=0x%hx", __SetupInfo.bAudioCenter);
printf("\tbAudioRear=0x%hx", __SetupInfo.bAudioRear);
printf("\tbAudioSubwoofer=0x%hx", __SetupInfo.bAudioSubwoofer);
printf("\tbAudioDNR=0x%hx", __SetupInfo.bAudioDNR);
printf("\tbAudioKaraoke=0x%hx", __SetupInfo.bAudioKaraoke);
printf("\tbParentalControl=0x%hx", __SetupInfo.bParentalControl);
printf("\nbMenuLanguag=0x%hx", __SetupInfo.bMenuLanguage);
printf("\tbAudioLanguage=0x%hx", __SetupInfo.bAudioLanguage);
printf("\tbSPSTLanguage=0x%hx", __SetupInfo.bSPSTLanguage);
printf("\twMenuLanguageCode=0x%x", __SetupInfo.wMenuLanguageCode);
printf("\twAudioLanguageCode=0x%x", __SetupInfo.wAudioLanguageCode);
printf("\twSPSTLanguageCode=0x%x", __SetupInfo.wSPSTLanguageCode);
printf("\tbAngleMarkDisplay=0x%hx", __SetupInfo.bAngleMarkDisplay);
printf("\tbVCDControl=0x%hx", __SetupInfo.bVCDControl);
printf("\tbAudioPrologic=0x%hx", __SetupInfo.bAudioPrologic);
printf("\tbAngleMarkTime=0x%hx", __SetupInfo.bAngleMarkTime);
printf("\tbAudioTestTone=0x%hx", __SetupInfo.bAudioTestTone);
//DVD_037RECOVER
{
extern BYTE _bCheckNVData;
extern DWORD __dwVOBUStart; // it records the logical sector for VOBU start
extern DWORD __dwVOBUEnd; // it records the logical sector for VOBU end
extern DWORD gdwNextLBA;
extern BYTE __bResetRecover; // wyc1.07
extern BYTE __bTotalRecover; // wyc1.07
extern BYTE __bResetFailCount;
extern BYTE __bTotalFailCount;
extern BYTE _bNVRecover;
extern BYTE __bRecoverStage;
extern WORD __wMonitorLackIFD;
void _ShowServoDebug(void);
// Micky0.85, display below information only when DVD title
if (__wDiscType & BOOK_DVD)
{
printf("\n*******CELL Status**************");
printf("\n_bCheckNVData=0x%hx; ",_bCheckNVData);
printf("_bNVRecover=0x%hx; ",_bNVRecover);
printf("\n__dwVOBUStart-__dwVOBUEnd=0x%lx-0x%lx; ", __dwVOBUStart, __dwVOBUEnd);
//DVD_038NVRECOVER
}
printf("\n*******Hang Status**************");
printf("\ngdwNextLBA=0x%lu;",gdwNextLBA);
printf("\n__bRecoverStage=0x%hx; ", __bRecoverStage);
printf("__wMonitorLackIFD=0x%x; ", __wMonitorLackIFD);
printf("__bResetRecover=0x%lx; ", __bResetRecover); // wyc1.07
printf("__bResetFailCount=0x%hx;", __bResetFailCount);
printf("__bTotalRecover=0x%lx; ", __bTotalRecover); // wyc1.07
printf("__bTotalFailCount=0x%hx; ", __bTotalFailCount);
_ShowServoDebug();
}
}
*/
/****************************************************************************
** Function: _SYSDEBUG_DumpMem
** Description: This function will deump the data from memory.(48 bytes)
** Parameters: wAddress==>the memory address.
** Return: none.
***************************************************************************/
#ifndef SYSDEBUG_SUPPORT_MIN_FUNCTION
void _SYSDEBUG_DumpMem(BYTE bType, WORD wAddress, WORD wSize)
{
BYTE _bTemp;
_wSYSDEBUGTemp = wAddress;
if (bType == SYSDEBUG_MEM_XDATA)
pbMem=(BYTE xdata *) wAddress;
else if (bType == SYSDEBUG_MEM_IDATA)
pbMem=(BYTE IDATA *) wAddress;
else //DATA
pbMem=(BYTE DATA *) wAddress;
for (_wSYSDEBUGTemp1 = 0; _wSYSDEBUGTemp1 < wSize; _wSYSDEBUGTemp1++)
{
if ((_wSYSDEBUGTemp1 % 16) == 0)
{
_printf("\n");
put_WORD(_wSYSDEBUGTemp);
putchar_SBUF(':');
}
_wSYSDEBUGTemp++;
putHEX(*pbMem++);
putchar_SBUF(' ');
}
}
/****************************************************************************
** Function: _SYSDEBUG_DumpDRAMOrDM
** Description: This function will deump the data from DRAM or DM.(48 bytes)
** Parameters: dwAddress==>the DRAM address
** dwSize==>Total size
** bType==>memory type
** Return: none.
***************************************************************************/
void _SYSDEBUG_DumpDRAMOrDM(DWORD dwAddress, DWORD dwSize, BYTE bType)
{
for (_dwSYSDEBUGTemp1=0; _dwSYSDEBUGTemp1 < dwSize; _dwSYSDEBUGTemp1++)
{
if ((_dwSYSDEBUGTemp1 % 4) == 0)
{
_printf("\n");
put_DWORD(dwAddress); //The starting DRAM address
putchar_SBUF(':');
}
if (bType == SYSDEBUG_DRAM_DATA)
{
W99AV_ReadDRAMData(dwAddress, &_dwSYSDEBUGTemp2);
dwAddress++;
}
else
{
W99AV_ReadDM(dwAddress, &_dwSYSDEBUGTemp2);
dwAddress++;
}
put_DWORD(_dwSYSDEBUGTemp2);
putchar_SBUF(' ');
}
}
/****************************************************************************
** Function: _SYSDEBUG_DumpI2C
** Description:
** Parameters:
** Return: none.
***************************************************************************/
void _SYSDEBUG_DumpI2C(BYTE bAddress, BYTE bValue)
{
_printf("0x");
putHEX(bAddress);
putchar_SBUF(':');
_printf("0x");
putHEX(bValue);
_printf("\n");
}
/****************************************************************************
** Function: _SYSDEBUG_SearchCommand
** Description: This function will search if the command has a "SPACE"
** Parameters: bStart ==>the starting index in command buffer
** Return: HIBYTE != 0 ==>has space
** LOBYTE ==> numbers of the characters for the first parameter
***************************************************************************/
WORD _SYSDEBUG_SearchCommand(BYTE bStart)
{
_wSYSDEBUGTemp = 0;
for (_bSYSDEBUGTemp = bStart; _bSYSDEBUGTemp < _bRXCommandLen; _bSYSDEBUGTemp++)
{
//if "SPACE" or "ENTER" key is detected, break
if (_bRXCommandData[_bSYSDEBUGTemp] == 0x20) //SPACE
{
_wSYSDEBUGTemp |= SYSDEBUG_COMMAND_SPACE;
break;
}
else if (_bRXCommandData[_bSYSDEBUGTemp] == 0x0D) //ENTER
break;
else
_wSYSDEBUGTemp++;
}
return _wSYSDEBUGTemp;
}
/****************************************************************************
** Function: _SYSDEBUG_ModifyMem
** Description: This function will modify the data in SRAM.
** Parameters: pbCommandData ==> The command buffer
** wAddress ==> The address to stored the modified data
** bStart ==> The "data" starting index in command buffer
** bSize ==> the length of the data
** Return:
***************************************************************************/
void _SYSDEBUG_ModifyMem(BYTE bType, WORD wAddress, BYTE bStart, BYTE bSize, BYTE bAndOr)
{
if (bType == SYSDEBUG_MEM_XDATA)
pbMem = (BYTE xdata *)wAddress;
else if (bType == SYSDEBUG_MEM_IDATA)
pbMem = (BYTE IDATA *)wAddress;
else //DATA
pbMem = (BYTE DATA *)wAddress;
switch (bSize)
{
case 1: //Modify a BYTE
case 2:
_bSYSDEBUGTemp = (BYTE)_SYSDEBUG_StrToHexval(&_bRXCommandData[bStart], bSize);
if (bAndOr == SERIAL_DEBUG_OPERATE_AND) //And
*pbMem &= _bSYSDEBUGTemp;
else if (bAndOr == SERIAL_DEBUG_OPERATE_OR) //Or
*pbMem |= _bSYSDEBUGTemp;
else
*pbMem = _bSYSDEBUGTemp;
_dwSYSDEBUGTemp1 = 1; //Dump one BYTE
break;
case 3: //Modify a WORD
case 4:
_wSYSDEBUGTemp = (WORD)_SYSDEBUG_StrToHexval(&_bRXCommandData[bStart], bSize);
if (bAndOr == SERIAL_DEBUG_OPERATE_AND) //And
{
*pbMem++ &= HIBYTE(_wSYSDEBUGTemp);
*pbMem &= LOBYTE(_wSYSDEBUGTemp);
}
else if (bAndOr == SERIAL_DEBUG_OPERATE_OR) //Or
{
*pbMem++ |= HIBYTE(_wSYSDEBUGTemp);
*pbMem |= LOBYTE(_wSYSDEBUGTemp);
}
else
{
*pbMem++ = HIBYTE(_wSYSDEBUGTemp);
*pbMem = LOBYTE(_wSYSDEBUGTemp);
}
_dwSYSDEBUGTemp1 = 2; //Dump two BYTEs
break;
case 5: //Modify a DWORD
case 6:
case 7:
case 8:
_dwSYSDEBUGTemp2 = (DWORD)_SYSDEBUG_StrToHexval(&_bRXCommandData[bStart], bSize);
if (bAndOr == SERIAL_DEBUG_OPERATE_AND) //And
{
*pbMem++ &= HIBYTE(HIWORD(_dwSYSDEBUGTemp2));
*pbMem++ &= LOBYTE(HIWORD(_dwSYSDEBUGTemp2));
*pbMem++ &= HIBYTE(LOWORD(_dwSYSDEBUGTemp2));
*pbMem &= LOBYTE(LOWORD(_dwSYSDEBUGTemp2));
}
else if (bAndOr == SERIAL_DEBUG_OPERATE_OR) //Or
{
*pbMem++ |= HIBYTE(HIWORD(_dwSYSDEBUGTemp2));
*pbMem++ |= LOBYTE(HIWORD(_dwSYSDEBUGTemp2));
*pbMem++ |= HIBYTE(LOWORD(_dwSYSDEBUGTemp2));
*pbMem |= LOBYTE(LOWORD(_dwSYSDEBUGTemp2));
}
else
{
*pbMem++ = HIBYTE(HIWORD(_dwSYSDEBUGTemp2));
*pbMem++ = LOBYTE(HIWORD(_dwSYSDEBUGTemp2));
*pbMem++ = HIBYTE(LOWORD(_dwSYSDEBUGTemp2));
*pbMem = LOBYTE(LOWORD(_dwSYSDEBUGTemp2));
}
_dwSYSDEBUGTemp1 = 4; //Dump 4 BYTEs
break;
default:
break;
}
}
/****************************************************************************
** Function: _SYSDEBUG_Help
** Description: This function will display help message
** Parameters: none.
** Return: none.
***************************************************************************/
#ifdef SYSDEBUG_SUPPORT_HELP
void _SYSDEBUG_Help(void)
{
_printf("\n(C)Copyright Cheertek Inc. 2002\n");
_printf(" D300, all right reserved\n");
_printf(" Version 1.00\n");
_printf("?/H : Print help message.\n");
_printf("P : Repeat last command.\n");
_printf("DSMxxxx/DSMxxxx xxxx : Dump the data from the memory (SRAM).\n");
_printf("DDRxxxxxxxx/DDRxxxxxxxx xxxxxxxx: Dump the data from DRAM.\n");
_printf("DDMxxxxxxxx/DDMxxxxxxxx xxxxxxxx: Dump the data from DM.\n");
_printf("MSMxxxx xx : Modify a BYTE in SRAM.\n");
_printf("MDRxxxxxxxx xxxxxxxx : Modify a data in DRAM.\n");
_printf("MDMxxxxxxxx xxxxxxxx : Modify a data in DM.\n");
_printf("USMxxxx : Upload a file to SRAM.\n");
_printf("UDRxxxxxxxx : Upload a file to DRAM.\n");
_printf("UDMxxxxxxxx : Upload a file to DM.\n");
_printf("Kxx : Modify a IR key.\n");
_printf("I : Show the debug information of W9922QF.\n");
_printf("RRxx : Read W9922QF/W9928AF's register.\n");
_printf("WRxx xxxxxxxx : Write a value to W9922QF's register.");
}
#endif
/****************************************************************************
** Function: _SYSDEBUG_ProcessCommand
** Description:
** Parameters: none.
** Return: none.
***************************************************************************/
void _SYSDEBUG_ProcessCommand(void)
{
_bSYSDEBUGTemp1=EMPTY_DATA_IN_BUFFER;
_bSYSDEBUGTemp=_SYSDEBUG_ReadAndCheckInBuffer(&_bSYSDEBUGTemp1);
_bCurrentCommand = _bSYSDEBUGTemp1;
switch (_bCurrentCommand) /* read data from rx buffer */
{
case START_BIN_MODE_CMD:
_bSYSDEBUGTemp = _SYSDEBUG_ReadAndCheckInBuffer(&_bSYSDEBUGTemp1);
if (_bSYSDEBUGTemp1 == END_CMD)
{
EX0 = 0;
putchar_SBUF(START_BIN_MODE_ACK);
}
/*
else if (_bSYSDEBUGTemp1 == ERROR_RECOVER_CMD) //to fix the problem about can't enter bin mode.
{
if (_SYSDEBUG_ReadInBuffer() == END_CMD)
{
_bBinMode = FALSE;
_SYSDEBUG_EndCommand();
}
}
*/
else
{
_SYSDEBUG_EndCommand();
putchar_SBUF(ERROR_START_BIN_MODE);
}
break;
case END_BIN_MODE_CMD:
_bSYSDEBUGTemp = _SYSDEBUG_ReadAndCheckInBuffer(&_bSYSDEBUGTemp1);
if (_bSYSDEBUGTemp1 == END_CMD)
{
EX0 = 1;
_bBinMode = FALSE;
_bpROMBuf = _bROMDataBuf;
putchar_SBUF(END_BIN_MODE_ACK);
}
else
{
_SYSDEBUG_EndCommand();
putchar_SBUF(ERROR_END_BIN_MODE);
}
break;
case READ_DRAMDM_CMD:
//Get DRAM, DM address
_bSYSDEBUGType = _SYSDEBUG_ReadInBuffer(); //To get DRAM or DM
_wROMSize = _SYSDEBUG_ReadInBuffer();
_wROMSize <<= 8;
_wROMSize |= _SYSDEBUG_ReadInBuffer();
_bSYSDEBUGTemp = _SYSDEBUG_ReadAndCheckInBuffer(&_bSYSDEBUGTemp1);
if (_bSYSDEBUGTemp1 == END_CMD)
{
_bChangeRxToRomBuffer = TRUE;
_wROMdataBufIndex = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -