亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
777午夜精品视频在线播放| 国产真实乱偷精品视频免| 中文字幕综合网| 国产精品青草综合久久久久99| xf在线a精品一区二区视频网站| 91精品免费在线| 久久久久久久久久久黄色| 精品精品国产高清一毛片一天堂| 欧美一二三区在线| 久久青草国产手机看片福利盒子| 国产亚洲欧美日韩俺去了| 亚洲国产高清aⅴ视频| 亚洲免费在线观看视频| 偷拍日韩校园综合在线| 精品影视av免费| 99精品视频一区二区| 欧美日韩中文字幕一区二区| 国产乱码精品一区二区三区忘忧草| 欧美zozozo| 欧美日韩国产影片| 久久久不卡网国产精品二区| 国产精品电影院| 久久成人av少妇免费| 91在线精品一区二区三区| 日韩精品一区二区三区四区视频| 中文字幕免费观看一区| 久久国产精品露脸对白| 91麻豆自制传媒国产之光| 欧美大片在线观看一区| 亚洲成av人片在线| av中文字幕不卡| 久久久久久久电影| 裸体健美xxxx欧美裸体表演| 91最新地址在线播放| 久久夜色精品一区| 久久国产成人午夜av影院| 欧美精品日韩一本| 夜夜嗨av一区二区三区中文字幕| 国产aⅴ综合色| 国产欧美一区二区在线| 国产精品羞羞答答xxdd| 精品国产乱码久久久久久影片| 亚洲一区二区三区精品在线| 色狠狠色噜噜噜综合网| 亚洲免费资源在线播放| 波多野洁衣一区| 亚洲三级视频在线观看| 91国偷自产一区二区开放时间 | 日韩久久久精品| 亚洲大尺度视频在线观看| 这里只有精品免费| 国产一区二区在线视频| 日本一区二区电影| 成人av电影在线| 亚洲高清免费观看 | 亚洲自拍另类综合| 欧美高清你懂得| 精久久久久久久久久久| 国产电影一区二区三区| 6080国产精品一区二区| 国产成人在线视频网站| 一区二区三区在线视频观看| 在线观看免费亚洲| 国产成人av福利| 天天av天天翘天天综合网色鬼国产| 欧美一区二区三区视频免费| 东方aⅴ免费观看久久av| 久久aⅴ国产欧美74aaa| 亚洲摸摸操操av| 亚洲精品在线观看视频| 欧美日韩国产成人在线免费| 国产aⅴ综合色| 国产盗摄一区二区三区| 日韩电影一二三区| 亚洲一级二级在线| 亚洲天堂免费看| www激情久久| 欧美成人性战久久| 欧美探花视频资源| 色偷偷久久人人79超碰人人澡| 国产精品一级在线| 黄色日韩网站视频| 国内精品伊人久久久久av一坑| 午夜电影一区二区| 亚洲图片欧美综合| 亚洲国产一区在线观看| 亚洲一卡二卡三卡四卡| 亚洲已满18点击进入久久| 亚洲乱码中文字幕| 亚洲一卡二卡三卡四卡五卡| 亚洲国产视频直播| 婷婷亚洲久悠悠色悠在线播放| 亚洲另类在线制服丝袜| 午夜精品影院在线观看| 亚洲成av人片观看| 国产精品一级黄| 亚洲日穴在线视频| 91国偷自产一区二区使用方法| 成人福利视频网站| 一本色道a无线码一区v| 欧美日韩精品高清| 国产日产精品一区| 亚洲另类色综合网站| 亚洲福利视频三区| 国产精品一区二区x88av| 日本大香伊一区二区三区| 欧美一区二区在线免费观看| 久久久不卡网国产精品一区| 亚洲欧洲综合另类| 国产一区二区影院| 欧美日韩亚洲综合| 欧美国产综合色视频| 又紧又大又爽精品一区二区| 狠狠色丁香婷婷综合| 欧美视频在线一区| 国产欧美日本一区视频| 午夜精品福利在线| 99久久精品99国产精品| 日韩一本二本av| 视频一区视频二区中文字幕| 国产成人aaa| 久久综合99re88久久爱| 国产麻豆视频一区| 欧美久久久久免费| 亚洲成人手机在线| 欧美性色aⅴ视频一区日韩精品| 精品国产一二三| 久久国产人妖系列| 欧美大尺度电影在线| 亚洲r级在线视频| 欧美精品自拍偷拍动漫精品| 亚洲美女屁股眼交| 欧美日韩国产三级| 日韩激情一区二区| 精品国产一区a| 粉嫩av一区二区三区在线播放| 久久综合999| aaa欧美色吧激情视频| 亚洲激情欧美激情| 欧美日韩在线一区二区| 青青草97国产精品免费观看 | 亚洲精品免费在线观看| 91极品美女在线| 六月丁香综合在线视频| 久久久三级国产网站| 91色|porny| 蜜桃免费网站一区二区三区| 久久久久久亚洲综合影院红桃| 国产又粗又猛又爽又黄91精品| 国产精品麻豆一区二区| 在线一区二区视频| 黄色成人免费在线| 日韩美女精品在线| 精品国产乱码久久久久久影片| 91在线观看美女| 免费观看一级欧美片| 中文一区一区三区高中清不卡| 在线这里只有精品| 懂色av一区二区三区蜜臀| 日韩精品电影在线观看| 国产精品麻豆欧美日韩ww| 日韩一区二区电影| 欧美亚洲禁片免费| 色噜噜狠狠一区二区三区果冻| 久久99精品国产91久久来源| 亚洲不卡在线观看| 亚洲精品中文字幕乱码三区| 久久久精品tv| 2022国产精品视频| 欧美xxx久久| 日韩精品一区国产麻豆| 欧美日韩一区国产| 一本色道久久综合精品竹菊| 成人综合在线观看| 成人午夜电影久久影院| 国产91高潮流白浆在线麻豆| 久久99精品久久久久婷婷| 免费精品99久久国产综合精品| 亚洲一二三区在线观看| 亚洲r级在线视频| 免费日本视频一区| 国产一区不卡视频| 成人久久18免费网站麻豆 | 久久久久久亚洲综合影院红桃| 日韩欧美一二区| 久久久精品黄色| 国产精品久久久99| 亚洲成人在线网站| 国产成人av影院| 亚洲精品成人天堂一二三| 国产清纯白嫩初高生在线观看91| 国产欧美视频一区二区| 国产精品盗摄一区二区三区| 亚洲人成在线播放网站岛国| 亚洲成人激情社区| 经典三级在线一区| 在线观看视频一区二区| 日韩女优av电影| 一区二区三区欧美久久| 久久精品国产在热久久|