📄 osd.c
字号:
#include "OSD.H"
#include "Scaler.H"
#include "IIC.H"
#include "MyDef.H"
#include "RAM.H"
#include "stdio.h"
#include "UserAdj.H"
#include "AutoAdj.H"
#include "PANEL.H"
#include "F63REG.H"
#include "MCU.H"
#include "OSD_TAB.H"
#include "ModeHandle.H"
#include "TUNER.H"
/*==========================================
==========================================*/
code unsigned char IconPosition[]={
3,0,7,0,11,0,15,0,19,0,22,2,22,4,19,6,15,6,11,6,7,6,3,6,0,4,0,2
};
code unsigned char AVIconPosition[]={
3,0,8,0,13,0,18,0,22,2,22,4,18,6,13,6,8,6,3,6,0,4,0,2
};
code unsigned char MainIconColor[]={
4,1,4,4,4,4,4,4,1,1,1,4,4,1,
4,4,4,4,4,4,4,4,4,4,4,1,1,1
};
code unsigned char VideoIconColor[]={
4,1,4,4,4,4,4,4,4,4,4,1,1,1,
4,4,4,4,4,4,4,4,4,4,4,1,1,1
};
code unsigned char SpaceLine20[]={
20," "
};
code unsigned char Source1[]={
8," PC "
};
code unsigned char Source2[]={
8," AV "
};
code unsigned char Source3[]={
8,"S-VIDEO "
};
code unsigned char Source4[]={
8," TV "
};
code unsigned char Source5[]={
8," "
};
code unsigned char Source6[]={
6," "
};
code unsigned char *SourceTab[]={
Source1,Source2,Source3,Source4,Source5,Source6
};
code unsigned char ClearLine1[]={
20," "
};
code unsigned char ClearLine2[]={
5," "
};
code unsigned char ClearLine3[]={
5,0x82,0x82,0x82,0x82,0x82
};
code unsigned char MenuItem[]={
7,3,4,5
};
void OsdInit(void)
{
//unsigned char g;
//OSD
OSD_Control = Read24C16(0xce);
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control); //Disable OSD
WriteIIC_HW(Scaler_Addr,0xa9,0x55); //OSD FONT ZOOM Range
SetPosition();
ClearOSD();
ClearText();
OSD_Point1 = 0;
OSD_Point2 = 0;
SavePointer = 0;
if(PowerStatus > 0x80){
ShowVideoMenu();
ShowVideoSubMenu();
}
else{
ShowMainMenu();
ShowSubMenu();
}
}
void Osd4Init(void)
{
OSD_Control &= ~BIT_0;
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
WriteWordIIC_HW(Scaler_Addr,0x96,OSD2_CCx);
WriteWordIIC_HW(Scaler_Addr,0x99,OSD2_CCy);
WriteIIC_HW(Scaler_Addr,0x98,OSD2_WIDTH-1);
WriteIIC_HW(Scaler_Addr,0x9b,OSD2_HIGHT-1);
WriteIIC_HW(Scaler_Addr,0xa4,0x00);
WaitSetup(40);
ClearOSD();
FillLineAttr(1,1,20,TextColor); //add by Anbbdy
FillLineAttr(1,2,20,TextColor);
FillLineAttr(1,3,20,TextColor);
MoveX = OSD2_CCx / 6;
MoveY = OSD2_CCy / 6;
if((flag3 & BIT_2) != 0x00){
printf("OSD X = %d\r\n",OSD2_CCx);
printf("OSD Y = %d\r\n",OSD2_CCy);
}
}
void Osd3Init(void)
{
OSD_Control &= ~BIT_0;
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
WriteWordIIC_HW(Scaler_Addr,0x96,OSD3_Px);
WriteWordIIC_HW(Scaler_Addr,0x99,OSD3_Py);
WriteIIC_HW(Scaler_Addr,0x98,OSD3_WIDTH-1);
WriteIIC_HW(Scaler_Addr,0x9b,OSD3_HIGHT-1);
WriteIIC_HW(Scaler_Addr,0xa4,0x03);
WaitSetup(40);
ClearOSD();
if((flag3 & BIT_2) != 0x00){
printf("OSD3 X = %d\r\n",OSD3_Px);
printf("OSD3 Y = %d\r\n",OSD3_Py);
}
}
void LoadFont(void)
{
code unsigned char PaletteTab[]={
67,0,0xd0,0x00,0x00,
//
(unsigned char)BLACK,(unsigned char)(BLACK>>8),
(unsigned char)RED,(unsigned char)(RED>>8),
(unsigned char)GREEN,(unsigned char)(GREEN>>8),
(unsigned char)BLUE,(unsigned char)(BLUE>>8),
(unsigned char)CYAN,(unsigned char)(CYAN>>8),
(unsigned char)MAGENTA,(unsigned char)(MAGENTA>>8),
(unsigned char)YELLOW,(unsigned char)(YELLOW>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)TBLACK,(unsigned char)(TBLACK>>8),
(unsigned char)TRED,(unsigned char)(TRED>>8),
(unsigned char)TGREEN,(unsigned char)(TGREEN>>8),
(unsigned char)TBLUE,(unsigned char)(TBLUE>>8),
(unsigned char)TCYAN,(unsigned char)(TCYAN>>8),
(unsigned char)TMAGENTA,(unsigned char)(TMAGENTA>>8),
(unsigned char)TYELLOW,(unsigned char)(TYELLOW>>8),
(unsigned char)GRAY,(unsigned char)(GRAY>>8),
//
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
(unsigned char)WHITE,(unsigned char)(WHITE>>8),
};
WriteWordIIC_HW(Scaler_Addr,0x9c,640); //one bit
WriteWordIIC_HW(Scaler_Addr,0xa0,2296); //four bit
WriteSequenceScaler(0xe0,PaletteTab);
WriteSequenceScaler(0xe0,OneBitFont);
WriteSequenceScaler(0xe0,FourBitFont);
}
void SetPosition(void)
{
unsigned short xy;
if((OSD_Control & BIT_7) == 0){
if(OSD_Type == 0x02){
xy = (unsigned long)OSD2_CCx * OSD_X / 100;
WriteWordIIC_HW(Scaler_Addr,0x96,xy);
if((flag3 & BIT_2) != 0x00)
printf("OSD2 X = %d\r\n",xy);
WriteWordIIC_HW(Scaler_Addr,0x98,OSD2_WIDTH-1);
xy = (unsigned long)OSD2_CCy * (100 - OSD_Y) / 100;
WriteWordIIC_HW(Scaler_Addr,0x99,xy);
WriteIIC_HW(Scaler_Addr,0x9b,OSD2_HIGHT-1);
if((flag3 & BIT_2) != 0x00)
printf("OSD2 Y = %d\r\n",xy);
}
else{
xy = (unsigned long)OSD_RBx * OSD_X / 100;
WriteWordIIC_HW(Scaler_Addr,0x96,xy);
if((flag3 & BIT_2) != 0x00)
printf("OSD1 X = %d\r\n",xy);
WriteWordIIC_HW(Scaler_Addr,0x98,OSD_WIDTH-1);
xy = (unsigned long)OSD_RBy * (100 - OSD_Y) / 100;
WriteWordIIC_HW(Scaler_Addr,0x99,xy);
WriteIIC_HW(Scaler_Addr,0x9b,OSD_HIGHT-1);
if((flag3 & BIT_2) != 0x00)
printf("OSD1 Y = %d\r\n",xy);
}
}
else{
if(OSD_Type == 0x02){
xy = (unsigned long)OSD2_CCx1 * OSD_X / 100;
WriteWordIIC_HW(Scaler_Addr,0x96,xy);
if((flag3 & BIT_2) != 0x00)
printf("OSD2 X = %d\r\n",xy);
WriteWordIIC_HW(Scaler_Addr,0x98,OSD2_WIDTH-1);
xy = (unsigned long)OSD2_CCy1 * (100 - OSD_Y) / 100;
WriteWordIIC_HW(Scaler_Addr,0x99,xy);
WriteIIC_HW(Scaler_Addr,0x9b,OSD2_HIGHT-1);
if((flag3 & BIT_2) != 0x00)
printf("OSD2 Y = %d\r\n",xy);
}
else{
xy = (unsigned long)OSD_RBx1 * OSD_X / 100;
WriteWordIIC_HW(Scaler_Addr,0x96,xy);
if((flag3 & BIT_2) != 0x00)
printf("OSD1 X = %d\r\n",xy);
WriteWordIIC_HW(Scaler_Addr,0x98,OSD_WIDTH-1);
xy = (unsigned long)OSD_RBy1 * (100 - OSD_Y) / 100;
WriteWordIIC_HW(Scaler_Addr,0x99,xy);
WriteIIC_HW(Scaler_Addr,0x9b,OSD_HIGHT-1);
if((flag3 & BIT_2) != 0x00)
printf("OSD1 Y = %d\r\n",xy);
}
}
WriteIIC_HW(Scaler_Addr,0xa4,0x00);
WaitSetup(40);
}
void ClearOSD(void)
{
// Clear osd ram
if(OSD_Type < 2){
if((flag3 & BIT_0) == 0x00)
WriteWordIIC_HW(Scaler_Addr,0xcc,FrameColor);
else
WriteWordIIC_HW(Scaler_Addr,0xcc,FactoryColor);
}
else{
WriteWordIIC_HW(Scaler_Addr,0xcc,RedFrameColor);
}
WriteIIC_HW(Scaler_Addr,0xce,0x20);
WriteIIC_HW(Scaler_Addr,0xcf,0x01);
// Wait for Clear Ready....
while((ReadIIC_HW(Scaler_Addr,0xcf) & BIT_0) != 0){
CheckModeChange();
}
}
/*==========================================
==========================================*/
void MainMenu(void)
{
if(MuteFlag)
{
MuteFlag = 0;
OSD_OFF();
}
if((flag1 & BIT_1) == 0)
{
switch(OSD_Type)
{
case 0x00:
SavePointer = 0;
OsdInit();
/* if(PowerStatus == 0x80)
{
ShowResolution();
ShowFreq();
}
ShowVersion();
*/ OSD_Type = 1;
//osd on
OSD_Control |= BIT_0;
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
if((flag3 & BIT_2) != 0x00)
printf("OSD ON\r\n");
break;
default:
if(SavePointer != 0x00)
SaveData();
OSD_Type = 1;
if(PowerStatus == 0x80)
{
OsdInit();
// ShowFreq();
// ShowResolution();
}
// ShowVersion();
//osd on
OSD_Control |= BIT_0;
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
break;
}
}
KeyBuffer = 0xff;
}
void OSD_OFF(void)
{
if(SavePointer != 0x00)
SaveData();
if((flag3 & BIT_4) == 0){ //no mute
if(OSD_Type != 0){
OSD_Control &= ~BIT_0;
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
OSD_Type = 0;
if((flag3 & BIT_2) != 0x00)
printf("OSD OFF\r\n");
}
}
else{
OSD_Point1 = 0;
OSD_Point2 = 0;
}
}
void ShowMainMenu(void)
{
code unsigned char MainIcon[][5]=
{
4,3,0,0x00,0x01,
4,7,0,0x18,0x19,
4,11,0,0x02,0x03,
4,15,0,0x04,0x05,
4,19,0,0x06,0x07,
4,22,2,0x08,0x09,
4,22,4,0x0a,0x0b,
4,19,6,0x0c,0x0d,
4,15,6,0x09,0x2c,
4,11,6,0x0a,0x2c,
4,7,6,0x0b,0x2c,
4,3,6,0x10,0x11,
4,0,4,0x12,0x13,
4,0,2,0x20,0x20,
};
unsigned char i;
for(i=0; i<14; i++)
{
if(MainIconColor[i] == 1)
{
if((SyncMode == 3)&&(i > 1)&&(i < 6)){
WriteWordIIC_HW(Scaler_Addr,0xcc,DisIconColor);
}
else{
WriteWordIIC_HW(Scaler_Addr,0xcc,FrameColor);
}
if(((flag2 & BIT_5) != 0)&&(i > 7)&&(i < 11)){
WriteWordIIC_HW(Scaler_Addr,0xcc,DisIconColor);
}
else if(i == 8){
WriteWordIIC_HW(Scaler_Addr,0xcc,RedColor);
}
else if(i == 9){
WriteWordIIC_HW(Scaler_Addr,0xcc,GreenColor);
}
else if(i == 10){
WriteWordIIC_HW(Scaler_Addr,0xcc,BlueColor);
}
}
else
{
if((SyncMode == 3)&&(i > 1)&&(i < 6)){
WriteWordIIC_HW(Scaler_Addr,0xcc,DisIconMColor);
}
else{
WriteWordIIC_HW(Scaler_Addr,0xcc,FrameMColor);
}
if(((flag2 & BIT_5) != 0)&&(i > 7)&&(i < 11)){
WriteWordIIC_HW(Scaler_Addr,0xcc,DisIconMColor);
}
else{
WriteWordIIC_HW(Scaler_Addr,0xcc,FrameMColor);
}
}
WriteStringScaler(1,MainIcon[i]);
}
}
void CheckRGB(void)
{
if((flag2 & BIT_5) != 0){
FillLineAttr(15,6,2,DisIconColor);
FillLineAttr(11,6,2,DisIconColor);
FillLineAttr(7,6,2,DisIconColor);
}
else{
FillLineAttr(15,6,2,RedColor);
FillLineAttr(11,6,2,GreenColor);
FillLineAttr(7,6,2,BlueColor);
}
}
void ShowMisceMenu(void)
{
code unsigned char MainIcon1[][5]={
4,3,0,0x12,0x13,
4,7,0,0x16,0x17,
4,11,0,0x18,0x19,
4,15,0,0x1a,0x1b,
4,19,0,0x1c,0x1d,
4,22,2,0x1e,0x1f,
4,22,4,0x20,0x21,
4,19,6,0x22,0x23,
4,15,6,0x24,0x25,
4,11,6,0x26,0x27,
4,7,6,0x28,0x29,
4,3,6,0x20,0x20,
4,0,4,0x20,0x20,
4,0,2,0x20,0x20,
};
code unsigned char MainIcon2[][5]={
4,7,6,0x20,0x20,
4,3,6,0x20,0x20,
4,0,4,0x20,0x20,
4,0,2,0x20,0x20,
};
unsigned char i;
for(i=0; i<10; i++){
if(MainIconColor[i+14] == 1){
WriteWordIIC_HW(Scaler_Addr,0xcc,FrameColor);
}
else{
WriteWordIIC_HW(Scaler_Addr,0xcc,FrameMColor);
}
WriteStringScaler(1,MainIcon1[i]);
}
if((flag3 & BIT_0) == 0){
for(i=0; i<4; i++){
WriteWordIIC_HW(Scaler_Addr,0xcc,FrameColor);
WriteStringScaler(1,MainIcon2[i]);
}
}
else{
for(i=10; i<14; i++){
if(MainIconColor[i+14] == 1){
WriteWordIIC_HW(Scaler_Addr,0xcc,FrameColor);
}
else{
WriteWordIIC_HW(Scaler_Addr,0xcc,FrameMColor);
}
WriteStringScaler(1,MainIcon1[i]);
}
}
}
void ShowSubMenu(void)
{
unsigned char k;
//Icon
if(OSD_Point1 == 0){
k = OSD_Point2 << 1;
}
else{
k = (OSD_Point2-13) << 1; //gan 14 to 13
}
if(MainIconColor[OSD_Point2] == 1){
if(OSD_Point2 == 8){
FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconRedColor);
}
else if(OSD_Point2 == 9){
FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconGreenColor);
}
else if(OSD_Point2 == 10){
FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconBlueColor);
}
else if(OSD_Point2 == 13){
FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconMColor);
}
else{
FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconColor);
}
}
else{
FillLineAttr(IconPosition[k],IconPosition[k+1],2,IconMColor);
}
// Show Titel
k = Language * 25 + OSD_Point2;
// WriteXY_CStrScaler(0,7,3,23,Tab1J[k]); //display every function char
WriteXY_CStrScaler(0,2,2,20,Tab1J[k]);
//Show Value
switch(OSD_Point2){
case 0:
// if((flag3 & BIT_0) == 0){ //gan
// ShowInverter();
// }
// else{
ClearText1();
ShowBrightness();
// }
break;
case 1:
ShowContrast();
break;
case 2:
ShowPhase();
break;
case 3:
ShowClock();
break;
case 4:
ShowHP();
break;
case 5:
ClearText1();
ShowVP();
break;
case 7:
ClearText1();
ShowColorTemperature();
break;
case 8:
case 9:
case 10:
ClearText1();
ShowRGB();
break;
/*
case 11:
ClearText();
Showlanuage(0);
break;*/
case 14:
ClearText1();
ShowOSD_X();
break;
case 15:
ShowOSD_Y();
break;
case 16:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -