📄 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"
code unsigned char IconPosition[]={
1,1,1,3,1,5,1,7,1,9,1,11,1,13,4,1,4,3,4,5,4,7,4,9,4,11,4,13
};
code unsigned char MainIconColor[]={
4,1,4,4,4,4,4,4,1,1,1,4,4,4,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 SpaceLine23[]={
23," "
};
code unsigned char Source1[]={
8," PC "
};
code unsigned char Source2[]={
8,"VIDEO "
};
code unsigned char Source3[]={
8,"S-VIDEO "
};
code unsigned char Source4[]={
8," TV "
};
code unsigned char Source5[]={
8,"CATV "
};
code unsigned char *SourceTab[]={
Source1,Source2,Source3,Source4,Source5
};
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 i;
//OSD
OSD_Control = Read24C16(0xce);
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
WriteIIC_HW(Scaler_Addr,0xa9,0x55);
SetPosition();
ClearOSD();
for(i=2; i<5; i++){
FillLineAttr(7,i,23,TitleColor);
}
ClearText();
OSD_Point1 = 0;
OSD_Point2 = 0;
SavePointer = NotSaveSaveFlag;
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,30,TextColor);
FillLineAttr(1,2,30,TextColor);
FillLineAttr(1,3,30,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....
Timer3 = 10;
while(((ReadIIC_HW(Scaler_Addr,0xcf) & BIT_0) != 0) && (Timer3 != 0)){
CheckModeChange();
}
}
void MainMenu(void)
{
if((flag1 & BIT_1) == 0){
switch(OSD_Type){
case 0x00:
SavePointer = NotSaveSaveFlag;
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;
case 0x01:
/*SaveData();
UnselectIcon();
if(PowerStatus == 0x80){
if(OSD_Point1 == 0){
if(++OSD_Point2 > 13){
OSD_Point2 = 0;
}
if(SyncMode == 3){
if((OSD_Point2 > 1)&&(OSD_Point2 < 6)){
OSD_Point2 = 6;
}
}
if((flag2 & BIT_5) != 0){
if((OSD_Point2 > 7)&&(OSD_Point2 < 11)){
OSD_Point2 = 11;
}
}
}
else{
if((flag3 & BIT_0) == 0){
if(++OSD_Point2 > 23){
OSD_Point2 = 14;
}
}
else{
if(++OSD_Point2 > 24){
OSD_Point2 = 14;
}
}
}
ShowSubMenu();
}*/
break;
default:
if(SavePointer != NotSaveSaveFlag)
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 SelectItem(void)
{
SaveData();
UnselectIcon();
if(KeyBuffer==LeftKey){
if(OSD_Point1 == 0){
if(--OSD_Point2 == 0xff){
OSD_Point2 = 13;
}
if(SyncMode == 3){
if((OSD_Point2 > 1)&&(OSD_Point2 < 6)){
OSD_Point2 = 1;
}
}
if((flag2 & BIT_5) != 0){
if((OSD_Point2 > 7)&&(OSD_Point2 < 11)){
OSD_Point2 = 7;
}
}
}
else{
if((flag3 & BIT_0) == 0){
if(--OSD_Point2 < 14){
OSD_Point2 = 23;
}
}
else{
if(--OSD_Point2 < 14){
OSD_Point2 = 24;
}
}
}
}
else if(KeyBuffer==RightKey){
if(OSD_Point1 == 0){
if(++OSD_Point2 > 13){
OSD_Point2 = 0;
}
if(SyncMode == 3){
if((OSD_Point2 > 1)&&(OSD_Point2 < 6)){
OSD_Point2 = 6;
}
}
if((flag2 & BIT_5) != 0){
if((OSD_Point2 > 7)&&(OSD_Point2 < 11)){
OSD_Point2 = 11;
}
}
}
else{
if((flag3 & BIT_0) == 0){
if(++OSD_Point2 > 23){
OSD_Point2 = 14;
}
}
else{
if(++OSD_Point2 > 24){
OSD_Point2 = 14;
}
}
}
}
ShowSubMenu();
}
void ShowVersion(void)
{
code unsigned char String1[]={
6,25,11,"0.12"
};
code unsigned char String2[]={
6,25,11," "
};
code unsigned char String3[]={
3,8,11," "
};
if((flag3 & BIT_0) != 0){
WriteStringScaler(0,String1);
ShowNum(0,9,11,PANEL);
}
else{
WriteStringScaler(0,String2);
WriteStringScaler(0,String3);
}
}
void OSD_OFF(void)
{
if(SavePointer != NotSaveSaveFlag)
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{ //mute
OSD_Point1 = 0;
OSD_Point2 = 0;
// ShowMute();
}
}
void ShowMainMenu(void)
{
code unsigned char MainIcon[][5]={
4,1,1,0x00,0x01,
4,1,3,0x18,0x19,
4,1,5,0x02,0x03,
4,1,7,0x04,0x05,
4,1,9,0x06,0x07,
4,1,11,0x08,0x09,
4,1,13,0x0a,0x0b,
4,4,1,0x0c,0x0d,
4,4,3,0x09,0x2c,
4,4,5,0x0a,0x2c,
4,4,7,0x0b,0x2c,
4,4,9,0x0e,0x0f,
4,4,11,0x10,0x11,
4,4,13,0x12,0x13,
};
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(4,3,2,DisIconColor);
FillLineAttr(4,5,2,DisIconColor);
FillLineAttr(4,7,2,DisIconColor);
}
else{
FillLineAttr(4,3,2,RedColor);
FillLineAttr(4,5,2,GreenColor);
FillLineAttr(4,7,2,BlueColor);
}
}
void ShowMisceMenu(void)
{
code unsigned char MainIcon1[][5]={
4,1,1,0x12,0x13,
4,1,3,0x16,0x17,
4,1,5,0x18,0x19,
4,1,7,0x1a,0x1b,
4,1,9,0x1c,0x1d,
4,1,11,0x1e,0x1f,
4,1,13,0x20,0x21,
4,4,1,0x22,0x23,
4,4,3,0x24,0x25,
4,4,5,0x26,0x27,
4,4,7,0x28,0x29,
4,4,9,0x20,0x20,
4,4,11,0x20,0x20,
4,4,13,0x20,0x20,
};
code unsigned char MainIcon2[][5]={
4,4,7,0x20,0x20,
4,4,9,0x20,0x20,
4,4,11,0x20,0x20,
4,4,13,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-14) << 1;
}
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{
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,Tab1[k]);
//Show Value
switch(OSD_Point2){
case BrightnessNode:
if((flag3 & BIT_0) == 0){
ShowInverter();
}
else{
ShowBrightness();
}
break;
case ContrastNode:
ShowContrast();
break;
case PhaseNode:
ShowPhase();
break;
case ClockNode:
ShowClock();
break;
case HP_Node:
ShowHP();
break;
case VP_Node:
ShowVP();
break;
case ColorTempNode:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -