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

📄 osddraw.c

📁 TFT LCD驱动芯片T100A+AU7" Source code
💻 C
📖 第 1 页 / 共 2 页
字号:
  	OSDCfgWr(CHAR_HEIGHT_CTRL,0x20);
	//OSDCfgWr(CHAR_HEIGHT_CTRL,0x40);  //For malata only
  	OSDCfgWr(BLINK_CTRL,0x01);
   //OSDCfgWr(ALPHA_BLD_CTRL,0x80);          /* Alpha blending is disable */
    OSDCfgWr(ALPHA_BLD_CTRL,0x8A);//0x00);       //0x86   // Alpha blending is disable; for malata only

	OSDLoadColor();
	//OSDSetRamAddr(FONT_DATA_START_ADDRESS);
#if 0
// set TW to fast mode
#ifdef TW100K
	I2CWriteByte(TW702_WR_ADDR,TW_INTERFACE,0x04);
#else
   I2CWriteByte(TW702_WR_ADDR,TW_INTERFACE,0x05);
#endif
#endif

	twdWr_Burst_A(OSD_RAM_DL);
	//Below is re-writted
	for(i=0; i<128*FONT_HEIGHT; i++)
	{
		twdWr_Burst_D(font_00[2*i]);
   	twdWr_Burst_D(font_00[2*i+1]);
	}

  //0xc00==1024*3;
	for(; i<0xc00; i++){
   	twdWr_Burst_D(0x00);
     twdWr_Burst_D(0x00);
	}
 	twdWr_Burst_P();

	for(i=0;i<15;i++)
	{
  		OSDCleanLine(0,i,0,31);
     	OSDSetLineAttribute(i,0x80);
	}
//#endif
}

void OSDLoadColor(void)
{
	uCHAR 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(uWORD address)
{
	I2CWriteByte(TW101,OSD_RAM_AH,(uCHAR)(address>>8));
  	I2CWriteByte(TW101,OSD_RAM_AL,(uCHAR)(address & 0xff));
//EA=0;
}

void OSDEnable(void)
{
	m_bOSDEnable = 1;
	OSDCfgWr(OSD_CTRL,0x98);
	//OSDCfgWr(OSD_CTRL,0x99); //For malata only

#ifdef TIMER0
//	if(m_bFactryMode)	return;
	Timer0Start();
#endif

}

void OSDDisable(void)
{
/*
#ifdef TIMER0
	if(!m_bFactryMode)

#endif
*/		Timer0Stop();
	OSDCfgWr(OSD_CTRL,0x18);
	m_cOSDEvent=0;
	m_cOSDFunc=0;
	m_cItem=1;
//	m_bAdjRGBColor=0;  //Init color
	m_bOSDEnable=0;
	m_cCurreKey=m_cPreKey=0xFF;
}
extern bit bFactry_Func,bFactry_Menu;

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

void OSDEventMgr(void)
{
    Timer0Stop();
	  switch(m_cOSDEvent)
		{
	      case CLOSEMENU:
		        OSDExit();
		        break;
	      case OPENMENU:
		        m_cItem=1;
		        OSDOpenMenu();
		//m_cOSDFunc|=m_cItem;
			      OSDMoveCursor(0x00,0x17);
		        break;	
	      case FUNCSELCT_IN:
		        OSDFuncSelect(1);
//			OSDShowData(COL_GAUGE);
		        break;
	      case FUNCSELCT_DN:
		        OSDFuncSelect(-1);
//			OSDShowData(COL_GAUGE);
		        break;
	      case FUNCENTER:
		        if(m_cOSDFunc==idVOLUMEMENU
						 ||m_cOSDFunc==idBRIGHTMENU
		         ||m_cOSDFunc==idCONTRASTMENU 
		         ||m_cOSDFunc==idSATMENU_VIDEO
		         ||m_cOSDFunc==idSHARP_VIDEO
		         ||m_cOSDFunc==idHUEMENU_VIDEO
		         ||m_cOSDFunc==idLANGUAGE_MENU)
		    {
//			OSDClearPage();  // Del by charles
            OSDCfgWr(0x10,0x00); //Disable window
		//Ruby test OSDPosition(LEFT_BOTTOM);
            OSDPosition(CENTER);
			      OSDShowSubpage();
			      break;
		    }
//		    OSDFuncEnter();
		        break;
        case FUNCSEL_DN:
					  if(m_cItem == 1)
					  {
						    OSDCleanLine(17,6,COL_GAUGE,OSD_LENGTH);
					  }
						else
						{
				        OSDCleanLine(17,m_cItem-1,COL_GAUGE,OSD_LENGTH);
						}
					  OSDShowVideoData();
					  break;
        case FUNCSEL_UP:
					  if(m_cItem == 6)
					  {
						    OSDCleanLine(17,1,COL_GAUGE,OSD_LENGTH);
					  }
						else
						{
				        OSDCleanLine(17,m_cItem+1,COL_GAUGE,OSD_LENGTH);
						}
					  OSDShowVideoData();
					  break;
	      case FUNCEXIT:
			      OSDFuncExit();
		        break;
	      case FUNCADJ_IN:
		        OSDItemAdj(INCREASE);
		        break;
	      case FUNCADJ_DN:
		        OSDItemAdj(DECREASE);
		        break;
	      case FUNCADCCAL:
		        break;
	      case POWERMANAGE:
		        m_bKyPowerOn = m_bKyPowerOn^0x01;
		        PowerManage();
		//if(m_bChipPowerOn)
		//	BKPower();
		    break;
	  default:	
			  break;
	  }
	  if(m_bOSDEnable)
		    Timer0Start();
}

void OSDOpenMenu(void)
{
	OSDPosition(CENTER);
	switch(m_cOSDFunc){
	case idMAINMENU:
		break;
	case idCOLORMENU:
		break;
	case idLANGMENU:
		break;
	case idTVMENU_VIDEO:
		OSDShowLine(iBlankLine,0,0,COL_TITLE,OSD_LENGTH);
		OSDShowLine(iTuning_E,0,0,COL_TITLE,OSD_LENGTH);
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)0<<5)+20);
		twdWr_Burst_A(OSD_RAM_DL);
		twdWr_Burst_D('M');
		twdWr_Burst_D(COL_TITLE);
		twdWr_Burst_D('H');
		twdWr_Burst_D(COL_TITLE);
		twdWr_Burst_D(0x17); //'z'
		twdWr_Burst_D(COL_TITLE);
		twdWr_Burst_D(BLANK); //'z'
		twdWr_Burst_D(COL_TITLE);
		//Draw shadow
		//OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)0<<5)+24);
		//twdWr_Burst_A(OSD_RAM_DL);
		twdWr_Burst_D(0x40); //V
		twdWr_Burst_D(0x02);
		twdWr_Burst_P();
		break;
	case idSRCMENU:
		return;
	case idFCTRYMENU:
		return;
	}
	OSDPosition(CENTER);
	OSDEnable();
	OSDShowPage();	//Title
	OSDShowVideoData();
}

void OSDFuncSelect(sCHAR sStep)
{
 	//Remove previous cursor
	//OSDHLLine(m_cItem, COL_NORMAL);

	switch(m_cOSDFunc&0xf0){
	case idMAINMENU:
		if((m_cSource&0x0C)==0x00)//isrcVIDEO)
		{
			if(m_cItem+sStep>=1 && m_cItem+sStep<=6 )	m_cItem+=sStep;
			else
			{
				if(sStep<0)	m_cItem=6;
				else		m_cItem=1;
			}
		}
		else
		{
     		if(m_cItem+sStep>=1 && m_cItem+sStep<=10 )	m_cItem+=sStep;
			else
			{
				if(sStep<0)		m_cItem=10;
				else			m_cItem=1;
			}
		}
		break;
	case idCOLORMENU:
		if(m_cItem+sStep>=1 && m_cItem+sStep<=5)		m_cItem+=sStep;
		else
		{
			if(sStep<0)			m_cItem=5;
			else				m_cItem=1;
		}
		break;
	case idLANGMENU:
		if(m_cItem+sStep>=1 && m_cItem+sStep<=5)		m_cItem+=sStep;
		else
		{
			if(sStep<0)		m_cItem=5;
			else			m_cItem=1;
		}
		break;
	case idSRCMENU:
		if(m_cItem<4)		m_cItem++;
		else				m_cItem=1;
		break;
	case idFCTRYMENU:
		if(m_cItem+sStep>=1 && m_cItem+sStep<=9 )
		{
			if(sStep>0)
			{
				if(m_cItem==6)	m_cItem+=3;
				else 			m_cItem+=sStep;
			}
			else
			{
				if(m_cItem==9) m_cItem-=3;
				else 			m_cItem+=sStep;
			}

		}
		else
		{
			if(sStep<0)		m_cItem=9;
			else			m_cItem=1;
		}
		break;
	case id9300MENU:
		if(m_cItem<8)		m_cItem++;
		else				m_cItem=6;
		m_cOSDFunc=(m_cOSDFunc&0xf0)|(m_cItem-5);
		OSDMoveCursor(0x12,0x17);
		return;
	case id6500MENU:
		if(m_cItem<11)
			m_cItem++;
		else
			m_cItem=9;
		m_cOSDFunc=(m_cOSDFunc&0xf0)|(m_cItem-8);
		OSDMoveCursor(0x12,0x17);
		return;
	case idTVMENU_VIDEO:
		if(m_cItem+sStep>=1 && m_cItem+sStep<=6)		m_cItem+=sStep;
		else
		{
			if(sStep<0)			m_cItem=6;
			else				m_cItem=1;
		}
		break;
	default:
		break;
	}

	m_cOSDFunc=(m_cOSDFunc&0xf0)|m_cItem;
  //High Light Current item
		OSDMoveCursor(0x00,0x17);
}


void OSDFuncEnter(void)
{
#ifdef TV
	uCHAR cTemp;
	uWORD wTemp;
	if (m_cOSDFunc==idTVMENU_VIDEO)
	{
		//Clear Previous Page;
		//OSDClearPage();
//		OSDExit();
		m_cItem=1;
		cTemp=TVEEPGetChannel();
		wTemp=TVSetChannel(cTemp-1);

		twdDelay(200);
		//SrcControl();
		OSDOpenMenu();
#ifdef PAL
		OSDDrawTVFreq(wTemp);
		OSDDrawBand(wTemp);
#endif			
		OSDMoveCursor(0x00,0x17);
		m_cOSDFunc=idCHANNEL_TV;
		return;
	}
	else
	{
		switch(m_cOSDFunc){
		case idAUTOMEMORY_TV:
			AutoMemory();
			return;
//		case idAUTOSCAN_TV:
//			AutoScan();
//			return;
		case idFINETUNE_TV:
			m_cOSDFunc=idFINETUNEMENU_TV;
			OSDCfgWr(0x10,0x00); //Disable window
			OSDShowLine(iBlankLine,0,2,COL_GAUGE,OSD_LENGTH);
			OSDShowLine(iPixelIcon,ICON_STAT,2,COL_GAUGE,OSD_LENGTH);
			OSDShowLine(iFineTune_E,TXT_STAT,2,COL_GAUGE,OSD_LENGTH);
			break;
		case idCHANNEL_TV:
			m_cOSDFunc=idCHANNELMENU_TV;
			OSDCfgWr(0x10,0x00); //Disable window
			cTemp = I2CReadByte(EEPVIDEOBLOCK, 0x01);
			OSDShowLine(iBlankLine,0,3,COL_GAUGE,OSD_LENGTH);
			OSDShowLine(iPixelIcon,ICON_STAT,3,COL_GAUGE,OSD_LENGTH);
			OSDShowLine(iChannel_E,TXT_STAT,3,COL_GAUGE,OSD_LENGTH);
			OSDDrawNum(cTemp, 0, 19, 3, COL_GAUGE, DRAW_BLANK|0x03);
			break;
		default:	return;
		}
	}
#endif
}

void OSDFuncExit(void)
{

}
void OSDShowPage(void)
{
	uCHAR i=0;
	uCHAR y=1;

	MULTILANGUAGEOSD *pOSDLangPtr;
	OSDMENU **pOSDMenuPtr;

	OSDPosition(CENTER);
	if((m_cSource&0x0F)==(isrcTV))
		pOSDLangPtr=&MultiLangOSDTV[0];
	else
		pOSDLangPtr=&MultiLangOSD[0];
	pOSDMenuPtr=pOSDLangPtr->osdMenuPtr;  //Main

 	while(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].iconStr!=NULL)
	{
		OSDShowLine(iBlankLine,0,y,COL_TITLE,OSD_LENGTH);//TV Kuo
		OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y<<5)+24);
		twdWr_Burst_A(OSD_RAM_DL);
		twdWr_Burst_D(0x3C); //V
		twdWr_Burst_D(0x02);
		twdWr_Burst_P();

		OSDShowLine(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].iconStr,ICON_STAT,y,COL_TITLE,OSD_LENGTH);//TV Kuo
		if(m_cOSDFunc==idCOLORMENU)
			OSDShowLine(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].txtStr,TXT_STAT-2,y,COL_TITLE,OSD_LENGTH);
		else
			OSDShowLine(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].txtStr,TXT_STAT,y,COL_TITLE,OSD_LENGTH);
		i++;
		y++;
	}
	OSDShowLine(iBlankLine,0,y,COL_TITLE,OSD_LENGTH);//Kuo TV

⌨️ 快捷键说明

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