📄 osddraw.c
字号:
#include <reg51.h>
#include <intrins.h>
#include "common.h"
#include "System.h"
//#include "Struct.h"
#include "OSDDraw.h"
//#include "OSDCtrl.h"
//#include "Video.h"
#include "TwoWire.h"
#include "TW100Reg.h"
#include "OSD1218.h"
#include "font1218.c"
//#include "OSDTbl.h"
//#include "OSDMenu.h"
#define TURE 1
//extern bit bGAMMA_ADJ;
//bit m_bOSDEnable=0;
//bit m_bKyPowerOn=0;
//bit m_bChipPowerOn=0;
//extern uCHAR idata m_cBuff[5];
//extern uWORD idata m_wBuff[3];
//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 uCHAR idata cSource;
//extern uCHAR idata AddPoint;
//extern uCHAR idata GammaBuffer;
//extern void AdjustGammmaDate(void);
//void BKPower(void);
//void PowerManage(void);
#define GAUGE_Y 6
//extern EEPVIDEO idata EepVideo;
//#ifdef TIMER0
//extern void Timer0Start(void);
//extern void Timer0Stop(void);
//#endif
//#ifdef NVRAM
//#include "NVRam.h"
//extern uWORD idata m_wEepRom;
//#endif
/////////////////////////////////////////////
//sary/////////////
#include "OSD_main.h"
#include "OSD_source.h"
#include "OSD_audio.h"
#include "OSD_video.h"
#include "OSD_screen.h"
#include "OSD_system.h"
extern bit OSD_enable;
extern uCHAR window;
extern uCHAR cursor1, cursor2;
extern bit enter;
extern unsigned char CurMode; //source_val; //source chosen
//Audio
extern unsigned char Aud_BassLevel; //0(-7)->15(+7)
extern unsigned char Aud_TrebleLevel; //0(-7)->15(+7)
extern unsigned char Aud_BalanceLevel; //0(L7)->15(R7)
extern unsigned char Aud_FaderLevel; //0(F7)->15(R7)
extern unsigned int AudioStatus;
extern unsigned char Aud_IniVol;
/*extern bit subwoofer; //0 off, 1 on
extern bit beep; //0 off, 1 on
extern unsigned char start_vol; //0->50*/
//video
extern unsigned char bright;
extern unsigned char contrast;
extern unsigned char color;
extern unsigned char sharp;
//screen
extern unsigned int VideoStatus;
/*extern bit direction; //0 normal, 1 inv
extern bit full; //0 4:3, 1 16:9
*/
//System
extern unsigned char MinoutState; //in_out; //0 none, 1 level-1,
//2 level-2, 3 level-3
extern unsigned char TiltLimit; //tilt_range; //2 auto, 3 1-3,
//4 1-4, 5 1-5
extern unsigned char ChannelType; //tv_sys; //0 NTSC, 1 PAL, 2 CHINESE
extern unsigned char PalType; //tv_sound; //0 sound-3, 1 sound-1
//2 sound-2
extern unsigned int TiltFlag0; //bit tilt; //0 auto, 1 manual
//extern bit backlight; //0 normal, 1 bright
//reset
extern bit reset_valid; //0: no 1:ok
//////////////////////////////////////////////
/*
code OSDMENU *OSDMenu_E[]={
MainMenu_E,
};
code OSDMENU *OSDMenu_C[]={
MainMenu_C,
};
typedef struct tagMULTILANGUAGEOSD{
uCHAR cLangID;
OSDMENU **osdMenuPtr;
}MULTILANGUAGEOSD;
MULTILANGUAGEOSD code MultiLangOSD[]={
{eENGLISH, OSDMenu_E},
{eCHINESE, OSDMenu_C},
};
code uCHAR *MessageData[] = {
iNoSignal,
iNoSupport,
iFailSafeMode,
iAutoAdjust,
iPowerOff,
iADCCalib,
iAdcSubsample,
iSyncError
};
*/
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
};
void OSDInit(void)
{
unsigned int i;
OSDCfgWr(OSD_CTRL,0x18); //disable osd and width*1
// OSDCfgWr(OSD_CTRL,0x18);
OSDSetRamAddr(FONT_DATA_START_ADDRESS);
OSDCfgWr(CHAR_FONT_SIZE,FONT_SIZE);
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(CHAR_BS_CTRL,0x40);
OSDCfgWr(CHAR_BS_COLOR,0x00);
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,0x02); //0x86 // Alpha blending is disable; for malata only
OSDLoadColor();
//OSDSetRamAddr(FONT_DATA_START_ADDRESS);
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);
}
}
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
//#ifndef 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 GammaAdjust:
bGAMMA_ADJ=TURE;
AddPoint=0;
GammaBuffer=I2CReadByte(EEPBLOCK1,AddPoint);
OSDPosition(CENTER);
OSDEnable();
OSDShowLine(iGAMMA,0,0,COL_TITLE,OSD_LENGTH);
OSDDisplayNum(AddPoint, 8,0, COL_TITLE);
OSDDisplayNum(GammaBuffer, 13,0, COL_TITLE);
break;
case CLOSEMENU:
OSDExit();
break;
case OPENMENU:
m_cItem=1;
OSDOpenMenu();
OSDMoveCursor(0x00,0x17);
break;
case FUNCSELCT_IN:
if(bGAMMA_ADJ==TURE){
AddPoint++;
if(AddPoint>=GAMMA_TABLE_DATA_SIZE)
AddPoint=0;
GammaBuffer=I2CReadByte(EEPBLOCK1,AddPoint);
OSDDisplayNum(AddPoint, 8,0, COL_TITLE);
OSDDisplayNum( GammaBuffer, 13,0, COL_TITLE);
}
else
OSDFuncSelect(-1);
break;
case FUNCSELCT_DN:
if(bGAMMA_ADJ==TURE){
if(AddPoint==0)
AddPoint=GAMMA_TABLE_DATA_SIZE;
AddPoint--;
GammaBuffer=I2CReadByte(EEPBLOCK1,AddPoint);
OSDDisplayNum(AddPoint, 8,0, COL_TITLE);
OSDDisplayNum( GammaBuffer, 13,0, COL_TITLE);
}
else
OSDFuncSelect(1);
break;
case FUNCEXIT:
OSDFuncExit();
break;
case FUNCADJ_IN:
if(bGAMMA_ADJ==TURE){
GammaBuffer++;
I2CWriteByte(EEPBLOCK1,AddPoint,GammaBuffer);
OSDDisplayNum(AddPoint, 8,0, COL_TITLE);
OSDDisplayNum(GammaBuffer, 13,0, COL_TITLE);
AdjustGammmaDate();
}
else
OSDItemAdj(INCREASE);
break;
case FUNCADJ_DN:
if(bGAMMA_ADJ==TURE){
GammaBuffer--;
I2CWriteByte(EEPBLOCK1,AddPoint,GammaBuffer);
OSDDisplayNum(AddPoint, 8,0, COL_TITLE);
OSDDisplayNum(GammaBuffer, 13,0, COL_TITLE);
AdjustGammmaDate();
}
else
OSDItemAdj(DECREASE);
break;
case POWERMANAGE:
m_bKyPowerOn = m_bKyPowerOn^0x01;
PowerManage();
//if(m_bChipPowerOn)
// BKPower();
break;
default: break;
}
//if(m_bOSDEnable)
// Timer0Start();
}*/
/*void OSDDisplayNum(uCHAR cVal, uCHAR x, uCHAR y, uCHAR cColor)
{ uCHAR i;
uCHAR cTemp=cVal;
uCHAR Num[2]=0;
Num[0]=(uCHAR)(cTemp/16);
Num[1]=(uCHAR)(cTemp%16);
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5)+x);
twdWr_Burst_A(OSD_RAM_DL);
for(i=0;i<2;i++){
OSDNumConvert(Num[i]);
twdWr_Burst_D(cColor );
x++;
}
twdWr_Burst_P();
}
*/
/*void OSDOpenMenu(void)
{
OSDPosition(CENTER);
OSDEnable();
OSDShowPage(); //Title
m_cOSDFunc|=m_cItem;
OSDShowVideoData();
}*/
/*void OSDFuncExit(void)
{
OSDCfgWr(0x10,0x00); //Disable window
OSDClearPage();
OSDDisable();
m_cOSDEvent=0;
m_cItem=1;
}*/
/*void OSDFuncSelect(sCHAR sStep)
{
//Remove previous cursor
//OSDHLLine(m_cItem, COL_NORMAL);
switch(m_cOSDFunc&0xf0){
case idMainMenu:
if(m_cItem+sStep>=1 && m_cItem+sStep<=5 ) m_cItem+=sStep;
else{
if(sStep<0) m_cItem=5;
else m_cItem=1;
}
break;
default:
break;
}
m_cOSDFunc=(m_cOSDFunc&0xf0)|m_cItem;
//High Light Current item
OSDMoveCursor(0x00,0x17);
}
*/
/*void OSDShowPage(void)
{
uCHAR i=0;
uCHAR y=1;
MULTILANGUAGEOSD *pOSDLangPtr;
OSDMENU **pOSDMenuPtr;
OSDPosition(CENTER);
pOSDLangPtr=&MultiLangOSD[0];
pOSDMenuPtr=pOSDLangPtr->osdMenuPtr; //Main
while(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].iconStr!=NULL)
{
OSDShowLine(iBlankLine,0,y,COL_NORMAL,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_NORMAL,OSD_LENGTH);//TV Kuo
OSDShowLine(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].txtStr,TXT_STAT,y,COL_NORMAL,OSD_LENGTH);
if(pOSDMenuPtr[(m_cOSDFunc>>4)-1][i].cDataAttr==GAUGE)
{
OSDShowVideoNum(i+m_cOSDFunc+1,y);
}
i++;
y++;
}
OSDShowLine(iBlankLine,0,y,COL_NORMAL,OSD_LENGTH);//Kuo TV
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -