📄 osddraw.c
字号:
#include <reg51.h>
#include "common.h"
#include "System.h"
#include "Struct.h"
#include "OSDDraw.h"
#include "Keypad.h"
#include "TwoWire.h"
#include "TW101Reg.h"
#include "OSDCtrl.h"
#include "Video.h"
#include "Tuner.h"
#include "OSD1218.h"
#include "font1218.c"
#include "fontChinese1218.c"
#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_cOSDFunc;
extern uWORD idata m_wVRes;
extern uWORD idata m_wHRes;
extern uCHAR idata m_cSource;
extern uCHAR idata m_cLang;
extern uCHAR idata m_cMode;
extern sCHAR sStep;
extern uCHAR idata ChangeTime;
extern bit ChangeLang;
extern bit Key;
extern bit AdjustSig;
extern idata m_cOSDFactoryMenu;
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;
MULTICHINESELANGUAGEOSD *pOSDChineseLangPtr;
OSDMENU **pOSDChineseMenuPtr;
MULTIFACTORYOSD *pOSDFactoryLangPtr;
OSDMENU **pOSDFactoryMenuPtr;
uCHAR cTotal=5;
// 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};
/*
uCHAR code cOSDMenuLutData[32]={
//0xGB, 0x0R
0x00,0x00, //0
0x0f,0x00, //1 blue
0x00,0x00, //2 black
0x0f,0x0a, //3 purple
0x0e,0x00, //4 dark blue
0xf8,0x00, //5 green
0x22,0x0A, //6 red
0xc4,0x0c, //7 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
};
*/
uCHAR code cOSDMenuLutData[32]={ //For test
//0xGB, 0x0R
0x00,0x00, //0
0x0f,0x00, //1 blue
0x00,0x0f, //2 black
0xf0,0x00, //3 purple
0x0f,0x00, //1 blue
0x00,0x0f, //2 black
0x0f,0x00, //3 purple
0x0f,0x00, //1 blue
0x00,0x0f, //2 black
0xf0,0x00, //3 purple
0x0f,0x00, //1 blue
0x00,0x0f, //2 black
0xf0,0x00, //3 purple
0x0f,0x00, //1 blue
0x00,0x0f, //2 black
0xf0,0x00, //3 purple
};
#define LOGO_ON
#ifdef LOGO_ON
#define OSDBMP_2BIT_PIXEL 0xf8
#define OSDBMP_4BIT_PIXEL 0xb8
#define OSDBMP_TYPE OSDBMP_2BIT_PIXEL
#define BMP_HPOS (1024-320)/2
#define BMP_VPOS (768-76)/2
#include "logo1113_new.c"
bit OSD_PowerOnLogo_On = 1;
// define OSD Logo BMP LUT color data
code unsigned char OSDLutLogoData[32]={
0x0f,0x0f,
0x0F,0x00,
0x0F,0x00,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x00,0x00,
0x03,0x00,
0x03,0x00,
0x03,0x00,
0x07,0x00,
0x03,0x00,
0x02,0x00,
0x0E,0x00,
0x0B,0x00,
};
#endif //LOGO_ON
void OSDLogo(void)
{
unsigned int i = 0;
I2CWriteByte(TW101, 0xC2, 0x12); //add by zjl
I2CWriteByte(TW101, 0x9d, 0x10); //add by zjl
I2CWriteByte(TW101, 0x9e, 0xff); //add by zjl
I2CWriteByte(TW101, 0x9f, 0x40); //add by zjl
I2CWriteByte(TW101, PATTERN_CTRL, 0x87); //add by zjl
#ifdef LOGO_ON
OSDSetRamAddr(FONT_DATA_START_ADDRESS);
I2CWriteByte(TW101,OSD_CFG_INDEX,OSD_LUT_RAM_DATA);
for(i=0;i<32;i++)
I2CWriteByte(TW101,OSD_CFG_DATA,OSDLutLogoData[i]);
OSDCfgWr(BW_W,20);
OSDCfgWr(BW_H,29);
OSDCfgWr(0x0a,0x05);
OSDCfgWr(0x04,0x80);
twdWr_Burst_A(OSD_RAM_DL);
for(i=0;i<40*32;i++)
twdWr_Burst_D(logodata[i]);
OSDCfgWr(CHAR_DLY_0,0x00); //V[10:8] bit 6-4; H[10:8] bit2-0
OSDCfgWr(CHAR_DLY_1,0x40); //H[7:0]
OSDCfgWr(CHAR_DLY_2,0x40);
twdWr_Burst_P();
OSDCfgWr(OSD_CTRL,0xf8); //2 bits pixel BitMap
twdDelay(2000);
#endif
}
void OSDInit(void)
{
unsigned int i,j;
OSDCfgWr(OSD_CTRL,0x18); //disable osd and width*1
OSDSetRamAddr(FONT_DATA_START_ADDRESS);
OSDCfgWr(CHAR_FONT_SIZE,FONT_SIZE);
OSDCfgWr(0x0d,0x96);
OSDCfgWr(CHAR_RAM_BASE_A,CHAR_MAIN_MENU_START); //To setup character index start address.
//If start address is 0x9c0,
//You have get ((0x9c0 >> 5) & 0x7f) to store it
OSDCfgWr(CHAR_RAM_END_A,CHAR_RAM_END); //This is to set index end address.
OSDCfgWr(BLINK_CTRL,0x09);
OSDCfgWr(ALPHA_BLD_CTRL,0x86);
OSDLoadColor(); //For test
OSDSetRamAddr(FONT_DATA_START_ADDRESS);
twdWr_Burst_A(OSD_RAM_DL);
//Below is re-writted
if(m_cLang==L_ENGLISH)
{
for(j=0;j<TOTAL_FONT_NUM;j++)
for(i=0; i<FONT_HEIGHT; i++){
twdWr_Burst_D(AllFonts[j][2*i]);
twdWr_Burst_D(AllFonts[j][2*i+1]);
}
}
else if(m_cLang==L_CHINESE)
{
for(j=0;j<TOTAL_FONT_NUM;j++)
for(i=0; i<FONT_HEIGHT; i++){
twdWr_Burst_D(AllChineseFonts[j][2*i]);
twdWr_Burst_D(AllChineseFonts[j][2*i+1]);
}
}
//0x400==1024;
for(i=(TOTAL_FONT_NUM+1)*FONT_HEIGHT; i<0x400; i++){
twdWr_Burst_D(0x00);
twdWr_Burst_D(0x00);
}
twdWr_Burst_P();
for(i=0;i<OSD_LINE_NUM;i++)
{
OSDCleanLine(0,i,0,31);
OSDSetLineAttribute(i,0x80);
}
}
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]);
twdDelay(500);
/*
I2CWriteByte(TW101, 0xC2, 0x12); //add by zjl
I2CWriteByte(TW101, 0x9d, 0x10); //add by zjl
I2CWriteByte(TW101, 0x9e, 0xff); //add by zjl
I2CWriteByte(TW101, 0x9f, 0x40); //add by zjl
I2CWriteByte(TW101, PATTERN_CTRL, 0x87); //add by zjl */
}
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);//0x98);
#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;*/
m_cCurreKey=m_cPreKey=0xFF;
m_cOSDEvent=0;
m_cOSDFunc= 0;
m_cOSDMenu=idNULLMENU;
m_cOSDFactoryMenu=ifaNULLMENU;
}
void OSDExit(void)
{
OSDCfgWr(OSD_CTRL,0x18);
OSDCfgWr(0x10,0x00); //Disable window
OSDDisable();
Key = 0;
if(AdjustSig==0)
OSDLogo();
}
void OSDFuncSelect(sCHAR sStep)
{
if(m_cLang==L_ENGLISH)
OSDClearCursor(0x00, 0x00);
else if(m_cLang==L_CHINESE)
OSDClearChineseCursor(0x00,0x00);
switch(m_cOSDFunc)
{
case idBRIGHTMENU:
m_cOSDFunc = idCONTRASTMENU;
break;
case idCONTRASTMENU:
m_cOSDFunc = idSHARPMENU;
break;
case idSHARPMENU:
m_cOSDFunc = idSATMENU;
break;
// case idSATMENU:
// m_cOSDFunc = idHUEMENU;
// break;
// case idVOLUMESOURCEMENU:
/// m_cOSDFunc = idVOLUMEMENU;
// break;
case idSATMENU:
m_cOSDFunc = idLANGUAGEMENU;
break;
}
switch(m_cOSDMenu){
case idVIDEOMENU:
OSDShowVideoData();
break;
case idTVMENU:
OSDShowTVData();
break;
default:
break;
}
if(m_cLang==L_ENGLISH)
OSDMoveCursor(0x00,0x00);
else if(m_cLang==L_CHINESE)
OSDMoveChineseCursor(0x00,0x00);
return;
}
void OSDEventMgr(void)
{
Timer0Stop();
switch(m_cOSDEvent){
case CLOSEMENU:
OSDExit();
break;
case OPENMENU:
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_cOSDFunc=1;
if(m_cLang==L_ENGLISH)
OSDShowPage();
else if(m_cLang==L_CHINESE)
OSDShowChinesePage();
switch(m_cOSDMenu){
case idVIDEOMENU:
ir_repeat=1;
// OSDShowLine(iBlankLine,0,0,COL_TITLE,OSD_LENGTH);
// OSDShowLine(MainMenuStr[EepOSDPub[OSD_cOSDLang]],1,0,COL_TITLE,OSD_LENGTH);
OSDShowVideoData();
break;
case idTVMENU:
ir_repeat=0;
// OSDShowLine(iBlankLine,0,0,COL_TITLE,OSD_LENGTH);
// OSDShowLine(PictMenuStr[EepOSDPub[OSD_cOSDLang]],1,0,COL_TITLE,OSD_LENGTH);
OSDShowTVData();
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:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -