📄 modehandle.c
字号:
WriteIIC563(0x1a9,0x3c); //added by kevin y50321
GetMode();
if(SyncMode == 3)
{
if(Hresolution <= 800)// joe 2005/5/3 for dvi 800x600@56 color dot
{
WriteIIC563(0x144,0x04);//Jacky 20041221
WriteIIC563(0x145,0x03);//Jacky 20041221
}
else
{
WriteIIC563(0x145,0x00);//Jacky 20041221
WriteIIC563(0x144,0x00);
}
}
SetDisplayNormal();
WriteIIC563(0x158, PanelDethMode);
PanelPowerUpSequence();
I_OBackLightHigh;
VideoMute = 0;
}
}
}
}
void GetFuncRange(Byte Ptr)
{
FuncMin = 0;
switch(Ptr)
{
case pBRIGHTNESS:
FuncMax = 100;
//FuncMax = 255;
break;
case pCONTRAST:
FuncMax = 100;
//FuncMax = FuncBuf[pContMax];
//FuncMin= FuncBuf[pContMin];
break;
case pPHASE:
FuncMax = 0x3f;
break;
case pCLOCK:
FuncMax = ClockBase + 50;
FuncMin = ClockBase - 50;
//FuncMax = ClockBase / 10 * 11; ///10%
//FuncMin = ClockBase / 10 * 9;
break;
case pHPOSITION:
FuncMin = 1;
FuncMax = FuncBuf[pCLOCK] - Hresolution - 2;
break;
case pVPOSITION:
FuncMin = 1;
//FuncMax = VTotal > Vresolution ? VTotal - Vresolution : 12; //test
FuncMax = VTotal > Vresolution ? VTotal - Vresolution : 12; //for は篜 ISSUE
break;
case pRCOLOR:
case pGCOLOR:
case pBCOLOR:
FuncMax = 200;
break;
case pCOLORTEMP:
FuncMax = MAX_COLOR_TEMP-1;
break;
case pLANGUAGE:
case pSHARPNESS:
if(FuncBuf[pVIDEOSOURCE]<2)
// FuncMax = 31; // change by Kevin y50303
FuncMax = 15; // change by Kevin y50303
else
FuncMax = 23; // change by Kevin y50303
break;
case pVIDEOSOURCE:
if(Saa7114En)
FuncMax = 4;
else
FuncMax = 2;
break;
case pVOLUME:
FuncMax = 100;
break;
case pRADC:
case pGADC:
case pBADC:
FuncMax = 255;
break;
case pROFFSET:
case pGOFFSET:
case pBOFFSET:
FuncMax = 255;
break;
};
}
void CheckDVIresolution()
{
Union Hf,Vf;
if(SyncMode == 3){
Vf.w = ReadWordIIC563(0x03e);
Hf.w = ReadWordIIC563(0x03c);
// CheckFreqRange(Hf.w>>8);
Hresolution = Hf.w;
Vresolution = Vf.w;
}
}
void GetMode(void)
{
#if 1
bit PolPass;
Byte ch;
Union Hf,Vf;
#endif
VTotal = (Word)(((unsigned long)H_SYNC * 1000)/ V_SYNC);
#if 1
for(ModePoint=0;ModePoint< T_Total_Mode_No;ModePoint++){
Hf.b[0] = EEP_ModeMap[T_EEaddr_H_Freq_Hi_Byte]; //check h_sync
Hf.b[1] = EEP_ModeMap[T_EEaddr_H_Freq_Low_Byte];
Vf.b[0] = EEP_ModeMap[T_EEaddr_V_Freq_Hi_Byte];
Vf.b[1] = EEP_ModeMap[T_EEaddr_V_Freq_Low_Byte];
PolPass = 0;
if(Vf.b[0] & 0x80)
PolPass = 1;
if((Vf.b[0] & 0x30) == HV_Pol)
PolPass = 1;
if(Vf.b[0] & 0x40){
ch = (Vf.b[0] & 0x40) >> 1;
ch |= ch >> 1;
if(ch == HV_Pol)
PolPass = 1;
}
if(PolPass){
if(abs(Hf.w - H_SYNC)<3){
Vf.b[0] &= 0x0f;
if(abs(Vf.w - V_SYNC) < 10){
break;
}
}
}
}
#endif
/*
if(ModePoint >=Graphic_Text_Mode_Start_No&&ModePoint <=Graphic_Text_Mode_End_No&&(SyncMode == 0 || SyncMode == 3)){
GTmodeEn = 1;
if(TextMode)
ModePoint++; //for set in text mode kevin y50202
}else{
GTmodeEn = 0;
}
if(ModePoint >= T_Total_Mode_No){
NewMode = 1;
SetUserMode();
}else{
NewMode = 0;
}
*/
if(ModePoint >= 19)
ModePoint = 11;
LoadModeDependentSettings();
/*
if(ModePoint ==1)
FuncBuf[pHPOSITION] = 0x96;//0x4B;
else{
FuncBuf[pHPOSITION] = 0x2e;//0x4B;
FuncBuf[pVPOSITION] = 0x14;//0x4B;
}
*/
ResolutionPtr = EEP_ModeMap[T_EEaddr_Resol]&0x7f;
Hresolution = Active_Tab[Get_active_index()].H_Active;
Vresolution = Active_Tab[Get_active_index()].V_Active;
if(Vresolution>VTotal)
Vresolution=VTotal-20;
ClockBase = EEP_ModeMap[T_EEaddr_BaseHTotal]; //EEP_SyncMap[Addr+2];
ClockBase <<= 8;
ClockBase |= EEP_ModeMap[T_EEaddr_BaseHTotal+1]; //[Addr+3];
SetInterface();
SetScaler();
// SetADC_PLL();
if(SyncMode < 3) //skip setadcpll while in DVI mode
{
SetADC_PLL();
SetADC_Phase();
}
else
{
CheckDVIresolution();
// CheckDVIFreqRange();
}
if(SyncMode == 3) //DVI
{
#if DVImode == DEmode
//FuncBuf[pVPOSITION] = 0x1e0; // for DE mode scaler shut down Jacky20040629
FuncBuf[pVPOSITION] = 0; // for DE mode scaler shut down Jacky20040629
FuncBuf[pHPOSITION] = 0;
// SetDVI_Sharpness();
WriteWordIIC563(0x030,FuncBuf[pVPOSITION]);
WriteWordIIC563(0x02e,FuncBuf[pVPOSITION]);
WriteWordIIC563(0x030,FuncBuf[pVPOSITION]);
WriteWordIIC563(0x034,FuncBuf[pHPOSITION]);
#else
AutoPosition();
#endif
}
// SetVP();
// SetHP();
WriteIIC563(0x66,0x07);
// SetSharpness();
}
/*
void SetUserMode(void)
{
#ifdef Wide19
code unsigned short Vt_Tab[]={
490,590,610,730,778,800,874,910,970,1050,1080
};
code unsigned char UserTimeTab[]={
T_Timing_Parameters(0x10,0x60,0x384,Re_0720x0400),
T_Timing_Parameters(0x10,0x50,0x342,Re_0640x0480),
T_Timing_Parameters(0x10,0x17,0x3b0,Re_0720x0576),
T_Timing_Parameters(0x10,0x98,0x418,Re_0800x0600),
T_Timing_Parameters(0x10,0xe0,0x6c0,Re_1280x0720),
T_Timing_Parameters(0x12,0xc8,0x680,Re_1280x0768),
T_Timing_Parameters(0x10,0xd0,0x540,Re_1024x0768),
T_Timing_Parameters(0x10,0xd0,0x5c8,Re_1152x0864),
T_Timing_Parameters(0x19,0xe8,0x778,Re_1440x0900),
T_Timing_Parameters(0x10,0xe0,0x6c0,Re_1280x0960),
T_Timing_Parameters(0x10,0xf8,0x698,Re_1280x1024),
T_Timing_Parameters(0x2e,0x130,0x870,Re_1600x1200),
};
unsigned char i,j;
for(i=0; i<11; i++){
if(VTotal < Vt_Tab[i]){
break;
}
}
#else
code unsigned short Vt_Tab[]={
490,590,610,730,778,874,970,1050,1080
};
code unsigned char UserTimeTab[]={
T_Timing_Parameters(0x10,0x60,0x3a8,Re_0720x0400),
T_Timing_Parameters(0x10,0x50,0x342,Re_0640x0480),
T_Timing_Parameters(0x10,0x17,0x3b0,Re_0720x0576),
T_Timing_Parameters(0x10,0x98,0x418,Re_0800x0600),
T_Timing_Parameters(0x10,0xe0,0x6c0,Re_1280x0720),
T_Timing_Parameters(0x10,0xd0,0x540,Re_1024x0768),
T_Timing_Parameters(0x10,0xd0,0x5c8,Re_1152x0864),
T_Timing_Parameters(0x10,0xe0,0x6c0,Re_1280x0960),
T_Timing_Parameters(0x10,0xf8,0x698,Re_1280x1024),
T_Timing_Parameters(0x2e,0x130,0x870,Re_1600x1200),
};
unsigned char i,j;
for(i=0; i<9; i++){
if(VTotal < Vt_Tab[i]){
break;
}
}
#endif
j = i * T_Timing_Data_No;
ModePoint = Read24C16(T_EEaddr_User_Start);
if((ModePoint <T_Preset_Timing_No)||(ModePoint >=T_Total_Mode_No)){
ModePoint = T_Preset_Timing_No;
}
Write24C16(T_EEaddr_User_Start,ModePoint+1); //index to nextuser mode
for(i=0; i<T_Timing_Data_No; i++){
Write24C16(T_EEaddr_Mode_data+i,UserTimeTab[j+i]);
}
Write24C16(T_EEaddr_H_Freq_Hi_Byte,H_SYNC >> 8);
Write24C16(T_EEaddr_H_Freq_Low_Byte,(Byte)H_SYNC);
Write24C16(T_EEaddr_V_Freq_Hi_Byte,(V_SYNC >> 8)|HV_Pol);
Write24C16(T_EEaddr_V_Freq_Low_Byte,V_SYNC);
ResolutionPtr = Read24C16(T_EEaddr_Resol)&0x7f;
}
*/
/*==========================================
==========================================*/
void CheckModeChange(void)
{
unsigned char temp;
if(DetectIRQ() || ChangeMode>0){
temp = ReadIIC563(0x1ab);
if((temp & 0x3c) != 0){
BackLightOff();
Abort = 1;
H_SYNC_Temp = 0xffff;
V_SYNC_Temp = 0xffff;
}
temp = ReadIIC563(0x19a);
if(((SyncMode > 0)&&(SyncMode < 3))||((SyncMode > 4)&&(SyncMode < 7))){ //compostive
if((temp & BIT_5) == 0){
BackLightOff();
Abort = 1;
H_SYNC_Temp = 0xffff;
V_SYNC_Temp = 0xffff;
return;
}
}else{
if((temp & 0x18) != 0x18){
BackLightOff();
Abort = 1;
H_SYNC_Temp = 0xffff;
V_SYNC_Temp = 0xffff;
return;
}
}
}
}
bit VsyncValide()
{
/*
Word VsyncWidth;
LocalTimer = 2; //20ms
while(!V_SyncPresent) //Vsync Lo
{
if(LocalTimer == 0)
return 0;
}
LocalTimer = 10; //100ms
while(V_SyncPresent) //Vsync Hi
{
if(LocalTimer == 0)
return 0;
}
VsyncWidth = 0;
while(!V_SyncPresent) //Vsync Hi 1:7us
{
VsyncWidth ++;
if(VsyncWidth > 50) //over 350us
return 0;
}
VsyncWidth = 0;
while(V_SyncPresent) //Vsync Hi 1:7us
{
VsyncWidth ++;
if(VsyncWidth > 714) //over 5ms
return 1;
}
*/ return 0;
}
void LoadModeDependentSettings(void)
{
// Sharp,V_BP,H_BP,H_Tatol,Phase
//unsigned short addr;
// addr = T_EEaddr_Mode_data;
FuncBuf[pSHARPNESS] = EEP_ModeMap[T_EEaddr_Sharp];//(addr++);
FuncBuf[pVPOSITION] = EEP_ModeMap[T_EEaddr_VBP];//(addr++);
FuncBuf[pHPOSITION] = EEP_ModeMap[T_EEaddr_HBP];//(addr++);
FuncBuf[pHPOSITION] <<= 8;
FuncBuf[pHPOSITION] |= EEP_ModeMap[T_EEaddr_HBP+1];//(addr++);
FuncBuf[pCLOCK] = EEP_ModeMap[T_EEaddr_HTotal];//(addr++);
FuncBuf[pCLOCK] <<= 8;
FuncBuf[pCLOCK] |= EEP_ModeMap[T_EEaddr_HTotal+1];//(addr++);
// addr++;
FuncBuf[pPHASE] = EEP_ModeMap[T_EEaddr_Phase];//(addr);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -