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

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

?? driv0299.c

?? ZORAN 962/966 SOURCE CODE,DVD chip
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* **************************************************************************************
 *  Copyright (c) 2004 ZORAN Corporation, All Rights Reserved
 *  THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF ZORAN CORPORATION
 *
 *  File: $Workfile: .c $             
 *
 * Description:
 * ============
 * DECLARATIONS FOR THE STV0299 DRIVER
 * 
 * Log:
 * ====
 * $Revision: $
 * Last Modified by $Author:  $ at $Modtime: $ 
 **************************************************************************************** */
#include "Config.h"		// Global Configuration - do not remove!

#ifdef FTA_SUPPORT

#ifdef SATELLITE_299

#include "Include\SysDefs.h"
#include "devices\demodulator\0299\def.h"
#include "Kernel\Ker_API.h"
#include "Playcore\Exception\Exception.h"
#include "devices\demodulator\0299\reg0299.h"
#include "devices\demodulator\0299\tun0299.h"
#include "devices\demodulator\0299\driv0299.h"
#include "devices\demodulator\0299\0229.h"
#include "Services\Include\_heap.h"
#include "Kernel\EventDef.h"

static int lnbGTfreq;
extern BOOL bAutoScanStarted;

static UINT32 LO_FILTER(UINT32 freq, UINT32 lnb)
{
	if (lnb > freq)
	{
		lnbGTfreq = 1;
		freq = lnb-freq;
	}
	else
	{
		lnbGTfreq = 0;
		freq = freq-lnb;
	}
	return freq;
}

/*****************************************************
--FUNCTION	::	WaitTuner
--ACTION	::	Wait for tuner locked
--PARAMS IN	::	TimeOut	->	Maximum waiting time (in ms) 
--PARAMS OUT::	NONE
--RETURN	::	NONE
--***************************************************/
void WaitTuner(DEMOD_HANDLE handle, INT32 TimeOut)
{
	INT32 Time=0;
	INT32 TunerLocked = FALSE;
	
	while(!TunerLocked && (Time<TimeOut))
	{
		Ker_SleepUs(1000UL);
		TunerLocked = TunerGetTunerLock(handle);
		Time++;
	}
	Time--;
}

/****************************************************
--FUNCTION	::	CheckAgc1
--ACTION	::	Check agc1 value
--PARAMS IN	::	pParams	->	Pointer to SEARCHPARAMS structure
--PARAMS OUT::	pParams->State is modified 
--RETURN	::	NOAGC1 if AGC1=-128, AGC1SATURATION
--				if AGC1=127, AGC1OK otherwise
--**************************************************/
SIGNALTYPE CheckAgc1(DEMOD_HANDLE handle, SEARCHPARAMS *pParams)
{
	INT32 AGC1Value;
	INT32 Agc1Threshold = -128; 
	
	AGC1Value = RegGetField(handle,AGCINTEGRATORVALUE);
	
	if (AGC1Value == Agc1Threshold)
	{
		pParams->State = NOAGC1;
	}
	else if (AGC1Value == 127)
	{
		pParams->State = AGC1SATURATION;
	}
	else
	{
		pParams->State = AGC1OK;  
	}
	  
	return pParams->State;
}

/*****************************************************
--FUNCTION	::	CheckTiming
--ACTION	::	Check for timing locked
--PARAMS IN	::	pParams->Ttiming	=>	Time to wait for timing loop locked
--PARAMS OUT::	pParams->State		=>	result of the check
--RETURN	::	NOTIMING if timing not locked, TIMINGOK otherwise
--***************************************************/
SIGNALTYPE CheckTiming(DEMOD_HANDLE handle, SEARCHPARAMS *pParams)
{
	INT32 locked, timing;
		
	Ker_SleepUs(pParams->Ttiming * 1000UL);

	locked=RegGetField(handle,TLIR);
	timing=abs(RegGetField(handle,RTF));
	
	if (locked >= 43)
	{
		if ((locked > 48) && (timing >= 110))
		{
			pParams->State = ANALOGCARRIER; 
		}
		else
		{
			pParams->State = TIMINGOK;
		}
	}
	else
	{
		pParams->State = NOTIMING;
	}
	
	return pParams->State;
}


/*****************************************************
--FUNCTION	::	CheckCarrier
--ACTION	::	Check for carrier founded
--PARAMS IN	::	pParams		=>	Pointer to SEARCHPARAMS structure
--PARAMS OUT::	pParams->State	=> Result of the check
--RETURN	::	NOCARRIER carrier not founded, CARRIEROK otherwise
--***************************************************/
SIGNALTYPE CheckCarrier(DEMOD_HANDLE handle, SEARCHPARAMS *pParams)
{
	Ker_SleepUs(pParams->Tderot * 1000UL);

	RegSetField(handle, CFD_ALGO, 0);
	
	if (RegGetField(handle, CF))
	{
		pParams->State = CARRIEROK;
	}
	else
	{
		pParams->State = NOCARRIER;
	}
		
	return pParams->State;
}

/****************************************************
--FUNCTION	::	GetPacketErrors
--ACTION	::	Set error counter in packet error mode and check for packet errors 
--PARAMS IN	::	NONE
--PARAMS OUT::	NONE
--RETURN	::	Content of error count 
--**************************************************/
INT32 GetPacketErrors(DEMOD_HANDLE handle)
{
	INT32 PacketErrors, i;
	unsigned char CounterMode;
	
	CounterMode = RegGetOneRegister(handle, R_ERRCNT);	/* Save error counter mode */
	RegSetOneRegister(handle,R_ERRCNT, 0x30);  			/* Error counter in Rate mode, packet error, count period 2^12	*/
	
	Ker_SleepUs(1000UL * 4UL);
	
	for (i=0; i<2; i++)								/* Do not remove the for loop : bug work around */
		PacketErrors = RegGetErrorCount(handle);  	/* Error counter must be read twice before returning valid value */ 
		
	RegSetOneRegister(handle,R_ERRCNT,CounterMode);	/* restore error counter mode	*/

	tr_printf(("Errors - %d\n", PacketErrors));

	return PacketErrors;
}

/*****************************************************
--FUNCTION	::	CheckData
--ACTION	::	Check for data founded
--PARAMS IN	::	pParams		=>	Pointer to SEARCHPARAMS structure    
--PARAMS OUT::	pParams->State	=> Result of the check
--RETURN	::	NODATA data not founded, DATAOK otherwise
--***************************************************/
SIGNALTYPE CheckData(DEMOD_HANDLE handle, SEARCHPARAMS *pParams)
{
	INT32 lock;
	pParams->State = NODATA;   
	
	Ker_SleepUs(1000UL * pParams->Tdata);				/*	Wait for data			 */    

	lock = RegGetField(handle, LK);						/*	Read DATA LOCK indicator */

	//tr_printf(("DEMOD is %sLocked\n", (lock) ? "" : "NOT "));	

	if (RegGetField(handle, FECMODE) != 0x04)			/*	Read FEC mode			 */
	{
		/* DVB Mode, Test DATA LOCK indicator */
		if (lock)
		{
			pParams->State = DATAOK;
		}
	}
	else
	{
		/* DSS Mode	*/
		if (lock && GetPacketErrors(handle) <= 10)
		{
			/*  Test DATA LOCK and Packet errors */
			pParams->State = DATAOK;
		}
	}
	
	return pParams->State;
}

/*****************************************************
--FUNCTION	::	IQInvertion
--ACTION	::	Invert I and Q
--PARAMS IN	::	NONE
--PARAMS OUT::	NONE
--RETURN	::	NONE
--***************************************************/
void IQInvertion(DEMOD_HANDLE handle)
{	
	if (RegGetField(handle,IQ) == 0)
	{
		RegSetField(handle, IQ, 1);
	}
	else
	{
		RegSetField(handle, IQ, 0);
	}
}

/*****************************************************
--FUNCTION	::	CalcTimingTimeConstant
--ACTION	::	Compute the amount of time needed by the timing loop to lock
--PARAMS IN	::	SymbolRate	->	symbol rate value
--PARAMS OUT::	NONE
--RETURN	::	Timing loop time constant (ms)
--***************************************************/
long CalcTimingTimeConstant(long SymbolRate)
{
	return (200000L/(SymbolRate/1000L));
}

/*****************************************************
--FUNCTION	::	CalcDerotTimeConstant
--ACTION	::	Compute the amount of time needed by the Derotator to lock
--PARAMS IN	::	SymbolRate	->	symbol rate value
--PARAMS OUT::	NONE
--RETURN	::	Derotator time constant (ms)
--***************************************************/
long CalcDerotTimeConstant(long SymbolRate)
{
	return (10000L/(SymbolRate/1000L)); 
}

/*****************************************************
--FUNCTION	::	CalcDataTimeConstant
--ACTION	::	Compute the amount of time needed to capture data 
--PARAMS IN	::	Er		->	Viterbi rror rate	
--				Sn		->  viterbi averaging period
--				To		->  viterbi time out
--				Hy		->	viterbi hysteresis
--				SymbolRate	->	symbol rate value
--PARAMS OUT::	NONE
--RETURN	::	Data time constant
--***************************************************/
UINT32 CalcDataTimeConstant(DEMOD_HANDLE handle, UINT8 Er, UINT8 Sn,UINT8 To,UINT8 Hy,UINT32 SymbolRate)
{
	UINT8 	PhaseNumberDVB[5] = {2,6,4,6,8};
	UINT8	PhaseNumberDSS[5] = {2,6,4,6,14};
	UINT32	averaging[4] = {1024L,4096L,16384L,65536L};
	UINT16	InnerCode = 1000;
	UINT16	HigherRate = 1000;
	UINT32	Tviterbi = 0; 
		 
	UINT32	TimeOut	=0;
	UINT32	THysteresis	= 0;
		 	
	int  i,DSS_Mode;
		 	
	/*	=======================================================================
	-- Data capture time (in ms)
    -- -------------------------
	-- This time is due to the Viterbi synchronisation.
	--
	--	For each authorized inner code, the Viterbi search time is calculated,
	--	and the results are cumulated in ViterbiSearch.	*/
	DSS_Mode = (RegGetField(handle,FECMODE) == 0x04);
	
	for (i=0; i<5; i++)
	{
		if (((Er >> i)& 0x01) == 0x01)
		{
			switch(i)
			{
				case 0:					/*	inner code 1/2	*/	
					InnerCode = 2000;	/* 2.0	*/
					break;
				
				case 1:					/*	inner code 2/3	*/ 
					InnerCode = 1500; 	/* 1.5 */
					break;
				
				case 2:					/*	inner code 3/4  */ 
					InnerCode = 1333;	/* 1.333 */
					break;
				
				case 3:					/*	inner code 5/6	*/  
					InnerCode = 1200;	/* 1.2 */
					break;
				
				case 4:					/*	inner code 7/8(DVB) 6/7(DSS) */
					if (!DSS_Mode)
					{
						InnerCode = 1143;	/* 1.143 */
					}
					else
					{
						InnerCode = 1167;	/* 1.167 */
					}
					break;
			}
			
			if (!DSS_Mode)
			{
				Tviterbi +=(UINT32)((PhaseNumberDVB[i]*averaging[Sn]*InnerCode)/SymbolRate);
			}
			else
			{
				Tviterbi +=(UINT32)((PhaseNumberDSS[i]*averaging[Sn]*InnerCode)/SymbolRate);   
			}
				
			if (HigherRate < InnerCode)
			{
				HigherRate = InnerCode;
			}
		}
	}
	
	/* Time out calculation (TimeOut)
	 * This value indicates the maximum duration of the synchro word research.
	 */
	TimeOut = (UINT32)((HigherRate * 16384L * (To + 1))/(2*SymbolRate));
	
	/* Hysteresis duration */
	THysteresis = (UINT32)((HigherRate * 26112L * (Hy +1))/(2*SymbolRate));	/* 26112 = 16*204*8 bits */
	
	/* a guard time of 1 mS is added */
	return (1 + Tviterbi + TimeOut + THysteresis);
}

/*****************************************************
--FUNCTION	::	CarrierWidth
--ACTION	::	Compute the width of the carrier
--PARAMS IN	::	SymbolRate	->	Symbol rate of the carrier (Kbauds or Mbauds)
--				RollOff		->	Rolloff * 100
--PARAMS OUT::	NONE
--RETURN	::	Width of the carrier (KHz or MHz) 
--***************************************************/
long CarrierWidth(long SymbolRate, long RollOff)
{
	return (SymbolRate  + (SymbolRate*RollOff)/100);
}

/*****************************************************
--FUNCTION	::	InitParams
--ACTION	::	Set Params fields that are never changed during search algorithm   
--PARAMS IN	::	NONE
--PARAMS OUT::	NONE
--RETURN	::	NONE
--***************************************************/
void InitParams(DEMOD_HANDLE handle)
{
	DEMOD_SAT_DATA *sDemodData = (DEMOD_SAT_DATA*)handle;
	INT32 stdby, dirclk, k, m, p, m1, betaagc1, agc2coef;
	long MasterClock;

	/* Read registers (in burst mode) */
	RegGetRegisters(handle, R_RCR, 2);		/*	Read RCR and MCR registers	*/
	RegGetOneRegister(handle, R_AGC1C);
	RegGetRegisters(handle, R_AGC1R, 2);	/*	Read AGC1R and AGC2O registers */
	
	/* Get fields values */
	stdby = FieldGetVal(handle, STDBY);
	dirclk = FieldGetVal(handle, DIRCLK); 
	k = FieldGetVal(handle, K);
	m = FieldGetVal(handle, M);
	p = FieldGetVal(handle, P);
	m1 = FieldGetVal(handle, AGC1_REF);
	betaagc1 = FieldGetVal(handle, BETA_AGC1);   
	agc2coef = FieldGetVal(handle, AGC2COEF);
	
	/* Initial calculations	*/
	MasterClock = CalcMasterClkFrequency(handle,stdby,dirclk,k,m,p);
	sDemodData->Params.Tagc1 = CalcAGC1TimeConstant(m1,MasterClock,betaagc1)/20L;
	sDemodData->Params.Tagc2 = CalcAGC2TimeConstant(agc2coef,m1,MasterClock)/1000000L;
	sDemodData->Params.MasterClock = MasterClock;
	sDemodData->Params.Mclk = MasterClock/65536L;
	sDemodData->Params.RollOff = RegGetRollOff(handle);
}

/*****************************************************
--FUNCTION	::	InitSearch
--ACTION	::	Set Params fields that are used by the search algorithm   
--PARAMS IN	::	Frequency	=>	Frequency used to start zig zag 
--				SymbolRate	=>	searched symbol rate
--				SearchRange =>	Range of the search
--				DerotStep	=>	Size of derotator's steps used in the carrier search (in per thousand of symbol frequency)
--				Mode		=>	Search context (SCAN or SEARCH)
--PARAMS OUT::	NONE
--RETURN	::	NONE
--***************************************************/
void InitSearch(DEMOD_HANDLE handle, INT32 Frequency, long SymbolRate, long SearchRange, INT32 DerotStep,SCANMODE Mode)
{
	DEMOD_SAT_DATA *sDemodData = (DEMOD_SAT_DATA*)handle;
	TUNER_PROP Tnr;
	
	sDemodData->Params.BaseFreq = Frequency;	
	sDemodData->Params.SymbolRate = SymbolRate;
	sDemodData->Params.SearchRange = SearchRange;
	sDemodData->Params.DerotPercent = DerotStep;
	TunerGetProperties(&Tnr);
	sDemodData->Params.TunerStep = Tnr.StepSize;
	sDemodData->Params.TunerBW = TunerSelectBandwidth(CarrierWidth(SymbolRate,sDemodData->Params.RollOff)/1000 + 3000)*1000;
	sDemodData->Params.TunerIF = Tnr.IF;
	sDemodData->Params.TunerIQ = Tnr.I_Q;
	sDemodData->Params.ScanMode = Mode;
	
	sDemodData->Result.SignalType = NOAGC1;
	sDemodData->Result.Frequency = 0;
	sDemodData->Result.SymbolRate = 0;
}

/*****************************************************
--FUNCTION	::	SearchTiming
--ACTION	::	Perform an Fs/2 zig zag to found timing
--PARAMS IN	::	NONE
--PARAMS OUT::	NONE
--RETURN	::	NOTIMING if no valid timing had been found, TIMINGOK otherwise
--***************************************************/
SIGNALTYPE SearchTiming(DEMOD_HANDLE handle, SEARCHPARAMS *pParams, SEARCHRESULT *pResult)
{
	long DerotFreq = 0L;
	long DerotLimit;
	long NextDerotStep = 3L;
	long DerotStep;
	long index = 0;
	
	/* timing loop computation & symbol rate optimisation	*/
	DerotLimit = (pParams->SubRange/2L)/pParams->Mclk;
	DerotStep = (pParams->SymbolRate/2L)/pParams->Mclk;
	
	pParams->State = NOTIMING; 
	
	do
	{
		if (CheckTiming(handle, pParams) == NOTIMING)
		{
			index++;
			DerotFreq += index*pParams->Direction*pParams->TunerIQ*DerotStep;	/*	Compute the next derotator position for the zig zag	*/    
		
			if (ABS(DerotFreq) > DerotLimit)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜桃av噜噜一区二区三区小说| 亚洲色欲色欲www| 欧美老肥妇做.爰bbww| 日本久久电影网| 91久久奴性调教| 色av一区二区| 91精品一区二区三区久久久久久 | 91精品国产色综合久久久蜜香臀| 欧美在线|欧美| 欧美专区在线观看一区| 欧美三级日韩在线| 日韩欧美一级特黄在线播放| 精品免费一区二区三区| 亚洲国产精品高清| 亚洲最大的成人av| 日日嗨av一区二区三区四区| 免费人成在线不卡| 成人午夜在线免费| 欧美性受xxxx| 欧美精品一区二区不卡| 国产精品视频观看| 亚洲bdsm女犯bdsm网站| 国产精品2024| 在线观看免费一区| 精品免费国产一区二区三区四区| 欧美激情一区在线观看| 亚洲午夜一二三区视频| 狠狠久久亚洲欧美| 日本韩国精品一区二区在线观看| 欧美高清视频www夜色资源网| 欧美xingq一区二区| 亚洲精品菠萝久久久久久久| 一区二区三区日韩| 国产一区二区导航在线播放| 91麻豆精品在线观看| 日韩欧美国产麻豆| 亚洲免费观看高清完整版在线观看| 亚洲国产成人av网| 成人一区在线看| 欧美福利电影网| 亚洲欧美一区二区三区国产精品| 久久99精品一区二区三区三区| 9i看片成人免费高清| 日韩精品一区二区三区视频| 亚洲精品国久久99热| 国产一本一道久久香蕉| 欧美日韩成人在线| 亚洲精品乱码久久久久久久久 | 亚洲欧洲韩国日本视频 | 久久精子c满五个校花| 亚洲国产精品久久人人爱蜜臀| 极品少妇xxxx精品少妇偷拍| 欧美视频第二页| 18成人在线视频| 国产精品88av| 欧美精品一区二区三区在线播放| 一二三区精品视频| 97精品久久久久中文字幕| 久久久精品一品道一区| 蜜桃视频一区二区三区在线观看 | 久久av老司机精品网站导航| 欧美无砖专区一中文字| 综合在线观看色| 99久久久久久99| 国产视频一区二区三区在线观看 | 久久美女艺术照精彩视频福利播放| 亚洲国产中文字幕在线视频综合| 99精品偷自拍| 自拍av一区二区三区| www.亚洲色图| 亚洲人亚洲人成电影网站色| 国产a久久麻豆| 国产精品色一区二区三区| 国产精品中文欧美| 久久久久97国产精华液好用吗| 精品一区精品二区高清| 精品va天堂亚洲国产| 国产乱淫av一区二区三区| 精品国产电影一区二区| 国产乱码字幕精品高清av| 精品1区2区在线观看| 国产激情视频一区二区在线观看| 精品国精品国产| 国产传媒久久文化传媒| 亚洲国产精品高清| 色综合视频在线观看| 亚洲国产cao| 日韩一区二区在线观看视频播放| 美女脱光内衣内裤视频久久影院| 欧美videofree性高清杂交| 国产高清精品在线| 夜夜嗨av一区二区三区四季av| 欧美亚洲动漫制服丝袜| 日韩av一区二| 国产视频一区在线播放| 在线观看一区不卡| 麻豆91精品视频| 国产精品乱码一区二区三区软件| 91免费国产在线观看| 亚洲图片自拍偷拍| 精品少妇一区二区三区在线播放 | 日韩视频免费直播| 丁香婷婷综合色啪| 中文字幕一区日韩精品欧美| 91精品国产91综合久久蜜臀| 丁香婷婷综合激情五月色| 亚洲国产一区二区三区| 久久久九九九九| 91麻豆精品久久久久蜜臀| 国产成人精品1024| 三级亚洲高清视频| 国产精品久久久久四虎| 欧美一区二区不卡视频| 波多野结衣一区二区三区| 免费在线观看视频一区| 成人免费小视频| 国产亚洲欧美激情| 欧美一级在线观看| 色域天天综合网| 国产成人免费视频网站| 七七婷婷婷婷精品国产| 一区二区三区在线免费视频| 久久久久久久久99精品| 91精品在线观看入口| 色天使色偷偷av一区二区| 国产福利91精品| 老司机免费视频一区二区三区| 椎名由奈av一区二区三区| 日本一区二区三区高清不卡| 3751色影院一区二区三区| 精品一区二区在线播放| 大陆成人av片| 久久综合九色综合欧美亚洲| 在线精品亚洲一区二区不卡| 国产精品一区在线| 中文字幕一区二区三区在线不卡| 欧美精品一区二区三区蜜臀| 欧美国产精品中文字幕| 亚洲一区二区三区四区在线 | 精品久久免费看| 欧美激情一区二区三区四区| 亚洲另类在线视频| 蓝色福利精品导航| www.色综合.com| 欧美精品久久久久久久多人混战 | 亚洲欧美aⅴ...| 天天综合色天天| 成人免费看黄yyy456| 欧美日韩午夜精品| 久久久亚洲精品石原莉奈 | 亚洲天堂网中文字| 奇米色777欧美一区二区| 成人午夜激情在线| 91精品国产免费| 亚洲精品日韩一| 久国产精品韩国三级视频| 一本久道中文字幕精品亚洲嫩 | 欧美一区二区三区在线观看视频| 欧美经典一区二区| 亚洲亚洲精品在线观看| 国产精品亚洲成人| 欧美一区二区三区电影| 亚洲免费观看高清完整| 国产福利一区在线观看| 欧美喷潮久久久xxxxx| 自拍偷拍国产精品| 国产精品66部| 精品捆绑美女sm三区| 午夜精品一区二区三区免费视频 | 亚洲成人综合网站| 成人app软件下载大全免费| 欧美一级片在线| 亚洲国产综合91精品麻豆| 99这里都是精品| 久久精品视频一区二区三区| 日韩精品一级二级| 欧美美女视频在线观看| 亚洲三级在线观看| jlzzjlzz欧美大全| 国产精品久久久久久久久动漫 | 国产精品一区一区三区| 欧美一二三在线| 日韩成人伦理电影在线观看| 欧美午夜片在线看| 亚洲自拍偷拍av| 一本色道久久加勒比精品| 一区视频在线播放| 99精品国产视频| 亚洲欧洲日产国产综合网| 国产成人福利片| 国产欧美日本一区视频| 粉嫩aⅴ一区二区三区四区五区 | 亚洲一区二区黄色| 91成人在线精品| 亚洲午夜免费电影| 欧美久久久影院| 日本vs亚洲vs韩国一区三区 | 寂寞少妇一区二区三区| 精品久久久久久久久久久院品网 | 国内精品伊人久久久久av一坑|