📄 mode_detect.i
字号:
#line 5116 "Header\OSD.h" /0 extern unsigned char code Row_Info[][19]; extern unsigned char code FactRow_Info[][20]; extern unsigned char code OSD_Window_Setting[]; extern unsigned char code Page_All_Atb[]; extern unsigned char code Page_All_ENG[]; extern unsigned char code Page_All_GER[]; extern unsigned char code Page_All_FRE[]; extern unsigned char code Page_All_ITA[]; extern unsigned char code Page_All_SPA[]; extern unsigned char code Page_All_CHI_T[]; extern unsigned char code Page_All_CHI_S[]; extern unsigned char code Page_All_JAP[]; extern unsigned char code Page1_Atb[]; extern unsigned char code Page1_ENG[]; extern unsigned char code Page1_GER[]; extern unsigned char code Page1_FRE[]; extern unsigned char code Page1_ITA[]; extern unsigned char code Page1_SPA[]; extern unsigned char code Page1_CHI_T[]; extern unsigned char code Page1_CHI_S[]; extern unsigned char code Page1_JAP[]; extern unsigned char code Page2_Atb[]; extern unsigned char code Page2_ENG[]; extern unsigned char code Page2_GER[]; extern unsigned char code Page2_FRE[]; extern unsigned char code Page2_ITA[]; extern unsigned char code Page2_SPA[]; extern unsigned char code Page2_CHI_T[]; extern unsigned char code Page2_CHI_S[]; extern unsigned char code Page2_JAP[]; extern unsigned char code Page3_Atb[]; extern unsigned char code Page3_ENG[]; extern unsigned char code Page3_GER[]; extern unsigned char code Page3_FRE[]; extern unsigned char code Page3_ITA[]; extern unsigned char code Page3_SPA[]; extern unsigned char code Page3_CHI_T[]; extern unsigned char code Page3_CHI_S[]; extern unsigned char code Page3_JAP[]; extern unsigned char code Page4_Atb[]; extern unsigned char code Page4_ENG[]; extern unsigned char code Page4_GER[]; extern unsigned char code Page4_FRE[]; extern unsigned char code Page4_ITA[]; extern unsigned char code Page4_SPA[]; extern unsigned char code Page4_CHI_T[]; extern unsigned char code Page4_CHI_S[]; extern unsigned char code Page4_JAP[]; extern unsigned char code Page5_Atb[]; extern unsigned char code Page5_ENG[]; extern unsigned char code Page5_GER[]; extern unsigned char code Page5_FRE[]; extern unsigned char code Page5_ITA[]; extern unsigned char code Page5_SPA[]; extern unsigned char code Page5_CHI_T[]; extern unsigned char code Page5_CHI_S[]; extern unsigned char code Page5_JAP[]; extern unsigned char code Page6_Atb[]; extern unsigned char code Page6_ENG[]; extern unsigned char code Page6_GER[]; extern unsigned char code Page6_FRE[]; extern unsigned char code Page6_ITA[]; extern unsigned char code Page6_SPA[]; extern unsigned char code Page6_CHI_T[]; extern unsigned char code Page6_CHI_S[]; extern unsigned char code Page6_JAP[]; extern unsigned char code Page7_Atb[]; extern unsigned char code Page7_ENG[]; extern unsigned char code Page7_GER[]; extern unsigned char code Page7_FRE[]; extern unsigned char code Page7_ITA[]; extern unsigned char code Page7_SPA[]; extern unsigned char code Page7_CHI_T[]; extern unsigned char code Page7_CHI_S[]; extern unsigned char code Page7_JAP[]; extern unsigned char code OSD_Version[]; extern unsigned char code NoCable_ENG[]; extern unsigned char code NoCable_GER[]; extern unsigned char code NoCable_FRE[]; extern unsigned char code NoCable_ITA[]; extern unsigned char code NoCable_SPA[]; extern unsigned char code NoCable_CHI_T[]; extern unsigned char code NoCable_CHI_S[]; extern unsigned char code NoCable_JAP[]; extern unsigned char code NoSignal_ENG[]; extern unsigned char code NoSignal_FRA[]; extern unsigned char code NoSignal_DEU[]; extern unsigned char code NoSignal_ESP[]; extern unsigned char code NoSignal_ITA[]; extern unsigned char code NoSignal_CHI_T[]; extern unsigned char code NoSignal_CHI_S[]; extern unsigned char code NoSignal_JAP[]; extern unsigned char code NoSupport_ENG[]; extern unsigned char code NoSupport_GER[]; extern unsigned char code NoSupport_FRE[]; extern unsigned char code NoSupport_ITA[]; extern unsigned char code NoSupport_SPA[]; extern unsigned char code NoSupport_CHI_T[]; extern unsigned char code NoSupport_CHI_S[]; extern unsigned char code NoSupport_JAP[]; extern unsigned char code rgb_OSD_VOLUME[]; extern unsigned char code OSD_VOLUME_ENG[]; extern unsigned char code OSD_VOLUME_ESP[]; extern unsigned char code OSD_VOLUME_JAP[]; extern unsigned int code strTabVOLUME_Atb[]; extern unsigned char code OSD_AUTO[]; extern unsigned char code OSD_Auto_ENG[]; extern unsigned char code OSD_Auto_DEU[]; extern unsigned char code OSD_Auto_FRA[]; extern unsigned char code OSD_Auto_ESP[]; extern unsigned char code OSD_Auto_ITA[]; extern unsigned char code OSD_Auto_CHI_T[]; extern unsigned char code OSD_Auto_JAP[]; extern unsigned int code strTabAuto_Atb[]; extern unsigned char code OSD_RGB[]; extern unsigned char code OSD_DVI[]; extern unsigned char code OSD_AV[]; extern unsigned char code OSD_SV[]; extern unsigned char code OSD_YUV[]; extern unsigned char code OSD_TV[]; extern unsigned char code FactoryPageAtbFont[]; extern unsigned char code OSD_Clean_All[]; extern unsigned char code Version_Panel[]; extern unsigned char code RecallOK[]; extern unsigned char code AutoOK[]; extern unsigned char code OSD_Reset[]; extern unsigned char code OSD_Enable[]; extern unsigned char code Page8_Atb[]; extern unsigned char code Page8_Title_ENG[]; extern unsigned char code Page8_Title_GER[]; extern unsigned char code Page8_Title_FRE[]; extern unsigned char code Page8_Title_ITA[]; extern unsigned char code Page8_Title_SPA[]; extern unsigned char code Page8_Title_CHI_T[]; extern unsigned char code Page8_Title_CHI_S[]; extern unsigned char code Page8_Title_JAP[]; extern unsigned char code Page8_Content[]; extern unsigned char code Page9_Atb[]; extern unsigned char code Page9_Title_ENG[]; extern unsigned char code Page9_Title_GER[]; extern unsigned char code Page9_Title_FRE[]; extern unsigned char code Page9_Title_ITA[]; extern unsigned char code Page9_Title_SPA[]; extern unsigned char code Page9_Title_CHI_T[]; extern unsigned char code Page9_Title_CHI_S[]; extern unsigned char code Page9_Title_JAP[]; extern unsigned char code Page9_Content[]; extern unsigned char code PageADC_Atb[]; extern unsigned char code PageADC_ENG[]; extern unsigned char code PageVDC_Atb[]; extern unsigned char code PageVDC_ENG[]; #line 5305 "Header\OSD.h" /1 #line 5312 "Header\OSD.h" /0 extern unsigned int code OSD_HINT_TABLE[][8]; extern unsigned int code OSD_REMK_TABLE[][8]; extern unsigned int code OSD_PAGE_TABLE[][8]; extern unsigned int code OSD_PAGE_All_TABLE[][8]; #line 8 "Code\Mode_Detect.c" /0 #line 1 "Header\Lcd_Auto.h" /0 #line 71 "Header\Lcd_Auto.h" /1 #line 107 "Header\Lcd_Auto.h" /0 extern bit bAutoInProgress; extern unsigned int idata usVer_Start; extern unsigned int idata usVer_End; extern unsigned int idata usH_Start; extern unsigned int idata usH_End; extern unsigned char Auto_Phase(void); extern unsigned char Auto_Position(void); extern unsigned char Auto_Config(void); extern unsigned char Auto_Balance(void); extern unsigned char Measure_Color(unsigned char color, unsigned char margin); #line 9 "Code\Mode_Detect.c" /0 #line 1 "Header\Frame_Sync.h" /0 #line 2 "Header\Frame_Sync.h" /1 #line 21 "Header\Frame_Sync.h" /0 extern bit bFrameSync; extern unsigned char idata ucSyncErrorCnt; extern unsigned char idata ucPE_Max; extern unsigned char idata ucStatus; extern unsigned char idata ucI_Code; extern unsigned char idata ucP_Corr; extern unsigned char Frame_Sync(void); extern bit Frame_Sync_Detector(void); extern void Adjust_I_Code(void); #line 10 "Code\Mode_Detect.c" /0 #line 1 "Header\Src_Ctrl.h" /0 #line 2 "Header\Src_Ctrl.h" /1 #line 13 "Header\Src_Ctrl.h" /0 extern bit bSourceScanEnable; extern bit Source_Control(void); extern void Change_Source(unsigned char source); extern void Source_Auto_Scan(); #line 11 "Code\Mode_Detect.c" /0 #line 1 "Header\LCD_OSD.h" /0 #line 24 "Header\LCD_OSD.h" /1 #line 90 "Header\LCD_OSD.h" /0 extern unsigned char idata ucOSD_Page_Index; extern unsigned char idata ucOSD_Item_Index0; extern unsigned char idata ucOSD_Item_Index1; extern unsigned char idata ucOSD_Item_Index2; extern unsigned char idata ucOSD_Pre_Page_Index; #line 98 "Header\LCD_OSD.h" /1 #line 102 "Header\LCD_OSD.h" /0 extern void OSD_Proc(unsigned char action); extern void OSD_Window(unsigned char win_no, unsigned int row_start, unsigned int row_end, unsigned int col_start, unsigned int col_end, unsigned char width, unsigned char height, unsigned char color, unsigned char color_sb, unsigned char gradient, unsigned char gra_level,unsigned char attr); extern void OSD_Line(unsigned char row, unsigned char col, unsigned char length, unsigned char value, unsigned char indicate); extern void Get_OSD_Margin(void); extern void OSD_Opening(void); extern void OSD_Ending(void); extern void Show_Note(void); extern void Show_Hint(void); extern void OSD_Clear(unsigned char row_start, unsigned char height, unsigned char col_start, unsigned char width); extern void OSD_Show_Check(void); extern void rgb_OSD_Slider(unsigned char row, unsigned char col, unsigned char length, unsigned char value, unsigned char range, unsigned char color, unsigned char color_slider); extern void OSD_Fact_Line(unsigned char row, unsigned char col, unsigned char length, unsigned char value, unsigned char indicate); extern void OSD_Fact_Clear(unsigned char row_start, unsigned char height, unsigned char col_start, unsigned char width); extern void OSD_Position(unsigned char para); extern void Value_Adjust(unsigned char *Var, unsigned char Key, unsigned char VMax, unsigned char VMin); #line 12 "Code\Mode_Detect.c" /0 void Mode_Detector(void) { switch (stGUD1.INPUT_SOURCE & 0x07) { case 0 : case 1 : bHpole_Prev = bHpole_Curr; bVpole_Prev = bVpole_Curr; if ((0 == ucMode_Curr) || (255 == ucMode_Curr)) Detect_Input_Mode(); else Check_Input_Mode(); break; default : if ((0 == ucMode_Curr) || (255 == ucMode_Curr)) Detect_Video_Mode(); else Check_Video_Mode(); break; } Measure_Mode(); } void Measure_Mode(void) { switch (stGUD1.INPUT_SOURCE & 0x07) { RTDSetByte(0x4A,0x00); case 0 : RTDSetByte(0x4C, (0x00 == ucSync_Type) ? 0x02 : 0x32); break; case 1 : RTDSetByte(0x4C, 0x02); break; default : RTDSetByte(0x4C, 0x02); break; } } void Measure_Source(unsigned char SOURCE) { switch(SOURCE) { case 0: RTDSetByte(0x4A,0x01); break; case 1: RTDSetByte(0x4A,0x03); break; case 2: I2CWrite(V_ENABLE); I2CWrite(AV_DETECT); break; case 3: I2CWrite(V_ENABLE); I2CWrite(SV_DETECT); break; } if(((stGUD1.INPUT_SOURCE & 0x07) == 0) && (0x00 != ucSync_Type)) RTDSetByte(0x4C,0x32); else RTDSetByte(0x4C,0x02); Delay_Xms(35); } unsigned char VGA_Mode_Search(unsigned int HS_Pulse) { unsigned char ucMode_Temp,m; Data[0] = HS_Pulse * 12 / usHsync; ucMode_Temp = 255; m = 44; do { if ((usHsync > VGA_Mode[m][0]) && (usHsync < VGA_Mode[m][1])) { if ((usVsync >= VGA_Mode[m][2]) && (usVsync <= VGA_Mode[m][3])) { if (44 == m) { if (0 == (bVpole_Curr | bHpole_Curr)) m = 43; } else if (32 == m) { if (0 == (bVpole_Curr | bHpole_Curr)) m = 31; } else if (14 == m && bVpole_Curr != bHpole_Curr) { if (bHpole_Curr) m = Data[0] ? 3 : 3 | 0x40; else m = (stGUD1.FUNCTION & 0x10) ? 4 : 4 | 0x40; } else if (13 == m && bVpole_Curr != bHpole_Curr) { if (bHpole_Curr) m = Data[0] ? 1 : 1 | 0x40; else m = (stGUD1.FUNCTION & 0x10) ? 2 : 2 | 0x40; } else if (12 == m) { if (1 == bHpole_Curr && 0 == bVpole_Curr) m = 10; else if (stGUD1.FUNCTION & 0x10) m = 11; } else if (9 == m) { if (1 == bHpole_Curr && 0 == bVpole_Curr) m = Data[0] ? 6 : 7; else if ((stGUD1.FUNCTION & 0x10)==0) m = 8; } else if (27 == m) { if(HS_Pulse > 45) m = 26; } else if (26 == m) { if(HS_Pulse <= 45) m = 27; } else if(30 == m) { if(ucRefresh <= 71) m = 29; } ucMode_Temp = m; } } } while ((0 != --m) && (255 == ucMode_Temp)); if (255 == ucMode_Temp) { usIPV_ACT_LEN = 0; m = 58; do { if ((usVsync >= VGA_Mode[m][2]) && (usVsync <= VGA_Mode[m][3])) { usIPV_ACT_LEN = CAP_WIN[m][4]; if ((usHsync >= VGA_Mode[m][0]) && (usHsync <= VGA_Mode[m][1])) { ucMode_Temp = m; } } } while ((51 <= --m) && (255 == ucMode_Temp)); } return ucMode_Temp; } unsigned char Partial_Display(void) { unsigned char ucMode_Temp; if ((0x040c - 0x000c) < usIPV_ACT_LEN) { ((unsigned int *)Data)[0] = (unsigned long)2458 * Mode_Preset[61][0] * (0x040c - 0x000c) / ((unsigned long)100 * usIPV_ACT_LEN * usHsync); if (138 < ((unsigned int *)Data)[0]) { ((unsigned int *)Data)[1] = (unsigned long)2458 * Mode_Preset[61][0] * 0x0410 / ((unsigned long)100 * (usVsync - 1) * usHsync); if (138 < ((unsigned int *)Data)[1]) { usIPV_ACT_LEN = (0x040c - 0x000c); } else { ucMode_Temp = 61 | 0x80; } } else ucMode_Temp = 61; } if ((0x040c - 0x000c) >= usIPV_ACT_LEN) { ((unsigned int *)Data)[0] = (unsigned long)2458 * Mode_Preset[60][0] * (0x040c - 0x000c) / ((unsigned long)100 * usIPV_ACT_LEN * usHsync); if (138 < ((unsigned int *)Data)[0]) { if (0x0410 >= (usVsync - 1)) { ((unsigned int *)Data)[1] = (unsigned long)2458 * Mode_Preset[60][0] * 0x0410 / ((unsigned long)100 * (usVsync - 1) * usHsync); } else { ((unsigned int *)Data)[1] = (unsigned long)2458 * Mode_Preset[60][0] / ((unsigned long)100 * usHsync); } if (138 < ((unsigned int *)Data)[1]) ucMode_Temp = 255; else ucMode_Temp = 60 | 0x80; } else ucMode_Temp = 60; } return ucMode_Temp; } void Sync_Type_Switch(void) { if (0 == ucMode_Curr) { if (0x10 == ucSync_Type) { RTDCodeW(VGA_SET_SS); bVpole_Curr = 1; bHpole_Curr = 1; ucSync_Type = 0x00; } else if (0x00 == ucSync_Type) { RTDCodeW(VGA_SET_SOG); bVpole_Curr = 1; bHpole_Curr = 1; ucSync_Type = 0x20; } else { RTDCodeW(VGA_SET_CS); bVpole_Curr = 1; bHpole_Curr = 1; ucSync_Type = 0x10; } } } void Sync_Type_Confirm(void) { #line 335 "Code\Mode_Detect.c" /1 #line 425 "Code\Mode_Detect.c" /0 } void Detect_Input_Mode(void) { unsigned char ucMode_Temp; unsigned int usHS_Pulse; RTDRead(0x4C, 0x09, 0); if (Data[0] & 0x02) { RTDSetByte(0x4C, ((stGUD1.INPUT_SOURCE & 0x07) == 0) ? 0x20 : 0x00); ucMode_Temp = 0; } else { usStdHS = usHsync; usStdVS = usVsync; bVpole_Curr = (bit)(Data[0] & 0x08); bHpole_Curr = (bit)(Data[0] & 0x04); Data[7] = Data[5]; Data[6] = Data[6] & 0x0f; Data[5] = Data[3]; Data[4] = Data[4] & 0x87; Data[3] = Data[1]; Data[2] = Data[2] & 0x8f; usHsync = ((unsigned int *)Data)[1]; usVsync = ((unsigned int *)Data)[2]; if((stGUD1.INPUT_SOURCE & 0x07) == 0) usHS_Pulse = ((unsigned int *)Data)[3]; ((unsigned long *)Data)[0] = (unsigned long)usHsync * usVsync; ucRefresh = (unsigned long)49152000 / ((unsigned long *)Data)[0]; ucRefresh = (ucRefresh & 0x01) ? ((ucRefresh + 1) >> 1) : (ucRefresh >> 1); if (usStdHS <= usHsync && (usStdHS + 2) >= usHsync) usHsync = usStdHS; if (usStdVS <= usVsync && (usStdVS + 2) >= usVsync) usVsync = usStdVS; if ((bVpole_Curr != bVpole_Prev) || (bHpole_Curr != bHpole_Prev)) { RTDRead(0x05, 0x01, 1); if((stGUD1.INPUT_SOURCE & 0x07) == 0) { Data[0] &= 0xd7; if (!bHpole_Curr) Data[0] |= 0x20; if (!bVpole_Curr && 0x00 == ucSync_Type) Data[0] |= 0x08; ucMode_Temp = 255; } else if((stGUD1.INPUT_SOURCE & 0x07) == 1) { Data[0] &= 0xf3; if (!bVpole_Curr) Data[0] |= 0x08; if (!bHpole_Curr) Data[0] |= 0x04; } RTDSetByte(0x05, Data[0]); } else { if (0x07ff <= usHsync || 0x07ff <= usVsync || 0 == usHsync || 0 == usVsync) { ucMode_Temp = 0; } else { ucMode_Temp = ((stGUD1.INPUT_SOURCE & 0x07) == 0) ? VGA_Mode_Search(usHS_Pulse) : 255; if (48 > ucRefresh || 76 < ucRefresh) { ucMode_Temp = 255; } else if (255 == ucMode_Temp && (0 != usIPV_ACT_LEN) && ((stGUD1.INPUT_SOURCE & 0x07) == 0)) { ucMode_Temp = Partial_Display(); } else if((stGUD1.INPUT_SOURCE & 0x07) == 1) ucMode_Temp = Seek_DVI_Mode(ucMode_Temp); } } } if((stGUD1.INPUT_SOURCE & 0x07) == 0) { if (0x20 == ucSync_Type && 0 != (usHS_Pulse * 7 / usHsync)) { ucMode_Temp = 0; } } if (255 == ucMode_Temp || 0 == ucMode_Temp) { if((stGUD1.INPUT_SOURCE & 0x07) == 0) { if (0x20 == ucSync_Type) ucMode_Temp = 0; } if (255 != ucMode_Found && 0 != ucMode_Found) ucMode_Times = 0; ucMode_Found = ucMode_Temp; if (5 > ucMode_Times) { ucMode_Times ++; if((stGUD1.INPUT_SOURCE & 0x07) == 1) { RTDSetByte(0xFF,0x03); } } else { if((stGUD1.INPUT_SOURCE & 0x07) == 1) { RTDSetByte(0xFF,0x00); } bStable = (ucMode_Curr == ucMode_Found) ? 1 : 0; ucMode_Curr = ucMode_Found; ucMode_Times = 5 - 2; if((stGUD1.INPUT_SOURCE & 0x07) == 0) Sync_Type_Switch(); } } else { if (ucMode_Found != ucMode_Temp) { ucMode_Times = 1; ucMode_Found = ucMode_Temp; if((stGUD1.INPUT_SOURCE & 0x07) == 0) Sync_Type_Confirm(); } else { Data[0] = ((stGUD1.INPUT_SOURCE & 0x07) == 0) ? 3 : 3; if (Data[0] > ucMode_Times) { ucMode_Times ++; } else { M512_Port51 = 1; RTDSetByte(0x02, 0x40); RTDOSDW(OSD_Reset); ucMode_Curr = ucMode_Found; ucMode_Times = 0; bStable = 0; if((stGUD1.INPUT_SOURCE & 0x07)== 0) Display_VGA_Set(); else Display_DVI_Set(); #line 635 "Code\Mode_Detect.c" /1 #line 646 "Code\Mode_Detect.c" /0 } } } } void Check_Input_Mode(void) { RTDRead(0x4C, 0x05, 0); if (Data[0] & 0x02) { RTDSetByte(0x4C, ((stGUD1.INPUT_SOURCE & 0x07) == 0) ? 0x20 : 0x00); ucMode_Found = 255; } else { bVpole_Curr = (bit)(Data[0] & 0x08); bHpole_Curr = (bit)(Data[0] & 0x04); Data[5] = Data[3]; Data[4] = Data[4] & 0x87; Data[3] = Data[1]; Data[2] = Data[2] & 0x8f; usHsync = ((unsigned int *)Data)[1]; usVsync = ((unsigned int *)Data)[2]; if ((bVpole_C
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -