亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? detect.c

?? LCD OSD 程序用於8051 開發lcd
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <math.h>
#include "types.h"
#include "global.h"
#include "ms_reg.h"
#include "board.h"
#include "ms_rwreg.h"
#include "power.h"
#include "debug.h"
#include "misc.h"
#include "menu.h"
#include "UserPref.h"
#include "msOSD.h"
#include "mStar.h"
#include "Adjust.h"

#define DetectMsg	1

#if DetectMsg
 #define Out_i	printData
 #define Out_s	printMsg
#else
 #define Out_i
 #define Out_s
#endif

#define HPeriod_Torlance	10 // for mode change
#define VTotal_Torlance		10 // for mode change

// time of one loop is 34 when no input
#define ValidTimingStableCount		30//15
#define SyncLossStableCount		20//30
#define SwitchInputPortCount		10//15 // half or SyncLossStableCount to disable osd while switch input port
#define SwitchAnalogCount		10//15//7 // switch SOG/CSync-Separate by 4 times on switch input port

#define HFreq_Torlance		15 // 1.5 KHz
#define VFreq_Torlance		15 // 1.5 Hz
#define VTotal_Delta		50

#define MaxInputHFreq		855 // 80.0 KHz
#define MinInputHFreq		100//285 // 28.5 KHz
#define MaxInputVFreq		765//865 // 76.5 Hz
#define MinInputVFreq		400 // 50.0 Hz


extern InputModeType code StandardMode[];
extern BYTE InputTimingStableCounter;
extern BYTE TimingChangeDebunce;

BYTE code DVIPhaseTbl[];


BYTE mStar_FineTuneDVIPhase(BYTE channelReg,BYTE channel);
Bool mStar_FindMode(void);
BYTE mStar_GetInputStatus(void);
Bool IsCableNotConnected(void);
Bool mStar_SyncLossStateDetect(void);
Bool mStar_ValidTimingDetect(void);
void mStar_AutoDVI(void);

//*******************************************************************
// Function Name: mStar_MonitorInputTiming
//
// Decscription: Detect input timing
//
// callee: mStar_SyncLossStateDetect(), mStar_ValidTimingDetect(), mStar_AutoDVI() in detect.c
//         mStar_SetInputPort(), mStar_SetAnalogInputPort() in mstar.c
//
// caller: main() in main.c
//*******************************************************************
void mStar_MonitorInputTiming(void)
{ 
	if (!PowerOnFlag)
    		return;
  	// detect whether input signal is changing
  	if (!InputTimingChangeFlag)
    	{ 
    		if (SyncLossState())
        	{ 
        		if (!FreeRunModeFlag)
           			Set_InputTimingChangeFlag();
          		else if (mStar_SyncLossStateDetect()) // detect mode while no Sync/suspend/standby/disconnect
            		{ 
            			Set_InputTimingChangeFlag();
            		}
          		else if (InputTimingStableCounter)
            		{ 
            			// input timing is stable
              		if (InputTimingStableCounter%SwitchInputPortCount==0)
                		{ 
                			// switch input port while current port has no input.
                  			// detection time for each port is programmable according to requirement
                  			SrcInputType=(SrcInputType+1)%Input_Nums;
                  			mStar_SetupInputPort();
                 			if (SrcInputType==Input_Digital)
                   				mStar_AutoDVI(); //do auto tracking DVI
                		}
            		}
        	}
      		else // valid timing
        	{ 
        		// check if input timing is changing
          		if (mStar_ValidTimingDetect())
            		{ 
            			SrcFlags|=SyncLoss;
              		Set_InputTimingChangeFlag();
            		}
      		}
    	}
  //=============================================================================
  //=============================================================================
  	if (InputTimingChangeFlag) // input timing is unstable
    	{ 
    		Clr_InputTimingChangeFlag();
      		Clr_DoModeSettingFlag();

      		TimingChangeDebunce++;
      		if (!SyncLossState())// && !InputTimingStableFlag) // prevent from SOG
  		{ 
  			if (TimingChangeDebunce<=3)
  	    		{ 
  	    			SrcFlags|=SyncLoss;
  	      			return;
      	    		}
        	}
      		mStar_PrepareForTimingChange();
		//      Power_TurnOffGreenLed(); // turn off green led
		//      Power_TurnOnAmberLed(); // turn on amber led
    	}
  	else // input timing is stable
    	{ 
    		TimingChangeDebunce=0;
      		InputTimingStableCounter++; // counter timing stable times
      		if (InputTimingStableCounter==0)
      			InputTimingStableCounter=1;
      		if (!InputTimingStableFlag)
        	{ 
        		if ((!SyncLossState() && InputTimingStableCounter>=ValidTimingStableCount) || // set timing stable flag
               	(SyncLossState() && InputTimingStableCounter>=SyncLossStableCount))
            		{ 
            			Set_InputTimingStableFlag();// set flag to search for input mode
              		Set_DoModeSettingFlag();
              		//printData("input timing stable %d", SrcInputType);
            		}
        	}
    	}
}


//*******************************************************************
// Function Name: mStar_ModeHandler
//
// Decscription: Programming scaler while input timing is changing
//
// callee: mStar_SyncLossStateDetect(), mStar_ValidTimingDetect(), mStar_AutoDVI() in detect.c
//         mStar_SetInputPort(), mStar_SetAnalogInputPort() in mstar.c
//
// caller: main() in main.c
//*******************************************************************
void mStar_ModeHandler(void)
{ 
	if (!DoModeSettingFlag) // while timing change & stable
    		return;
	
  	Clr_DoModeSettingFlag();
  	if (!SyncLossState()) // no sync
    	{ 
    		if (!mStar_FindMode()) // search mode index
        	{ 
        		Set_InputTimingChangeFlag(); // search mode faile
          		return;
        	}
      		if (!UnsupportedModeFlag) //supported mode
        	{ 
        		Out_i("input timing index = %d", SrcModeIndex);
          		ReadModeSetting(); // restore user's settings from NVRAM for each mode
          		if (mStar_SetupMode()==FALSE) // setup scaler
            		{ 
            			Set_InputTimingChangeFlag(); // setup mode failed
              		mStar_SetupFreeRunMode(); // setup freerun mode
              		Out_s("Failed to setup mode");
              		return;
            		}
          		if (UnsupportedModeFlag)
            		{ 
            			Out_s("Failed: Out of panel spec");
            		}
                       
      		}
      		else
        	Out_s("unsupported mode");
    	}
  	if (SyncLossState() || UnsupportedModeFlag)
    	{ 
    		mStar_SetupFreeRunMode(); // setup freerun mode
      	//	Power_TurnOffGreenLed(); // turn off green led
      	//	Power_TurnOnAmberLed(); // turn on amber led
    	}
  	else
    	{ 
    		if(!FactoryModeFlag)
  		{
      			Power_TurnOnGreenLed(); // turn on green led
      			Power_TurnOffAmberLed(); // turn off amber led
  		}
      		else
      		{
      			Power_TurnOffGreenLed(); // turn off green led
      			Power_TurnOnAmberLed(); // turn on amber led
      		}
      	}

  	if (!CableNotConnectedFlag || !SyncLossState())
    	{ 
    		if (DoBurninModeFlag)
        	{ 
        		Clr_DoBurninModeFlag();
          		mStar_WriteByte(FWC, 0); // disable background color function.
  		}
    	}
  	Power_TurnOnPanel(); // turn on panel
  	Menu_InitAction(); // initial menu osd state
  	//jon add
  	if (FlgPowerOnOpenAudio && PowerOnFlag)	//for void bo-bo voice
	{
		FlgPowerOnOpenAudio=0;
		VolumeMuteOff();	//open volume
	}

}

void mStar_PrepareForTimingChange(void)
{ 
  	PowerDownCounter=0;
  	Clr_ForcePowerSavingFlag();
  	Clr_InputTimingStableFlag();	 // reset input timing stable and wait for timing stable


  	if (PowerSavingFlag)
    		Power_PowerOnSystem();
  	else
    		Power_TurnOffPanel();
 	mStar_SetupFreeRunMode();
 	Osd_Hide();

#if UseINT
  	mStar_WriteByte(INTENA, 0);
#endif

  	if (InputTimingStableFlag)
    	{ 
    		mStar_WriteByte(SWRST, GPR_B|ADCR_B);// Reset Graphic port to re-counter input hfreq & vtotal
      		Delay1ms(3);
      		mStar_WriteByte(SWRST, 0);
      		Delay1ms(20);
      		if (SrcInputType==Input_Digital)
        	{ 
        		mStar_WriteByte(MISCFC, 0x20);  
          		mStar_AutoDVI();
      		}
    	}

  
  	InputTimingStableCounter=0;
  
  	SrcFlags&=~(bUnsupportMode|bUserMode|bNativeMode);

  	mStar_WriteByte(DBFC, 0x00);			// enable double bufer.
  	mStar_WriteByte(REGBK, REGBANKADC);
  	mStar_WriteByte(DBFC, 0x00);			// enable ADC's double bufer.
  	mStar_WriteByte(REGBK, REGBANKSCALER);
}

//==========================================================
BYTE GetBestBandwidth(BYTE channel, BYTE *errA)
{ 
	BYTE errB;

  	mStar_WriteByte(TESTEN, channel|ERRD_B); // set test channed
  	mStar_WriteByte(TESTEN, channel|TSTEN_B); // set test channed
  	mStar_WriteByte(TESTA0, 0x20); // set high bandwidth
  	mStar_WriteByte(TESTEN, channel); // set test channed
  	Delay1ms(1);
  	mStar_WriteByte(TESTEN, channel|ERRD_B); // set test channed
  	*errA=mStar_ReadByte(DVI_ERST);

  	mStar_WriteByte(TESTEN, channel|TSTEN_B); // set test channed
#if ChipID>=ChipAD
  	mStar_WriteByte(TESTA0, 0x08); // set medium bandwidth
#else
  	mStar_WriteByte(TESTA0, 0x00); // set medium bandwidth
#endif
  	mStar_WriteByte(TESTEN, channel); // set test channed
  	Delay1ms(1);
  	mStar_WriteByte(TESTEN, channel|ERRD_B); // set test channed
  	errB=mStar_ReadByte(DVI_ERST);
  	mStar_WriteByte(TESTEN, channel); // set test channed

#if ChipID>=ChipAD
  	if (*errA>errB)
    	{ 
    		*errA=errB;
      		return 0x8;
    	}
#else
  	if (*errA>errB)
    	{ 
    		*errA=errB;
      		return 0x0;
    	}
#endif
  	return 0x20;
}

BYTE mStar_FineTuneBandwidth(void)
{ 
	BYTE errRed, bwRed;
  	BYTE errGreen, bwGreen;
  	BYTE errBlue, bwBlue;

  	bwRed=GetBestBandwidth(RED_CHANNEL, &errRed);
  	bwGreen=GetBestBandwidth(GREEN_CHANNEL, &errGreen);
  	bwBlue=GetBestBandwidth(BLUE_CHANNEL, &errBlue);
  	if (errRed>errGreen)
    	{ 
    		if (errGreen>errBlue)
        		return bwBlue;
      		else
      			return bwGreen;
    	}
  	else
    	{ 
    		if (errRed>errBlue)
        		return bwBlue;
      		else
      			return bwRed;
    	}
}

BYTE code DVIPhaseTbl[]=
{// 0     1     2     3     4     5     6     7     8     9
  0x40, 0x01, 0x03, 0x07, 0x0F, 0x17, 0x13, 0x11, 0x10, 0x31,
  0x33, 0x37, 0x3F, 0x27, 0x23, 0x21, 0x20, 0x61, 0x63, 0x67,
  0x6F, 0x77, 0x73, 0x71, 0x70, 0x51, 0x53, 0x57, 0x5F, 0x47,
  0x43, 0x41
};
BYTE code DVIPhaseTbl2[]=
{// 0     4     8     12    16    20    24    28
  0x00, 0x1F, 0x30, 0x2F, 0x60, 0x7F, 0x50, 0x4F
};
BYTE GetLinearPhaseValue(BYTE value)
{ 
	BYTE i;

  	for (i=0; i<0x20; i++)
    		if (DVIPhaseTbl[i]==value)
      			break;
			
  	if (i>=0x20)
    	{ 
    		for (i=0; i<8; i++)
        		if (DVIPhaseTbl2[i]==value)
          			break;
      		if (i>=8)
      			i=0;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本久久综合亚洲鲁鲁五月天| 亚洲精品你懂的| 蜜臀久久99精品久久久画质超高清| 95精品视频在线| 国产精品伦理一区二区| www.亚洲色图.com| 成人免费小视频| 欧美色综合影院| 日韩精品一卡二卡三卡四卡无卡| 日韩视频123| 国产+成+人+亚洲欧洲自线| 国产精品久线观看视频| 欧美亚洲图片小说| 蜜臀av一级做a爰片久久| 久久久久久久网| 99精品国产热久久91蜜凸| 亚洲与欧洲av电影| 日韩午夜av一区| 波多野结衣在线一区| 亚洲最大的成人av| 精品国产123| 91视频com| 美女一区二区视频| 欧美激情中文不卡| 色婷婷综合久色| 久久精品二区亚洲w码| 国产精品热久久久久夜色精品三区| 91福利国产成人精品照片| 免费在线一区观看| 国产精品久久久久婷婷| 3d成人动漫网站| 成人动漫一区二区| 日本不卡视频在线观看| 国产性天天综合网| 欧美日本一区二区在线观看| 国产黄人亚洲片| 丝袜国产日韩另类美女| 国产精品拍天天在线| 91.麻豆视频| 99久久精品国产麻豆演员表| 男女视频一区二区| 亚洲精品乱码久久久久久黑人| 欧美不卡视频一区| 在线看日本不卡| 国产成人精品免费| 蜜臀久久久久久久| 亚洲综合精品久久| 国产精品高潮久久久久无| 日韩欧美国产不卡| 在线影院国内精品| 成人动漫在线一区| 国产一区二区三区高清播放| 亚洲成av人片在线| 亚洲乱码国产乱码精品精98午夜 | 亚洲欧美日韩国产综合| 久久一区二区视频| 这里只有精品免费| 欧美影视一区在线| 91小视频在线观看| 成人一级黄色片| 国产麻豆91精品| 美女高潮久久久| 日韩精品一级二级| 亚洲v中文字幕| 亚洲一区二区三区四区五区黄| 国产精品久久久久久久久动漫| 久久欧美中文字幕| 欧美不卡激情三级在线观看| 欧美一区二区免费视频| 欧美日韩不卡一区二区| 欧美特级限制片免费在线观看| 99久久精品国产麻豆演员表| 成人av免费网站| 丁香网亚洲国际| 丁香天五香天堂综合| 国产精品一区二区三区99| 韩国精品免费视频| 国产综合久久久久久鬼色| 精品一区二区三区免费播放| 麻豆中文一区二区| 国内精品免费在线观看| 国产一区二区中文字幕| 国产自产v一区二区三区c| 国产一区福利在线| 国产一区二区免费视频| 国产成人aaa| 不卡电影一区二区三区| 91免费小视频| 欧美日韩一卡二卡三卡| 欧美二区三区的天堂| 日韩一区二区免费在线观看| 精品三级在线看| 久久久精品tv| 中文字幕一区二区三| 亚洲影院理伦片| 日本午夜精品视频在线观看 | 日产精品久久久久久久性色| 五月天欧美精品| 秋霞电影网一区二区| 激情六月婷婷综合| 国产麻豆精品在线| 99久精品国产| 欧美浪妇xxxx高跟鞋交| 久久天天做天天爱综合色| 国产精品色眯眯| 午夜电影一区二区| 国产自产视频一区二区三区| 99久久精品免费看| 在线播放欧美女士性生活| 精品国免费一区二区三区| 国产欧美精品一区二区色综合| 亚洲欧美日本韩国| 免费在线观看不卡| 国产乱一区二区| 在线看国产一区二区| 精品欧美一区二区三区精品久久| 国产精品美日韩| 视频在线观看一区| 国产91高潮流白浆在线麻豆 | 欧美日韩国产小视频在线观看| 日韩精品一区二区三区在线播放| 一区二区三区久久久| 欧美高清视频不卡网| 精品国产乱码久久久久久久久| 国产精品久久久久婷婷二区次| 亚洲第一主播视频| 国产+成+人+亚洲欧洲自线| 在线视频你懂得一区| 久久久不卡网国产精品二区| 亚洲福中文字幕伊人影院| 国产盗摄一区二区| 制服丝袜亚洲网站| 日韩美女久久久| 韩国成人在线视频| 欧美吻胸吃奶大尺度电影| 久久久精品影视| 亚洲va欧美va人人爽| 成人黄色电影在线| 91精品国产91热久久久做人人| 国产精品传媒入口麻豆| 久久精品国产精品亚洲精品 | 美女免费视频一区二区| av日韩在线网站| 久久久久久夜精品精品免费| 日韩avvvv在线播放| 日本韩国精品在线| 国产精品午夜在线| 美女久久久精品| 91精品国产乱码久久蜜臀| 亚洲自拍偷拍网站| 91网站最新网址| 中文字幕欧美三区| 国产一区亚洲一区| 日韩一区二区高清| 视频一区中文字幕| 91九色02白丝porn| 国产精品久久精品日日| 国产91高潮流白浆在线麻豆| 久久久久亚洲蜜桃| 国产资源精品在线观看| 精品免费一区二区三区| 欧美aⅴ一区二区三区视频| 欧美日韩激情一区| 亚洲国产cao| 欧美日韩一本到| 亚洲高清不卡在线| 欧美日韩国产一级片| 亚洲国产一区视频| 欧美日韩不卡在线| 日本亚洲天堂网| 欧美一级夜夜爽| 久久精品久久精品| 日韩视频免费观看高清完整版在线观看 | 成人18视频日本| 日韩一区日韩二区| 色综合 综合色| 亚洲高清久久久| 91精品在线麻豆| 老司机精品视频在线| 久久久久久久久久久久久女国产乱 | 日本黄色一区二区| 亚洲精品高清在线| 欧美少妇bbb| 青青草原综合久久大伊人精品优势| 欧美日本在线视频| 国产一区欧美一区| 欧美mv日韩mv国产网站| 国产乱人伦偷精品视频免下载| 欧美经典一区二区三区| 91色porny在线视频| 亚洲一区在线视频| 欧美一区二区三区小说| 国产精品456| 日韩美女视频19| 欧美一区二区三区公司| 国产在线精品国自产拍免费| 国产精品理论在线观看| 欧美在线|欧美| 麻豆国产欧美一区二区三区| 久久久久久久综合色一本|