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