📄 l2_lcdtv.c
字号:
{
//Joe@2003.2.25 14:52 add begin
//Joe@2003.2.25 14:52 add end
#if(TURNKEY_OPTION == 1)
//L2_SetGPIOBit(15,1); //LCD_BACKLIGHT
#else
L2_SetGPIOBit(16,1); //Back light(5V,18V)
#endif
//Joe@2003.3.5 13:42 add begin
if ((XBYTE[0x2001] & 0x01) > 0) //Make sure TV output is enabled
{
while ((XBYTE[0x2DA0] & 0x08) > 0); //wait TV VD low
while ((XBYTE[0x2DA0] & 0x08) == 0); //wait TV VD high
}
//Joe@2003.3.5 13:43 add end
XBYTE[0x2001] = 0x05;
XBYTE[0x2D01] = XBYTE[0x2D01] | 0x10;
XBYTE[0x2013] = XBYTE[0x2013] | 0x18; // start the 27 and 13.5MHz source
}
}
else if(mode==2)
{ // no image input
//Joe@2003.2.25 14:53 add begin
#if(TURNKEY_OPTION == 1)
//L2_SetGPIOBit(15,1); //LCD_BACKLIGHT
#else
L2_SetGPIOBit(16,1); //Back light(5V,18V)
#endif
//Joe@2003.2.25 14:53 add end
//Joe@2003.3.5 13:42 add begin
if ((XBYTE[0x2001] & 0x01) > 0) //Make sure TV output is enabled
{
while ((XBYTE[0x2DA0] & 0x08) > 0); //wait TV VD low
while ((XBYTE[0x2DA0] & 0x08) == 0); //wait TV VD high
}
//Joe@2003.3.5 13:43 add end
XBYTE[0x2D01] = XBYTE[0x2D01] & 0x0F;
}
//patch4.4.1@yichang@ to fix two LCD/TV display bugs
//1. TV output field sequence error.
//2. LCD and TV picture become vague as the display device is changed repeatedly.
//end
MemStretch = tmp;
return LCD_state;
}
//-----------------------------------------------------------------------------
//L2_TurnOnOffDisplay
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_TurnOnOffDisplay (UCHAR mode)
{
if (VIDEO_DET == 1)
L2_SetGPIOBit(15,0);
else
{
if(mode==0)
//Joe@2003.3.12 14:26 modify end
{
L2_SetGPIOBit(15,0); //LCD_BACKLIGHT
if ((XBYTE[0x2001] & 0x01) > 0) //Make sure TV output is enabled
{
while ((XBYTE[0x2DA0] & 0x08) > 0); //wait TV VD low
while ((XBYTE[0x2DA0] & 0x08) == 0); //wait TV VD high
}
//Joe@2003.3.5 13:43 add end
XBYTE[0x2001] = 0x04;
XBYTE[0x2D01] = XBYTE[0x2D01] | 0x10;
XBYTE[0x2013] = XBYTE[0x2013] & 0xE7; // stop the 27 and 13.5MHz source
L2_CtrlScreen(1);//wendy@2004/9/8
}
else if(mode==1)
{
if ((XBYTE[0x2001] & 0x01) > 0) //Make sure TV output is enabled
{
while ((XBYTE[0x2DA0] & 0x08) > 0); //wait TV VD low
while ((XBYTE[0x2DA0] & 0x08) == 0); //wait TV VD high
}
//Joe@2003.3.5 13:43 add end
XBYTE[0x2001] = 0x05;
XBYTE[0x2D01] = XBYTE[0x2D01] | 0x10;
XBYTE[0x2013] = XBYTE[0x2013] | 0x18; // start the 27 and 13.5MHz source
//DELAY_1ms();
// L2_CtrlScreen(1);//wendy@2004/9/8
//UI_ClearFOSD(25, 8, 0x08);
L2_SetGPIOBit(15,1); //LCD_BACKLIGHT
}
}
}
//-----------------------------------------------------------------------------
//L2_TurnOnOffDisplay
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_TurnOnOffDisplay2 (UCHAR mode)
{
UCHAR type;
UCHAR LCD_state = 0;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
type = XBYTE[0x2D00];
//patch4.4@richie@flip
type = type & 0x0F;
if(mode>2){
LCD_state = 1; // parameter error
}
//Joe@2003.3.12 14:26 modify begin
//else if(mode==0)
else if( (mode==0) || (G_DisplayMode == K_DisplayModePowerOff) )
//Joe@2003.3.12 14:26 modify end
{ // turn off display
//Joe@2003.3.5 13:42 add begin
if ((XBYTE[0x2001] & 0x01) > 0) //Make sure TV output is enabled
{
while ((XBYTE[0x2DA0] & 0x08) > 0); //wait TV VD low
while ((XBYTE[0x2DA0] & 0x08) == 0); //wait TV VD high
}
//Joe@2003.3.5 13:43 add end
XBYTE[0x2001] = 0x04;
XBYTE[0x2D01] = XBYTE[0x2D01] | 0x10;
//patch4.4.1@yichang@ to fix two LCD/TV display bugs
//1. TV output field sequence error.
//2. LCD and TV picture become vague as the display device is changed repeatedly.
//begin:
XBYTE[0x2013] = XBYTE[0x2013] & 0xE7; // stop the 27 and 13.5MHz source
//Joe@2003.2.25 14:52 add begin
#if(TURNKEY_OPTION == 1)
L2_SetGPIOBit(15,0); //LCD_BACKLIGHT
//DbgPrint("L2_TurnOnOffDisplay15=%bu\n",15);
#else
L2_SetGPIOBit(16,0);
#endif
//Joe@2003.2.25 14:52 add end
}
else if(mode==1)
{ // turn on display
if(type==0||type==1)
{
//Joe@2003.2.25 14:52 add begin
#if(TURNKEY_OPTION == 1)
L2_SetGPIOBit(15,0); //LCD_BACKLIGHT
//DbgPrint("L2_TurnOnOffDisplay16=%bu\n",16);
#else
L2_SetGPIOBit(16,0); //Back light(5V,18V)
#endif
//Joe@2003.3.5 13:42 add begin
if ((XBYTE[0x2001] & 0x01) > 0) //Make sure TV output is enabled
{
while ((XBYTE[0x2DA0] & 0x08) > 0); //wait TV VD low
while ((XBYTE[0x2DA0] & 0x08) == 0); //wait TV VD high
}
//Joe@2003.3.5 13:43 add end
//Joe@2003.2.27 13:06 modify begin
XBYTE[0x2001] = 0x01;
//XBYTE[0x2001] = 0x09;
//Joe@2003.2.27 13:06 modify end
XBYTE[0x2D01] = XBYTE[0x2D01] | 0x10;
XBYTE[0x2013] = XBYTE[0x2013] | 0x18; // start the 27 and 13.5MHz source
//Joe@2003.2.25 14:52 add end
}
else
{
//Joe@2003.2.25 14:52 add begin
//Joe@2003.2.25 14:52 add end
#if(TURNKEY_OPTION == 1)
L2_SetGPIOBit(15,1); //LCD_BACKLIGHT
#else
L2_SetGPIOBit(16,1); //Back light(5V,18V)
#endif
//Joe@2003.3.5 13:42 add begin
if ((XBYTE[0x2001] & 0x01) > 0) //Make sure TV output is enabled
{
while ((XBYTE[0x2DA0] & 0x08) > 0); //wait TV VD low
while ((XBYTE[0x2DA0] & 0x08) == 0); //wait TV VD high
}
//Joe@2003.3.5 13:43 add end
XBYTE[0x2001] = 0x05;
XBYTE[0x2D01] = XBYTE[0x2D01] | 0x10;
XBYTE[0x2013] = XBYTE[0x2013] | 0x18; // start the 27 and 13.5MHz source
}
}
else if(mode==2)
{ // no image input
//Joe@2003.2.25 14:53 add begin
#if(TURNKEY_OPTION == 1)
L2_SetGPIOBit(15,1); //LCD_BACKLIGHT
#else
L2_SetGPIOBit(16,1); //Back light(5V,18V)
#endif
//Joe@2003.2.25 14:53 add end
//Joe@2003.3.5 13:42 add begin
if ((XBYTE[0x2001] & 0x01) > 0) //Make sure TV output is enabled
{
while ((XBYTE[0x2DA0] & 0x08) > 0); //wait TV VD low
while ((XBYTE[0x2DA0] & 0x08) == 0); //wait TV VD high
}
//Joe@2003.3.5 13:43 add end
XBYTE[0x2D01] = XBYTE[0x2D01] & 0x0F;
}
//patch4.4.1@yichang@ to fix two LCD/TV display bugs
//1. TV output field sequence error.
//2. LCD and TV picture become vague as the display device is changed repeatedly.
//end
MemStretch = tmp;
return LCD_state;
}
//-----------------------------------------------------------------------------
//L2_SetColorPalette
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_SetColorPalette(UCHAR index, UCHAR r, UCHAR g, UCHAR b)
{
UCHAR LCD_state = 0;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
if(index>8) LCD_state = 1;
else if(index==0){
XBYTE[0x2D37] = r/8; // set R
XBYTE[0x2D38] = g/8; // set G
XBYTE[0x2D39] = b/8; // set B
}
else if(index==1){
XBYTE[0x2D3A] = r/8; // set R
XBYTE[0x2D3B] = g/8; // set G
XBYTE[0x2D3C] = b/8; // set B
}
else if(index==2){
XBYTE[0x2D3D] = r/8; // set R
XBYTE[0x2D3E] = g/8; // set G
XBYTE[0x2D3F] = b/8; // set B
}
else if(index==3){
XBYTE[0x2D40] = r/8; // set R
XBYTE[0x2D41] = g/8; // set G
XBYTE[0x2D42] = b/8; // set B
}
else if(index==4){
XBYTE[0x2D43] = r/8; // set R
XBYTE[0x2D44] = g/8; // set G
XBYTE[0x2D45] = b/8; // set B
}
else if(index==5){
XBYTE[0x2D46] = r/8; // set R
XBYTE[0x2D47] = g/8; // set G
XBYTE[0x2D48] = b/8; // set B
}
else if(index==6){
XBYTE[0x2D49] = r/8; // set R
XBYTE[0x2D4A] = g/8; // set G
XBYTE[0x2D4B] = b/8; // set B
}
else if(index==7){
XBYTE[0x2D4C] = r/8; // set R
XBYTE[0x2D4D] = g/8; // set G
XBYTE[0x2D4E] = b/8; // set B
}
else{
XBYTE[0x2D4F] = r/8; // set R
XBYTE[0x2D50] = g/8; // set G
XBYTE[0x2D51] = b/8; // set B
}
MemStretch = tmp;
return LCD_state;
}
//-----------------------------------------------------------------------------
//L2_SetFOSDIndex
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_SetFOSDIndex(UCHAR y, UCHAR x, USHORT value)
{
UCHAR LCD_state = 0;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
if(x>24 || y>9 || value >511)
LCD_state = 1;
else{
if(value>255){
XBYTE[0x2D2C] = 0x03; // turn on buffer enable
}
else{
XBYTE[0x2D2C] = 0x02; // turn on buffer enable
}
XBYTE[0x2D2D] = (25*y) + x; // set buffer address
XBYTE[0x2D2E] = value; // set the index
}
MemStretch = tmp;
return LCD_state;
}
//-----------------------------------------------------------------------------
//L2_SetFOSDAttr
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_SetFOSDAttr(UCHAR y, UCHAR x, UCHAR attr)
{
UCHAR LCD_state = 0;
UCHAR tmp;
tmp = MemStretch;
MemStretch = 0x01;
if(x>24 || y>9 || attr>63)
LCD_state = 1;
else{
XBYTE[0x2D2C] = 4; // turn on buffer enable
XBYTE[0x2D2D] = (25*y) + x; // set buffer address
XBYTE[0x2D2E] = attr; // set the attribute
}
MemStretch = tmp;
return 0;
}
//-----------------------------------------------------------------------------
//L2_SetFOSDOffset
//-----------------------------------------------------------------------------
// return value
// 0: no error
// 1: parameter error
UCHAR L2_SetFOSDOffset(UCHAR x, UCHAR y, UCHAR scrll)
{
USHORT osdhofst;
UCHAR LCD_state = 0;
USHORT tmp;
//patch4.3@yichang@0611 for v
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -