📄 osddraw.c
字号:
#include "include.h"
#include "osddraw.h"
//#include "font1218.c"
extern unsigned char colourmode;
extern unsigned char user_config[CONFIGDATA_MAX];
void OSDCfgWr(unsigned char osdcfg_add,unsigned char osdcfg_dat);
void OSDInit(void);
void OSDLoadColor(void);
void OSDLoadFont(void);
void refreshmenu(void);
void cleanline(unsigned char page,unsigned char line);
void osddisable(void);
void osdenable(void);
void OSDInit(void)
{
unsigned int i,j;
unsigned char temp;
extern unsigned char tmp;
OSDCfgWr(0x00,0x01); //disable osd and width*1
OSDCfgWr(0x01,0x02);//OSD显示的位置参数
OSDCfgWr(0x02,100);//第100*2 个行象素点
OSDCfgWr(0x03,94); //第100*2 个列象素点
OSDCfgWr(0x04,0x0b); //0x09:Font Size:18*12
OSDCfgWr(0X05,CHAR_MAIN_MENU_START); //0X05H:CHAR_RAM_BASE_A:the begining of 128step.
OSDCfgWr(0X1E,CHAR_RAM_END); //0X1E:CHAR_RAM_END_A,the ending of the 128step
OSDCfgWr(0x06,0x01);
OSDCfgWr(0x07,0x40);
OSDCfgWr(0x08,0x20);
OSDCfgWr(0x09,0x00);
OSDCfgWr(0x0a,0x00);
OSDCfgWr(0x0b,0x80);
OSDCfgWr(0x0c,0x60);
OSDCfgWr(0x0d,0x11);
OSDCfgWr(0x0f,0x00);
//可用于菜单选中功能
OSDCfgWr(0x10,0x00); //Window_1 Start Character Row Number
OSDCfgWr(0x11,0x00); //Window_1 end Character Row Number
OSDCfgWr(0x12,0x00); //Start Character Column Number
OSDCfgWr(0x13,0x00); //end Character Column Number
OSDCfgWr(0x14,0x00); //OSDCfgWr(0x13,0x00);
OSDCfgWr(0x1A,0x00); //Char2BP Font Base Address LBS
OSDCfgWr(0x1B,0x08); //Char2BP Font Base Address MBS
OSDCfgWr(0x1c,0xf0); //0x86 // Alpha blending is disable; for malata only
//OSDSetRamAddr(FONT_DATA_START_ADDRESS);
//OSDSetRamAddr(0x0000);
OSDLoadColor();
//OSDCfgWr(0x00,0x01);
OSDLoadFont();
//loadcfg();
refreshmenu();
t103_write(0x50,0xe2,0x11);
osddisable();
}
#define I2CWriteByte(a, b, c) t103_write(a,b,c)
#define TW101 0X50
#define OSD_RAM_AH 0XA3
#define OSD_RAM_AL 0XA2
#define OSD_CFG_INDEX 0xa0
#define OSD_CFG_DATA 0xa1
#define OSD_LUT_RAM_DATA 0x0e
void OSDCfgWr(unsigned char osdcfg_add,unsigned char osdcfg_dat)
{
t103_write(0x50,0xa0,osdcfg_add);
t103_write(0x50,0xa1,osdcfg_dat);
}
void OSDSetRamAddr(unsigned int address)
{
I2CWriteByte(TW101,OSD_RAM_AH,(unsigned char)(address>>8));
I2CWriteByte(TW101,OSD_RAM_AL,(unsigned char)(address & 0xff));
}
void OSDLoadColor(void)
{
unsigned char tmp, i;
I2CWriteByte(TW101,OSD_CFG_INDEX,OSD_LUT_RAM_DATA);
for(i=0;i<32;i++)
I2CWriteByte(TW101,OSD_CFG_DATA,tmp=cOSDMenuLutData[i]);
}
void OSDLoadFont(void)
{
unsigned char tmp;
unsigned char i,j;
OSDSetRamAddr(0x00);
t103_write(0X50, 0Xf1, 0x00);//STOP INC
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
for(j=0;j<TOTAL_FONT_NUM;j++)
{
for(i=0; i<18; i++)
{
tmp=AllFonts[j][2*i];
I2C_Write(tmp);
tmp=AllFonts[j][2*i+1];
I2C_Write(tmp);
}
}
tmp=0;
for(;j<0x8d;j++)
for(i=0; i<18; i++)
{
I2C_Write(tmp);
I2C_Write(tmp);
}
I2C_Stop();
}
void refreshmenu(void)
{
//extern unsigned char osdstyle;
unsigned char tmp,temp,j,i;
unsigned char menu[5][32]=
{
//LINE-0
{zfont_biao,zfont_zhun,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-1
{font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl
,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-2
{font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl
,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-3
{font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl
,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-4
{font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl
,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
};
static const unsigned char constmenu[5][32]=
{
//LINE-0
{font_b,font_r,font_i,font_g,font_h,font_t,font_n,font_e,font_s,font_s,font_bl,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-1
{font_c,font_h,font_r,font_o,font_m,font_a,font_bl,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-2
{font_c,font_o,font_n,font_t,font_r,font_a,font_s,font_t,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-3
{font_r,font_e,font_s,font_e,font_t,font_bl,font_v,
font_1,font_2,font_bl,font_bl,font_bl,font_o,font_n
,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
//LINE-4
{font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl
,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl},
};
static const unsigned char gmmenu[5][32]=
{
//LINE-0
{
font_g,font_m,font_2,font_8,font_bl,font_bl,font_g,font_m,font_0,font_bl,font_bl,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,},
//LINE-1
{
font_g,font_m,font_9,font_3,font_bl,font_bl,font_g,font_m,font_6,font_0,font_bl,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,},
//LINE-2
{
font_g,font_m,font_1,font_5,font_7,font_bl,font_g,font_m,font_1,font_2,font_5,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,},
//LINE-3
{
font_g,font_m,font_1,font_9,font_0,font_bl,font_g,font_m,font_1,font_2,font_2,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,},
//LINE-4
{
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_g,font_m,font_2,font_5,font_5,font_bl,
font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,font_bl,},
};
switch(osdstyle)
{
case 0:
menu[0][0]=font_v;
menu[0][1]=font_i;
menu[0][2]=font_d;
menu[0][3]=font_e;
menu[0][4]=font_o;
menu[0][5]=font_bl;
menu[0][6]=font_s;
menu[0][7]=font_e;
menu[0][8]=font_a;
menu[0][9]=font_r;
menu[0][10]=font_c;
menu[0][11]=font_h;
menu[0][12]=zfont_juhao;
menu[0][13]=zfont_juhao;
menu[0][14]=zfont_juhao;
menu[0][15]=zfont_juhao;
for(i=16;i<32;i++)menu[0][i]=font_bl;
for(j=1;j<5;j++)for(i=0;i<32;i++)menu[j][i]=font_bl;
break;
case 1:
switch(colourmode)
{
case 0://标准
menu[0][0]=zfont_biao;
menu[0][1]=zfont_zhun;
for(i=2;i<32;i++)menu[0][i]=font_bl;
for(j=1;j<5;j++)for(i=0;i<32;i++)menu[j][i]=font_bl;
break;
case 1://明亮
menu[0][0]=zfont_ming;
menu[0][1]=zfont_liang;
for(i=2;i<32;i++)menu[0][i]=font_bl;
for(j=1;j<5;j++)for(i=0;i<32;i++)menu[j][i]=font_bl;
break;
case 2://鲜艳
menu[0][0]=zfont_xian;
menu[0][1]=zfont_yan;
for(i=2;i<32;i++)menu[0][i]=font_bl;
for(j=1;j<5;j++)for(i=0;i<32;i++)menu[j][i]=font_bl;
break;
default:
break;
}
break;
case 2:
for(i=0;i<5;i++)
for(j=0;j<32;j++)
menu[i][j]=constmenu[i][j];
menu[0][12]=htoi(user_config[BRIGHTNESS])>>4;
menu[0][13]=htoi(user_config[BRIGHTNESS])&0xf;
menu[1][12]=htoi(user_config[CHROMA])>>4;
menu[1][13]=htoi(user_config[CHROMA])&0xf;
menu[2][12]=htoi(user_config[CONSTRAST])>>4;
menu[2][13]=htoi(user_config[CONSTRAST])&0xf;
break;
case 4://td028的GM曲线
//保证显示的即为输入的
user_config[gm0]=TD28_READ(0x14)&0xf;
user_config[gm1]=(TD28_READ(0x14)>>4)&0xf;
user_config[gm2]=TD28_READ(0x15)&0xf;
user_config[gm3]=(TD28_READ(0x15)>>4)&0xf;
user_config[gm4]=TD28_READ(0x16)&0xf;
user_config[gm5]=(TD28_READ(0x16)>>4)&0xf;
user_config[gm6]=TD28_READ(0x17)&0xf;
user_config[gm7]=(TD28_READ(0x17)>>4)&0xf;
user_config[gm8]=TD28_READ(0x18)&0xf;
for(i=0;i<5;i++)
for(j=0;j<32;j++)
menu[i][j]=gmmenu[i][j];
menu[0][13]=user_config[gm0];
menu[0][12]=user_config[gm1];
menu[1][13]=user_config[gm2];
menu[1][12]=user_config[gm3];
menu[2][13]=user_config[gm4];
menu[2][12]=user_config[gm5];
menu[3][13]=user_config[gm6];
menu[3][12]=user_config[gm7];
menu[4][13]=user_config[gm8];
OSDCfgWr(0X1E,CHAR_RAM_END+3);
osdenable();
break;
case 5://td028的GM曲线
//保证显示的即为输入的
menu[0][0]=font_t;
menu[0][1]=font_e;
menu[0][2]=font_s;
menu[0][3]=font_t;
menu[0][4]=font_bl;
menu[0][5]=font_m;
menu[0][6]=font_o;
menu[0][7]=font_d;
menu[0][8]=font_e;
menu[0][9]=zfont_juhao;
menu[0][10]=zfont_juhao;
menu[0][11]=zfont_juhao;
menu[0][12]=zfont_juhao;
menu[0][13]=zfont_juhao;
menu[0][14]=zfont_juhao;
menu[0][15]=zfont_juhao;
for(i=16;i<32;i++)menu[0][i]=font_bl;
for(j=1;j<5;j++)for(i=0;i<32;i++)menu[j][i]=font_bl;
osdenable();
break;
default:
break;
}
//写入数据
OSDSetRamAddr(MENU_RAM_START_ADDRESS);
tmp=0;
t103_write(0X50, 0Xf1, 0x00);//STOP INC
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
for(i=0;i<5;i++)
{
for(j=0;j<0x1f;j++)
{
tmp=menu[i][j];
if(j>=15)tmp=font_bl;
I2C_Write(tmp);//low:index
if(j<15)temp=0x1f;else
temp=0x00;
I2C_Write(temp);//char attrib
}
I2C_Write(0x00);//resv
I2C_Write(0x80);//row attrib
}
for(i=3;i<20;i++){
for(j=0;j<0x1f;j++)
{
tmp=font_bl;
I2C_Write(tmp);//low:index
temp=0x00;
I2C_Write(temp);//char attrib
}
I2C_Write(0x00);//resv
I2C_Write(0x80);//row attrib
}
I2C_Stop();
}
void refreshline(unsigned char page,unsigned char line){
unsigned char j,tmp,temp;
//extern unsigned char user_config[CONFIGDATA_MAX];
t103_write(0X50, 0Xf1, 00);//STOP INC
switch(line)
{
case 0:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+12);
tmp=htoi(user_config[BRIGHTNESS]);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write((tmp>>4)&0xf);
I2C_Write(0X8f);
I2C_Write(tmp&0xf);
I2C_Write(0X8f);
I2C_Stop();
break;
case 1:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x20+12);
tmp=htoi(user_config[CHROMA]);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write((tmp>>4)&0xf);
I2C_Write(0X8f);
I2C_Write(tmp&0xf);
I2C_Write(0X8f);
I2C_Stop();
break;
case 2:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x40+12);
tmp=htoi(user_config[CONSTRAST]);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write((tmp>>4)&0xf);
I2C_Write(0X8f);
I2C_Write(tmp&0xf);
I2C_Write(0X8f);
I2C_Stop();
break;
case 3:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x60+12);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write(font_o);
I2C_Write(0X8f);
I2C_Write(font_n);
I2C_Write(0X8f);
I2C_Stop();
break;
case 4:
break;
default:
break;
}
}
void refreshline_gm(unsigned char page,unsigned char line){
unsigned char j,tmp,temp;
//extern unsigned char user_config[CONFIGDATA_MAX];
t103_write(0X50, 0Xf1, 00);//STOP INC
switch(line)
{
case 0:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+12);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write(user_config[gm1]);
I2C_Write(0X0f);
I2C_Write(user_config[gm0]);
I2C_Write(0X0f);
I2C_Stop();
break;
case 1:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x20+12);
tmp=htoi(user_config[CHROMA]);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write(user_config[gm3]);
I2C_Write(0X0f);
I2C_Write(user_config[gm2]);
I2C_Write(0X0f);
I2C_Stop();
break;
case 2:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x40+12);
tmp=htoi(user_config[CONSTRAST]);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write(user_config[gm5]);
I2C_Write(0X0f);
I2C_Write(user_config[gm4]);
I2C_Write(0X0f);
I2C_Stop();
break;
case 3:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x60+12);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write(user_config[gm7]);
I2C_Write(0X0f);
I2C_Write(user_config[gm6]);
I2C_Write(0X0f);
I2C_Stop();
break;
case 4:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x80+12);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write(0);
I2C_Write(0X0f);
I2C_Write(user_config[gm8]);
I2C_Write(0X0f);
I2C_Stop();
break;
default:
break;
}
}
void cleanline(unsigned char page,unsigned char line){
unsigned char j,tmp,temp;
extern unsigned char user_config[CONFIGDATA_MAX];
t103_write(0X50, 0Xf1, 00);//STOP INC
switch(line)
{
case 0:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+12);
tmp=htoi(user_config[BRIGHTNESS]);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write((tmp>>4)&0xf);
I2C_Write(0X0f);
I2C_Write((tmp)&0xf);
I2C_Write(0X0f);
I2C_Stop();
break;
case 1:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x20+12);
tmp=htoi(user_config[CHROMA]);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write((tmp>>4)&0xf);
I2C_Write(0X0f);
I2C_Write((tmp)&0xf);
I2C_Write(0X0f);
I2C_Stop();
break;
case 2:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x40+12);
tmp=htoi(user_config[CONSTRAST]);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write((tmp>>4)&0xf);
I2C_Write(0X0f);
I2C_Write((tmp)&0xf);
I2C_Write(0X0f);
I2C_Stop();
break;
case 3:
OSDSetRamAddr(MENU_RAM_START_ADDRESS+0x60+12);
I2C_Start();
I2C_Write(0X50);
I2C_Write(0XA4);
I2C_Write(font_o);
I2C_Write(0X0f);
I2C_Write(font_n);
I2C_Write(0X0f);
I2C_Stop();
break;
case 4:
break;
default:
break;
}
}
void osdenable(void){
OSDCfgWr(0x00,0x81); //enable osd and width*1
t103_write(0x50,0xe2,0x11);
}
void osddisable(void){
OSDCfgWr(0x00,0x01); //disable osd and width*1
t103_write(0x50,0xe2,0x11);
}
void bluescrenable(void){
//t103_write(0x50,0x90,0x02); //黑屏
t103_write(0x50,0x91,0x97);
t103_write(0x50,0x9F,0xff);
}
void bluescrdisable(void){
//t103_write(0x50,0x90,0x04);// 非黑屏
t103_write(0x50,0x91,0x00);
t103_write(0x50,0x9F,0xff);
}
//十六进制转十进制数(最大值64(0x3f))
unsigned char htoi(unsigned char dat){
unsigned char i,j,high,low;
low=0;
high=0;
for(i=(dat>>2)&0x3f;i>=10;i-=10)
{
high++;
}
low=i;
i=high<<4|low;
return i;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -