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
115*53ee8cc1Swenshuai.xi #include "MsCommon.h"
116*53ee8cc1Swenshuai.xi #include "MsVersion.h"
117*53ee8cc1Swenshuai.xi #include "MsOS.h"
118*53ee8cc1Swenshuai.xi
119*53ee8cc1Swenshuai.xi // Internal Definition
120*53ee8cc1Swenshuai.xi //#include "regCHIP.h"
121*53ee8cc1Swenshuai.xi //#include "regAVD.h"
122*53ee8cc1Swenshuai.xi //#include "mapi_tuner.h"
123*53ee8cc1Swenshuai.xi #include "drvSYS.h"
124*53ee8cc1Swenshuai.xi #include "drvDMD_VD_MBX.h"
125*53ee8cc1Swenshuai.xi #include "drvDMD_INTERN_DVBT2.h"
126*53ee8cc1Swenshuai.xi #include "drvDMD_INTERN_DVBT2_v2.h"
127*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_DVBT2.h"
128*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_common.h"
129*53ee8cc1Swenshuai.xi #include "../../include/drvSAR.h" // for Utopia2
130*53ee8cc1Swenshuai.xi //#include "../sar/drvSAR.h"
131*53ee8cc1Swenshuai.xi #include "utopia.h"
132*53ee8cc1Swenshuai.xi #include "ULog.h"
133*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
134*53ee8cc1Swenshuai.xi // Driver Compiler Options
135*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
136*53ee8cc1Swenshuai.xi
137*53ee8cc1Swenshuai.xi
138*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
139*53ee8cc1Swenshuai.xi // Local Defines
140*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
141*53ee8cc1Swenshuai.xi #define DVBT2_BER_TH_HY 0.1
142*53ee8cc1Swenshuai.xi static float fBerFilteredDVBT2 = -1.0;
143*53ee8cc1Swenshuai.xi
144*53ee8cc1Swenshuai.xi static float dvbt2_ssi_dbm_nordigp1[][6] =
145*53ee8cc1Swenshuai.xi {
146*53ee8cc1Swenshuai.xi { -95.7, -94.4, -93.6, -92.6, -92.0, -91.5},
147*53ee8cc1Swenshuai.xi { -90.8, -89.1, -87.9, -86.7, -85.8, -85.2},
148*53ee8cc1Swenshuai.xi { -86.9, -84.6, -83.2, -81.4, -80.3, -79.7},
149*53ee8cc1Swenshuai.xi { -83.5, -80.4, -78.6, -76.0, -74.4, -73.3},
150*53ee8cc1Swenshuai.xi };
151*53ee8cc1Swenshuai.xi
152*53ee8cc1Swenshuai.xi // cr, 3/5(1), 2/3(2), 3/4 (3)
153*53ee8cc1Swenshuai.xi float fT2_SSI_formula[][12]=
154*53ee8cc1Swenshuai.xi {
155*53ee8cc1Swenshuai.xi {1.0/5, 97.0, 3.0/2, 82.0, 16.0/5, 50.0, 29.0/10.0, 21.0, 18.0/15, 3.0, 3.0/5, 0.0}, // CR3/5
156*53ee8cc1Swenshuai.xi {2.0/3, 95.0, 9.0/5, 77.0, 17.0/5, 43.0, 14.0/5.0, 15.0, 13.0/15, 2.0, 2.0/5, 0.0}, // CR2/3
157*53ee8cc1Swenshuai.xi {1.0/2, 93.0, 19.0/10, 74.0, 31.0/10, 43.0, 22.0/10.0, 21.0, 18.0/15, 3.0, 3.0/5, 0.0}, // CR3/4
158*53ee8cc1Swenshuai.xi };
159*53ee8cc1Swenshuai.xi
160*53ee8cc1Swenshuai.xi //arthur
161*53ee8cc1Swenshuai.xi static float dvbt2_sqi_db_nordigp1[][6] =
162*53ee8cc1Swenshuai.xi {
163*53ee8cc1Swenshuai.xi { 3.5, 4.7, 5.6, 6.6, 7.2, 7.7},
164*53ee8cc1Swenshuai.xi { 8.7, 10.1, 11.4, 12.5, 13.3, 13.8},
165*53ee8cc1Swenshuai.xi { 13.0, 14.8, 16.2, 17.7, 18.7, 19.4},
166*53ee8cc1Swenshuai.xi { 17.0, 19.4, 20.8, 22.9, 24.3, 25.1},
167*53ee8cc1Swenshuai.xi };
168*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
169*53ee8cc1Swenshuai.xi // Local Structurs
170*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
171*53ee8cc1Swenshuai.xi
172*53ee8cc1Swenshuai.xi
173*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
174*53ee8cc1Swenshuai.xi // Global Variables
175*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
176*53ee8cc1Swenshuai.xi #define DMD_LOCK() \
177*53ee8cc1Swenshuai.xi do{ \
178*53ee8cc1Swenshuai.xi MS_ASSERT(MsOS_In_Interrupt() == FALSE); \
179*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel == DMD_T2_DBGLV_DEBUG) printf("%s lock mutex\n", __FUNCTION__);\
180*53ee8cc1Swenshuai.xi MsOS_ObtainMutex(_s32DMD_DVBT2_Mutex, MSOS_WAIT_FOREVER);\
181*53ee8cc1Swenshuai.xi }while(0)
182*53ee8cc1Swenshuai.xi
183*53ee8cc1Swenshuai.xi #define DMD_UNLOCK() \
184*53ee8cc1Swenshuai.xi do{ \
185*53ee8cc1Swenshuai.xi MsOS_ReleaseMutex(_s32DMD_DVBT2_Mutex);\
186*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel == DMD_T2_DBGLV_DEBUG) printf("%s unlock mutex\n", __FUNCTION__); \
187*53ee8cc1Swenshuai.xi }while(0)
188*53ee8cc1Swenshuai.xi
189*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
190*53ee8cc1Swenshuai.xi // Local Variables
191*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
192*53ee8cc1Swenshuai.xi #if 1
193*53ee8cc1Swenshuai.xi /*static MSIF_Version _drv_dmd_dvbt2_intern_version = {
194*53ee8cc1Swenshuai.xi .MW = { DMD_DVBT2_INTERN_VER, },
195*53ee8cc1Swenshuai.xi };*/
196*53ee8cc1Swenshuai.xi #else
197*53ee8cc1Swenshuai.xi static MSIF_Version _drv_dmd_dvbt_intern_version;
198*53ee8cc1Swenshuai.xi #endif
199*53ee8cc1Swenshuai.xi
200*53ee8cc1Swenshuai.xi #if 0
201*53ee8cc1Swenshuai.xi //static DMD_DVBT2_InitData _sDMD_DVBT2_InitData;
202*53ee8cc1Swenshuai.xi static DMD_DVBT2_InitData_Transform _sDMD_DVBT2_InitData;
203*53ee8cc1Swenshuai.xi static DMD_T2_DbgLv _u8DMDDbgLevel=DMD_T2_DBGLV_NONE;
204*53ee8cc1Swenshuai.xi static MS_S32 _s32DMD_DVBT2_Mutex=-1;
205*53ee8cc1Swenshuai.xi static DMD_DVBT2_Info sDMD_DVBT2_Info;
206*53ee8cc1Swenshuai.xi //static MS_U16 u16DMD_DVBT2_P1_Timeout = 600, u16DMD_DVBT2_FEC_Timeout=6000;
207*53ee8cc1Swenshuai.xi static MS_U16 u16DMD_DVBT2_P1_Timeout = 1000, u16DMD_DVBT2_FEC_Timeout=6000;
208*53ee8cc1Swenshuai.xi static MS_U32 u32DMD_DVBT2_IfFrequency = 5000L, u32DMD_DVBT2_FsFrequency = 24000L;
209*53ee8cc1Swenshuai.xi //static MS_U8 u8DMD_DVBT2_IQSwap=0;
210*53ee8cc1Swenshuai.xi static DMD_DVBT2_RF_CHANNEL_BANDWIDTH eDMD_DVBT2_BandWidth=E_DMD_T2_RF_BAND_8MHz;
211*53ee8cc1Swenshuai.xi MS_U32 u32DMD_DVBT2_DRAM_START_ADDR;
212*53ee8cc1Swenshuai.xi MS_U32 u32DMD_DVBT2_EQ_START_ADDR;
213*53ee8cc1Swenshuai.xi MS_U32 u32DMD_DVBT2_TDI_START_ADDR;
214*53ee8cc1Swenshuai.xi MS_U32 u32DMD_DVBT2_DJB_START_ADDR;
215*53ee8cc1Swenshuai.xi MS_U32 u32DMD_DVBT2_FW_START_ADDR;
216*53ee8cc1Swenshuai.xi #endif
217*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
218*53ee8cc1Swenshuai.xi // Debug Functions
219*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
220*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
221*53ee8cc1Swenshuai.xi #define DMD_DBG(x) (x)
222*53ee8cc1Swenshuai.xi #else
223*53ee8cc1Swenshuai.xi #define DMD_DBG(x) (x)
224*53ee8cc1Swenshuai.xi #endif
225*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
226*53ee8cc1Swenshuai.xi // Local Functions
227*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
228*53ee8cc1Swenshuai.xi static void* ppDVBT2Instant = NULL;
229*53ee8cc1Swenshuai.xi static MS_U32 u32DVBT2open = 0;
230*53ee8cc1Swenshuai.xi static MS_U8 u8DVBT2UtopiaOpen = 0; //for SetStillImagePara is earlier called than Init
231*53ee8cc1Swenshuai.xi
232*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
233*53ee8cc1Swenshuai.xi // Global Functions
234*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_DMD_DVBT2_Init(DMD_DVBT2_InitData * pDMD_DVBT2_InitData,MS_U32 u32InitDataLen)235*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_Init(DMD_DVBT2_InitData *pDMD_DVBT2_InitData, MS_U32 u32InitDataLen)
236*53ee8cc1Swenshuai.xi {
237*53ee8cc1Swenshuai.xi void* pAttribte = NULL;
238*53ee8cc1Swenshuai.xi
239*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_Init\n"));
240*53ee8cc1Swenshuai.xi
241*53ee8cc1Swenshuai.xi DVBT2_INIT_PARAM Drv_DVBT2_INIT_PARAM;
242*53ee8cc1Swenshuai.xi DMD_DVBT2_InitData_Transform Init_Para_Temp;
243*53ee8cc1Swenshuai.xi Drv_DVBT2_INIT_PARAM.ret=false;
244*53ee8cc1Swenshuai.xi
245*53ee8cc1Swenshuai.xi Init_Para_Temp.u8DMD_DVBT2_DSPRegInitExt=pDMD_DVBT2_InitData->u8DMD_DVBT2_DSPRegInitExt;
246*53ee8cc1Swenshuai.xi Init_Para_Temp.u8DMD_DVBT2_DSPRegInitSize=pDMD_DVBT2_InitData->u8DMD_DVBT2_DSPRegInitSize;
247*53ee8cc1Swenshuai.xi Init_Para_Temp.u8DMD_DVBT2_InitExt=pDMD_DVBT2_InitData->u8DMD_DVBT2_InitExt;
248*53ee8cc1Swenshuai.xi Init_Para_Temp.u8SarChannel=pDMD_DVBT2_InitData->u8SarChannel;
249*53ee8cc1Swenshuai.xi Init_Para_Temp.u32EqStartAddr=pDMD_DVBT2_InitData->u32EqStartAddr;
250*53ee8cc1Swenshuai.xi Init_Para_Temp.u32TdiStartAddr=pDMD_DVBT2_InitData->u32TdiStartAddr;
251*53ee8cc1Swenshuai.xi Init_Para_Temp.u32DjbStartAddr=pDMD_DVBT2_InitData->u32DjbStartAddr;
252*53ee8cc1Swenshuai.xi Init_Para_Temp.u32FwStartAddr=pDMD_DVBT2_InitData->u32FwStartAddr;
253*53ee8cc1Swenshuai.xi
254*53ee8cc1Swenshuai.xi Drv_DVBT2_INIT_PARAM.pDMD_DVBT2_InitData=&Init_Para_Temp;
255*53ee8cc1Swenshuai.xi Drv_DVBT2_INIT_PARAM.u32InitDataLen=sizeof(Init_Para_Temp);
256*53ee8cc1Swenshuai.xi
257*53ee8cc1Swenshuai.xi if(u8DVBT2UtopiaOpen == 0) // First time open
258*53ee8cc1Swenshuai.xi {
259*53ee8cc1Swenshuai.xi if(UtopiaOpen(MODULE_DVBT2/*|KERNEL_MODE*/ , &ppDVBT2Instant, 0, pAttribte) == UTOPIA_STATUS_SUCCESS) //kernel space
260*53ee8cc1Swenshuai.xi //if(UtopiaOpen(MODULE_DVBT , &ppDVBTInstant, 0, pAttribte) == UTOPIA_STATUS_SUCCESS) //user space
261*53ee8cc1Swenshuai.xi {
262*53ee8cc1Swenshuai.xi u32DVBT2open = 1;
263*53ee8cc1Swenshuai.xi // DMD_DBG(ULOGD("DEMOD","\r\n ======== DVBT2 Open Successful %x =========", (WORD)u32DVBT2open));
264*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","\r\n ======== DVBT2 Open Successful ========= \n"));
265*53ee8cc1Swenshuai.xi }
266*53ee8cc1Swenshuai.xi else
267*53ee8cc1Swenshuai.xi {
268*53ee8cc1Swenshuai.xi // DMD_DBG(ULOGD("DEMOD","\r\n ======== DVBT2 Open Fail %x =========", (WORD)u32DVBT2open));
269*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","\r\n ======== DVBT2 Open Fail =========\n"));
270*53ee8cc1Swenshuai.xi return false;
271*53ee8cc1Swenshuai.xi }
272*53ee8cc1Swenshuai.xi
273*53ee8cc1Swenshuai.xi u8DVBT2UtopiaOpen = 1;
274*53ee8cc1Swenshuai.xi }
275*53ee8cc1Swenshuai.xi
276*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant,DMD_DVBT2_DRV_CMD_Init,&Drv_DVBT2_INIT_PARAM);
277*53ee8cc1Swenshuai.xi return Drv_DVBT2_INIT_PARAM.ret;
278*53ee8cc1Swenshuai.xi
279*53ee8cc1Swenshuai.xi #if 0
280*53ee8cc1Swenshuai.xi char pDMD_DVBT2_MutexString[16];
281*53ee8cc1Swenshuai.xi MS_U8 u8ADCIQMode = 0, u8PadSel = 0, bPGAEnable = 0, u8PGAGain = 5;
282*53ee8cc1Swenshuai.xi MS_BOOL bRFAGCTristateEnable = 1;
283*53ee8cc1Swenshuai.xi MS_BOOL bIFAGCTristateEnable = 0;
284*53ee8cc1Swenshuai.xi
285*53ee8cc1Swenshuai.xi if (_s32DMD_DVBT2_Mutex != -1)
286*53ee8cc1Swenshuai.xi {
287*53ee8cc1Swenshuai.xi DMD_DBG(printf("MDrv_DMD_DVBT2_Init more than once\n"));
288*53ee8cc1Swenshuai.xi return FALSE;
289*53ee8cc1Swenshuai.xi }
290*53ee8cc1Swenshuai.xi
291*53ee8cc1Swenshuai.xi if (NULL == strncpy(pDMD_DVBT2_MutexString,"Mutex DMD DVBT2",16))
292*53ee8cc1Swenshuai.xi {
293*53ee8cc1Swenshuai.xi DMD_DBG(printf("MDrv_DMD_DVBT2_Init strcpy Fail\n"));
294*53ee8cc1Swenshuai.xi return FALSE;
295*53ee8cc1Swenshuai.xi }
296*53ee8cc1Swenshuai.xi _s32DMD_DVBT2_Mutex = MsOS_CreateMutex(E_MSOS_FIFO, pDMD_DVBT2_MutexString, MSOS_PROCESS_SHARED);
297*53ee8cc1Swenshuai.xi if (_s32DMD_DVBT2_Mutex == -1)
298*53ee8cc1Swenshuai.xi {
299*53ee8cc1Swenshuai.xi DMD_DBG(printf("MDrv_DMD_DVBT2_Init Create Mutex Fail\n"));
300*53ee8cc1Swenshuai.xi return FALSE;
301*53ee8cc1Swenshuai.xi }
302*53ee8cc1Swenshuai.xi //_u8DMDDbgLevel = DMD_DBGLV_DEBUG;
303*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
304*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel >= DMD_T2_DBGLV_INFO)
305*53ee8cc1Swenshuai.xi {
306*53ee8cc1Swenshuai.xi printf("MDrv_DMD_DVBT2_Init\n");
307*53ee8cc1Swenshuai.xi }
308*53ee8cc1Swenshuai.xi #endif
309*53ee8cc1Swenshuai.xi
310*53ee8cc1Swenshuai.xi if ( sizeof(_sDMD_DVBT2_InitData) == u32InitDataLen)
311*53ee8cc1Swenshuai.xi {
312*53ee8cc1Swenshuai.xi memcpy(&_sDMD_DVBT2_InitData, pDMD_DVBT2_InitData, u32InitDataLen);
313*53ee8cc1Swenshuai.xi }
314*53ee8cc1Swenshuai.xi else
315*53ee8cc1Swenshuai.xi {
316*53ee8cc1Swenshuai.xi DMD_DBG(printf("MDrv_DMD_DVBT2_Init input data structure incorrect\n"));
317*53ee8cc1Swenshuai.xi return FALSE;
318*53ee8cc1Swenshuai.xi }
319*53ee8cc1Swenshuai.xi
320*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8SarChannel != 0xFF)
321*53ee8cc1Swenshuai.xi {
322*53ee8cc1Swenshuai.xi MDrv_SAR_Adc_Config(_sDMD_DVBT2_InitData.u8SarChannel, TRUE);
323*53ee8cc1Swenshuai.xi }
324*53ee8cc1Swenshuai.xi
325*53ee8cc1Swenshuai.xi DMD_LOCK();
326*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_SetType(E_DMD_VD_MBX_TYPE_DVBT2);
327*53ee8cc1Swenshuai.xi HAL_DMD_RegInit();
328*53ee8cc1Swenshuai.xi
329*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt != NULL)
330*53ee8cc1Swenshuai.xi {
331*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[0]>=2)
332*53ee8cc1Swenshuai.xi {
333*53ee8cc1Swenshuai.xi bRFAGCTristateEnable = (_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[3] & (BIT_(0))) ? TRUE : FALSE; // RFAGC tristate control
334*53ee8cc1Swenshuai.xi bIFAGCTristateEnable = (_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[3] & (BIT_(4))) ? TRUE : FALSE; // IFAGC tristate control
335*53ee8cc1Swenshuai.xi }
336*53ee8cc1Swenshuai.xi else
337*53ee8cc1Swenshuai.xi {
338*53ee8cc1Swenshuai.xi bRFAGCTristateEnable = 1;
339*53ee8cc1Swenshuai.xi bIFAGCTristateEnable = 0;
340*53ee8cc1Swenshuai.xi }
341*53ee8cc1Swenshuai.xi }
342*53ee8cc1Swenshuai.xi else
343*53ee8cc1Swenshuai.xi {
344*53ee8cc1Swenshuai.xi bRFAGCTristateEnable = 1;
345*53ee8cc1Swenshuai.xi bIFAGCTristateEnable = 0;
346*53ee8cc1Swenshuai.xi }
347*53ee8cc1Swenshuai.xi
348*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt != NULL)
349*53ee8cc1Swenshuai.xi {
350*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[0]>=3)
351*53ee8cc1Swenshuai.xi {
352*53ee8cc1Swenshuai.xi u32DMD_DVBT2_IfFrequency = _sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[4]; // IF frequency
353*53ee8cc1Swenshuai.xi u32DMD_DVBT2_IfFrequency = (u32DMD_DVBT2_IfFrequency<<8)+_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[5]; // IF frequency
354*53ee8cc1Swenshuai.xi u32DMD_DVBT2_IfFrequency = (u32DMD_DVBT2_IfFrequency<<8)+_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[6]; // IF frequency
355*53ee8cc1Swenshuai.xi u32DMD_DVBT2_IfFrequency = (u32DMD_DVBT2_IfFrequency<<8)+_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[7]; // IF frequency
356*53ee8cc1Swenshuai.xi u32DMD_DVBT2_FsFrequency = _sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[8]; // FS frequency
357*53ee8cc1Swenshuai.xi u32DMD_DVBT2_FsFrequency = (u32DMD_DVBT2_FsFrequency<<8)+_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[9]; // FS frequency
358*53ee8cc1Swenshuai.xi u32DMD_DVBT2_FsFrequency = (u32DMD_DVBT2_FsFrequency<<8)+_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[10]; // FS frequency
359*53ee8cc1Swenshuai.xi u32DMD_DVBT2_FsFrequency = (u32DMD_DVBT2_FsFrequency<<8)+_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[11]; // FS frequency
360*53ee8cc1Swenshuai.xi //u8DMD_DVBT2_IQSwap = _sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[12]; // IQ Swap
361*53ee8cc1Swenshuai.xi
362*53ee8cc1Swenshuai.xi u8ADCIQMode = _sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[13]; // u8ADCIQMode : 0=I path, 1=Q path, 2=both IQ
363*53ee8cc1Swenshuai.xi u8PadSel = _sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[14]; // u8PadSel : 0=Normal, 1=analog pad
364*53ee8cc1Swenshuai.xi bPGAEnable = _sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[15]; // bPGAEnable : 0=disable, 1=enable
365*53ee8cc1Swenshuai.xi u8PGAGain = _sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[16]; // u8PGAGain : default 5
366*53ee8cc1Swenshuai.xi }
367*53ee8cc1Swenshuai.xi else
368*53ee8cc1Swenshuai.xi {
369*53ee8cc1Swenshuai.xi
370*53ee8cc1Swenshuai.xi }
371*53ee8cc1Swenshuai.xi }
372*53ee8cc1Swenshuai.xi else
373*53ee8cc1Swenshuai.xi {
374*53ee8cc1Swenshuai.xi
375*53ee8cc1Swenshuai.xi }
376*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
377*53ee8cc1Swenshuai.xi printf("u32DMD_DVBT2_IfFrequency %ld\n",u32DMD_DVBT2_IfFrequency);
378*53ee8cc1Swenshuai.xi printf("u32DMD_DVBT2_FsFrequency %ld\n",u32DMD_DVBT2_FsFrequency);
379*53ee8cc1Swenshuai.xi #endif
380*53ee8cc1Swenshuai.xi
381*53ee8cc1Swenshuai.xi u16DMD_DVBT2_P1_Timeout = 1000; //600;
382*53ee8cc1Swenshuai.xi u16DMD_DVBT2_FEC_Timeout = 6000;
383*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt != NULL)
384*53ee8cc1Swenshuai.xi {
385*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[0]>=4)
386*53ee8cc1Swenshuai.xi {
387*53ee8cc1Swenshuai.xi u16DMD_DVBT2_P1_Timeout = _sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[17]; // P1 timeout in ms
388*53ee8cc1Swenshuai.xi u16DMD_DVBT2_P1_Timeout = (u16DMD_DVBT2_P1_Timeout<<8)+_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[18];
389*53ee8cc1Swenshuai.xi if (u16DMD_DVBT2_P1_Timeout < 600) u16DMD_DVBT2_P1_Timeout=600;
390*53ee8cc1Swenshuai.xi //printf("u16DMD_DVBT2_P1_Timeout %d\n",u16DMD_DVBT2_P1_Timeout);
391*53ee8cc1Swenshuai.xi
392*53ee8cc1Swenshuai.xi u16DMD_DVBT2_FEC_Timeout = _sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[19]; // FEC timeout in ms
393*53ee8cc1Swenshuai.xi u16DMD_DVBT2_FEC_Timeout = (u16DMD_DVBT2_FEC_Timeout<<8)+_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[20];
394*53ee8cc1Swenshuai.xi if (u16DMD_DVBT2_FEC_Timeout < 6000) u16DMD_DVBT2_FEC_Timeout=6000;
395*53ee8cc1Swenshuai.xi //printf("u16DMD_DVBT2_FEC_Timeout %d\n",u16DMD_DVBT2_FEC_Timeout);
396*53ee8cc1Swenshuai.xi }
397*53ee8cc1Swenshuai.xi else
398*53ee8cc1Swenshuai.xi {
399*53ee8cc1Swenshuai.xi }
400*53ee8cc1Swenshuai.xi }
401*53ee8cc1Swenshuai.xi else
402*53ee8cc1Swenshuai.xi {
403*53ee8cc1Swenshuai.xi }
404*53ee8cc1Swenshuai.xi
405*53ee8cc1Swenshuai.xi //u32DMD_DVBT2_DRAM_START_ADDR = _sDMD_DVBT2_InitData.u32DramStartAddr;
406*53ee8cc1Swenshuai.xi u32DMD_DVBT2_EQ_START_ADDR = _sDMD_DVBT2_InitData.u32EqStartAddr;
407*53ee8cc1Swenshuai.xi u32DMD_DVBT2_TDI_START_ADDR = _sDMD_DVBT2_InitData.u32TdiStartAddr;
408*53ee8cc1Swenshuai.xi u32DMD_DVBT2_DJB_START_ADDR = _sDMD_DVBT2_InitData.u32DjbStartAddr;
409*53ee8cc1Swenshuai.xi u32DMD_DVBT2_FW_START_ADDR = _sDMD_DVBT2_InitData.u32FwStartAddr;
410*53ee8cc1Swenshuai.xi
411*53ee8cc1Swenshuai.xi if (bIFAGCTristateEnable)
412*53ee8cc1Swenshuai.xi {
413*53ee8cc1Swenshuai.xi MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET_ALL_OFF);
414*53ee8cc1Swenshuai.xi }
415*53ee8cc1Swenshuai.xi else
416*53ee8cc1Swenshuai.xi {
417*53ee8cc1Swenshuai.xi MDrv_SYS_SetAGCPadMux(E_SYS_DTV_AGC_PAD_SET);
418*53ee8cc1Swenshuai.xi }
419*53ee8cc1Swenshuai.xi
420*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8DMD_DVBT2_DSPRegInitExt != NULL)
421*53ee8cc1Swenshuai.xi {
422*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8DMD_DVBT2_DSPRegInitExt[0]>=1)
423*53ee8cc1Swenshuai.xi {
424*53ee8cc1Swenshuai.xi INTERN_DVBT2_Power_On_Initialization(bRFAGCTristateEnable, u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain, _sDMD_DVBT2_InitData.u8DMD_DVBT2_DSPRegInitExt, _sDMD_DVBT2_InitData.u8DMD_DVBT2_DSPRegInitSize);
425*53ee8cc1Swenshuai.xi }
426*53ee8cc1Swenshuai.xi else
427*53ee8cc1Swenshuai.xi {
428*53ee8cc1Swenshuai.xi printf("u8DMD_DVBT2_DSPRegInitExt Error\n");
429*53ee8cc1Swenshuai.xi }
430*53ee8cc1Swenshuai.xi }
431*53ee8cc1Swenshuai.xi else
432*53ee8cc1Swenshuai.xi {
433*53ee8cc1Swenshuai.xi INTERN_DVBT2_Power_On_Initialization(bRFAGCTristateEnable, u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain, NULL, 0);
434*53ee8cc1Swenshuai.xi }
435*53ee8cc1Swenshuai.xi
436*53ee8cc1Swenshuai.xi INTERN_DVBT2_Version(&sDMD_DVBT2_Info.u16Version);
437*53ee8cc1Swenshuai.xi DMD_UNLOCK();
438*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
439*53ee8cc1Swenshuai.xi printf("firmware version: %x\n",sDMD_DVBT2_Info.u16Version);
440*53ee8cc1Swenshuai.xi #endif
441*53ee8cc1Swenshuai.xi return TRUE;
442*53ee8cc1Swenshuai.xi #endif
443*53ee8cc1Swenshuai.xi }
444*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_Exit(void)445*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_Exit(void)
446*53ee8cc1Swenshuai.xi {
447*53ee8cc1Swenshuai.xi DVBT2_EXIT_PARAM Drv_DVBT2_EXIT_PARAM;
448*53ee8cc1Swenshuai.xi Drv_DVBT2_EXIT_PARAM.ret=false;
449*53ee8cc1Swenshuai.xi
450*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_Exit\n"));
451*53ee8cc1Swenshuai.xi
452*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
453*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_Exit, &Drv_DVBT2_EXIT_PARAM);
454*53ee8cc1Swenshuai.xi else
455*53ee8cc1Swenshuai.xi return false;
456*53ee8cc1Swenshuai.xi
457*53ee8cc1Swenshuai.xi return Drv_DVBT2_EXIT_PARAM.ret;
458*53ee8cc1Swenshuai.xi #if 0
459*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
460*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel >= DMD_T2_DBGLV_DEBUG)
461*53ee8cc1Swenshuai.xi {
462*53ee8cc1Swenshuai.xi printf("MDrv_DMD_DVBT2_Exit\n");
463*53ee8cc1Swenshuai.xi }
464*53ee8cc1Swenshuai.xi #endif
465*53ee8cc1Swenshuai.xi DMD_LOCK();
466*53ee8cc1Swenshuai.xi INTERN_DVBT2_Exit();
467*53ee8cc1Swenshuai.xi DMD_UNLOCK();
468*53ee8cc1Swenshuai.xi MsOS_DeleteMutex(_s32DMD_DVBT2_Mutex);
469*53ee8cc1Swenshuai.xi _s32DMD_DVBT2_Mutex= -1;
470*53ee8cc1Swenshuai.xi return TRUE;
471*53ee8cc1Swenshuai.xi #endif
472*53ee8cc1Swenshuai.xi }
473*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_SetDbgLevel(DMD_T2_DbgLv u8DbgLevel)474*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_SetDbgLevel(DMD_T2_DbgLv u8DbgLevel)
475*53ee8cc1Swenshuai.xi {
476*53ee8cc1Swenshuai.xi DVBT2_SETDBGLEVEL_PARAM Drv_DVBT2_SETDBG_LEVEL_PARAM;
477*53ee8cc1Swenshuai.xi Drv_DVBT2_SETDBG_LEVEL_PARAM.u8DbgLevel=u8DbgLevel;
478*53ee8cc1Swenshuai.xi Drv_DVBT2_SETDBG_LEVEL_PARAM.ret=false;
479*53ee8cc1Swenshuai.xi
480*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT.c]MDrv_DMD_DVBT2_SetDbgLevel\n"));
481*53ee8cc1Swenshuai.xi
482*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
483*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_SetDbgLevel, &Drv_DVBT2_SETDBG_LEVEL_PARAM);
484*53ee8cc1Swenshuai.xi else
485*53ee8cc1Swenshuai.xi return false;
486*53ee8cc1Swenshuai.xi
487*53ee8cc1Swenshuai.xi return Drv_DVBT2_SETDBG_LEVEL_PARAM.ret;
488*53ee8cc1Swenshuai.xi #if 0
489*53ee8cc1Swenshuai.xi DMD_LOCK();
490*53ee8cc1Swenshuai.xi _u8DMDDbgLevel = u8DbgLevel;
491*53ee8cc1Swenshuai.xi DMD_UNLOCK();
492*53ee8cc1Swenshuai.xi return TRUE;
493*53ee8cc1Swenshuai.xi #endif
494*53ee8cc1Swenshuai.xi }
495*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetInfo(DMD_DVBT2_INFO_TYPE eInfoType)496*53ee8cc1Swenshuai.xi DMD_DVBT2_Info* MDrv_DMD_DVBT2_GetInfo(DMD_DVBT2_INFO_TYPE eInfoType)
497*53ee8cc1Swenshuai.xi {
498*53ee8cc1Swenshuai.xi //MS_BOOL return_val;
499*53ee8cc1Swenshuai.xi DVBT2_GETINFO_PARAM Drv_DVBT2_GETINFO_PARAM;
500*53ee8cc1Swenshuai.xi Drv_DVBT2_GETINFO_PARAM.eInfoType=eInfoType;
501*53ee8cc1Swenshuai.xi Drv_DVBT2_GETINFO_PARAM.pInfo=NULL;
502*53ee8cc1Swenshuai.xi
503*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetInfo\n"));
504*53ee8cc1Swenshuai.xi
505*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
506*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetInfo, &Drv_DVBT2_GETINFO_PARAM);
507*53ee8cc1Swenshuai.xi
508*53ee8cc1Swenshuai.xi return Drv_DVBT2_GETINFO_PARAM.pInfo;
509*53ee8cc1Swenshuai.xi
510*53ee8cc1Swenshuai.xi #if 0
511*53ee8cc1Swenshuai.xi DMD_LOCK();
512*53ee8cc1Swenshuai.xi switch (eInfoType)
513*53ee8cc1Swenshuai.xi {
514*53ee8cc1Swenshuai.xi case E_DMD_DVBT2_MODULATION_INFO:
515*53ee8cc1Swenshuai.xi INTERN_DVBT2_Show_Modulation_info();
516*53ee8cc1Swenshuai.xi break;
517*53ee8cc1Swenshuai.xi case E_DMD_DVBT2_DEMOD_INFO:
518*53ee8cc1Swenshuai.xi INTERN_DVBT2_Show_Demod_Info();
519*53ee8cc1Swenshuai.xi break;
520*53ee8cc1Swenshuai.xi case E_DMD_DVBT2_LOCK_INFO:
521*53ee8cc1Swenshuai.xi INTERN_DVBT2_Show_Lock_Info();
522*53ee8cc1Swenshuai.xi break;
523*53ee8cc1Swenshuai.xi case E_DMD_DVBT2_PRESFO_INFO:
524*53ee8cc1Swenshuai.xi INTERN_DVBT2_Show_PRESFO_Info();
525*53ee8cc1Swenshuai.xi break;
526*53ee8cc1Swenshuai.xi case E_DMD_DVBT2_LOCK_TIME_INFO:
527*53ee8cc1Swenshuai.xi INTERN_DVBT2_Show_Lock_Time_Info();
528*53ee8cc1Swenshuai.xi break;
529*53ee8cc1Swenshuai.xi case E_DMD_DVBT2_BER_INFO:
530*53ee8cc1Swenshuai.xi INTERN_DVBT2_Show_BER_Info();
531*53ee8cc1Swenshuai.xi break;
532*53ee8cc1Swenshuai.xi case E_DMD_DVBT2_AGC_INFO:
533*53ee8cc1Swenshuai.xi INTERN_DVBT2_Show_AGC_Info();
534*53ee8cc1Swenshuai.xi break;
535*53ee8cc1Swenshuai.xi default:
536*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
537*53ee8cc1Swenshuai.xi printf("MDrv_DMD_DVBT2_GetInfo %d Error\n", eInfoType);
538*53ee8cc1Swenshuai.xi #endif
539*53ee8cc1Swenshuai.xi break;
540*53ee8cc1Swenshuai.xi }
541*53ee8cc1Swenshuai.xi DMD_UNLOCK();
542*53ee8cc1Swenshuai.xi return &sDMD_DVBT2_Info;
543*53ee8cc1Swenshuai.xi #endif
544*53ee8cc1Swenshuai.xi }
545*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetLibVer(const MSIF_Version ** ppVersion)546*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetLibVer(const MSIF_Version **ppVersion)
547*53ee8cc1Swenshuai.xi {
548*53ee8cc1Swenshuai.xi DVBT2_GETLIBVER_PARAM Drv_DVBT2_GETLIBVER_PARAM;
549*53ee8cc1Swenshuai.xi Drv_DVBT2_GETLIBVER_PARAM.ppVersion=ppVersion;
550*53ee8cc1Swenshuai.xi Drv_DVBT2_GETLIBVER_PARAM.ret=false;
551*53ee8cc1Swenshuai.xi
552*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetLibVer\n"));
553*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
554*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetLibVer, &Drv_DVBT2_GETLIBVER_PARAM);
555*53ee8cc1Swenshuai.xi else
556*53ee8cc1Swenshuai.xi return false;
557*53ee8cc1Swenshuai.xi
558*53ee8cc1Swenshuai.xi return Drv_DVBT2_GETLIBVER_PARAM.ret;
559*53ee8cc1Swenshuai.xi #if 0
560*53ee8cc1Swenshuai.xi DMD_LOCK();
561*53ee8cc1Swenshuai.xi if (!ppVersion)
562*53ee8cc1Swenshuai.xi {
563*53ee8cc1Swenshuai.xi return FALSE;
564*53ee8cc1Swenshuai.xi }
565*53ee8cc1Swenshuai.xi
566*53ee8cc1Swenshuai.xi *ppVersion = &_drv_dmd_dvbt2_intern_version;
567*53ee8cc1Swenshuai.xi DMD_UNLOCK();
568*53ee8cc1Swenshuai.xi return TRUE;
569*53ee8cc1Swenshuai.xi #endif
570*53ee8cc1Swenshuai.xi }
571*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetFWVer(MS_U16 * ver)572*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetFWVer(MS_U16 *ver)
573*53ee8cc1Swenshuai.xi {
574*53ee8cc1Swenshuai.xi //MS_BOOL return_val;
575*53ee8cc1Swenshuai.xi DVBT2_GETFWVER_PARAM Drv_DVBT2_GETFWVER_PARAM;
576*53ee8cc1Swenshuai.xi Drv_DVBT2_GETFWVER_PARAM.ver=ver;
577*53ee8cc1Swenshuai.xi Drv_DVBT2_GETFWVER_PARAM.ret=false;
578*53ee8cc1Swenshuai.xi
579*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2GetFWVer\n"));
580*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
581*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetFWVer, &Drv_DVBT2_GETFWVER_PARAM);
582*53ee8cc1Swenshuai.xi else
583*53ee8cc1Swenshuai.xi return false;
584*53ee8cc1Swenshuai.xi
585*53ee8cc1Swenshuai.xi return Drv_DVBT2_GETFWVER_PARAM.ret;
586*53ee8cc1Swenshuai.xi #if 0
587*53ee8cc1Swenshuai.xi MS_BOOL bRet;
588*53ee8cc1Swenshuai.xi
589*53ee8cc1Swenshuai.xi DMD_LOCK();
590*53ee8cc1Swenshuai.xi
591*53ee8cc1Swenshuai.xi bRet = INTERN_DVBT2_Version(ver);
592*53ee8cc1Swenshuai.xi //printf("MDrv_DMD_DVBT2_GetFWVer %x\n",*ver);
593*53ee8cc1Swenshuai.xi DMD_UNLOCK();
594*53ee8cc1Swenshuai.xi
595*53ee8cc1Swenshuai.xi return bRet;
596*53ee8cc1Swenshuai.xi #endif
597*53ee8cc1Swenshuai.xi }
598*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetReg(MS_U16 u16Addr,MS_U8 * pu8Data)599*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetReg(MS_U16 u16Addr, MS_U8 *pu8Data)
600*53ee8cc1Swenshuai.xi {
601*53ee8cc1Swenshuai.xi MS_BOOL bRet;
602*53ee8cc1Swenshuai.xi
603*53ee8cc1Swenshuai.xi DVBT2_GETREG_PARAM Drv_DVBT2_GETREG_PARAM;
604*53ee8cc1Swenshuai.xi Drv_DVBT2_GETREG_PARAM.u16Addr=u16Addr;
605*53ee8cc1Swenshuai.xi Drv_DVBT2_GETREG_PARAM.pu8Data=pu8Data;
606*53ee8cc1Swenshuai.xi
607*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetReg\n"));
608*53ee8cc1Swenshuai.xi
609*53ee8cc1Swenshuai.xi bRet=UtopiaIoctl(ppDVBT2Instant,DMD_DVBT2_DRV_CMD_GetReg,&Drv_DVBT2_GETREG_PARAM);
610*53ee8cc1Swenshuai.xi return bRet;
611*53ee8cc1Swenshuai.xi #if 0
612*53ee8cc1Swenshuai.xi MS_BOOL bRet;
613*53ee8cc1Swenshuai.xi
614*53ee8cc1Swenshuai.xi DMD_LOCK();
615*53ee8cc1Swenshuai.xi bRet=MDrv_SYS_DMD_VD_MBX_ReadReg(u16Addr, pu8Data);
616*53ee8cc1Swenshuai.xi DMD_UNLOCK();
617*53ee8cc1Swenshuai.xi
618*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
619*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel >= DMD_T2_DBGLV_DEBUG)
620*53ee8cc1Swenshuai.xi {
621*53ee8cc1Swenshuai.xi printf("MDrv_DMD_DVBT2_GetReg %x %x\n", u16Addr, *pu8Data);
622*53ee8cc1Swenshuai.xi }
623*53ee8cc1Swenshuai.xi #endif
624*53ee8cc1Swenshuai.xi
625*53ee8cc1Swenshuai.xi return bRet;
626*53ee8cc1Swenshuai.xi #endif
627*53ee8cc1Swenshuai.xi }
628*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_SetReg(MS_U16 u16Addr,MS_U8 u8Data)629*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_SetReg(MS_U16 u16Addr, MS_U8 u8Data)
630*53ee8cc1Swenshuai.xi {
631*53ee8cc1Swenshuai.xi MS_BOOL return_val;
632*53ee8cc1Swenshuai.xi
633*53ee8cc1Swenshuai.xi DVBT2_SETREG_PARAM Drv_DVBT2_SETREG_PARAM;
634*53ee8cc1Swenshuai.xi Drv_DVBT2_SETREG_PARAM.u16Addr=u16Addr;
635*53ee8cc1Swenshuai.xi Drv_DVBT2_SETREG_PARAM.u8Data=u8Data;
636*53ee8cc1Swenshuai.xi
637*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_SetReg\n"));
638*53ee8cc1Swenshuai.xi return_val=UtopiaIoctl(ppDVBT2Instant,DMD_DVBT2_DRV_CMD_SetReg,&Drv_DVBT2_SETREG_PARAM);
639*53ee8cc1Swenshuai.xi return return_val;
640*53ee8cc1Swenshuai.xi #if 0
641*53ee8cc1Swenshuai.xi MS_BOOL bRet;
642*53ee8cc1Swenshuai.xi
643*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
644*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel >= DMD_T2_DBGLV_DEBUG)
645*53ee8cc1Swenshuai.xi {
646*53ee8cc1Swenshuai.xi printf("MDrv_DMD_DVBT2_SetReg %x %x\n", u16Addr, u8Data);
647*53ee8cc1Swenshuai.xi }
648*53ee8cc1Swenshuai.xi #endif
649*53ee8cc1Swenshuai.xi
650*53ee8cc1Swenshuai.xi DMD_LOCK();
651*53ee8cc1Swenshuai.xi bRet=MDrv_SYS_DMD_VD_MBX_WriteReg(u16Addr, u8Data);
652*53ee8cc1Swenshuai.xi DMD_UNLOCK();
653*53ee8cc1Swenshuai.xi return bRet;
654*53ee8cc1Swenshuai.xi #endif
655*53ee8cc1Swenshuai.xi }
656*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_SetSerialControl(MS_BOOL bEnable)657*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_SetSerialControl(MS_BOOL bEnable)
658*53ee8cc1Swenshuai.xi {
659*53ee8cc1Swenshuai.xi //MS_BOOL return_val;
660*53ee8cc1Swenshuai.xi DVBT2_SETSERIALCONTROL_PARAM Drv_DVBT2_SetSerialControl_PARAM;
661*53ee8cc1Swenshuai.xi Drv_DVBT2_SetSerialControl_PARAM.bEnable=bEnable;
662*53ee8cc1Swenshuai.xi Drv_DVBT2_SetSerialControl_PARAM.ret=false;
663*53ee8cc1Swenshuai.xi
664*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_SetSerialControl\n"));
665*53ee8cc1Swenshuai.xi
666*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
667*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_SetSerialControl, &Drv_DVBT2_SetSerialControl_PARAM);
668*53ee8cc1Swenshuai.xi else
669*53ee8cc1Swenshuai.xi return false;
670*53ee8cc1Swenshuai.xi
671*53ee8cc1Swenshuai.xi return Drv_DVBT2_SetSerialControl_PARAM.ret;
672*53ee8cc1Swenshuai.xi #if 0
673*53ee8cc1Swenshuai.xi MS_BOOL bRet;
674*53ee8cc1Swenshuai.xi MS_U8 u8TSClk;
675*53ee8cc1Swenshuai.xi
676*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
677*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel >= DMD_T2_DBGLV_DEBUG)
678*53ee8cc1Swenshuai.xi {
679*53ee8cc1Swenshuai.xi printf("MDrv_DMD_DVBT2_SetSerialControl %x\n", bEnable);
680*53ee8cc1Swenshuai.xi }
681*53ee8cc1Swenshuai.xi #endif
682*53ee8cc1Swenshuai.xi
683*53ee8cc1Swenshuai.xi DMD_LOCK();
684*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt != NULL)
685*53ee8cc1Swenshuai.xi {
686*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[0]>=1)
687*53ee8cc1Swenshuai.xi {
688*53ee8cc1Swenshuai.xi u8TSClk = _sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[2]; // TS_CLK
689*53ee8cc1Swenshuai.xi }
690*53ee8cc1Swenshuai.xi else
691*53ee8cc1Swenshuai.xi {
692*53ee8cc1Swenshuai.xi u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
693*53ee8cc1Swenshuai.xi }
694*53ee8cc1Swenshuai.xi }
695*53ee8cc1Swenshuai.xi else
696*53ee8cc1Swenshuai.xi {
697*53ee8cc1Swenshuai.xi u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
698*53ee8cc1Swenshuai.xi }
699*53ee8cc1Swenshuai.xi bRet=INTERN_DVBT2_Serial_Control(bEnable, u8TSClk);
700*53ee8cc1Swenshuai.xi DMD_UNLOCK();
701*53ee8cc1Swenshuai.xi return bRet;
702*53ee8cc1Swenshuai.xi #endif
703*53ee8cc1Swenshuai.xi }
704*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_SetReset(void)705*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_SetReset(void)
706*53ee8cc1Swenshuai.xi {
707*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_SetReset\n"));
708*53ee8cc1Swenshuai.xi
709*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
710*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_SetReset, NULL);
711*53ee8cc1Swenshuai.xi else
712*53ee8cc1Swenshuai.xi return false;
713*53ee8cc1Swenshuai.xi
714*53ee8cc1Swenshuai.xi return true;
715*53ee8cc1Swenshuai.xi #if 0
716*53ee8cc1Swenshuai.xi MS_BOOL bRet;
717*53ee8cc1Swenshuai.xi
718*53ee8cc1Swenshuai.xi DMD_LOCK();
719*53ee8cc1Swenshuai.xi bRet = INTERN_DVBT2_SoftReset();
720*53ee8cc1Swenshuai.xi DMD_UNLOCK();
721*53ee8cc1Swenshuai.xi
722*53ee8cc1Swenshuai.xi return bRet;
723*53ee8cc1Swenshuai.xi #endif
724*53ee8cc1Swenshuai.xi }
725*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_SetConfig(DMD_DVBT2_RF_CHANNEL_BANDWIDTH BW,MS_BOOL bSerialTS,MS_U8 u8PlpID)726*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_SetConfig(DMD_DVBT2_RF_CHANNEL_BANDWIDTH BW, MS_BOOL bSerialTS, MS_U8 u8PlpID)
727*53ee8cc1Swenshuai.xi {
728*53ee8cc1Swenshuai.xi //MS_BOOL return_val;
729*53ee8cc1Swenshuai.xi DVBT2_SETCONFIG_PARAM Drv_DVBT2_SetConfig_PARAM;
730*53ee8cc1Swenshuai.xi Drv_DVBT2_SetConfig_PARAM.BW=BW;
731*53ee8cc1Swenshuai.xi Drv_DVBT2_SetConfig_PARAM.bSerialTS=bSerialTS;
732*53ee8cc1Swenshuai.xi Drv_DVBT2_SetConfig_PARAM.u8PlpID=u8PlpID;
733*53ee8cc1Swenshuai.xi Drv_DVBT2_SetConfig_PARAM.ret=false;
734*53ee8cc1Swenshuai.xi
735*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_SetConfig\n"));
736*53ee8cc1Swenshuai.xi
737*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
738*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_SetConfig, &Drv_DVBT2_SetConfig_PARAM);
739*53ee8cc1Swenshuai.xi else
740*53ee8cc1Swenshuai.xi return false;
741*53ee8cc1Swenshuai.xi
742*53ee8cc1Swenshuai.xi return Drv_DVBT2_SetConfig_PARAM.ret;
743*53ee8cc1Swenshuai.xi #if 0
744*53ee8cc1Swenshuai.xi //return MDrv_DMD_DVBT2_SetConfigHPLPSetIF(BW, bSerialTS, bPalBG, 0, u32DMD_DVBT2_IfFrequency, u32DMD_DVBT2_FsFrequency, u8DMD_DVBT2_IQSwap);
745*53ee8cc1Swenshuai.xi MS_BOOL bRet;
746*53ee8cc1Swenshuai.xi MS_U8 u8TSClk;
747*53ee8cc1Swenshuai.xi
748*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
749*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel >= DMD_T2_DBGLV_DEBUG)
750*53ee8cc1Swenshuai.xi {
751*53ee8cc1Swenshuai.xi printf("MDrv_DMD_DVBT2_SetConfig %d %d %d\n", BW, bSerialTS, u8PlpID);
752*53ee8cc1Swenshuai.xi }
753*53ee8cc1Swenshuai.xi #endif
754*53ee8cc1Swenshuai.xi
755*53ee8cc1Swenshuai.xi DMD_LOCK();
756*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt != NULL)
757*53ee8cc1Swenshuai.xi {
758*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[0]>=1)
759*53ee8cc1Swenshuai.xi {
760*53ee8cc1Swenshuai.xi u8TSClk = _sDMD_DVBT2_InitData.u8DMD_DVBT2_InitExt[2]; // TS_CLK
761*53ee8cc1Swenshuai.xi }
762*53ee8cc1Swenshuai.xi else
763*53ee8cc1Swenshuai.xi {
764*53ee8cc1Swenshuai.xi u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
765*53ee8cc1Swenshuai.xi }
766*53ee8cc1Swenshuai.xi }
767*53ee8cc1Swenshuai.xi else
768*53ee8cc1Swenshuai.xi {
769*53ee8cc1Swenshuai.xi u8TSClk = 0xFF; // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
770*53ee8cc1Swenshuai.xi }
771*53ee8cc1Swenshuai.xi
772*53ee8cc1Swenshuai.xi bRet=INTERN_DVBT2_Config(BW, bSerialTS, u8TSClk, u32DMD_DVBT2_IfFrequency, u8PlpID);
773*53ee8cc1Swenshuai.xi eDMD_DVBT2_BandWidth=BW;
774*53ee8cc1Swenshuai.xi DMD_UNLOCK();
775*53ee8cc1Swenshuai.xi return bRet;
776*53ee8cc1Swenshuai.xi #endif
777*53ee8cc1Swenshuai.xi }
778*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_SetActive(MS_BOOL bEnable)779*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_SetActive(MS_BOOL bEnable)
780*53ee8cc1Swenshuai.xi {
781*53ee8cc1Swenshuai.xi //MS_BOOL return_val;
782*53ee8cc1Swenshuai.xi DVBT2_SETACTIVE_PARAM Drv_DVBT2_SetActive_PARAM;
783*53ee8cc1Swenshuai.xi Drv_DVBT2_SetActive_PARAM.bEnable=bEnable;
784*53ee8cc1Swenshuai.xi Drv_DVBT2_SetActive_PARAM.ret=false;
785*53ee8cc1Swenshuai.xi
786*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_SetActive\n"));
787*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
788*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_SetActive, &Drv_DVBT2_SetActive_PARAM);
789*53ee8cc1Swenshuai.xi else
790*53ee8cc1Swenshuai.xi return false;
791*53ee8cc1Swenshuai.xi
792*53ee8cc1Swenshuai.xi return Drv_DVBT2_SetActive_PARAM.ret;
793*53ee8cc1Swenshuai.xi #if 0
794*53ee8cc1Swenshuai.xi MS_BOOL bRet;
795*53ee8cc1Swenshuai.xi
796*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
797*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel >= DMD_T2_DBGLV_DEBUG)
798*53ee8cc1Swenshuai.xi {
799*53ee8cc1Swenshuai.xi printf("MDrv_DMD_DVBT2_SetActive %d\n", bEnable);
800*53ee8cc1Swenshuai.xi }
801*53ee8cc1Swenshuai.xi #endif
802*53ee8cc1Swenshuai.xi
803*53ee8cc1Swenshuai.xi DMD_LOCK();
804*53ee8cc1Swenshuai.xi bRet=INTERN_DVBT2_Active(bEnable);
805*53ee8cc1Swenshuai.xi DMD_UNLOCK();
806*53ee8cc1Swenshuai.xi return bRet;
807*53ee8cc1Swenshuai.xi #endif
808*53ee8cc1Swenshuai.xi }
809*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetLock(DMD_DVBT2_GETLOCK_TYPE eType,DMD_T2_LOCK_STATUS * eLockStatus)810*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetLock(DMD_DVBT2_GETLOCK_TYPE eType, DMD_T2_LOCK_STATUS *eLockStatus)
811*53ee8cc1Swenshuai.xi {
812*53ee8cc1Swenshuai.xi //MS_BOOL return_val;
813*53ee8cc1Swenshuai.xi DVBT2_GETLOCK_PARAM Drv_DVBT2_GetLock_PARAM;
814*53ee8cc1Swenshuai.xi Drv_DVBT2_GetLock_PARAM.eType=eType;
815*53ee8cc1Swenshuai.xi Drv_DVBT2_GetLock_PARAM.eLockStatus=eLockStatus;
816*53ee8cc1Swenshuai.xi Drv_DVBT2_GetLock_PARAM.ret=false;
817*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetLock\n"));
818*53ee8cc1Swenshuai.xi
819*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
820*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetLock, &Drv_DVBT2_GetLock_PARAM);
821*53ee8cc1Swenshuai.xi else
822*53ee8cc1Swenshuai.xi return false;
823*53ee8cc1Swenshuai.xi
824*53ee8cc1Swenshuai.xi return Drv_DVBT2_GetLock_PARAM.ret;
825*53ee8cc1Swenshuai.xi #if 0
826*53ee8cc1Swenshuai.xi MS_BOOL bRet=TRUE;
827*53ee8cc1Swenshuai.xi DMD_LOCK();
828*53ee8cc1Swenshuai.xi
829*53ee8cc1Swenshuai.xi if ( eType == E_DMD_DVBT2_GETLOCK ) // for channel scan
830*53ee8cc1Swenshuai.xi {
831*53ee8cc1Swenshuai.xi *eLockStatus = INTERN_DVBT2_Lock(u16DMD_DVBT2_P1_Timeout, u16DMD_DVBT2_FEC_Timeout);
832*53ee8cc1Swenshuai.xi }
833*53ee8cc1Swenshuai.xi else
834*53ee8cc1Swenshuai.xi {
835*53ee8cc1Swenshuai.xi if (INTERN_DVBT2_GetLock(eType) == TRUE)
836*53ee8cc1Swenshuai.xi {
837*53ee8cc1Swenshuai.xi *eLockStatus = E_DMD_T2_LOCK;
838*53ee8cc1Swenshuai.xi }
839*53ee8cc1Swenshuai.xi else
840*53ee8cc1Swenshuai.xi {
841*53ee8cc1Swenshuai.xi *eLockStatus = E_DMD_T2_UNLOCK;
842*53ee8cc1Swenshuai.xi }
843*53ee8cc1Swenshuai.xi }
844*53ee8cc1Swenshuai.xi DMD_UNLOCK();
845*53ee8cc1Swenshuai.xi
846*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
847*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel >= DMD_T2_DBGLV_DEBUG)
848*53ee8cc1Swenshuai.xi {
849*53ee8cc1Swenshuai.xi printf("MDrv_DMD_DVBT2_GetLock %d\n", bRet);
850*53ee8cc1Swenshuai.xi }
851*53ee8cc1Swenshuai.xi #endif
852*53ee8cc1Swenshuai.xi return bRet;
853*53ee8cc1Swenshuai.xi #endif
854*53ee8cc1Swenshuai.xi }
855*53ee8cc1Swenshuai.xi
856*53ee8cc1Swenshuai.xi // Floating computation/data. Need to move to upper layer to action for kerel mode.
857*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBT2_GetSignalStrength(MS_U16 * u16Strength)858*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetSignalStrength(MS_U16 *u16Strength)
859*53ee8cc1Swenshuai.xi {
860*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetSignalStrength\n"));
861*53ee8cc1Swenshuai.xi
862*53ee8cc1Swenshuai.xi return MDrv_DMD_DVBT2_GetSignalStrengthWithRFPower(u16Strength, 200.0f);
863*53ee8cc1Swenshuai.xi
864*53ee8cc1Swenshuai.xi #if 0
865*53ee8cc1Swenshuai.xi return MDrv_DMD_DVBT2_GetSignalStrengthWithRFPower(u16Strength, 200.0f);
866*53ee8cc1Swenshuai.xi #endif
867*53ee8cc1Swenshuai.xi }
868*53ee8cc1Swenshuai.xi
869*53ee8cc1Swenshuai.xi #if 0
870*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetSignalStrengthWithRFPower(MS_U16 *u16Strength, float fRFPowerDbm)
871*53ee8cc1Swenshuai.xi {
872*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetSignalStrengthWithRFPower\n"));
873*53ee8cc1Swenshuai.xi
874*53ee8cc1Swenshuai.xi #if(0)
875*53ee8cc1Swenshuai.xi DVBT2_GETSIGNALSTRENGTHWITHRFPOWER_PARAM Drv_DVBT2_GetSignalStrengthWithRFPower_PARAM;
876*53ee8cc1Swenshuai.xi Drv_DVBT2_GetSignalStrengthWithRFPower_PARAM.u16Strength=u16Strength;
877*53ee8cc1Swenshuai.xi Drv_DVBT2_GetSignalStrengthWithRFPower_PARAM.fRFPowerDbm=fRFPowerDbm;
878*53ee8cc1Swenshuai.xi
879*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
880*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetSignalStrengthWithRFPower, &Drv_DVBT2_GetSignalStrengthWithRFPower_PARAM);
881*53ee8cc1Swenshuai.xi else
882*53ee8cc1Swenshuai.xi return false;
883*53ee8cc1Swenshuai.xi
884*53ee8cc1Swenshuai.xi return Drv_DVBT2_GetSignalStrengthWithRFPower_PARAM.ret;
885*53ee8cc1Swenshuai.xi #else
886*53ee8cc1Swenshuai.xi *u16Strength=100;
887*53ee8cc1Swenshuai.xi return true;
888*53ee8cc1Swenshuai.xi #endif
889*53ee8cc1Swenshuai.xi
890*53ee8cc1Swenshuai.xi #if 0
891*53ee8cc1Swenshuai.xi MS_U8 u8SarValue;
892*53ee8cc1Swenshuai.xi MS_BOOL bRet;
893*53ee8cc1Swenshuai.xi
894*53ee8cc1Swenshuai.xi DMD_LOCK();
895*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8SarChannel != 0xFF)
896*53ee8cc1Swenshuai.xi {
897*53ee8cc1Swenshuai.xi u8SarValue=MDrv_SAR_Adc_GetValue(_sDMD_DVBT2_InitData.u8SarChannel);
898*53ee8cc1Swenshuai.xi }
899*53ee8cc1Swenshuai.xi else
900*53ee8cc1Swenshuai.xi {
901*53ee8cc1Swenshuai.xi u8SarValue=0xFF;
902*53ee8cc1Swenshuai.xi }
903*53ee8cc1Swenshuai.xi bRet=INTERN_DVBT2_GetSignalStrength(u16Strength, (const DMD_DVBT2_InitData *)(&_sDMD_DVBT2_InitData), u8SarValue, fRFPowerDbm);
904*53ee8cc1Swenshuai.xi DMD_UNLOCK();
905*53ee8cc1Swenshuai.xi
906*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
907*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel >= DMD_T2_DBGLV_DEBUG)
908*53ee8cc1Swenshuai.xi {
909*53ee8cc1Swenshuai.xi printf("MDrv_DMD_DVBT2_GetSignalStrength %d\n", *u16Strength);
910*53ee8cc1Swenshuai.xi }
911*53ee8cc1Swenshuai.xi #endif
912*53ee8cc1Swenshuai.xi return bRet;
913*53ee8cc1Swenshuai.xi #endif
914*53ee8cc1Swenshuai.xi }
915*53ee8cc1Swenshuai.xi #else
MDrv_DMD_DVBT2_GetSignalStrengthWithRFPower(MS_U16 * u16Strength,float fRFPowerDbm)916*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetSignalStrengthWithRFPower(MS_U16 *u16Strength, float fRFPowerDbm)
917*53ee8cc1Swenshuai.xi {
918*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetSignalStrengthWithRFPower\n"));
919*53ee8cc1Swenshuai.xi
920*53ee8cc1Swenshuai.xi MS_U8 status = true;
921*53ee8cc1Swenshuai.xi float ch_power_db = 0.0f;
922*53ee8cc1Swenshuai.xi float ch_power_ref = 11.0f;
923*53ee8cc1Swenshuai.xi float ch_power_rel = 0.0f;
924*53ee8cc1Swenshuai.xi //MS_U8 u8_index = 0;
925*53ee8cc1Swenshuai.xi MS_U16 L1_info_qam, L1_info_cr;
926*53ee8cc1Swenshuai.xi // MS_U8 demodState = 0;
927*53ee8cc1Swenshuai.xi DMD_T2_LOCK_STATUS eLockStatus;
928*53ee8cc1Swenshuai.xi
929*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
930*53ee8cc1Swenshuai.xi {
931*53ee8cc1Swenshuai.xi MDrv_DMD_DVBT2_GetLock(E_DMD_DVBT2_FEC_LOCK, &eLockStatus);
932*53ee8cc1Swenshuai.xi if (E_DMD_T2_LOCK != eLockStatus)
933*53ee8cc1Swenshuai.xi {
934*53ee8cc1Swenshuai.xi *u16Strength = 0;
935*53ee8cc1Swenshuai.xi return TRUE;
936*53ee8cc1Swenshuai.xi }
937*53ee8cc1Swenshuai.xi
938*53ee8cc1Swenshuai.xi #if 0
939*53ee8cc1Swenshuai.xi // use pointer of IFAGC table to identify
940*53ee8cc1Swenshuai.xi // case 1: RFAGC from SAR, IFAGC controlled by demod
941*53ee8cc1Swenshuai.xi // case 2: RFAGC from tuner, ,IFAGC controlled by demod
942*53ee8cc1Swenshuai.xi status &= HAL_DMD_GetRFLevel(&ch_power_db, fRFPowerDbm, u8SarValue,
943*53ee8cc1Swenshuai.xi sDMD_DVBT2_InitData->pTuner_RfagcSsi, sDMD_DVBT2_InitData->u16Tuner_RfagcSsi_Size,
944*53ee8cc1Swenshuai.xi sDMD_DVBT2_InitData->pTuner_IfagcSsi_HiRef, sDMD_DVBT2_InitData->u16Tuner_IfagcSsi_HiRef_Size,
945*53ee8cc1Swenshuai.xi sDMD_DVBT2_InitData->pTuner_IfagcSsi_LoRef, sDMD_DVBT2_InitData->u16Tuner_IfagcSsi_LoRef_Size,
946*53ee8cc1Swenshuai.xi sDMD_DVBT2_InitData->pTuner_IfagcErr_HiRef, sDMD_DVBT2_InitData->u16Tuner_IfagcErr_HiRef_Size,
947*53ee8cc1Swenshuai.xi sDMD_DVBT2_InitData->pTuner_IfagcErr_LoRef, sDMD_DVBT2_InitData->u16Tuner_IfagcErr_LoRef_Size);
948*53ee8cc1Swenshuai.xi #endif
949*53ee8cc1Swenshuai.xi ch_power_db = fRFPowerDbm; // get dBm from tuner now.
950*53ee8cc1Swenshuai.xi
951*53ee8cc1Swenshuai.xi if(MDrv_DMD_DVBT2_GetL1Info(&L1_info_qam, T2_MODUL_MODE) == FALSE)
952*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","QAM parameter retrieve failure\n "));
953*53ee8cc1Swenshuai.xi
954*53ee8cc1Swenshuai.xi if(MDrv_DMD_DVBT2_GetL1Info(&L1_info_cr, T2_CODE_RATE) == FALSE)
955*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","code rate parameter retrieve failure\n "));
956*53ee8cc1Swenshuai.xi
957*53ee8cc1Swenshuai.xi /*
958*53ee8cc1Swenshuai.xi while(dvbt2_ssi_dbm_nordigp1[u8_index].constel != _UNKNOW_QAM)
959*53ee8cc1Swenshuai.xi {
960*53ee8cc1Swenshuai.xi if ( (dvbt2_ssi_dbm_nordigp1[u8_index].constel == (DMD_T2_CONSTEL)L1_info_qam)
961*53ee8cc1Swenshuai.xi && (dvbt2_ssi_dbm_nordigp1[u8_index].code_rate == (DMD_T2_CODERATE)L1_info_cr))
962*53ee8cc1Swenshuai.xi {
963*53ee8cc1Swenshuai.xi ch_power_ref = dvbt2_ssi_dbm_nordigp1[u8_index].p_ref;
964*53ee8cc1Swenshuai.xi break;
965*53ee8cc1Swenshuai.xi }
966*53ee8cc1Swenshuai.xi else
967*53ee8cc1Swenshuai.xi {
968*53ee8cc1Swenshuai.xi u8_index++;
969*53ee8cc1Swenshuai.xi }
970*53ee8cc1Swenshuai.xi }
971*53ee8cc1Swenshuai.xi */
972*53ee8cc1Swenshuai.xi ch_power_ref = dvbt2_ssi_dbm_nordigp1[(MS_U8)L1_info_qam][(MS_U8)L1_info_cr];
973*53ee8cc1Swenshuai.xi
974*53ee8cc1Swenshuai.xi // status &= MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + (0x62*2), &demodState);
975*53ee8cc1Swenshuai.xi
976*53ee8cc1Swenshuai.xi if (ch_power_ref > 10.0f)
977*53ee8cc1Swenshuai.xi *u16Strength = 0;
978*53ee8cc1Swenshuai.xi else
979*53ee8cc1Swenshuai.xi {
980*53ee8cc1Swenshuai.xi // For Nordig's SSI test items
981*53ee8cc1Swenshuai.xi if ( (L1_info_qam == 3) //256qam
982*53ee8cc1Swenshuai.xi && (L1_info_cr > 0 && L1_info_cr < 4) // CR 3/5,2/3,3/4
983*53ee8cc1Swenshuai.xi )
984*53ee8cc1Swenshuai.xi {
985*53ee8cc1Swenshuai.xi MS_U8 u8_x = L1_info_cr - 1;
986*53ee8cc1Swenshuai.xi float f_ssi = 0.0;
987*53ee8cc1Swenshuai.xi
988*53ee8cc1Swenshuai.xi if(ch_power_db >= -45)f_ssi = 100;
989*53ee8cc1Swenshuai.xi else if (ch_power_db >= -50) f_ssi = fT2_SSI_formula[u8_x][0]*(ch_power_db + 50) + fT2_SSI_formula[u8_x][1];
990*53ee8cc1Swenshuai.xi else if (ch_power_db >= -60) f_ssi = fT2_SSI_formula[u8_x][2]*(ch_power_db + 60) + fT2_SSI_formula[u8_x][3];
991*53ee8cc1Swenshuai.xi else if (ch_power_db >= -70) f_ssi = fT2_SSI_formula[u8_x][4]*(ch_power_db + 70) + fT2_SSI_formula[u8_x][5];
992*53ee8cc1Swenshuai.xi else if (ch_power_db >= -80) f_ssi = fT2_SSI_formula[u8_x][6]*(ch_power_db + 80) + fT2_SSI_formula[u8_x][7];
993*53ee8cc1Swenshuai.xi else if (ch_power_db >= -95) f_ssi = fT2_SSI_formula[u8_x][8]*(ch_power_db + 95) + fT2_SSI_formula[u8_x][9];
994*53ee8cc1Swenshuai.xi else if (ch_power_db >= -100) f_ssi = fT2_SSI_formula[u8_x][10]*(ch_power_db + 100) + fT2_SSI_formula[u8_x][11];
995*53ee8cc1Swenshuai.xi
996*53ee8cc1Swenshuai.xi if (f_ssi > 100) *u16Strength = 100;
997*53ee8cc1Swenshuai.xi else if (f_ssi < 0) *u16Strength = 0;
998*53ee8cc1Swenshuai.xi else *u16Strength = (MS_U16)(f_ssi+0.5);
999*53ee8cc1Swenshuai.xi
1000*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD"," SSI... RF_level=%d, f_ssi=%d, ssi=%d, cr=%d, mod=%d\n", (MS_S16)ch_power_db, (MS_S16)f_ssi, (MS_S16)(*u16Strength), L1_info_cr, L1_info_qam));
1001*53ee8cc1Swenshuai.xi }
1002*53ee8cc1Swenshuai.xi else
1003*53ee8cc1Swenshuai.xi {
1004*53ee8cc1Swenshuai.xi ch_power_rel = ch_power_db - ch_power_ref;
1005*53ee8cc1Swenshuai.xi /*
1006*53ee8cc1Swenshuai.xi if (demodState != 0x09)
1007*53ee8cc1Swenshuai.xi {
1008*53ee8cc1Swenshuai.xi ch_power_rel = ch_power_db - (-50.0f);
1009*53ee8cc1Swenshuai.xi }
1010*53ee8cc1Swenshuai.xi else
1011*53ee8cc1Swenshuai.xi {
1012*53ee8cc1Swenshuai.xi ch_power_rel = ch_power_db - ch_power_ref;
1013*53ee8cc1Swenshuai.xi }
1014*53ee8cc1Swenshuai.xi */
1015*53ee8cc1Swenshuai.xi if ( ch_power_rel < -15.0f )
1016*53ee8cc1Swenshuai.xi {
1017*53ee8cc1Swenshuai.xi *u16Strength = 0;
1018*53ee8cc1Swenshuai.xi }
1019*53ee8cc1Swenshuai.xi else if ( ch_power_rel < 0.0f )
1020*53ee8cc1Swenshuai.xi {
1021*53ee8cc1Swenshuai.xi *u16Strength = (MS_U16)(2.0f/3*(ch_power_rel + 15.0f));
1022*53ee8cc1Swenshuai.xi }
1023*53ee8cc1Swenshuai.xi else if ( ch_power_rel < 20 )
1024*53ee8cc1Swenshuai.xi {
1025*53ee8cc1Swenshuai.xi *u16Strength = (MS_U16)(4.0f*ch_power_rel + 10.0f);
1026*53ee8cc1Swenshuai.xi }
1027*53ee8cc1Swenshuai.xi else if ( ch_power_rel < 35.0f )
1028*53ee8cc1Swenshuai.xi {
1029*53ee8cc1Swenshuai.xi *u16Strength = (MS_U16)(2.0f/3*(ch_power_rel - 20.0f) + 90.0f);
1030*53ee8cc1Swenshuai.xi }
1031*53ee8cc1Swenshuai.xi else
1032*53ee8cc1Swenshuai.xi {
1033*53ee8cc1Swenshuai.xi *u16Strength = 100;
1034*53ee8cc1Swenshuai.xi }
1035*53ee8cc1Swenshuai.xi }
1036*53ee8cc1Swenshuai.xi }
1037*53ee8cc1Swenshuai.xi
1038*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","ch_power_ref(dB) = %d , ch_power_db(dB) = %d, ch_power_rel(dB) = %d\n", (MS_S16)ch_power_ref, (MS_S16)ch_power_db, (MS_S16)ch_power_rel));
1039*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","SSI_CH_PWR(dB) = %d , Score = %d\n", (MS_S16)ch_power_db, *u16Strength));
1040*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","SSI = %d \n", *u16Strength));
1041*53ee8cc1Swenshuai.xi }
1042*53ee8cc1Swenshuai.xi return status;
1043*53ee8cc1Swenshuai.xi }
1044*53ee8cc1Swenshuai.xi #endif
1045*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetSignalQuality(MS_U16 * u16Quality)1046*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetSignalQuality(MS_U16 *u16Quality)
1047*53ee8cc1Swenshuai.xi {
1048*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetSignalQuality\n"));
1049*53ee8cc1Swenshuai.xi
1050*53ee8cc1Swenshuai.xi return MDrv_DMD_DVBT2_GetSignalQualityWithRFPower(u16Quality, 200.0f);
1051*53ee8cc1Swenshuai.xi #if 0
1052*53ee8cc1Swenshuai.xi return MDrv_DMD_DVBT2_GetSignalQualityWithRFPower(u16Quality, 200.0f);
1053*53ee8cc1Swenshuai.xi #endif
1054*53ee8cc1Swenshuai.xi }
1055*53ee8cc1Swenshuai.xi
1056*53ee8cc1Swenshuai.xi #if 1
1057*53ee8cc1Swenshuai.xi /****************************************************************************
1058*53ee8cc1Swenshuai.xi Subject: To get the DVT Signal quility
1059*53ee8cc1Swenshuai.xi Function: INTERN_DVBT2_GetSignalQuality
1060*53ee8cc1Swenshuai.xi Parmeter: Quility
1061*53ee8cc1Swenshuai.xi Return: E_RESULT_SUCCESS
1062*53ee8cc1Swenshuai.xi E_RESULT_FAILURE
1063*53ee8cc1Swenshuai.xi Remark: Here we have 4 level range
1064*53ee8cc1Swenshuai.xi <1>.First Range => Quility =100 (You can define it by INTERN_DVBT2_SIGNAL_BASE_100)
1065*53ee8cc1Swenshuai.xi <2>.2th Range => 60 < Quality < 100 (You can define it by INTERN_DVBT2_SIGNAL_BASE_60)
1066*53ee8cc1Swenshuai.xi <3>.3th Range => 10 < Quality < 60 (You can define it by INTERN_DVBT2_SIGNAL_BASE_10)
1067*53ee8cc1Swenshuai.xi <4>.4th Range => Quality <10
1068*53ee8cc1Swenshuai.xi *****************************************************************************/
MDrv_DMD_DVBT2_GetSignalQualityWithRFPower(MS_U16 * u16Quality,float fRFPowerDbm)1069*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetSignalQualityWithRFPower(MS_U16 *u16Quality, float fRFPowerDbm)
1070*53ee8cc1Swenshuai.xi //MS_BOOL INTERN_DVBT2_GetSignalQuality(MS_U16 *quality, const DMD_DVBT2_InitData *sDMD_DVBT2_InitData, MS_U8 u8SarValue, float fRFPowerDbm)
1071*53ee8cc1Swenshuai.xi {
1072*53ee8cc1Swenshuai.xi // float ber_sqi, SQI;
1073*53ee8cc1Swenshuai.xi float fber = 0;
1074*53ee8cc1Swenshuai.xi float cn_rec = 0;
1075*53ee8cc1Swenshuai.xi float cn_ref = 0;
1076*53ee8cc1Swenshuai.xi float cn_rel = 0;
1077*53ee8cc1Swenshuai.xi float fBerTH1[] = {1E-4, 1E-4*(1.0-DVBT2_BER_TH_HY), 1E-4*(1.0+DVBT2_BER_TH_HY), 1E-4};
1078*53ee8cc1Swenshuai.xi float fBerTH2[] = {3E-7, 3E-7, 3E-7*(1.0-DVBT2_BER_TH_HY), 3E-7*(1.0+DVBT2_BER_TH_HY)};
1079*53ee8cc1Swenshuai.xi float BER_SQI = (float)0.0;
1080*53ee8cc1Swenshuai.xi float SQI = (float)0.0;
1081*53ee8cc1Swenshuai.xi static MS_U8 u8SQIState = 0;
1082*53ee8cc1Swenshuai.xi DMD_T2_LOCK_STATUS eLockStatus;
1083*53ee8cc1Swenshuai.xi
1084*53ee8cc1Swenshuai.xi MS_U8 status = true;
1085*53ee8cc1Swenshuai.xi MS_U16 L1_info_qam = 0, L1_info_cr = 0;
1086*53ee8cc1Swenshuai.xi
1087*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetSignalQualityWithRFPower\n"));
1088*53ee8cc1Swenshuai.xi
1089*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1090*53ee8cc1Swenshuai.xi {
1091*53ee8cc1Swenshuai.xi MDrv_DMD_DVBT2_GetLock(E_DMD_DVBT2_FEC_LOCK, &eLockStatus);
1092*53ee8cc1Swenshuai.xi if (E_DMD_T2_LOCK == eLockStatus)
1093*53ee8cc1Swenshuai.xi {
1094*53ee8cc1Swenshuai.xi #if 1 // copy from msb1240
1095*53ee8cc1Swenshuai.xi if (fBerFilteredDVBT2 < 0.0)
1096*53ee8cc1Swenshuai.xi {
1097*53ee8cc1Swenshuai.xi if (MDrv_DMD_DVBT2_GetPostLdpcBer(&fber) == FALSE)
1098*53ee8cc1Swenshuai.xi {
1099*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","INTERN_DVBT2 PostLDPCBER error \n "));
1100*53ee8cc1Swenshuai.xi return FALSE;
1101*53ee8cc1Swenshuai.xi }
1102*53ee8cc1Swenshuai.xi fBerFilteredDVBT2 = fber;
1103*53ee8cc1Swenshuai.xi }
1104*53ee8cc1Swenshuai.xi else
1105*53ee8cc1Swenshuai.xi {
1106*53ee8cc1Swenshuai.xi fber = fBerFilteredDVBT2;
1107*53ee8cc1Swenshuai.xi }
1108*53ee8cc1Swenshuai.xi
1109*53ee8cc1Swenshuai.xi if (fber > fBerTH1[u8SQIState])
1110*53ee8cc1Swenshuai.xi {
1111*53ee8cc1Swenshuai.xi BER_SQI = 0.0;
1112*53ee8cc1Swenshuai.xi u8SQIState = 1;
1113*53ee8cc1Swenshuai.xi }
1114*53ee8cc1Swenshuai.xi else if (fber >=fBerTH2[u8SQIState])
1115*53ee8cc1Swenshuai.xi {
1116*53ee8cc1Swenshuai.xi BER_SQI = 100.0/15;
1117*53ee8cc1Swenshuai.xi u8SQIState = 2;
1118*53ee8cc1Swenshuai.xi }
1119*53ee8cc1Swenshuai.xi else
1120*53ee8cc1Swenshuai.xi {
1121*53ee8cc1Swenshuai.xi BER_SQI = 100.0/6;
1122*53ee8cc1Swenshuai.xi u8SQIState = 3;
1123*53ee8cc1Swenshuai.xi }
1124*53ee8cc1Swenshuai.xi
1125*53ee8cc1Swenshuai.xi MDrv_DMD_DVBT2_GetSNR(&cn_rec);
1126*53ee8cc1Swenshuai.xi
1127*53ee8cc1Swenshuai.xi if (cn_rec < 0.0)
1128*53ee8cc1Swenshuai.xi return FALSE;
1129*53ee8cc1Swenshuai.xi
1130*53ee8cc1Swenshuai.xi ///////// Get Constellation and Code Rate to determine Ref. C/N //////////
1131*53ee8cc1Swenshuai.xi ///////// (refer to Teracom min. spec 2.0 4.1.1.7) /////
1132*53ee8cc1Swenshuai.xi cn_ref = (float)-1.0;
1133*53ee8cc1Swenshuai.xi
1134*53ee8cc1Swenshuai.xi if(MDrv_DMD_DVBT2_GetL1Info(&L1_info_qam, T2_MODUL_MODE) == FALSE)
1135*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","QAM parameter retrieve failure\n "));
1136*53ee8cc1Swenshuai.xi
1137*53ee8cc1Swenshuai.xi if(MDrv_DMD_DVBT2_GetL1Info(&L1_info_cr, T2_CODE_RATE) == FALSE)
1138*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","code rate parameter retrieve failure\n "));
1139*53ee8cc1Swenshuai.xi
1140*53ee8cc1Swenshuai.xi // YP:Need to use init data. Tmp remove
1141*53ee8cc1Swenshuai.xi #if 0
1142*53ee8cc1Swenshuai.xi for(i = 0; i < sDMD_DVBT2_InitData->u16SqiCnNordigP1_Size; i++)
1143*53ee8cc1Swenshuai.xi {
1144*53ee8cc1Swenshuai.xi if ( (L1_info_qam == sDMD_DVBT2_InitData->pSqiCnNordigP1[i].constel)
1145*53ee8cc1Swenshuai.xi && (L1_info_cr == sDMD_DVBT2_InitData->pSqiCnNordigP1[i].code_rate) )
1146*53ee8cc1Swenshuai.xi {
1147*53ee8cc1Swenshuai.xi cn_ref = sDMD_DVBT2_InitData->pSqiCnNordigP1[i].cn_ref;
1148*53ee8cc1Swenshuai.xi break;
1149*53ee8cc1Swenshuai.xi }
1150*53ee8cc1Swenshuai.xi }
1151*53ee8cc1Swenshuai.xi #endif
1152*53ee8cc1Swenshuai.xi
1153*53ee8cc1Swenshuai.xi // arthur
1154*53ee8cc1Swenshuai.xi cn_ref = dvbt2_sqi_db_nordigp1[(MS_U8)L1_info_qam][(MS_U8)L1_info_cr];
1155*53ee8cc1Swenshuai.xi
1156*53ee8cc1Swenshuai.xi if (cn_ref < 0.0)
1157*53ee8cc1Swenshuai.xi {
1158*53ee8cc1Swenshuai.xi SQI = (float)0.0;
1159*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","SQI is zero, 1\n"));
1160*53ee8cc1Swenshuai.xi }
1161*53ee8cc1Swenshuai.xi else
1162*53ee8cc1Swenshuai.xi {
1163*53ee8cc1Swenshuai.xi // 0.7, snr offset
1164*53ee8cc1Swenshuai.xi cn_rel = cn_rec - cn_ref + 0.7f;
1165*53ee8cc1Swenshuai.xi if (cn_rel > 3.0)
1166*53ee8cc1Swenshuai.xi SQI = 100;
1167*53ee8cc1Swenshuai.xi else if (cn_rel >= -3)
1168*53ee8cc1Swenshuai.xi {
1169*53ee8cc1Swenshuai.xi SQI = (cn_rel+3)*BER_SQI;
1170*53ee8cc1Swenshuai.xi if (SQI > 100.0) SQI = 100.0;
1171*53ee8cc1Swenshuai.xi else if (SQI < 0.0) SQI = 0.0;
1172*53ee8cc1Swenshuai.xi }
1173*53ee8cc1Swenshuai.xi else
1174*53ee8cc1Swenshuai.xi {
1175*53ee8cc1Swenshuai.xi SQI = (float)0.0;
1176*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","SQI is zero, 2\n"));
1177*53ee8cc1Swenshuai.xi }
1178*53ee8cc1Swenshuai.xi }
1179*53ee8cc1Swenshuai.xi
1180*53ee8cc1Swenshuai.xi *u16Quality = (MS_U16)SQI;
1181*53ee8cc1Swenshuai.xi }
1182*53ee8cc1Swenshuai.xi else
1183*53ee8cc1Swenshuai.xi {
1184*53ee8cc1Swenshuai.xi *u16Quality = 0;
1185*53ee8cc1Swenshuai.xi }
1186*53ee8cc1Swenshuai.xi
1187*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","SNR = %f, QAM = %d, code Rate = %d\n", cn_rec, L1_info_qam, L1_info_cr));
1188*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","BER = %8.3e\n", fber));
1189*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","Signal Quility = %d\n", *u16Quality));
1190*53ee8cc1Swenshuai.xi }
1191*53ee8cc1Swenshuai.xi return status;
1192*53ee8cc1Swenshuai.xi }
1193*53ee8cc1Swenshuai.xi
1194*53ee8cc1Swenshuai.xi #else
1195*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetSignalQualityWithRFPower(MS_U16 *u16Quality, float fRFPowerDbm)
1196*53ee8cc1Swenshuai.xi {
1197*53ee8cc1Swenshuai.xi //MS_BOOL return_val;
1198*53ee8cc1Swenshuai.xi DVBT2_GETSIGNALQUALITYWITHRFPOWER_PARAM Drv_DVBT2_GetSignalQualityWithRFPower_PARAM;
1199*53ee8cc1Swenshuai.xi Drv_DVBT2_GetSignalQualityWithRFPower_PARAM.u16Quality=u16Quality;
1200*53ee8cc1Swenshuai.xi Drv_DVBT2_GetSignalQualityWithRFPower_PARAM.fRFPowerDbm=fRFPowerDbm;
1201*53ee8cc1Swenshuai.xi
1202*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetSignalQualityWithRFPower\n"));
1203*53ee8cc1Swenshuai.xi /*bryan temp mark */
1204*53ee8cc1Swenshuai.xi #if(0)
1205*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1206*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetSignalQualityWithRFPower, &Drv_DVBT2_GetSignalQualityWithRFPower_PARAM);
1207*53ee8cc1Swenshuai.xi else
1208*53ee8cc1Swenshuai.xi return false;
1209*53ee8cc1Swenshuai.xi #else
1210*53ee8cc1Swenshuai.xi Drv_DVBT2_GetSignalQualityWithRFPower_PARAM.ret=true;
1211*53ee8cc1Swenshuai.xi #endif
1212*53ee8cc1Swenshuai.xi
1213*53ee8cc1Swenshuai.xi return Drv_DVBT2_GetSignalQualityWithRFPower_PARAM.ret;
1214*53ee8cc1Swenshuai.xi
1215*53ee8cc1Swenshuai.xi #if 0
1216*53ee8cc1Swenshuai.xi MS_U8 u8SarValue=0;
1217*53ee8cc1Swenshuai.xi MS_BOOL bRet=0;
1218*53ee8cc1Swenshuai.xi
1219*53ee8cc1Swenshuai.xi DMD_LOCK();
1220*53ee8cc1Swenshuai.xi if (_sDMD_DVBT2_InitData.u8SarChannel != 0xFF)
1221*53ee8cc1Swenshuai.xi {
1222*53ee8cc1Swenshuai.xi u8SarValue=MDrv_SAR_Adc_GetValue(_sDMD_DVBT2_InitData.u8SarChannel);
1223*53ee8cc1Swenshuai.xi }
1224*53ee8cc1Swenshuai.xi else
1225*53ee8cc1Swenshuai.xi {
1226*53ee8cc1Swenshuai.xi u8SarValue=0xFF;
1227*53ee8cc1Swenshuai.xi }
1228*53ee8cc1Swenshuai.xi bRet=INTERN_DVBT2_GetSignalQuality(u16Quality, (const DMD_DVBT2_InitData *)(&_sDMD_DVBT2_InitData), u8SarValue, fRFPowerDbm);
1229*53ee8cc1Swenshuai.xi DMD_UNLOCK();
1230*53ee8cc1Swenshuai.xi
1231*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1232*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel >= DMD_T2_DBGLV_DEBUG)
1233*53ee8cc1Swenshuai.xi {
1234*53ee8cc1Swenshuai.xi printf("MDrv_DMD_DVBT2_GetSignalQuality %d\n", *u16Quality);
1235*53ee8cc1Swenshuai.xi }
1236*53ee8cc1Swenshuai.xi #endif
1237*53ee8cc1Swenshuai.xi return bRet;
1238*53ee8cc1Swenshuai.xi #endif
1239*53ee8cc1Swenshuai.xi }
1240*53ee8cc1Swenshuai.xi #endif
1241*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetSNR(float * fSNR)1242*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetSNR(float *fSNR)
1243*53ee8cc1Swenshuai.xi {
1244*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetSNR\n"));
1245*53ee8cc1Swenshuai.xi
1246*53ee8cc1Swenshuai.xi #if(1)
1247*53ee8cc1Swenshuai.xi MS_U16 u16_snr100;
1248*53ee8cc1Swenshuai.xi MS_U8 snr_cali;
1249*53ee8cc1Swenshuai.xi MS_U8 u8_gi;
1250*53ee8cc1Swenshuai.xi
1251*53ee8cc1Swenshuai.xi DVBT2_GETSNR_PARAM Drv_DVBT2_GetSNR_PARAM;
1252*53ee8cc1Swenshuai.xi Drv_DVBT2_GetSNR_PARAM.u16_snr100 = &u16_snr100;
1253*53ee8cc1Swenshuai.xi Drv_DVBT2_GetSNR_PARAM.snr_cali = &snr_cali;
1254*53ee8cc1Swenshuai.xi Drv_DVBT2_GetSNR_PARAM.u8_gi = &u8_gi;
1255*53ee8cc1Swenshuai.xi Drv_DVBT2_GetSNR_PARAM.ret = false;
1256*53ee8cc1Swenshuai.xi
1257*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1258*53ee8cc1Swenshuai.xi {
1259*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetSNR, &Drv_DVBT2_GetSNR_PARAM);
1260*53ee8cc1Swenshuai.xi
1261*53ee8cc1Swenshuai.xi *fSNR = (float)u16_snr100/100.0;
1262*53ee8cc1Swenshuai.xi
1263*53ee8cc1Swenshuai.xi if (snr_cali == 1)
1264*53ee8cc1Swenshuai.xi {
1265*53ee8cc1Swenshuai.xi float snr_offset = 0.0;
1266*53ee8cc1Swenshuai.xi float snr_cali = 0.0;
1267*53ee8cc1Swenshuai.xi
1268*53ee8cc1Swenshuai.xi if (u8_gi == 0) snr_offset = 0.157;
1269*53ee8cc1Swenshuai.xi else if(u8_gi == 1) snr_offset = 0.317;
1270*53ee8cc1Swenshuai.xi else if(u8_gi == 2) snr_offset = 0.645;
1271*53ee8cc1Swenshuai.xi else if(u8_gi == 3) snr_offset = 1.335;
1272*53ee8cc1Swenshuai.xi else if(u8_gi == 4) snr_offset = 0.039;
1273*53ee8cc1Swenshuai.xi else if(u8_gi == 5) snr_offset = 0.771;
1274*53ee8cc1Swenshuai.xi else if(u8_gi == 6) snr_offset = 0.378;
1275*53ee8cc1Swenshuai.xi
1276*53ee8cc1Swenshuai.xi snr_cali = *fSNR - snr_offset;
1277*53ee8cc1Swenshuai.xi if (snr_cali > 0.0) *fSNR = snr_cali;
1278*53ee8cc1Swenshuai.xi }
1279*53ee8cc1Swenshuai.xi //use Polynomial curve fitting to fix snr
1280*53ee8cc1Swenshuai.xi //snr_poly = 0.0027945*pow(*fSNR,3) - 0.2266*pow(*fSNR,2) + 6.0101*(*fSNR) - 53.3621;
1281*53ee8cc1Swenshuai.xi //f_snr = f_snr + snr_poly;
1282*53ee8cc1Swenshuai.xi
1283*53ee8cc1Swenshuai.xi #endif
1284*53ee8cc1Swenshuai.xi }
1285*53ee8cc1Swenshuai.xi else
1286*53ee8cc1Swenshuai.xi return false;
1287*53ee8cc1Swenshuai.xi
1288*53ee8cc1Swenshuai.xi return Drv_DVBT2_GetSNR_PARAM.ret;
1289*53ee8cc1Swenshuai.xi #else
1290*53ee8cc1Swenshuai.xi //Drv_DVBT_GetSNR_PARAM.ret=true;
1291*53ee8cc1Swenshuai.xi *fSNR=30;
1292*53ee8cc1Swenshuai.xi return true;
1293*53ee8cc1Swenshuai.xi #endif
1294*53ee8cc1Swenshuai.xi
1295*53ee8cc1Swenshuai.xi #if 0
1296*53ee8cc1Swenshuai.xi DMD_LOCK();
1297*53ee8cc1Swenshuai.xi *fSNR=INTERN_DVBT2_GetSNR();
1298*53ee8cc1Swenshuai.xi DMD_UNLOCK();
1299*53ee8cc1Swenshuai.xi
1300*53ee8cc1Swenshuai.xi return TRUE;
1301*53ee8cc1Swenshuai.xi #endif
1302*53ee8cc1Swenshuai.xi }
1303*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetPostLdpcBer(float * ber)1304*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetPostLdpcBer(float *ber)
1305*53ee8cc1Swenshuai.xi {
1306*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetPostLdpcBer\n"));
1307*53ee8cc1Swenshuai.xi
1308*53ee8cc1Swenshuai.xi #if(1)
1309*53ee8cc1Swenshuai.xi MS_U16 BitErrPeriod_reg;
1310*53ee8cc1Swenshuai.xi MS_U32 BitErr_reg;
1311*53ee8cc1Swenshuai.xi MS_U16 FecType;
1312*53ee8cc1Swenshuai.xi
1313*53ee8cc1Swenshuai.xi DVBT2_GETPOSTLDPCBER_PARAM Drv_DVBT2_GetPostLdpcBer_PARAM;
1314*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPostLdpcBer_PARAM.BitErr_reg = &BitErr_reg;
1315*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPostLdpcBer_PARAM.BitErrPeriod_reg = &BitErrPeriod_reg;
1316*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPostLdpcBer_PARAM.FecType = &FecType;
1317*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPostLdpcBer_PARAM.ret=false;
1318*53ee8cc1Swenshuai.xi
1319*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1320*53ee8cc1Swenshuai.xi {
1321*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetPostLdpcBer, &Drv_DVBT2_GetPostLdpcBer_PARAM);
1322*53ee8cc1Swenshuai.xi
1323*53ee8cc1Swenshuai.xi if (BitErrPeriod_reg == 0)
1324*53ee8cc1Swenshuai.xi //protect 0
1325*53ee8cc1Swenshuai.xi BitErrPeriod_reg = 1;
1326*53ee8cc1Swenshuai.xi
1327*53ee8cc1Swenshuai.xi if (FecType & 0x0180)
1328*53ee8cc1Swenshuai.xi {
1329*53ee8cc1Swenshuai.xi if (BitErr_reg == 0)
1330*53ee8cc1Swenshuai.xi *ber = (float)0.5 / (float)(BitErrPeriod_reg * 64800);
1331*53ee8cc1Swenshuai.xi else
1332*53ee8cc1Swenshuai.xi *ber = (float)BitErr_reg / (float)(BitErrPeriod_reg * 64800);
1333*53ee8cc1Swenshuai.xi }
1334*53ee8cc1Swenshuai.xi else
1335*53ee8cc1Swenshuai.xi {
1336*53ee8cc1Swenshuai.xi if (BitErr_reg == 0)
1337*53ee8cc1Swenshuai.xi *ber = (float)0.5 / (float)(BitErrPeriod_reg * 16200);
1338*53ee8cc1Swenshuai.xi else
1339*53ee8cc1Swenshuai.xi *ber = (float)BitErr_reg / (float)(BitErrPeriod_reg * 16200);
1340*53ee8cc1Swenshuai.xi }
1341*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","INTERN_DVBT2 PostLDPCBER = %8.3e \n ", *ber));
1342*53ee8cc1Swenshuai.xi }
1343*53ee8cc1Swenshuai.xi else
1344*53ee8cc1Swenshuai.xi return false;
1345*53ee8cc1Swenshuai.xi
1346*53ee8cc1Swenshuai.xi return Drv_DVBT2_GetPostLdpcBer_PARAM.ret;
1347*53ee8cc1Swenshuai.xi #else
1348*53ee8cc1Swenshuai.xi //Pre_DVBT_GetPostViterbiBer_PARAM.ret=true;
1349*53ee8cc1Swenshuai.xi *ber=0;
1350*53ee8cc1Swenshuai.xi return true;
1351*53ee8cc1Swenshuai.xi #endif
1352*53ee8cc1Swenshuai.xi
1353*53ee8cc1Swenshuai.xi #if 0
1354*53ee8cc1Swenshuai.xi MS_BOOL bRet;
1355*53ee8cc1Swenshuai.xi
1356*53ee8cc1Swenshuai.xi DMD_LOCK();
1357*53ee8cc1Swenshuai.xi bRet=INTERN_DVBT2_GetPostLdpcBer(ber);
1358*53ee8cc1Swenshuai.xi DMD_UNLOCK();
1359*53ee8cc1Swenshuai.xi
1360*53ee8cc1Swenshuai.xi return bRet;
1361*53ee8cc1Swenshuai.xi #endif
1362*53ee8cc1Swenshuai.xi }
1363*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetPreLdpcBer(float * ber)1364*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetPreLdpcBer(float *ber)
1365*53ee8cc1Swenshuai.xi {
1366*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetPreLdpcBer\n"));
1367*53ee8cc1Swenshuai.xi
1368*53ee8cc1Swenshuai.xi #if(1)
1369*53ee8cc1Swenshuai.xi MS_U16 BitErrPeriod_reg;
1370*53ee8cc1Swenshuai.xi MS_U32 BitErr_reg;
1371*53ee8cc1Swenshuai.xi MS_U16 FecType;
1372*53ee8cc1Swenshuai.xi
1373*53ee8cc1Swenshuai.xi DVBT2_GETPRELDPCBERPARAM Drv_DVBT2_GetPreLdpcBer_PARAM;
1374*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPreLdpcBer_PARAM.BitErr_reg = &BitErr_reg;
1375*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPreLdpcBer_PARAM.BitErrPeriod_reg = &BitErrPeriod_reg;
1376*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPreLdpcBer_PARAM.FecType = &FecType;
1377*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPreLdpcBer_PARAM.ret=false;
1378*53ee8cc1Swenshuai.xi
1379*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1380*53ee8cc1Swenshuai.xi {
1381*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetPreLdpcBer, &Drv_DVBT2_GetPreLdpcBer_PARAM);
1382*53ee8cc1Swenshuai.xi
1383*53ee8cc1Swenshuai.xi if (BitErrPeriod_reg == 0)
1384*53ee8cc1Swenshuai.xi //protect 0
1385*53ee8cc1Swenshuai.xi BitErrPeriod_reg = 1;
1386*53ee8cc1Swenshuai.xi
1387*53ee8cc1Swenshuai.xi if (FecType & 0x0180)
1388*53ee8cc1Swenshuai.xi {
1389*53ee8cc1Swenshuai.xi if (BitErr_reg == 0)
1390*53ee8cc1Swenshuai.xi *ber = (float)0.5 / (float)(BitErrPeriod_reg * 64800);
1391*53ee8cc1Swenshuai.xi else
1392*53ee8cc1Swenshuai.xi *ber = (float)BitErr_reg / (float)(BitErrPeriod_reg * 64800);
1393*53ee8cc1Swenshuai.xi }
1394*53ee8cc1Swenshuai.xi else
1395*53ee8cc1Swenshuai.xi {
1396*53ee8cc1Swenshuai.xi if (BitErr_reg == 0)
1397*53ee8cc1Swenshuai.xi *ber = (float)0.5 / (float)(BitErrPeriod_reg * 16200);
1398*53ee8cc1Swenshuai.xi else
1399*53ee8cc1Swenshuai.xi *ber = (float)BitErr_reg / (float)(BitErrPeriod_reg * 16200);
1400*53ee8cc1Swenshuai.xi }
1401*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","INTERN_DVBT2 PreLDPCBER = %8.3e \n ", *ber));
1402*53ee8cc1Swenshuai.xi }
1403*53ee8cc1Swenshuai.xi else
1404*53ee8cc1Swenshuai.xi return false;
1405*53ee8cc1Swenshuai.xi
1406*53ee8cc1Swenshuai.xi return Drv_DVBT2_GetPreLdpcBer_PARAM.ret;
1407*53ee8cc1Swenshuai.xi #else
1408*53ee8cc1Swenshuai.xi //Pre_DVBT_GetPostViterbiBer_PARAM.ret=true;
1409*53ee8cc1Swenshuai.xi *ber=0;
1410*53ee8cc1Swenshuai.xi return true;
1411*53ee8cc1Swenshuai.xi #endif
1412*53ee8cc1Swenshuai.xi
1413*53ee8cc1Swenshuai.xi #if 0
1414*53ee8cc1Swenshuai.xi MS_BOOL bRet;
1415*53ee8cc1Swenshuai.xi
1416*53ee8cc1Swenshuai.xi DMD_LOCK();
1417*53ee8cc1Swenshuai.xi bRet=INTERN_DVBT2_GetPreLdpcBer(ber);
1418*53ee8cc1Swenshuai.xi DMD_UNLOCK();
1419*53ee8cc1Swenshuai.xi
1420*53ee8cc1Swenshuai.xi return bRet;
1421*53ee8cc1Swenshuai.xi #endif
1422*53ee8cc1Swenshuai.xi }
1423*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetFreqOffset(float * pFreqOff)1424*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetFreqOffset(float *pFreqOff)
1425*53ee8cc1Swenshuai.xi {
1426*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetFreqOffset\n"));
1427*53ee8cc1Swenshuai.xi #if(1)
1428*53ee8cc1Swenshuai.xi MS_U32 CfoTd_reg;
1429*53ee8cc1Swenshuai.xi MS_U32 CfoFd_reg;
1430*53ee8cc1Swenshuai.xi MS_U32 Icfo_reg;
1431*53ee8cc1Swenshuai.xi MS_U8 fft_reg;
1432*53ee8cc1Swenshuai.xi
1433*53ee8cc1Swenshuai.xi DVBT2_GETFREQOFFSET_PARAM Drv_DVBT2_GetFreqOffset_PARAM;
1434*53ee8cc1Swenshuai.xi Drv_DVBT2_GetFreqOffset_PARAM.CfoTd_reg = &CfoTd_reg;
1435*53ee8cc1Swenshuai.xi Drv_DVBT2_GetFreqOffset_PARAM.CfoFd_reg = &CfoFd_reg;
1436*53ee8cc1Swenshuai.xi Drv_DVBT2_GetFreqOffset_PARAM.Icfo_reg = &Icfo_reg;
1437*53ee8cc1Swenshuai.xi Drv_DVBT2_GetFreqOffset_PARAM.fft_reg = &fft_reg;
1438*53ee8cc1Swenshuai.xi Drv_DVBT2_GetFreqOffset_PARAM.ret = false;
1439*53ee8cc1Swenshuai.xi
1440*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1441*53ee8cc1Swenshuai.xi {
1442*53ee8cc1Swenshuai.xi float N = 0.0, FreqB = 0.0;
1443*53ee8cc1Swenshuai.xi float FreqCfoTd = 0.0, FreqCfoFd = 0.0, FreqIcfo = 0.0;
1444*53ee8cc1Swenshuai.xi MS_U8 u8BW = 8;
1445*53ee8cc1Swenshuai.xi
1446*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetFreqOffset, &Drv_DVBT2_GetFreqOffset_PARAM);
1447*53ee8cc1Swenshuai.xi
1448*53ee8cc1Swenshuai.xi FreqB = (float)u8BW * 8 / 7;
1449*53ee8cc1Swenshuai.xi
1450*53ee8cc1Swenshuai.xi FreqCfoTd = (float)CfoTd_reg;
1451*53ee8cc1Swenshuai.xi
1452*53ee8cc1Swenshuai.xi if (CfoTd_reg & 0x800000)
1453*53ee8cc1Swenshuai.xi FreqCfoTd = FreqCfoTd - (float)0x1000000;
1454*53ee8cc1Swenshuai.xi
1455*53ee8cc1Swenshuai.xi FreqCfoTd = FreqCfoTd * FreqB * 0.00011642;
1456*53ee8cc1Swenshuai.xi
1457*53ee8cc1Swenshuai.xi FreqCfoFd = (float)CfoFd_reg;
1458*53ee8cc1Swenshuai.xi
1459*53ee8cc1Swenshuai.xi if (CfoFd_reg & 0x800000)
1460*53ee8cc1Swenshuai.xi FreqCfoFd = FreqCfoFd - (float)0x1000000;
1461*53ee8cc1Swenshuai.xi
1462*53ee8cc1Swenshuai.xi FreqCfoFd = FreqCfoFd * FreqB * 0.00011642;
1463*53ee8cc1Swenshuai.xi
1464*53ee8cc1Swenshuai.xi FreqIcfo = (float)Icfo_reg;
1465*53ee8cc1Swenshuai.xi
1466*53ee8cc1Swenshuai.xi if (Icfo_reg & 0x400)
1467*53ee8cc1Swenshuai.xi FreqIcfo = FreqIcfo - (float)0x800;
1468*53ee8cc1Swenshuai.xi
1469*53ee8cc1Swenshuai.xi switch (fft_reg)
1470*53ee8cc1Swenshuai.xi {
1471*53ee8cc1Swenshuai.xi case 0x00: N = 2048; break;
1472*53ee8cc1Swenshuai.xi case 0x20: N = 4096; break;
1473*53ee8cc1Swenshuai.xi case 0x10:
1474*53ee8cc1Swenshuai.xi default: N = 8192; break;
1475*53ee8cc1Swenshuai.xi }
1476*53ee8cc1Swenshuai.xi
1477*53ee8cc1Swenshuai.xi FreqIcfo = FreqIcfo * FreqB / N * 1000; //unit: kHz
1478*53ee8cc1Swenshuai.xi
1479*53ee8cc1Swenshuai.xi
1480*53ee8cc1Swenshuai.xi //*pFreqOff = FreqIcfo + (FreqCfoFd + FreqCfoTd)/1000;
1481*53ee8cc1Swenshuai.xi *pFreqOff = (-1.0f)*(FreqIcfo + (FreqCfoFd + FreqCfoTd)/1000);
1482*53ee8cc1Swenshuai.xi // DBG_GET_SIGNAL(printf("FCFO = %f\n", FreqCfoFd));
1483*53ee8cc1Swenshuai.xi // DBG_GET_SIGNAL(printf("TCFO = %f\n", FreqCfoTd));
1484*53ee8cc1Swenshuai.xi // DBG_GET_SIGNAL(printf("ICFO = %f\n", FreqIcfo));
1485*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","INTERN_DVBT2 FreqOffset = %8.3e \n ", *pFreqOff));
1486*53ee8cc1Swenshuai.xi }
1487*53ee8cc1Swenshuai.xi
1488*53ee8cc1Swenshuai.xi return Drv_DVBT2_GetFreqOffset_PARAM.ret;
1489*53ee8cc1Swenshuai.xi #if 0
1490*53ee8cc1Swenshuai.xi #if(0)
1491*53ee8cc1Swenshuai.xi DVBT2_GETFREQOFFSET_PARAM Drv_DVBT2_GetFreqOffset_PARAM;
1492*53ee8cc1Swenshuai.xi Drv_DVBT2_GetFreqOffset_PARAM.pFreqOff=pFreqOff;
1493*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1494*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetFreqOffset, &Drv_DVBT2_GetFreqOffset_PARAM);
1495*53ee8cc1Swenshuai.xi else
1496*53ee8cc1Swenshuai.xi return false;
1497*53ee8cc1Swenshuai.xi
1498*53ee8cc1Swenshuai.xi return Drv_DVBT2_GetFreqOffset_PARAM.ret;
1499*53ee8cc1Swenshuai.xi #else
1500*53ee8cc1Swenshuai.xi //Drv_DVBT_GetFreqOffset_PARAM.ret=true;
1501*53ee8cc1Swenshuai.xi *pFreqOff = 0;
1502*53ee8cc1Swenshuai.xi return true;
1503*53ee8cc1Swenshuai.xi #endif
1504*53ee8cc1Swenshuai.xi #endif
1505*53ee8cc1Swenshuai.xi }
1506*53ee8cc1Swenshuai.xi #endif
1507*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_NORDIG_SSI_Table_Write(DMD_T2_CONSTEL constel,DMD_T2_CODERATE code_rate,float write_value)1508*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_NORDIG_SSI_Table_Write(DMD_T2_CONSTEL constel, DMD_T2_CODERATE code_rate, float write_value)
1509*53ee8cc1Swenshuai.xi {
1510*53ee8cc1Swenshuai.xi // MS_BOOL return_val;
1511*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_NORDIG_SSI_Table_Write\n"));
1512*53ee8cc1Swenshuai.xi
1513*53ee8cc1Swenshuai.xi dvbt2_ssi_dbm_nordigp1[constel][code_rate] = write_value;
1514*53ee8cc1Swenshuai.xi return TRUE;
1515*53ee8cc1Swenshuai.xi
1516*53ee8cc1Swenshuai.xi #if 0
1517*53ee8cc1Swenshuai.xi #if(0)
1518*53ee8cc1Swenshuai.xi DVBT2_NORDIG_SSI_TABLE_WRITE_PARAM Drv_DVBT2_NORDIGSSITableWrite_PARAM;
1519*53ee8cc1Swenshuai.xi Drv_DVBT2_NORDIGSSITableWrite_PARAM.constel=constel;
1520*53ee8cc1Swenshuai.xi Drv_DVBT2_NORDIGSSITableWrite_PARAM.code_rate=code_rate;
1521*53ee8cc1Swenshuai.xi Drv_DVBT2_NORDIGSSITableWrite_PARAM.write_value=write_value;
1522*53ee8cc1Swenshuai.xi
1523*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1524*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_NORDIG_SSI_Table_Write, &Drv_DVBT2_NORDIGSSITableWrite_PARAM);
1525*53ee8cc1Swenshuai.xi else
1526*53ee8cc1Swenshuai.xi return false;
1527*53ee8cc1Swenshuai.xi
1528*53ee8cc1Swenshuai.xi return Drv_DVBT2_NORDIGSSITableWrite_PARAM.ret;
1529*53ee8cc1Swenshuai.xi #else
1530*53ee8cc1Swenshuai.xi // Drv_DVBT_NORDIGSSITableWrite_PARAM.ret=true;
1531*53ee8cc1Swenshuai.xi return true;
1532*53ee8cc1Swenshuai.xi #endif
1533*53ee8cc1Swenshuai.xi #endif
1534*53ee8cc1Swenshuai.xi }
1535*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_NORDIG_SSI_Table_Read(DMD_T2_CONSTEL constel,DMD_T2_CODERATE code_rate,float * read_value)1536*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_NORDIG_SSI_Table_Read(DMD_T2_CONSTEL constel, DMD_T2_CODERATE code_rate, float *read_value)
1537*53ee8cc1Swenshuai.xi {
1538*53ee8cc1Swenshuai.xi // MS_BOOL return_val;
1539*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_NORDIG_SSI_Table_Read\n"));
1540*53ee8cc1Swenshuai.xi
1541*53ee8cc1Swenshuai.xi *read_value = dvbt2_ssi_dbm_nordigp1[constel][code_rate];
1542*53ee8cc1Swenshuai.xi return TRUE;
1543*53ee8cc1Swenshuai.xi #if 0
1544*53ee8cc1Swenshuai.xi #if(0)
1545*53ee8cc1Swenshuai.xi DVBT2_NORDIG_SSI_TABLE_READ_PARAM Drv_DVBT2_NORDIGSSITableRead_PARAM;
1546*53ee8cc1Swenshuai.xi Drv_DVBT2_NORDIGSSITableRead_PARAM.constel=constel;
1547*53ee8cc1Swenshuai.xi Drv_DVBT2_NORDIGSSITableRead_PARAM.code_rate=code_rate;
1548*53ee8cc1Swenshuai.xi Drv_DVBT2_NORDIGSSITableRead_PARAM.read_value=read_value;
1549*53ee8cc1Swenshuai.xi
1550*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1551*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_NORDIG_SSI_Table_Read, &Drv_DVBT2_NORDIGSSITableRead_PARAM);
1552*53ee8cc1Swenshuai.xi else
1553*53ee8cc1Swenshuai.xi return false;
1554*53ee8cc1Swenshuai.xi
1555*53ee8cc1Swenshuai.xi return Drv_DVBT2_NORDIGSSITableRead_PARAM.ret;
1556*53ee8cc1Swenshuai.xi #else
1557*53ee8cc1Swenshuai.xi // Drv_DVBT_NORDIGSSITableWrite_PARAM.ret=true;
1558*53ee8cc1Swenshuai.xi return true;
1559*53ee8cc1Swenshuai.xi #endif
1560*53ee8cc1Swenshuai.xi #endif
1561*53ee8cc1Swenshuai.xi }
1562*53ee8cc1Swenshuai.xi
1563*53ee8cc1Swenshuai.xi #endif
1564*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetPacketErr(MS_U16 * pktErr)1565*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetPacketErr(MS_U16 *pktErr)
1566*53ee8cc1Swenshuai.xi {
1567*53ee8cc1Swenshuai.xi // MS_BOOL return_val;
1568*53ee8cc1Swenshuai.xi DVBT2_GETPACKETERRPARAM Drv_DVBT2_GetPacketErr_PARAM;
1569*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPacketErr_PARAM.pktErr=pktErr;
1570*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPacketErr_PARAM.ret=false;
1571*53ee8cc1Swenshuai.xi
1572*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetPacketErr\n"));
1573*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1574*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetPacketErr, &Drv_DVBT2_GetPacketErr_PARAM);
1575*53ee8cc1Swenshuai.xi else
1576*53ee8cc1Swenshuai.xi return false;
1577*53ee8cc1Swenshuai.xi
1578*53ee8cc1Swenshuai.xi return Drv_DVBT2_GetPacketErr_PARAM.ret;
1579*53ee8cc1Swenshuai.xi
1580*53ee8cc1Swenshuai.xi #if 0
1581*53ee8cc1Swenshuai.xi MS_BOOL bRet;
1582*53ee8cc1Swenshuai.xi float fBER;
1583*53ee8cc1Swenshuai.xi
1584*53ee8cc1Swenshuai.xi DMD_LOCK();
1585*53ee8cc1Swenshuai.xi INTERN_DVBT2_GetPostLdpcBer(&fBER);
1586*53ee8cc1Swenshuai.xi bRet=INTERN_DVBT2_GetPacketErr(pktErr);
1587*53ee8cc1Swenshuai.xi if ((*pktErr ==1) && (fBER<= 0.000001)) // for no signal case, from Oga
1588*53ee8cc1Swenshuai.xi {
1589*53ee8cc1Swenshuai.xi *pktErr = 0x3FF;
1590*53ee8cc1Swenshuai.xi }
1591*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1592*53ee8cc1Swenshuai.xi if (_u8DMDDbgLevel >= DMD_T2_DBGLV_DEBUG)
1593*53ee8cc1Swenshuai.xi {
1594*53ee8cc1Swenshuai.xi printf("MDrv_DMD_DVBT2_GetPacketErr %d\n", *pktErr);
1595*53ee8cc1Swenshuai.xi }
1596*53ee8cc1Swenshuai.xi #endif
1597*53ee8cc1Swenshuai.xi DMD_UNLOCK();
1598*53ee8cc1Swenshuai.xi
1599*53ee8cc1Swenshuai.xi return bRet;
1600*53ee8cc1Swenshuai.xi #endif
1601*53ee8cc1Swenshuai.xi }
1602*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetL1Info(MS_U16 * u16Info,DMD_DVBT2_SIGNAL_INFO eSignalType)1603*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetL1Info(MS_U16 *u16Info, DMD_DVBT2_SIGNAL_INFO eSignalType)
1604*53ee8cc1Swenshuai.xi {
1605*53ee8cc1Swenshuai.xi DVBT2_GETL1INFO_PARAM Drv_DVBT2_GetL1Info_PARAM;
1606*53ee8cc1Swenshuai.xi Drv_DVBT2_GetL1Info_PARAM.u16Info=u16Info;
1607*53ee8cc1Swenshuai.xi Drv_DVBT2_GetL1Info_PARAM.eSignalType=eSignalType;
1608*53ee8cc1Swenshuai.xi Drv_DVBT2_GetL1Info_PARAM.ret=false;
1609*53ee8cc1Swenshuai.xi
1610*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetL1Info\n"));
1611*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1612*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetL1Info, &Drv_DVBT2_GetL1Info_PARAM);
1613*53ee8cc1Swenshuai.xi else
1614*53ee8cc1Swenshuai.xi return false;
1615*53ee8cc1Swenshuai.xi
1616*53ee8cc1Swenshuai.xi return Drv_DVBT2_GetL1Info_PARAM.ret;
1617*53ee8cc1Swenshuai.xi
1618*53ee8cc1Swenshuai.xi #if 0
1619*53ee8cc1Swenshuai.xi MS_BOOL bRet;
1620*53ee8cc1Swenshuai.xi
1621*53ee8cc1Swenshuai.xi DMD_LOCK();
1622*53ee8cc1Swenshuai.xi bRet=INTERN_DVBT2_Get_L1_Parameter(u16Info, eSignalType );
1623*53ee8cc1Swenshuai.xi DMD_UNLOCK();
1624*53ee8cc1Swenshuai.xi
1625*53ee8cc1Swenshuai.xi return bRet;
1626*53ee8cc1Swenshuai.xi #endif
1627*53ee8cc1Swenshuai.xi }
1628*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_SetPowerState(EN_POWER_MODE u16PowerState)1629*53ee8cc1Swenshuai.xi MS_U32 MDrv_DMD_DVBT2_SetPowerState(EN_POWER_MODE u16PowerState)
1630*53ee8cc1Swenshuai.xi {
1631*53ee8cc1Swenshuai.xi // MS_BOOL return_val;
1632*53ee8cc1Swenshuai.xi DVBT2_SETPOWERSTATE_PARAM Drv_DVBT2_SetPowerState_PARAM;
1633*53ee8cc1Swenshuai.xi Drv_DVBT2_SetPowerState_PARAM.u16PowerState=u16PowerState;
1634*53ee8cc1Swenshuai.xi Drv_DVBT2_SetPowerState_PARAM.ret=false;
1635*53ee8cc1Swenshuai.xi
1636*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_SetPowerState\n"));
1637*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1638*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_SetPowerState, &Drv_DVBT2_SetPowerState_PARAM);
1639*53ee8cc1Swenshuai.xi else
1640*53ee8cc1Swenshuai.xi return false;
1641*53ee8cc1Swenshuai.xi
1642*53ee8cc1Swenshuai.xi return Drv_DVBT2_SetPowerState_PARAM.ret;
1643*53ee8cc1Swenshuai.xi
1644*53ee8cc1Swenshuai.xi #if 0
1645*53ee8cc1Swenshuai.xi static EN_POWER_MODE _prev_u16PowerState = E_POWER_MECHANICAL;
1646*53ee8cc1Swenshuai.xi MS_U32 u32Return = UTOPIA_STATUS_FAIL;
1647*53ee8cc1Swenshuai.xi u32Return = u32Return;
1648*53ee8cc1Swenshuai.xi if (u16PowerState == E_POWER_SUSPEND)
1649*53ee8cc1Swenshuai.xi {
1650*53ee8cc1Swenshuai.xi MDrv_DMD_DVBT2_Exit();
1651*53ee8cc1Swenshuai.xi _prev_u16PowerState = u16PowerState;
1652*53ee8cc1Swenshuai.xi u32Return = UTOPIA_STATUS_SUCCESS;//SUSPEND_OK;
1653*53ee8cc1Swenshuai.xi }
1654*53ee8cc1Swenshuai.xi else if (u16PowerState == E_POWER_RESUME)
1655*53ee8cc1Swenshuai.xi {
1656*53ee8cc1Swenshuai.xi if (_prev_u16PowerState == E_POWER_SUSPEND)
1657*53ee8cc1Swenshuai.xi {
1658*53ee8cc1Swenshuai.xi MDrv_DMD_DVBT2_Init(&_sDMD_DVBT2_InitData, sizeof(_sDMD_DVBT2_InitData));
1659*53ee8cc1Swenshuai.xi _prev_u16PowerState = u16PowerState;
1660*53ee8cc1Swenshuai.xi u32Return = UTOPIA_STATUS_SUCCESS;//RESUME_OK;
1661*53ee8cc1Swenshuai.xi }
1662*53ee8cc1Swenshuai.xi else
1663*53ee8cc1Swenshuai.xi {
1664*53ee8cc1Swenshuai.xi printf("[%s,%5d]It is not suspended yet. We shouldn't resume\n",__FUNCTION__,__LINE__);
1665*53ee8cc1Swenshuai.xi u32Return = UTOPIA_STATUS_FAIL;//SUSPEND_FAILED;
1666*53ee8cc1Swenshuai.xi }
1667*53ee8cc1Swenshuai.xi }
1668*53ee8cc1Swenshuai.xi else
1669*53ee8cc1Swenshuai.xi {
1670*53ee8cc1Swenshuai.xi printf("[%s,%5d]Do Nothing: %d\n",__FUNCTION__,__LINE__,u16PowerState);
1671*53ee8cc1Swenshuai.xi u32Return = FALSE;
1672*53ee8cc1Swenshuai.xi }
1673*53ee8cc1Swenshuai.xi return UTOPIA_STATUS_SUCCESS;
1674*53ee8cc1Swenshuai.xi #endif
1675*53ee8cc1Swenshuai.xi }
1676*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetPlpBitMap(MS_U8 * u8PlpBitMap)1677*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetPlpBitMap(MS_U8* u8PlpBitMap)
1678*53ee8cc1Swenshuai.xi {
1679*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetPlpBitMap\n"));
1680*53ee8cc1Swenshuai.xi
1681*53ee8cc1Swenshuai.xi DVBT2_GETPLPBITMAP_PARAM Drv_DVBT2_GetPlpBitMap_PARAM;
1682*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPlpBitMap_PARAM.u8PlpBitMap=u8PlpBitMap;
1683*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPlpBitMap_PARAM.ret=false;
1684*53ee8cc1Swenshuai.xi
1685*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1686*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetPlpBitMap, &Drv_DVBT2_GetPlpBitMap_PARAM);
1687*53ee8cc1Swenshuai.xi else
1688*53ee8cc1Swenshuai.xi return false;
1689*53ee8cc1Swenshuai.xi
1690*53ee8cc1Swenshuai.xi return Drv_DVBT2_GetPlpBitMap_PARAM.ret;
1691*53ee8cc1Swenshuai.xi
1692*53ee8cc1Swenshuai.xi #if 0
1693*53ee8cc1Swenshuai.xi return INTERN_DVBT2_GetPlpBitMap(u8PlpBitMap);
1694*53ee8cc1Swenshuai.xi #endif
1695*53ee8cc1Swenshuai.xi }
1696*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_GetPlpGroupID(MS_U8 u8PlpID,MS_U8 * u8GroupID)1697*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_GetPlpGroupID(MS_U8 u8PlpID, MS_U8* u8GroupID)
1698*53ee8cc1Swenshuai.xi {
1699*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_GetPlpGroupID\n"));
1700*53ee8cc1Swenshuai.xi
1701*53ee8cc1Swenshuai.xi DVBT2_GETPLPGROUPID_PARAM Drv_DVBT2_GetPlpGroupID_PARAM;
1702*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPlpGroupID_PARAM.u8PlpID=u8PlpID;
1703*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPlpGroupID_PARAM.u8GroupID=u8GroupID;
1704*53ee8cc1Swenshuai.xi Drv_DVBT2_GetPlpGroupID_PARAM.ret=false;
1705*53ee8cc1Swenshuai.xi
1706*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1707*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_GetPlpGroupID, &Drv_DVBT2_GetPlpGroupID_PARAM);
1708*53ee8cc1Swenshuai.xi else
1709*53ee8cc1Swenshuai.xi return false;
1710*53ee8cc1Swenshuai.xi
1711*53ee8cc1Swenshuai.xi return Drv_DVBT2_GetPlpGroupID_PARAM.ret;
1712*53ee8cc1Swenshuai.xi
1713*53ee8cc1Swenshuai.xi #if 0
1714*53ee8cc1Swenshuai.xi return INTERN_DVBT2_GetPlpGroupID(u8PlpID, u8GroupID);
1715*53ee8cc1Swenshuai.xi #endif
1716*53ee8cc1Swenshuai.xi }
1717*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBT2_SetPlpID(MS_U8 u8PlpID,MS_U8 u8GroupID)1718*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBT2_SetPlpID(MS_U8 u8PlpID, MS_U8 u8GroupID)
1719*53ee8cc1Swenshuai.xi {
1720*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBT2.c]MDrv_DMD_DVBT2_SetPlpID\n"));
1721*53ee8cc1Swenshuai.xi
1722*53ee8cc1Swenshuai.xi DMD_DVBT2_SETPLPID_PARAM Drv_DVBT2_SetPlpID_PARAM;
1723*53ee8cc1Swenshuai.xi Drv_DVBT2_SetPlpID_PARAM.u8PlpID=u8PlpID;
1724*53ee8cc1Swenshuai.xi Drv_DVBT2_SetPlpID_PARAM.u8GroupID=u8GroupID;
1725*53ee8cc1Swenshuai.xi Drv_DVBT2_SetPlpID_PARAM.ret=false;
1726*53ee8cc1Swenshuai.xi
1727*53ee8cc1Swenshuai.xi if(u32DVBT2open==1)
1728*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBT2Instant, DMD_DVBT2_DRV_CMD_SetPlpID, &Drv_DVBT2_SetPlpID_PARAM);
1729*53ee8cc1Swenshuai.xi else
1730*53ee8cc1Swenshuai.xi return false;
1731*53ee8cc1Swenshuai.xi
1732*53ee8cc1Swenshuai.xi return Drv_DVBT2_SetPlpID_PARAM.ret;
1733*53ee8cc1Swenshuai.xi
1734*53ee8cc1Swenshuai.xi #if 0
1735*53ee8cc1Swenshuai.xi MS_BOOL bRet = FALSE;
1736*53ee8cc1Swenshuai.xi
1737*53ee8cc1Swenshuai.xi if (INTERN_DVBT2_GetLock(E_DMD_DVBT2_FEC_LOCK) == TRUE)
1738*53ee8cc1Swenshuai.xi {
1739*53ee8cc1Swenshuai.xi if (u8PlpID != 0xFF)
1740*53ee8cc1Swenshuai.xi {
1741*53ee8cc1Swenshuai.xi MS_U16 u16Retry = 0;
1742*53ee8cc1Swenshuai.xi MS_U8 u8GroupId = 0;
1743*53ee8cc1Swenshuai.xi MsOS_DelayTask(500);
1744*53ee8cc1Swenshuai.xi
1745*53ee8cc1Swenshuai.xi bRet = INTERN_DVBT2_GetPlpGroupID(u8PlpID, &u8GroupId);
1746*53ee8cc1Swenshuai.xi while ((bRet == FALSE) && (u16Retry < 60))
1747*53ee8cc1Swenshuai.xi {
1748*53ee8cc1Swenshuai.xi u16Retry++;
1749*53ee8cc1Swenshuai.xi printf("DoSet_DVBT2 get groupid retry %d \n", u16Retry);
1750*53ee8cc1Swenshuai.xi MsOS_DelayTask(100);
1751*53ee8cc1Swenshuai.xi bRet = INTERN_DVBT2_GetPlpGroupID(u8PlpID, &u8GroupId);
1752*53ee8cc1Swenshuai.xi }
1753*53ee8cc1Swenshuai.xi if (bRet == FALSE)
1754*53ee8cc1Swenshuai.xi {
1755*53ee8cc1Swenshuai.xi printf("DoSet_DVBT2() INTERN_DVBT2_GetPlpGroupID(%d) Error \n", u8PlpID);
1756*53ee8cc1Swenshuai.xi return FALSE;
1757*53ee8cc1Swenshuai.xi }
1758*53ee8cc1Swenshuai.xi
1759*53ee8cc1Swenshuai.xi bRet = INTERN_DVBT2_SetPlpGroupID(u8PlpID, u8GroupId);
1760*53ee8cc1Swenshuai.xi if (bRet == FALSE)
1761*53ee8cc1Swenshuai.xi {
1762*53ee8cc1Swenshuai.xi printf("DoSet_DVBT2() INTERN_DVBT2_SetPlpGroupID(%d,%d) Error", u8PlpID, u8GroupId);
1763*53ee8cc1Swenshuai.xi return FALSE;
1764*53ee8cc1Swenshuai.xi }
1765*53ee8cc1Swenshuai.xi }
1766*53ee8cc1Swenshuai.xi }
1767*53ee8cc1Swenshuai.xi else
1768*53ee8cc1Swenshuai.xi {
1769*53ee8cc1Swenshuai.xi return FALSE;
1770*53ee8cc1Swenshuai.xi }
1771*53ee8cc1Swenshuai.xi
1772*53ee8cc1Swenshuai.xi return TRUE;
1773*53ee8cc1Swenshuai.xi #endif
1774*53ee8cc1Swenshuai.xi }