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

📄 osddraw.c

📁 t112 参考文件
💻 C
📖 第 1 页 / 共 2 页
字号:
#include <reg51.h>
#include "common.h"
#include "System.h"
#include "Struct.h"
#include "OSDDraw.h"
#include "Keypad.h"
#include "TwoWire.h"
#include "TW10xReg.h"
#include "OSDCtrl.h"
#include "OSDDRAW.h"
#include "Video.h"
#include "Tuner.h"

#if (defined T100A)|(defined T101A)|(defined T101)
#include "T100_OSDString.h"
#include "T100OSD.h"
#endif

#if (defined T102)|(defined T106)|(defined T112)
#include "T102_OSDString.h"
#include "T102OSD.h"
#endif


#include "OSDTbl.h"
#include "OSDMenu.h"
#include "intrins.h"
extern uCHAR ir_data;
extern uCHAR m_cSoundSystem;
extern uCHAR ir_data;
extern uCHAR ir_repeat;
extern bit m_bAir_Cable;
extern bit m_bTV_Skip;
extern bit m_bKyPowerFlat;
extern bit m_bBKPowerOn;
extern bit m_bOSDEnable;
extern bit m_bKyPowerOn;
extern bit m_bChipPowerOn;
extern bit m_bKyBlocked;
extern uCHAR idata m_cBuff[5];
extern uWORD idata m_wBuff[3];
extern uDWORD	m_dwBuff[2];
extern uCHAR idata m_cOSDEvent;
extern uCHAR idata m_cCurreKey;
extern uCHAR idata m_cPreKey;
extern uCHAR idata m_cItem;
extern uCHAR idata m_cOSDFunc;
extern uWORD idata m_wVRes;
extern uWORD idata m_wHRes;
extern uCHAR idata m_cSource;

extern uCHAR idata m_cTV_Num;

extern uDWORD m_dwVFrameCntPre;
extern uWORD  m_wHSyncPeriodPre;
extern void BKPower(void);
extern void PowerManage(void);
extern void AutoScanChannel(void);

#if VIDEO_AVAILABLE
extern EEPVIDEO idata EepVideo;
#endif

#ifdef TIMER0
extern void Timer0Start(void);
extern void Timer0Stop(void);
#endif

#ifdef NVRAM
#include "NVRam.h"
extern uWORD idata m_wEepRom;
#endif


extern uCHAR idata m_cOSDMenu;



MULTILANGUAGEOSD *pOSDLangPtr;
OSDMENU **pOSDMenuPtr;
uCHAR	cTotal=0;


//                                                             ADC         Digi
//Bright,contrast,sharp,freq,phase,hpos,vpos,Bklight,OSDH/V,Gain/Offset Gain/Offset Volume
OSDPARAMS code sOSDParamsMax=
{0xff,	    0xff,    5,  20, 0x1f, 40,  20,		20,	80,65, 0xC0,0xff,  0xff,0xff,	0xFF};
OSDPARAMS code sOSDParamsMin=
{0,	 	 	 0,    	 0,  0,  0x00, 0,   0,		0,	   1,1,	 0,0, 		 0,0,		0x00};
OSDPARAMS code sOSDParamsDef=
{0x80,	    0x80, 	 2,  10, 0x10, 20,  10,		10,	75,45, 0x80,0x80,  0x80,0x80,	0x40};

#if (defined T102)|(defined T106)|(defined T112)
uCHAR code 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
};
#else
uCHAR code cOSDMenuLutData[32]={
    //0xGB, 0x0R
    0x00,0x00, //0
    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
};
#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));

}

void OSDEnable(void)
{
	m_bOSDEnable = 1;
	OSDCfgWr(OSD_CTRL,0x84);//0x80);//0x84);//0x98); //change by Sherman 05'11'01

#ifdef TIMER0
	Timer0Start();
#endif

}

void OSDDisable(void)
{
	Timer0Stop();
	OSDCfgWr(OSD_CTRL,0x18);
	m_cOSDEvent=0;
	m_cOSDFunc=0;
	m_cItem=1;
	m_bOSDEnable=0;
	m_cCurreKey=m_cPreKey=0xFF;
}

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

void OSDFuncSelect(sCHAR sStep)
{
 	//Remove previous cursor
    OSDClearCursor();
	if(m_cItem+sStep>=1 && m_cItem+sStep<=cTotal)
		m_cItem+=sStep;
	else
	{
		if(sStep<0)
			m_cItem=cTotal;
		else
			m_cItem=1;
	}
	m_cOSDFunc=m_cItem;

	switch(m_cOSDMenu){
	case idVIDEOMENU:
	    OSDShowVideoData();
	    break;
	case idTVMENU:
//		OSDShowTVData();  // mark by Sherman 05'11'14
		break;
	default:
		break;
	}
	OSDMoveCursor();
	return; 
}


void OSDEventMgr(void)
{
	Timer0Stop();	
	switch(m_cOSDEvent){
	case CLOSEMENU:
		OSDExit();
		break;
	case OPENMENU:
		m_cItem=1;
		OSDOpenMenu();
		break;	
		
	case FUNCSELCT_IN:
		OSDFuncSelect(1);
		break;
	case FUNCSELCT_DN:
		OSDFuncSelect(-1);
		break;
	case FUNCENTER:
			OSDClearPage();
            OSDPosition(CENTER);
			OSDShowPage();  
			break;
	case FUNCEXIT:
			OSDFuncExit();
		break;
	case FUNCADJ_IN:
		OSDItemAdj(INCREASE);
		break;
	case FUNCADJ_IN1:
		OSDItemAdj(INCREASE1);
		break;
	case FUNCADJ_DN:
		OSDItemAdj(DECREASE);
        break;
	case FUNCADJ_DN1:
		OSDItemAdj(DECREASE1);
		break;
	case FUNCADCCAL:
		break;
	case POWERMANAGE:
		m_bKyPowerOn = m_bKyPowerOn^0x01;
		PowerManage();
		break;
	default:	break;
	}

	if(m_bOSDEnable)
		Timer0Start();
}

void OSDOpenMenu(void)
{
	OSDClearPage();
	OSDPosition(CENTER);
	OSDEnable();
	m_cItem=1;
	m_cOSDFunc=1;

	OSDShowPage();	
	switch(m_cOSDMenu){
	case idVIDEOMENU:
	     ir_repeat=1;
        OSDShowVideoData();
		break;
	case idTVMENU:
		ir_repeat=0;
//		OSDShowTVData();	// mark by Sherman 05'11'14
		break;
	default:
		return;
	}
	m_cOSDEvent=OPENMENU;
}

void OSDFuncExit(void)
{

}

uCHAR OSD_cOSDLang=0;
void OSDShowPage(void)
{
	uCHAR y=1;

	pOSDLangPtr=&MultiLangOSD[OSD_cOSDLang];
	pOSDMenuPtr=pOSDLangPtr->osdMenuPtr;  
	cTotal=0;

	while(pOSDMenuPtr[m_cOSDMenu-1][cTotal].iconStr!=NULL)
	{
		OSDShowLine(iBlankLine,0,y,COL_NORMAL,OSD_LENGTH);
		//OSDShowLine(pOSDMenuPtr[m_cOSDMenu-1][cTotal].iconStr,ICON_STAT,y,COL_NORMAL,OSD_LENGTH);
		OSDShowLine(pOSDMenuPtr[m_cOSDMenu-1][cTotal].txtStr,TXT_STAT,y,COL_NORMAL,OSD_LENGTH);
//		idx = pOSDMenuPtr[(m_cOSDFunc>>4)-1][cTotal].cidIdx;		
		switch (pOSDMenuPtr[(m_cOSDMenu-1)-1][cTotal].cDataAttr)
		{
			case GAUGE:
			case NUMBER:
//				OSDDrawNum(EepOSDPub[idx],sOSDParams1[idx].Max,NUM_STAT,y,COL_NORMAL);
				break;
//			case OPTION:
//				OSDShowOption(y,COL_NORMAL);
//				break;
//			case INFO:
//				OSDShowInfo(0,(cTotal+1),COL_GAUGE);
//				break;
			case NONE:
			default:
				break;
		}
		cTotal++;
		y++;
		//twdDelay(30);
	}
	OSDShowLine(iBlankLine,0,y++,COL_NORMAL,OSD_LENGTH);				  
	OSDShowLine(iBlankLine,0,y,COL_NORMAL,OSD_LENGTH);
	
	OSDMoveCursor();
}

void OSDCleanLine(uCHAR x,uCHAR y,uCHAR cColor,uCHAR cLength)
{
	if((x < 30) && ( y < OSD_LINE_NUM))
  	{
  		OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x);
     	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)
{
	uCHAR i=0;
	for(i=0;i<OSD_LINE_NUM;i++)
  	{
  		OSDCleanLine(0,i,0,30);
     	OSDSetLineAttribute(i,0x80);
	}
}

void OSDSetLineAttribute(uCHAR cLine,uCHAR cAttribute)
{
     OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)cLine << 5)+31);
     twdWr_Burst_A(OSD_RAM_DL);      // Write OSD index
     twdWr_Burst_D(0);

⌨️ 快捷键说明

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