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

📄 userpref.c

📁 完整的软件学习--显示器驱动视频软件
💻 C
字号:
#include <math.h>
#include "types.h"
#include "board.h"
#include "global.h"
#include "nvram.h"
#include "debug.h"
#include "menudef.h"
#include "menufunc.h"
#include "Panel.h"
#include "misc.h"
#include "UserPrefDef.h"
#include "DDC.h"

#define HFreq_Tol	16 // 1.6 KHz
#define VFreq_Tol	8  // 0.8 Hz

Bool CheckBoard(void);
void ReadBlackLitTime(void);
void SaveBlackLitTime(void);
void SaveModeSetting(void);
void Init_ModeSetting(void);
extern void InitDDCEEP(void);


void ReadBlackLitTime(void)
{ NVRam_ReadTbl(BLackLitTimeAddr, (BYTE*)(&BLTime), 4);
}
void SaveBlackLitTime(void)
{ NVRam_WriteTbl(BLackLitTimeAddr, (BYTE*)(&BLTime), 4);
}


void Init_MonitorSetting(void)
{ UserPrefBrightness=65;
  UserPrefContrast=DefContrast;
  
  UserPrefAdcRedGain=0x80;
  UserPrefAdcGreenGain=0x80;
  UserPrefAdcBlueGain   =0x80;
  UserPrefAdcRedOffset=0x80;
  UserPrefAdcGreenOffset=0x80;
  UserPrefAdcBlueOffset=0x80;
  
  UserPrefRedColor=DefRedColor;
 UserPrefGreenColor=DefGreenColor;
 UserPrefBlueColor=DefBlueColor;
 
  UserPrefColorTemp=CTEMP_6500K;  
  
 UserPrefSharpness=DefSharpness; //FENDY 
 UserPrefTransultDef=No_Translucent; 


  UserPrefRedColor9300K=Def9300RedColor;
  UserPrefGreenColor9300K=Def9300GreenColor;
  UserPrefBlueColor9300K=Def9300BlueColor;
  
  UserPrefRedColor6500K=Def6500RedColor;
  UserPrefGreenColor6500K=Def6500GreenColor;
  UserPrefBlueColor6500K=Def6500BlueColor;  
  
  UserPrefRedColor5800K   =Def5800RedColor;//fendy add
  UserPrefGreenColor5800K=Def5800GreenColor;
  UserPrefBlueColor5800K   =Def5800BlueColor;

  
  UserPrefBrightness9300K=65;
  UserPrefContrast9300K   =DefContrast;
  UserPrefBrightness6500K=65;
  UserPrefContrast6500K   =DefContrast;  
  UserPrefBrightness5800K=65; //fendy add
  UserPrefContrast5800K   =DefContrast;
  


  Save9300KSetting();
  Save6500KSetting();
  Save5800KSetting();//fendy add
  SaveUserKSetting();
  
  
  UserPrefLanguage=DefLanguage;
  UserPrefOsdHStart=DefOsdHStart;
  UserPrefOsdVStart=DefOsdVStart;
  

  UserPrefOsdTime  =DefOsdTime;
  UserPrefOsdSize   =DefOsdSize; //tony 14/11/03
  UserPrefInputType=Input_656Video;
  UserPrefVolume    =MidVol; 
  UserPrefPictureMode=	Res_720x400;
//  UserPrefSavedModeIndex=UserModeNumber;

  UserPrefPWM0Cmin=0x00;
  UserPrefPWM0Cmax=0xB0;
  NVRam_WriteByte(nvrMonitorAddr(PWM0Cmin), UserPrefPWM0Cmin);
  NVRam_WriteByte(nvrMonitorAddr(PWM0Cmax), UserPrefPWM0Cmax);

//fendy  add
  UserPrefGammaDef=GammValue0;

  MonitorFlags=DefMonitorFlags;
  
  MonitorSetting.checksum=ChecksumValue;
}

void Init_ModeSetting(void)
{ UserPrefHTotal=StandardModeHTotal;
  UserPrefHStart=StandardModeHStart;
  UserPrefVStart=StandardModeVStart;
  UserPrefPhase=0x1F;
  UserPrefAutoTimes=0;
  ModeSetting.checksum=ChecksumValue;
}

void CheckColorValueRange(void)
{ if (UserPrefContrast>MaxContrastValue || UserPrefContrast<MinContrastValue)
    UserPrefContrast=DefContrast;
   if (UserPrefContrast9300K>MaxContrastValue || UserPrefContrast9300K<MinContrastValue)
    UserPrefContrast9300K=DefContrast;
   if (UserPrefContrast6500K>MaxContrastValue || UserPrefContrast6500K<MinContrastValue)
    UserPrefContrast6500K=DefContrast;
}

void CheckMonitorSettingRange(void)
{ CheckColorValueRange();
  MSBankNo%=3;
  UserPrefBrightness%=101;
  UserPrefBrightness9300K%=101;
  UserPrefBrightness6500K%=101;
#if EnablesRGB
  UserPrefBrightnesssRGB%=101;
#endif
  UserPrefColorTemp%=CTEMP_Nums;
  UserPrefLanguage%=LANG_Nums;
  if (UserPrefVolume<MinVol||UserPrefVolume>MaxVol)
  	UserPrefVolume=(MinVol+MaxVol)/2;
  UserPrefInputType%=Input_Nums;

#if DisplayModeSelect  // sail add 20040805
  UserPreDisplayMode%=5;
  UserPrefTextModeBrightness%=101;;
  UserPrefWebModeBrightness%=101;;
  UserPrefMovieModeBrightness%=101;;
#endif
}
void CheckModeSettingRange(void)
{ if (abs(UserPrefHTotal-StandardModeHTotal)>60)
    UserPrefHTotal=StandardModeHTotal;
  if (UserPrefHStart>2*StandardModeHStart)
    UserPrefHStart=StandardModeHStart;
  if (UserPrefVStart>2*StandardModeVStart)
    UserPrefVStart=StandardModeVStart;
  UserPrefPhase&=0x3F;
  if (UserPrefAutoTimes==0 || abs(UserPrefHStart-UserPrefAutoHStart)>50)
    UserPrefAutoHStart=UserPrefHStart;
}

void SaveMonitorSetting(void)
{ NVRam_WriteTbl(MonitorSettingAddr, (BYTE*)&MonitorSetting, MonitorSettingSize);
}
void SaveModeSetting(void)
{ NVRam_WriteTbl(nvrModeBaseAddr(SrcModeIndex), (BYTE*)&ModeSetting, ModeSettingSize);
}
  //printData("Save Index %d", SaveIndex);



void ReadMonitorSetting(void)
{ BYTE tempValue;
  BYTE MonitorRetryTimes=10;

  CheckBoard();

  do{
  	NVRam_ReadByte(nvrMonitorAddr(checksum), &tempValue);
	//printData("MT %d",MonitorRetryTimes);
  	}
  while((tempValue!=ChecksumValue)&&MonitorRetryTimes--);
  
  if (tempValue==ChecksumValue)
    { NVRam_ReadTbl(MonitorSettingAddr, (BYTE*)&MonitorSetting, MonitorSettingSize);
  	#if DEBUG_ENABLE
      printMsg("monitor setting found");
  	#endif
    }
  else
    { Init_MonitorSetting();
      UserPrefColorTemp=CTEMP_6500K;
      Read6500KSetting();
      SaveMonitorSetting();
    }

  CheckMonitorSettingRange();
  SrcInputType=UserPrefInputType;

#if MTV512
  mStar_WriteDDC1();
  mStar_WriteDDC2();
#endif
  
}

void GetModeSaveIndex(void)
{ ModeInfoType modeInfo;
  BYTE i;
  WORD hFreq, vFreq;
  
  if (!UserModeFlag) //for preset mode, save all preset modes
  	{
	  	SaveIndex=SrcModeIndex;
	  	#if DEBUG_ENABLE
			printData("Preset=%d", SaveIndex);
	  	#endif
			return;
  	}
  hFreq=HFreq(SrcHPeriod);
  vFreq=VFreq(hFreq, SrcVTotal);
  for (i=0; i<UserModeNumber; i++)
    { NVRam_ReadTbl(nvrModeInfoAddr(i) , (BYTE*)&modeInfo, ModeInfoSize);
      if (abs(hFreq-modeInfo.HorFreq)<16 &&    abs(vFreq-modeInfo.VerFreq)<8 && (SrcFlags&0x13)==modeInfo.Flags)
      	break;
    }
  if (i>=UserModeNumber)
    { MaxSavedModeIndex=(MaxSavedModeIndex+1)%UserModeNumber;
      SaveIndex=MaxSavedModeIndex;
      modeInfo.HorFreq=hFreq;
      modeInfo.VerFreq=vFreq;
      modeInfo.Flags=SrcFlags&0x13;
      NVRam_WriteTbl(nvrModeInfoAddr(SaveIndex), (BYTE*)&modeInfo, ModeInfoSize);
      NVRam_WriteByte(nvrModeAddr(checksum), 0);
    }
  else
    SaveIndex=i;
  #if DEBUG_ENABLE
  printData("User=%d", SaveIndex);
  #endif
}

void ReadModeSetting(void)
{ BYTE tempValue;

  if (UserModeFlag)
    GetModeSaveIndex();
  else
    SaveIndex=SrcModeIndex;
  NVRam_ReadByte(nvrModeAddr(checksum), &tempValue);
  if (tempValue==ChecksumValue)
    {
   	NVRam_ReadTbl(nvrModeBaseAddr(SaveIndex), (BYTE*)&ModeSetting, ModeSettingSize);
	#if DEBUG_ENABLE
       printMsg("mode setting found");
	#endif
    }
  else
    { Init_ModeSetting();
      SaveModeSetting();
      #if DEBUG_ENABLE
      printMsg("mode setting found fail");
      #endif
    }
  CheckModeSettingRange();
}


code ColorTempSaveType InitEEPC9300K = {65,DefContrast,Def9300RedColor,Def9300GreenColor,Def9300BlueColor,};
code ColorTempSaveType InitEEPC6500K = {65,DefContrast,Def6500RedColor,Def6500GreenColor,Def6500BlueColor,};
code ColorTempSaveType InitEEPC5800K = {65,DefContrast,Def5800RedColor,Def5800GreenColor,Def5800BlueColor,};

code ColorTempSaveType InitEEPCUserK = {65,DefContrast,DefRedColor,DefGreenColor,DefBlueColor,};


BYTE code InitEEPADCBack[] = {0x70,0x70,0x70,0x80,0x80,0x80,};


void InitialEEPADCBack(void)
{
  BYTE i;
  for (i = 0; i < sizeof(InitEEPADCBack);i++)
    NVRam_WriteByte(AdcRedGainSaveAddr+i,InitEEPADCBack[i]);
}


void InitialCUserKEEP(void)
{
  BYTE i,tmp;
  for (i = 0; i < ColorTempSaveSize ;i++)
    {
    tmp = ((BYTE *)&InitEEPCUserK)[i];
    NVRam_WriteByte(FactoryCUserKColorTempSaveAddr+i,tmp);
    }
}
void InitialC6500KEEP(void)
{
  BYTE i,tmp;
  for (i = 0; i < ColorTempSaveSize ;i++)
    {
    tmp = ((BYTE *)&InitEEPC6500K)[i];
    NVRam_WriteByte(FactoryC6500KColorTempSaveAddr+i,tmp);
    }
}

void InitialC5800KEEP(void)
{
  BYTE i,tmp;
  for (i = 0; i < ColorTempSaveSize ;i++)
    {
    tmp = ((BYTE *)&InitEEPC5800K)[i];
    NVRam_WriteByte(FactoryC5800KColorTempSaveAddr+i,tmp);
    }
}
void InitialC9300KEEP(void)
{
  BYTE i,tmp;
  for (i = 0; i < ColorTempSaveSize ;i++)
    {
    tmp = ((BYTE *)&InitEEPC9300K)[i];
    NVRam_WriteByte(FactoryC9300KColorTempSaveAddr+i,tmp);
    }
}

void EraseEEPROM(void)
{ 
  NVRam_WriteByte(nvrMonitorAddr(checksum), 0);
  SrcFlags&=~bUserMode;  //vick add
  for (SrcModeIndex=0; SrcModeIndex<NumberOfMode; SrcModeIndex++)
    { NVRam_WriteByte(nvrModeAddr(checksum), 0);
    }
  SrcFlags|=bUserMode;
  for (SrcModeIndex=0; SrcModeIndex<NumberOfMode; SrcModeIndex++)
    { NVRam_WriteByte(nvrModeAddr(checksum), 0);
    }
  SrcFlags&=~bUserMode; 
  InitialCUserKEEP();
  InitialC6500KEEP();
  InitialC9300KEEP();
   InitialC5800KEEP();
  InitialEEPADCBack();
  Delay1ms(100);
  printMsg("erase board");
  
  #if MTV512
  InitDDCEEP();
#endif

}

Bool CheckBoard(void)
{ BYTE tempValue;
  BYTE BoradRetryTimes=10;
  Bool NewBoard=FALSE;

  do{
  	NVRam_ReadByte(CheckBoardAddr, &tempValue);
	//printData("BT %d",BoradRetryTimes);
  	}
  while((tempValue!=BoardChecksum)&&BoradRetryTimes--);
  
  if (tempValue!=BoardChecksum)
    { EraseEEPROM();
      BLTime=0;
      SaveBlackLitTime();
      NVRam_WriteByte(CheckBoardAddr, BoardChecksum);
	  NewBoard=TRUE;
    }
  else
    ReadBlackLitTime();

  return NewBoard;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -