⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osdbasic.c

📁 此程序为twell8806驱动程序
💻 C
📖 第 1 页 / 共 2 页
字号:
	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 + -