📄 debug.c
字号:
#include "config.h"
#include "typedefs.h"
#include "main.h"
#include "debug.h"
#include "osdbasic.h"
#include "osdmenu.h"
#include "dispinfo.h"
#include "I2C.h"
#include "printf.h"
#include "panel.h"
#include "keyremo.h"
#include "regmap.h"
#ifdef SUPPORT_DEBUG
#define DEBUGWIN 8
#define DEBUGWIN_ADDR 350
static DATA BYTE Slave=TW88I2CAddress, Index=0, Bdata=0;
bit Debug_On=0;
static PDATA BYTE Debug_index=0;
extern bit I2CAutoIncFlagOn ;
CODE BYTE DebugWindowInit[] = {
//----- Input Selection : Zoom 2
17,
OSD_Win_Num ( BACK_COLOR|DEBUGWIN ), // 2 bytes
OSD_Win_Attr ( WIN_BG_COLOR_EX0 | BACK_COLOR | WIN_3D_TYPE0 | WIN_3D_EN0 | WIN_EN0 ),
// OSD_Win_Start ( 20, 15 ), // 3 bytes
OSD_Win_Start ( 20, (PVR_-(18*6))),
OSD_Win_Width ( 25 ),
OSD_Win_Height ( 2 ),
OSD_Win_Border ( WIN_BD_EN | OSDMENU_OUTLINE_COLOR | WIN_BD_WIDTH(1) ),
OSD_Win_HBorder ( WIN_BD_COLOR_EX0 | WIN_H_BD_W(13) ),
OSD_Win_VBorder ( WIN_V_BD_W(10) ),
OSD_Win_CH_Space ( WIN_CH_HSPACE(0) | WIN_CH_VSPACE(10) ),
OSD_Win_ZM_SAddr ( WIN_VZOOM(WINZOOMx1), WIN_HZOOM(WINZOOMx1), WIN_SADDR(DEBUGWIN_ADDR) ), // 2 bytes
OSD_Win_Shadow ( WIN_SHADOW_EN0 | BG_COLOR_BLACK | WIN_SHADOW_W(0) ),
OSD_Win_Blending ( 4 ),
OSD_Win_CH_BorderShadow ( WIN_SHADOW_COLOR_EX0 | WIN_MULTI_EN | WIN_V_EXT_EN0
| WIN_CH_BDSH_SEL(SEL_BORDER)
| WIN_CH_BDSH_COLOR_EX0 | CH_COLOR_BLACK ),
0 // End of Data
};
CODE BYTE Debug_Str[][25] = {
" Addr Idx Data Bit ",
" 88 00 00 0000 0000 "
};
CODE BYTE Cursor_Point[] = {
1, 2, 6, 7, 10, 11, 15, 16, 17, 18, 20, 21, 22, 23
};
CODE BYTE Digit_Str[] = {
'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'
};
void DebugWindowControl (void) {
if( Debug_On )
{
Debug_On = 0;
ShowOSDWindow(DEBUGWIN,FALSE);
return;
}
Debug_On = 1;
Change_OSDColorLookup();
InitOSDWindow(DebugWindowInit);
DrawAttrCnt(DEBUGWIN_ADDR, DEFAULT_COLOR, 25 ); // Clear color
WriteTW88(TW88_ENABLERAM, 0x24); // OSD RAM Auto Access Enable
I2CAutoIncFlagOn = 1;
WriteStringToAddr(DEBUGWIN_ADDR, Debug_Str[0], 25 );
I2CAutoIncFlagOn = 0;
DrawAttrCnt(DEBUGWIN_ADDR+25, DEFAULT_COLOR, 25 ); // Clear color
WriteStringToAddr(DEBUGWIN_ADDR+25, Debug_Str[1], 25 );
ShowOSDWindow(DEBUGWIN,TRUE);
ShowOSDWindowAll(1);
Debug_index = 2;
Bdata = ReadI2C(Slave,Index);
Draw_Debug_Char();
DrawAttrCnt(DEBUGWIN_ADDR+25+Cursor_Point[Debug_index], BG_COLOR_YELLOW|CH_COLOR_BLUE, 1 ); // Clear color
}
void Draw_Debug_Char(void)
{
BYTE i,j;
BYTE mstr[10];
i = Slave;
mstr[0] = Digit_Str[i>>4 & 0x0f] ;
mstr[1] = Digit_Str[i&0x0f];
mstr[2] = 0;
WriteStringToAddr(DEBUGWIN_ADDR+25+1, mstr, 2 );
i = Index;
mstr[0] = Digit_Str[i>>4 & 0x0f] ;
mstr[1] = Digit_Str[i&0x0f];
mstr[2] = 0;
WriteStringToAddr(DEBUGWIN_ADDR+25+6, mstr, 2 );
i = Bdata;
mstr[0] = Digit_Str[i>>4 & 0x0f] ;
mstr[1] = Digit_Str[i&0x0f];
mstr[2] = 0;
WriteStringToAddr(DEBUGWIN_ADDR+25+10, mstr, 2 );
i = Bdata;
for (j=0; j<9 ;j++ )
{
mstr[j] = i&0x80? '1':'0';
i = i<<1;
if(j==3) mstr[++j] = ' ';
//Printf("\n\r i:%2x mstr[%d]: %s", (WORD)i, (WORD)j, mstr);
}
mstr[9] = 0;
//Printf("\n\r Bdata:%2x mstr: %s", (WORD)Bdata, mstr);
WriteStringToAddr(DEBUGWIN_ADDR+25+15, mstr, 9 );
}
void DebugWindowCursor( BYTE flag ) {
if( flag == UP ) Debug_index = (Debug_index + 1) % 14;
else Debug_index = (Debug_index+14-1)%14;
DrawAttrCnt(DEBUGWIN_ADDR+25, DEFAULT_COLOR, 25 ); // Clear color
DrawAttrCnt(DEBUGWIN_ADDR+25+Cursor_Point[Debug_index], BG_COLOR_YELLOW|CH_COLOR_BLUE, 1 ); // Clear color
}
void DebugWindowData( BYTE flag ) {
BYTE i;
int inc;
switch(Debug_index){
case 0: i = (flag == UP )? +0x10: -0x10;
i = i + (Slave&0xf0 );
i &= 0xf0;
Slave = i | (Slave&0x0f);
break;
case 1: i = (flag == UP )? +1: -1;
i = i + (Slave&0x0f );
i &= 0x0f;
Slave = i | (Slave&0xf0);
break;
case 2: i = (flag == UP )? +0x10: -0x10;
i = i + (Index&0xf0 );
i &= 0xf0;
Index = i | (Index&0x0f);
break;
case 3: i = (flag == UP )? +1: -1;
i = i + (Index&0x0f );
i &= 0x0f;
Index = i | (Index&0xf0);
break;
case 4: i = (flag == UP )? +0x10: -0x10;
i = i + (Bdata&0xf0 );
i &= 0xf0;
Bdata = i | (Bdata&0x0f);
break;
case 5: i = (flag == UP )? +1: -1;
i = i + (Bdata&0x0f );
i &= 0x0f;
Bdata = i | (Bdata&0xf0);
break;
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
case 13:
inc = Debug_index - 6;
inc = 0x80>>inc;
Bdata = Bdata ^ inc;
//Printf("\n\r inc:%2x Bdata:%2x ", (WORD)inc, (WORD)Bdata );
WriteI2C(Slave, Index, Bdata);
Draw_Debug_Char();
delay(50);
Bdata = ReadI2C(Slave, Index);
break;
}
Draw_Debug_Char();
}
void Debug_Write(void)
{
WriteI2C(Slave, Index, Bdata);
}
void Debug_Read(void)
{
Bdata = ReadI2C(Slave, Index);
Draw_Debug_Char();
}
#endif // DEBUG_OSDMODE
#ifdef CHIP_MANUAL_TEST
extern bit RepeatKey;
PDATA BYTE ManualFrequency;
bit OnChipTest=0;
CODE struct _zilog {
BYTE cnt;
BYTE str[4];
} Zilog[] = {
{ 1, { 0x32 } },
{ 2, { 0xc0, 0x04 } }, // Hsync=External
{ 1, {0} }, { 1, {0} }, { 1, {0} }, { 1, {0} }, { 1, {0} }, { 1, {0} }, { 1, {0} }, { 1, {0} },
{ 1, {0} }, { 1, {0} }, { 1, {0} }, { 1, {0} }, { 1, {0} }, { 1, {0} }, { 1, {0} }, { 1, {0} },
{ 2, { 0xa0, 0x09 } },
{ 2, { 0xa2, 0x04 } },
{ 2, { 0xa3, 0x08 } },
{ 2, { 0xa5, '>' } },
{ 2, { 0xa5, '>' } },
{ 2, { 0xa3, 0x02 } },
{ 2, { 0xa5, 'T' } },
{ 2, { 0xa5, 'W' } },
{ 2, { 0xa5, '8' } },
{ 2, { 0xa5, '8' } },
{ 2, { 0xa5, '0' } },
{ 2, { 0xa5, '4' } },
{ 2, { 0xa3, 0x04 } },
{ 2, { 0xa5, '<' } },
{ 2, { 0xa5, '<' } },
// { 1, { 0x30 } },
{ 2, { 0xa0, 0x0b } },
{ 2, { 0xa2, 0x05 } },
// { 2, { 0xa3, 0x0e } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x0a } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x06 } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x02 } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x0c } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x08 } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x04 } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x00 } },
{ 2, { 0xa5, 0x7f } },
// { 1, { 0x30 } },
{ 2, { 0xa0, 0x0c } },
{ 2, { 0xa2, 0x05 } },
// { 2, { 0xa3, 0x0e } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x0a } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x06 } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x02 } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x0c } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x08 } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x04 } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x00 } },
{ 2, { 0xa5, 0x7f } },
// { 1, { 0x30 } },
{ 2, { 0xa0, 0x0d } },
{ 2, { 0xa2, 0x05 } },
// { 2, { 0xa3, 0x0e } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x0a } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x06 } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x02 } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x0c } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x08 } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x04 } },
{ 2, { 0xa5, 0x7f } },
{ 2, { 0xa3, 0x00 } },
{ 2, { 0xa5, 0x7f } },
{ 0, {0} }
};
void WriteZilog(BYTE cnt, BYTE *val)
{
BYTE rd=1, i;
if( *val==0 ) {
delay(5);
return;
}
I2CStart();
I2CWriteData(0x28);
for(i=0; i<cnt; i++, val++) {
I2CWriteData(*val); //LJY050101
}
I2CStop();
}
BYTE DelaynCheck(void)
{
BYTE ret=FALSE;
WORD i;
for(i=ManualFrequency*10; i>0; i--){
delay(10);
#ifdef SERIAL
if( RS_ready() ) { ret=TRUE; break; }
#endif
}
return ret;
}
void ChipMenualTest(void)
{
BYTE i;
if( P0_0!=0 ) return;
if(OnChipTest!=1) return;
OnChipTest = 0;
Printf("\r\nPush any key if manual test stop.");
while(1) {
// ChangeInput(COMPOSITE);
WriteDecoder( INFORM, ReadDecoder(INFORM) | 0x01 );
WriteDecoder( ACNTL, ReadDecoder(ACNTL) & 0xfe );
//WriteDecoder( G_GAIN, 0x80 );
WriteDecoder( SCrGAIN, 0x40 );
WriteDecoder( SCrGAIN, 0x40 );
WriteDecoder( RGBCONTROL, 0x03 );
WriteDecoder( RGBMISC, 0x05 );
delay(10+10);
for(i=0; ; i++) {
if( Zilog[i].cnt==0 ) break;
WriteZilog( Zilog[i].cnt, Zilog[i].str );
}
delay(20+10);
ChangeInput(SVIDEO); // Input - Input Source Change Key
if( DelaynCheck() ) break;
if( DIP_AUTO_DETECT==0 ) {
ChangeInput(PC); // Input - Input Source Change Key
}
if( DelaynCheck() ) break;
ChangeInput(COMPOSITE); // Input - Input Source Change Key
ActionRemo( REMO_MENU, RepeatKey );
WriteDecoder( INFORM, ReadDecoder(INFORM) | 0x01 );
WriteDecoder( ACNTL, ReadDecoder(ACNTL) & 0xfe );
//WriteDecoder( G_GAIN, 0x80 );
WriteDecoder( SCrGAIN, 0x40 );
WriteDecoder( SCrGAIN, 0x40 );
WriteDecoder( RGBCONTROL, 0x03 );
WriteDecoder( RGBMISC, 0x05 );
delay(10+10);
for(i=0; ; i++) {
if( Zilog[i].cnt==0 ) break;
WriteZilog( Zilog[i].cnt, Zilog[i].str );
}
delay(20+10);
if( DelaynCheck() ) break;
}
Printf("\r\nPush number 0 of the key if manual test starts again.");
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -