📄 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 "SrcCtrl.h"
//#include "Display.h"
#include "Video.h"
#include "Tuner.h"
#ifdef NEW_OSD
#include "OSD_1216.h"
#include "font1216.c"
#else
#include "OSD1218.h"
#include "font1218.c"
#endif
#include "OSDTbl.h"
#include "OSDMenu.h"
extern uCHAR ir_data;
extern uCHAR m_cSoundSystem;
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
#define GAUGE_Y 7 // 6 change by charles
code OSDMENU *OSDMenu_E[]={
mainMenu_E,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
colorMenu,
langMenu,
NULL,
srcMenu_E,
};
code OSDMENU *OSDMenu_F[]={
mainMenu_F,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
colorMenu,
langMenu,
NULL,
srcMenu_F,
};
code OSDMENU *OSDMenu_G[]={
mainMenu_G,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
colorMenu,
langMenu,
NULL,
srcMenu_G,
};
code OSDMENU *OSDMenu_I[]={
mainMenu_I,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
colorMenu,
langMenu,
NULL,
srcMenu_I,
};
code OSDMENU *OSDMenu_S[]={
mainMenu_S,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
colorMenu,
langMenu,
NULL,
srcMenu_S,
};
typedef struct tagMULTILANGUAGEOSD{
uCHAR cLangID;
OSDMENU **osdMenuPtr;
}MULTILANGUAGEOSD;
MULTILANGUAGEOSD code MultiLangOSD[]={
{eENGLISH, OSDMenu_E},
{eFRENCH, OSDMenu_F},
{eGERMAN, OSDMenu_G},
{eITALIAN, OSDMenu_I},
{eSPANISH, OSDMenu_S}
};
code OSDMENU *OSDMenuVideo_E[]={
mainMenuVideo_E,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
srcMenu_E,
};
MULTILANGUAGEOSD code MultiLangOSDVideo[]={
{eENGLISH, OSDMenuVideo_E},
{eFRENCH, OSDMenuVideo_E},
{eGERMAN, OSDMenuVideo_E},
{eITALIAN, OSDMenuVideo_E},
{eSPANISH, OSDMenuVideo_E}
};
code OSDMENU *OSDMenuTV_E[]={
mainMenuTV_E,
NULL,
NULL,
NULL,
NULL,
NULL,
tvMenu_E,
NULL,
NULL,
NULL,
srcMenu_E,
};
MULTILANGUAGEOSD code MultiLangOSDTV[]={
{eENGLISH, OSDMenuTV_E},
{eFRENCH, OSDMenuTV_E},
{eGERMAN, OSDMenuTV_E},
{eITALIAN, OSDMenuTV_E},
{eSPANISH, OSDMenuTV_E}
};
code uCHAR *MessageData[] = {
iNoSignal,
iNoSupport,
iFailSafeMode,
iAutoAdjust,
iPowerOff,
iADCCalib,
iAdcSubsample,
iSyncError
};
code uCHAR *RecallStr[]={
iRecalling_E,
iRecalling_F,
iRecalling_G,
iRecalling_I,
iRecalling_S
};
code uCHAR *AutoAdjStr[]={
iAutoAdj_E,
iAutoAdj_F,
iAutoAdj_G,
iAutoAdj_I,
iAutoAdj_S,
};
code uCHAR *BrightStr[]={
iBright_E,
iBright_F,
iBright_G,
iBright_I,
iBright_S
};
code uCHAR *ContrastStr[]={
iContrast_E,
iContrast_F,
iContrast_G,
iContrast_I,
iContrast_S
};
code uCHAR *PhaseStr[]={
iPhase_E,
iPhase_F,
iPhase_G,
iPhase_I,
iPhase_S
};
code uCHAR *PixelStr[]={
iPixel_E,
iPixel_F,
iPixel_G,
iPixel_I,
iPixel_S
};
code uCHAR *HPosStr[]={
iHPos_E,
iHPos_F,
iHPos_G,
iHPos_I,
iHPos_S
};
code uCHAR *VPosStr[]={
iVPos_E,
iVPos_F,
iVPos_G,
iVPos_I,
iVPos_S
};
code uCHAR *LangStr[]={
iLanguage_E,
iLanguage_F,
iLanguage_G,
iLanguage_I,
iLanguage_S
};
code uCHAR *ColorStr[]={
iColor_E,
iColor_F,
iColor_G,
iColor_I,
iColor_S
};
// 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, 0x3F};
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, 0x1f};
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
0xf0,0x00, //5 green // 0xF8
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
};
#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 "logodata.c"
//#include "logo1025.c"
#include "logo1113.c"
bit OSD_PowerOnLogo_On = 1;
// define OSD Logo BMP LUT color data
code unsigned char OSDLutLogoData[32]={
0x33,0x03, //Black f=0 , b=0 0x12, 03
0xaa,0x02, //Light Blue f=2 , b=1
0x18,0x01, //Dark Blue f=8 , b=4
0x1f,0x01, //Dark Blue f=8 , b=4
0xff,0x0f, // White f=3
0xf6,0x0f, //Dark Brown f=4 , b=2
0x08,0x08, //Purple f=5
0xa8,0x07, //Light Green f=6 , b=3
0x86,0x0f, //Dark Red f=7
0x54,0x0f, //Dark Red f=7
0x54,0x0f, //Dark Red f=7
0x0f,0x0f,
0xb9,0x00, //purple 6
0x44,0x04,
0x88,0x08, //grey
0xff,0x0f //white
};
#endif //LOGO_ON
void OSDLogo(void)
{
#if 1
unsigned int i;
//#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,0x28); //width 40(x8)
OSDCfgWr(BW_H,58); //58 //height 64
OSDCfgWr(BD_ENLARGE,0x00); //
OSDCfgWr(CHAR_DLY_0,0x00); //V[10:8] bit 6-4; H[10:8] bit2-0 23 12
OSDCfgWr(CHAR_DLY_1,0x90); //H[7:0] 80 80
OSDCfgWr(CHAR_DLY_2,0x40); //v[7:0] 64 30
twdWr_Burst_A(OSD_RAM_DL);
//for(i=0;i<80*76;i++){
for(i=0;i<80*58;i++)
twdWr_Burst_D(logodata[i]);
twdWr_Burst_P();
OSDCfgWr(OSD_CTRL,0xf8); //2 bits pixel BitMap
twdDelay(1000);
//OSDDisable();
#endif
}
void OSDInit(void)
{
unsigned int i;
OSDCfgWr(OSD_CTRL,0x18); //disable osd and width*1
/*
OSDCfgWr(CHAR_DLY_0,((OSDHPOS_CT & 0x700)+ (OSDVPOS_CT & 0x700)*16)/256 ); // CHAR_DLY_0..2 is setup OSD position in TFTpanel.
OSDCfgWr(CHAR_DLY_1,OSDHPOS_CT & 0xff); // X position is {CHAR_DLY_0[2:0],CHAR_DLY_1[7:0]}=0x17c.
OSDCfgWr(CHAR_DLY_2,OSDVPOS_CT & 0xff); // Y position is {CHAR_DLY_0[6:4],CHAR_DLY_2[7:0]}=0x180.
*/
/* OSD Position */
#if 0
i=((EepPublic.cOSDVPos&0xe0)>>1)|((EepPublic.cOSDHPos&0xe0)>>5);
OSDCfgWr(CHAR_DLY_0,(uCHAR)i);
i=EepPublic.cOSDHPos<<3;
OSDCfgWr(CHAR_DLY_1,(uCHAR)i);
i=EepPublic.cOSDVPos<<3;
#endif
//OSDCfgWr(CHAR_DLY_0,0x12); //V[10:8] bit 6-4; H[10:8] bit2-0
//OSDCfgWr(CHAR_DLY_1,0xEE); //H[7:0]
//OSDCfgWr(CHAR_DLY_2,0x64); //v[7:0]
// 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,0x00);//0x40);
OSDCfgWr(CHAR_BS_COLOR,0x00); //0x00);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -