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

📄 osddraw.c

📁 STC89C58RD +宏芯(driver)驱动TOPPTFT_LCD
💻 C
📖 第 1 页 / 共 2 页
字号:
			break;
		case idHUEMENU:
			OSDDrawGauge(EepVideo.cHue,V_HUE_MAX,0,gauge_y, COL_GAUGE);
			OSDDrawNum(EepVideo.cHue,V_HUE_MAX,NUM_STAT,gauge_y,COL_TITLE,DRAW_BLANK|0x03); 
			break;
#if (defined T112) | (defined T116)	    
		case idRGBMENU:	  // add by Sherman 06'01'18
			OSDDrawGauge(EepVideo.cRGB,V_RGB_MAX,0,gauge_y, COL_GAUGE);
			OSDDrawNum(EepVideo.cRGB,0/*V_RGB_MAX*/,NUM_STAT,gauge_y,COL_TITLE,DRAW_BLANK|0x03); 
			break;
		case idVCOMAMENU: // add by Sherman 06'01'23
			OSDDrawGauge(EepVideo.cVCOMA,V_VCOMA_MAX,0,gauge_y, COL_GAUGE);
			OSDDrawNum(EepVideo.cVCOMA,0,NUM_STAT,gauge_y,COL_TITLE,DRAW_BLANK|0x03); 
			break;
		case idVCOMDMENU: // add by Sherman 06'01'23
			OSDDrawGauge(EepVideo.cVCOMD,V_VCOMD_MAX,0,gauge_y, COL_GAUGE);
			OSDDrawNum(EepVideo.cVCOMD,0,NUM_STAT,gauge_y,COL_TITLE,DRAW_BLANK|0x03); 
			break;
#endif
		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



void OSDDrawGauge(uCHAR cVal, uCHAR cMax, uCHAR x, uCHAR y, uCHAR cColor)
{
	int index,i,j;
	int step_size=100/GAUGE_TOTAL_FONT_L;
	
	OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y<< 5)+x);	
	twdWr_Burst_A(OSD_RAM_DL);      // Write OSD index
	index= (int)cVal*GAUGE_TOTAL_FONT_L/(int)cMax;
    for(i=0;i<index;i++){
	  twdWr_Burst_D(GuageFull_Idx);//34);//1);   // full
	  twdWr_Burst_D(cColor);
    }
	j=((int)cVal*100/(int)cMax)-index*step_size;
	j=j/2;//2.5;
	twdWr_Burst_D(j+GuageEmpty_Idx);//35);//2);   // residue
	twdWr_Burst_D(cColor);

    for(i=index+1;i<GAUGE_TOTAL_FONT_L;i++)
	{
	  twdWr_Burst_D(GuageEmpty_Idx);//35);//2);  // empty
	  twdWr_Burst_D(cColor);
	}
	twdWr_Burst_P();
	

}

//Maximum three initiger, percentage
void OSDDrawNum(uWORD wVal, uCHAR cMax, uCHAR x, uCHAR y, uCHAR cColor, uCHAR cAttr)
{
	//Init Part
	uCHAR cTemp;
	if(cMax!=0)
	{
		m_wBuff[0]=(unsigned long)wVal*100;
		m_wBuff[0]=m_wBuff[0]/cMax;
  	}
	else //Non percentage
	{
		m_wBuff[0]=wVal;
	}

	if(m_wBuff[0]<10)
		m_cBuff[1]=1;
	else if(m_wBuff[0]<100)
		m_cBuff[1]=2;
	else
    	m_cBuff[1]=3;

	OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x);
	twdWr_Burst_A(OSD_RAM_DL);      // Write OSD index

	if((cAttr&0xF0)==DRAW_BLANK)
	{
		switch(m_cBuff[1]){
		case 1:
			if((cAttr&0x0F)==3||(cAttr&0x0F)==2)
			{
	  			twdWr_Burst_D(BLANK);
				twdWr_Burst_D(cColor);
			}
		case 2:
			if((cAttr&0x0F)==3)
			{
				twdWr_Burst_D(BLANK);
				twdWr_Burst_D(cColor);
			}
	  	}
	}
	else if((cAttr&0xF0)==DRAW_ZERO)
	{
		switch(m_cBuff[1]){
		case 1:
			if((cAttr&0x0F)==3||(cAttr&0x0F)==2)
			{
	  			twdWr_Burst_D('0'-IndexNumOffset);
				twdWr_Burst_D(cColor);
			}
		case 2:
			if((cAttr&0x0F)==3)
			{
				twdWr_Burst_D('0'-IndexNumOffset);
				twdWr_Burst_D(cColor);
		   	}
	  	}
	}


	while(m_cBuff[1]>0)
	{
		if(m_cBuff[1]==3)
			cTemp=m_wBuff[0]/100;
		else if(m_cBuff[1]==2)
			cTemp=(m_wBuff[0]%100)/10;
		else if(m_cBuff[1]==1)
			cTemp=m_wBuff[0]%10;

		OSDNumConvert(cTemp);
    	twdWr_Burst_D(cColor );
		m_cBuff[1]--;
	}
  	twdWr_Burst_P();
}


void OSDNumConvert(uCHAR cNum)
{
	switch(cNum){
	case 9:	twdWr_Burst_D('9'-IndexNumOffset);		break;
	case 8:	twdWr_Burst_D('8'-IndexNumOffset);		break;
	case 7:	twdWr_Burst_D('7'-IndexNumOffset);		break;
	case 6:	twdWr_Burst_D('6'-IndexNumOffset);		break;
	case 5:	twdWr_Burst_D('5'-IndexNumOffset);		break;
	case 4:	twdWr_Burst_D('4'-IndexNumOffset);		break;
	case 3:	twdWr_Burst_D('3'-IndexNumOffset);		break;
	case 2:	twdWr_Burst_D('2'-IndexNumOffset);		break;
	case 1:	twdWr_Burst_D('1'-IndexNumOffset);		break;
	case 0:	twdWr_Burst_D('0'-IndexNumOffset);		break;
	default: break;
	}
}

//Ruby add 2004-06-08
extern uCHAR idata m_cScaleratio;
void OSDShowRatio(void)
{
uCHAR i;
	for(i=0;i<OSD_LINE_NUM;i++)
  	{
  		OSDCleanLine(0,i,0,30);
     	OSDSetLineAttribute(i,0x80);
	}
	OSDPosition(RIGHT_TOP);
    switch(m_cScaleratio)
    {
  		case ScaleFULL:
				OSDShowLine(iScaleFULL,16,1,COL_GAUGE,OSD_LENGTH);
				break;
		case Scale16_9:	
				OSDShowLine(iScale16_9,16,1,COL_GAUGE,OSD_LENGTH);
				break;
#if (ZOOM_MODES >=2)
		case ZOOM_1:	
				OSDShowLine(iZoom_1,16,1,COL_GAUGE,OSD_LENGTH);
                break;
#endif
#if (ZOOM_MODES >=3)	//Bruce, 2006/01/10
		case ZOOM_2:	
				OSDShowLine(iZoom_2,16,1,COL_GAUGE,OSD_LENGTH);
                break;
#endif
#if (ZOOM_MODES >=4)

		case Scale4_3:
				OSDShowLine(iScale4_3,16,1,COL_GAUGE,OSD_LENGTH);
                break;
#endif
#if (ZOOM_MODES >=5)
		case ZOOM_3:	
				OSDShowLine(iZoom_3,16,1,COL_GAUGE,OSD_LENGTH);
                break;
#endif
#if (ZOOM_MODES >=6)
		case ZOOM_4:	
				OSDShowLine(iZoom_4,16,1,COL_GAUGE,OSD_LENGTH);
                break;
#endif
#if (ZOOM_MODES >=7)
		case ZOOM_5:	
				OSDShowLine(iZoom_5,16,1,COL_GAUGE,OSD_LENGTH);
                break;
#endif
#if (ZOOM_MODES >=8)
		case ZOOM_6:	
				OSDShowLine(iZoom_6,16,1,COL_GAUGE,OSD_LENGTH);
                break;
#endif
#if (ZOOM_MODES >=9)
		case ZOOM_7:	
				OSDShowLine(iZoom_1,16,1,COL_GAUGE,OSD_LENGTH);
                break;                       
#endif
/*#ifdef T515
		case Scale1_1:	
				OSDShowLine(iScale1_1,16,1,COL_GAUGE,OSD_LENGTH);
				break;
#endif*/
	}
	OSDEnable();	
/*	
uCHAR i;
	for(i=0;i<8;i++)
  	{
  		OSDCleanLine(0,i,0,30);
     	OSDSetLineAttribute(i,0x80);
	}
	OSDPosition(RIGHT_TOP);
    switch(m_cScaleratio)
    {
  		case ScaleFULL:
				OSDShowLine(iScaleFULL,16,1,COL_GAUGE,OSD_LENGTH);
				break;
		case Scale16_9:	
				OSDShowLine(iScale16_9,16,1,COL_GAUGE,OSD_LENGTH);
				break;

		case Scale4_3:	
				OSDShowLine(iScale4_3,16,1,COL_GAUGE,OSD_LENGTH);
                break;
	}
	OSDEnable();
*/	
}


void OSDShowSource(void)
{
uCHAR i;
	// add by kenny on 941115
    OSDDisable();
	//=========================
	for(i=0;i<OSD_LINE_NUM;i++)
  	{
  		OSDCleanLine(0,i,0,30);
     	OSDSetLineAttribute(i,0x80);
	}
	OSDPosition(RIGHT_TOP);
	
    OSDShowLine(OSDSource[m_cSource-1],1,1,COL_GAUGE,OSD_LENGTH);

	OSDEnable();
#ifdef T116 //kenny 20060301
	I2CWriteByte(TW101,0xE2,0x11);
#endif
}

extern uCHAR idata m_cStandard;
void OSDShowNTSC_PAL(void)
{
	uCHAR i;

	// add by kenny on 941115
    OSDDisable();
	for(i=0;i<10;i++)
  	{
  		OSDCleanLine(0,i,0,30);
     	OSDSetLineAttribute(i,0x80);
	}
	OSDPosition(RIGHT_TOP);
	//=======================
	if(m_cChroma==S_NTSC) 			OSDShowLine(iNTSC  ,16,1,COL_GAUGE,OSD_LENGTH);	
	else if(m_cChroma==S_PAL)		OSDShowLine(iPAL   ,16,1,COL_GAUGE,OSD_LENGTH);	
	else if(m_cChroma==S_SECAM) 	OSDShowLine(iSECAM ,16,1,COL_GAUGE,OSD_LENGTH); 	
	else if(m_cChroma==S_NTSC_4) 	OSDShowLine(iNTSC_4,16,1,COL_GAUGE,OSD_LENGTH); 		
	else if(m_cChroma==S_PAL_M) 	OSDShowLine(iPAL_M ,16,1,COL_GAUGE,OSD_LENGTH);
	else if(m_cChroma==S_PAL_CN) 	OSDShowLine(iPAL_CN,16,1,COL_GAUGE,OSD_LENGTH);  

	OSDEnable();
#ifdef T116 //kenny 20060301
	I2CWriteByte(TW101,0xE2,0x11);
#endif

}

void OSDClearCursor(void)
{
	pOSDLangPtr=&MultiLangOSD[OSD_cOSDLang];
	pOSDMenuPtr=pOSDLangPtr->osdMenuPtr;
 	OSDShowLine(pOSDMenuPtr[m_cOSDMenu-1][m_cOSDFunc-1].txtStr,TXT_STAT,m_cOSDFunc,COL_NORMAL,OSD_LENGTH);
    return;
}


void OSDMoveCursor(void)
{
	pOSDLangPtr=&MultiLangOSD[OSD_cOSDLang];
	pOSDMenuPtr=pOSDLangPtr->osdMenuPtr;  
	OSDShowLine(pOSDMenuPtr[m_cOSDMenu-1][m_cOSDFunc-1].txtStr,TXT_STAT,m_cOSDFunc,BLUE_PURPLE,OSD_LENGTH);
    return;
}


void OSDPosition(uCHAR 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+0x30);    //H[7:0]                           80 80
  		OSDCfgWr(CHAR_DLY_2,0x30);//Y2RightTop);    //v[7:0]                           64 30
	}
	if(cPos==CENTER){
 		OSDCfgWr(CHAR_DLY_0,0x00); 		//V[10:8] bit 6-4; H[10:8] bit2-0
  		OSDCfgWr(CHAR_DLY_1,0x00);    	//H[7:0]
  		OSDCfgWr(CHAR_DLY_2,0x00);    	//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
	}
}



unsigned char m_item=1;


void Osd_Simple_menu(void)
{
    OSDPosition(RIGHT_TOP);
    m_item++;
		if(m_item > 2) m_item = 1;
		switch(m_item)
		{
		    case 1:
      		OSDShowLine(iBright_E,1,8,COL_NORMAL,OSD_LENGTH);					
    			OSDDrawNum(EepVideo.cBright,V_BRIGHT_MAX,11,8,COL_TITLE,DRAW_BLANK|0x03); 
					break;
				case 2:
      		OSDShowLine(iContrast_E,1,8,COL_NORMAL,OSD_LENGTH);					
    			OSDDrawNum(EepVideo.cContrast,V_BRIGHT_MAX,11,8,COL_TITLE,DRAW_BLANK|0x03); 
					break;
		}
		OSDEnable();
}

void Osd_Simple_menu_adj(signed dir)
{
    OSDPosition(RIGHT_TOP);
		switch(m_item)
		{
		    case 1:
					if(dir > 0)
					{
					    if(EepVideo.cBright < V_BRIGHT_MAX) 
							EepVideo.cBright=EepVideo.cBright+2;
					}
					else 
					{
					    if(EepVideo.cBright > V_BRIGHT_MIN) EepVideo.cBright=EepVideo.cBright-2;
					}
    			OSDDrawNum(EepVideo.cBright,V_BRIGHT_MAX,11,8,COL_TITLE,DRAW_BLANK|0x03); 
       		I2CWriteByte(TW101,VBRIGHT,EepVideo.cBright);  //Ruby 2004-10-09
					break;
				case 2:
					if(dir > 0)
					{
					    if(EepVideo.cContrast < V_BRIGHT_MAX) 
							EepVideo.cContrast=EepVideo.cContrast+2;
					}
					else 
					{
					    if(EepVideo.cContrast > V_BRIGHT_MIN) EepVideo.cContrast=EepVideo.cContrast-2;
					}
    			OSDDrawNum(EepVideo.cContrast,V_BRIGHT_MAX,11,8,COL_TITLE,DRAW_BLANK|0x03); 
      		I2CWriteByte(TW101,VCONTRAST,EepVideo.cContrast);  //Ruby 2004-10-09
					break;
		}
		OSDEnable();
}




⌨️ 快捷键说明

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