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

📄 osddraw.c

📁 C环境 TCON T118芯片驱动文件
💻 C
字号:

#include "T118\\OSDDraw.h"
//#include "OSDDRAW.h"
#include "memmap_i2c.h"
#if (defined T102)|(defined T106)|(defined T112)|(defined T116)|(defined T118)	
//#include "T102_OSDString.h"
//#include "T102OSD.h"
#endif

BYTE const cOSDMenuLutData[32]={ //For test
  //0xGB,0x0R
  	0x0f,0x00, //1 blue
  	0x00,0x00, //2 black
  	0x0f,0x0a, //3 purple
	0x0f,0x00, //4 blue
  	0xf8,0x00, //5 green
	0x22,0x0A, //6 red
  	0x1f,0x01, //7 light blue//olive
	0x88,0x05, //8 light grey
  	0xb9,0x0b, //9 purple
  	0xBD,0x05, //A purple
  	0x0f,0x0f, //B 
  	0xA3,0x0A, //C Yellow
	0xcc,0x0c, //D light grey
	0x68,0x03, //E Light Blue Main Menu Background or 0x79, 0x04 which is a litter light
  	0xff,0x0f, //F white
	0x00,0x00, //0
};


extern int WriteToI2c(int iDeviceAddr,int iAddr,BYTE *bData,int len);
void I2CWriteByte(int cDevAddr, int cReg, BYTE cData)
{
BYTE temp_i2c_data = cData;
WriteToI2c(cDevAddr,cReg,&temp_i2c_data,1);
}

// OSD config register Write
void OSDCfgWr(BYTE index,BYTE dat)
{
 I2CWriteByte(TW101,OSD_CFG_INDEX,index);
 I2CWriteByte(TW101,OSD_CFG_DATA,dat);
}

void OSDLoadColor(void)
{
	BYTE i;
	I2CWriteByte(TW101,OSD_CFG_INDEX,OSD_LUT_RAM_DATA);
  	for(i=0;i<32;i++)
		I2CWriteByte(TW101,OSD_CFG_DATA,cOSDMenuLutData[i]);

}

void OSDSetRamAddr(int address)
{
	I2CWriteByte(TW101,OSD_RAM_AH,(BYTE)(address>>8));
  	I2CWriteByte(TW101,OSD_RAM_AL,(BYTE)(address & 0xff));
}

void OSDEnable(void)
{
	OSDCfgWr(OSD_CTRL,0x84);//0x80);//0x84);//0x98); //change by Sherman 05'11'01
	I2CWriteByte(TW101,0xe2,0x11);
}

void OSDDisable(void)
{
	OSDCfgWr(OSD_CTRL,0x18);
}

void OSDExit(void)
{
	OSDCfgWr(OSD_CTRL,0x18);
	OSDCfgWr(0x10,0x00); //Disable window
	OSDDisable();
//	OSDClearPage();
}

#if 0
typedef enum
{
	OSD_BRIGHT_INDEX = 0,
	OSD_CONTRAST_INDEX,
	OSD_COLOR_INDEX,
	OSD_SHAPPNESS_INDEX,
	OSD_SCREEN_MODE_INDEX,	
	OSD_OVERTURN_INDEX,
	OSD_DEFAULT_INDEX,

} OSDSTATUS;

#endif


#if 0
#define OSD_BRIGHT_ADDR				
#define OSD_CONTRAST_ADDR				
#define OSD_SHAPPNESS_ADDR			
#define OSD_COLOR_ADDR			
#define OSD_SCREEN_MODE_ADDR				
#define OSD_OVERTURN_ADDR		
EXTERN BYTE osd_bright;
EXTERN BYTE osd_contrast;
EXTERN BYTE osd_shappness;
EXTERN BYTE osd_color;
EXTERN BYTE osd_screen_mode;
EXTERN BYTE osd_overturn;
#endif

void OSDOpenMenu(void)
{
	printf_w("\n*********************** OSDOpenMenu\n");
	BYTE bright,contrast,color,sharppness,screen_mode,overturn;
	OSDClearPage();
	OSDPosition(TOP);
	OSDEnable();

	OSDShowLine(iBright_E,2,1,COL_NORMAL,OSD_LENGTH);	
	OSDNumConvert(osd_bright);
	OSDShowLine(temp_string,25,1,COL_NORMAL,OSD_LENGTH);

	OSDShowLine(iContrast_E,2,2,COL_NORMAL,OSD_LENGTH);		
	OSDNumConvert(osd_contrast);	
	OSDShowLine(temp_string,25,2,COL_NORMAL,OSD_LENGTH);

	OSDShowLine(iSat_E,2,3,COL_NORMAL,OSD_LENGTH);	
	OSDNumConvert(osd_color);		
	OSDShowLine(temp_string,25,3,COL_NORMAL,OSD_LENGTH);


	OSDShowLine(iSharp_E,2,4,COL_NORMAL,OSD_LENGTH);	
	OSDNumConvert(osd_shappness);
	OSDShowLine(temp_string,25,4,COL_NORMAL,OSD_LENGTH);

	OSDShowLine(iSCREEN_M,2,5,COL_NORMAL,OSD_LENGTH);	
if(osd_screen_mode)	
	OSDShowLine(iSCREEN_NOR,22,5,COL_NORMAL,OSD_LENGTH);		
else
	OSDShowLine(iSCREEN_WIDE,24,5,COL_NORMAL,OSD_LENGTH);	

	OSDShowLine(iOVERTURN,2,6,COL_NORMAL,OSD_LENGTH);	
if(osd_overturn)	
	OSDShowLine(i_ON,25,6,COL_NORMAL,OSD_LENGTH);	
else
	OSDShowLine(i_OFF,25,6,COL_NORMAL,OSD_LENGTH);	

	OSDShowLine(iDEFAULT,2,7,COL_NORMAL,OSD_LENGTH);	
		
}



void OSDCleanLine(BYTE x,BYTE y,BYTE cColor,BYTE cLength)
{
	if((x < 30) && ( y < OSD_LINE_NUM))
  	{
  		OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5));
	//extern int WriteToI2c(int iDeviceAddr,int iAddr,BYTE *bData,int len);
      BYTE temp_data;
	BYTE i;
	for(i =0;i<cLength;i++)
		{
		temp_data = BLANK;
		WriteToI2c(TW101,OSD_RAM_DL,&temp_data,1);
		temp_data =cColor;
		WriteToI2c(TW101,OSD_RAM_DL,&temp_data,1);
		}
	
	
   //  	twdWr_Burst_A(OSD_RAM_DL);      // Write OSD index
  /*   	
     	while((x < 30) && (x < cLength))
     	{
     		twdWr_Burst_D(BLANK);
        	twdWr_Burst_D(cColor);
        	x++;
     	}
*/
     	
//     	twdWr_Burst_P();
	}
}

void OSDClearPage(void)
{
	BYTE i=0;
	for(i=0;i<OSD_LINE_NUM;i++)
  	{
  		OSDCleanLine(0,i,0,30);
     	OSDSetLineAttribute(i,0x80);
	}
}



void OSDSetLineAttribute(BYTE cLine,BYTE cAttribute)
{
     OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)cLine << 5)+31);
BYTE temp_date1[2] = {0x00,cAttribute};
WriteToI2c(TW101,OSD_RAM_DL,temp_date1,2);		

//     twdWr_Burst_A(OSD_RAM_DL);      // Write OSD index
 //    twdWr_Burst_D(0);
 //    twdWr_Burst_D(cAttribute);
//	 twdWr_Burst_P();
}

#if 0
	OSD_BRIGHT_INDEX = 0,
	OSD_CONTRAST_INDEX,
	OSD_COLOR_INDEX,
	OSD_SHAPPNESS_INDEX,
	OSD_SCREEN_MODE_INDEX,	
	OSD_OVERTURN_INDEX,
	OSD_DEFAULT_INDEX,

#endif

void OSDShowVideoData(void)
{

printf_w("\n&&&&&&&&&&&&&&&&&&&&& OSDSHOWVIDEODATA\n");	
	switch(osd_menu_status){
		case OSD_BRIGHT_INDEX:
			OSDShowLine(iDEFAULT,2,7,COL_NORMAL,OSD_LENGTH);	
			
			OSDShowLine(iBright_E,2,1,COL_TITLE,OSD_LENGTH);	
			OSDNumConvert(osd_bright);
			OSDShowLine(temp_string,25,1,COL_TITLE,OSD_LENGTH);			
			printf_w("\n************************osd_bright   %d\n",osd_bright);
			break;
		case OSD_CONTRAST_INDEX:
			OSDShowLine(iBright_E,2,1,COL_NORMAL,OSD_LENGTH);	
			OSDNumConvert(osd_bright);
			OSDShowLine(temp_string,25,1,COL_NORMAL,OSD_LENGTH);	
			
			OSDShowLine(iContrast_E,2,2,COL_TITLE,OSD_LENGTH);		
			OSDNumConvert(osd_contrast);	
			OSDShowLine(temp_string,25,2,COL_TITLE,OSD_LENGTH);		
			printf_w("\n************************osd_contrast   %d\n",osd_contrast);		
			break;
		case OSD_COLOR_INDEX:
			OSDShowLine(iContrast_E,2,2,COL_NORMAL,OSD_LENGTH);		
			OSDNumConvert(osd_contrast);	
			OSDShowLine(temp_string,25,2,COL_NORMAL,OSD_LENGTH);	
			
			OSDShowLine(iSat_E,2,3,COL_TITLE,OSD_LENGTH);	
			OSDNumConvert(osd_color);		
			OSDShowLine(temp_string,25,3,COL_TITLE,OSD_LENGTH);		
			printf_w("\n************************osd_color   %d\n",osd_color);		
			break;
		case OSD_SHAPPNESS_INDEX:
			OSDShowLine(iSat_E,2,3,COL_NORMAL,OSD_LENGTH);	
			OSDNumConvert(osd_color);		
			OSDShowLine(temp_string,25,3,COL_NORMAL,OSD_LENGTH);
			
			OSDShowLine(iSharp_E,2,4,COL_TITLE,OSD_LENGTH);	
			OSDNumConvert(osd_shappness);
			OSDShowLine(temp_string,25,4,COL_TITLE,OSD_LENGTH);	
			printf_w("\n************************osd_shappness   %d\n",osd_shappness);		
			break;
		case OSD_SCREEN_MODE_INDEX:
			OSDShowLine(iSharp_E,2,4,COL_NORMAL,OSD_LENGTH);	
			OSDNumConvert(osd_shappness);
			OSDShowLine(temp_string,25,4,COL_NORMAL,OSD_LENGTH);	
			
			OSDShowLine(iSCREEN_M,2,5,COL_TITLE,OSD_LENGTH);	
		if(osd_screen_mode)	
			OSDShowLine(iSCREEN_NOR,22,5,COL_TITLE,OSD_LENGTH);		
		else
			OSDShowLine(iSCREEN_WIDE,24,5,COL_TITLE,OSD_LENGTH);				
			break;
		case OSD_OVERTURN_INDEX:
			OSDShowLine(iSCREEN_M,2,5,COL_NORMAL,OSD_LENGTH);	
		if(osd_screen_mode)	
			OSDShowLine(iSCREEN_NOR,22,5,COL_NORMAL,OSD_LENGTH);		
		else
			OSDShowLine(iSCREEN_WIDE,24,5,COL_NORMAL,OSD_LENGTH);	
		
			OSDShowLine(iOVERTURN,2,6,COL_TITLE,OSD_LENGTH);	
		if(osd_overturn)	
			OSDShowLine(i_ON,25,6,COL_TITLE,OSD_LENGTH);	
		else
			OSDShowLine(i_OFF,25,6,COL_TITLE,OSD_LENGTH);				
			break;
		case OSD_DEFAULT_INDEX:
			OSDShowLine(iOVERTURN,2,6,COL_NORMAL,OSD_LENGTH);	
		if(osd_overturn)	
			OSDShowLine(i_ON,25,6,COL_NORMAL,OSD_LENGTH);	
		else
			OSDShowLine(i_OFF,25,6,COL_NORMAL,OSD_LENGTH);	
		
			OSDShowLine(iDEFAULT,2,7,COL_TITLE,OSD_LENGTH);	
			break;
		default:	break;
  	}	
}
/*
#ifdef AU_35
#define GAUGE_TOTAL_FONT_L		10  //Long
#else
#define GAUGE_TOTAL_FONT_L		25  //Long
#endif
*/
#if ((defined _160_234) | (defined _294_228) |(defined _320_234) | (defined _320_240))
#define GAUGE_TOTAL_FONT_L		20  // for test by Sherman 06'02'08  //10  //Long
#else
#define GAUGE_TOTAL_FONT_L		25 //Long
#endif

	#define Y0RightTop					0x00
	#define Y1RightTop					0xEA
	#define Y2RightTop					0x00
	                        				
	#define	Y0Center				0x00
	#define Y1Center					0xEA
	#define Y2Center					0x00
	                        			
	#define Y0LeftBottom				0x12
	#define Y1LeftBottom				0x00
	#define Y2LeftBottom				0x60		

void OSDPosition(BYTE cPos)
{	
	if(cPos==RIGHT_TOP){
		OSDCfgWr(CHAR_DLY_0,Y0RightTop);	//V[10:8] bit 6-4; H[10:8] bit2-0  23 12
  		OSDCfgWr(CHAR_DLY_1,Y1RightTop);    //H[7:0]                           80 80
  		OSDCfgWr(CHAR_DLY_2,Y2RightTop);    //v[7:0]                           64 30
	}
	if(cPos==CENTER){
 		OSDCfgWr(CHAR_DLY_0,Y0Center); 		//V[10:8] bit 6-4; H[10:8] bit2-0
  		OSDCfgWr(CHAR_DLY_1,Y1Center);    	//H[7:0]
  		OSDCfgWr(CHAR_DLY_2,Y2Center);    	//v[7:0]
	}
	else if(cPos==LEFT_BOTTOM){//not define yet!
  		OSDCfgWr(CHAR_DLY_0,Y0LeftBottom); 	//V[10:8] bit 6-4; H[10:8] bit2-0
  		OSDCfgWr(CHAR_DLY_1,Y1LeftBottom);  //H[7:0]
  		OSDCfgWr(CHAR_DLY_2,Y2LeftBottom);  //v[7:0]	//00
	}
}




⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -