?? ddcci.c
字號:
/*
********************************************************************************
*
* 文件名 : DDCCI.C
********************************************************************************
* 功 能 描 述
*
********************************************************************************
*/
#include "global.h"
//#include "scalar.h"
//#include "eeprom.h"
extern xdata short AdjusterValue;
#if EN_DDC_CI
extern xdata unsigned char AbusBuffer[];
extern unsigned char cCheckSum;
extern xdata unsigned char ucActiveControl;
extern bit bCmdReady;
extern bit bDeviceReady; //device ready work not in DDCCI
extern xdata unsigned char cReplyLength;
/*===============================================
===============================================*/
void DDCCI_Get_VCP_Feature(void)
{
Union Value;
unsigned char temp;
SourceAddr = HOST_ADDR;
CmdLength = 0x88;
cReplyLength = 0x08+1;
ReplyCode = VESA_VCP_FEATURE_REPLY;
cCheckSum = 0x50;
switch(OpCode){
case MCCS_RESET:
case MCCS_RECALL_BC:
case MCCS_COLOR_RESET:
case MCCS_SETTINGS:
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_MOMENTARY;
MaxHighByte = 0x00;
MaxLowByte = 0xff;
PresentHighByte = 0x00;
PresentLowByte = 0x02;
break;
case MCCS_RECALL_HV_POS:
case MCCS_AUTOSETUP:
if(SysPar.InputSource == SOURCE_DVI_D){
ResultCode = VCP_FEATURE_NOTSUPPORT;
VcpTypeCode = VCP_FEATURE_MOMENTARY;
MaxHighByte = 0x00;
MaxLowByte = 0xff;
PresentHighByte = 0x00;
PresentLowByte = 0x00;
}else{
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_MOMENTARY;
MaxHighByte = 0x00;
MaxLowByte = 0xff;
PresentHighByte = 0x00;
PresentLowByte = 0x02;
}
break;
case MCCS_AUTOCOLOR:
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_MOMENTARY;
MaxHighByte = 0x00;
MaxLowByte = 0x03;
PresentHighByte = 0x00;
PresentLowByte = 0x00; //0x00 not avtive
break;
case MCCS_BRIGHTNESS:
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_SETPARAMETER;
Value.word = 100;//PanelBright(ADJ_READMAX);
MaxHighByte = Value.b[0];
MaxLowByte = Value.b[1];
PresentHighByte = 0x00;
PresentLowByte = (uint16)SysPar.Brightness;//((uint16)SysPar.Brightness * 120)/100 + 20;//(uint16)SysPar.Brightness*100/(SysPar.Bri_Max - SysPar.Bri_Min);
break;
case MCCS_CONTRAST:
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_SETPARAMETER;
// 給出對比度顯示BAR條的最大值
Value.word = 100;//SysPar.Con_Max;//Contrast(ADJ_READMAX);
MaxHighByte = Value.b[0];
MaxLowByte = Value.b[1];
PresentHighByte = 0x00;
PresentLowByte = (uint16)SysPar.Contrast;//(uint16)SysPar.Contrast * 140 /100 + 140;//(uint16)SysPar.Contrast*100/(SysPar.Con_Max - SysPar.Con_Min);//Contrast(ADJ_READ);//UserPreference.Contrast;
break;
case MCCS_COLOR_INC:
ResultCode = 0x00;
VcpTypeCode = VCP_FEATURE_MOMENTARY;
MaxHighByte = 0x00;
MaxLowByte = 100;
PresentHighByte = 0x00;
PresentLowByte = 50;
break;
case MCCS_COLOR_REQ:
ResultCode = 0x00;
VcpTypeCode = VCP_FEATURE_SETPARAMETER;
MaxHighByte = 0x00;
MaxLowByte = 130;
PresentHighByte = 0x00;
//PresentLowByte = 70;
switch(SysPar.ColorTemp){
case COLOR_6500:
PresentLowByte = 70;
break;
case COLOR_9300:
PresentLowByte = 130;
break;
case COLOR_USER:
PresentLowByte = 0;
break;
default:
break;
}
break;
case MCCS_COLOR_SEL:
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_MOMENTARY;
MaxHighByte = 0x00;
MaxLowByte = 0x08;
PresentHighByte = 0x00;
switch(SysPar.ColorTemp){
case COLOR_6500:
PresentLowByte = MCCS_6500K;
break;
case COLOR_9300:
PresentLowByte = MCCS_9300K;
break;
case COLOR_USER:
PresentLowByte = MCCS_DISPLAY_NATIVE;
break;
default:
break;
}
break;
case MCCS_HORIZONTAL_POSITION:
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_SETPARAMETER;
Value.word = 100;//HPos(ADJ_READMAX);
MaxHighByte = Value.b[0];
MaxLowByte = Value.b[1];
//Value.w = TimingBuf.HStartOffset+50;
Value.word = 50;//((uint16)(ModePar.hstart - 0) * 100)/(0x140 - 0);//HPos(ADJ_READ);
PresentHighByte = Value.b[0];
PresentLowByte = Value.b[1];
break;
case MCCS_VERTICAL_POSITION:
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_SETPARAMETER;
Value.word = 100;//VPos(ADJ_READMAX);
MaxHighByte = Value.b[0];
MaxLowByte = Value.b[1];
//Value.w = TimingBuf.VStartAdj;
Value.word = 50;//((uint16)(ModePar.vstart - 0) * 100)/(0x66 - 0);//VPos(ADJ_READ);
PresentHighByte = Value.b[0];
PresentLowByte = Value.b[1];
break;
case USER_CLOCK:
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_SETPARAMETER;
Value.word = 100;//HTotal(ADJ_READMAX);
MaxHighByte = Value.b[0];
MaxLowByte = Value.b[1];
Value.word = (unsigned int)(ModePar.htotal - ModeAttr[ModePar.mode].Htotal + (uint8)(ModeAttr[ModePar.mode].Hdisp >> 4))*50/(uint8)(ModeAttr[ModePar.mode].Hdisp >> 4);//ModePar.htotal;//HTotal(ADJ_READ);
PresentHighByte = Value.b[0];
PresentLowByte = Value.b[1];
break;
case USER_CLOCK_PHASE:
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_SETPARAMETER;
Value.word = 100;//SclkPhase(ADJ_READMAX);
MaxHighByte = Value.b[0];
MaxLowByte = Value.b[1];
Value.word = ((uint16)ModePar.phase * 100)/63;//ModePar.phase;//SclkPhase(ADJ_READ);
PresentHighByte = Value.b[0];
PresentLowByte = Value.b[1];
break;
case MCCS_RED_VIDEO_GAIN:
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_SETPARAMETER;
temp = SysPar.ColorTemp;
SysPar.ColorTemp = COLOR_USER;
LoadColorPar();
Value.word = 100;//Adj_Red_Gain(ADJ_READMAX);
MaxHighByte = Value.b[0];
MaxLowByte = Value.b[1];
Value.word = Color.R_Gain;//Adj_Red_Gain(ADJ_READ);
PresentHighByte = Value.b[0];
PresentLowByte = Value.b[1];
SysPar.ColorTemp = temp;
break;
case MCCS_GREEN_VIDEO_GAIN:
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_SETPARAMETER;
temp = SysPar.ColorTemp;
SysPar.ColorTemp = COLOR_USER;
LoadColorPar();
Value.word = 100;//Adj_Red_Gain(ADJ_READMAX);
MaxHighByte = Value.b[0];
MaxLowByte = Value.b[1];
Value.word = Color.G_Gain;//Adj_Red_Gain(ADJ_READ);
PresentHighByte = Value.b[0];
PresentLowByte = Value.b[1];
SysPar.ColorTemp = temp;
break;
case MCCS_BLUE_VIDEO_GAIN:
ResultCode = VCP_FEATURE_NOERROR;
VcpTypeCode = VCP_FEATURE_SETPARAMETER;
temp = SysPar.ColorTemp;
SysPar.ColorTemp = COLOR_USER;
LoadColorPar();
Value.word = 100;//Adj_Red_Gain(ADJ_READMAX);
MaxHighByte = Value.b[0];
MaxLowByte = Value.b[1];
Value.word = Color.B_Gain;//Adj_Red_Gain(ADJ_READ);
PresentHighByte = Value.b[0];
PresentLowByte = Value.b[1];
SysPar.ColorTemp = temp;
break;
}
}
/*===============================================
===============================================*/
void DDCCI_Set_VCP_Feature(void)
{
Union Value;
unsigned char temp;
unsigned short temps;
Value.b[0] = SetHighByte;
Value.b[1] = SetLowByte;
ucActiveControl = OpCode;//AbusBuffer[3];
// if((!Flg_Power)&&(OpCode!=MCCS_DISPLAY_POWER_MODE))
// if((OpCode!=MCCS_DISPLAY_POWER_MODE))
// return;
switch(OpCode){
case MCCS_RESET: //MCCS_RESTORE_DEFAULT:
if(!((AbusBuffer[4] == 0)&&(AbusBuffer[5] == 0))){
Mccs_Reset();
}
break;
case MCCS_BRIGHTNESS:
SysPar.Brightness= Value.b[1];//((uint16)Value.b[1] * 120)/100 + 20;//(uint16)Value.b[1]*(SysPar.Bri_Max - SysPar.Bri_Min)/100;
SarSetBri(SysPar.Brightness);
// ActiveSave_Brightness();//set save
// EepSavePar(); //save the value
ActiveSave_SYSPAR();
break;
case MCCS_CONTRAST:
SysPar.Contrast = Value.b[1];//(uint16)Value.b[1] * 140 /100 + 140;//(uint16)Value.b[1]*(SysPar.Con_Max - SysPar.Con_Min)/100;
// sRGB(SysPar.Contrast, SysPar.R_Gain, SysPar.G_Gain, SysPar.B_Gain);
AdjCon(HIDE,0);
// ActiveSave_Contrast();//set save
// EepSavePar(); //save the value
ActiveSave_SYSPAR();
break;
case MCCS_COLOR_SEL:
switch(SetLowByte){
case MCCS_6500K:
SysPar.ColorTemp = COLOR_6500;
LoadColorPar();
break;
case MCCS_9300K:
SysPar.ColorTemp = COLOR_9300;
LoadColorPar();
break;
case MCCS_DISPLAY_NATIVE:
SysPar.ColorTemp = COLOR_USER;
LoadColorPar();
default:
break;
}
AdjCon(HIDE, 0);
// Eep_Write(eepAdd_SYSPAR + &SysPar.ColorTemp - &SysPar, 1, &SysPar.ColorTemp);
ActiveSave_SYSPAR();
break;
case MCCS_HORIZONTAL_POSITION:
//TimingBuf.HStartOffset = (signed char)Value.word-50;
//Nvt_AdjustHPosition(TimingBuf.HStart-TimingBuf.HStartOffset);
// if(Value.word > 100)
// Value.word = 100;
ModePar.hoffset = (uint16)Value.word*0x140/100;
// SarHpos(ModePar.hstart);
AdjHpos(HIDE,0);
ActiveSave_SYSPAR();
// HPos(ADJ_PERCENTSET);
// Nvram_SaveUserAdjust();
break;
case MCCS_VERTICAL_POSITION:
//TimingBuf.VStartAdj = Value.word;
//Nvt_AdjustVPosition(TimingBuf.VStartAdj);
temp = ((uint16)(ModePar.vstart - 0) * 100)/(0x66 - 0);//VPos(ADJ_READ);
if(temp > (unsigned char)Value.word){
do{
AdjusterValue = Value.word;
//VPos(ADJ_PERCENTSET);
AdjVpos(HIDE,0);
Value.word --;
}while(temp == ((uint16)(ModePar.vstart - 0) * 100)/(0x66 - 0) && Value.word >= 0);
}
else if(temp < (unsigned char)Value.word){
do{
AdjusterValue = Value.word;
//VPos(ADJ_PERCENTSET);
AdjVpos(HIDE,0);
Value.word ++;
}while(temp == ((uint16)(ModePar.vstart - 0) * 100)/(0x66 - 0) && Value.word <= 100);
}
ModePar.voffset = (uint16)Value.word*0x140/100;
AdjVpos(HIDE,0);
ActiveSave_SYSPAR();
// Nvram_SaveUserAdjust();
break;
case USER_CLOCK:
ModePar.htotal= Value.word*130/100+ ModeAttr[ModePar.mode].Htotal-(uint8)(ModeAttr[ModePar.mode].Hdisp >> 4);
// if (ModePar.htotal < ModeAttr[ModePar.mode].Htotal-(uint8)(ModeAttr[ModePar.mode].Hdisp >> 4)) ModePar.htotal = ModeAttr[ModePar.mode].Htotal-(uint8)(ModeAttr[ModePar.mode].Hdisp >> 4);
// if (ModePar.htotal > ModeAttr[ModePar.mode].Htotal+(uint8)(ModeAttr[ModePar.mode].Hdisp >> 4)) ModePar.htotal = ModeAttr[ModePar.mode].Htotal+(uint8)(ModeAttr[ModePar.mode].Hdisp >> 4);
AdjClock(HIDE,0);
// AdcSetPll(ModePar.htotal);// 用此句也可
// ActiveSave_RelPar();
// EepSavePar(); //save the value
ActiveSave_SYSPAR();
break;
case USER_CLOCK_PHASE:
//TimingBuf.Phase = Value.word;
//Nvt_AdjustPhase(Value.word);
ModePar.phase = (uint16)Value.word*63/100;
AdcSetPhase(ModePar.phase);
// ActiveSave_RelPar();
// EepSavePar(); //save the value
ActiveSave_SYSPAR();
// SclkPhase(ADJ_PERCENTSET);
// Nvram_SaveUserAdjust();
break;
case MCCS_RED_VIDEO_GAIN:
Color.R_Gain= Value.word;
SysPar.ColorTemp = COLOR_USER;
// sRGB(SysPar.Contrast, SysPar.R_Gain, SysPar.G_Gain, SysPar.B_Gain);
AdjRgain(HIDE,0);
// Adj_Red_Gain(ADJ_PERCENTSET);
// Nvram_SaveDigitalColor();
// ucNewControl=CTRL_Changed;
// ucActiveControl=MCCS_BRIGHTNESS;
ActiveSave_COLOR();
SaveColorPar();
break;
case MCCS_GREEN_VIDEO_GAIN:
Color.G_Gain= Value.word;
SysPar.ColorTemp = COLOR_USER;
// sRGB(SysPar.Contrast, SysPar.R_Gain, SysPar.G_Gain, SysPar.B_Gain);
AdjGgain(HIDE,0);
// ucActiveControl=MCCS_BRIGHTNESS;
ActiveSave_COLOR();
SaveColorPar();
break;
case MCCS_BLUE_VIDEO_GAIN:
Color.B_Gain= Value.word;
SysPar.ColorTemp = COLOR_USER;
// sRGB(SysPar.Contrast, SysPar.R_Gain, SysPar.G_Gain, SysPar.B_Gain);
AdjBgain(HIDE,0);
// ucActiveControl=MCCS_BRIGHTNESS;
ActiveSave_COLOR();
SaveColorPar();
break;
case MCCS_AUTOSETUP:
if(SysPar.InputSource != SOURCE_DVI_D && Value.word == 1){
AutoImagerAdjust();
// Osd_Set(OSD_Mode_Auto);
// Nvt_AutoFunctionHandler();
// Osd_Set(OSD_MExit);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -