⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ddcci.c

📁 NT68617源程序代码集合
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
********************************************************************************
*
*	文件名	: 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 + -