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

📄 userpref.c

📁 LCD OSD 程序用於8051 開發lcd
💻 C
字号:
#include <math.h>
#include "types.h"
#include "global.h"
#include "board.h"
#include "nvram.h"
#include "debug.h"
#include "menudef.h"
#include "menufunc.h"

void CheckBoard(void);
void ReadBlacklitTime(void);
void SaveBlacklitTime(void);
void Init_MonitorSetting(void)
{ UserPrefBrightness=DefBrightness;
  UserPrefContrast=DefContrast;

  UserPrefAdcRedGain=0x80;
  UserPrefAdcGreenGain=0x80;
  UserPrefAdcBlueGain=0x80;
  UserPrefAdcRedOffset=0x80;
  UserPrefAdcGreenOffset=0x80;
  UserPrefAdcBlueOffset=0x80;

  UserPrefRedColor=DefRedColor;
  UserPrefGreenColor=DefGreenColor;
  UserPrefBlueColor=DefBlueColor;
  UserPrefRedColor9300K=DefRedColor9300K;
  UserPrefGreenColor9300K=DefGreenColor9300K;
  UserPrefBlueColor9300K=DefBlueColor9300K;
  UserPrefRedColor6500K=DefRedColor6500K;
  UserPrefGreenColor6500K=DefGreenColor6500K;
  UserPrefBlueColor6500K=DefBlueColor6500K;
  UserPrefRedColorOffset=DefRedColorOffset;
  UserPrefGreenColorOffset=DefGreenColorOffset;
  UserPrefBlueColorOffset=DefBlueColorOffset;
  
  UserPrefColorTemp=DefColorTemp;
  UserPrefSharpness=2;

  UserPrefSpread=DefSpread;
  UserPrefLanguage=0;
  UserPrefOsdHStart=2;//=50;
  UserPrefOsdVStart=50;
  UserPrefOsdTime=10;
  UserPrefInputType=Input_Analog1;
  UserPrefVolume=(MaxVolumeValue-MinVolumeValue)/2 + MinVolumeValue;
  MonitorFlags=bPowerOnBit|bBurninModeBit;
  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 0
  if (UserPrefRedColor>MaxColorValue)
    UserPrefRedColor=DefRedColor;
  if (UserPrefGreenColor>MaxColorValue)
    UserPrefGreenColor=DefGreenColor;
  if (UserPrefBlueColor>MaxColorValue)
    UserPrefBlueColor=DefBlueColor;
#endif
}

void CheckMonitorSettingRange(void)
{ CheckColorValueRange();
  MSBankNo%=3;
  UserPrefBrightness%=101;
  UserPrefColorTemp%=CTEMP_Nums;
  UserPrefSharpness%=4;
  UserPrefLanguage%=LANG_Nums;
  UserPrefOsdHStart%=5;
  UserPrefInputType%=Input_Nums;
}
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;
  UserPrefAutoVStart=UserPrefVStart;// byerwin
}

void SaveMonitorSetting(void)
{ NVRam_WriteTbl(MonitorSettingAddr, (BYTE*)&MonitorSetting, MonitorSettingSize);
}
void SaveModeSetting(void)
{


 //NVRam_WriteTbl(nvrModeBaseAddr(SrcModeIndex), (BYTE*)&ModeSetting, ModeSettingSize);
 NVRam_WriteTbl(nvrModeBaseAddr(SaveIndex), (BYTE*)&ModeSetting, ModeSettingSize);
}

void ReadMonitorSetting(void)
{
	BYTE tempValue;

	//printMsg("Start : Read Monitor Stting");
	CheckBoard();
	NVRam_ReadByte(nvrMonitorAddr(checksum), &tempValue);
	//printData("monitor size %d", MonitorSettingSize);
	//printData("contrast %x", nvrMonitorAddr(Contrast));
	if (tempValue==ChecksumValue)
	{
		NVRam_ReadTbl(MonitorSettingAddr, (BYTE*)&MonitorSetting, MonitorSettingSize);


                          
		//printMsg("monitor setting found");
                
	}
	else
	{
		Init_MonitorSetting();
		SaveMonitorSetting();
	}
	//UserPrefRedColor=UserPrefRedColor9300K;//barry1111
	//UserPrefGreenColor=UserPrefGreenColor9300K;
	//UserPrefBlueColor=UserPrefBlueColor9300K;
	//UserPrefColorTemp=CTEMP_9300K;
	//Read9300KSetting();
	CheckMonitorSettingRange();
	SrcInputType=UserPrefInputType;

	//printMsg("End : Read Monitor Stting");
}

void GetModeSaveIndex(void)
{ ModeInfoType modeInfo;
  BYTE i;
  WORD hFreq, vFreq;

  if (!UserModeFlag)           //barry1111
    {
      SaveIndex=SrcModeIndex;
      printData("stand mode Index %d",SaveIndex);
      return;           
    }



  hFreq=HFreq(SrcHPeriod);
  vFreq=VFreq(hFreq, SrcVTotal);
  for (i=0; i<ModeNumber; 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>=ModeNumber)
    { MaxSavedModeIndex=(MaxSavedModeIndex+1)%ModeNumber;
      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;
}

void ReadModeSetting(void)
{ BYTE tempValue;

  GetModeSaveIndex();
  NVRam_ReadByte(nvrModeAddr(checksum), &tempValue);
  printData("checksum = %d", tempValue);
  if (tempValue==ChecksumValue)
    {

      //NVRam_ReadTbl(nvrModeBaseAddr(SrcModeIndex), (BYTE*)&ModeSetting, ModeSettingSize);
      NVRam_ReadTbl(nvrModeBaseAddr(SaveIndex), (BYTE*)&ModeSetting, ModeSettingSize);

      printMsg("mode setting found");
      UserPrefAutoTimes=1;  //Barry1111 mode auto just at first time
    }
  else
    { Init_ModeSetting();
      SaveModeSetting();
      printMsg("mode setting found fail");
    }
  CheckModeSettingRange();
}

void EraseEEPROM(void)
{
  NVRam_WriteByte(nvrMonitorAddr(checksum), 0);
  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;
  NVRam_WriteByte(Factory9300KBrightnessAddr, DefBrightness);
  NVRam_WriteByte(Factory6500KBrightnessAddr, DefBrightness);
  NVRam_WriteByte(Factory9300KContrastAddr, DefContrast);
  NVRam_WriteByte(Factory6500KContrastAddr, DefContrast);
  //printMsg("erase board");
}


void CheckBoard(void)
{ BYTE tempValue;

	//printMsg("Start : Check Board" );
  NVRam_ReadByte(CheckBoardAddr, &tempValue);
  if (tempValue!=BoardChecksum)
    { EraseEEPROM();
      BlacklitTime=0;
      SaveBlacklitTime();
      NVRam_WriteByte(CheckBoardAddr, BoardChecksum);
    }
  else
    ReadBlacklitTime();

  //printMsg("End : Check Board");
}

void ReadBlacklitTime(void)
{ NVRam_ReadTbl(BlacklitTimeAddr, (BYTE*)(&BlacklitTime), 4);
}
void SaveBlacklitTime(void)
{ NVRam_WriteTbl(BlacklitTimeAddr, (BYTE*)(&BlacklitTime), 4);
}
void Clear_NVRam_All_ModeSetting(void)  
{ 
        BYTE modeIndex;
        modeIndex=SaveIndex;
        for (SaveIndex=0; SaveIndex<NumberOfMode; SaveIndex++)
          { NVRam_WriteByte(nvrModeAddr(checksum), 0);
          }
       SaveIndex=modeIndex;
}      

⌨️ 快捷键说明

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