亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? osdoper.c

?? 此程序為twell8806驅動程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include "Config.h"

#include "typedefs.h"
#include "main.h"
#include "i2c.h"
#include "Tw88.h"
#include "measure.h"
#include "dispinfo.h"
#include "osdbasic.h"
#include "osdmenu.h"
#include "adc.h"
#include "debug.h"
#include "etc_eep.h"
#include "pc_eep.h"
#include "cc.h"
#include "eds.h"
#include "tuner.h"
#include "audio.h"
#include "printf.h"
#include "udfont.h"
#include "panel.h"

#include "rgbmix.h"		// for TW8801

CODE struct RegisterInfo UserRange={0,100,50};

CODE struct RegisterInfo OSDMenuYRange= { OSDMENUY_MIN,	OSDMENUY_MAX,	OSDMENUY_50		};				
CODE struct RegisterInfo OSDMenuXRange= { OSDMENUX_MIN, OSDMENUX_MAX,	OSDMENUX_50		};				

CODE struct RegisterInfo PCUserColorTempRange = { 0, 55, 28 };			

CODE struct RegisterInfo PanelContrastRange={	0,199,100};
CODE struct RegisterInfo PanelBrightnessRange={	45,210,128};
#ifdef TW8804D
CODE struct RegisterInfo PanelSharpnessRange={	0,7,3};
#else
CODE struct RegisterInfo PanelSharpnessRange={	0,0x3f,0x0f};
#endif
CODE struct RegisterInfo PanelHueRange={	0,0x3f,0x20};
CODE struct RegisterInfo PanelSaturationRange={	45,210,128};

CODE struct RegisterInfo VideoContrastRange={	0,255,128};
CODE struct RegisterInfo VideoBrightnessRange={	-128,127,0};
CODE struct RegisterInfo VideoSaturationRange={	0,255,128};
CODE struct RegisterInfo VideoHueRange={	-128,127,0};	//-90~90
#ifdef TW8804D
CODE struct RegisterInfo VideoSharpnessRange={	0,7,3};
#else
CODE struct RegisterInfo VideoSharpnessRange={	0,15,3};
#endif
CODE struct RegisterInfo DigitalVideoSaturationRange={0, 0x7f, 0x40};

#define contrast 0
#define bright	 1
#define staturation_U 2
#define staturation_V 3
#define hue		 4										 
#define sharpness 5

CODE BYTE Contast_Reg_Addr[]={0x11, // Composite
							  0x11, // Svideo
	                          0x3b, // Component
	                          0x71, // DTV
	                          0x11, // TV
	                          0x3b  // Scart
	};
#ifdef WIDE_SCREEN
extern PDATA BYTE WideScreenMode;
#define MAXWIDESCREEN 4
#endif
#ifdef SUPPORT_COMPONENT
extern  PDATA BYTE  ComponentMode;
#endif
extern	IDATA BYTE  InputSelection;

//==============================================================
//
//  OSD Menu Operation Function
//
//==============================================================
#define MAX_OSDPOSITIONMODE	5
CODE BYTE OSDPOSITIONMODE_TABLE[][2] = { 
	{OSDMENUX_50, OSDMENUY_50},
	{OSDMENUX_MIN,OSDMENUY_MIN},
	{OSDMENUX_MIN,OSDMENUY_MAX},
	{OSDMENUX_MAX,OSDMENUY_MAX},
	{OSDMENUX_MAX,OSDMENUY_MIN},
};

#ifdef SUPPORT_OSDPOSITIONMOVE
BYTE GetOSDPositionMode(void)
{
	BYTE val;
	val = GetOSDPositionModeEE();
//	Printf("OSD Position=%d\r\n",(BYTE)val);
	
	return val;
}

BYTE SetOSDPositionMode( BYTE flag )
{
	int val, addx, addy;
	BYTE i,inc, winno;
	BYTE OSDStart[5][3];
	WORD tmp;

	#ifdef ADD_ANALOGPANEL
		if(IsAnalogOn()) return 0;
	#endif


	// Get OSD Position Mode
	i = GetOSDPositionMode();
	inc = ( flag==UP  ? 1  :  -1  );
	i = i + MAX_OSDPOSITIONMODE + inc;
	i %= MAX_OSDPOSITIONMODE;

	addx = OSDPOSITIONMODE_TABLE[i][0];
	addx -= OSDMenuX;
	OSDMenuX = OSDPOSITIONMODE_TABLE[i][0];

	addy = OSDPOSITIONMODE_TABLE[i][1];
	addy -= OSDMenuY;
	OSDMenuY = OSDPOSITIONMODE_TABLE[i][1];

	for( winno=OSDCURSORWINDOW; winno<=OSDMENU_TITLEWIN; winno++) 
	{
		val = GetOSDWindowX( winno );
		val += addx;
		tmp = (BYTE)val<<3;
		#ifdef TW8804D
		OSDStart[winno-OSDCURSORWINDOW][1] = tmp;
		OSDStart[winno-OSDCURSORWINDOW][0] = tmp>>8;
		#else
		OSDStart[winno-OSDCURSORWINDOW][0] = tmp;
		OSDStart[winno-OSDCURSORWINDOW][2] = tmp>>8;
		#endif

		val = GetOSDWindowY( winno );
		val += addy;
		tmp = (BYTE)val<<2;
		#ifdef TW8804D
		OSDStart[winno-OSDCURSORWINDOW][2] = tmp;
		OSDStart[winno-OSDCURSORWINDOW][0] = OSDStart[winno-OSDCURSORWINDOW][0] | (tmp>>4 & 0x70);
		#else
		OSDStart[winno-OSDCURSORWINDOW][1] = tmp;
		OSDStart[winno-OSDCURSORWINDOW][2] = OSDStart[winno-OSDCURSORWINDOW][2] | (tmp>>4 & 0x70);
		#endif	
	}

	WaitEndofDisplayArea();	
	//WriteTW88(0x90, 0x80); //Close OSD by external
/*	for (winno=OSDCURSORWINDOW; winno<=OSDMENU_TITLEWIN ;winno++ )
	{
		SetOSDWindowNum(j);
		WriteTW88(TW88_WINATTR, 0x00);
	}


	delay(1);
*/
	// Move OSD Position of each windows
	WriteTW88(0xff, ReadTW88(0xff) & 0xef);
	for( winno=OSDCURSORWINDOW; winno<=OSDMENU_TITLEWIN; winno++) 
	{
		SetOSDWindowNum(winno);				// set winno
		WriteI2Cn(TW88I2CAddress, 0xa0, &OSDStart[winno-OSDCURSORWINDOW], 3);  
	}
	WriteTW88(0xff, ReadTW88(0xff) | 0x10);
	SaveOSDPositionModeEE(i);

	WaitEndofDisplayArea();	
	WriteTW88(0x90, 0); // Open OSD


	return i;
}

/*
BYTE GetOSDMenuXValue(void)
{
	int ival;

	Mapping1(OSDMenuX, &OSDMenuXRange, &ival, &UserRange);
	OSDItemValue = ival;
	return (BYTE)ival;
}

BYTE GetOSDMenuYValue(void)
{
	int ival;

	Mapping1(OSDMenuY, &OSDMenuYRange, &ival, &UserRange);
	OSDItemValue = ival;
	return (BYTE)ival;
}


BYTE SetOSDMenuYValue(BYTE flag)
{

	int val, add;
	BYTE winno;

    add = ( flag==UP  ? 1  :  -1  );
	val =  OSDItemValue + add;
	if( val< UserRange.Min || val> UserRange.Max ) {
		return GetOSDMenuYValue();
	}

	Mapping1(val, &UserRange, &add, &OSDMenuYRange);
	SaveOSDYPositionEE(add);
	add -= OSDMenuY;
	OSDMenuY += add;
	SaveOSDYPositionEE(OSDMenuY);
	OSDItemValue = val;

	for( winno=OSDCURSORWINDOW; winno<=OSDMENU_TITLEWIN; winno++) {
		val = GetOSDWindowY( winno );
		SetOSDWindowY(winno,val+add);
	}
	return OSDItemValue;
}

BYTE SetOSDMenuXValue(BYTE flag)
{
	int val, add;
	BYTE winno;

	add = ( flag==UP  ? 1  :  -1  );
	val = OSDItemValue + add;
	if( val< UserRange.Min || val> UserRange.Max ) {
		return OSDItemValue;
	}

	Mapping1(val, &UserRange, &add, &OSDMenuXRange);
	add -= OSDMenuX;
	OSDMenuX += add;
	SaveOSDXPositionEE(OSDMenuX);
	OSDItemValue = val;

	for( winno=OSDCURSORWINDOW; winno<=OSDMENU_TITLEWIN; winno++) {
		val = GetOSDWindowX( winno );
		SetOSDWindowX(winno,val+add);
	}
	return OSDItemValue;

}
*/
#endif
/*
BYTE SetOSDDuration(BYTE newd)
{
	OSDDuration = newd;
	return OSDDuration;
}

*/
void ResetOSDValue(void)
{

	OSDMenuX = OSDPOSITIONMODE_TABLE[0][0];  // Default
	OSDMenuY = OSDPOSITIONMODE_TABLE[0][1];
	#ifdef SUPPORT_OSDPOSITIONMOVE
	SaveOSDPositionModeEE(0);
	#endif
//	SetOSDDuration( 10);
//	SaveOSDDurationEE(10);

	SaveOSDLangEE(0);	// Save default Language1

	InitOSDMenu();	
}

#define HOUR			1
#define MIN				2
/*#ifdef SUPPORT_TV
//val_index
WORD GetSystemClock_HM(void)
{

	OSDItemValue = GetTime_H();					//Clock_hour;
	OSDItemValue = ( OSDItemValue << 8 ) | GetTime_M();	//Clock_min;
	#ifdef DEBUG_OSD
	dPrintf("\r\n++(GetSystemClock_HM) OSDItemValue:0x%x __",  (WORD)OSDItemValue);
	#endif
	return OSDItemValue;
}

WORD SetClock_hour(BYTE flag)
{
	char add;
	int  h;

	add = ( flag==UP  ?  1  : -1  );
	h = OSDItemValue>>8;
	h = ( h + add + 24 ) % 24;

	OSDItemValue &= 0x00ff;
	OSDItemValue |= ( h << 8 );

	#ifdef DEBUG_OSD
	dPrintf("\r\n++(SetClock_hour) OSDItemValue:0x%x __",  (WORD)OSDItemValue);
	#endif
	return OSDItemValue;
}

WORD SetClock_min(BYTE flag)
{
	char add;
	int  m;

	add = ( flag==UP  ?  1  : -1  );
	m = ( ( OSDItemValue & 0x00ff ) + add + 60 ) % 60;

	OSDItemValue &= 0xff00;
	OSDItemValue |= m;
	return OSDItemValue;
}

#endif	//Support_TV
*/
#define MAX_LANG	5	// Max Language : 2
BYTE GetOSDLang(void)
{
	return OSDLang;
}

BYTE SetLanguage (BYTE flag)
{
	char inc;
	inc = ( flag==UP  ? 1  :  -1  );
	OSDLang = OSDLang + MAX_LANG + inc;
	OSDLang %= MAX_LANG ; 

	SaveOSDLangEE(OSDLang);

	return OSDLang;
}


#define INC_SLEEPTIMER		30
#define	MAX_SLEEPTIMER		150

BYTE ChangeSleepTimer( BYTE flag )
{
	int t;

	t = OSDItemValue / INC_SLEEPTIMER * INC_SLEEPTIMER;		//cut edge of remained sleep timer.

	if( flag==UP )	t+= INC_SLEEPTIMER;
	else			t-= INC_SLEEPTIMER;

	if( t<0 )		t = 0;
	if( t> MAX_SLEEPTIMER)	t = MAX_SLEEPTIMER;

	OSDItemValue = t;
	return OSDItemValue;
}


//======================================================================
/*BYTE GetOSDDurationValue(void)
{
	OSDItemValue = GetOSDDurationEE();
	return OSDItemValue;

}

BYTE GetOSDDuration(void)
{
	return OSDDuration;
}
*/
void SetRGBContrast( BYTE temp, BYTE val )
{
	WORD index;
	BYTE i;
	int newval, toValue;

	index = PC_COLOR_DATA + 1 + temp*3;
	for( i=0; i<3; i++)
	{
		 newval = ReadEEP( index+i );
		 Mapping1( newval, &UserRange , &toValue, &PCUserColorTempRange);
	 	 SetPanelContrastReg(i,   toValue + val );
	}
}

#define MAX_COLORTEMP	4

CODE BYTE PCColorTempRGB[][3]={
	75,		50,		50,				// Mode 1: Warm
	50,		50,		50,				// Mode 2: plain -- COLOR_MODE2
	50,		50,		75,				// Mode 3: Cold
	50,		50,		50				// User mode
};

#define COLOR_MODE2		1
#define COLOR_USER		3

BYTE SetPCColorTemp(BYTE flag)
{
	BYTE val;
	int  regv;
	char inc;

	//OSDItemValue = GetPCColorTempModeEE();

	inc = ( flag==UP  ? 1  :  -1  );
	OSDItemValue = OSDItemValue + MAX_COLORTEMP + inc;
	OSDItemValue %= MAX_COLORTEMP ; 

	SetPCColorTempModeEE ( OSDItemValue );
	val = GetPanelContrastEE();
	Mapping1( val, &UserRange ,&regv, &PanelContrastRange);
	SetRGBContrast( OSDItemValue, (BYTE)regv );

	if( GetPCColorTempModeEE() != 3 )  // User
			DrawAttrCnt(OSDMENU_SUBADDR+MENU_WIDTH*2, BACK_COLOR, (MENU_HEIGHT-1)*MENU_WIDTH );	
	else
			DrawAttrCnt(OSDMENU_SUBADDR+MENU_WIDTH*2, DEFAULT_COLOR, (MENU_HEIGHT-1)*MENU_WIDTH );	

	return OSDItemValue;
}

BYTE GetPCColorTemp(BYTE color) 
{
	OSDItemValue = GetPCUserColorTempEE(color);
	return OSDItemValue;
}

BYTE SetPCColor(BYTE color, BYTE flag) 
{
	int newval, toValue, regv;

//	GetPCColorTemp(color);
	newval = ( flag==UP  ? OSDItemValue+1  :  OSDItemValue-1  );
	if( newval< UserRange.Min || newval> UserRange.Max )
		return OSDItemValue;

	OSDItemValue = newval;
	Mapping1( newval, &UserRange , &toValue, &PCUserColorTempRange);
	SavePCUserColorTempEE(color, newval);

	newval = GetPanelContrastEE() ;
	Mapping1( newval, &UserRange ,&regv, &PanelContrastRange);

	SetPanelContrastReg(color,(BYTE)(toValue + regv) );

	return  OSDItemValue;
}



#if defined( SUPPORT_PC ) || defined( SUPPORT_DTV )

void ResetPanelAttributeValue(void)
{
	BYTE i, j;

	SetPCColorTempModeEE( COLOR_USER );	//default
	for( j=0; j< 4; j++)
		for( i=0; i< 3; i++)
			WriteEEP ( PC_COLOR_DATA + 1 + j*3 + i, PCColorTempRGB[j][i] );

	SavePanelContrastEE( UserRange.Default );
	SavePanelBrightnessEE( UserRange.Default );

	GetInitPanelAttribute1();		// Panel Brightness / Contrast
}

BYTE SetPanelContrast(BYTE flag) 
{

	int newval, regv;

	newval = ( flag==UP  ? OSDItemValue+1  :  OSDItemValue-1  );
	if( newval< UserRange.Min || newval> UserRange.Max )
		return OSDItemValue;

	Mapping1( newval, &UserRange , &regv, &PanelContrastRange);
	SetRGBContrast( GetPCColorTempModeEE(), regv );
	SavePanelContrastEE(newval);

	OSDItemValue = newval;
	return newval;
}

BYTE SetPanelBrightness(BYTE flag) 
{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品夜色噜噜亚洲aⅴ| 99久久伊人久久99| 国产片一区二区三区| 色美美综合视频| 久久精品久久精品| 一区二区三区 在线观看视频| 日韩美女天天操| 91久久免费观看| 国产肉丝袜一区二区| 在线播放国产精品二区一二区四区| 国产福利一区二区三区在线视频| 亚洲风情在线资源站| 国产精品国产三级国产aⅴ无密码| 91精品免费观看| 亚洲欧美日本韩国| 成人黄色在线网站| 国产真实乱对白精彩久久| 天天亚洲美女在线视频| 亚洲男人都懂的| 国产精品国产三级国产aⅴ中文| 日韩精品一区国产麻豆| 久久久久国产成人精品亚洲午夜 | 一区二区三区日本| 中文字幕欧美日韩一区| 欧美zozo另类异族| 91精品国产欧美一区二区成人| 在线亚洲高清视频| 色婷婷精品大在线视频| av亚洲产国偷v产偷v自拍| 国产三级欧美三级| 久久综合九色综合久久久精品综合 | 欧美成人一区二区三区片免费 | 久久久久久久久久久久久女国产乱| 欧美无砖专区一中文字| 91麻豆123| 色狠狠色狠狠综合| 色综合天天综合网天天看片| 99久久精品久久久久久清纯| 成人精品一区二区三区中文字幕| 国产综合一区二区| 国产乱理伦片在线观看夜一区| 久久精品国产秦先生| 免费成人美女在线观看| 蜜桃视频一区二区三区| 麻豆精品久久久| 久久久久99精品一区| 日韩美女久久久| 7777精品久久久大香线蕉| 欧美猛男男办公室激情| 91精品国产91热久久久做人人| 337p亚洲精品色噜噜噜| 日韩一级免费观看| 天天色 色综合| 中文一区二区完整视频在线观看| 欧美国产激情一区二区三区蜜月| 国产精品亲子乱子伦xxxx裸| 亚洲欧美日韩在线| 亚洲一区二区三区在线播放| 偷偷要91色婷婷| 日本不卡视频一二三区| 国产日韩精品久久久| 欧美大胆一级视频| 丝袜美腿亚洲一区二区图片| 日韩欧美一区二区不卡| 久久久久久久久久久久电影| 粉嫩欧美一区二区三区高清影视| 欧美天天综合网| 国产成人免费9x9x人网站视频| 成人国产精品免费| 在线亚洲免费视频| 精品久久久久久久一区二区蜜臀| 久久久亚洲午夜电影| 亚洲国产精品黑人久久久| 亚洲精品欧美在线| 麻豆中文一区二区| 国产91精品精华液一区二区三区| 97久久精品人人做人人爽50路| 欧美日韩在线不卡| 久久综合九色欧美综合狠狠| 欧美性生活影院| 精品嫩草影院久久| 综合色中文字幕| 日韩精品视频网站| 国产成人av电影| 欧美男生操女生| 欧美极品xxx| 日韩专区欧美专区| 精品久久久久久久久久久久久久久 | 成人亚洲一区二区一| 91色在线porny| 欧美另类一区二区三区| 国产亚洲精品bt天堂精选| 亚洲欧洲成人精品av97| 天天av天天翘天天综合网 | 日本不卡一二三区黄网| 91麻豆精品国产| 91麻豆精品秘密| 成人午夜av电影| 欧美一区二区精品在线| 国产精品久久久久久久裸模| 免费在线看成人av| 色综合色狠狠天天综合色| 久久综合久色欧美综合狠狠| 亚洲高清免费视频| 不卡在线观看av| 石原莉奈在线亚洲三区| 久久66热偷产精品| 欧美日韩国产综合视频在线观看| 日本一区二区不卡视频| 麻豆精品久久久| 欧美女孩性生活视频| 亚洲欧美日韩电影| 懂色av一区二区三区蜜臀| 欧美大胆一级视频| 日本va欧美va精品发布| 色成人在线视频| 日韩一区中文字幕| 国产高清不卡一区二区| 日韩欧美视频在线| 日韩精品电影在线观看| 欧美日韩专区在线| 亚洲免费色视频| 99在线精品观看| 国产目拍亚洲精品99久久精品| 久久人人97超碰com| 日本在线不卡视频| 欧美喷水一区二区| 亚洲一卡二卡三卡四卡无卡久久 | 色偷偷久久一区二区三区| 国产欧美日韩在线看| 国产精品香蕉一区二区三区| 国产精品乱码人人做人人爱| 欧美经典一区二区三区| 国产乱码精品一区二区三区av | 国产日韩精品视频一区| 国产精品亚洲成人| 国产偷v国产偷v亚洲高清| 国产成人精品免费看| 国产视频亚洲色图| 成人综合婷婷国产精品久久免费| 久久综合九色综合97婷婷女人| 精品影视av免费| 精品国产一区二区三区不卡| 麻豆精品久久精品色综合| 精品国产污污免费网站入口 | 最新不卡av在线| 亚洲123区在线观看| 欧美日韩一区二区三区不卡| 午夜一区二区三区视频| 欧美精品色综合| 久久福利视频一区二区| 欧美第一区第二区| 国产一区二区三区黄视频| 亚洲国产岛国毛片在线| 99久久精品免费看国产| 美国一区二区三区在线播放| 欧美精品xxxxbbbb| 久久精品国产亚洲a| 久久亚洲精品国产精品紫薇| 国产成人av电影在线播放| 亚洲天堂免费看| 欧美另类一区二区三区| 国产伦精一区二区三区| 国产精品久久久久久久久晋中 | 美脚の诱脚舐め脚责91| 国产成人a级片| 亚洲日本免费电影| 欧美精品自拍偷拍| 国产精品白丝av| 一区二区三区在线高清| 91精品婷婷国产综合久久竹菊| 中文字幕国产一区二区| 在线精品亚洲一区二区不卡| 美国十次了思思久久精品导航| 久久精品日韩一区二区三区| 91日韩一区二区三区| 午夜亚洲福利老司机| 久久丝袜美腿综合| 日本电影欧美片| 国产又黄又大久久| 99re视频精品| 国产日韩欧美精品一区| 欧美丝袜丝交足nylons| 国产一区在线观看视频| 亚洲一区二区三区自拍| 久久久精品国产免大香伊| 欧美怡红院视频| 国产99精品国产| 亚洲国产精品一区二区尤物区| 26uuu亚洲| 欧美天堂一区二区三区| 国产精品夜夜嗨| 午夜精品福利一区二区三区av| 国产网站一区二区| 91超碰这里只有精品国产| 成人av影视在线观看| 蜜桃av一区二区三区电影| 玉米视频成人免费看| 久久精品这里都是精品| 538在线一区二区精品国产|