📄 osdbasic.c
字号:
y = y | ReadTW88(TW88_WINYSTART);
return (BYTE)(y >> 2);
}
#include "osdTW88.c"
//*****************************************************************************
//
// Internal Font test
//
//*****************************************************************************
#ifdef DEBUG_OSD
//-----------------------------------------------------------------------------
// CopyUDCharToOSDWindow(BYTE winno, BYTE xoff, BYTE yoff, BYTE attr, BYTE ch)
// - For FONT RAM Char.
//-----------------------------------------------------------------------------
/*
void CopyUDCharToOSDWindow(BYTE winno, BYTE xoff, BYTE yoff, BYTE attr, BYTE ch)
{
WORD Addr;
BYTE w;
if( winno<1 || winno>8 ) return;
SetOSDWindowNum(winno);
Addr = ReadTW88(TW88_WINSADDRLO);
Addr += (ReadTW88(TW88_WINSADDRHI) & 0x01 ) <<8;
w = ReadTW88(TW88_WINWIDTH);
Addr = Addr + w*yoff + xoff;
EnableOSDRAMAndChangeFont( FONT_RAM );
WriteCharToOSDRAM( Addr, ch, attr );
//EnableOSDRAM(FALSE);
}
*/
void DisplayROMFont(BYTE scode)
{
/*
int i, j;
dPuts("\r\n(DisplayROMFont)");
ClearOSD();
CreateOSDWindow_TW88(FONTTEST_OSDWIN,0,0, 16, 8, 0,BG_COLOR_BLUE|WINZOOMx2|SHOW);
for(i=0; i<8; i++)
ClearOSDLine(FONTTEST_OSDWIN,0,0,16,BG_COLOR_BLUE | CH_COLOR_WHITE);
for(j=0; j<8; j++)
for(i=0; i<0x10; i++) {
CopyCharToOSDWindow(FONTTEST_OSDWIN,i, j, ((j*0x10)^0x70) | j, scode+j*16+i);
delay(1);
}
*/
}
void DisplayRAMFont(void)
{
/*
int i;
dPuts("\r\n(DisplayRAMFont)");
ClearOSD();
CreateOSDWindow_TW88(FONTTEST_OSDWIN,0,0, 16, 2*4, 0,BG_COLOR_BLUE|WINZOOMx2|SHOW);
WriteTW88(0x7f, 0x24);
for(i=0; i<0x20; i++) {
CopyUDCharToOSDWindow(FONTTEST_OSDWIN,(i%16), (i/16), BG_COLOR_BLACK | CH_COLOR_YELLOW, i);
}
for(; i<0x40; i++) {
CopyUDCharToOSDWindow(FONTTEST_OSDWIN,(i%16), (i/16), 0x80 | BG_COLOR_BLACK | CH_COLOR_YELLOW, i - 0x20);
}
for(; i<0x60; i++) {
CopyUDCharToOSDWindow(FONTTEST_OSDWIN,(i%16), (i/16), BG_COLOR_BLACK | CH_COLOR_YELLOW, 0x31 + (i-0x40)*3 );
}
for(; i<0x80; i++) {
CopyUDCharToOSDWindow(FONTTEST_OSDWIN,(i%16), (i/16), 0x80 | BG_COLOR_BLACK | CH_COLOR_YELLOW, 0x31 + (i-0x60)*3 );
}
*/
}
#endif // DEBUG_OSD
//*****************************************************************************
//
// Functions for only CC.
//
//*****************************************************************************
//ljy052903: Only In CC
//*****************************************************************************
// Move to CC by Harry
//===============================================================================
// Used OSD Menu
//===============================================================================
//------------------------------------------------------------
void WriteStringToAddr(WORD addr, BYTE *str, BYTE cnt)
{
if( I2CAutoIncFlagOn==0 )
WriteTW88(TW88_ENABLERAM, 0x04); // OSD RAM Auto Access Enable, ROMFONT Start Enable
#ifndef TW8806
WriteTW88(TW88_OSDRAMADDRHI, addr>>8);
#endif
WriteTW88(TW88_OSDRAMADDRLO, addr);
WriteI2Cn( TW88I2CAddress, TW88_OSDRAMDATAHI, str, cnt );
if( I2CAutoIncFlagOn==0 )
WriteTW88(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Disable
}
#ifdef PAL_TV
void DrawAttrString(WORD addr, BYTE *Str, BYTE cnt)
{
if( I2CAutoIncFlagOn==0 )
WriteTW88(TW88_ENABLERAM, 0x04); // OSD RAM Auto Access Enable
#ifndef TW8806
WriteTW88(TW88_OSDRAMADDRHI, addr>>8);
#endif
WriteTW88(TW88_OSDRAMADDRLO, addr);
WriteI2Cn( TW88I2CAddress, TW88_OSDRAMDATALO, Str, cnt ); // Attr
if( I2CAutoIncFlagOn==0 )
WriteTW88(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Disable
}
#endif
void DrawAttrCnt(WORD addr, BYTE color, BYTE cnt)
{
// BYTE val;
// val = ReadTW88(TW88_ENABLERAM);
// WriteTW88(TW88_ENABLERAM, (val&0xf3)|0x04); // OSD RAM Auto Access Enable
WriteTW88(TW88_ENABLERAM, 0x04); // OSD RAM Auto Access Enable
#ifndef TW8806
WriteTW88(TW88_OSDRAMADDRHI, addr>>8);
#endif
WriteTW88(TW88_OSDRAMADDRLO, addr);
WriteI2CnD( TW88I2CAddress, TW88_OSDRAMDATALO, color, cnt );
WriteTW88(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Disable
}
void ClearDataCnt(WORD addr, BYTE cnt)
{
if( I2CAutoIncFlagOn==0 )
WriteTW88(TW88_ENABLERAM, 0x04); // OSD RAM Auto Access Enable
#ifndef TW8806
WriteTW88(TW88_OSDRAMADDRHI, addr>>8);
#endif
WriteTW88(TW88_OSDRAMADDRLO, addr);
WriteI2CnD( TW88I2CAddress, TW88_OSDRAMDATAHI, ' ', cnt );
if( I2CAutoIncFlagOn==0 )
WriteTW88(TW88_ENABLERAM, 0x00); // OSD RAM Auto Access Disable
}
/*
#ifdef SUPPORT_TW88_CC_DECODER
void CopyStrToOSDWindow(BYTE winno, BYTE xoff, BYTE yoff, BYTE cnt, BYTE attr, BYTE *str)
{
extern IDATA struct OSDStrInfo OSDStrInfo;
OSDStrInfo.cnt = cnt;
if( !OSDStrInfo.cnt ) OSDStrInfo.cnt = strlen( str );
OSDStrInfo.addr = xoff;
OSDStrInfo.str = (DWORD)(str);
OSDStrInfo.attr = attr;
CopyStr__(0,winno,yoff);
}
#endif //SUPPORT_TW88_CC_DECODER
#ifndef KEILC
void CopyCStrToOSDWindow(BYTE winno, BYTE xoff, BYTE yoff, BYTE cnt, BYTE attr, CODE_P BYTE *str)
{
extern IDATA struct OSDStrInfo OSDStrInfo;
OSDStrInfo.cnt = cnt;
if( !OSDStrInfo.cnt ) OSDStrInfo.cnt = CStrlen( str );
OSDStrInfo.addr = xoff;
OSDStrInfo.str = (DWORD)(str);
OSDStrInfo.attr = attr;
CopyStr__(1,winno,yoff);
}
#endif
void CopySpecialCStrToOSDWindow(BYTE winno, BYTE xoff, BYTE yoff, BYTE cnt, BYTE attr, CODE_P WORD *str)
{
extern IDATA struct OSDStrInfo OSDStrInfo;
OSDStrInfo.cnt = cnt;
if( !OSDStrInfo.cnt )OSDStrInfo.cnt = WCStrlen( str );
OSDStrInfo.addr = xoff;
OSDStrInfo.str = (DWORD)(str);
OSDStrInfo.attr = attr;
CopyStr__(2,winno,yoff);
}
*/
//*****************************************************************************
//
// Conversion Functions.
//
//*****************************************************************************
BYTE utoa(WORD value, BYTE *str, BYTE radix)
{
BYTE cnt, *str1;
WORD i, div;
#ifdef DEBUG_OSD
dPrintf("\r\n++(utoa):0x%x__", value);
#endif
str1 = str;
cnt=0;
if( radix==10)
{
for(div = 10000; div>=10; div/=10)
{
i = value/div;
if( i )
{
*str++ = i+'0';
cnt++;
}
else if( cnt ) // 100, 200, 20,,,,
*str++ = '0';
value%=div;
}
*str++ = value+'0';
*str = 0;
}
else if( radix==16)
{
for(div = 0x1000; div>=0x10; div/=0x10)
{
i = value/div;
if( i )
{
if( i>=0xa )
*str++ = i-0xa+'A';
else
*str++ = i+'0';
value%=div;
}
}
if( value>=0xa )
*str++ = value-0xa+'A';
else
*str++ = value+'0';
*str = 0;
}
return 1;
}
BYTE ltoa_K(long value, BYTE *str, BYTE i_part)
{
BYTE j;
long divider;
#ifdef DEBUG_OSD
dPrintf("\r\n++(ltoa_K):%ld__", value);
#endif
j=0;
for( divider = 100000000L; divider >= 1000; divider /=10)
{
if( ( value/ divider ) || j )
{
*str++ = value/divider + '0';
j++;
}
value %= divider;
}
*str++ = '.';
j++;
for( ; divider >= 10; divider /=10)
{
if( value/ divider || j)
{
*str++ = value/divider + '0';
j++;
i_part--;
}
if( i_part==0 )
{
*str = 0;
return j;
}
value %= divider;
}
if( value )
{
*str++ = value + '0';
j++;
}
*str = 0;
return j;
}
/*
BYTE WCStrlen(CODE_P WORD *str)
{
BYTE i=0;
while( *str++ ) i++;
return i;
}
*/
BYTE strlen( BYTE *str )
{
BYTE i=0;
while( *str++ ) i++;
return i;
}
//=============================================================================
// Init Menu Window Data initialize
//=============================================================================
#include "OsdInitTable.c"
void InitOSDWindow(BYTE *ptr)
{
BYTE i;
WriteTW88(0xff, ReadTW88(0xff) & 0xef);
i = 0;
while(ptr[i]) {
WriteI2Cn_(TW88I2CAddress, &ptr[i+1], ptr[i]);
WriteI2Cn_(TW88I2CAddress, &ptr[i+1], 5); // To set position LSB...
i += ptr[i] + 1;
};
WriteTW88(0xff, ReadTW88(0xff) | 0x10);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -