📄 osddraw.c
字号:
#include "T118\\OSDDraw.h"
//#include "OSDDRAW.h"
#include "memmap_i2c.h"
#if (defined T102)|(defined T106)|(defined T112)|(defined T116)|(defined T118)
//#include "T102_OSDString.h"
//#include "T102OSD.h"
#endif
BYTE const 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
};
extern int WriteToI2c(int iDeviceAddr,int iAddr,BYTE *bData,int len);
void I2CWriteByte(int cDevAddr, int cReg, BYTE cData)
{
BYTE temp_i2c_data = cData;
WriteToI2c(cDevAddr,cReg,&temp_i2c_data,1);
}
// OSD config register Write
void OSDCfgWr(BYTE index,BYTE dat)
{
I2CWriteByte(TW101,OSD_CFG_INDEX,index);
I2CWriteByte(TW101,OSD_CFG_DATA,dat);
}
void OSDLoadColor(void)
{
BYTE 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(int address)
{
I2CWriteByte(TW101,OSD_RAM_AH,(BYTE)(address>>8));
I2CWriteByte(TW101,OSD_RAM_AL,(BYTE)(address & 0xff));
}
void OSDEnable(void)
{
OSDCfgWr(OSD_CTRL,0x84);//0x80);//0x84);//0x98); //change by Sherman 05'11'01
I2CWriteByte(TW101,0xe2,0x11);
}
void OSDDisable(void)
{
OSDCfgWr(OSD_CTRL,0x18);
}
void OSDExit(void)
{
OSDCfgWr(OSD_CTRL,0x18);
OSDCfgWr(0x10,0x00); //Disable window
OSDDisable();
// OSDClearPage();
}
#if 0
typedef enum
{
OSD_BRIGHT_INDEX = 0,
OSD_CONTRAST_INDEX,
OSD_COLOR_INDEX,
OSD_SHAPPNESS_INDEX,
OSD_SCREEN_MODE_INDEX,
OSD_OVERTURN_INDEX,
OSD_DEFAULT_INDEX,
} OSDSTATUS;
#endif
#if 0
#define OSD_BRIGHT_ADDR
#define OSD_CONTRAST_ADDR
#define OSD_SHAPPNESS_ADDR
#define OSD_COLOR_ADDR
#define OSD_SCREEN_MODE_ADDR
#define OSD_OVERTURN_ADDR
EXTERN BYTE osd_bright;
EXTERN BYTE osd_contrast;
EXTERN BYTE osd_shappness;
EXTERN BYTE osd_color;
EXTERN BYTE osd_screen_mode;
EXTERN BYTE osd_overturn;
#endif
void OSDOpenMenu(void)
{
printf_w("\n*********************** OSDOpenMenu\n");
BYTE bright,contrast,color,sharppness,screen_mode,overturn;
OSDClearPage();
OSDPosition(TOP);
OSDEnable();
OSDShowLine(iBright_E,2,1,COL_NORMAL,OSD_LENGTH);
OSDNumConvert(osd_bright);
OSDShowLine(temp_string,25,1,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iContrast_E,2,2,COL_NORMAL,OSD_LENGTH);
OSDNumConvert(osd_contrast);
OSDShowLine(temp_string,25,2,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iSat_E,2,3,COL_NORMAL,OSD_LENGTH);
OSDNumConvert(osd_color);
OSDShowLine(temp_string,25,3,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iSharp_E,2,4,COL_NORMAL,OSD_LENGTH);
OSDNumConvert(osd_shappness);
OSDShowLine(temp_string,25,4,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iSCREEN_M,2,5,COL_NORMAL,OSD_LENGTH);
if(osd_screen_mode)
OSDShowLine(iSCREEN_NOR,22,5,COL_NORMAL,OSD_LENGTH);
else
OSDShowLine(iSCREEN_WIDE,24,5,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iOVERTURN,2,6,COL_NORMAL,OSD_LENGTH);
if(osd_overturn)
OSDShowLine(i_ON,25,6,COL_NORMAL,OSD_LENGTH);
else
OSDShowLine(i_OFF,25,6,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iDEFAULT,2,7,COL_NORMAL,OSD_LENGTH);
}
void OSDCleanLine(BYTE x,BYTE y,BYTE cColor,BYTE cLength)
{
if((x < 30) && ( y < OSD_LINE_NUM))
{
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)y << 5));
//extern int WriteToI2c(int iDeviceAddr,int iAddr,BYTE *bData,int len);
BYTE temp_data;
BYTE i;
for(i =0;i<cLength;i++)
{
temp_data = BLANK;
WriteToI2c(TW101,OSD_RAM_DL,&temp_data,1);
temp_data =cColor;
WriteToI2c(TW101,OSD_RAM_DL,&temp_data,1);
}
// 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)
{
BYTE i=0;
for(i=0;i<OSD_LINE_NUM;i++)
{
OSDCleanLine(0,i,0,30);
OSDSetLineAttribute(i,0x80);
}
}
void OSDSetLineAttribute(BYTE cLine,BYTE cAttribute)
{
OSDSetRamAddr(MENU_RAM_START_ADDRESS+((int)cLine << 5)+31);
BYTE temp_date1[2] = {0x00,cAttribute};
WriteToI2c(TW101,OSD_RAM_DL,temp_date1,2);
// twdWr_Burst_A(OSD_RAM_DL); // Write OSD index
// twdWr_Burst_D(0);
// twdWr_Burst_D(cAttribute);
// twdWr_Burst_P();
}
#if 0
OSD_BRIGHT_INDEX = 0,
OSD_CONTRAST_INDEX,
OSD_COLOR_INDEX,
OSD_SHAPPNESS_INDEX,
OSD_SCREEN_MODE_INDEX,
OSD_OVERTURN_INDEX,
OSD_DEFAULT_INDEX,
#endif
void OSDShowVideoData(void)
{
printf_w("\n&&&&&&&&&&&&&&&&&&&&& OSDSHOWVIDEODATA\n");
switch(osd_menu_status){
case OSD_BRIGHT_INDEX:
OSDShowLine(iDEFAULT,2,7,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iBright_E,2,1,COL_TITLE,OSD_LENGTH);
OSDNumConvert(osd_bright);
OSDShowLine(temp_string,25,1,COL_TITLE,OSD_LENGTH);
printf_w("\n************************osd_bright %d\n",osd_bright);
break;
case OSD_CONTRAST_INDEX:
OSDShowLine(iBright_E,2,1,COL_NORMAL,OSD_LENGTH);
OSDNumConvert(osd_bright);
OSDShowLine(temp_string,25,1,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iContrast_E,2,2,COL_TITLE,OSD_LENGTH);
OSDNumConvert(osd_contrast);
OSDShowLine(temp_string,25,2,COL_TITLE,OSD_LENGTH);
printf_w("\n************************osd_contrast %d\n",osd_contrast);
break;
case OSD_COLOR_INDEX:
OSDShowLine(iContrast_E,2,2,COL_NORMAL,OSD_LENGTH);
OSDNumConvert(osd_contrast);
OSDShowLine(temp_string,25,2,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iSat_E,2,3,COL_TITLE,OSD_LENGTH);
OSDNumConvert(osd_color);
OSDShowLine(temp_string,25,3,COL_TITLE,OSD_LENGTH);
printf_w("\n************************osd_color %d\n",osd_color);
break;
case OSD_SHAPPNESS_INDEX:
OSDShowLine(iSat_E,2,3,COL_NORMAL,OSD_LENGTH);
OSDNumConvert(osd_color);
OSDShowLine(temp_string,25,3,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iSharp_E,2,4,COL_TITLE,OSD_LENGTH);
OSDNumConvert(osd_shappness);
OSDShowLine(temp_string,25,4,COL_TITLE,OSD_LENGTH);
printf_w("\n************************osd_shappness %d\n",osd_shappness);
break;
case OSD_SCREEN_MODE_INDEX:
OSDShowLine(iSharp_E,2,4,COL_NORMAL,OSD_LENGTH);
OSDNumConvert(osd_shappness);
OSDShowLine(temp_string,25,4,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iSCREEN_M,2,5,COL_TITLE,OSD_LENGTH);
if(osd_screen_mode)
OSDShowLine(iSCREEN_NOR,22,5,COL_TITLE,OSD_LENGTH);
else
OSDShowLine(iSCREEN_WIDE,24,5,COL_TITLE,OSD_LENGTH);
break;
case OSD_OVERTURN_INDEX:
OSDShowLine(iSCREEN_M,2,5,COL_NORMAL,OSD_LENGTH);
if(osd_screen_mode)
OSDShowLine(iSCREEN_NOR,22,5,COL_NORMAL,OSD_LENGTH);
else
OSDShowLine(iSCREEN_WIDE,24,5,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iOVERTURN,2,6,COL_TITLE,OSD_LENGTH);
if(osd_overturn)
OSDShowLine(i_ON,25,6,COL_TITLE,OSD_LENGTH);
else
OSDShowLine(i_OFF,25,6,COL_TITLE,OSD_LENGTH);
break;
case OSD_DEFAULT_INDEX:
OSDShowLine(iOVERTURN,2,6,COL_NORMAL,OSD_LENGTH);
if(osd_overturn)
OSDShowLine(i_ON,25,6,COL_NORMAL,OSD_LENGTH);
else
OSDShowLine(i_OFF,25,6,COL_NORMAL,OSD_LENGTH);
OSDShowLine(iDEFAULT,2,7,COL_TITLE,OSD_LENGTH);
break;
default: break;
}
}
/*
#ifdef AU_35
#define GAUGE_TOTAL_FONT_L 10 //Long
#else
#define GAUGE_TOTAL_FONT_L 25 //Long
#endif
*/
#if ((defined _160_234) | (defined _294_228) |(defined _320_234) | (defined _320_240))
#define GAUGE_TOTAL_FONT_L 20 // for test by Sherman 06'02'08 //10 //Long
#else
#define GAUGE_TOTAL_FONT_L 25 //Long
#endif
#define Y0RightTop 0x00
#define Y1RightTop 0xEA
#define Y2RightTop 0x00
#define Y0Center 0x00
#define Y1Center 0xEA
#define Y2Center 0x00
#define Y0LeftBottom 0x12
#define Y1LeftBottom 0x00
#define Y2LeftBottom 0x60
void OSDPosition(BYTE cPos)
{
if(cPos==RIGHT_TOP){
OSDCfgWr(CHAR_DLY_0,Y0RightTop); //V[10:8] bit 6-4; H[10:8] bit2-0 23 12
OSDCfgWr(CHAR_DLY_1,Y1RightTop); //H[7:0] 80 80
OSDCfgWr(CHAR_DLY_2,Y2RightTop); //v[7:0] 64 30
}
if(cPos==CENTER){
OSDCfgWr(CHAR_DLY_0,Y0Center); //V[10:8] bit 6-4; H[10:8] bit2-0
OSDCfgWr(CHAR_DLY_1,Y1Center); //H[7:0]
OSDCfgWr(CHAR_DLY_2,Y2Center); //v[7:0]
}
else if(cPos==LEFT_BOTTOM){//not define yet!
OSDCfgWr(CHAR_DLY_0,Y0LeftBottom); //V[10:8] bit 6-4; H[10:8] bit2-0
OSDCfgWr(CHAR_DLY_1,Y1LeftBottom); //H[7:0]
OSDCfgWr(CHAR_DLY_2,Y2LeftBottom); //v[7:0] //00
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -