📄 osd.c
字号:
String1,String3,String5,String7
};
code unsigned char *Tab2[]={
String2,String4,String6,String8
};
unsigned char i;
WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor);
for(i=0; i<4; i++){
WriteXY_StrScaler(1,8,i+6,Tab1[i]);
WriteXY_StrScaler(1,19,i+6,Tab2[i]);
}
i = Language >> 1;
if((Language & BIT_0) == 0)
FillLineAttr(8,i+6,11,TextSelColor);
else
FillLineAttr(19,i+6,11,TextSelColor);
//osd on
OSD_Control |= BIT_0;
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
}
void ShowRGB(void)
{
unsigned char value;
switch(OSD_Point2){
case R_GainNode:
value = R_Gain;
break;
case G_GainNode:
value = G_Gain;
break;
case B_GainNode:
value = B_Gain;
break;
}
WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor);
ShowValue(1,value);
ShowSliderBar(9,8,value);
}
void ClearText(void)
{
unsigned char i;
WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor);
for(i=5; i<11; i++){
WriteXY_StrScaler(1,7,i,SpaceLine23);
}
}
void ShowOutOfRange(void)
{
code unsigned char String1[]={
12,"OUT OF RANGE"
};
code unsigned char String2[]={
21,"EN DEHORS DE LA PLAGE"
};
code unsigned char String3[]={
17,"AUSSER REICHWEITE"
};
code unsigned char String4[]={
14,"FUERA DE RANGO"
};
code unsigned char String5[]={
11,"FUORI GAMMA"
};
code unsigned char String6[]={
13,"BUITEN BEREIK"
};
code unsigned char String7[]={
17,"FORA DO INTERVALO"
};
code unsigned char String8[]={
4,0x99,0x9a,0x9b,0x9c
};
code unsigned char *Tab1[]={
String1,String2,String3,String4,String5,String6,String7,String8
};
if((flag2 & BIT_3) == 0){
// ForceToBackground(0); //Set fource to background
OSD_Type = 5;
Osd4Init();
WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor | BIT_0);
WriteXY_CStrScaler(1,2,2,27,Tab1[Language]);
OSD_Control |= BIT_0;
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
AUDIO_MUTE();
flag2 |= BIT_3;
if((flag3 & BIT_2) != 0x00)
printf("Out of range\r\n");
}
else{
SetMovePosition();
}
OutOfRangeTimer = 500;
}
void ShowNoSync(void)
{
code unsigned char String1[]={
15,"NO INPUT SIGNAL"
};
code unsigned char String2[]={
21,"PAS DE SIGNAL DENTR`E"
};
code unsigned char String3[]={
19,"KEIN EINGANGSSIGNAL"
};
code unsigned char String4[]={
23,"NO HAY SE@AL DE ENTRADA"
};
code unsigned char String5[]={
26,"NESSUN SEGNALE IN INGRESSO"
};
code unsigned char String6[]={
19,"GEEN INGANGSSIGNAAL"
};
code unsigned char String7[]={
20,"SEM SINAL DE ENTRADA"
};
code unsigned char String8[]={
6,0x99,0x9a,0x9b,0x9c,0x9d,0x9e
};
code unsigned char *Tab1[]={
String1,String2,String3,String4,String5,String6,String7,String8
};
// ForceToBackground(0); //Set fource to background
OSD_Type = 4;
Osd4Init();
WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor | BIT_0);
WriteXY_CStrScaler(1,2,2,27,Tab1[Language]);
OSD_Control |= BIT_0;
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
if((flag3 & BIT_2) != 0x00)
printf("No input signal\r\n");
}
void ShowDisconnector(void)
{
code unsigned char String1[]={
12,"DISCONNECTOR"
};
code unsigned char String2[]={
21,"PAS DE SIGNAL DENTR`E"
};
code unsigned char String3[]={
19,"KEIN EINGANGSSIGNAL"
};
code unsigned char String4[]={
23,"NO HAY SE@AL DE ENTRADA"
};
code unsigned char String5[]={
26,"NESSUN SEGNALE IN INGRESSO"
};
code unsigned char String6[]={
19,"GEEN INGANGSSIGNAAL"
};
code unsigned char String7[]={
20,"SEM SINAL DE ENTRADA"
};
code unsigned char String8[]={
6,0x99,0x9a,0x9b,0x9c,0x9d,0x9e
};
code unsigned char *Tab1[]={
String1,String2,String3,String4,String5,String6,String7,String8
};
if((flag2 & BIT_2) == 0){
// ForceToBackground(0); //Set fource to background
OSD_Type = 4;
Osd4Init();
WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor | BIT_0);
WriteXY_CStrScaler(1,2,2,27,Tab1[Language]);
OSD_Control |= BIT_0;
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
AUDIO_MUTE();
flag2 |= BIT_2;
if((flag3 & BIT_2) != 0x00)
printf("DISCONNECTOR\r\n");
}
else{
SetMovePosition();
}
}
void SetMovePosition(void)
{
unsigned short xy;
if(MoveX < 0x8000){
if(++MoveX > 150){
MoveX |= 0x8000;
}
}
else{
if(--MoveX == 0x7fff){
MoveX = 1;
}
}
if(MoveY < 0x8000){
if(++MoveY > 154){
MoveY |= 0x8000;
}
}
else{
if(--MoveY == 0x7fff){
MoveY = 1;
}
}
xy = (MoveX & 0x7fff) * 6;
WriteWordIIC_HW(Scaler_Addr,0x96,xy);
if((flag3 & BIT_2) != 0x00)
printf("OSD X = %d\r\n",xy);
xy = (MoveY & 0x7fff) * 6;
WriteWordIIC_HW(Scaler_Addr,0x99,xy);
WriteIIC_HW(Scaler_Addr,0x98,OSD2_WIDTH-1);
WriteIIC_HW(Scaler_Addr,0x9b,OSD2_HIGHT-1);
if((flag3 & BIT_2) != 0x00)
printf("OSD Y = %d\r\n",xy);
}
void SaveData(void)
{
unsigned short addr;
switch(SavePointer){
case BrightnessSaveFlag:
if(PowerStatus == 0x80)
Write24C16(0xd0,Brightness);
else if(PowerStatus > 0x80)
Write24C16(0xd6,Brightness);
break;
case ContrastSaveFlag:
if(PowerStatus == 0x80)
Write24C16(0xd1,Contrast);
else if(PowerStatus > 0x80)
Write24C16(0xd7,Contrast);
break;
case ClockSaveFlag:
addr = 0x104 + (ModePoint * 8);
Write24C16(addr,(unsigned char)(HTotal >> 8));
addr++;
Write24C16(addr,(unsigned char)HTotal);
break;
case PhaseSaveFlag:
addr = 0x107 + (ModePoint * 8);
Write24C16(addr,ADC_Phase);
break;
case HP_SaveFlag:
addr = 0x102 + (ModePoint * 8);
Write24C16(addr,(unsigned char)(HP_Start >> 8));
addr++;
Write24C16(addr,(unsigned char)HP_Start);
break;
case VP_SaveFlag:
addr = 0x101 + (ModePoint * 8);
Write24C16(addr,(unsigned char)VP_Start);
break;
case R_GainSaveFlag:
addr = Read24C16(0xe1);
addr = ColorTab[addr];
addr = addr * 3 + 0xee;
Write24C16(addr,R_Gain);
break;
case G_GainSaveFlag:
addr = Read24C16(0xe1);
addr = ColorTab[addr];
addr = addr * 3 + 0xef;
Write24C16(addr,G_Gain);
break;
case B_GainSaveFlag:
addr = Read24C16(0xe1);
addr = ColorTab[addr];
addr = addr * 3 + 0xf0;
Write24C16(addr,B_Gain);
break;
case VolumeSaveFlag:
Write24C16(0xd4,Volume);
break;
case OSD_X_SaveFlag:
Write24C16(0xdd,OSD_X);
break;
case OSD_Y_SaveFlag:
Write24C16(0xde,OSD_Y);
break;
case OSD_TimerSaveFlag:
Write24C16(0xcf,OSD_Timer);
break;
case SaturationSaveFlag:
if(PowerStatus == 0x80)
Write24C16(0xc8,Saturation);
else if(PowerStatus > 0x80)
Write24C16(0xd8,Saturation);
break;
case TintSaveFlag:
if(PowerStatus == 0x80)
Write24C16(0xc9,Tint);
else if(PowerStatus > 0x80)
Write24C16(0xd9,Tint);
break;
case SharpnessSaveFlag:
if(PowerStatus == 0x80){
Write24C16(0xca,Sharpness);
}
else{
Write24C16(0xda,Sharpness);
}
break;
case InverterSaveFlag:
Write24C16(0xd5,Inverter);
break;
case Osd_ControlSaveFlag:
Write24C16(0xce,(OSD_Control & ~BIT_0));
break;
}
if((flag3 & BIT_2) != 0x00)
printf("SavePointer = %x\r\n",(unsigned short)SavePointer);
SavePointer = NotSaveSaveFlag;
}
void ShowAutoAdj(void)
{
code unsigned char AutoAdjStr1[]={
14,"AUTO ADJUSTING"
};
code unsigned char AutoAdjStr2[]={
22,"AJUSTEMENT AUTOMATIQUE"
};
code unsigned char AutoAdjStr3[]={
24,"AUTOMATISCHE EINSTELLUNG"
};
code unsigned char AutoAdjStr4[]={
17,"AJUSTE AUTOM[TICO"
};
code unsigned char AutoAdjStr5[]={
22,"REGOLAZIONE AUTOMATICA"
};
code unsigned char AutoAdjStr6[]={
23,"AUTOMATISCHE INSTELLING"
};
code unsigned char AutoAdjStr7[]={
17,"AJUSTE AUTOM[TICO"
};
code unsigned char AutoAdjStr8[]={
4,0x99,0x9a,0x9b,0x9c
};
code unsigned char *Tab1[]={
AutoAdjStr1,AutoAdjStr2,AutoAdjStr3,AutoAdjStr4,AutoAdjStr5,AutoAdjStr6,AutoAdjStr7,AutoAdjStr8
};
OSD_Type = 4;
Osd4Init();
WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor | BIT_0);
WriteXY_CStrScaler(1,2,2,27,Tab1[Language]);
OSD_Control |= BIT_0;
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
if((flag3 & BIT_2) != 0x00)
printf("Auto Adjust\r\n");
}
void DirectVolume(void)
{
code unsigned char VolumeStr1[]={
6,"VOLUME"
};
code unsigned char VolumeStr2[]={
6,"VOLUME"
};
code unsigned char VolumeStr3[]={
7,"VOLUMEN"
};
code unsigned char VolumeStr4[]={
7,"VOLUMEN"
};
code unsigned char VolumeStr5[]={
6,"VOLUME"
};
code unsigned char VolumeStr6[]={
6,"VOLUME"
};
code unsigned char VolumeStr7[]={
6,"VOLUME"
};
code unsigned char VolumeStr8[]={
4,0x99,0x9a,0x9b,0x9c
};
code unsigned char *Tab1[]={
VolumeStr1,VolumeStr2,VolumeStr3,VolumeStr4,VolumeStr5,VolumeStr6,VolumeStr7,VolumeStr8
};
OSD_Type = 3;
Osd4Init();
WriteWordIIC_HW(Scaler_Addr,0xcc,TextColor);
WriteXY_CStrScaler(1,13,1,8,Tab1[Language]);
ShowVolume();
OSD_Control |= BIT_0;
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
}
void WriteSequenceScaler(unsigned char addr,unsigned char *p)
{
unsigned short i,l;
/* start bit */
/* transmit device */
INTIIC1_FLG = 0xff;
IIC1_DATA = Scaler_Addr;
IIC1_CLK = 0x20 | IIC_BaudRate;
IIC1_CON = 0x00;
/* transmit addr */
MasterSendByte(addr);
/* transmit data */
l = p[1] * 256;
l = l + p[0] + 2;
for(i=2; i<l; i++){
MasterSendByte(p[i]);
}
/* transmit dumy data for stop bit */
WaitTx();
/* stop bit */
IIC1_CLK = 0xA0|IIC_BaudRate;
// IIC1_CON = 0x00;
WaitStop();
}
void WriteStringScaler(unsigned char Attr,unsigned char *p)
{
unsigned char i,l,ch;
unsigned short m;
/* start bit */
/* transmit device */
INTIIC1_FLG = 0xff;
IIC1_DATA = Scaler_Addr;
IIC1_CLK = 0x20 | IIC_BaudRate;
IIC1_CON = 0x00;
/* transmit addr */
MasterSendByte(0xe0);
/* transmit data */
if(Attr == 0)
MasterSendByte(0x40);
else
MasterSendByte(0x90);
if(OSD_Type < 2)
m = p[2] * OSD_WIDTH + p[1];
else
m = p[2] * OSD2_WIDTH + p[1];
ch = (unsigned char)m;
MasterSendByte(ch);
ch = (unsigned char)(m >> 8);
MasterSendByte(ch);
l = p[0] + 1;
for(i=3; i<l; i++){
ch = p[i];
MasterSendByte(ch);
}
/* transmit dumy data for stop bit */
WaitTx();
/* stop bit */
IIC1_CLK = 0xA0|IIC_BaudRate;
// IIC1_CON = 0x00;
WaitStop();
}
void WriteXY_StrScaler(unsigned char Attr,unsigned char x,unsigned char y,unsigned char *p)
{
unsigned char i,l,ch;
unsigned short m;
/* start bit */
/* transmit device */
INTIIC1_FLG = 0xff;
IIC1_DATA = Scaler_Addr;
IIC1_CLK = 0x20 | IIC_BaudRate;
IIC1_CON = 0x00;
/* transmit addr */
MasterSendByte(0xe0);
/* transmit data */
if(Attr == 0)
MasterSendByte(0x40);
else
MasterSendByte(0x90);
if(OSD_Type < 2)
m = y * OSD_WIDTH + x;
else
m = y * OSD2_WIDTH + x;
ch = (unsigned char)m;
MasterSendByte(ch);
ch = (unsigned char)(m >> 8);
MasterSendByte(ch);
l = p[0] + 1;
for(i=1; i<l; i++){
ch = p[i];
MasterSendByte(ch);
}
/* transmit dumy data for stop bit */
WaitTx();
/* stop bit */
IIC1_CLK = 0xA0|IIC_BaudRate;
// IIC1_CON = 0x00;
WaitStop();
}
void WriteXY_CStrScaler(unsigned char Attr,unsigned char x,unsigned char y,unsigned char w,unsigned char *p)
{
unsigned char i,l,ch;
unsigned short m;
/* start bit */
/* transmit device */
INTIIC1_FLG = 0xff;
IIC1_DATA = Scaler_Addr;
IIC1_CLK = 0x20 | IIC_BaudRate;
IIC1_CON = 0x00;
/* transmit addr */
MasterSendByte(0xe0);
/* transmit data */
if(Attr == 0)
MasterSendByte(0x40);
else
MasterSendByte(0x90);
if(OSD_Type < 2)
m = y * OSD_WIDTH + x;
else
m = y * OSD2_WIDTH + x;
ch = (unsigned char)m;
MasterSendByte(ch);
ch = (unsigned char)(m >> 8);
MasterSendByte(ch);
i = w - p[0];
i >>= 1; //string start position
l = p[0] + i; //string end position
i++;
w ++;
ch = 1;
for(m=1; m<w; m++){
if((m < i)||(m > l)){
MasterSendByte(' ');
}
else{
MasterSendByte(p[ch]);
ch++;
}
}
/* transmit dumy data for stop bit */
WaitTx();
/* stop bit */
IIC1_CLK = 0xA0|IIC_BaudRate;
// IIC1_CON = 0x00;
WaitStop();
}
void FillLineAttr(unsigned char x,unsigned char y,unsigned char l,unsigned short Attr)
{
unsigned char i,ch;
unsigned short m;
/* start bit */
/* transmit device */
INTIIC1_FLG = 0xff;
IIC1_DATA = Scaler_Addr;
IIC1_CLK = 0x20 | IIC_BaudRate;
IIC1_CON = 0x00;
/* transmit addr */
MasterSendByte(0xe0);
/* transmit data */
MasterSendByte(0x70);
if(OSD_Type < 2)
m = y * OSD_WIDTH + x;
else
m = y * OSD2_WIDTH + x;
ch = (unsigned char)m;
MasterSendByte(ch);
ch = (unsigned char)(m >> 8);
MasterSendByte(ch);
ch = (unsigned char)(Attr>>8);
for(i=0; i<l; i++){
MasterSendByte((unsigned char)Attr);
MasterSendByte(ch);
}
/* transmit dumy data for stop bit */
WaitTx();
/* stop bit */
IIC1_CLK = 0xA0|IIC_BaudRate;
// IIC1_CON = 0x00;
WaitStop();
}
void ShowNum(unsigned char Attr,unsigned char xx,unsigned char yy,unsigned char value)
{
unsigned char i,ch;
unsigned short m;
unsigned char buff[3];
//show value
sprintf(buff,"%3d",(unsigned short)value);
/* start bit */
/* transmit device */
INTIIC1_FLG = 0xff;
IIC1_DATA = Scaler_Addr;
IIC1_CLK = 0x20 | IIC_BaudRate;
IIC1_CON = 0x00;
/* transmit addr */
MasterSendByte(0xe0);
/* transmit data */
if(Attr == 0)
MasterSendByte(0x40);
else
MasterSendByte(0x90);
m = yy * OSD_WIDTH + xx;
ch = (unsigned char)m;
MasterSendByte(ch);
ch = (unsigned char)(m >> 8);
MasterSendByte(ch);
for(i=0; i<3; i++){
ch = buff[i];
MasterSendByte(ch);
}
/* transmit dumy data for stop bit */
WaitTx();
/* stop bit */
IIC1_CLK = 0xA0|IIC_BaudRate;
// IIC1_CON = 0x00;
WaitStop();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -