📄 modehandle.c
字号:
if((flag3 & BIT_0) == 0){
if(Read24C16(0xdc) == 0){
PoSvTimer = 500;
}
else{
PowerSaving();
LED_GrnOff();
LED_RedOn();
}
}
else{
OSD_OFF(); //Factory mode
PoSvTimer = 500;
value = ReadIIC_HW(Scaler_Addr,0x4d) & 0x1f;
value >>= 2;
if(++value > 7)
value = 0;
flag1 &= ~BIT_1; //Clear fource to background
ForceToBackground(value); //Set fource to background
}
}
#ifdef MoveAltOSD
else if(((PortD & BIT_5) != 0)&&(PoSvTimer < 400)&&((flag3 & BIT_0) == 0)){
if(PoSvTimer == 0){
ScalerPowerUp();
}
else{
PoSvTimer = 500;
ShowDisconnector();
if((PortC & BIT_6) != 0){
BackLightOn();
}
}
return;
}
else if(((PortD & BIT_5) == 0)&&((flag2 & BIT_2) != 0)&&((flag3 & BIT_0) == 0)){
flag1 &= ~BIT_3; //preset no sync
NoSync();
}
#endif
switch(SyncMode){
case 0x00: // H/V
value = MUTE_CTRL & 0x30;
if(value == 0x00){ //no H,V; goto SOG
CheckSOG();
}
else if(value == 0x20){ //no V; goto H+V
GoToCompositeSync();
}
break;
case 0x01: // H+V
value = MUTE_CTRL & 0x30;
if(value == 0x00){ //no H,V; goto SOG
CheckSOG();
}
else if(value == 0x20){ //no V; goto H/V
GoToSeparateSync();
}
break;
case 0x02: //SOG
GoToSeparateSync();
break;
case 0x03: //DVI
DIG_SEL();
HVI_REG = 0xE0; // HVI_REG
#if DVImode == DEmode
WriteIIC_HW(Scaler_Addr,0x12,0xb1);
#else
WriteIIC_HW(Scaler_Addr,0x12,0x81);
#endif
WriteIIC_HW(Scaler_Addr,0x86,0xc0);
WriteIIC_HW(Scaler_Addr,0x87,0xc0);
WriteIIC_HW(Scaler_Addr,0xd5,0x00);
WriteIIC_HW(Scaler_Addr,0xe5,0xc0);
WriteIIC_HW(Scaler_Addr,0xe6,0x03);
WriteIIC_HW(Scaler_Addr,0xf8,DTF8);
if(Panel_Interface == LVDS){
WriteIIC_HW(Scaler_Addr,0xfe,0x02);
}
else if(Panel_Interface == TTL){
WriteIIC_HW(Scaler_Addr,0xfe,0xc0);
}
else{
WriteIIC_HW(Scaler_Addr,0xfe,0xc1);
}
if((flag3 & BIT_2) != 0x00){
printf("DVI Input\r\n");
}
break;
}
Timer3 = 50;
while(Timer3 != 0){
CheckKey();
}
}
}
void GoToSeparateSync(void)
{
DIG_Off();
HVI_REG = 0xE0; // HVI_REG
WriteIIC_HW(Scaler_Addr,0x01,(0x48 | DT01));
// WriteIIC_HW(Scaler_Addr,0xe8,0x80);
WriteIIC_HW(Scaler_Addr,0x86,0xc0);
WriteIIC_HW(Scaler_Addr,0x87,0xc0);
WriteIIC_HW(Scaler_Addr,0xd5,0x00);
WriteIIC_HW(Scaler_Addr,0xe6,0x03);
WriteIIC_HW(Scaler_Addr,0xf8,DTF8);
if(Panel_Interface == LVDS){
WriteIIC_HW(Scaler_Addr,0xfe,0x02);
}
else if(Panel_Interface == TTL){
WriteIIC_HW(Scaler_Addr,0xfe,0xc0);
}
else{
WriteIIC_HW(Scaler_Addr,0xfe,0xc1);
}
SyncMode = 0;
if((flag3 & BIT_2) != 0x00){
printf("Separate Sync\r\n");
}
}
void GoToCompositeSync(void)
{
HVI_REG = 0xA0; // HVI_REG
WriteIIC_HW(Scaler_Addr,0x01,(0xd8 | DT01));
// WriteIIC_HW(Scaler_Addr,0xe8,0xc0);
WriteIIC_HW(Scaler_Addr,0x86,0xc0);
WriteIIC_HW(Scaler_Addr,0x87,0x80);
WriteIIC_HW(Scaler_Addr,0xd5,0x00);
WriteIIC_HW(Scaler_Addr,0xe6,0x03);
WriteIIC_HW(Scaler_Addr,0xf8,DTF8);
if(Panel_Interface == LVDS){
WriteIIC_HW(Scaler_Addr,0xfe,0x02);
}
else if(Panel_Interface == TTL){
WriteIIC_HW(Scaler_Addr,0xfe,0xc0);
}
else{
WriteIIC_HW(Scaler_Addr,0xfe,0xc1);
}
SyncMode = 1;
if((flag3 & BIT_2) != 0x00){
printf("Composite Sync\r\n");
}
}
void CheckSOG(void)
{
WriteIIC_HW(Scaler_Addr,0x01,(0xd8 | DT01));
// WriteIIC_HW(Scaler_Addr,0xe8,0xc0);
WriteIIC_HW(Scaler_Addr,0x86,0xe0);
WriteIIC_HW(Scaler_Addr,0x87,0x00);
WriteIIC_HW(Scaler_Addr,0xd5,0x04);
WriteIIC_HW(Scaler_Addr,0xe6,0x7f);
WriteIIC_HW(Scaler_Addr,0xf8,(DTF8|BIT_7));
if(Panel_Interface == LVDS){
WriteIIC_HW(Scaler_Addr,0xfe,0x12);
}
else if(Panel_Interface == TTL){
WriteIIC_HW(Scaler_Addr,0xfe,0xd0);
}
else{
WriteIIC_HW(Scaler_Addr,0xfe,0xd1);
}
SYNC_REG = 0x40;
Sleep(40);
Timer1 = 40;
H_SYNC = 0;
V_SYNC = 0;
while(Timer1 != 0){
if((PortC & BIT_2) == 0){
V_SYNC++;
}
else{
H_SYNC++;
}
}
H_SYNC >>= 2;
SYNC_REG = 0x60;
if(H_SYNC > V_SYNC){
HVI_REG = 0x20; // HVI_REG
SyncMode = 2;
if((flag3 & BIT_2) != 0x00){
printf("Sync on green\r\n");
}
}
else{
GoToSeparateSync();
}
}
void NoSync(void)
{
if((flag1 & BIT_3) == 0){
OSD_Control &= ~BIT_0;
WriteIIC_HW(Scaler_Addr,0x95,OSD_Control);
flag1 |= BIT_3;
flag2 &= 0xe1;
flag3 &= ~BIT_1; //in range
BackLightOff();
ForceToBackground(0); //Set fource to background
PoSvTimer = 500;
if((flag3 & BIT_2) != 0x00){
printf("NoSync\r\n");
}
}
else if((PoSvTimer < 300)&&(PoSvTimer > 0)&&((flag2 & BIT_1)==0)){
// else if((PoSvTimer == 0)&&((flag2 & BIT_1)==0)){
flag2 |= BIT_1;
ShowNoSync();
if((PortC & BIT_6) != 0){
BackLightOn();
}
}
}
void SetMinMax(void)
{
#if 0
code unsigned short TypClk[]={
800,900,832,1040,1152,1344,1600,1800,1688,2160,1688,1688,1688,1056
};
unsigned short i,k;
unsigned char w;
if(ModePoint >= UserModeSt){
// Set Minimum and Maximum
i = 0x106 + (ModePoint * 8);
i = Read24C16(i);
HP_Max = TypClk[i] - H_Act;
if(HP_Start > HP_Max){
HP_Max = HP_Start;
}
HP_Min = (unsigned char)((TypClk[i] * 3) / 100);
if(HP_Start < HP_Min){
HP_Min = HP_Start;
}
if((HP_Start + H_Act) < (TypClk[i] - 50)){
Clk_Min = TypClk[i] - 50;
Clk_Max = TypClk[i] + 50;
}
else{
Clk_Min = HP_Start + H_Act;
Clk_Max = Clk_Min + 100;
}
}
else{
// Set Minimum and Maximum
i = 0x104 + (ModePoint * 8);
k = MCU_DataMap[i];
i++;
k <<= 8;
k += MCU_DataMap[i];
w = HPW_REG;
w = (unsigned long)H_SYNC * k / (120000 / w);
// w = (unsigned long)H_SYNC * k / (140000 / w);
w = (w + 4) & 0xf8;
HP_Max = k - H_Act - w;
// HP_Max = k - H_Act;
if(HP_Start > HP_Max){
HP_Max = HP_Start;
}
HP_Min = (unsigned char)((k * 3) / 100);
if(HP_Start < HP_Min){
HP_Min = HP_Start;
}
if((HP_Start + H_Act) < (k - 50)){
Clk_Min = k - 50;
Clk_Max = k + 50;
}
else{
Clk_Min = HP_Start + H_Act;
Clk_Max = Clk_Min + 100;
}
}
#else
unsigned short i,k;
unsigned char w;
// Set Minimum and Maximum
i = 0x290 + (ModePoint << 1);
k = Read24C16(i);
i++;
k <<= 8;
k += Read24C16(i);
w = HPW_REG;
w = (unsigned long)H_SYNC * k / (120000 / w);
// w = (unsigned long)H_SYNC * k / (140000 / w);
w = (w + 4) & 0xf8;
HP_Max = k - H_Act - w;
// HP_Max = k - H_Act;
if(HP_Start > HP_Max){
HP_Max = HP_Start;
}
HP_Min = (unsigned char)((k * 3) / 100);
if(HP_Start < HP_Min){
HP_Min = HP_Start;
}
if((HP_Start + H_Act) < (k - 50)){
Clk_Min = k - 50;
Clk_Max = k + 50;
}
else{
Clk_Min = HP_Start + H_Act;
Clk_Max = Clk_Min + 100;
}
if((flag3 & BIT_2) != 0x00){
printf("HPW = %d\r\n",(unsigned short)w);
printf("HP_Max = %d\r\n",HP_Max);
printf("HP_Min = %d\r\n",(unsigned short)HP_Min);
printf("Clk_Max = %d\r\n",Clk_Max);
printf("Clk_Min = %d\r\n",Clk_Min);
}
#endif
}
void CheckModeChange(void)
{
#if 0
if(((INTHV_FLG & 0x07) != 0)||((MUTE_CTRL & 0x30) != 0x30)){
BackLightOff();
flag2 |= BIT_0;
H_SYNC_Temp = 0xffff;
V_SYNC_Temp = 0xffff;
}
#else
unsigned char value,temp;
unsigned long Freq;
if(PowerStatus > 0x80)
return;
if(((INTHV_FLG & 0x07) != 0)||((MUTE_CTRL & 0x30) != 0x30)){
BackLightOff();
flag2 |= BIT_0;
H_SYNC_Temp = 0xffff;
V_SYNC_Temp = 0xffff;
return;
}
flag1 |= BIT_0;
//V_SYNC=xx.xHz
temp = VCNT_LB;
value = VCNT_HB;
if((value & BIT_7) != 0){
V_SYNC = 0;
flag1 &= ~BIT_0;
}
else{
V_SYNC = value & 0x3f;
V_SYNC <<= 8;
V_SYNC = V_SYNC | temp;
if((V_SYNC == 0x3fff)||(V_SYNC == 0)){
V_SYNC = 0;
flag1 &= ~BIT_0;
}
else{
Freq = (unsigned long)12500000 / V_SYNC + 5;
V_SYNC = Freq / 10;
}
}
if(V_SYNC_Temp > V_SYNC){
if((V_SYNC_Temp - V_SYNC) > 3){
BackLightOff();
flag2 |= BIT_0;
H_SYNC_Temp = 0xffff;
V_SYNC_Temp = 0xffff;
return;
}
}
else{
if((V_SYNC - V_SYNC_Temp) > 3){
BackLightOff();
flag2 |= BIT_0;
H_SYNC_Temp = 0xffff;
V_SYNC_Temp = 0xffff;
return;
}
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -