xref: /utopia/UTPA2-700.0.x/modules/demodulator/drv/demod/drvDMD_INTERN_DVBT.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010	-	2012 MStar Semiconductor,	Inc. All rights	reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware	and	related	documentation	herein ("MStar Software")	are
6*53ee8cc1Swenshuai.xi // intellectual	property of	MStar	Semiconductor, Inc.	("MStar")	and	protected	by
7*53ee8cc1Swenshuai.xi // law,	including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use,	modification,	reproduction,	retransmission,	or republication of	all
9*53ee8cc1Swenshuai.xi // or	part of	MStar	Software is	expressly	prohibited,	unless prior written
10*53ee8cc1Swenshuai.xi // permission	has	been granted by	MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By	accessing, browsing	and/or using MStar Software, you acknowledge that	you
13*53ee8cc1Swenshuai.xi // have	read,	understood,	and	agree, to	be bound by	below	terms	("Terms")	and	to
14*53ee8cc1Swenshuai.xi // comply	with all applicable	laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1.	MStar	shall	retain any and all right,	ownership	and	interest to	MStar
17*53ee8cc1Swenshuai.xi //		Software and any modification/derivatives	thereof.
18*53ee8cc1Swenshuai.xi //		No right,	ownership, or	interest to	MStar	Software and any
19*53ee8cc1Swenshuai.xi //		modification/derivatives thereof is	transferred	to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2.	You	understand that	MStar	Software might include,	incorporate	or be
22*53ee8cc1Swenshuai.xi //		supplied together	with third party`s software	and	the	use	of MStar
23*53ee8cc1Swenshuai.xi //		Software may require additional	licenses from	third	parties.
24*53ee8cc1Swenshuai.xi //		Therefore, you hereby	agree	it is	your sole	responsibility to	separately
25*53ee8cc1Swenshuai.xi //		obtain any and all third party right and license necessary for your	use	of
26*53ee8cc1Swenshuai.xi //		such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3.	MStar	Software and any modification/derivatives	thereof	shall	be deemed	as
29*53ee8cc1Swenshuai.xi //		MStar`s	confidential information and you agree to	keep MStar`s
30*53ee8cc1Swenshuai.xi //		confidential information in	strictest	confidence and not disclose	to any
31*53ee8cc1Swenshuai.xi //		third	party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4.	MStar	Software is	provided on	an "AS IS" basis without warranties	of any
34*53ee8cc1Swenshuai.xi //		kind.	Any	warranties are hereby	expressly	disclaimed by	MStar, including
35*53ee8cc1Swenshuai.xi //		without	limitation,	any	warranties of	merchantability, non-infringement	of
36*53ee8cc1Swenshuai.xi //		intellectual property	rights,	fitness	for	a	particular purpose,	error	free
37*53ee8cc1Swenshuai.xi //		and	in conformity	with any international standard.	You	agree	to waive any
38*53ee8cc1Swenshuai.xi //		claim	against	MStar	for	any	loss,	damage,	cost or	expense	that you may
39*53ee8cc1Swenshuai.xi //		incur	related	to your	use	of MStar Software.
40*53ee8cc1Swenshuai.xi //		In no	event	shall	MStar	be liable	for	any	direct,	indirect,	incidental or
41*53ee8cc1Swenshuai.xi //		consequential	damages, including without limitation, lost	of profit	or
42*53ee8cc1Swenshuai.xi //		revenues,	lost or	damage of	data,	and	unauthorized system	use.
43*53ee8cc1Swenshuai.xi //		You	agree	that this	Section	4	shall	still	apply	without	being	affected
44*53ee8cc1Swenshuai.xi //		even if	MStar	Software has been	modified by	MStar	in accordance	with your
45*53ee8cc1Swenshuai.xi //		request	or instruction for your	use, except	otherwise	agreed by	both
46*53ee8cc1Swenshuai.xi //		parties	in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5.	If requested,	MStar	may	from time	to time	provide	technical	supports or
49*53ee8cc1Swenshuai.xi //		services in	relation with	MStar	Software to	you	for	your use of
50*53ee8cc1Swenshuai.xi //		MStar	Software in	conjunction	with your	or your	customer`s product
51*53ee8cc1Swenshuai.xi //		("Services").
52*53ee8cc1Swenshuai.xi //		You	understand and agree that, except	otherwise	agreed by	both parties in
53*53ee8cc1Swenshuai.xi //		writing, Services	are	provided on	an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //		disclaimer set forth in	Section	4	above	shall	apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6.	Nothing	contained	herein shall be	construed	as by	implication, estoppels
57*53ee8cc1Swenshuai.xi //		or otherwise:
58*53ee8cc1Swenshuai.xi //		(a)	conferring any license or	right	to use MStar name, trademark,	service
59*53ee8cc1Swenshuai.xi //				mark,	symbol or	any	other	identification;
60*53ee8cc1Swenshuai.xi //		(b)	obligating MStar or	any	of its affiliates	to furnish any person,
61*53ee8cc1Swenshuai.xi //				including	without	limitation,	you	and	your customers,	any	assistance
62*53ee8cc1Swenshuai.xi //				of any kind	whatsoever,	or any information;	or
63*53ee8cc1Swenshuai.xi //		(c)	conferring any license or	right	under	any	intellectual property	right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7.	These	terms	shall	be governed	by and construed in	accordance with	the	laws
66*53ee8cc1Swenshuai.xi //		of Taiwan, R.O.C., excluding its conflict	of law rules.
67*53ee8cc1Swenshuai.xi //		Any	and	all	dispute	arising	out	hereof or	related	hereto shall be	finally
68*53ee8cc1Swenshuai.xi //		settled	by arbitration referred	to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //		Taipei in	accordance with	the	ROC	Arbitration	Law	and	the	Arbitration
70*53ee8cc1Swenshuai.xi //		Rules	of the Association by	three	(3)	arbitrators	appointed	in accordance
71*53ee8cc1Swenshuai.xi //		with the said	Rules.
72*53ee8cc1Swenshuai.xi //		The	place	of arbitration shall be	in Taipei, Taiwan	and	the	language shall
73*53ee8cc1Swenshuai.xi //		be English.
74*53ee8cc1Swenshuai.xi //		The	arbitration	award	shall	be final and binding to	both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor,	Inc.
81*53ee8cc1Swenshuai.xi // All rights	reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless	otherwise	stipulated in	writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein	regardless in	any	format shall remain	the	sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc.	and	be kept	in strict	confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential	Information")	by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized	act	including	without	limitation unauthorized	disclosure,
88*53ee8cc1Swenshuai.xi // copying,	use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of	the	contents of	MStar	Confidential
90*53ee8cc1Swenshuai.xi // Information is	unlawful and strictly	prohibited.	MStar	hereby reserves	the
91*53ee8cc1Swenshuai.xi // rights	to any and all damages,	losses,	costs	and	expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi ///
97*53ee8cc1Swenshuai.xi ///	file		drvAVD.c
98*53ee8cc1Swenshuai.xi ///	@brief	AVD	Driver Interface
99*53ee8cc1Swenshuai.xi ///	@author	MStar	Semiconductor	Inc.
100*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
101*53ee8cc1Swenshuai.xi 
102*53ee8cc1Swenshuai.xi 
103*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
104*53ee8cc1Swenshuai.xi //	Include	Files
105*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
106*53ee8cc1Swenshuai.xi // Common	Definition
107*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
108*53ee8cc1Swenshuai.xi #include <linux/string.h>
109*53ee8cc1Swenshuai.xi #else
110*53ee8cc1Swenshuai.xi #include <string.h>
111*53ee8cc1Swenshuai.xi #include <stdio.h>
112*53ee8cc1Swenshuai.xi #include <math.h>
113*53ee8cc1Swenshuai.xi #endif
114*53ee8cc1Swenshuai.xi #include "MsCommon.h"
115*53ee8cc1Swenshuai.xi #include "MsVersion.h"
116*53ee8cc1Swenshuai.xi #include "MsOS.h"
117*53ee8cc1Swenshuai.xi 
118*53ee8cc1Swenshuai.xi // Internal	Definition
119*53ee8cc1Swenshuai.xi //#include "regCHIP.h"
120*53ee8cc1Swenshuai.xi //#include "regAVD.h"
121*53ee8cc1Swenshuai.xi //#include "mapi_tuner.h"
122*53ee8cc1Swenshuai.xi #include "drvSYS.h"
123*53ee8cc1Swenshuai.xi #include "drvDMD_VD_MBX.h"
124*53ee8cc1Swenshuai.xi #include "drvDMD_INTERN_DVBT.h"
125*53ee8cc1Swenshuai.xi #include "drvDMD_INTERN_DVBT_v2.h"
126*53ee8cc1Swenshuai.xi 
127*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_DVBT.h"
128*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_common.h"
129*53ee8cc1Swenshuai.xi #include "drvSAR.h"	 //	for	Utopia2
130*53ee8cc1Swenshuai.xi #include "utopia.h"
131*53ee8cc1Swenshuai.xi 
132*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
133*53ee8cc1Swenshuai.xi 
134*53ee8cc1Swenshuai.xi #include "drvSAR.h"	 //	for	Utopia2
135*53ee8cc1Swenshuai.xi #include "ULog.h"
136*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
137*53ee8cc1Swenshuai.xi //	Driver Compiler	Options
138*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
139*53ee8cc1Swenshuai.xi 
140*53ee8cc1Swenshuai.xi 
141*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
142*53ee8cc1Swenshuai.xi //	Local	Defines
143*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
147*53ee8cc1Swenshuai.xi //	Local	Structurs
148*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
149*53ee8cc1Swenshuai.xi 
150*53ee8cc1Swenshuai.xi 
151*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
152*53ee8cc1Swenshuai.xi //	Global Variables
153*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
154*53ee8cc1Swenshuai.xi #define	DMD_LOCK()			\
155*53ee8cc1Swenshuai.xi 		do{													\
156*53ee8cc1Swenshuai.xi 				MS_ASSERT(MsOS_In_Interrupt()	== FALSE); \
157*53ee8cc1Swenshuai.xi 				if (_u8DMDDbgLevel ==	DMD_DBGLV_DEBUG) ULOGD("DEMOD","%s lock	mutex\n",	__FUNCTION__);\
158*53ee8cc1Swenshuai.xi 				MsOS_ObtainMutex(_s32DMD_DVBT_Mutex, MSOS_WAIT_FOREVER);\
159*53ee8cc1Swenshuai.xi 				}while(0)
160*53ee8cc1Swenshuai.xi 
161*53ee8cc1Swenshuai.xi #define	DMD_UNLOCK()			\
162*53ee8cc1Swenshuai.xi 		do{													\
163*53ee8cc1Swenshuai.xi 				MsOS_ReleaseMutex(_s32DMD_DVBT_Mutex);\
164*53ee8cc1Swenshuai.xi 				if (_u8DMDDbgLevel ==	DMD_DBGLV_DEBUG) ULOGD("DEMOD","%s unlock	mutex\n",	__FUNCTION__); \
165*53ee8cc1Swenshuai.xi 				}while(0)
166*53ee8cc1Swenshuai.xi 
167*53ee8cc1Swenshuai.xi //MS_U8		 DVBT_TS_PHASE_EN	=0;
168*53ee8cc1Swenshuai.xi //MS_U8		 DVBT_TS_PHASE_NUM = 0;
169*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
170*53ee8cc1Swenshuai.xi //	Local	Variables
171*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
172*53ee8cc1Swenshuai.xi #if	1
173*53ee8cc1Swenshuai.xi /*static MSIF_Version	_drv_dmd_dvbt_intern_version = {
174*53ee8cc1Swenshuai.xi 		.MW	=	{	DMD_DVBT_INTERN_VER, },
175*53ee8cc1Swenshuai.xi };*/
176*53ee8cc1Swenshuai.xi #else
177*53ee8cc1Swenshuai.xi static MSIF_Version	_drv_dmd_dvbt_intern_version;
178*53ee8cc1Swenshuai.xi #endif
179*53ee8cc1Swenshuai.xi 
180*53ee8cc1Swenshuai.xi //static DMD_DVBT_InitData _sDMD_DVBT_InitData;
181*53ee8cc1Swenshuai.xi //static DMD_DbgLv _u8DMDDbgLevel=DMD_DBGLV_NONE;
182*53ee8cc1Swenshuai.xi //static MS_S32	_s32DMD_DVBT_Mutex=-1;
183*53ee8cc1Swenshuai.xi //static DMD_DVBT_Info sDMD_DVBT_Info;
184*53ee8cc1Swenshuai.xi //static MS_U16	u16DMD_DVBT_TPS_Timeout	=	1500,	u16DMD_DVBT_FEC_Timeout=6000;
185*53ee8cc1Swenshuai.xi static MS_U32	u32DMD_DVBT_IfFrequency	=	36167L,	u32DMD_DVBT_FsFrequency	=	45474L;
186*53ee8cc1Swenshuai.xi static MS_U8 u8DMD_DVBT_IQSwap=0;
187*53ee8cc1Swenshuai.xi //static DMD_RF_CHANNEL_BANDWIDTH	eDMD_DVBT_BandWidth=E_DMD_RF_CH_BAND_8MHz;
188*53ee8cc1Swenshuai.xi static DMD_SQI_CN_NORDIGP1 SqiCnNordigP1[] =
189*53ee8cc1Swenshuai.xi {
190*53ee8cc1Swenshuai.xi 		{_QPSK,	 _CR1Y2, 5.1 },
191*53ee8cc1Swenshuai.xi 		{_QPSK,	 _CR2Y3, 6.9 },
192*53ee8cc1Swenshuai.xi 		{_QPSK,	 _CR3Y4, 7.9 },
193*53ee8cc1Swenshuai.xi 		{_QPSK,	 _CR5Y6, 8.9 },
194*53ee8cc1Swenshuai.xi 		{_QPSK,	 _CR7Y8, 9.7 },
195*53ee8cc1Swenshuai.xi 		{_16QAM, _CR1Y2, 10.8},
196*53ee8cc1Swenshuai.xi 		{_16QAM, _CR2Y3, 13.1},
197*53ee8cc1Swenshuai.xi 		{_16QAM, _CR3Y4, 14.6},
198*53ee8cc1Swenshuai.xi 		{_16QAM, _CR5Y6, 15.6},
199*53ee8cc1Swenshuai.xi 		{_16QAM, _CR7Y8, 16.0},
200*53ee8cc1Swenshuai.xi 		{_64QAM, _CR1Y2, 16.5},
201*53ee8cc1Swenshuai.xi 		{_64QAM, _CR2Y3, 18.7},
202*53ee8cc1Swenshuai.xi 		{_64QAM, _CR3Y4, 20.2},
203*53ee8cc1Swenshuai.xi 		{_64QAM, _CR5Y6, 21.6},
204*53ee8cc1Swenshuai.xi 		{_64QAM, _CR7Y8, 22.5},
205*53ee8cc1Swenshuai.xi };
206*53ee8cc1Swenshuai.xi 
207*53ee8cc1Swenshuai.xi static DMD_SSI_DBM_NORDIGP1	dvbt_ssi_dbm_nordigp1[]	=
208*53ee8cc1Swenshuai.xi {
209*53ee8cc1Swenshuai.xi 	{	_QPSK	,	_CR1Y2,	-93},
210*53ee8cc1Swenshuai.xi 	{	_QPSK	,	_CR2Y3,	-91},
211*53ee8cc1Swenshuai.xi 	{	_QPSK	,	_CR3Y4,	-90},
212*53ee8cc1Swenshuai.xi 	{	_QPSK	,	_CR5Y6,	-89},
213*53ee8cc1Swenshuai.xi 	{	_QPSK	,	_CR7Y8,	-88},
214*53ee8cc1Swenshuai.xi 
215*53ee8cc1Swenshuai.xi 	{	_16QAM , _CR1Y2, -87},
216*53ee8cc1Swenshuai.xi 	{	_16QAM , _CR2Y3, -85},
217*53ee8cc1Swenshuai.xi 	{	_16QAM , _CR3Y4, -84},
218*53ee8cc1Swenshuai.xi 	{	_16QAM , _CR5Y6, -83},
219*53ee8cc1Swenshuai.xi 	{	_16QAM , _CR7Y8, -82},
220*53ee8cc1Swenshuai.xi 
221*53ee8cc1Swenshuai.xi 	{	_64QAM , _CR1Y2, -82},
222*53ee8cc1Swenshuai.xi 	{	_64QAM , _CR2Y3, -80},
223*53ee8cc1Swenshuai.xi 	{	_64QAM , _CR3Y4, -78},
224*53ee8cc1Swenshuai.xi 	{	_64QAM , _CR5Y6, -77},
225*53ee8cc1Swenshuai.xi 	{	_64QAM , _CR7Y8, -76},
226*53ee8cc1Swenshuai.xi 	{	_UNKNOW_QAM	,	_UNKNOW_CR,	0.0},
227*53ee8cc1Swenshuai.xi };
228*53ee8cc1Swenshuai.xi 
229*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
230*53ee8cc1Swenshuai.xi //	Debug	Functions
231*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
232*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
233*53ee8cc1Swenshuai.xi #define	DMD_DBG(x)					(x)
234*53ee8cc1Swenshuai.xi #else
235*53ee8cc1Swenshuai.xi #define	DMD_DBG(x)					//(x)
236*53ee8cc1Swenshuai.xi #endif
237*53ee8cc1Swenshuai.xi 
238*53ee8cc1Swenshuai.xi static DMD_DVBT_InitData	 AgcSsi_Para;
239*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
240*53ee8cc1Swenshuai.xi //	Local	Functions
241*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
242*53ee8cc1Swenshuai.xi 
243*53ee8cc1Swenshuai.xi static		void*	ppDVBTInstant	=	NULL;
244*53ee8cc1Swenshuai.xi static MS_U32	u32DVBTopen	=	0;
245*53ee8cc1Swenshuai.xi 		static MS_U8 u8DVBTUtopiaOpen	=	0;	 //for SetStillImagePara is	earlier	called than	Init
246*53ee8cc1Swenshuai.xi 
247*53ee8cc1Swenshuai.xi 
248*53ee8cc1Swenshuai.xi static float fViterbiBerFiltered=-1;
249*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
250*53ee8cc1Swenshuai.xi //	Global Functions
251*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
252*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX
253*53ee8cc1Swenshuai.xi #if 1
254*53ee8cc1Swenshuai.xi static float _LogApproxTableX[80] =
255*53ee8cc1Swenshuai.xi { 1.00, 1.30, 1.69, 2.20, 2.86, 3.71, 4.83, 6.27, 8.16, 10.60, 13.79,
256*53ee8cc1Swenshuai.xi   17.92, 23.30, 30.29, 39.37, 51.19, 66.54, 86.50, 112.46, 146.19,
257*53ee8cc1Swenshuai.xi   190.05, 247.06, 321.18, 417.54, 542.80, 705.64, 917.33, 1192.53,
258*53ee8cc1Swenshuai.xi   1550.29, 2015.38, 2620.00, 3405.99, 4427.79, 5756.13, 7482.97,
259*53ee8cc1Swenshuai.xi   9727.86, 12646.22, 16440.08, 21372.11, 27783.74, 36118.86,
260*53ee8cc1Swenshuai.xi   46954.52, 61040.88, 79353.15, 103159.09, 134106.82, 174338.86,
261*53ee8cc1Swenshuai.xi   226640.52, 294632.68, 383022.48, 497929.22, 647307.99, 841500.39, 1093950.50,
262*53ee8cc1Swenshuai.xi   1422135.65, 1848776.35, 2403409.25, 3124432.03, 4061761.64, 5280290.13,
263*53ee8cc1Swenshuai.xi   6864377.17, 8923690.32, 11600797.42, 15081036.65, 19605347.64, 25486951.94,
264*53ee8cc1Swenshuai.xi   33133037.52, 43072948.77, 55994833.40, 72793283.42, 94631268.45,
265*53ee8cc1Swenshuai.xi   123020648.99, 159926843.68, 207904896.79, 270276365.82, 351359275.57,
266*53ee8cc1Swenshuai.xi   456767058.24, 593797175.72, 771936328.43, 1003517226.96
267*53ee8cc1Swenshuai.xi };
268*53ee8cc1Swenshuai.xi 
269*53ee8cc1Swenshuai.xi static float _LogApproxTableY[80] =
270*53ee8cc1Swenshuai.xi { 0.00, 0.11, 0.23, 0.34, 0.46, 0.57, 0.68, 0.80, 0.91, 1.03, 1.14, 1.25,
271*53ee8cc1Swenshuai.xi   1.37, 1.48, 1.60, 1.71, 1.82, 1.94, 2.05, 2.16, 2.28, 2.39, 2.51, 2.62,
272*53ee8cc1Swenshuai.xi   2.73, 2.85, 2.96, 3.08, 3.19, 3.30, 3.42, 3.53, 3.65, 3.76, 3.87, 3.99,
273*53ee8cc1Swenshuai.xi   4.10, 4.22, 4.33, 4.44, 4.56, 4.67, 4.79, 4.90, 5.01, 5.13, 5.24, 5.36,
274*53ee8cc1Swenshuai.xi   5.47, 5.58, 5.70, 5.81, 5.93, 6.04, 6.15, 6.27, 6.04, 6.15, 6.27, 6.38,
275*53ee8cc1Swenshuai.xi   6.49, 6.61, 6.72, 6.84, 6.95, 7.06, 7.18, 7.29, 7.41, 7.52, 7.63, 7.75,
276*53ee8cc1Swenshuai.xi   7.86, 7.98, 8.09, 8.20, 8.32, 8.43, 8.55, 8.66
277*53ee8cc1Swenshuai.xi };
278*53ee8cc1Swenshuai.xi 
Log10Approx(float flt_x)279*53ee8cc1Swenshuai.xi static float Log10Approx(float flt_x)
280*53ee8cc1Swenshuai.xi {
281*53ee8cc1Swenshuai.xi     MS_U8  indx = 0;
282*53ee8cc1Swenshuai.xi 
283*53ee8cc1Swenshuai.xi     do {
284*53ee8cc1Swenshuai.xi         if (flt_x < _LogApproxTableX[indx])
285*53ee8cc1Swenshuai.xi             break;
286*53ee8cc1Swenshuai.xi         indx++;
287*53ee8cc1Swenshuai.xi     }while (indx < 79);   //stop at indx = 80
288*53ee8cc1Swenshuai.xi 
289*53ee8cc1Swenshuai.xi     return _LogApproxTableY[indx];
290*53ee8cc1Swenshuai.xi }
291*53ee8cc1Swenshuai.xi #else
Log10Approx(float flt_x)292*53ee8cc1Swenshuai.xi static float Log10Approx(float flt_x)
293*53ee8cc1Swenshuai.xi {
294*53ee8cc1Swenshuai.xi     MS_U32       u32_temp = 1;
295*53ee8cc1Swenshuai.xi     MS_U8        indx = 0;
296*53ee8cc1Swenshuai.xi 
297*53ee8cc1Swenshuai.xi     do {
298*53ee8cc1Swenshuai.xi         u32_temp = u32_temp << 1;
299*53ee8cc1Swenshuai.xi         if (flt_x < (float)u32_temp)
300*53ee8cc1Swenshuai.xi             break;
301*53ee8cc1Swenshuai.xi     }while (++indx < 32);
302*53ee8cc1Swenshuai.xi 
303*53ee8cc1Swenshuai.xi     // 10*log10(X) ~= 0.3*N, when X ~= 2^N
304*53ee8cc1Swenshuai.xi     return (float)0.3 * indx;
305*53ee8cc1Swenshuai.xi }
306*53ee8cc1Swenshuai.xi #endif
307*53ee8cc1Swenshuai.xi #endif
308*53ee8cc1Swenshuai.xi 
309*53ee8cc1Swenshuai.xi 
310*53ee8cc1Swenshuai.xi //bryan	waiting	for	handling
MDrv_DMD_DVBT_GetReg(MS_U16 u16Addr,MS_U8 * pu8Data)311*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetReg(MS_U16	u16Addr, MS_U8 *pu8Data)
312*53ee8cc1Swenshuai.xi {
313*53ee8cc1Swenshuai.xi 		MS_BOOL	bRet;
314*53ee8cc1Swenshuai.xi 
315*53ee8cc1Swenshuai.xi 		DVBT_GETREG_PARAM	Drv_DVBT_GETREG_PARAM;
316*53ee8cc1Swenshuai.xi 		Drv_DVBT_GETREG_PARAM.u16Addr=u16Addr;
317*53ee8cc1Swenshuai.xi 		Drv_DVBT_GETREG_PARAM.pu8Data=pu8Data;
318*53ee8cc1Swenshuai.xi 
319*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetReg\n"));
320*53ee8cc1Swenshuai.xi 
321*53ee8cc1Swenshuai.xi 		 bRet=UtopiaIoctl(ppDVBTInstant,DMD_DVBT_DRV_CMD_GetReg,&Drv_DVBT_GETREG_PARAM);
322*53ee8cc1Swenshuai.xi 		 return	bRet;
323*53ee8cc1Swenshuai.xi /*
324*53ee8cc1Swenshuai.xi 		DMD_LOCK();
325*53ee8cc1Swenshuai.xi 		bRet=MDrv_SYS_DMD_VD_MBX_ReadReg(u16Addr,	pu8Data);
326*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
327*53ee8cc1Swenshuai.xi 
328*53ee8cc1Swenshuai.xi 		#ifdef MS_DEBUG
329*53ee8cc1Swenshuai.xi 		if (_u8DMDDbgLevel >=	DMD_DBGLV_DEBUG)
330*53ee8cc1Swenshuai.xi 		{
331*53ee8cc1Swenshuai.xi 				ULOGD("DEMOD","MDrv_DMD_DVBT_GetReg	%x %x\n",	u16Addr, *pu8Data);
332*53ee8cc1Swenshuai.xi 		}
333*53ee8cc1Swenshuai.xi 		#endif
334*53ee8cc1Swenshuai.xi 
335*53ee8cc1Swenshuai.xi 		return bRet;
336*53ee8cc1Swenshuai.xi */
337*53ee8cc1Swenshuai.xi }
338*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_SetReg(MS_U16 u16Addr,MS_U8 u8Data)339*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_SetReg(MS_U16	u16Addr, MS_U8 u8Data)
340*53ee8cc1Swenshuai.xi {
341*53ee8cc1Swenshuai.xi 		MS_BOOL	return_val;
342*53ee8cc1Swenshuai.xi 
343*53ee8cc1Swenshuai.xi 	 DVBT_SETREG_PARAM Drv_DVBT_SETREG_PARAM;
344*53ee8cc1Swenshuai.xi 	 Drv_DVBT_SETREG_PARAM.u16Addr=u16Addr;
345*53ee8cc1Swenshuai.xi 	 Drv_DVBT_SETREG_PARAM.u8Data=u8Data;
346*53ee8cc1Swenshuai.xi 
347*53ee8cc1Swenshuai.xi 
348*53ee8cc1Swenshuai.xi 
349*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_SetReg\n"));
350*53ee8cc1Swenshuai.xi 		return_val=UtopiaIoctl(ppDVBTInstant,DMD_DVBT_DRV_CMD_SetReg,&Drv_DVBT_SETREG_PARAM);
351*53ee8cc1Swenshuai.xi 	return return_val;
352*53ee8cc1Swenshuai.xi /*
353*53ee8cc1Swenshuai.xi 		#ifdef MS_DEBUG
354*53ee8cc1Swenshuai.xi 		if (_u8DMDDbgLevel >=	DMD_DBGLV_DEBUG)
355*53ee8cc1Swenshuai.xi 		{
356*53ee8cc1Swenshuai.xi 				ULOGD("DEMOD","MDrv_DMD_DVBT_SetReg	%x %x\n",	u16Addr, u8Data);
357*53ee8cc1Swenshuai.xi 		}
358*53ee8cc1Swenshuai.xi 		#endif
359*53ee8cc1Swenshuai.xi 
360*53ee8cc1Swenshuai.xi 		DMD_LOCK();
361*53ee8cc1Swenshuai.xi 		bRet=MDrv_SYS_DMD_VD_MBX_WriteReg(u16Addr, u8Data);
362*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
363*53ee8cc1Swenshuai.xi 		return bRet;
364*53ee8cc1Swenshuai.xi 		*/
365*53ee8cc1Swenshuai.xi }
366*53ee8cc1Swenshuai.xi 
367*53ee8cc1Swenshuai.xi 
368*53ee8cc1Swenshuai.xi 
369*53ee8cc1Swenshuai.xi /*bryan	this is	need to	modified*/
MDrv_DMD_DVBT_Init(DMD_DVBT_InitData * pDMD_DVBT_InitData,MS_U32 u32InitDataLen)370*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_Init(DMD_DVBT_InitData *pDMD_DVBT_InitData,	MS_U32 u32InitDataLen)
371*53ee8cc1Swenshuai.xi {
372*53ee8cc1Swenshuai.xi 	 //	MS_BOOL	return_val;
373*53ee8cc1Swenshuai.xi 
374*53ee8cc1Swenshuai.xi 
375*53ee8cc1Swenshuai.xi 		void*	pAttribte	=	NULL;
376*53ee8cc1Swenshuai.xi 
377*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_Init\n"));
378*53ee8cc1Swenshuai.xi 
379*53ee8cc1Swenshuai.xi 		//bryan	test
380*53ee8cc1Swenshuai.xi 		#if(0)
381*53ee8cc1Swenshuai.xi 		 DVBT_INIT_PARAM Drv_DVBT_INIT_PARAM;
382*53ee8cc1Swenshuai.xi 
383*53ee8cc1Swenshuai.xi 	 Drv_DVBT_INIT_PARAM.DMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitExt=pDMD_DVBT_InitData->u8DMD_DVBT_DSPRegInitExt;
384*53ee8cc1Swenshuai.xi 	 Drv_DVBT_INIT_PARAM.DMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitSize=pDMD_DVBT_InitData->u8DMD_DVBT_DSPRegInitSize;
385*53ee8cc1Swenshuai.xi 	 Drv_DVBT_INIT_PARAM.DMD_DVBT_InitData.u8DMD_DVBT_InitExt=pDMD_DVBT_InitData->u8DMD_DVBT_InitExt;
386*53ee8cc1Swenshuai.xi 	 Drv_DVBT_INIT_PARAM.DMD_DVBT_InitData.u8SarChannel=pDMD_DVBT_InitData->u8SarChannel;
387*53ee8cc1Swenshuai.xi 		Drv_DVBT_INIT_PARAM.u32InitDataLen=sizeof(Drv_DVBT_INIT_PARAM.DMD_DVBT_InitData);
388*53ee8cc1Swenshuai.xi 	 #else
389*53ee8cc1Swenshuai.xi 				DVBT_INIT_PARAM	Drv_DVBT_INIT_PARAM;
390*53ee8cc1Swenshuai.xi 				DMD_DVBT_InitData_Transform	Init_Para_Temp;
391*53ee8cc1Swenshuai.xi 	Drv_DVBT_INIT_PARAM.ret=false;
392*53ee8cc1Swenshuai.xi 
393*53ee8cc1Swenshuai.xi memcpy (&(AgcSsi_Para), pDMD_DVBT_InitData, sizeof(DMD_DVBT_InitData));
394*53ee8cc1Swenshuai.xi 
395*53ee8cc1Swenshuai.xi 	Init_Para_Temp.u8DMD_DVBT_DSPRegInitExt=pDMD_DVBT_InitData->u8DMD_DVBT_DSPRegInitExt;
396*53ee8cc1Swenshuai.xi 	 Init_Para_Temp.u8DMD_DVBT_DSPRegInitSize=pDMD_DVBT_InitData->u8DMD_DVBT_DSPRegInitSize;
397*53ee8cc1Swenshuai.xi 	 Init_Para_Temp.u8DMD_DVBT_InitExt=pDMD_DVBT_InitData->u8DMD_DVBT_InitExt;
398*53ee8cc1Swenshuai.xi 	 Init_Para_Temp.u8SarChannel=pDMD_DVBT_InitData->u8SarChannel;
399*53ee8cc1Swenshuai.xi 
400*53ee8cc1Swenshuai.xi 	 Drv_DVBT_INIT_PARAM.DMD_DVBT_InitData=&Init_Para_Temp;
401*53ee8cc1Swenshuai.xi 		Drv_DVBT_INIT_PARAM.u32InitDataLen=sizeof(Init_Para_Temp);
402*53ee8cc1Swenshuai.xi 	 #endif
403*53ee8cc1Swenshuai.xi 
404*53ee8cc1Swenshuai.xi 		//Drv_DVBT_INIT_PARAM.pDMD_DVBT_InitData=pDMD_DVBT_InitData;
405*53ee8cc1Swenshuai.xi 
406*53ee8cc1Swenshuai.xi 		if(u8DVBTUtopiaOpen	== 0)	 //	First	time open
407*53ee8cc1Swenshuai.xi 		{
408*53ee8cc1Swenshuai.xi //				if(UtopiaOpen(MODULE_DVBT	|KERNEL_MODE,	&ppDVBTInstant,	0, pAttribte)	== UTOPIA_STATUS_SUCCESS)
409*53ee8cc1Swenshuai.xi 				if(UtopiaOpen(MODULE_DVBT/*|KERNEL_MODE*/	,	&ppDVBTInstant,	0, pAttribte)	== UTOPIA_STATUS_SUCCESS)	 //kernel	space
410*53ee8cc1Swenshuai.xi //if(UtopiaOpen(MODULE_DVBT	,	&ppDVBTInstant,	0, pAttribte)	== UTOPIA_STATUS_SUCCESS)	 //user	space
411*53ee8cc1Swenshuai.xi 				{
412*53ee8cc1Swenshuai.xi 						u32DVBTopen	=	1;
413*53ee8cc1Swenshuai.xi 			//return_val=true;
414*53ee8cc1Swenshuai.xi 						//ULOGD("DEMOD","\r\n	======== DVBT	Open Successful	%x =========", (WORD)u32DVBTopen);
415*53ee8cc1Swenshuai.xi 				}
416*53ee8cc1Swenshuai.xi 				else
417*53ee8cc1Swenshuai.xi 				{
418*53ee8cc1Swenshuai.xi 					 //	ULOGD("DEMOD","\r\n	======== DVBT	Open Fail	%x =========", (WORD)u32DVBTopen);
419*53ee8cc1Swenshuai.xi 			 //return_val=false;
420*53ee8cc1Swenshuai.xi 
421*53ee8cc1Swenshuai.xi 		 return	false;
422*53ee8cc1Swenshuai.xi 				}
423*53ee8cc1Swenshuai.xi 
424*53ee8cc1Swenshuai.xi 				u8DVBTUtopiaOpen = 1;
425*53ee8cc1Swenshuai.xi 		}
426*53ee8cc1Swenshuai.xi 
427*53ee8cc1Swenshuai.xi 
428*53ee8cc1Swenshuai.xi 	UtopiaIoctl(ppDVBTInstant,DMD_DVBT_DRV_CMD_Init,&Drv_DVBT_INIT_PARAM);
429*53ee8cc1Swenshuai.xi 	return Drv_DVBT_INIT_PARAM.ret;
430*53ee8cc1Swenshuai.xi  #if(0)
431*53ee8cc1Swenshuai.xi 		char pDMD_DVBT_MutexString[16];
432*53ee8cc1Swenshuai.xi 		MS_U8	u8ADCIQMode	=	0, u8PadSel	=	0, bPGAEnable	=	0, u8PGAGain = 5;
433*53ee8cc1Swenshuai.xi 		MS_BOOL	bRFAGCTristateEnable = 1;
434*53ee8cc1Swenshuai.xi 		MS_BOOL	bIFAGCTristateEnable = 0;
435*53ee8cc1Swenshuai.xi 
436*53ee8cc1Swenshuai.xi 		if (_s32DMD_DVBT_Mutex !=	-1)
437*53ee8cc1Swenshuai.xi 		{
438*53ee8cc1Swenshuai.xi 				DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_Init	more than	once\n"));
439*53ee8cc1Swenshuai.xi 				return FALSE;
440*53ee8cc1Swenshuai.xi 		}
441*53ee8cc1Swenshuai.xi 
442*53ee8cc1Swenshuai.xi 		if (NULL ==	strncpy(pDMD_DVBT_MutexString,"Mutex DMD DVBT",16))
443*53ee8cc1Swenshuai.xi 		{
444*53ee8cc1Swenshuai.xi 				DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_Init	strcpy Fail\n"));
445*53ee8cc1Swenshuai.xi 				return FALSE;
446*53ee8cc1Swenshuai.xi 		}
447*53ee8cc1Swenshuai.xi 		_s32DMD_DVBT_Mutex = MsOS_CreateMutex(E_MSOS_FIFO, pDMD_DVBT_MutexString,	MSOS_PROCESS_SHARED);
448*53ee8cc1Swenshuai.xi 		if (_s32DMD_DVBT_Mutex ==	-1)
449*53ee8cc1Swenshuai.xi 		{
450*53ee8cc1Swenshuai.xi 				DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_Init	Create Mutex Fail\n"));
451*53ee8cc1Swenshuai.xi 				return FALSE;
452*53ee8cc1Swenshuai.xi 		}
453*53ee8cc1Swenshuai.xi 		//_u8DMDDbgLevel = DMD_DBGLV_DEBUG;
454*53ee8cc1Swenshuai.xi 		#ifdef MS_DEBUG
455*53ee8cc1Swenshuai.xi 		if (_u8DMDDbgLevel >=	DMD_DBGLV_INFO)
456*53ee8cc1Swenshuai.xi 		{
457*53ee8cc1Swenshuai.xi 				ULOGD("DEMOD","MDrv_DMD_DVBT_Init\n");
458*53ee8cc1Swenshuai.xi 		}
459*53ee8cc1Swenshuai.xi 		#endif
460*53ee8cc1Swenshuai.xi 
461*53ee8cc1Swenshuai.xi 		if ( sizeof(_sDMD_DVBT_InitData) ==	u32InitDataLen)
462*53ee8cc1Swenshuai.xi 		{
463*53ee8cc1Swenshuai.xi 				memcpy(&_sDMD_DVBT_InitData, pDMD_DVBT_InitData, u32InitDataLen);
464*53ee8cc1Swenshuai.xi 		}
465*53ee8cc1Swenshuai.xi 		else
466*53ee8cc1Swenshuai.xi 		{
467*53ee8cc1Swenshuai.xi 				DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_Init	input	data structure incorrect\n"));
468*53ee8cc1Swenshuai.xi 				return FALSE;
469*53ee8cc1Swenshuai.xi 		}
470*53ee8cc1Swenshuai.xi 
471*53ee8cc1Swenshuai.xi 		if (_sDMD_DVBT_InitData.u8SarChannel !=	0xFF)
472*53ee8cc1Swenshuai.xi 		{
473*53ee8cc1Swenshuai.xi 				MDrv_SAR_Adc_Config(_sDMD_DVBT_InitData.u8SarChannel,	TRUE);
474*53ee8cc1Swenshuai.xi 		}
475*53ee8cc1Swenshuai.xi 
476*53ee8cc1Swenshuai.xi 		DMD_LOCK();
477*53ee8cc1Swenshuai.xi 		MDrv_SYS_DMD_VD_MBX_SetType(E_DMD_VD_MBX_TYPE_DVBT);
478*53ee8cc1Swenshuai.xi 		HAL_DMD_RegInit();
479*53ee8cc1Swenshuai.xi 
480*53ee8cc1Swenshuai.xi 		if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt !=	NULL)
481*53ee8cc1Swenshuai.xi 		{
482*53ee8cc1Swenshuai.xi 				if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=2)
483*53ee8cc1Swenshuai.xi 				{
484*53ee8cc1Swenshuai.xi 						bRFAGCTristateEnable = (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[3]	&	(BIT_(0))) ? TRUE	:	FALSE; //	RFAGC	tristate control
485*53ee8cc1Swenshuai.xi 						bIFAGCTristateEnable = (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[3]	&	(BIT_(4))) ? TRUE	:	FALSE; //	IFAGC	tristate control
486*53ee8cc1Swenshuai.xi 				}
487*53ee8cc1Swenshuai.xi 				else
488*53ee8cc1Swenshuai.xi 				{
489*53ee8cc1Swenshuai.xi 						bRFAGCTristateEnable = 1;
490*53ee8cc1Swenshuai.xi 						bIFAGCTristateEnable = 0;
491*53ee8cc1Swenshuai.xi 				}
492*53ee8cc1Swenshuai.xi 		}
493*53ee8cc1Swenshuai.xi 		else
494*53ee8cc1Swenshuai.xi 		{
495*53ee8cc1Swenshuai.xi 				bRFAGCTristateEnable = 1;
496*53ee8cc1Swenshuai.xi 				bIFAGCTristateEnable = 0;
497*53ee8cc1Swenshuai.xi 		}
498*53ee8cc1Swenshuai.xi 
499*53ee8cc1Swenshuai.xi 		if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt !=	NULL)
500*53ee8cc1Swenshuai.xi 		{
501*53ee8cc1Swenshuai.xi 				if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=3)
502*53ee8cc1Swenshuai.xi 				{
503*53ee8cc1Swenshuai.xi 						u32DMD_DVBT_IfFrequency	=	_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[4]; //	IF frequency
504*53ee8cc1Swenshuai.xi 						u32DMD_DVBT_IfFrequency	=	 (u32DMD_DVBT_IfFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[5]; //	IF frequency
505*53ee8cc1Swenshuai.xi 						u32DMD_DVBT_IfFrequency	=	 (u32DMD_DVBT_IfFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[6]; //	IF frequency
506*53ee8cc1Swenshuai.xi 						u32DMD_DVBT_IfFrequency	=	 (u32DMD_DVBT_IfFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[7]; //	IF frequency
507*53ee8cc1Swenshuai.xi 						u32DMD_DVBT_FsFrequency	=	_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[8]; //	FS frequency
508*53ee8cc1Swenshuai.xi 						u32DMD_DVBT_FsFrequency	=	 (u32DMD_DVBT_FsFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[9]; //	FS frequency
509*53ee8cc1Swenshuai.xi 						u32DMD_DVBT_FsFrequency	=	 (u32DMD_DVBT_FsFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[10];	// FS	frequency
510*53ee8cc1Swenshuai.xi 						u32DMD_DVBT_FsFrequency	=	 (u32DMD_DVBT_FsFrequency<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[11];	// FS	frequency
511*53ee8cc1Swenshuai.xi 						u8DMD_DVBT_IQSwap	=	_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[12];	// IQ	Swap
512*53ee8cc1Swenshuai.xi 
513*53ee8cc1Swenshuai.xi 						u8ADCIQMode	=	_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[13];	// u8ADCIQMode : 0=I path, 1=Q path, 2=both	IQ
514*53ee8cc1Swenshuai.xi 						u8PadSel = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[14]; //	u8PadSel : 0=Normal, 1=analog	pad
515*53ee8cc1Swenshuai.xi 						bPGAEnable = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[15]; //	bPGAEnable : 0=disable,	1=enable
516*53ee8cc1Swenshuai.xi 						u8PGAGain	=	_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[16];	// u8PGAGain : default 5
517*53ee8cc1Swenshuai.xi 				}
518*53ee8cc1Swenshuai.xi 				else
519*53ee8cc1Swenshuai.xi 				{
520*53ee8cc1Swenshuai.xi 
521*53ee8cc1Swenshuai.xi 				}
522*53ee8cc1Swenshuai.xi 		}
523*53ee8cc1Swenshuai.xi 		else
524*53ee8cc1Swenshuai.xi 		{
525*53ee8cc1Swenshuai.xi 
526*53ee8cc1Swenshuai.xi 		}
527*53ee8cc1Swenshuai.xi 		#ifdef MS_DEBUG
528*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","u32DMD_DVBT_IfFrequency %ld\n",u32DMD_DVBT_IfFrequency);
529*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","u32DMD_DVBT_FsFrequency %ld\n",u32DMD_DVBT_FsFrequency);
530*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","u8DMD_DVBT_IQSwap %d\n",u8DMD_DVBT_IQSwap);
531*53ee8cc1Swenshuai.xi 		#endif
532*53ee8cc1Swenshuai.xi 
533*53ee8cc1Swenshuai.xi 		u16DMD_DVBT_TPS_Timeout	=	1500;
534*53ee8cc1Swenshuai.xi 		u16DMD_DVBT_FEC_Timeout	=	6000;
535*53ee8cc1Swenshuai.xi 		if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt !=	NULL)
536*53ee8cc1Swenshuai.xi 		{
537*53ee8cc1Swenshuai.xi 				if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=4)
538*53ee8cc1Swenshuai.xi 				{
539*53ee8cc1Swenshuai.xi 						u16DMD_DVBT_TPS_Timeout	=	_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[17];	// TPS timeout in	ms
540*53ee8cc1Swenshuai.xi 						u16DMD_DVBT_TPS_Timeout	=	 (u16DMD_DVBT_TPS_Timeout<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[18];
541*53ee8cc1Swenshuai.xi 						if (u16DMD_DVBT_TPS_Timeout	<	700) u16DMD_DVBT_TPS_Timeout=700;
542*53ee8cc1Swenshuai.xi 						//ULOGD("DEMOD","u16DMD_DVBT_TPS_Timeout %d\n",u16DMD_DVBT_TPS_Timeout);
543*53ee8cc1Swenshuai.xi 
544*53ee8cc1Swenshuai.xi 						u16DMD_DVBT_FEC_Timeout	=	_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[19];	// FEC timeout in	ms
545*53ee8cc1Swenshuai.xi 						u16DMD_DVBT_FEC_Timeout	=	 (u16DMD_DVBT_FEC_Timeout<<8)+_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[20];
546*53ee8cc1Swenshuai.xi 						if (u16DMD_DVBT_FEC_Timeout	<	2500)	u16DMD_DVBT_FEC_Timeout=2500;
547*53ee8cc1Swenshuai.xi 						//ULOGD("DEMOD","u16DMD_DVBT_FEC_Timeout %d\n",u16DMD_DVBT_FEC_Timeout);
548*53ee8cc1Swenshuai.xi 				}
549*53ee8cc1Swenshuai.xi 				else
550*53ee8cc1Swenshuai.xi 				{
551*53ee8cc1Swenshuai.xi 				}
552*53ee8cc1Swenshuai.xi 		}
553*53ee8cc1Swenshuai.xi 		else
554*53ee8cc1Swenshuai.xi 		{
555*53ee8cc1Swenshuai.xi 		}
556*53ee8cc1Swenshuai.xi 
557*53ee8cc1Swenshuai.xi 		if (bIFAGCTristateEnable)
558*53ee8cc1Swenshuai.xi 		{
559*53ee8cc1Swenshuai.xi 				MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET_ALL_OFF);
560*53ee8cc1Swenshuai.xi 		}
561*53ee8cc1Swenshuai.xi 		else
562*53ee8cc1Swenshuai.xi 		{
563*53ee8cc1Swenshuai.xi 				MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET);
564*53ee8cc1Swenshuai.xi 		}
565*53ee8cc1Swenshuai.xi 
566*53ee8cc1Swenshuai.xi 
567*53ee8cc1Swenshuai.xi 	// oga
568*53ee8cc1Swenshuai.xi 	DVBT_TS_PHASE_EN =0;
569*53ee8cc1Swenshuai.xi 	DVBT_TS_PHASE_NUM	=	0;
570*53ee8cc1Swenshuai.xi 	 if	(_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt	!= NULL)
571*53ee8cc1Swenshuai.xi 	 {
572*53ee8cc1Swenshuai.xi /*
573*53ee8cc1Swenshuai.xi 		if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=5)	// version bigger	than 5,	apply	TS phase solution
574*53ee8cc1Swenshuai.xi 		{
575*53ee8cc1Swenshuai.xi 		 DVBT_TS_PHASE_EN	=	_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[INDEX_T_TS_PHASE_EN];
576*53ee8cc1Swenshuai.xi 		 DVBT_TS_PHASE_NUM = _sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[INDEX_T_TS_PHASE_NUM];
577*53ee8cc1Swenshuai.xi 		 ULOGD("DEMOD","##DVBT:TS	check: bTsPhaseEn	=	%d,	u16TsPhaseNum	=	%d\n",DVBT_TS_PHASE_EN,DVBT_TS_PHASE_NUM);
578*53ee8cc1Swenshuai.xi 		}
579*53ee8cc1Swenshuai.xi 	else
580*53ee8cc1Swenshuai.xi 	{
581*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","##DVBT:TS Phase check !!, board version smaller than	4\n");
582*53ee8cc1Swenshuai.xi 	}
583*53ee8cc1Swenshuai.xi */
584*53ee8cc1Swenshuai.xi  }
585*53ee8cc1Swenshuai.xi 	 else	// if	init board define	is NULL	TS phase needs check.
586*53ee8cc1Swenshuai.xi 	 {
587*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","##DVBT:TS Phase check !!\n");
588*53ee8cc1Swenshuai.xi 	 }
589*53ee8cc1Swenshuai.xi 
590*53ee8cc1Swenshuai.xi 
591*53ee8cc1Swenshuai.xi 
592*53ee8cc1Swenshuai.xi 		if (_sDMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitExt !=	NULL)
593*53ee8cc1Swenshuai.xi 		{
594*53ee8cc1Swenshuai.xi 				if (_sDMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitExt[0]>=1)
595*53ee8cc1Swenshuai.xi 				{
596*53ee8cc1Swenshuai.xi 						INTERN_DVBT_Power_On_Initialization(bRFAGCTristateEnable,	u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain,	_sDMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitExt,	_sDMD_DVBT_InitData.u8DMD_DVBT_DSPRegInitSize);
597*53ee8cc1Swenshuai.xi 				}
598*53ee8cc1Swenshuai.xi 				else
599*53ee8cc1Swenshuai.xi 				{
600*53ee8cc1Swenshuai.xi 						ULOGD("DEMOD","u8DMD_DVBT_DSPRegInitExt	Error\n");
601*53ee8cc1Swenshuai.xi 				}
602*53ee8cc1Swenshuai.xi 		}
603*53ee8cc1Swenshuai.xi 		else
604*53ee8cc1Swenshuai.xi 		{
605*53ee8cc1Swenshuai.xi 				INTERN_DVBT_Power_On_Initialization(bRFAGCTristateEnable,	u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain,	 NULL, 0);
606*53ee8cc1Swenshuai.xi 		}
607*53ee8cc1Swenshuai.xi 
608*53ee8cc1Swenshuai.xi 		INTERN_DVBT_Version(&sDMD_DVBT_Info.u16Version);
609*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
610*53ee8cc1Swenshuai.xi 		#ifdef MS_DEBUG
611*53ee8cc1Swenshuai.xi 		ULOGD("DEMOD","firmware	version: %x\n",sDMD_DVBT_Info.u16Version);
612*53ee8cc1Swenshuai.xi 		#endif
613*53ee8cc1Swenshuai.xi 		return TRUE;
614*53ee8cc1Swenshuai.xi #endif
615*53ee8cc1Swenshuai.xi }
616*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_Exit(void)617*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_Exit(void)
618*53ee8cc1Swenshuai.xi {
619*53ee8cc1Swenshuai.xi //bryan:return value need	to be	checked
620*53ee8cc1Swenshuai.xi 	//MS_BOOL	return_val;
621*53ee8cc1Swenshuai.xi 	/*
622*53ee8cc1Swenshuai.xi 		#ifdef MS_DEBUG
623*53ee8cc1Swenshuai.xi 		if (_u8DMDDbgLevel >=	DMD_DBGLV_DEBUG)
624*53ee8cc1Swenshuai.xi 		{
625*53ee8cc1Swenshuai.xi 				ULOGD("DEMOD","MDrv_DMD_DVBT_Exit\n");
626*53ee8cc1Swenshuai.xi 		}
627*53ee8cc1Swenshuai.xi 		#endif
628*53ee8cc1Swenshuai.xi 
629*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_Exit\n"));
630*53ee8cc1Swenshuai.xi 
631*53ee8cc1Swenshuai.xi 		DMD_LOCK();
632*53ee8cc1Swenshuai.xi 		INTERN_DVBT_Exit();
633*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
634*53ee8cc1Swenshuai.xi 		MsOS_DeleteMutex(_s32DMD_DVBT_Mutex);
635*53ee8cc1Swenshuai.xi 		_s32DMD_DVBT_Mutex=	-1;
636*53ee8cc1Swenshuai.xi 		return TRUE;
637*53ee8cc1Swenshuai.xi 		*/
638*53ee8cc1Swenshuai.xi 		DVBT_EXIT_PARAM	Drv_DVBT_EXIT_PARAM;
639*53ee8cc1Swenshuai.xi 		Drv_DVBT_EXIT_PARAM.ret=false;
640*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_Exit\n"));
641*53ee8cc1Swenshuai.xi 
642*53ee8cc1Swenshuai.xi 		if(u32DVBTopen==1)
643*53ee8cc1Swenshuai.xi 			UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_Exit,	&Drv_DVBT_EXIT_PARAM);
644*53ee8cc1Swenshuai.xi 		else
645*53ee8cc1Swenshuai.xi 	return false;
646*53ee8cc1Swenshuai.xi 
647*53ee8cc1Swenshuai.xi 	return Drv_DVBT_EXIT_PARAM.ret;
648*53ee8cc1Swenshuai.xi }
649*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_GetConfig(DMD_DVBT_InitData * pDMD_DVBT_InitData)650*53ee8cc1Swenshuai.xi MS_U32 MDrv_DMD_DVBT_GetConfig(DMD_DVBT_InitData *pDMD_DVBT_InitData)
651*53ee8cc1Swenshuai.xi {
652*53ee8cc1Swenshuai.xi 	if (!u32DVBTopen) return FALSE;
653*53ee8cc1Swenshuai.xi 
654*53ee8cc1Swenshuai.xi        memcpy (pDMD_DVBT_InitData, &(AgcSsi_Para), sizeof(DMD_DVBT_InitData));
655*53ee8cc1Swenshuai.xi 
656*53ee8cc1Swenshuai.xi        return UTOPIA_STATUS_SUCCESS;
657*53ee8cc1Swenshuai.xi }
658*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_SetDbgLevel(DMD_DbgLv u8DbgLevel)659*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_SetDbgLevel(DMD_DbgLv	u8DbgLevel)
660*53ee8cc1Swenshuai.xi {
661*53ee8cc1Swenshuai.xi 	//MS_BOOL	return_val;
662*53ee8cc1Swenshuai.xi 	DVBT_SETDBG_LEVEL_PARAM	Drv_DVBT_SETDBG_LEVEL_PARAM;
663*53ee8cc1Swenshuai.xi 	Drv_DVBT_SETDBG_LEVEL_PARAM.u8DbgLevel=u8DbgLevel;
664*53ee8cc1Swenshuai.xi 	Drv_DVBT_SETDBG_LEVEL_PARAM.ret=false;
665*53ee8cc1Swenshuai.xi 
666*53ee8cc1Swenshuai.xi 
667*53ee8cc1Swenshuai.xi 		/*
668*53ee8cc1Swenshuai.xi 		DMD_LOCK();
669*53ee8cc1Swenshuai.xi 		_u8DMDDbgLevel = u8DbgLevel;
670*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
671*53ee8cc1Swenshuai.xi 		return TRUE;
672*53ee8cc1Swenshuai.xi 		*/
673*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_SetDbgLevel\n"));
674*53ee8cc1Swenshuai.xi 
675*53ee8cc1Swenshuai.xi 		 if(u32DVBTopen==1)
676*53ee8cc1Swenshuai.xi 			UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_SetDbgLeve,	&Drv_DVBT_SETDBG_LEVEL_PARAM);
677*53ee8cc1Swenshuai.xi 		 else
678*53ee8cc1Swenshuai.xi 	return false;
679*53ee8cc1Swenshuai.xi 
680*53ee8cc1Swenshuai.xi 	return Drv_DVBT_SETDBG_LEVEL_PARAM.ret;
681*53ee8cc1Swenshuai.xi }
682*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_GetInfo(DMD_DVBT_INFO_TYPE eInfoType)683*53ee8cc1Swenshuai.xi DMD_DVBT_Info* MDrv_DMD_DVBT_GetInfo(DMD_DVBT_INFO_TYPE	eInfoType)
684*53ee8cc1Swenshuai.xi {
685*53ee8cc1Swenshuai.xi 	//MS_BOOL	return_val;
686*53ee8cc1Swenshuai.xi 	DVBT_GETINFO_PARAM Drv_DVBT_GETINFO_PARAM;
687*53ee8cc1Swenshuai.xi 	Drv_DVBT_GETINFO_PARAM.eInfoType=eInfoType;
688*53ee8cc1Swenshuai.xi 	Drv_DVBT_GETINFO_PARAM.pInfo=NULL;
689*53ee8cc1Swenshuai.xi 
690*53ee8cc1Swenshuai.xi 			 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetInfo\n"));
691*53ee8cc1Swenshuai.xi 
692*53ee8cc1Swenshuai.xi 			if(u32DVBTopen==1)
693*53ee8cc1Swenshuai.xi 			 UtopiaIoctl(ppDVBTInstant,	DMD_DVBT_DRV_CMD_GetInfo,	&Drv_DVBT_GETINFO_PARAM);
694*53ee8cc1Swenshuai.xi 
695*53ee8cc1Swenshuai.xi 
696*53ee8cc1Swenshuai.xi 	return Drv_DVBT_GETINFO_PARAM.pInfo;
697*53ee8cc1Swenshuai.xi 		#if(0)
698*53ee8cc1Swenshuai.xi 		DMD_LOCK();
699*53ee8cc1Swenshuai.xi 		switch (eInfoType)
700*53ee8cc1Swenshuai.xi 		{
701*53ee8cc1Swenshuai.xi 				case E_DMD_DVBT_MODULATION_INFO:
702*53ee8cc1Swenshuai.xi 						INTERN_DVBT_Show_Modulation_info();
703*53ee8cc1Swenshuai.xi 						break;
704*53ee8cc1Swenshuai.xi 				case E_DMD_DVBT_DEMOD_INFO:
705*53ee8cc1Swenshuai.xi 						INTERN_DVBT_Show_Demod_Info();
706*53ee8cc1Swenshuai.xi 						break;
707*53ee8cc1Swenshuai.xi 				case E_DMD_DVBT_LOCK_INFO:
708*53ee8cc1Swenshuai.xi 						INTERN_DVBT_Show_Lock_Info();
709*53ee8cc1Swenshuai.xi 						break;
710*53ee8cc1Swenshuai.xi 				case E_DMD_DVBT_PRESFO_INFO:
711*53ee8cc1Swenshuai.xi 						INTERN_DVBT_Show_PRESFO_Info();
712*53ee8cc1Swenshuai.xi 						break;
713*53ee8cc1Swenshuai.xi 				case E_DMD_DVBT_LOCK_TIME_INFO:
714*53ee8cc1Swenshuai.xi 						INTERN_DVBT_Show_Lock_Time_Info();
715*53ee8cc1Swenshuai.xi 						break;
716*53ee8cc1Swenshuai.xi 				case E_DMD_DVBT_BER_INFO:
717*53ee8cc1Swenshuai.xi 						INTERN_DVBT_Show_BER_Info();
718*53ee8cc1Swenshuai.xi 						break;
719*53ee8cc1Swenshuai.xi 				case E_DMD_DVBT_AGC_INFO:
720*53ee8cc1Swenshuai.xi 						INTERN_DVBT_Show_AGC_Info();
721*53ee8cc1Swenshuai.xi 						break;
722*53ee8cc1Swenshuai.xi 				default:
723*53ee8cc1Swenshuai.xi 						#ifdef MS_DEBUG
724*53ee8cc1Swenshuai.xi 						ULOGD("DEMOD","MDrv_DMD_DVBT_GetInfo %d	Error\n",	eInfoType);
725*53ee8cc1Swenshuai.xi 						#endif
726*53ee8cc1Swenshuai.xi 						break;
727*53ee8cc1Swenshuai.xi 		}
728*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
729*53ee8cc1Swenshuai.xi 		return &sDMD_DVBT_Info;
730*53ee8cc1Swenshuai.xi 
731*53ee8cc1Swenshuai.xi 		#endif
732*53ee8cc1Swenshuai.xi }
733*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_GetLibVer(const MSIF_Version ** ppVersion)734*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetLibVer(const	MSIF_Version **ppVersion)
735*53ee8cc1Swenshuai.xi {
736*53ee8cc1Swenshuai.xi 	DVBT_GETLIBVER_PARAM Drv_DVBT_GETLIBVER_PARAM;
737*53ee8cc1Swenshuai.xi 	Drv_DVBT_GETLIBVER_PARAM.ppVersion=ppVersion;
738*53ee8cc1Swenshuai.xi 	Drv_DVBT_GETLIBVER_PARAM.ret=false;
739*53ee8cc1Swenshuai.xi 
740*53ee8cc1Swenshuai.xi 			 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetLibVer\n"));
741*53ee8cc1Swenshuai.xi 	if(u32DVBTopen==1)
742*53ee8cc1Swenshuai.xi 		UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_GetLibVer, &Drv_DVBT_GETLIBVER_PARAM);
743*53ee8cc1Swenshuai.xi 	else
744*53ee8cc1Swenshuai.xi 		return false;
745*53ee8cc1Swenshuai.xi 
746*53ee8cc1Swenshuai.xi 	return Drv_DVBT_GETLIBVER_PARAM.ret;
747*53ee8cc1Swenshuai.xi 
748*53ee8cc1Swenshuai.xi 
749*53ee8cc1Swenshuai.xi 		/*
750*53ee8cc1Swenshuai.xi 		DMD_LOCK();
751*53ee8cc1Swenshuai.xi 		if (!ppVersion)
752*53ee8cc1Swenshuai.xi 		{
753*53ee8cc1Swenshuai.xi 				return FALSE;
754*53ee8cc1Swenshuai.xi 		}
755*53ee8cc1Swenshuai.xi 
756*53ee8cc1Swenshuai.xi 		*ppVersion = &_drv_dmd_dvbt_intern_version;
757*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
758*53ee8cc1Swenshuai.xi 		return TRUE;
759*53ee8cc1Swenshuai.xi 		*/
760*53ee8cc1Swenshuai.xi }
761*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBTGetFWVer(MS_U16 * ver)762*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBTGetFWVer(MS_U16 *ver)
763*53ee8cc1Swenshuai.xi {
764*53ee8cc1Swenshuai.xi 		//MS_BOOL	return_val;
765*53ee8cc1Swenshuai.xi 	 DVBT_GETFWVER_PARAM Drv_DVBT_GETFWVER_PARAM;
766*53ee8cc1Swenshuai.xi 	 Drv_DVBT_GETFWVER_PARAM.ver=ver;
767*53ee8cc1Swenshuai.xi 	 Drv_DVBT_GETFWVER_PARAM.ret=false;
768*53ee8cc1Swenshuai.xi 
769*53ee8cc1Swenshuai.xi 	 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBTGetFWVer\n"));
770*53ee8cc1Swenshuai.xi 	 if(u32DVBTopen==1)
771*53ee8cc1Swenshuai.xi 		UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_GetFWVer,	&Drv_DVBT_GETFWVER_PARAM);
772*53ee8cc1Swenshuai.xi 	 else
773*53ee8cc1Swenshuai.xi 		return false;
774*53ee8cc1Swenshuai.xi 
775*53ee8cc1Swenshuai.xi 	 return	Drv_DVBT_GETFWVER_PARAM.ret;
776*53ee8cc1Swenshuai.xi 		/*
777*53ee8cc1Swenshuai.xi 		MS_BOOL	bRet;
778*53ee8cc1Swenshuai.xi 
779*53ee8cc1Swenshuai.xi 		DMD_LOCK();
780*53ee8cc1Swenshuai.xi 
781*53ee8cc1Swenshuai.xi 		bRet = INTERN_DVBT_Version(ver);
782*53ee8cc1Swenshuai.xi 		//ULOGD("DEMOD","MDrv_DMD_DVBT_GetFWVer	%x\n",*ver);
783*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
784*53ee8cc1Swenshuai.xi 
785*53ee8cc1Swenshuai.xi 		return bRet;
786*53ee8cc1Swenshuai.xi 		*/
787*53ee8cc1Swenshuai.xi }
788*53ee8cc1Swenshuai.xi 
789*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_SetSerialControl(MS_BOOL bEnable)790*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_SetSerialControl(MS_BOOL bEnable)
791*53ee8cc1Swenshuai.xi {
792*53ee8cc1Swenshuai.xi 		//MS_BOOL	return_val;
793*53ee8cc1Swenshuai.xi 		DVBT_SetSerialControl_PARAM	Drv_DVBT_SetSerialControl_PARAM;
794*53ee8cc1Swenshuai.xi 		Drv_DVBT_SetSerialControl_PARAM.bEnable=bEnable;
795*53ee8cc1Swenshuai.xi 		Drv_DVBT_SetSerialControl_PARAM.ret=false;
796*53ee8cc1Swenshuai.xi 
797*53ee8cc1Swenshuai.xi 	 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_SetSerialControl\n"));
798*53ee8cc1Swenshuai.xi 
799*53ee8cc1Swenshuai.xi 	 if(u32DVBTopen==1)
800*53ee8cc1Swenshuai.xi 		 UtopiaIoctl(ppDVBTInstant,	DMD_DVBT_DRV_CMD_SetSerialControl, &Drv_DVBT_SetSerialControl_PARAM);
801*53ee8cc1Swenshuai.xi 	 else
802*53ee8cc1Swenshuai.xi 				return false;
803*53ee8cc1Swenshuai.xi 
804*53ee8cc1Swenshuai.xi 	 return	Drv_DVBT_SetSerialControl_PARAM.ret;
805*53ee8cc1Swenshuai.xi 	 /*
806*53ee8cc1Swenshuai.xi 		MS_BOOL	bRet;
807*53ee8cc1Swenshuai.xi 		MS_U8	u8TSClk;
808*53ee8cc1Swenshuai.xi 
809*53ee8cc1Swenshuai.xi 		#ifdef MS_DEBUG
810*53ee8cc1Swenshuai.xi 		if (_u8DMDDbgLevel >=	DMD_DBGLV_DEBUG)
811*53ee8cc1Swenshuai.xi 		{
812*53ee8cc1Swenshuai.xi 				ULOGD("DEMOD","MDrv_DMD_DVBT_SetSerialControl	%x\n", bEnable);
813*53ee8cc1Swenshuai.xi 		}
814*53ee8cc1Swenshuai.xi 		#endif
815*53ee8cc1Swenshuai.xi 
816*53ee8cc1Swenshuai.xi 		DMD_LOCK();
817*53ee8cc1Swenshuai.xi 		if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt !=	NULL)
818*53ee8cc1Swenshuai.xi 		{
819*53ee8cc1Swenshuai.xi 				if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=1)
820*53ee8cc1Swenshuai.xi 				{
821*53ee8cc1Swenshuai.xi 						u8TSClk	=	_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[2]; //	TS_CLK
822*53ee8cc1Swenshuai.xi 				}
823*53ee8cc1Swenshuai.xi 				else
824*53ee8cc1Swenshuai.xi 				{
825*53ee8cc1Swenshuai.xi 						u8TSClk	=	0xFF;	// parallel	mode:	0x0513 =>	ts_clk=288/(2*(0x16+1))=6.26MHz	//@@++--
826*53ee8cc1Swenshuai.xi 				}
827*53ee8cc1Swenshuai.xi 		}
828*53ee8cc1Swenshuai.xi 		else
829*53ee8cc1Swenshuai.xi 		{
830*53ee8cc1Swenshuai.xi 				u8TSClk	=	0xFF;	// parallel	mode:	0x0513 =>	ts_clk=288/(2*(0x16+1))=6.26MHz	//@@++--
831*53ee8cc1Swenshuai.xi 		}
832*53ee8cc1Swenshuai.xi 		bRet=INTERN_DVBT_Serial_Control(bEnable, u8TSClk);
833*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
834*53ee8cc1Swenshuai.xi 		return bRet;
835*53ee8cc1Swenshuai.xi 		*/
836*53ee8cc1Swenshuai.xi }
837*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_SetConfig(DMD_RF_CHANNEL_BANDWIDTH BW,MS_BOOL bSerialTS,MS_BOOL bPalBG)838*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_SetConfig(DMD_RF_CHANNEL_BANDWIDTH BW, MS_BOOL bSerialTS,	MS_BOOL	bPalBG)
839*53ee8cc1Swenshuai.xi {
840*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_SetConfig\n"));
841*53ee8cc1Swenshuai.xi 
842*53ee8cc1Swenshuai.xi 		return MDrv_DMD_DVBT_SetConfigHPLPSetIF(BW,	bSerialTS, bPalBG, 0,	u32DMD_DVBT_IfFrequency, u32DMD_DVBT_FsFrequency,	u8DMD_DVBT_IQSwap);
843*53ee8cc1Swenshuai.xi }
844*53ee8cc1Swenshuai.xi 
845*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_SetConfigHPLP(DMD_RF_CHANNEL_BANDWIDTH BW,MS_BOOL bSerialTS,MS_BOOL bPalBG,MS_BOOL bLPSel)846*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_SetConfigHPLP(DMD_RF_CHANNEL_BANDWIDTH BW, MS_BOOL bSerialTS,	MS_BOOL	bPalBG,	MS_BOOL	bLPSel)
847*53ee8cc1Swenshuai.xi {
848*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_SetConfigHPLP\n"));
849*53ee8cc1Swenshuai.xi 
850*53ee8cc1Swenshuai.xi 		return MDrv_DMD_DVBT_SetConfigHPLPSetIF(BW,	bSerialTS, bPalBG, bLPSel, u32DMD_DVBT_IfFrequency,	u32DMD_DVBT_FsFrequency, u8DMD_DVBT_IQSwap);
851*53ee8cc1Swenshuai.xi }
852*53ee8cc1Swenshuai.xi 
853*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_SetConfigHPLPSetIF(DMD_RF_CHANNEL_BANDWIDTH BW,MS_BOOL bSerialTS,MS_BOOL bPalBG,MS_BOOL bLPSel,MS_U32 u32IFFreq,MS_U32 u32FSFreq,MS_U8 u8IQSwap)854*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_SetConfigHPLPSetIF(DMD_RF_CHANNEL_BANDWIDTH	BW,	MS_BOOL	bSerialTS, MS_BOOL bPalBG, MS_BOOL bLPSel, MS_U32	u32IFFreq, MS_U32	u32FSFreq, MS_U8 u8IQSwap)
855*53ee8cc1Swenshuai.xi {
856*53ee8cc1Swenshuai.xi 	//MS_BOOL	return_val;
857*53ee8cc1Swenshuai.xi 	DVBT_SetConfigHPLPSetIF_PARAM	Drv_DVBT_SetConfigHPLPSetIF_PARAM;
858*53ee8cc1Swenshuai.xi 	Drv_DVBT_SetConfigHPLPSetIF_PARAM.BW=BW;
859*53ee8cc1Swenshuai.xi 			Drv_DVBT_SetConfigHPLPSetIF_PARAM.bSerialTS=bSerialTS;
860*53ee8cc1Swenshuai.xi 			Drv_DVBT_SetConfigHPLPSetIF_PARAM.bPalBG=bPalBG;
861*53ee8cc1Swenshuai.xi 			Drv_DVBT_SetConfigHPLPSetIF_PARAM.bLPSel=bLPSel;
862*53ee8cc1Swenshuai.xi 			Drv_DVBT_SetConfigHPLPSetIF_PARAM.u32IFFreq=u32IFFreq;
863*53ee8cc1Swenshuai.xi 			Drv_DVBT_SetConfigHPLPSetIF_PARAM.u32FSFreq=u32FSFreq;
864*53ee8cc1Swenshuai.xi 			Drv_DVBT_SetConfigHPLPSetIF_PARAM.u8IQSwap=u8IQSwap;
865*53ee8cc1Swenshuai.xi 			Drv_DVBT_SetConfigHPLPSetIF_PARAM.ret=false;
866*53ee8cc1Swenshuai.xi 
867*53ee8cc1Swenshuai.xi 			DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_SetConfigHPLPSetIF\n"));
868*53ee8cc1Swenshuai.xi 
869*53ee8cc1Swenshuai.xi 	if(u32DVBTopen==1)
870*53ee8cc1Swenshuai.xi 		UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_SetConfigHPLPSetIF,	&Drv_DVBT_SetConfigHPLPSetIF_PARAM);
871*53ee8cc1Swenshuai.xi 	else
872*53ee8cc1Swenshuai.xi 		return false;
873*53ee8cc1Swenshuai.xi 
874*53ee8cc1Swenshuai.xi 				return Drv_DVBT_SetConfigHPLPSetIF_PARAM.ret;
875*53ee8cc1Swenshuai.xi 
876*53ee8cc1Swenshuai.xi /*
877*53ee8cc1Swenshuai.xi 		MS_BOOL	bRet;
878*53ee8cc1Swenshuai.xi 		MS_U8	u8TSClk;
879*53ee8cc1Swenshuai.xi 
880*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_SetConfigHPLPSetIF\n"));
881*53ee8cc1Swenshuai.xi 
882*53ee8cc1Swenshuai.xi 		#ifdef MS_DEBUG
883*53ee8cc1Swenshuai.xi 		if (_u8DMDDbgLevel >=	DMD_DBGLV_DEBUG)
884*53ee8cc1Swenshuai.xi 		{
885*53ee8cc1Swenshuai.xi 				ULOGD("DEMOD","MDrv_DMD_DVBT_SetConfigHPLPSetIF	%d %d	%d %d	%ld	%ld	%d\n", BW, bSerialTS,	bPalBG,	bLPSel,	u32IFFreq, u32FSFreq,	u8IQSwap);
886*53ee8cc1Swenshuai.xi 		}
887*53ee8cc1Swenshuai.xi 		#endif
888*53ee8cc1Swenshuai.xi 
889*53ee8cc1Swenshuai.xi 		DMD_LOCK();
890*53ee8cc1Swenshuai.xi 		if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt !=	NULL)
891*53ee8cc1Swenshuai.xi 		{
892*53ee8cc1Swenshuai.xi 				if (_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[0]>=1)
893*53ee8cc1Swenshuai.xi 				{
894*53ee8cc1Swenshuai.xi 						u8TSClk	=	_sDMD_DVBT_InitData.u8DMD_DVBT_InitExt[2]; //	TS_CLK
895*53ee8cc1Swenshuai.xi 				}
896*53ee8cc1Swenshuai.xi 				else
897*53ee8cc1Swenshuai.xi 				{
898*53ee8cc1Swenshuai.xi 						u8TSClk	=	0xFF;	// parallel	mode:	0x0513 =>	ts_clk=288/(2*(0x16+1))=6.26MHz	//@@++--
899*53ee8cc1Swenshuai.xi 				}
900*53ee8cc1Swenshuai.xi 		}
901*53ee8cc1Swenshuai.xi 		else
902*53ee8cc1Swenshuai.xi 		{
903*53ee8cc1Swenshuai.xi 				u8TSClk	=	0xFF;	// parallel	mode:	0x0513 =>	ts_clk=288/(2*(0x16+1))=6.26MHz	//@@++--
904*53ee8cc1Swenshuai.xi 		}
905*53ee8cc1Swenshuai.xi 
906*53ee8cc1Swenshuai.xi 		bRet=INTERN_DVBT_Config(BW,	bSerialTS, bPalBG, bLPSel, u8TSClk,	u32IFFreq, u32FSFreq,	u8IQSwap);
907*53ee8cc1Swenshuai.xi 		eDMD_DVBT_BandWidth=BW;
908*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
909*53ee8cc1Swenshuai.xi 		return bRet;
910*53ee8cc1Swenshuai.xi 
911*53ee8cc1Swenshuai.xi 		*/
912*53ee8cc1Swenshuai.xi }
913*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_SetActive(MS_BOOL bEnable)914*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_SetActive(MS_BOOL	bEnable)
915*53ee8cc1Swenshuai.xi {
916*53ee8cc1Swenshuai.xi 	//MS_BOOL	return_val;
917*53ee8cc1Swenshuai.xi 	DVBT_SetActive_PARAM Drv_DVBT_SetActive_PARAM;
918*53ee8cc1Swenshuai.xi 	Drv_DVBT_SetActive_PARAM.bEnable=bEnable;
919*53ee8cc1Swenshuai.xi 	Drv_DVBT_SetActive_PARAM.ret=false;
920*53ee8cc1Swenshuai.xi 
921*53ee8cc1Swenshuai.xi 			DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_SetActive\n"));
922*53ee8cc1Swenshuai.xi 	if(u32DVBTopen==1)
923*53ee8cc1Swenshuai.xi 		UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_SetActive, &Drv_DVBT_SetActive_PARAM);
924*53ee8cc1Swenshuai.xi 	else
925*53ee8cc1Swenshuai.xi 		return false;
926*53ee8cc1Swenshuai.xi 
927*53ee8cc1Swenshuai.xi 				return Drv_DVBT_SetActive_PARAM.ret;
928*53ee8cc1Swenshuai.xi /*
929*53ee8cc1Swenshuai.xi 		MS_BOOL	bRet;
930*53ee8cc1Swenshuai.xi 
931*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_SetActive\n"));
932*53ee8cc1Swenshuai.xi 
933*53ee8cc1Swenshuai.xi 		#ifdef MS_DEBUG
934*53ee8cc1Swenshuai.xi 		if (_u8DMDDbgLevel >=	DMD_DBGLV_DEBUG)
935*53ee8cc1Swenshuai.xi 		{
936*53ee8cc1Swenshuai.xi 				ULOGD("DEMOD","MDrv_DMD_DVBT_SetActive %d\n",	bEnable);
937*53ee8cc1Swenshuai.xi 		}
938*53ee8cc1Swenshuai.xi 		#endif
939*53ee8cc1Swenshuai.xi 
940*53ee8cc1Swenshuai.xi 		DMD_LOCK();
941*53ee8cc1Swenshuai.xi 		bRet=INTERN_DVBT_Active(bEnable);
942*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
943*53ee8cc1Swenshuai.xi 		return bRet;
944*53ee8cc1Swenshuai.xi  */
945*53ee8cc1Swenshuai.xi 
946*53ee8cc1Swenshuai.xi }
947*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_GetLock(DMD_DVBT_GETLOCK_TYPE eType,DMD_LOCK_STATUS * eLockStatus)948*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetLock(DMD_DVBT_GETLOCK_TYPE	eType, DMD_LOCK_STATUS *eLockStatus)
949*53ee8cc1Swenshuai.xi {
950*53ee8cc1Swenshuai.xi 	//MS_BOOL	return_val;
951*53ee8cc1Swenshuai.xi 	DVBT_GetLock_PARAM Drv_DVBT_GetLock_PARAM;
952*53ee8cc1Swenshuai.xi 	Drv_DVBT_GetLock_PARAM.eType=eType;
953*53ee8cc1Swenshuai.xi 	Drv_DVBT_GetLock_PARAM.eLockStatus=eLockStatus;
954*53ee8cc1Swenshuai.xi 	Drv_DVBT_GetLock_PARAM.ret=false;
955*53ee8cc1Swenshuai.xi 			 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetLock\n"));
956*53ee8cc1Swenshuai.xi 
957*53ee8cc1Swenshuai.xi 	if(u32DVBTopen==1)
958*53ee8cc1Swenshuai.xi 		UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_GetLock, &Drv_DVBT_GetLock_PARAM);
959*53ee8cc1Swenshuai.xi 	else
960*53ee8cc1Swenshuai.xi 		return false;
961*53ee8cc1Swenshuai.xi 
962*53ee8cc1Swenshuai.xi 				return Drv_DVBT_GetLock_PARAM.ret;
963*53ee8cc1Swenshuai.xi }
964*53ee8cc1Swenshuai.xi 
965*53ee8cc1Swenshuai.xi #ifndef	MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBT_GetSignalStrength(MS_U16 * u16Strength)966*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetSignalStrength(MS_U16 *u16Strength)
967*53ee8cc1Swenshuai.xi {
968*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetSignalStrength\n"));
969*53ee8cc1Swenshuai.xi 
970*53ee8cc1Swenshuai.xi 		return MDrv_DMD_DVBT_GetSignalStrengthWithRFPower(u16Strength, 200.0f);
971*53ee8cc1Swenshuai.xi }
972*53ee8cc1Swenshuai.xi #endif
973*53ee8cc1Swenshuai.xi 
974*53ee8cc1Swenshuai.xi #ifndef	MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBT_GetSignalStrengthWithRFPower(MS_U16 * u16Strength,float fRFPowerDbm)975*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetSignalStrengthWithRFPower(MS_U16	*u16Strength,	float	fRFPowerDbm)
976*53ee8cc1Swenshuai.xi {
977*53ee8cc1Swenshuai.xi 
978*53ee8cc1Swenshuai.xi 	MS_BOOL	status = true;
979*53ee8cc1Swenshuai.xi 	DMD_IFAGC_SSI		*ifagc_ssi;
980*53ee8cc1Swenshuai.xi 	DMD_IFAGC_ERR		*ifagc_err;
981*53ee8cc1Swenshuai.xi 	float		ch_power_rf=0.0f;
982*53ee8cc1Swenshuai.xi 	float		ch_power_db=0.0f,	ch_power_db_rel=0.0f;
983*53ee8cc1Swenshuai.xi 	float		ch_power_if=0.0f,	ch_power_ifa = 0.0f, ch_power_ifb	=0.0f;
984*53ee8cc1Swenshuai.xi 	float		ch_power_ref = 11.0f;
985*53ee8cc1Swenshuai.xi 	MS_U16	if_agc_val =0, if_agc_vala =0, if_agc_valb =0, if_agc_val_lsb	=0,	i;
986*53ee8cc1Swenshuai.xi 	float		ch_power_takeover=0.0f;
987*53ee8cc1Swenshuai.xi 	MS_U8		ssi_tbl_len	=	0, err_tbl_len = 0;
988*53ee8cc1Swenshuai.xi 
989*53ee8cc1Swenshuai.xi 	MS_U8	ifagc_reg;
990*53ee8cc1Swenshuai.xi 	MS_U8	ifagc_reg_lsb;
991*53ee8cc1Swenshuai.xi 	MS_U16 ifagc_err_reg;
992*53ee8cc1Swenshuai.xi 	MS_U8		u8_index = 0;
993*53ee8cc1Swenshuai.xi 	MS_U16	tps_info_qam = 0,tps_info_cr = 0;
994*53ee8cc1Swenshuai.xi 
995*53ee8cc1Swenshuai.xi 	//DVBT_GetSignalStrengthWithRFPower_PARAM	Drv_DVBT_GetSignalStrengthWithRFPower_PARAM;
996*53ee8cc1Swenshuai.xi 	//Drv_DVBT_GetSignalStrengthWithRFPower_PARAM.u16Strength=u16Strength;
997*53ee8cc1Swenshuai.xi 	//Drv_DVBT_GetSignalStrengthWithRFPower_PARAM.fRFPowerDbm=fRFPowerDbm;
998*53ee8cc1Swenshuai.xi 
999*53ee8cc1Swenshuai.xi 	DVBT_GetIFAGC_PARAM	Drv_DVBT_GetIFAGC_PARAM;
1000*53ee8cc1Swenshuai.xi 	Drv_DVBT_GetIFAGC_PARAM.ifagc_reg=&ifagc_reg;
1001*53ee8cc1Swenshuai.xi 	Drv_DVBT_GetIFAGC_PARAM.ifagc_reg_lsb=&ifagc_reg_lsb;
1002*53ee8cc1Swenshuai.xi 	Drv_DVBT_GetIFAGC_PARAM.ifagc_err_reg=&ifagc_err_reg;
1003*53ee8cc1Swenshuai.xi 	Drv_DVBT_GetIFAGC_PARAM.ret=false;
1004*53ee8cc1Swenshuai.xi 
1005*53ee8cc1Swenshuai.xi 	if(u32DVBTopen==1)
1006*53ee8cc1Swenshuai.xi 	{
1007*53ee8cc1Swenshuai.xi 		if((AgcSsi_Para.pTuner_IfagcSsi_HiRef	!= NULL) &&	(AgcSsi_Para.pTuner_IfagcSsi_LoRef !=	NULL))
1008*53ee8cc1Swenshuai.xi 		{
1009*53ee8cc1Swenshuai.xi 				UtopiaIoctl(ppDVBTInstant,DMD_DVBT_DRV_CMD_GetIFAGC,&Drv_DVBT_GetIFAGC_PARAM);
1010*53ee8cc1Swenshuai.xi 				status &=	Drv_DVBT_GetIFAGC_PARAM.ret;
1011*53ee8cc1Swenshuai.xi 				ch_power_rf	=	fRFPowerDbm;
1012*53ee8cc1Swenshuai.xi 
1013*53ee8cc1Swenshuai.xi 				if_agc_val = ifagc_reg;
1014*53ee8cc1Swenshuai.xi 				if_agc_val_lsb = ifagc_reg_lsb;
1015*53ee8cc1Swenshuai.xi 
1016*53ee8cc1Swenshuai.xi 				ifagc_ssi	=	AgcSsi_Para.pTuner_IfagcSsi_LoRef;
1017*53ee8cc1Swenshuai.xi 				ssi_tbl_len	=	AgcSsi_Para.u16Tuner_IfagcSsi_LoRef_Size;
1018*53ee8cc1Swenshuai.xi 				ifagc_err	=	AgcSsi_Para.pTuner_IfagcErr_LoRef;
1019*53ee8cc1Swenshuai.xi 				err_tbl_len	=	AgcSsi_Para.u16Tuner_IfagcErr_LoRef_Size;
1020*53ee8cc1Swenshuai.xi 
1021*53ee8cc1Swenshuai.xi 				ch_power_if=ifagc_ssi[0].power_db;
1022*53ee8cc1Swenshuai.xi 				if (if_agc_val >=ifagc_ssi[0].agc_val)
1023*53ee8cc1Swenshuai.xi 				{
1024*53ee8cc1Swenshuai.xi 								for(i	=	1; i < ssi_tbl_len;	i++)
1025*53ee8cc1Swenshuai.xi 								{
1026*53ee8cc1Swenshuai.xi 										if (if_agc_val < ifagc_ssi[i].agc_val)
1027*53ee8cc1Swenshuai.xi 										{
1028*53ee8cc1Swenshuai.xi 												if_agc_valb	=	ifagc_ssi[i].agc_val;
1029*53ee8cc1Swenshuai.xi 												ch_power_ifb = ifagc_ssi[i].power_db;
1030*53ee8cc1Swenshuai.xi 
1031*53ee8cc1Swenshuai.xi 												i--;
1032*53ee8cc1Swenshuai.xi 												if_agc_vala	=	ifagc_ssi[i].agc_val;
1033*53ee8cc1Swenshuai.xi 												ch_power_ifa=ifagc_ssi[i].power_db;
1034*53ee8cc1Swenshuai.xi 												while	((i>1) &&	(if_agc_vala==ifagc_ssi[i-1].agc_val))
1035*53ee8cc1Swenshuai.xi 												{
1036*53ee8cc1Swenshuai.xi 														ch_power_ifa=ifagc_ssi[i-1].power_db;
1037*53ee8cc1Swenshuai.xi 														i--;
1038*53ee8cc1Swenshuai.xi 												}
1039*53ee8cc1Swenshuai.xi 												ch_power_if	=	ch_power_ifa+(ch_power_ifb-ch_power_ifa)*(float)((if_agc_val-if_agc_vala)*256+if_agc_val_lsb)/((if_agc_valb-if_agc_vala)*256);
1040*53ee8cc1Swenshuai.xi 												break;
1041*53ee8cc1Swenshuai.xi 										}
1042*53ee8cc1Swenshuai.xi 								}
1043*53ee8cc1Swenshuai.xi 				}
1044*53ee8cc1Swenshuai.xi 						#ifdef MS_DEBUG
1045*53ee8cc1Swenshuai.xi 						ULOGD("DEMOD","if	prev %f	%x\n", ch_power_ifa, if_agc_vala);
1046*53ee8cc1Swenshuai.xi 						ULOGD("DEMOD","if	next %f	%x\n", ch_power_ifb, if_agc_valb);
1047*53ee8cc1Swenshuai.xi 						#endif
1048*53ee8cc1Swenshuai.xi 
1049*53ee8cc1Swenshuai.xi 						for(i	=	0; i < ssi_tbl_len;	i++)
1050*53ee8cc1Swenshuai.xi 						{
1051*53ee8cc1Swenshuai.xi 								if (ifagc_ssi[i].agc_val <=	ifagc_ssi[i+1].agc_val)
1052*53ee8cc1Swenshuai.xi 								{
1053*53ee8cc1Swenshuai.xi 										ch_power_takeover	=	ifagc_ssi[i+1].power_db;
1054*53ee8cc1Swenshuai.xi 										break;
1055*53ee8cc1Swenshuai.xi 								}
1056*53ee8cc1Swenshuai.xi 						}
1057*53ee8cc1Swenshuai.xi 
1058*53ee8cc1Swenshuai.xi 						#ifdef MS_DEBUG
1059*53ee8cc1Swenshuai.xi 						ULOGD("DEMOD","ch_power_rf = %f\n",	ch_power_rf);
1060*53ee8cc1Swenshuai.xi 						ULOGD("DEMOD","ch_power_if = %f\n",	ch_power_if);
1061*53ee8cc1Swenshuai.xi 						ULOGD("DEMOD","ch_power_takeover = %f\n",	ch_power_takeover);
1062*53ee8cc1Swenshuai.xi 						#endif
1063*53ee8cc1Swenshuai.xi 
1064*53ee8cc1Swenshuai.xi 						// ch_power_db = (ch_power_rf	>	ch_power_if)?	ch_power_rf	:	ch_power_if;
1065*53ee8cc1Swenshuai.xi 
1066*53ee8cc1Swenshuai.xi 						if(ch_power_rf > (ch_power_takeover	+	0.5))
1067*53ee8cc1Swenshuai.xi 						{
1068*53ee8cc1Swenshuai.xi 								ch_power_db	=	ch_power_rf;
1069*53ee8cc1Swenshuai.xi 						}
1070*53ee8cc1Swenshuai.xi 						else if(ch_power_if	<	(ch_power_takeover - 0.5))
1071*53ee8cc1Swenshuai.xi 						{
1072*53ee8cc1Swenshuai.xi 								ch_power_db	=	ch_power_if;
1073*53ee8cc1Swenshuai.xi 						}
1074*53ee8cc1Swenshuai.xi 						else
1075*53ee8cc1Swenshuai.xi 						{
1076*53ee8cc1Swenshuai.xi 								ch_power_db	=	(ch_power_if + ch_power_rf)/2;
1077*53ee8cc1Swenshuai.xi 						}
1078*53ee8cc1Swenshuai.xi 
1079*53ee8cc1Swenshuai.xi 						// ch_power_db = (ch_power_rf	>	ch_power_if)?	ch_power_if	:	ch_power_rf;
1080*53ee8cc1Swenshuai.xi 
1081*53ee8cc1Swenshuai.xi 				if(if_agc_val	== 0xff)
1082*53ee8cc1Swenshuai.xi 				{
1083*53ee8cc1Swenshuai.xi 						for(i	=	0; i < err_tbl_len;	i++)
1084*53ee8cc1Swenshuai.xi 						{
1085*53ee8cc1Swenshuai.xi 										if ( ifagc_err_reg <=	ifagc_err[i].agc_err )				// signed	char comparison
1086*53ee8cc1Swenshuai.xi 										{
1087*53ee8cc1Swenshuai.xi 												ch_power_db	+= ifagc_err[i].attn_db;
1088*53ee8cc1Swenshuai.xi 												break;
1089*53ee8cc1Swenshuai.xi 										}
1090*53ee8cc1Swenshuai.xi 						}
1091*53ee8cc1Swenshuai.xi 						#ifdef MS_DEBUG
1092*53ee8cc1Swenshuai.xi 						ULOGD("DEMOD","if_agc_err	=	0x%x\n", ifagc_err_reg);
1093*53ee8cc1Swenshuai.xi 					 #endif
1094*53ee8cc1Swenshuai.xi 				}
1095*53ee8cc1Swenshuai.xi 		}
1096*53ee8cc1Swenshuai.xi 		else
1097*53ee8cc1Swenshuai.xi 		{
1098*53ee8cc1Swenshuai.xi 				#ifdef MS_DEBUG
1099*53ee8cc1Swenshuai.xi 				if (fRFPowerDbm>=100.0)	// unreasonable	input	value, get RF	level	from RFAGG
1100*53ee8cc1Swenshuai.xi 				{
1101*53ee8cc1Swenshuai.xi 						ULOGD("DEMOD","Error!! please	add	AGC	table\n");
1102*53ee8cc1Swenshuai.xi 				}
1103*53ee8cc1Swenshuai.xi 				#endif
1104*53ee8cc1Swenshuai.xi 				ch_power_db	=	fRFPowerDbm;	// from	tuner
1105*53ee8cc1Swenshuai.xi 		}
1106*53ee8cc1Swenshuai.xi 
1107*53ee8cc1Swenshuai.xi 
1108*53ee8cc1Swenshuai.xi 		 if(INTERN_DVBT_Get_TPS_Parameter_Const(&tps_info_qam, TS_MODUL_MODE)	== FALSE)
1109*53ee8cc1Swenshuai.xi 		 printf("[dvbt]TPS qam parameter retrieve	failure\n");
1110*53ee8cc1Swenshuai.xi 
1111*53ee8cc1Swenshuai.xi 		 if(INTERN_DVBT_Get_TPS_Parameter_Const(&tps_info_cr,	TS_CODE_RATE)	== FALSE)
1112*53ee8cc1Swenshuai.xi 		 printf("[dvbt]TPS cr	parameter	retrieve failure\n");
1113*53ee8cc1Swenshuai.xi 
1114*53ee8cc1Swenshuai.xi 		 while(dvbt_ssi_dbm_nordigp1[u8_index].constel !=	_UNKNOW_QAM)
1115*53ee8cc1Swenshuai.xi 		{
1116*53ee8cc1Swenshuai.xi 				if ( (dvbt_ssi_dbm_nordigp1[u8_index].constel	== (DMD_CONSTEL)tps_info_qam)
1117*53ee8cc1Swenshuai.xi 						&& (dvbt_ssi_dbm_nordigp1[u8_index].code_rate	== (DMD_CODERATE)tps_info_cr))
1118*53ee8cc1Swenshuai.xi 				{
1119*53ee8cc1Swenshuai.xi 					 ch_power_ref	=	dvbt_ssi_dbm_nordigp1[u8_index].p_ref;
1120*53ee8cc1Swenshuai.xi 					 break;
1121*53ee8cc1Swenshuai.xi 				}
1122*53ee8cc1Swenshuai.xi 				else
1123*53ee8cc1Swenshuai.xi 				{
1124*53ee8cc1Swenshuai.xi 					 u8_index++;
1125*53ee8cc1Swenshuai.xi 				}
1126*53ee8cc1Swenshuai.xi 		}
1127*53ee8cc1Swenshuai.xi 
1128*53ee8cc1Swenshuai.xi 		if (ch_power_ref > 10.0f)
1129*53ee8cc1Swenshuai.xi 		*u16Strength = 0;
1130*53ee8cc1Swenshuai.xi 		else
1131*53ee8cc1Swenshuai.xi 		{
1132*53ee8cc1Swenshuai.xi 				ch_power_db_rel	=	ch_power_db	-	ch_power_ref;
1133*53ee8cc1Swenshuai.xi 
1134*53ee8cc1Swenshuai.xi 				if ( ch_power_db_rel < -15.0f	)
1135*53ee8cc1Swenshuai.xi 				{
1136*53ee8cc1Swenshuai.xi 						*u16Strength = 0;
1137*53ee8cc1Swenshuai.xi 				}
1138*53ee8cc1Swenshuai.xi 				else if	(	ch_power_db_rel	<	0.0f )
1139*53ee8cc1Swenshuai.xi 				{
1140*53ee8cc1Swenshuai.xi 						*u16Strength = (MS_U16)(2.0f/3*(ch_power_db_rel	+	15.0f));
1141*53ee8cc1Swenshuai.xi 				}
1142*53ee8cc1Swenshuai.xi 				else if	(	ch_power_db_rel	<	20 )
1143*53ee8cc1Swenshuai.xi 				{
1144*53ee8cc1Swenshuai.xi 						*u16Strength = (MS_U16)(4.0f*ch_power_db_rel + 10.0f);
1145*53ee8cc1Swenshuai.xi 				}
1146*53ee8cc1Swenshuai.xi 				else if	(	ch_power_db_rel	<	35.0f	)
1147*53ee8cc1Swenshuai.xi 				{
1148*53ee8cc1Swenshuai.xi 						*u16Strength = (MS_U16)(2.0f/3*(ch_power_db_rel	-	20.0f) + 90.0f);
1149*53ee8cc1Swenshuai.xi 				}
1150*53ee8cc1Swenshuai.xi 				else
1151*53ee8cc1Swenshuai.xi 				{
1152*53ee8cc1Swenshuai.xi 						*u16Strength = 100;
1153*53ee8cc1Swenshuai.xi 				}
1154*53ee8cc1Swenshuai.xi 		}
1155*53ee8cc1Swenshuai.xi 
1156*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD",">>> SSI_CH_PWR(dB)	=	%f , Score = %d<<<\n", ch_power_db,	*u16Strength));
1157*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD",">>> SSI = %d	<<<\n",	(int)*u16Strength));
1158*53ee8cc1Swenshuai.xi 
1159*53ee8cc1Swenshuai.xi 		return status;
1160*53ee8cc1Swenshuai.xi 	}
1161*53ee8cc1Swenshuai.xi 	else
1162*53ee8cc1Swenshuai.xi 	{
1163*53ee8cc1Swenshuai.xi 		return false;
1164*53ee8cc1Swenshuai.xi 	}
1165*53ee8cc1Swenshuai.xi 
1166*53ee8cc1Swenshuai.xi 	return status;
1167*53ee8cc1Swenshuai.xi 
1168*53ee8cc1Swenshuai.xi }
1169*53ee8cc1Swenshuai.xi #endif
1170*53ee8cc1Swenshuai.xi 
1171*53ee8cc1Swenshuai.xi #ifndef	MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBT_GetSignalQuality(MS_U16 * u16Quality)1172*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetSignalQuality(MS_U16	*u16Quality)
1173*53ee8cc1Swenshuai.xi {
1174*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetSignalQuality\n"));
1175*53ee8cc1Swenshuai.xi 
1176*53ee8cc1Swenshuai.xi 		return MDrv_DMD_DVBT_GetSignalQualityWithRFPower(u16Quality, 200.0f);
1177*53ee8cc1Swenshuai.xi }
1178*53ee8cc1Swenshuai.xi #endif
1179*53ee8cc1Swenshuai.xi 
1180*53ee8cc1Swenshuai.xi #ifndef	MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBT_GetSignalQualityWithRFPower(MS_U16 * u16Quality,float fRFPowerDbm)1181*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetSignalQualityWithRFPower(MS_U16 *u16Quality,	float	fRFPowerDbm)
1182*53ee8cc1Swenshuai.xi {
1183*53ee8cc1Swenshuai.xi 	float		ber_sqi;
1184*53ee8cc1Swenshuai.xi 	float		fber;
1185*53ee8cc1Swenshuai.xi 	float		cn_rec = 0;
1186*53ee8cc1Swenshuai.xi 	float		cn_nordig_p1 = 0;
1187*53ee8cc1Swenshuai.xi 	float		cn_rel = 0;
1188*53ee8cc1Swenshuai.xi 
1189*53ee8cc1Swenshuai.xi 	MS_U8		status = true;
1190*53ee8cc1Swenshuai.xi 	MS_U8		tps_cnstl	=	0, tps_cr	=	0, i = 0;
1191*53ee8cc1Swenshuai.xi 	MS_U16	u16_tmp;
1192*53ee8cc1Swenshuai.xi 	DMD_LOCK_STATUS	eLockStatus = E_DMD_CHECKING;
1193*53ee8cc1Swenshuai.xi 
1194*53ee8cc1Swenshuai.xi 	if(u32DVBTopen==1)
1195*53ee8cc1Swenshuai.xi 	{
1196*53ee8cc1Swenshuai.xi 		MDrv_DMD_DVBT_GetLock(E_DMD_COFDM_FEC_LOCK,	&eLockStatus);
1197*53ee8cc1Swenshuai.xi 		if(E_DMD_LOCK	== eLockStatus)
1198*53ee8cc1Swenshuai.xi 		{
1199*53ee8cc1Swenshuai.xi #if	0
1200*53ee8cc1Swenshuai.xi 			if ( MsOS_Timer_DiffTimeFromNow(u32FecFirstLockTime) < 300)
1201*53ee8cc1Swenshuai.xi 	{
1202*53ee8cc1Swenshuai.xi 		MsOS_DelayTask(300 - MsOS_Timer_DiffTimeFromNow(u32FecFirstLockTime));
1203*53ee8cc1Swenshuai.xi 	}
1204*53ee8cc1Swenshuai.xi #endif
1205*53ee8cc1Swenshuai.xi 				/////////	Get	Pre-RS (Post-Viterbi)	BER	to determine BER_SQI //////////
1206*53ee8cc1Swenshuai.xi 				MDrv_DMD_DVBT_GetPostViterbiBer(&fViterbiBerFiltered);
1207*53ee8cc1Swenshuai.xi 				if(fViterbiBerFiltered<= 0.0)
1208*53ee8cc1Swenshuai.xi 				{
1209*53ee8cc1Swenshuai.xi 						if (MDrv_DMD_DVBT_GetPostViterbiBer(&fber) ==	FALSE)
1210*53ee8cc1Swenshuai.xi 						{
1211*53ee8cc1Swenshuai.xi 								DMD_DBG(ULOGD("DEMOD","MDrv_DMD_DVBT_GetPostViterbiBer \n	"));
1212*53ee8cc1Swenshuai.xi 								return FALSE;
1213*53ee8cc1Swenshuai.xi 						}
1214*53ee8cc1Swenshuai.xi 						fViterbiBerFiltered	=	fber;
1215*53ee8cc1Swenshuai.xi 				}
1216*53ee8cc1Swenshuai.xi 				else
1217*53ee8cc1Swenshuai.xi 				{
1218*53ee8cc1Swenshuai.xi 						fber = fViterbiBerFiltered;
1219*53ee8cc1Swenshuai.xi 				}
1220*53ee8cc1Swenshuai.xi 
1221*53ee8cc1Swenshuai.xi 				if (fber > 1.0E-3)
1222*53ee8cc1Swenshuai.xi 						ber_sqi	=	0.0;
1223*53ee8cc1Swenshuai.xi 				else if	(fber	>	8.5E-7)
1224*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
1225*53ee8cc1Swenshuai.xi 						ber_sqi	=	(log10f(1.0f/fber))*20.0f	-	22.0f;
1226*53ee8cc1Swenshuai.xi #else
1227*53ee8cc1Swenshuai.xi 						ber_sqi	=	(Log10Approx(1.0f/fber))*20.0f - 22.0f;
1228*53ee8cc1Swenshuai.xi #endif
1229*53ee8cc1Swenshuai.xi 				else
1230*53ee8cc1Swenshuai.xi 						ber_sqi	=	100.0;
1231*53ee8cc1Swenshuai.xi 
1232*53ee8cc1Swenshuai.xi 				MDrv_DMD_DVBT_GetSNR(&cn_rec);
1233*53ee8cc1Swenshuai.xi 
1234*53ee8cc1Swenshuai.xi 				if (cn_rec ==	-1)		//get	SNR	return fail
1235*53ee8cc1Swenshuai.xi 						status = false;
1236*53ee8cc1Swenshuai.xi 
1237*53ee8cc1Swenshuai.xi #if	0	// temp	mark
1238*53ee8cc1Swenshuai.xi 				/////////	Get	Constellation	and	Code Rate	to determine Ref.	C/N	//////////
1239*53ee8cc1Swenshuai.xi 				/////////	(refer to	Teracom	min. spec	2.0	4.1.1.7) /////
1240*53ee8cc1Swenshuai.xi 				tps_cnstl	=	0xff;
1241*53ee8cc1Swenshuai.xi 				tps_cr = 0xff;
1242*53ee8cc1Swenshuai.xi 				if(INTERN_DVBT_Get_TPS_Parameter_Const(	&u16_tmp,	TS_MODUL_MODE) ==	TRUE)
1243*53ee8cc1Swenshuai.xi 						tps_cnstl	=	(MS_U8)u16_tmp&0x07;
1244*53ee8cc1Swenshuai.xi 				if(INTERN_DVBT_Get_TPS_Parameter_Const(	&u16_tmp,	TS_CODE_RATE)	== TRUE)
1245*53ee8cc1Swenshuai.xi 						tps_cr = (MS_U8)u16_tmp&0x07;
1246*53ee8cc1Swenshuai.xi 
1247*53ee8cc1Swenshuai.xi 				for(i	=	0; i < sDMD_DVBT_InitData->u16SqiCnNordigP1_Size;	i++)
1248*53ee8cc1Swenshuai.xi 				{
1249*53ee8cc1Swenshuai.xi 						if ( (tps_cnstl	== sDMD_DVBT_InitData->pSqiCnNordigP1[i].constel)
1250*53ee8cc1Swenshuai.xi 						&& (tps_cr ==	sDMD_DVBT_InitData->pSqiCnNordigP1[i].code_rate) )
1251*53ee8cc1Swenshuai.xi 						{
1252*53ee8cc1Swenshuai.xi 								cn_nordig_p1 = sDMD_DVBT_InitData->pSqiCnNordigP1[i].cn_ref;
1253*53ee8cc1Swenshuai.xi 								break;
1254*53ee8cc1Swenshuai.xi 						}
1255*53ee8cc1Swenshuai.xi 				}
1256*53ee8cc1Swenshuai.xi 
1257*53ee8cc1Swenshuai.xi 				// 0,5,	snr	offset
1258*53ee8cc1Swenshuai.xi 				cn_rel = cn_rec	-	cn_nordig_p1 + 0.5f;
1259*53ee8cc1Swenshuai.xi 
1260*53ee8cc1Swenshuai.xi 				// patch....
1261*53ee8cc1Swenshuai.xi 				// Noridg	SQI,
1262*53ee8cc1Swenshuai.xi 				// 64QAM,	CR34,	GI14,	SNR	22dB.
1263*53ee8cc1Swenshuai.xi 				if ( (tps_cnstl	== _64QAM) &&	(tps_cr	== _CR3Y4)
1264*53ee8cc1Swenshuai.xi 						&& (cn_rel < 2.5f) &&	(cn_rel	>	1.5f))
1265*53ee8cc1Swenshuai.xi 				{
1266*53ee8cc1Swenshuai.xi 						cn_rel +=	1.5f;
1267*53ee8cc1Swenshuai.xi 				}
1268*53ee8cc1Swenshuai.xi 
1269*53ee8cc1Swenshuai.xi 				if (cn_rel < -7.0f)
1270*53ee8cc1Swenshuai.xi 				{
1271*53ee8cc1Swenshuai.xi 						*quality = 0;
1272*53ee8cc1Swenshuai.xi 				}
1273*53ee8cc1Swenshuai.xi 				else if	(cn_rel	<	3.0)
1274*53ee8cc1Swenshuai.xi 						*quality = (MS_U16)(ber_sqi*((cn_rel - 3.0)/10.0 + 1.0));
1275*53ee8cc1Swenshuai.xi 				else
1276*53ee8cc1Swenshuai.xi 						*quality = (MS_U16)ber_sqi;
1277*53ee8cc1Swenshuai.xi #else
1278*53ee8cc1Swenshuai.xi 				tps_cnstl	=	0xff;
1279*53ee8cc1Swenshuai.xi 				tps_cr = 0xff;
1280*53ee8cc1Swenshuai.xi 				if(INTERN_DVBT_Get_TPS_Parameter_Const(	&u16_tmp,	TS_MODUL_MODE) ==	TRUE)
1281*53ee8cc1Swenshuai.xi 						tps_cnstl	=	(MS_U8)u16_tmp&0x07;
1282*53ee8cc1Swenshuai.xi 				if(INTERN_DVBT_Get_TPS_Parameter_Const(	&u16_tmp,	TS_CODE_RATE)	== TRUE)
1283*53ee8cc1Swenshuai.xi 						tps_cr = (MS_U8)u16_tmp&0x07;
1284*53ee8cc1Swenshuai.xi 
1285*53ee8cc1Swenshuai.xi 				for(i	=	0; i < (sizeof(SqiCnNordigP1)	/	sizeof(DMD_SQI_CN_NORDIGP1));	i++)
1286*53ee8cc1Swenshuai.xi 				{
1287*53ee8cc1Swenshuai.xi 						if ( (tps_cnstl	== SqiCnNordigP1[i].constel)
1288*53ee8cc1Swenshuai.xi 						&& (tps_cr ==	SqiCnNordigP1[i].code_rate)	)
1289*53ee8cc1Swenshuai.xi 						{
1290*53ee8cc1Swenshuai.xi 								cn_nordig_p1 = SqiCnNordigP1[i].cn_ref;
1291*53ee8cc1Swenshuai.xi 								break;
1292*53ee8cc1Swenshuai.xi 						}
1293*53ee8cc1Swenshuai.xi 				}
1294*53ee8cc1Swenshuai.xi 
1295*53ee8cc1Swenshuai.xi 				cn_rel = cn_rec	-	cn_nordig_p1 + 0.5f;
1296*53ee8cc1Swenshuai.xi 
1297*53ee8cc1Swenshuai.xi 				// patch....
1298*53ee8cc1Swenshuai.xi 				// Noridg	SQI,
1299*53ee8cc1Swenshuai.xi 				// 64QAM,	CR34,	GI14,	SNR	22dB.
1300*53ee8cc1Swenshuai.xi 				if ( (tps_cnstl	== _64QAM) &&	(tps_cr	== _CR3Y4)
1301*53ee8cc1Swenshuai.xi 						&& (cn_rel < 2.5f) &&	(cn_rel	>	1.5f))
1302*53ee8cc1Swenshuai.xi 				{
1303*53ee8cc1Swenshuai.xi 						cn_rel +=	1.5f;
1304*53ee8cc1Swenshuai.xi 				}
1305*53ee8cc1Swenshuai.xi 
1306*53ee8cc1Swenshuai.xi 				if (cn_rel < -7.0f)
1307*53ee8cc1Swenshuai.xi 				{
1308*53ee8cc1Swenshuai.xi 						*u16Quality	=	0;
1309*53ee8cc1Swenshuai.xi 				}
1310*53ee8cc1Swenshuai.xi 				else if	(cn_rel	<	3.0)
1311*53ee8cc1Swenshuai.xi 						*u16Quality	=	(MS_U16)(ber_sqi*((cn_rel	-	3.0)/10.0	+	1.0));
1312*53ee8cc1Swenshuai.xi 				else
1313*53ee8cc1Swenshuai.xi 						*u16Quality	=	(MS_U16)ber_sqi;
1314*53ee8cc1Swenshuai.xi 
1315*53ee8cc1Swenshuai.xi #endif
1316*53ee8cc1Swenshuai.xi 		}
1317*53ee8cc1Swenshuai.xi 		else
1318*53ee8cc1Swenshuai.xi 		{
1319*53ee8cc1Swenshuai.xi 				*u16Quality	=	0;
1320*53ee8cc1Swenshuai.xi 		}
1321*53ee8cc1Swenshuai.xi 
1322*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","BER = %8.3e\n", fber));
1323*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","Signal	Quility	=	%d\n", *u16Quality));
1324*53ee8cc1Swenshuai.xi 
1325*53ee8cc1Swenshuai.xi 		return status;
1326*53ee8cc1Swenshuai.xi 	}
1327*53ee8cc1Swenshuai.xi 
1328*53ee8cc1Swenshuai.xi 	return status;
1329*53ee8cc1Swenshuai.xi }
1330*53ee8cc1Swenshuai.xi #endif
1331*53ee8cc1Swenshuai.xi 
1332*53ee8cc1Swenshuai.xi 
1333*53ee8cc1Swenshuai.xi #ifndef	MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBT_GetSNR(float * fSNR)1334*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetSNR(float *fSNR)
1335*53ee8cc1Swenshuai.xi {
1336*53ee8cc1Swenshuai.xi 
1337*53ee8cc1Swenshuai.xi 	MS_U32 noise_power = 0;
1338*53ee8cc1Swenshuai.xi 
1339*53ee8cc1Swenshuai.xi 	DVBT_GetSNR_PARAM	Drv_DVBT_GetSNR_PARAM;
1340*53ee8cc1Swenshuai.xi 	Drv_DVBT_GetSNR_PARAM.noise_power_reg	=	&noise_power;
1341*53ee8cc1Swenshuai.xi 	Drv_DVBT_GetSNR_PARAM.ret	=	false;
1342*53ee8cc1Swenshuai.xi 
1343*53ee8cc1Swenshuai.xi 			DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetSNR\n"));
1344*53ee8cc1Swenshuai.xi 
1345*53ee8cc1Swenshuai.xi 	if(u32DVBTopen==1)
1346*53ee8cc1Swenshuai.xi 		UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_GetSNR,	&Drv_DVBT_GetSNR_PARAM);
1347*53ee8cc1Swenshuai.xi 	else
1348*53ee8cc1Swenshuai.xi 		return false;
1349*53ee8cc1Swenshuai.xi 
1350*53ee8cc1Swenshuai.xi // caluate snr by	noise	power.
1351*53ee8cc1Swenshuai.xi 
1352*53ee8cc1Swenshuai.xi 			noise_power	=	noise_power/2;
1353*53ee8cc1Swenshuai.xi 			noise_power	/=1280;
1354*53ee8cc1Swenshuai.xi 
1355*53ee8cc1Swenshuai.xi 			if (noise_power==0)//protect value 0
1356*53ee8cc1Swenshuai.xi 				noise_power=1;
1357*53ee8cc1Swenshuai.xi 
1358*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
1359*53ee8cc1Swenshuai.xi 						*fSNR	=	10*log10f((float)noise_power);
1360*53ee8cc1Swenshuai.xi #else
1361*53ee8cc1Swenshuai.xi 						*fSNR	=	10*Log10Approx((float)noise_power);
1362*53ee8cc1Swenshuai.xi #endif
1363*53ee8cc1Swenshuai.xi 
1364*53ee8cc1Swenshuai.xi 		return Drv_DVBT_GetSNR_PARAM.ret;
1365*53ee8cc1Swenshuai.xi }
1366*53ee8cc1Swenshuai.xi #endif
1367*53ee8cc1Swenshuai.xi 
1368*53ee8cc1Swenshuai.xi #ifndef	MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBT_GetPostViterbiBer(float * ber)1369*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetPostViterbiBer(float	*ber)
1370*53ee8cc1Swenshuai.xi {
1371*53ee8cc1Swenshuai.xi 			 //DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetPostViterbiBer\n"));
1372*53ee8cc1Swenshuai.xi 
1373*53ee8cc1Swenshuai.xi 		//MS_BOOL						 status	=	true;
1374*53ee8cc1Swenshuai.xi 		//MS_U8							reg=0, reg_frz=0;
1375*53ee8cc1Swenshuai.xi 		MS_U16						BitErrPeriod;
1376*53ee8cc1Swenshuai.xi 		MS_U32						BitErr;
1377*53ee8cc1Swenshuai.xi 		MS_U16						PktErr;
1378*53ee8cc1Swenshuai.xi 
1379*53ee8cc1Swenshuai.xi 		DVBT_GetPostViterbiBer_PARAM Drv_DVBT_GetPostViterbiBer_PARAM;
1380*53ee8cc1Swenshuai.xi 		Drv_DVBT_GetPostViterbiBer_PARAM.BitErr_reg	=	 &BitErr;
1381*53ee8cc1Swenshuai.xi 		Drv_DVBT_GetPostViterbiBer_PARAM.BitErrPeriod_reg	=	&BitErrPeriod;
1382*53ee8cc1Swenshuai.xi 		Drv_DVBT_GetPostViterbiBer_PARAM.PktErr_reg= &PktErr;
1383*53ee8cc1Swenshuai.xi 		Drv_DVBT_GetPostViterbiBer_PARAM.ret=false;
1384*53ee8cc1Swenshuai.xi 
1385*53ee8cc1Swenshuai.xi 	if(u32DVBTopen==1)
1386*53ee8cc1Swenshuai.xi 	{
1387*53ee8cc1Swenshuai.xi 		UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_GetPostViterbiBer, &Drv_DVBT_GetPostViterbiBer_PARAM);
1388*53ee8cc1Swenshuai.xi 
1389*53ee8cc1Swenshuai.xi 			///////////	Post-Viterbi BER /////////////
1390*53ee8cc1Swenshuai.xi #if	0
1391*53ee8cc1Swenshuai.xi 		if ( MsOS_Timer_DiffTimeFromNow(u32FecFirstLockTime) < 300)
1392*53ee8cc1Swenshuai.xi 		{
1393*53ee8cc1Swenshuai.xi 				*ber = (float)-1.0;
1394*53ee8cc1Swenshuai.xi 				return false;
1395*53ee8cc1Swenshuai.xi 		}
1396*53ee8cc1Swenshuai.xi #endif
1397*53ee8cc1Swenshuai.xi 
1398*53ee8cc1Swenshuai.xi 		if (BitErrPeriod ==	0	)		 //protect 0
1399*53ee8cc1Swenshuai.xi 				BitErrPeriod = 1;
1400*53ee8cc1Swenshuai.xi 
1401*53ee8cc1Swenshuai.xi 		if (BitErr <=0 )
1402*53ee8cc1Swenshuai.xi 				*ber = 0.5f	/	((float)BitErrPeriod*128*188*8);
1403*53ee8cc1Swenshuai.xi 		else
1404*53ee8cc1Swenshuai.xi 				*ber = (float)BitErr / ((float)BitErrPeriod*128*188*8);
1405*53ee8cc1Swenshuai.xi 
1406*53ee8cc1Swenshuai.xi 		//DBG_GET_SIGNAL(ULOGD("DEMOD","INTERN_DVBT	PostVitBER = %8.3e \n	", *ber));
1407*53ee8cc1Swenshuai.xi 		//DBG_GET_SIGNAL(ULOGD("DEMOD","INTERN_DVBT	PktErr = %d	\n ",	(int)PktErr));
1408*53ee8cc1Swenshuai.xi 
1409*53ee8cc1Swenshuai.xi 		return	Drv_DVBT_GetPostViterbiBer_PARAM.ret;
1410*53ee8cc1Swenshuai.xi 
1411*53ee8cc1Swenshuai.xi 	}
1412*53ee8cc1Swenshuai.xi 	else
1413*53ee8cc1Swenshuai.xi 	{
1414*53ee8cc1Swenshuai.xi 		return false;
1415*53ee8cc1Swenshuai.xi 	}
1416*53ee8cc1Swenshuai.xi }
1417*53ee8cc1Swenshuai.xi #endif
1418*53ee8cc1Swenshuai.xi 
1419*53ee8cc1Swenshuai.xi #ifndef	MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBT_GetPreViterbiBer(float * ber)1420*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetPreViterbiBer(float *ber)
1421*53ee8cc1Swenshuai.xi {
1422*53ee8cc1Swenshuai.xi //	 MS_BOOL return_val;
1423*53ee8cc1Swenshuai.xi 	 /*bryan temp	mark*/
1424*53ee8cc1Swenshuai.xi 	 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetPreViterbiBer\n"));
1425*53ee8cc1Swenshuai.xi 
1426*53ee8cc1Swenshuai.xi 	 #if(0)
1427*53ee8cc1Swenshuai.xi 	 DVBT_GetPreViterbiBer_PARAM Drv_DVBT_GetPreViterbiBer_PARAM;
1428*53ee8cc1Swenshuai.xi 	 Drv_DVBT_GetPreViterbiBer_PARAM.ber=ber;
1429*53ee8cc1Swenshuai.xi 	 #endif
1430*53ee8cc1Swenshuai.xi 
1431*53ee8cc1Swenshuai.xi 	 //bryan temp	mark
1432*53ee8cc1Swenshuai.xi 	 #if(0)
1433*53ee8cc1Swenshuai.xi 	 if(u32DVBTopen==1)
1434*53ee8cc1Swenshuai.xi 		UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_GetPreViterbiBer,	&Drv_DVBT_GetPreViterbiBer_PARAM);
1435*53ee8cc1Swenshuai.xi 	 else
1436*53ee8cc1Swenshuai.xi 		return false;
1437*53ee8cc1Swenshuai.xi 
1438*53ee8cc1Swenshuai.xi 		 return	Drv_DVBT_GetPreViterbiBer_PARAM.ret;
1439*53ee8cc1Swenshuai.xi 	 #else
1440*53ee8cc1Swenshuai.xi 		*ber=0;
1441*53ee8cc1Swenshuai.xi 		return true;
1442*53ee8cc1Swenshuai.xi 	 #endif
1443*53ee8cc1Swenshuai.xi 
1444*53ee8cc1Swenshuai.xi 
1445*53ee8cc1Swenshuai.xi /*
1446*53ee8cc1Swenshuai.xi 		MS_BOOL	bRet;
1447*53ee8cc1Swenshuai.xi 
1448*53ee8cc1Swenshuai.xi 		DMD_LOCK();
1449*53ee8cc1Swenshuai.xi 		bRet=INTERN_DVBT_GetPreViterbiBer(ber);
1450*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
1451*53ee8cc1Swenshuai.xi 
1452*53ee8cc1Swenshuai.xi 		return bRet;
1453*53ee8cc1Swenshuai.xi */
1454*53ee8cc1Swenshuai.xi }
1455*53ee8cc1Swenshuai.xi #endif
1456*53ee8cc1Swenshuai.xi 
1457*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_GetPacketErr(MS_U16 * pktErr)1458*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetPacketErr(MS_U16	*pktErr)
1459*53ee8cc1Swenshuai.xi {
1460*53ee8cc1Swenshuai.xi  //	 MS_BOOL return_val;
1461*53ee8cc1Swenshuai.xi 	 DVBT_GetPacketErr_PARAM Drv_DVBT_GetPacketErr_PARAM;
1462*53ee8cc1Swenshuai.xi 	 Drv_DVBT_GetPacketErr_PARAM.pktErr=pktErr;
1463*53ee8cc1Swenshuai.xi 	 Drv_DVBT_GetPacketErr_PARAM.ret=false;
1464*53ee8cc1Swenshuai.xi 
1465*53ee8cc1Swenshuai.xi 	 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetPacketErr\n"));
1466*53ee8cc1Swenshuai.xi 		if(u32DVBTopen==1)
1467*53ee8cc1Swenshuai.xi 		UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_GetPacketErr,	&Drv_DVBT_GetPacketErr_PARAM);
1468*53ee8cc1Swenshuai.xi 		else
1469*53ee8cc1Swenshuai.xi 	return false;
1470*53ee8cc1Swenshuai.xi 
1471*53ee8cc1Swenshuai.xi 	 return	Drv_DVBT_GetPacketErr_PARAM.ret;
1472*53ee8cc1Swenshuai.xi 
1473*53ee8cc1Swenshuai.xi /*
1474*53ee8cc1Swenshuai.xi 		MS_BOOL	bRet;
1475*53ee8cc1Swenshuai.xi 		float		fBER;
1476*53ee8cc1Swenshuai.xi 
1477*53ee8cc1Swenshuai.xi 		DMD_LOCK();
1478*53ee8cc1Swenshuai.xi 		INTERN_DVBT_GetPostViterbiBer(&fBER);
1479*53ee8cc1Swenshuai.xi 		bRet=INTERN_DVBT_GetPacketErr(pktErr);
1480*53ee8cc1Swenshuai.xi 		if ((*pktErr ==1)	&& (fBER<= 0.000001))	// for no	signal case, from	Oga
1481*53ee8cc1Swenshuai.xi 		{
1482*53ee8cc1Swenshuai.xi 				*pktErr	=	0x3FF;
1483*53ee8cc1Swenshuai.xi 		}
1484*53ee8cc1Swenshuai.xi 		#ifdef MS_DEBUG
1485*53ee8cc1Swenshuai.xi 		if (_u8DMDDbgLevel >=	DMD_DBGLV_DEBUG)
1486*53ee8cc1Swenshuai.xi 		{
1487*53ee8cc1Swenshuai.xi 				ULOGD("DEMOD","MDrv_DMD_DVBT_GetPacketErr	%d\n", *pktErr);
1488*53ee8cc1Swenshuai.xi 		}
1489*53ee8cc1Swenshuai.xi 		#endif
1490*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
1491*53ee8cc1Swenshuai.xi 
1492*53ee8cc1Swenshuai.xi 		return bRet;
1493*53ee8cc1Swenshuai.xi */
1494*53ee8cc1Swenshuai.xi }
1495*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_GetTPSInfo(MS_U16 * u16Info)1496*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetTPSInfo(MS_U16	*u16Info)
1497*53ee8cc1Swenshuai.xi {
1498*53ee8cc1Swenshuai.xi 	 //MS_BOOL return_val;
1499*53ee8cc1Swenshuai.xi 	 DVBT_GetTPSInfo_PARAM Drv_DVBT_GetTPSInfo_PARAM;
1500*53ee8cc1Swenshuai.xi 	 Drv_DVBT_GetTPSInfo_PARAM.u16Info=u16Info;
1501*53ee8cc1Swenshuai.xi 	 Drv_DVBT_GetTPSInfo_PARAM.ret=false;
1502*53ee8cc1Swenshuai.xi 
1503*53ee8cc1Swenshuai.xi 	 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetTPSInfo\n"));
1504*53ee8cc1Swenshuai.xi 	 if(u32DVBTopen==1)
1505*53ee8cc1Swenshuai.xi 		UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_GetTPSInfo,	&Drv_DVBT_GetTPSInfo_PARAM);
1506*53ee8cc1Swenshuai.xi 	 else
1507*53ee8cc1Swenshuai.xi 		return false;
1508*53ee8cc1Swenshuai.xi 
1509*53ee8cc1Swenshuai.xi 	 return	Drv_DVBT_GetTPSInfo_PARAM.ret;
1510*53ee8cc1Swenshuai.xi /*
1511*53ee8cc1Swenshuai.xi 		MS_BOOL	bRet;
1512*53ee8cc1Swenshuai.xi 
1513*53ee8cc1Swenshuai.xi 		DMD_LOCK();
1514*53ee8cc1Swenshuai.xi 		bRet=INTERN_DVBT_Get_TPS_Info(u16Info);
1515*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
1516*53ee8cc1Swenshuai.xi 
1517*53ee8cc1Swenshuai.xi 		return bRet;
1518*53ee8cc1Swenshuai.xi */
1519*53ee8cc1Swenshuai.xi }
1520*53ee8cc1Swenshuai.xi 
MDrv_DMD_DVBT_GetCellID(MS_U16 * u16CellID)1521*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetCellID(MS_U16 *u16CellID)
1522*53ee8cc1Swenshuai.xi {
1523*53ee8cc1Swenshuai.xi  //	 MS_BOOL return_val;
1524*53ee8cc1Swenshuai.xi 
1525*53ee8cc1Swenshuai.xi 	 DVBT_GetCellID_PARAM	Drv_DVBT_GetCellID_PARAM;
1526*53ee8cc1Swenshuai.xi 	 Drv_DVBT_GetCellID_PARAM.u16CellID=u16CellID;
1527*53ee8cc1Swenshuai.xi 	 Drv_DVBT_GetCellID_PARAM.ret=false;
1528*53ee8cc1Swenshuai.xi 
1529*53ee8cc1Swenshuai.xi 	 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetCellID\n"));
1530*53ee8cc1Swenshuai.xi 	 if(u32DVBTopen==1)
1531*53ee8cc1Swenshuai.xi 		 UtopiaIoctl(ppDVBTInstant,	DMD_DVBT_DRV_CMD_GetCellID,	&Drv_DVBT_GetCellID_PARAM);
1532*53ee8cc1Swenshuai.xi 	 else
1533*53ee8cc1Swenshuai.xi 				return false;
1534*53ee8cc1Swenshuai.xi 
1535*53ee8cc1Swenshuai.xi 	 return	Drv_DVBT_GetCellID_PARAM.ret;
1536*53ee8cc1Swenshuai.xi 
1537*53ee8cc1Swenshuai.xi /*
1538*53ee8cc1Swenshuai.xi 		MS_BOOL	bRet;
1539*53ee8cc1Swenshuai.xi 
1540*53ee8cc1Swenshuai.xi 		DMD_LOCK();
1541*53ee8cc1Swenshuai.xi 		bRet=INTERN_DVBT_Get_CELL_ID(u16CellID);
1542*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
1543*53ee8cc1Swenshuai.xi 		#ifdef MS_DEBUG
1544*53ee8cc1Swenshuai.xi 		if (_u8DMDDbgLevel >=	DMD_DBGLV_DEBUG)
1545*53ee8cc1Swenshuai.xi 		{
1546*53ee8cc1Swenshuai.xi 				ULOGD("DEMOD","MDrv_DMD_DVBT_GetCellID %d\n",	*u16CellID);
1547*53ee8cc1Swenshuai.xi 		}
1548*53ee8cc1Swenshuai.xi 		#endif
1549*53ee8cc1Swenshuai.xi 		return bRet;
1550*53ee8cc1Swenshuai.xi */
1551*53ee8cc1Swenshuai.xi }
1552*53ee8cc1Swenshuai.xi 
1553*53ee8cc1Swenshuai.xi #ifndef	MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBT_GetFreqOffset(float * pFreqOff)1554*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_GetFreqOffset(float	*pFreqOff)
1555*53ee8cc1Swenshuai.xi {
1556*53ee8cc1Swenshuai.xi 	// MS_BOOL return_val;
1557*53ee8cc1Swenshuai.xi 	/*bryam	temp mark*/
1558*53ee8cc1Swenshuai.xi 	 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_GetFreqOffset\n"));
1559*53ee8cc1Swenshuai.xi 	#if(0)
1560*53ee8cc1Swenshuai.xi 	 DVBT_GetFreqOffset_PARAM	Drv_DVBT_GetFreqOffset_PARAM;
1561*53ee8cc1Swenshuai.xi 	 Drv_DVBT_GetFreqOffset_PARAM.pFreqOff=pFreqOff;
1562*53ee8cc1Swenshuai.xi 		#endif
1563*53ee8cc1Swenshuai.xi 
1564*53ee8cc1Swenshuai.xi 		/*bryan	temp mark*/
1565*53ee8cc1Swenshuai.xi 	 #if(0)
1566*53ee8cc1Swenshuai.xi 	if(u32DVBTopen==1)
1567*53ee8cc1Swenshuai.xi 		 UtopiaIoctl(ppDVBTInstant,	DMD_DVBT_DRV_CMD_GetFreqOffset,	&Drv_DVBT_GetFreqOffset_PARAM);
1568*53ee8cc1Swenshuai.xi 	else
1569*53ee8cc1Swenshuai.xi 		return false;
1570*53ee8cc1Swenshuai.xi 
1571*53ee8cc1Swenshuai.xi 		 return	Drv_DVBT_GetFreqOffset_PARAM.ret;
1572*53ee8cc1Swenshuai.xi 	#else
1573*53ee8cc1Swenshuai.xi 	//Drv_DVBT_GetFreqOffset_PARAM.ret=true;
1574*53ee8cc1Swenshuai.xi 	return true;
1575*53ee8cc1Swenshuai.xi 	#endif
1576*53ee8cc1Swenshuai.xi 
1577*53ee8cc1Swenshuai.xi 
1578*53ee8cc1Swenshuai.xi 
1579*53ee8cc1Swenshuai.xi 
1580*53ee8cc1Swenshuai.xi /*
1581*53ee8cc1Swenshuai.xi 		MS_BOOL	bRet=TRUE;
1582*53ee8cc1Swenshuai.xi 		MS_U8	u8BW=8;
1583*53ee8cc1Swenshuai.xi 
1584*53ee8cc1Swenshuai.xi 		DMD_LOCK();
1585*53ee8cc1Swenshuai.xi 		switch (eDMD_DVBT_BandWidth)
1586*53ee8cc1Swenshuai.xi 		{
1587*53ee8cc1Swenshuai.xi 				case E_DMD_RF_CH_BAND_6MHz:
1588*53ee8cc1Swenshuai.xi 						u8BW=6;
1589*53ee8cc1Swenshuai.xi 						break;
1590*53ee8cc1Swenshuai.xi 
1591*53ee8cc1Swenshuai.xi 				case E_DMD_RF_CH_BAND_7MHz:
1592*53ee8cc1Swenshuai.xi 						u8BW=7;
1593*53ee8cc1Swenshuai.xi 						break;
1594*53ee8cc1Swenshuai.xi 
1595*53ee8cc1Swenshuai.xi 				case E_DMD_RF_CH_BAND_8MHz:
1596*53ee8cc1Swenshuai.xi 				default:
1597*53ee8cc1Swenshuai.xi 						u8BW=8;
1598*53ee8cc1Swenshuai.xi 						break;
1599*53ee8cc1Swenshuai.xi 		}
1600*53ee8cc1Swenshuai.xi 		bRet=INTERN_DVBT_Get_FreqOffset(pFreqOff,	u8BW);
1601*53ee8cc1Swenshuai.xi 		DMD_UNLOCK();
1602*53ee8cc1Swenshuai.xi 
1603*53ee8cc1Swenshuai.xi 		#ifdef MS_DEBUG
1604*53ee8cc1Swenshuai.xi 		if (_u8DMDDbgLevel >=	DMD_DBGLV_DEBUG)
1605*53ee8cc1Swenshuai.xi 		{
1606*53ee8cc1Swenshuai.xi 				ULOGD("DEMOD","MDrv_DMD_DVBT_GetStatus %d	%f\n", u8BW, *pFreqOff);
1607*53ee8cc1Swenshuai.xi 		}
1608*53ee8cc1Swenshuai.xi 		#endif
1609*53ee8cc1Swenshuai.xi 		return bRet;
1610*53ee8cc1Swenshuai.xi */
1611*53ee8cc1Swenshuai.xi }
1612*53ee8cc1Swenshuai.xi #endif
1613*53ee8cc1Swenshuai.xi 
1614*53ee8cc1Swenshuai.xi 
1615*53ee8cc1Swenshuai.xi #ifndef	MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBT_NORDIG_SSI_Table_Write(DMD_CONSTEL constel,DMD_CODERATE code_rate,float write_value)1616*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_NORDIG_SSI_Table_Write(DMD_CONSTEL constel,	DMD_CODERATE code_rate,	float	write_value)
1617*53ee8cc1Swenshuai.xi {
1618*53ee8cc1Swenshuai.xi //	 MS_BOOL return_val;
1619*53ee8cc1Swenshuai.xi 	 DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_NORDIG_SSI_Table_Write\n"));
1620*53ee8cc1Swenshuai.xi 
1621*53ee8cc1Swenshuai.xi 	 /*bryan temp	mark*/
1622*53ee8cc1Swenshuai.xi 	 #if(0)
1623*53ee8cc1Swenshuai.xi 	 DVBT_NORDIGSSITableWrite_PARAM	Drv_DVBT_NORDIGSSITableWrite_PARAM;
1624*53ee8cc1Swenshuai.xi 	 Drv_DVBT_NORDIGSSITableWrite_PARAM.constel=constel;
1625*53ee8cc1Swenshuai.xi 	 Drv_DVBT_NORDIGSSITableWrite_PARAM.code_rate=code_rate;
1626*53ee8cc1Swenshuai.xi 	 Drv_DVBT_NORDIGSSITableWrite_PARAM.write_value=write_value;
1627*53ee8cc1Swenshuai.xi 	 #endif
1628*53ee8cc1Swenshuai.xi 	 //bryan temp	mark
1629*53ee8cc1Swenshuai.xi 	 #if(0)
1630*53ee8cc1Swenshuai.xi 	 if(u32DVBTopen==1)
1631*53ee8cc1Swenshuai.xi 		 UtopiaIoctl(ppDVBTInstant,	DMD_DVBT_DRV_CMD_NORDIGSSITableWrite,	&Drv_DVBT_NORDIGSSITableWrite_PARAM);
1632*53ee8cc1Swenshuai.xi 	 else
1633*53ee8cc1Swenshuai.xi 		return false;
1634*53ee8cc1Swenshuai.xi 
1635*53ee8cc1Swenshuai.xi 			return Drv_DVBT_NORDIGSSITableWrite_PARAM.ret;
1636*53ee8cc1Swenshuai.xi 	 #else
1637*53ee8cc1Swenshuai.xi //			 Drv_DVBT_NORDIGSSITableWrite_PARAM.ret=true;
1638*53ee8cc1Swenshuai.xi 		return true;
1639*53ee8cc1Swenshuai.xi 	 #endif
1640*53ee8cc1Swenshuai.xi 
1641*53ee8cc1Swenshuai.xi 
1642*53ee8cc1Swenshuai.xi 		/*
1643*53ee8cc1Swenshuai.xi 		return INTERN_DVBT_NORDIG_SSI_Table_Write(constel, code_rate,	write_value);
1644*53ee8cc1Swenshuai.xi 		*/
1645*53ee8cc1Swenshuai.xi }
1646*53ee8cc1Swenshuai.xi #endif
1647*53ee8cc1Swenshuai.xi 
1648*53ee8cc1Swenshuai.xi #ifndef	MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBT_NORDIG_SSI_Table_Read(DMD_CONSTEL constel,DMD_CODERATE code_rate,float * read_value)1649*53ee8cc1Swenshuai.xi MS_BOOL	MDrv_DMD_DVBT_NORDIG_SSI_Table_Read(DMD_CONSTEL	constel, DMD_CODERATE	code_rate, float *read_value)
1650*53ee8cc1Swenshuai.xi {
1651*53ee8cc1Swenshuai.xi 		//return INTERN_DVBT_NORDIG_SSI_Table_Read(constel,	code_rate, read_value);
1652*53ee8cc1Swenshuai.xi //	MS_BOOL	return_val;
1653*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_NORDIG_SSI_Table_Read\n"));
1654*53ee8cc1Swenshuai.xi 
1655*53ee8cc1Swenshuai.xi 	/*bryan	temp mark*/
1656*53ee8cc1Swenshuai.xi 	#if(0)
1657*53ee8cc1Swenshuai.xi 	DVBT_NORDIGSSITableRead_PARAM	Drv_DVBT_NORDIGSSITableRead_PARAM;
1658*53ee8cc1Swenshuai.xi 	Drv_DVBT_NORDIGSSITableRead_PARAM.constel=constel;
1659*53ee8cc1Swenshuai.xi 	Drv_DVBT_NORDIGSSITableRead_PARAM.code_rate=code_rate;
1660*53ee8cc1Swenshuai.xi 	Drv_DVBT_NORDIGSSITableRead_PARAM.read_value=read_value;
1661*53ee8cc1Swenshuai.xi 	#endif
1662*53ee8cc1Swenshuai.xi 
1663*53ee8cc1Swenshuai.xi 	//bryan	temp mark
1664*53ee8cc1Swenshuai.xi 	#if(0)
1665*53ee8cc1Swenshuai.xi 	 if(u32DVBTopen==1)
1666*53ee8cc1Swenshuai.xi 		UtopiaIoctl(ppDVBTInstant, DMD_DVBT_DRV_CMD_NORDIGSSITableRead,	&Drv_DVBT_NORDIGSSITableRead_PARAM);
1667*53ee8cc1Swenshuai.xi 	 else
1668*53ee8cc1Swenshuai.xi 		return false;
1669*53ee8cc1Swenshuai.xi 
1670*53ee8cc1Swenshuai.xi 			return Drv_DVBT_NORDIGSSITableRead_PARAM.ret;
1671*53ee8cc1Swenshuai.xi 	 #else
1672*53ee8cc1Swenshuai.xi 		//Drv_DVBT_NORDIGSSITableRead_PARAM.ret=true;
1673*53ee8cc1Swenshuai.xi 		return true;
1674*53ee8cc1Swenshuai.xi 	 #endif
1675*53ee8cc1Swenshuai.xi 
1676*53ee8cc1Swenshuai.xi 
1677*53ee8cc1Swenshuai.xi 
1678*53ee8cc1Swenshuai.xi }
1679*53ee8cc1Swenshuai.xi #endif
MDrv_DMD_DVBT_SetPowerState(EN_POWER_MODE u16PowerState)1680*53ee8cc1Swenshuai.xi MS_U32 MDrv_DMD_DVBT_SetPowerState(EN_POWER_MODE u16PowerState)
1681*53ee8cc1Swenshuai.xi {
1682*53ee8cc1Swenshuai.xi //			MS_BOOL	return_val;
1683*53ee8cc1Swenshuai.xi 		 DVBT_SetPowerState_PARAM	Drv_DVBT_SetPowerState_PARAM;
1684*53ee8cc1Swenshuai.xi 		 Drv_DVBT_SetPowerState_PARAM.u16PowerState=u16PowerState;
1685*53ee8cc1Swenshuai.xi 		 Drv_DVBT_SetPowerState_PARAM.ret=false;
1686*53ee8cc1Swenshuai.xi 
1687*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_SetPowerState\n"));
1688*53ee8cc1Swenshuai.xi 		 if(u32DVBTopen==1)
1689*53ee8cc1Swenshuai.xi 	 UtopiaIoctl(ppDVBTInstant,	DMD_DVBT_DRV_CMD_SetPowerState,	&Drv_DVBT_SetPowerState_PARAM);
1690*53ee8cc1Swenshuai.xi 		 else
1691*53ee8cc1Swenshuai.xi 	 return	false;
1692*53ee8cc1Swenshuai.xi 
1693*53ee8cc1Swenshuai.xi 	 return	Drv_DVBT_SetPowerState_PARAM.ret;
1694*53ee8cc1Swenshuai.xi 	 /*
1695*53ee8cc1Swenshuai.xi 		static EN_POWER_MODE _prev_u16PowerState = E_POWER_MECHANICAL;
1696*53ee8cc1Swenshuai.xi 		MS_U32 u32Return = UTOPIA_STATUS_FAIL;
1697*53ee8cc1Swenshuai.xi 
1698*53ee8cc1Swenshuai.xi 		DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT_SetPowerState\n"));
1699*53ee8cc1Swenshuai.xi 
1700*53ee8cc1Swenshuai.xi 		u32Return	=	u32Return;
1701*53ee8cc1Swenshuai.xi 		if (u16PowerState	== E_POWER_SUSPEND)
1702*53ee8cc1Swenshuai.xi 	{
1703*53ee8cc1Swenshuai.xi 				MDrv_DMD_DVBT_Exit();
1704*53ee8cc1Swenshuai.xi 				_prev_u16PowerState	=	u16PowerState;
1705*53ee8cc1Swenshuai.xi 				u32Return	=	UTOPIA_STATUS_SUCCESS;//SUSPEND_OK;
1706*53ee8cc1Swenshuai.xi 		}
1707*53ee8cc1Swenshuai.xi 		else if	(u16PowerState ==	E_POWER_RESUME)
1708*53ee8cc1Swenshuai.xi 		{
1709*53ee8cc1Swenshuai.xi 				if (_prev_u16PowerState	== E_POWER_SUSPEND)
1710*53ee8cc1Swenshuai.xi 				{
1711*53ee8cc1Swenshuai.xi 						MDrv_DMD_DVBT_Init(&_sDMD_DVBT_InitData, sizeof(_sDMD_DVBT_InitData));
1712*53ee8cc1Swenshuai.xi 						_prev_u16PowerState	=	u16PowerState;
1713*53ee8cc1Swenshuai.xi 						u32Return	=	UTOPIA_STATUS_SUCCESS;//RESUME_OK;
1714*53ee8cc1Swenshuai.xi 				}
1715*53ee8cc1Swenshuai.xi 				else
1716*53ee8cc1Swenshuai.xi 				{
1717*53ee8cc1Swenshuai.xi 						ULOGD("DEMOD","[%s,%5d]It	is not suspended yet.	We shouldn't resume\n",__FUNCTION__,__LINE__);
1718*53ee8cc1Swenshuai.xi 						u32Return	=	UTOPIA_STATUS_FAIL;//SUSPEND_FAILED;
1719*53ee8cc1Swenshuai.xi 				}
1720*53ee8cc1Swenshuai.xi 		}
1721*53ee8cc1Swenshuai.xi 		else
1722*53ee8cc1Swenshuai.xi 		{
1723*53ee8cc1Swenshuai.xi 			ULOGD("DEMOD","[%s,%5d]Do	Nothing: %d\n",__FUNCTION__,__LINE__,u16PowerState);
1724*53ee8cc1Swenshuai.xi 			u32Return	=	FALSE;
1725*53ee8cc1Swenshuai.xi 		}
1726*53ee8cc1Swenshuai.xi 		return UTOPIA_STATUS_SUCCESS;
1727*53ee8cc1Swenshuai.xi 		*/
1728*53ee8cc1Swenshuai.xi }
1729