xref: /utopia/UTPA2-700.0.x/modules/demodulator/hal/mooney/demod/halDMD_INTERN_ISDBT.c (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2006-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!�L) 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 //  Include Files
98*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
99*53ee8cc1Swenshuai.xi 
100*53ee8cc1Swenshuai.xi #include <stdio.h>
101*53ee8cc1Swenshuai.xi #include <math.h>
102*53ee8cc1Swenshuai.xi 
103*53ee8cc1Swenshuai.xi #include "drvDMD_ISDBT.h"
104*53ee8cc1Swenshuai.xi 
105*53ee8cc1Swenshuai.xi #include "MsTypes.h"
106*53ee8cc1Swenshuai.xi #if DMD_ISDBT_UTOPIA_EN || DMD_ISDBT_UTOPIA2_EN
107*53ee8cc1Swenshuai.xi #include "drvDMD_common.h"
108*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_common.h"
109*53ee8cc1Swenshuai.xi #endif
110*53ee8cc1Swenshuai.xi 
111*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
112*53ee8cc1Swenshuai.xi //  Driver Compiler Options
113*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
114*53ee8cc1Swenshuai.xi 
115*53ee8cc1Swenshuai.xi #define DMD_ISDBT_CHIP_EULER        0x00
116*53ee8cc1Swenshuai.xi #define DMD_ISDBT_CHIP_NUGGET       0x01
117*53ee8cc1Swenshuai.xi #define DMD_ISDBT_CHIP_KAPPA        0x02
118*53ee8cc1Swenshuai.xi #define DMD_ISDBT_CHIP_EINSTEIN     0x03
119*53ee8cc1Swenshuai.xi #define DMD_ISDBT_CHIP_NAPOLI       0x04
120*53ee8cc1Swenshuai.xi #define DMD_ISDBT_CHIP_MONACO       0x05
121*53ee8cc1Swenshuai.xi #define DMD_ISDBT_CHIP_MIAMI        0x06
122*53ee8cc1Swenshuai.xi #define DMD_ISDBT_CHIP_MUJI         0x07
123*53ee8cc1Swenshuai.xi 
124*53ee8cc1Swenshuai.xi #if defined(euler)
125*53ee8cc1Swenshuai.xi  #define DMD_ISDBT_CHIP_VERSION     DMD_ISDBT_CHIP_EULER
126*53ee8cc1Swenshuai.xi #elif defined(nugget)
127*53ee8cc1Swenshuai.xi  #define DMD_ISDBT_CHIP_VERSION     DMD_ISDBT_CHIP_NUGGET
128*53ee8cc1Swenshuai.xi #elif defined(kappa)
129*53ee8cc1Swenshuai.xi  #define DMD_ISDBT_CHIP_VERSION     DMD_ISDBT_CHIP_KAPPA
130*53ee8cc1Swenshuai.xi #elif defined(einstein)
131*53ee8cc1Swenshuai.xi  #define DMD_ISDBT_CHIP_VERSION     DMD_ISDBT_CHIP_EINSTEIN
132*53ee8cc1Swenshuai.xi #elif defined(napoli)
133*53ee8cc1Swenshuai.xi  #define DMD_ISDBT_CHIP_VERSION     DMD_ISDBT_CHIP_NAPOLI
134*53ee8cc1Swenshuai.xi #elif defined(miami)
135*53ee8cc1Swenshuai.xi  #define DMD_ISDBT_CHIP_VERSION     DMD_ISDBT_CHIP_MIAMI
136*53ee8cc1Swenshuai.xi  #elif defined(muji)
137*53ee8cc1Swenshuai.xi  #define DMD_ISDBT_CHIP_VERSION     DMD_ISDBT_CHIP_MUJI
138*53ee8cc1Swenshuai.xi #else
139*53ee8cc1Swenshuai.xi  #define DMD_ISDBT_CHIP_VERSION     DMD_ISDBT_CHIP_EULER
140*53ee8cc1Swenshuai.xi #endif
141*53ee8cc1Swenshuai.xi 
142*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
143*53ee8cc1Swenshuai.xi //  Local Defines
144*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi #define HAL_INTERN_ISDBT_DBINFO(y)   //y
147*53ee8cc1Swenshuai.xi #ifndef MBRegBase
148*53ee8cc1Swenshuai.xi #define MBRegBase               0x112600UL
149*53ee8cc1Swenshuai.xi #endif
150*53ee8cc1Swenshuai.xi #ifndef DMDMcuBase
151*53ee8cc1Swenshuai.xi #define DMDMcuBase              0x103480UL
152*53ee8cc1Swenshuai.xi #endif
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi #define REG_ISDBT_LOCK_STATUS   0x36F5
155*53ee8cc1Swenshuai.xi #define ISDBT_TDP_REG_BASE      0x3700
156*53ee8cc1Swenshuai.xi #define ISDBT_FDP_REG_BASE      0x3800
157*53ee8cc1Swenshuai.xi #define ISDBT_FDPEXT_REG_BASE   0x3900
158*53ee8cc1Swenshuai.xi #define ISDBT_OUTER_REG_BASE    0x3A00
159*53ee8cc1Swenshuai.xi 
160*53ee8cc1Swenshuai.xi #define ISDBT_ACI_COEF_SIZE     92
161*53ee8cc1Swenshuai.xi 
162*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
163*53ee8cc1Swenshuai.xi //  Local Variables
164*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
165*53ee8cc1Swenshuai.xi 
166*53ee8cc1Swenshuai.xi const MS_U8 INTERN_ISDBT_table[] = {
167*53ee8cc1Swenshuai.xi     #include "DMD_INTERN_ISDBT.dat"
168*53ee8cc1Swenshuai.xi };
169*53ee8cc1Swenshuai.xi 
170*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
171*53ee8cc1Swenshuai.xi //  Global Variables
172*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
173*53ee8cc1Swenshuai.xi 
174*53ee8cc1Swenshuai.xi extern MS_U8 u8DMD_ISDBT_DMD_ID;
175*53ee8cc1Swenshuai.xi 
176*53ee8cc1Swenshuai.xi extern DMD_ISDBT_ResData *psDMD_ISDBT_ResData;
177*53ee8cc1Swenshuai.xi 
178*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
179*53ee8cc1Swenshuai.xi //  Local Functions
180*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
_MBX_WriteReg(MS_U16 u16Addr,MS_U8 u8Data)181*53ee8cc1Swenshuai.xi static MS_BOOL _MBX_WriteReg(MS_U16 u16Addr, MS_U8 u8Data)
182*53ee8cc1Swenshuai.xi {
183*53ee8cc1Swenshuai.xi     MS_U8 u8CheckCount;
184*53ee8cc1Swenshuai.xi     MS_U8 u8CheckFlag;
185*53ee8cc1Swenshuai.xi 
186*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x00, (u16Addr&0xff));
187*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x01, (u16Addr>>8));
188*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x10, u8Data);
189*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x1E, 0x01);
190*53ee8cc1Swenshuai.xi 
191*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)|0x02);    // assert interrupt to VD MCU51
192*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)&(~0x02)); // de-assert interrupt to VD MCU51
193*53ee8cc1Swenshuai.xi 
194*53ee8cc1Swenshuai.xi     for (u8CheckCount=0; u8CheckCount < 10; u8CheckCount++)
195*53ee8cc1Swenshuai.xi     {
196*53ee8cc1Swenshuai.xi         u8CheckFlag = HAL_DMD_RIU_ReadByte(MBRegBase + 0x1E);
197*53ee8cc1Swenshuai.xi         if ((u8CheckFlag&0x01)==0)
198*53ee8cc1Swenshuai.xi              break;
199*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
200*53ee8cc1Swenshuai.xi     }
201*53ee8cc1Swenshuai.xi 
202*53ee8cc1Swenshuai.xi     if (u8CheckFlag&0x01)
203*53ee8cc1Swenshuai.xi     {
204*53ee8cc1Swenshuai.xi         printf("ERROR: ISDBT INTERN DEMOD MBX WRITE TIME OUT!\n");
205*53ee8cc1Swenshuai.xi         return FALSE;
206*53ee8cc1Swenshuai.xi     }
207*53ee8cc1Swenshuai.xi 
208*53ee8cc1Swenshuai.xi     return TRUE;
209*53ee8cc1Swenshuai.xi }
210*53ee8cc1Swenshuai.xi 
_MBX_ReadReg(MS_U16 u16Addr,MS_U8 * u8Data)211*53ee8cc1Swenshuai.xi static MS_BOOL _MBX_ReadReg(MS_U16 u16Addr, MS_U8 *u8Data)
212*53ee8cc1Swenshuai.xi {
213*53ee8cc1Swenshuai.xi     MS_U8 u8CheckCount;
214*53ee8cc1Swenshuai.xi     MS_U8 u8CheckFlag;
215*53ee8cc1Swenshuai.xi 
216*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x00, (u16Addr&0xff));
217*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x01, (u16Addr>>8));
218*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x1E, 0x02);
219*53ee8cc1Swenshuai.xi 
220*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)|0x02);    // assert interrupt to VD MCU51
221*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)&(~0x02)); // de-assert interrupt to VD MCU51
222*53ee8cc1Swenshuai.xi 
223*53ee8cc1Swenshuai.xi     for (u8CheckCount=0; u8CheckCount < 10; u8CheckCount++)
224*53ee8cc1Swenshuai.xi     {
225*53ee8cc1Swenshuai.xi         u8CheckFlag = HAL_DMD_RIU_ReadByte(MBRegBase + 0x1E);
226*53ee8cc1Swenshuai.xi         if ((u8CheckFlag&0x02)==0)
227*53ee8cc1Swenshuai.xi         {
228*53ee8cc1Swenshuai.xi             *u8Data = HAL_DMD_RIU_ReadByte(MBRegBase + 0x10);
229*53ee8cc1Swenshuai.xi         }
230*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
231*53ee8cc1Swenshuai.xi     }
232*53ee8cc1Swenshuai.xi 
233*53ee8cc1Swenshuai.xi     if (u8CheckFlag&0x02)
234*53ee8cc1Swenshuai.xi     {
235*53ee8cc1Swenshuai.xi         printf("ERROR: ISDBT INTERN DEMOD MBX READ TIME OUT!\n");
236*53ee8cc1Swenshuai.xi         return FALSE;
237*53ee8cc1Swenshuai.xi     }
238*53ee8cc1Swenshuai.xi 
239*53ee8cc1Swenshuai.xi     return TRUE;
240*53ee8cc1Swenshuai.xi }
241*53ee8cc1Swenshuai.xi 
_CALCULATE_SQI(float fber)242*53ee8cc1Swenshuai.xi static MS_U16 _CALCULATE_SQI(float fber)
243*53ee8cc1Swenshuai.xi {
244*53ee8cc1Swenshuai.xi     float flog_ber;
245*53ee8cc1Swenshuai.xi     MS_U16 u16SQI;
246*53ee8cc1Swenshuai.xi 
247*53ee8cc1Swenshuai.xi     #ifdef MSOS_TYPE_LINUX
248*53ee8cc1Swenshuai.xi     flog_ber = (float)log10((double)fber);
249*53ee8cc1Swenshuai.xi     #else
250*53ee8cc1Swenshuai.xi     if (fber != 0.0)
251*53ee8cc1Swenshuai.xi         flog_ber = (float)(-1.0*Log10Approx((double)(1.0 / fber)));
252*53ee8cc1Swenshuai.xi     else
253*53ee8cc1Swenshuai.xi         flog_ber = -8.0;//when fber=0 means u16SQI=100
254*53ee8cc1Swenshuai.xi     #endif
255*53ee8cc1Swenshuai.xi 
256*53ee8cc1Swenshuai.xi     //printf("dan fber = %f\n", fber);
257*53ee8cc1Swenshuai.xi     //printf("dan flog_ber = %f\n", flog_ber);
258*53ee8cc1Swenshuai.xi     // Part 2: transfer ber value to u16SQI value.
259*53ee8cc1Swenshuai.xi     if (flog_ber <= ( - 7.0))
260*53ee8cc1Swenshuai.xi     {
261*53ee8cc1Swenshuai.xi         u16SQI = 100;    //*quality = 100;
262*53ee8cc1Swenshuai.xi     }
263*53ee8cc1Swenshuai.xi     else if (flog_ber < -6.0)
264*53ee8cc1Swenshuai.xi     {
265*53ee8cc1Swenshuai.xi         u16SQI = (90+((( - 6.0) - flog_ber) / (( - 6.0) - ( - 7.0))*(100-90)));
266*53ee8cc1Swenshuai.xi     }
267*53ee8cc1Swenshuai.xi     else if (flog_ber < -5.5)
268*53ee8cc1Swenshuai.xi     {
269*53ee8cc1Swenshuai.xi         u16SQI = (80+((( - 5.5) - flog_ber) / (( - 5.5) - ( - 6.0))*(90-80)));
270*53ee8cc1Swenshuai.xi     }
271*53ee8cc1Swenshuai.xi     else if (flog_ber < -5.0)
272*53ee8cc1Swenshuai.xi     {
273*53ee8cc1Swenshuai.xi         u16SQI = (70+((( - 5.0) - flog_ber) / (( - 5.0) - ( - 5.5))*(80-70)));
274*53ee8cc1Swenshuai.xi     }
275*53ee8cc1Swenshuai.xi     else if (flog_ber < -4.5)
276*53ee8cc1Swenshuai.xi     {
277*53ee8cc1Swenshuai.xi         u16SQI = (60+((( - 4.5) - flog_ber) / (( -4.5) - ( - 5.0))*(70-50)));
278*53ee8cc1Swenshuai.xi     }
279*53ee8cc1Swenshuai.xi     else if (flog_ber < -4.0)
280*53ee8cc1Swenshuai.xi     {
281*53ee8cc1Swenshuai.xi         u16SQI = (50+((( - 4.0) - flog_ber) / (( - 4.0) - ( - 45))*(60-50)));
282*53ee8cc1Swenshuai.xi     }
283*53ee8cc1Swenshuai.xi     else if (flog_ber < -3.5)
284*53ee8cc1Swenshuai.xi     {
285*53ee8cc1Swenshuai.xi         u16SQI = (40+((( - 3.5) - flog_ber) / (( - 3.5) - ( - 4.0))*(50-40)));
286*53ee8cc1Swenshuai.xi     }
287*53ee8cc1Swenshuai.xi     else if (flog_ber < -3.0)
288*53ee8cc1Swenshuai.xi     {
289*53ee8cc1Swenshuai.xi         u16SQI = (30+((( - 3.0) - flog_ber) / (( - 3.0) - ( - 3.5))*(40-30)));
290*53ee8cc1Swenshuai.xi     }
291*53ee8cc1Swenshuai.xi     else if (flog_ber < -2.5)
292*53ee8cc1Swenshuai.xi     {
293*53ee8cc1Swenshuai.xi         u16SQI = (20+((( - 2.5) - flog_ber) / (( - 2.5) - ( -3.0))*(30-20)));
294*53ee8cc1Swenshuai.xi     }
295*53ee8cc1Swenshuai.xi     else if (flog_ber < -2.0)
296*53ee8cc1Swenshuai.xi     {
297*53ee8cc1Swenshuai.xi         u16SQI = (0+((( - 2.0) - flog_ber) / (( - 2.0) - ( - 2.5))*(20-0)));
298*53ee8cc1Swenshuai.xi     }
299*53ee8cc1Swenshuai.xi     else
300*53ee8cc1Swenshuai.xi     {
301*53ee8cc1Swenshuai.xi         u16SQI = 0;
302*53ee8cc1Swenshuai.xi     }
303*53ee8cc1Swenshuai.xi 
304*53ee8cc1Swenshuai.xi     return u16SQI;
305*53ee8cc1Swenshuai.xi }
306*53ee8cc1Swenshuai.xi 
307*53ee8cc1Swenshuai.xi #if (DMD_ISDBT_CHIP_VERSION == DMD_ISDBT_CHIP_EULER)
_HAL_INTERN_ISDBT_InitClk(void)308*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ISDBT_InitClk(void)
309*53ee8cc1Swenshuai.xi {
310*53ee8cc1Swenshuai.xi     printf("--------------DMD_ISDBT_CHIP_EULER--------------\n");
311*53ee8cc1Swenshuai.xi 
312*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x00, 0x03);
313*53ee8cc1Swenshuai.xi 
314*53ee8cc1Swenshuai.xi     // Init by HKMCU
315*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
316*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x06);
317*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x0b);
318*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
319*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
320*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
321*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
322*53ee8cc1Swenshuai.xi 
323*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
324*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x00);
325*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
326*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
327*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
328*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
329*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
330*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
331*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
332*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x00);
333*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
334*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
335*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f43, 0x00);
336*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f42, 0x00);
337*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f45, 0x00);
338*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f44, 0x00);
339*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x00);
340*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);
341*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4b, 0x00);
342*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4a, 0x00);
343*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4c, 0x00);
344*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x04);
345*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x44);
346*53ee8cc1Swenshuai.xi 
347*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x03, 0x03);
348*53ee8cc1Swenshuai.xi }
349*53ee8cc1Swenshuai.xi #elif (DMD_ISDBT_CHIP_VERSION == DMD_ISDBT_CHIP_NUGGET)
_HAL_INTERN_ISDBT_InitClk(void)350*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ISDBT_InitClk(void)
351*53ee8cc1Swenshuai.xi {
352*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0;
353*53ee8cc1Swenshuai.xi 
354*53ee8cc1Swenshuai.xi     printf("--------------DMD_ISDBT_CHIP_NUGGET--------------\n");
355*53ee8cc1Swenshuai.xi 
356*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x00, 0x03);
357*53ee8cc1Swenshuai.xi 
358*53ee8cc1Swenshuai.xi     // Init by HKMCU
359*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
360*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
361*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x06);
362*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x0b);
363*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
364*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
365*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
366*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
367*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f28, 0x03);
368*53ee8cc1Swenshuai.xi 
369*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
370*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x00);
371*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
372*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
373*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
374*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
375*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
376*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
377*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
378*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x00);
379*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
380*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
381*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f43, 0x00);
382*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f42, 0x00);
383*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f45, 0x00);
384*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f44, 0x00);
385*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f46, 0x01);
386*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x00);
387*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);
388*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4b, 0x00);
389*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4a, 0x00);
390*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4c, 0x00);
391*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x04);
392*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x44);
393*53ee8cc1Swenshuai.xi 
394*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x1006F5);
395*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x1006F5, (u8Val & ~0x03));
396*53ee8cc1Swenshuai.xi 
397*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x03, 0x03);
398*53ee8cc1Swenshuai.xi }
399*53ee8cc1Swenshuai.xi #elif (DMD_ISDBT_CHIP_VERSION == DMD_ISDBT_CHIP_KAPPA)
_HAL_INTERN_ISDBT_InitClk(void)400*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ISDBT_InitClk(void)
401*53ee8cc1Swenshuai.xi {
402*53ee8cc1Swenshuai.xi     printf("--------------DMD_ISDBT_CHIP_KAPPA--------------\n");
403*53ee8cc1Swenshuai.xi 
404*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x00, 0x03);
405*53ee8cc1Swenshuai.xi 
406*53ee8cc1Swenshuai.xi     // Init by HKMCU
407*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
408*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x06);
409*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x0b);
410*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
411*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
412*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
413*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
414*53ee8cc1Swenshuai.xi 
415*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
416*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x00);
417*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
418*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
419*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
420*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
421*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
422*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
423*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
424*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x00);
425*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
426*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
427*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f43, 0x00);
428*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f42, 0x00);
429*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f45, 0x00);
430*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f44, 0x00);
431*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x00);
432*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);
433*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4b, 0x00);
434*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4a, 0x00);
435*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4c, 0x00);
436*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x04);
437*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x44);
438*53ee8cc1Swenshuai.xi 
439*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x03, 0x03);
440*53ee8cc1Swenshuai.xi }
441*53ee8cc1Swenshuai.xi #elif (DMD_ISDBT_CHIP_VERSION == DMD_ISDBT_CHIP_EINSTEIN)
_HAL_INTERN_ISDBT_InitClk(void)442*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ISDBT_InitClk(void)
443*53ee8cc1Swenshuai.xi {
444*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0;
445*53ee8cc1Swenshuai.xi 
446*53ee8cc1Swenshuai.xi     printf("--------------DMD_ISDBT_CHIP_EINSTEIN--------------\n");
447*53ee8cc1Swenshuai.xi 
448*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x00, 0x03);
449*53ee8cc1Swenshuai.xi 
450*53ee8cc1Swenshuai.xi     // Init by HKMCU
451*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x11208E);    //dan add to clear bit 0
452*53ee8cc1Swenshuai.xi     u8Val &= ~0x01;
453*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11208E, u8Val);
454*53ee8cc1Swenshuai.xi 
455*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
456*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
457*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x06);
458*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x0b);
459*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
460*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
461*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
462*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
463*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f28, 0x03);
464*53ee8cc1Swenshuai.xi 
465*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
466*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x00);
467*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
468*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
469*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
470*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
471*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
472*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
473*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
474*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x00);
475*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
476*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
477*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f43, 0x00);
478*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f42, 0x00);
479*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f45, 0x00);
480*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f44, 0x00);
481*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f46, 0x01);
482*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x00);
483*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);
484*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4b, 0x00);
485*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4a, 0x00);
486*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4c, 0x00);
487*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x04);
488*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x44);
489*53ee8cc1Swenshuai.xi 
490*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x03, 0x03);
491*53ee8cc1Swenshuai.xi }
492*53ee8cc1Swenshuai.xi #elif (DMD_ISDBT_CHIP_VERSION == DMD_ISDBT_CHIP_NAPOLI)
_HAL_INTERN_ISDBT_InitClk(void)493*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_InitClk(void) /* Ok */
494*53ee8cc1Swenshuai.xi {
495*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0;
496*53ee8cc1Swenshuai.xi 
497*53ee8cc1Swenshuai.xi     printf("--------------DMD_ISDBT_CHIP_NAPOLI--------------\n");
498*53ee8cc1Swenshuai.xi 
499*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x00, 0x03);
500*53ee8cc1Swenshuai.xi 
501*53ee8cc1Swenshuai.xi     // Init by HKMCU
502*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x11208E);    //dan add to clear bit 0
503*53ee8cc1Swenshuai.xi     u8Val &= ~0x01;
504*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11208E, u8Val);
505*53ee8cc1Swenshuai.xi 
506*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
507*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
508*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x06); //ts clock = 7.2M
509*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x0b);
510*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
511*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
512*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
513*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
514*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f28, 0x03);
515*53ee8cc1Swenshuai.xi 
516*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
517*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x00);
518*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
519*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
520*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
521*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
522*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
523*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
524*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
525*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x00);
526*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
527*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
528*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f43, 0x00);
529*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f42, 0x00);
530*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f45, 0x00);
531*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f44, 0x00);
532*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f46, 0x01);
533*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x00);
534*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);
535*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4b, 0x00);
536*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4a, 0x00);
537*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4c, 0x00);
538*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x04);
539*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x44);
540*53ee8cc1Swenshuai.xi 
541*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x03, 0x03);
542*53ee8cc1Swenshuai.xi }
543*53ee8cc1Swenshuai.xi #elif (DMD_ISDBT_CHIP_VERSION == DMD_ISDBT_CHIP_MONACO)
_HAL_INTERN_ISDBT_InitClk(void)544*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ISDBT_InitClk(void)
545*53ee8cc1Swenshuai.xi {
546*53ee8cc1Swenshuai.xi     MS_U8 u8Val = 0;
547*53ee8cc1Swenshuai.xi 
548*53ee8cc1Swenshuai.xi     printf("--------------DMD_ISDBT_CHIP_MONACO--------------\n");
549*53ee8cc1Swenshuai.xi 
550*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x00, 0x03);
551*53ee8cc1Swenshuai.xi 
552*53ee8cc1Swenshuai.xi     // Init by HKMCU
553*53ee8cc1Swenshuai.xi     u8Val = HAL_DMD_RIU_ReadByte(0x11208E);    //dan add to clear bit 0
554*53ee8cc1Swenshuai.xi     u8Val &= ~0x01;
555*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x11208E, u8Val);
556*53ee8cc1Swenshuai.xi 
557*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
558*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
559*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x06); //ts clock = 7.2M
560*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x0b);
561*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
562*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
563*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
564*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
565*53ee8cc1Swenshuai.xi 
566*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
567*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x00);
568*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
569*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
570*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
571*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
572*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
573*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
574*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
575*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x00);
576*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
577*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
578*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f43, 0x00);
579*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f42, 0x00);
580*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f45, 0x00);
581*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f44, 0x00);
582*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f46, 0x01);
583*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x00);
584*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);
585*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4b, 0x00);
586*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4a, 0x00);
587*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4c, 0x00);
588*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x04);
589*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x44);
590*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f71, 0x14);
591*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f70, 0x41);
592*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f77, 0x00);
593*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f76, 0x00);
594*53ee8cc1Swenshuai.xi 
595*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x03, 0x03);
596*53ee8cc1Swenshuai.xi }
597*53ee8cc1Swenshuai.xi #elif (DMD_ISDBT_CHIP_VERSION == DMD_ISDBT_CHIP_MIAMI)
_HAL_INTERN_ISDBT_InitClk(void)598*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ISDBT_InitClk(void)
599*53ee8cc1Swenshuai.xi {
600*53ee8cc1Swenshuai.xi     printf("--------------DMD_ISDBT_CHIP_MIAMI--------------\n");
601*53ee8cc1Swenshuai.xi 
602*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x00, 0x03);
603*53ee8cc1Swenshuai.xi 
604*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
605*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
606*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x06); //ts clock = 7.2M
607*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x0b);
608*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
609*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
610*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
611*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
612*53ee8cc1Swenshuai.xi 
613*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
614*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x00);
615*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
616*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
617*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
618*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
619*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
620*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
621*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
622*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x00);
623*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
624*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
625*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f43, 0x00);
626*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f42, 0x00);
627*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f45, 0x00);
628*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f44, 0x00);
629*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f46, 0x01);
630*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x00);
631*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);
632*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4b, 0x00);
633*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4a, 0x00);
634*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4d, 0x00); //inner clock
635*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4c, 0x00);
636*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4e, 0x00); //outer clock
637*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x04);
638*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x44);
639*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f51, 0x00); //cci lms clock
640*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f50, 0x88); //cci lms clock
641*53ee8cc1Swenshuai.xi 
642*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x03, 0x03);
643*53ee8cc1Swenshuai.xi }
644*53ee8cc1Swenshuai.xi #elif (DMD_ISDBT_CHIP_VERSION == DMD_ISDBT_CHIP_MUJI)
_HAL_INTERN_ISDBT_InitClk(void)645*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ISDBT_InitClk(void)
646*53ee8cc1Swenshuai.xi {
647*53ee8cc1Swenshuai.xi     printf("--------------DMD_ISDBT_CHIP_MUJI--------------\n");
648*53ee8cc1Swenshuai.xi 
649*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x00, 0x03);
650*53ee8cc1Swenshuai.xi 
651*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10331e, 0x10);
652*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x06); //ts clock = 7.2M
653*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x0b);
654*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
655*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
656*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
657*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
658*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103302, 0x01);
659*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103302, 0x00);
660*53ee8cc1Swenshuai.xi 
661*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f29, 0x00);
662*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f28, 0x10);
663*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0b, 0x00);
664*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0a, 0x00);
665*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0d, 0x00);
666*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0c, 0x00);
667*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0f, 0x00);
668*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f0e, 0x00);
669*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f11, 0x00);
670*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f10, 0x00);
671*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f13, 0x00);
672*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f12, 0x00);
673*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f19, 0x00);
674*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f18, 0x00);
675*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f43, 0x00);
676*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f42, 0x00);
677*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f45, 0x44);
678*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f44, 0x44);
679*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f46, 0x01);
680*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f49, 0x00);
681*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f48, 0x00);
682*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4b, 0x00);
683*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4a, 0x00);
684*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4d, 0x00); //inner clock
685*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4c, 0x40);
686*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f23, 0x04);
687*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f22, 0x44);
688*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f71, 0x14);
689*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f70, 0x41);
690*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f77, 0x00);
691*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f76, 0x00);
692*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4f, 0x01);
693*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x111f4e, 0x00);
694*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112091, 0x46);
695*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x112090, 0x00);
696*53ee8cc1Swenshuai.xi 
697*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByteMask(0x101e39, 0x03, 0x03);
698*53ee8cc1Swenshuai.xi }
699*53ee8cc1Swenshuai.xi 
700*53ee8cc1Swenshuai.xi #else
_HAL_INTERN_ISDBT_InitClk(void)701*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ISDBT_InitClk(void)
702*53ee8cc1Swenshuai.xi {
703*53ee8cc1Swenshuai.xi     printf("--------------DMD_ISDBT_CHIP_NONE--------------\n");
704*53ee8cc1Swenshuai.xi }
705*53ee8cc1Swenshuai.xi #endif
706*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_Ready(void)707*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_Ready(void)
708*53ee8cc1Swenshuai.xi {
709*53ee8cc1Swenshuai.xi     MS_U8 udata = 0x00;
710*53ee8cc1Swenshuai.xi 
711*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x1E, 0x02);
712*53ee8cc1Swenshuai.xi 
713*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)|0x02);    // assert interrupt to VD MCU51
714*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)&(~0x02)); // de-assert interrupt to VD MCU51
715*53ee8cc1Swenshuai.xi 
716*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
717*53ee8cc1Swenshuai.xi 
718*53ee8cc1Swenshuai.xi     udata = HAL_DMD_RIU_ReadByte(MBRegBase + 0x1E);
719*53ee8cc1Swenshuai.xi 
720*53ee8cc1Swenshuai.xi     if (udata) return FALSE;
721*53ee8cc1Swenshuai.xi 
722*53ee8cc1Swenshuai.xi     return TRUE;
723*53ee8cc1Swenshuai.xi }
724*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_Download(void)725*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_Download(void)
726*53ee8cc1Swenshuai.xi {
727*53ee8cc1Swenshuai.xi     DMD_ISDBT_ResData *pRes = psDMD_ISDBT_ResData + u8DMD_ISDBT_DMD_ID;
728*53ee8cc1Swenshuai.xi 
729*53ee8cc1Swenshuai.xi     MS_U8  udata = 0x00;
730*53ee8cc1Swenshuai.xi     MS_U16 i = 0;
731*53ee8cc1Swenshuai.xi     MS_U16 fail_cnt = 0;
732*53ee8cc1Swenshuai.xi     MS_U8  u8TmpData;
733*53ee8cc1Swenshuai.xi     MS_U16 u16AddressOffset;
734*53ee8cc1Swenshuai.xi     const MS_U8 *ISDBT_table;
735*53ee8cc1Swenshuai.xi     MS_U16 u16Lib_size;
736*53ee8cc1Swenshuai.xi 
737*53ee8cc1Swenshuai.xi     if (pRes->sDMD_ISDBT_PriData.bDownloaded)
738*53ee8cc1Swenshuai.xi     {
739*53ee8cc1Swenshuai.xi         if (_HAL_INTERN_ISDBT_Ready())
740*53ee8cc1Swenshuai.xi         {
741*53ee8cc1Swenshuai.xi             HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00,  0x01); // reset VD_MCU
742*53ee8cc1Swenshuai.xi             HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00,  0x00);
743*53ee8cc1Swenshuai.xi             MsOS_DelayTask(20);
744*53ee8cc1Swenshuai.xi             return TRUE;
745*53ee8cc1Swenshuai.xi         }
746*53ee8cc1Swenshuai.xi     }
747*53ee8cc1Swenshuai.xi 
748*53ee8cc1Swenshuai.xi     ISDBT_table = &INTERN_ISDBT_table[0];
749*53ee8cc1Swenshuai.xi     u16Lib_size = sizeof(INTERN_ISDBT_table);
750*53ee8cc1Swenshuai.xi 
751*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00, 0x01); // reset VD_MCU
752*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x01, 0x00); // disable SRAM
753*53ee8cc1Swenshuai.xi 
754*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00, 0x00); // release MCU, madison patch
755*53ee8cc1Swenshuai.xi 
756*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x03, 0x50); // enable "vdmcu51_if"
757*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x03, 0x51); // enable auto-increase
758*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x04, 0x00); // sram address low byte
759*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x05, 0x00); // sram address high byte
760*53ee8cc1Swenshuai.xi 
761*53ee8cc1Swenshuai.xi     ////  Load code thru VDMCU_IF ////
762*53ee8cc1Swenshuai.xi     HAL_INTERN_ISDBT_DBINFO(printf(">Load Code...\n"));
763*53ee8cc1Swenshuai.xi 
764*53ee8cc1Swenshuai.xi     for (i = 0; i < u16Lib_size; i++)
765*53ee8cc1Swenshuai.xi     {
766*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, ISDBT_table[i]); // write data to VD MCU 51 code sram
767*53ee8cc1Swenshuai.xi     }
768*53ee8cc1Swenshuai.xi 
769*53ee8cc1Swenshuai.xi     ////  Content verification ////
770*53ee8cc1Swenshuai.xi     HAL_INTERN_ISDBT_DBINFO(printf(">Verify Code...\n"));
771*53ee8cc1Swenshuai.xi 
772*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x04, 0x00); // sram address low byte
773*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x05, 0x00); // sram address high byte
774*53ee8cc1Swenshuai.xi 
775*53ee8cc1Swenshuai.xi     for (i = 0; i < u16Lib_size; i++)
776*53ee8cc1Swenshuai.xi     {
777*53ee8cc1Swenshuai.xi         udata = HAL_DMD_RIU_ReadByte(DMDMcuBase+0x10); // read sram data
778*53ee8cc1Swenshuai.xi 
779*53ee8cc1Swenshuai.xi         if (udata != ISDBT_table[i])
780*53ee8cc1Swenshuai.xi         {
781*53ee8cc1Swenshuai.xi             HAL_INTERN_ISDBT_DBINFO(printf(">fail add = 0x%x\n", i));
782*53ee8cc1Swenshuai.xi             HAL_INTERN_ISDBT_DBINFO(printf(">code = 0x%x\n", INTERN_ISDBT_table[i]));
783*53ee8cc1Swenshuai.xi             HAL_INTERN_ISDBT_DBINFO(printf(">data = 0x%x\n", udata));
784*53ee8cc1Swenshuai.xi 
785*53ee8cc1Swenshuai.xi             if (fail_cnt++ > 10)
786*53ee8cc1Swenshuai.xi             {
787*53ee8cc1Swenshuai.xi                 HAL_INTERN_ISDBT_DBINFO(printf(">DSP Loadcode fail!"));
788*53ee8cc1Swenshuai.xi                 return FALSE;
789*53ee8cc1Swenshuai.xi             }
790*53ee8cc1Swenshuai.xi         }
791*53ee8cc1Swenshuai.xi     }
792*53ee8cc1Swenshuai.xi 
793*53ee8cc1Swenshuai.xi     u16AddressOffset = (ISDBT_table[0x400] << 8)|ISDBT_table[0x401];
794*53ee8cc1Swenshuai.xi 
795*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x04, (u16AddressOffset&0xFF)); // sram address low byte
796*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x05, (u16AddressOffset>>8));   // sram address high byte
797*53ee8cc1Swenshuai.xi 
798*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)pRes->sDMD_ISDBT_InitData.u16IF_KHZ;
799*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
800*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)(pRes->sDMD_ISDBT_InitData.u16IF_KHZ >> 8);
801*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
802*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)pRes->sDMD_ISDBT_InitData.bIQSwap;
803*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
804*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)pRes->sDMD_ISDBT_InitData.u16AgcReferenceValue;
805*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
806*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)(pRes->sDMD_ISDBT_InitData.u16AgcReferenceValue >> 8);
807*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
808*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)pRes->sDMD_ISDBT_InitData.u32TdiStartAddr;
809*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
810*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)(pRes->sDMD_ISDBT_InitData.u32TdiStartAddr >> 8);
811*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
812*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)(pRes->sDMD_ISDBT_InitData.u32TdiStartAddr >> 16);
813*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
814*53ee8cc1Swenshuai.xi     u8TmpData = (MS_U8)(pRes->sDMD_ISDBT_InitData.u32TdiStartAddr >> 24);
815*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, u8TmpData); // write data to VD MCU 51 code sram
816*53ee8cc1Swenshuai.xi 
817*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x03, 0x50); // diable auto-increase
818*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x03, 0x00); // disable "vdmcu51_if"
819*53ee8cc1Swenshuai.xi 
820*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00, 0x01); // reset MCU, madison patch
821*53ee8cc1Swenshuai.xi 
822*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x01, 0x01); // enable SRAM
823*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x00, 0x00); // release VD_MCU
824*53ee8cc1Swenshuai.xi 
825*53ee8cc1Swenshuai.xi     pRes->sDMD_ISDBT_PriData.bDownloaded = true;
826*53ee8cc1Swenshuai.xi 
827*53ee8cc1Swenshuai.xi     MsOS_DelayTask(20);
828*53ee8cc1Swenshuai.xi 
829*53ee8cc1Swenshuai.xi     HAL_INTERN_ISDBT_DBINFO(printf(">DSP Loadcode done."));
830*53ee8cc1Swenshuai.xi 
831*53ee8cc1Swenshuai.xi     return TRUE;
832*53ee8cc1Swenshuai.xi }
833*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_FWVERSION(void)834*53ee8cc1Swenshuai.xi static void _HAL_INTERN_ISDBT_FWVERSION(void)
835*53ee8cc1Swenshuai.xi {
836*53ee8cc1Swenshuai.xi     MS_U8 data1,data2,data3;
837*53ee8cc1Swenshuai.xi 
838*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C4, &data1);
839*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C5, &data2);
840*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x20C6, &data3);
841*53ee8cc1Swenshuai.xi 
842*53ee8cc1Swenshuai.xi     printf("INTERN_ISDBT_FW_VERSION:%x.%x.%x\n", data1, data2, data3);
843*53ee8cc1Swenshuai.xi }
844*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_Exit(void)845*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_Exit(void)
846*53ee8cc1Swenshuai.xi {
847*53ee8cc1Swenshuai.xi     MS_U8 u8CheckCount = 0;
848*53ee8cc1Swenshuai.xi 
849*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x1C, 0x01);
850*53ee8cc1Swenshuai.xi 
851*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)|0x02);    // assert interrupt to VD MCU51
852*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x03)&(~0x02)); // de-assert interrupt to VD MCU51
853*53ee8cc1Swenshuai.xi 
854*53ee8cc1Swenshuai.xi     while ((HAL_DMD_RIU_ReadByte(MBRegBase + 0x1C)&0x02) != 0x02)
855*53ee8cc1Swenshuai.xi     {
856*53ee8cc1Swenshuai.xi         MsOS_DelayTaskUs(10);
857*53ee8cc1Swenshuai.xi 
858*53ee8cc1Swenshuai.xi         if (u8CheckCount++ == 0xFF)
859*53ee8cc1Swenshuai.xi         {
860*53ee8cc1Swenshuai.xi             printf(">> ISDBT Exit Fail!\n");
861*53ee8cc1Swenshuai.xi             return FALSE;
862*53ee8cc1Swenshuai.xi         }
863*53ee8cc1Swenshuai.xi     }
864*53ee8cc1Swenshuai.xi 
865*53ee8cc1Swenshuai.xi     printf(">> ISDBT Exit Ok!\n");
866*53ee8cc1Swenshuai.xi 
867*53ee8cc1Swenshuai.xi     return TRUE;
868*53ee8cc1Swenshuai.xi }
869*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_SoftReset(void)870*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_SoftReset(void)
871*53ee8cc1Swenshuai.xi {
872*53ee8cc1Swenshuai.xi     MS_U8 u8Data = 0;
873*53ee8cc1Swenshuai.xi 
874*53ee8cc1Swenshuai.xi     //Reset FSM
875*53ee8cc1Swenshuai.xi     if (_MBX_WriteReg(0x20C0, 0x00)==FALSE) return FALSE;
876*53ee8cc1Swenshuai.xi 
877*53ee8cc1Swenshuai.xi     while (u8Data!=0x02)
878*53ee8cc1Swenshuai.xi     {
879*53ee8cc1Swenshuai.xi         if (_MBX_ReadReg(0x20C1, &u8Data)==FALSE) return FALSE;
880*53ee8cc1Swenshuai.xi     }
881*53ee8cc1Swenshuai.xi 
882*53ee8cc1Swenshuai.xi     return TRUE;
883*53ee8cc1Swenshuai.xi }
884*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_SetACICoef(void)885*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_SetACICoef(void)
886*53ee8cc1Swenshuai.xi {
887*53ee8cc1Swenshuai.xi     return TRUE;
888*53ee8cc1Swenshuai.xi }
889*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_SetIsdbtMode(void)890*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_SetIsdbtMode(void)
891*53ee8cc1Swenshuai.xi {
892*53ee8cc1Swenshuai.xi     if (_MBX_WriteReg(0x20C2, 0x04)==FALSE) return FALSE;
893*53ee8cc1Swenshuai.xi     return _MBX_WriteReg(0x20C0, 0x04);
894*53ee8cc1Swenshuai.xi }
895*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_SetModeClean(void)896*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_SetModeClean(void)
897*53ee8cc1Swenshuai.xi {
898*53ee8cc1Swenshuai.xi     if (_MBX_WriteReg(0x20C2, 0x07)==FALSE) return FALSE;
899*53ee8cc1Swenshuai.xi     return _MBX_WriteReg(0x20C0, 0x00);
900*53ee8cc1Swenshuai.xi }
901*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_Check_FEC_Lock(void)902*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_Check_FEC_Lock(void)
903*53ee8cc1Swenshuai.xi {
904*53ee8cc1Swenshuai.xi     MS_BOOL bCheckPass = FALSE;
905*53ee8cc1Swenshuai.xi     MS_U8   u8Data;
906*53ee8cc1Swenshuai.xi 
907*53ee8cc1Swenshuai.xi     _MBX_ReadReg(REG_ISDBT_LOCK_STATUS, &u8Data);
908*53ee8cc1Swenshuai.xi 
909*53ee8cc1Swenshuai.xi     if ((u8Data & 0x02) != 0x00) // Check FEC Lock Flag
910*53ee8cc1Swenshuai.xi         bCheckPass = TRUE;
911*53ee8cc1Swenshuai.xi 
912*53ee8cc1Swenshuai.xi     return bCheckPass;
913*53ee8cc1Swenshuai.xi }
914*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_Check_FSA_TRACK_Lock(void)915*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_Check_FSA_TRACK_Lock(void)
916*53ee8cc1Swenshuai.xi {
917*53ee8cc1Swenshuai.xi     MS_BOOL bCheckPass = FALSE;
918*53ee8cc1Swenshuai.xi     MS_U8   u8Data;
919*53ee8cc1Swenshuai.xi 
920*53ee8cc1Swenshuai.xi     _MBX_ReadReg(REG_ISDBT_LOCK_STATUS, &u8Data);
921*53ee8cc1Swenshuai.xi 
922*53ee8cc1Swenshuai.xi     if ((u8Data & 0x01) != 0x00) // Check FSA Track Lock Flag
923*53ee8cc1Swenshuai.xi         bCheckPass = TRUE;
924*53ee8cc1Swenshuai.xi 
925*53ee8cc1Swenshuai.xi     return bCheckPass;
926*53ee8cc1Swenshuai.xi }
927*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_Check_PSYNC_Lock(void)928*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_Check_PSYNC_Lock(void)
929*53ee8cc1Swenshuai.xi {
930*53ee8cc1Swenshuai.xi     MS_BOOL bCheckPass = FALSE;
931*53ee8cc1Swenshuai.xi     MS_U8   u8Data;
932*53ee8cc1Swenshuai.xi 
933*53ee8cc1Swenshuai.xi     _MBX_ReadReg(REG_ISDBT_LOCK_STATUS, &u8Data);
934*53ee8cc1Swenshuai.xi 
935*53ee8cc1Swenshuai.xi     if ((u8Data & 0x04) != 0x00) // Check Psync Lock Flag
936*53ee8cc1Swenshuai.xi         bCheckPass = TRUE;
937*53ee8cc1Swenshuai.xi 
938*53ee8cc1Swenshuai.xi     return bCheckPass;
939*53ee8cc1Swenshuai.xi }
940*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_Check_ICFO_CH_EXIST_Lock(void)941*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_Check_ICFO_CH_EXIST_Lock(void)
942*53ee8cc1Swenshuai.xi {
943*53ee8cc1Swenshuai.xi     MS_BOOL bCheckPass = FALSE;
944*53ee8cc1Swenshuai.xi     MS_U8   u8Data;
945*53ee8cc1Swenshuai.xi 
946*53ee8cc1Swenshuai.xi     _MBX_ReadReg(REG_ISDBT_LOCK_STATUS, &u8Data);
947*53ee8cc1Swenshuai.xi 
948*53ee8cc1Swenshuai.xi     if ((u8Data & 0x80) != 0x00) // Check Psync Lock Flag
949*53ee8cc1Swenshuai.xi         bCheckPass = TRUE;
950*53ee8cc1Swenshuai.xi 
951*53ee8cc1Swenshuai.xi     return bCheckPass;
952*53ee8cc1Swenshuai.xi }
953*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetSignalCodeRate(EN_ISDBT_Layer eLayerIndex,EN_ISDBT_CODE_RATE * peIsdbtCodeRate)954*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_GetSignalCodeRate(EN_ISDBT_Layer eLayerIndex, EN_ISDBT_CODE_RATE *peIsdbtCodeRate)
955*53ee8cc1Swenshuai.xi {
956*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
957*53ee8cc1Swenshuai.xi     MS_U8 u8Data, u8CodeRate;
958*53ee8cc1Swenshuai.xi 
959*53ee8cc1Swenshuai.xi     switch (eLayerIndex)
960*53ee8cc1Swenshuai.xi     {
961*53ee8cc1Swenshuai.xi         case E_ISDBT_Layer_A:
962*53ee8cc1Swenshuai.xi             // [10:8] reg_tmcc_cur_convolution_code_rate_a
963*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE+0x04*2+1, &u8Data);
964*53ee8cc1Swenshuai.xi             u8CodeRate = u8Data & 0x07;
965*53ee8cc1Swenshuai.xi             break;
966*53ee8cc1Swenshuai.xi         case E_ISDBT_Layer_B:
967*53ee8cc1Swenshuai.xi             // [10:8] reg_tmcc_cur_convolution_code_rate_b
968*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE+0x05*2+1, &u8Data);
969*53ee8cc1Swenshuai.xi             u8CodeRate = u8Data & 0x07;
970*53ee8cc1Swenshuai.xi             break;
971*53ee8cc1Swenshuai.xi        case E_ISDBT_Layer_C:
972*53ee8cc1Swenshuai.xi             // [10:8] reg_tmcc_cur_convolution_code_rate_c
973*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE+0x06*2+1, &u8Data);
974*53ee8cc1Swenshuai.xi             u8CodeRate = u8Data & 0x07;
975*53ee8cc1Swenshuai.xi             break;
976*53ee8cc1Swenshuai.xi        default:
977*53ee8cc1Swenshuai.xi             u8CodeRate = 15;
978*53ee8cc1Swenshuai.xi             break;
979*53ee8cc1Swenshuai.xi     }
980*53ee8cc1Swenshuai.xi 
981*53ee8cc1Swenshuai.xi     switch (u8CodeRate)
982*53ee8cc1Swenshuai.xi     {
983*53ee8cc1Swenshuai.xi         case 0:
984*53ee8cc1Swenshuai.xi             *peIsdbtCodeRate = E_ISDBT_CODERATE_1_2;
985*53ee8cc1Swenshuai.xi             break;
986*53ee8cc1Swenshuai.xi         case 1:
987*53ee8cc1Swenshuai.xi             *peIsdbtCodeRate = E_ISDBT_CODERATE_2_3;
988*53ee8cc1Swenshuai.xi             break;
989*53ee8cc1Swenshuai.xi         case 2:
990*53ee8cc1Swenshuai.xi             *peIsdbtCodeRate = E_ISDBT_CODERATE_3_4;
991*53ee8cc1Swenshuai.xi             break;
992*53ee8cc1Swenshuai.xi         case 3:
993*53ee8cc1Swenshuai.xi             *peIsdbtCodeRate = E_ISDBT_CODERATE_5_6;
994*53ee8cc1Swenshuai.xi             break;
995*53ee8cc1Swenshuai.xi         case 4:
996*53ee8cc1Swenshuai.xi             *peIsdbtCodeRate = E_ISDBT_CODERATE_7_8;
997*53ee8cc1Swenshuai.xi             break;
998*53ee8cc1Swenshuai.xi         default:
999*53ee8cc1Swenshuai.xi             *peIsdbtCodeRate = E_ISDBT_CODERATE_INVALID;
1000*53ee8cc1Swenshuai.xi             break;
1001*53ee8cc1Swenshuai.xi     }
1002*53ee8cc1Swenshuai.xi 
1003*53ee8cc1Swenshuai.xi     return bRet;
1004*53ee8cc1Swenshuai.xi }
1005*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetSignalGuardInterval(EN_ISDBT_GUARD_INTERVAL * peIsdbtGI)1006*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_GetSignalGuardInterval(EN_ISDBT_GUARD_INTERVAL *peIsdbtGI)
1007*53ee8cc1Swenshuai.xi {
1008*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
1009*53ee8cc1Swenshuai.xi     MS_U8 u8Data, u8CP;
1010*53ee8cc1Swenshuai.xi 
1011*53ee8cc1Swenshuai.xi     // [7:6] reg_mcd_out_cp
1012*53ee8cc1Swenshuai.xi     // output cp -> 00: 1/4
1013*53ee8cc1Swenshuai.xi     //                    01: 1/8
1014*53ee8cc1Swenshuai.xi     //                    10: 1/16
1015*53ee8cc1Swenshuai.xi     //                    11: 1/32
1016*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_TDP_REG_BASE+0x34*2, &u8Data);
1017*53ee8cc1Swenshuai.xi 
1018*53ee8cc1Swenshuai.xi     u8CP  = (u8Data >> 6) & 0x03;
1019*53ee8cc1Swenshuai.xi 
1020*53ee8cc1Swenshuai.xi     switch (u8CP)
1021*53ee8cc1Swenshuai.xi     {
1022*53ee8cc1Swenshuai.xi         case 0:
1023*53ee8cc1Swenshuai.xi             *peIsdbtGI = E_ISDBT_GUARD_INTERVAL_1_4;
1024*53ee8cc1Swenshuai.xi             break;
1025*53ee8cc1Swenshuai.xi         case 1:
1026*53ee8cc1Swenshuai.xi             *peIsdbtGI = E_ISDBT_GUARD_INTERVAL_1_8;
1027*53ee8cc1Swenshuai.xi             break;
1028*53ee8cc1Swenshuai.xi         case 2:
1029*53ee8cc1Swenshuai.xi             *peIsdbtGI = E_ISDBT_GUARD_INTERVAL_1_16;
1030*53ee8cc1Swenshuai.xi             break;
1031*53ee8cc1Swenshuai.xi         case 3:
1032*53ee8cc1Swenshuai.xi             *peIsdbtGI = E_ISDBT_GUARD_INTERVAL_1_32;
1033*53ee8cc1Swenshuai.xi             break;
1034*53ee8cc1Swenshuai.xi         default:
1035*53ee8cc1Swenshuai.xi             *peIsdbtGI = E_ISDBT_GUARD_INTERVAL_INVALID;
1036*53ee8cc1Swenshuai.xi             break;
1037*53ee8cc1Swenshuai.xi     }
1038*53ee8cc1Swenshuai.xi 
1039*53ee8cc1Swenshuai.xi     return bRet;
1040*53ee8cc1Swenshuai.xi }
1041*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetSignalTimeInterleaving(EN_ISDBT_Layer eLayerIndex,EN_ISDBT_TIME_INTERLEAVING * peIsdbtTDI)1042*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_GetSignalTimeInterleaving(EN_ISDBT_Layer eLayerIndex, EN_ISDBT_TIME_INTERLEAVING *peIsdbtTDI)
1043*53ee8cc1Swenshuai.xi {
1044*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
1045*53ee8cc1Swenshuai.xi     MS_U8 u8Data, u8Mode, u8Tdi;
1046*53ee8cc1Swenshuai.xi 
1047*53ee8cc1Swenshuai.xi     // [5:4] reg_mcd_out_mode
1048*53ee8cc1Swenshuai.xi     // output mode  -> 00: 2k
1049*53ee8cc1Swenshuai.xi     //                         01: 4k
1050*53ee8cc1Swenshuai.xi     //                         10: 8k
1051*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_TDP_REG_BASE+0x34*2, &u8Data);
1052*53ee8cc1Swenshuai.xi 
1053*53ee8cc1Swenshuai.xi     u8Mode  = (u8Data >> 4) & 0x03;
1054*53ee8cc1Swenshuai.xi 
1055*53ee8cc1Swenshuai.xi     switch (eLayerIndex)
1056*53ee8cc1Swenshuai.xi     {
1057*53ee8cc1Swenshuai.xi         case E_ISDBT_Layer_A:
1058*53ee8cc1Swenshuai.xi             // [14:12] reg_tmcc_cur_interleaving_length_a
1059*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE+0x04*2+1, &u8Data);
1060*53ee8cc1Swenshuai.xi             u8Tdi = (u8Data >> 4) & 0x07;
1061*53ee8cc1Swenshuai.xi             break;
1062*53ee8cc1Swenshuai.xi         case E_ISDBT_Layer_B:
1063*53ee8cc1Swenshuai.xi             // [14:12] reg_tmcc_cur_interleaving_length_b
1064*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE+0x05*2+1, &u8Data);
1065*53ee8cc1Swenshuai.xi             u8Tdi = (u8Data >> 4) & 0x07;
1066*53ee8cc1Swenshuai.xi             break;
1067*53ee8cc1Swenshuai.xi         case E_ISDBT_Layer_C:
1068*53ee8cc1Swenshuai.xi             // [14:12] reg_tmcc_cur_interleaving_length_c
1069*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE+0x06*2+1, &u8Data);
1070*53ee8cc1Swenshuai.xi             u8Tdi = (u8Data >> 4) & 0x07;
1071*53ee8cc1Swenshuai.xi             break;
1072*53ee8cc1Swenshuai.xi        default:
1073*53ee8cc1Swenshuai.xi             u8Tdi = 15;
1074*53ee8cc1Swenshuai.xi             break;
1075*53ee8cc1Swenshuai.xi     }
1076*53ee8cc1Swenshuai.xi 
1077*53ee8cc1Swenshuai.xi     // u8Tdi+u8Mode*4
1078*53ee8cc1Swenshuai.xi     // => 0~3: 2K
1079*53ee8cc1Swenshuai.xi     // => 4~7: 4K
1080*53ee8cc1Swenshuai.xi     // => 8~11:8K
1081*53ee8cc1Swenshuai.xi     switch (u8Tdi+u8Mode*4)
1082*53ee8cc1Swenshuai.xi     {
1083*53ee8cc1Swenshuai.xi         case 0:
1084*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_2K_TDI_0;
1085*53ee8cc1Swenshuai.xi             break;
1086*53ee8cc1Swenshuai.xi         case 1:
1087*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_2K_TDI_4;
1088*53ee8cc1Swenshuai.xi             break;
1089*53ee8cc1Swenshuai.xi         case 2:
1090*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_2K_TDI_8;
1091*53ee8cc1Swenshuai.xi             break;
1092*53ee8cc1Swenshuai.xi         case 3:
1093*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_2K_TDI_16;
1094*53ee8cc1Swenshuai.xi             break;
1095*53ee8cc1Swenshuai.xi         case 4:
1096*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_4K_TDI_0;
1097*53ee8cc1Swenshuai.xi             break;
1098*53ee8cc1Swenshuai.xi         case 5:
1099*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_4K_TDI_2;
1100*53ee8cc1Swenshuai.xi             break;
1101*53ee8cc1Swenshuai.xi         case 6:
1102*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_4K_TDI_4;
1103*53ee8cc1Swenshuai.xi             break;
1104*53ee8cc1Swenshuai.xi         case 7:
1105*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_4K_TDI_8;
1106*53ee8cc1Swenshuai.xi             break;
1107*53ee8cc1Swenshuai.xi         case 8:
1108*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_8K_TDI_0;
1109*53ee8cc1Swenshuai.xi             break;
1110*53ee8cc1Swenshuai.xi         case 9:
1111*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_8K_TDI_1;
1112*53ee8cc1Swenshuai.xi             break;
1113*53ee8cc1Swenshuai.xi         case 10:
1114*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_8K_TDI_2;
1115*53ee8cc1Swenshuai.xi             break;
1116*53ee8cc1Swenshuai.xi         case 11:
1117*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_8K_TDI_4;
1118*53ee8cc1Swenshuai.xi             break;
1119*53ee8cc1Swenshuai.xi         default:
1120*53ee8cc1Swenshuai.xi             *peIsdbtTDI = E_ISDBT_TDI_INVALID;
1121*53ee8cc1Swenshuai.xi             break;
1122*53ee8cc1Swenshuai.xi     }
1123*53ee8cc1Swenshuai.xi 
1124*53ee8cc1Swenshuai.xi     return bRet;
1125*53ee8cc1Swenshuai.xi }
1126*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetSignalFFTValue(EN_ISDBT_FFT_VAL * peIsdbtFFT)1127*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_GetSignalFFTValue(EN_ISDBT_FFT_VAL *peIsdbtFFT)
1128*53ee8cc1Swenshuai.xi {
1129*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
1130*53ee8cc1Swenshuai.xi     MS_U8 u8Data, u8Mode;
1131*53ee8cc1Swenshuai.xi 
1132*53ee8cc1Swenshuai.xi     // [5:4]  reg_mcd_out_mode
1133*53ee8cc1Swenshuai.xi     // output mode  -> 00: 2k
1134*53ee8cc1Swenshuai.xi     //                         01: 4k
1135*53ee8cc1Swenshuai.xi     //                         10: 8k
1136*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_TDP_REG_BASE+0x34*2, &u8Data);
1137*53ee8cc1Swenshuai.xi 
1138*53ee8cc1Swenshuai.xi     u8Mode  = (u8Data >> 4) & 0x03;
1139*53ee8cc1Swenshuai.xi 
1140*53ee8cc1Swenshuai.xi     switch (u8Mode)
1141*53ee8cc1Swenshuai.xi     {
1142*53ee8cc1Swenshuai.xi         case 0:
1143*53ee8cc1Swenshuai.xi             *peIsdbtFFT = E_ISDBT_FFT_2K;
1144*53ee8cc1Swenshuai.xi             break;
1145*53ee8cc1Swenshuai.xi         case 1:
1146*53ee8cc1Swenshuai.xi             *peIsdbtFFT = E_ISDBT_FFT_4K;
1147*53ee8cc1Swenshuai.xi             break;
1148*53ee8cc1Swenshuai.xi         case 2:
1149*53ee8cc1Swenshuai.xi             *peIsdbtFFT = E_ISDBT_FFT_8K;
1150*53ee8cc1Swenshuai.xi             break;
1151*53ee8cc1Swenshuai.xi         default:
1152*53ee8cc1Swenshuai.xi             *peIsdbtFFT = E_ISDBT_FFT_INVALID;
1153*53ee8cc1Swenshuai.xi             break;
1154*53ee8cc1Swenshuai.xi     }
1155*53ee8cc1Swenshuai.xi 
1156*53ee8cc1Swenshuai.xi     return bRet;
1157*53ee8cc1Swenshuai.xi }
1158*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetSignalModulation(EN_ISDBT_Layer eLayerIndex,EN_ISDBT_CONSTEL_TYPE * peIsdbtConstellation)1159*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_GetSignalModulation(EN_ISDBT_Layer eLayerIndex, EN_ISDBT_CONSTEL_TYPE *peIsdbtConstellation)
1160*53ee8cc1Swenshuai.xi {
1161*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
1162*53ee8cc1Swenshuai.xi     MS_U8 u8Data, u8QAM;
1163*53ee8cc1Swenshuai.xi 
1164*53ee8cc1Swenshuai.xi     switch(eLayerIndex)
1165*53ee8cc1Swenshuai.xi     {
1166*53ee8cc1Swenshuai.xi         case E_ISDBT_Layer_A:
1167*53ee8cc1Swenshuai.xi             // [6:4] reg_tmcc_cur_carrier_modulation_a
1168*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE+0x04*2, &u8Data);
1169*53ee8cc1Swenshuai.xi             u8QAM = (u8Data >> 4) & 0x07;
1170*53ee8cc1Swenshuai.xi             break;
1171*53ee8cc1Swenshuai.xi         case E_ISDBT_Layer_B:
1172*53ee8cc1Swenshuai.xi             // [6:4] reg_tmcc_cur_carrier_modulation_b
1173*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE+0x05*2, &u8Data);
1174*53ee8cc1Swenshuai.xi             u8QAM = (u8Data >> 4) & 0x07;
1175*53ee8cc1Swenshuai.xi             break;
1176*53ee8cc1Swenshuai.xi         case E_ISDBT_Layer_C:
1177*53ee8cc1Swenshuai.xi             // [6:4] reg_tmcc_cur_carrier_modulation_c
1178*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE+0x06*2, &u8Data);
1179*53ee8cc1Swenshuai.xi             u8QAM = (u8Data >> 4) & 0x07;
1180*53ee8cc1Swenshuai.xi             break;
1181*53ee8cc1Swenshuai.xi         default:
1182*53ee8cc1Swenshuai.xi             u8QAM = 15;
1183*53ee8cc1Swenshuai.xi             break;
1184*53ee8cc1Swenshuai.xi     }
1185*53ee8cc1Swenshuai.xi 
1186*53ee8cc1Swenshuai.xi     switch(u8QAM)
1187*53ee8cc1Swenshuai.xi     {
1188*53ee8cc1Swenshuai.xi         case 0:
1189*53ee8cc1Swenshuai.xi             *peIsdbtConstellation = E_ISDBT_DQPSK;
1190*53ee8cc1Swenshuai.xi             break;
1191*53ee8cc1Swenshuai.xi         case 1:
1192*53ee8cc1Swenshuai.xi             *peIsdbtConstellation = E_ISDBT_QPSK;
1193*53ee8cc1Swenshuai.xi             break;
1194*53ee8cc1Swenshuai.xi         case 2:
1195*53ee8cc1Swenshuai.xi             *peIsdbtConstellation = E_ISDBT_16QAM;
1196*53ee8cc1Swenshuai.xi             break;
1197*53ee8cc1Swenshuai.xi         case 3:
1198*53ee8cc1Swenshuai.xi             *peIsdbtConstellation = E_ISDBT_64QAM;
1199*53ee8cc1Swenshuai.xi             break;
1200*53ee8cc1Swenshuai.xi         default:
1201*53ee8cc1Swenshuai.xi             *peIsdbtConstellation = E_ISDBT_QAM_INVALID;
1202*53ee8cc1Swenshuai.xi             break;
1203*53ee8cc1Swenshuai.xi     }
1204*53ee8cc1Swenshuai.xi 
1205*53ee8cc1Swenshuai.xi     return bRet;
1206*53ee8cc1Swenshuai.xi }
1207*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_ReadIFAGC(void)1208*53ee8cc1Swenshuai.xi static MS_U8 _HAL_INTERN_ISDBT_ReadIFAGC(void)
1209*53ee8cc1Swenshuai.xi {
1210*53ee8cc1Swenshuai.xi     MS_U8 data = 0;
1211*53ee8cc1Swenshuai.xi 
1212*53ee8cc1Swenshuai.xi     _MBX_ReadReg(0x28FD, &data);
1213*53ee8cc1Swenshuai.xi 
1214*53ee8cc1Swenshuai.xi     return data;
1215*53ee8cc1Swenshuai.xi }
1216*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetFreqOffset(float * pFreqOff)1217*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_GetFreqOffset(float *pFreqOff)
1218*53ee8cc1Swenshuai.xi {
1219*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
1220*53ee8cc1Swenshuai.xi     MS_U8   u8Data;
1221*53ee8cc1Swenshuai.xi     MS_S32  s32TdCfoRegValue = 0;
1222*53ee8cc1Swenshuai.xi     float   fTdCfoFreq = 0.0;
1223*53ee8cc1Swenshuai.xi     MS_S32  s32FdCfoRegValue = 0;
1224*53ee8cc1Swenshuai.xi     float   fFdCfoFreq = 0.0;
1225*53ee8cc1Swenshuai.xi     MS_S16  s16IcfoRegValue = 0.0;
1226*53ee8cc1Swenshuai.xi     float   fICfoFreq = 0.0;
1227*53ee8cc1Swenshuai.xi 
1228*53ee8cc1Swenshuai.xi     //Get TD CFO
1229*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_TDP_REG_BASE + 0x04, &u8Data);   //0x02 * 2
1230*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_TDP_REG_BASE + 0x04, (u8Data|0x01));
1231*53ee8cc1Swenshuai.xi 
1232*53ee8cc1Swenshuai.xi     //read td_freq_error
1233*53ee8cc1Swenshuai.xi     //Read <29,38>
1234*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_TDP_REG_BASE + 0x8A, &u8Data);   //0x45 * 2
1235*53ee8cc1Swenshuai.xi     s32TdCfoRegValue = u8Data;
1236*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_TDP_REG_BASE + 0x8B, &u8Data);   //0x45 * 2 + 1
1237*53ee8cc1Swenshuai.xi     s32TdCfoRegValue |= u8Data << 8;
1238*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_TDP_REG_BASE + 0x8C, &u8Data);   //0x46 * 2
1239*53ee8cc1Swenshuai.xi     s32TdCfoRegValue = u8Data << 16;
1240*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_TDP_REG_BASE + 0x8D, &u8Data);   //0x46 * 2 + 1
1241*53ee8cc1Swenshuai.xi     s32TdCfoRegValue |= u8Data << 24;
1242*53ee8cc1Swenshuai.xi 
1243*53ee8cc1Swenshuai.xi     if (u8Data >= 0x10)
1244*53ee8cc1Swenshuai.xi         s32TdCfoRegValue = 0xE0000000 | s32TdCfoRegValue;
1245*53ee8cc1Swenshuai.xi 
1246*53ee8cc1Swenshuai.xi     s32TdCfoRegValue >>=4;
1247*53ee8cc1Swenshuai.xi 
1248*53ee8cc1Swenshuai.xi     //TD_cfo_Hz = RegCfoTd * fb
1249*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_TDP_REG_BASE + 0x04, &u8Data);   //0x02 * 2
1250*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_TDP_REG_BASE + 0x04, (u8Data&~0x01));
1251*53ee8cc1Swenshuai.xi 
1252*53ee8cc1Swenshuai.xi     fTdCfoFreq = ((float)s32TdCfoRegValue) / 17179869184.0; //<25,34>
1253*53ee8cc1Swenshuai.xi     fTdCfoFreq = fTdCfoFreq * 8126980.0;
1254*53ee8cc1Swenshuai.xi 
1255*53ee8cc1Swenshuai.xi     //Get FD CFO
1256*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0xFE, &u8Data);   //0x7f * 2
1257*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_FDP_REG_BASE + 0xFE, (u8Data|0x01));
1258*53ee8cc1Swenshuai.xi     //load
1259*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0xFF, &u8Data);   //0x7f * 2 + 1
1260*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_FDP_REG_BASE + 0xFF, (u8Data|0x01));
1261*53ee8cc1Swenshuai.xi 
1262*53ee8cc1Swenshuai.xi     //read CFO_KI
1263*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0x5E, &u8Data);   //0x2F * 2
1264*53ee8cc1Swenshuai.xi     s32FdCfoRegValue = u8Data;
1265*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0x5F, &u8Data);   //0x2F * 2 + 1
1266*53ee8cc1Swenshuai.xi     s32FdCfoRegValue |= u8Data << 8;
1267*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0x60, &u8Data);   //0x30 * 2
1268*53ee8cc1Swenshuai.xi     s32FdCfoRegValue |= u8Data << 16;
1269*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0x61, &u8Data);   //0x30 * 2
1270*53ee8cc1Swenshuai.xi     s32FdCfoRegValue |= u8Data << 24;
1271*53ee8cc1Swenshuai.xi 
1272*53ee8cc1Swenshuai.xi     if(u8Data >= 0x01)
1273*53ee8cc1Swenshuai.xi         s32FdCfoRegValue = 0xFE000000 | s32FdCfoRegValue;
1274*53ee8cc1Swenshuai.xi 
1275*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0xFE, &u8Data);   //0x7f * 2
1276*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_FDP_REG_BASE + 0xFE, (u8Data&~0x01));
1277*53ee8cc1Swenshuai.xi     //load
1278*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0xFF, &u8Data);   //0x7f * 2 + 1
1279*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_FDP_REG_BASE + 0xFF, (u8Data|0x01));
1280*53ee8cc1Swenshuai.xi 
1281*53ee8cc1Swenshuai.xi     fFdCfoFreq = ((float)s32FdCfoRegValue) / 17179869184.0;
1282*53ee8cc1Swenshuai.xi     fFdCfoFreq = fFdCfoFreq * 8126980.0;
1283*53ee8cc1Swenshuai.xi 
1284*53ee8cc1Swenshuai.xi     //Get ICFO
1285*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0x5C, &u8Data);   //0x2E * 2
1286*53ee8cc1Swenshuai.xi     s16IcfoRegValue = u8Data;
1287*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0x5D, &u8Data);   //0x2E * 2 + 1
1288*53ee8cc1Swenshuai.xi     s16IcfoRegValue |= u8Data << 8;
1289*53ee8cc1Swenshuai.xi     s16IcfoRegValue = (s16IcfoRegValue >> 4) & 0x07FF;
1290*53ee8cc1Swenshuai.xi 
1291*53ee8cc1Swenshuai.xi     if(s16IcfoRegValue >= 0x400)
1292*53ee8cc1Swenshuai.xi         s16IcfoRegValue = s16IcfoRegValue | 0xFFFFF800;
1293*53ee8cc1Swenshuai.xi 
1294*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_TDP_REG_BASE + 0x68, &u8Data);   //0x34 * 2
1295*53ee8cc1Swenshuai.xi 
1296*53ee8cc1Swenshuai.xi     if((u8Data & 0x30) == 0x0000) // 2k
1297*53ee8cc1Swenshuai.xi         fICfoFreq = (float)s16IcfoRegValue*250000.0/63.0;
1298*53ee8cc1Swenshuai.xi     else if((u8Data & 0x0030) == 0x0010)	// 4k
1299*53ee8cc1Swenshuai.xi         fICfoFreq = (float)s16IcfoRegValue*125000.0/63.0;
1300*53ee8cc1Swenshuai.xi     else //if(u16data & 0x0030 == 0x0020) // 8k
1301*53ee8cc1Swenshuai.xi         fICfoFreq = (float)s16IcfoRegValue*125000.0/126.0;
1302*53ee8cc1Swenshuai.xi 
1303*53ee8cc1Swenshuai.xi     *pFreqOff = fTdCfoFreq + fFdCfoFreq + fICfoFreq;
1304*53ee8cc1Swenshuai.xi 
1305*53ee8cc1Swenshuai.xi     HAL_INTERN_ISDBT_DBINFO(printf("Total CFO value = %f\n", *pFreqOff));
1306*53ee8cc1Swenshuai.xi 
1307*53ee8cc1Swenshuai.xi     return bRet;
1308*53ee8cc1Swenshuai.xi }
1309*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetPreViterbiBer(EN_ISDBT_Layer eLayerIndex,float * pfber)1310*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_GetPreViterbiBer(EN_ISDBT_Layer eLayerIndex, float *pfber)
1311*53ee8cc1Swenshuai.xi {
1312*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
1313*53ee8cc1Swenshuai.xi     MS_U8   u8Data;
1314*53ee8cc1Swenshuai.xi     MS_U16  u16BerValue = 0;
1315*53ee8cc1Swenshuai.xi     MS_U32  u32BerPeriod = 0;
1316*53ee8cc1Swenshuai.xi 
1317*53ee8cc1Swenshuai.xi     // reg_rd_freezeber
1318*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x60, &u8Data);
1319*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_OUTER_REG_BASE + 0x60, u8Data|0x08);
1320*53ee8cc1Swenshuai.xi 
1321*53ee8cc1Swenshuai.xi     if (eLayerIndex == E_ISDBT_Layer_A)
1322*53ee8cc1Swenshuai.xi     {
1323*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x90, &u8Data);  //0x48 * 2
1324*53ee8cc1Swenshuai.xi         u16BerValue=u8Data;
1325*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x91, &u8Data);  //0x48 * 2+1
1326*53ee8cc1Swenshuai.xi         u16BerValue |= (u8Data << 8);
1327*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x76, &u8Data); //0x3b * 2
1328*53ee8cc1Swenshuai.xi         u32BerPeriod = (u8Data&0x3F);
1329*53ee8cc1Swenshuai.xi         u32BerPeriod <<= 16;
1330*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x70, &u8Data); //0x38 * 2
1331*53ee8cc1Swenshuai.xi         u32BerPeriod |= u8Data;
1332*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x70, &u8Data); //0x38 * 2 +1
1333*53ee8cc1Swenshuai.xi         u32BerPeriod |= (u8Data << 8);
1334*53ee8cc1Swenshuai.xi     }
1335*53ee8cc1Swenshuai.xi     else if (eLayerIndex == E_ISDBT_Layer_B)
1336*53ee8cc1Swenshuai.xi     {
1337*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x92, &u8Data);  //0x49 * 2
1338*53ee8cc1Swenshuai.xi         u16BerValue=u8Data;
1339*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x93, &u8Data);  //0x49 * 2+1
1340*53ee8cc1Swenshuai.xi         u16BerValue |= (u8Data << 8);
1341*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x77, &u8Data); //0x3b * 2 + 1
1342*53ee8cc1Swenshuai.xi         u32BerPeriod = (u8Data&0x3F);
1343*53ee8cc1Swenshuai.xi         u32BerPeriod <<= 16;
1344*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x72, &u8Data); //0x39 * 2
1345*53ee8cc1Swenshuai.xi         u32BerPeriod |= u8Data;
1346*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x73, &u8Data); //0x39 * 2 +1
1347*53ee8cc1Swenshuai.xi         u32BerPeriod |= (u8Data << 8);
1348*53ee8cc1Swenshuai.xi     }
1349*53ee8cc1Swenshuai.xi     else if (eLayerIndex == E_ISDBT_Layer_C)
1350*53ee8cc1Swenshuai.xi     {
1351*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x94, &u8Data);  //0x4A * 2
1352*53ee8cc1Swenshuai.xi         u16BerValue=u8Data;
1353*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x95, &u8Data);  //0x4A * 2+1
1354*53ee8cc1Swenshuai.xi         u16BerValue |= (u8Data << 8);
1355*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x78, &u8Data); //0x3C
1356*53ee8cc1Swenshuai.xi         u32BerPeriod = (u8Data&0x003F);
1357*53ee8cc1Swenshuai.xi         u32BerPeriod <<= 16;
1358*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x74, &u8Data); //0x3A * 2
1359*53ee8cc1Swenshuai.xi         u32BerPeriod |= u8Data;
1360*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x75, &u8Data); //0x3A * 2 +1
1361*53ee8cc1Swenshuai.xi         u32BerPeriod |= (u8Data << 8);
1362*53ee8cc1Swenshuai.xi     }
1363*53ee8cc1Swenshuai.xi     else
1364*53ee8cc1Swenshuai.xi     {
1365*53ee8cc1Swenshuai.xi         HAL_INTERN_ISDBT_DBINFO(printf("Please select correct Layer\n"));
1366*53ee8cc1Swenshuai.xi         bRet = FALSE;
1367*53ee8cc1Swenshuai.xi     }
1368*53ee8cc1Swenshuai.xi 
1369*53ee8cc1Swenshuai.xi     // reg_rd_freezeber
1370*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x60, &u8Data);
1371*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_OUTER_REG_BASE + 0x60, (u8Data&~0x08));
1372*53ee8cc1Swenshuai.xi 
1373*53ee8cc1Swenshuai.xi     u32BerPeriod <<= 8; // *256
1374*53ee8cc1Swenshuai.xi 
1375*53ee8cc1Swenshuai.xi     if(u32BerPeriod == 0) u32BerPeriod = 1;
1376*53ee8cc1Swenshuai.xi 
1377*53ee8cc1Swenshuai.xi     *pfber = (float)u16BerValue/u32BerPeriod;
1378*53ee8cc1Swenshuai.xi 
1379*53ee8cc1Swenshuai.xi     HAL_INTERN_ISDBT_DBINFO(printf("Layer: 0x%x, Pre-Ber = %e\n", eLayerIndex, *pfber));
1380*53ee8cc1Swenshuai.xi 
1381*53ee8cc1Swenshuai.xi     return bRet;
1382*53ee8cc1Swenshuai.xi }
1383*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetPostViterbiBer(EN_ISDBT_Layer eLayerIndex,float * pfber)1384*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_GetPostViterbiBer(EN_ISDBT_Layer eLayerIndex, float *pfber)
1385*53ee8cc1Swenshuai.xi {
1386*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
1387*53ee8cc1Swenshuai.xi     MS_U8   u8Data, u8FrzData;
1388*53ee8cc1Swenshuai.xi     MS_U32  u32BerValue = 0;
1389*53ee8cc1Swenshuai.xi     MS_U16  u16BerPeriod = 0;
1390*53ee8cc1Swenshuai.xi 
1391*53ee8cc1Swenshuai.xi     // reg_rd_freezeber
1392*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE+0x01*2+1, &u8FrzData);
1393*53ee8cc1Swenshuai.xi     u8Data = u8FrzData | 0x01;
1394*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_OUTER_REG_BASE+0x01*2+1, u8Data);
1395*53ee8cc1Swenshuai.xi 
1396*53ee8cc1Swenshuai.xi     if (eLayerIndex == E_ISDBT_Layer_A)
1397*53ee8cc1Swenshuai.xi     {
1398*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x14, &u8Data);  //0x0A * 2
1399*53ee8cc1Swenshuai.xi         u32BerValue = u8Data;
1400*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x15, &u8Data);  //0x0A * 2+1
1401*53ee8cc1Swenshuai.xi         u32BerValue |= u8Data << 8;
1402*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x16, &u8Data);  //0x0B * 2
1403*53ee8cc1Swenshuai.xi         u32BerValue |= u8Data << 16;
1404*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x17, &u8Data);  //0x0B * 2+1
1405*53ee8cc1Swenshuai.xi         u32BerValue |= u8Data << 24;
1406*53ee8cc1Swenshuai.xi 
1407*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x0A, &u8Data);  //0x05 * 2
1408*53ee8cc1Swenshuai.xi         u16BerPeriod = u8Data;
1409*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x0B, &u8Data);  //0x05 * 2+1
1410*53ee8cc1Swenshuai.xi         u16BerPeriod |= u8Data << 8;
1411*53ee8cc1Swenshuai.xi     }
1412*53ee8cc1Swenshuai.xi     else if (eLayerIndex == E_ISDBT_Layer_B)
1413*53ee8cc1Swenshuai.xi     {
1414*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x46, &u8Data);  //0x23 * 2
1415*53ee8cc1Swenshuai.xi         u32BerValue = u8Data;
1416*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x47, &u8Data);  //0x23 * 2+1
1417*53ee8cc1Swenshuai.xi         u32BerValue |= u8Data << 8;
1418*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x48, &u8Data);  //0x24 * 2
1419*53ee8cc1Swenshuai.xi         u32BerValue |= u8Data << 16;
1420*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x49, &u8Data);  //0x24 * 2+1
1421*53ee8cc1Swenshuai.xi         u32BerValue |= u8Data << 24;
1422*53ee8cc1Swenshuai.xi 
1423*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x3A, &u8Data);  //0x1d * 2
1424*53ee8cc1Swenshuai.xi         u16BerPeriod = u8Data;
1425*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x3B, &u8Data);  //0x1d * 2+1
1426*53ee8cc1Swenshuai.xi         u16BerPeriod |= u8Data << 8;
1427*53ee8cc1Swenshuai.xi     }
1428*53ee8cc1Swenshuai.xi     else if (eLayerIndex == E_ISDBT_Layer_C)
1429*53ee8cc1Swenshuai.xi     {
1430*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x88, &u8Data);  //0x44 * 2
1431*53ee8cc1Swenshuai.xi         u32BerValue = u8Data;
1432*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x89, &u8Data);  //0x44 * 2+1
1433*53ee8cc1Swenshuai.xi         u32BerValue |= u8Data << 8;
1434*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x8A, &u8Data);  //0x45 * 2
1435*53ee8cc1Swenshuai.xi         u32BerValue |= u8Data << 16;
1436*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x8B, &u8Data);  //0x45 * 2+1
1437*53ee8cc1Swenshuai.xi         u32BerValue |= u8Data << 24;
1438*53ee8cc1Swenshuai.xi 
1439*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x3E, &u8Data);  //0x1f * 2
1440*53ee8cc1Swenshuai.xi         u16BerPeriod = u8Data;
1441*53ee8cc1Swenshuai.xi         bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE + 0x3F, &u8Data);  //0x1d * 2+1
1442*53ee8cc1Swenshuai.xi         u16BerPeriod |= u8Data << 8;
1443*53ee8cc1Swenshuai.xi     }
1444*53ee8cc1Swenshuai.xi     else
1445*53ee8cc1Swenshuai.xi     {
1446*53ee8cc1Swenshuai.xi         HAL_INTERN_ISDBT_DBINFO(printf("Please select correct Layer\n"));
1447*53ee8cc1Swenshuai.xi         bRet = FALSE;
1448*53ee8cc1Swenshuai.xi     }
1449*53ee8cc1Swenshuai.xi 
1450*53ee8cc1Swenshuai.xi     // reg_rd_freezeber
1451*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_OUTER_REG_BASE+0x01*2+1, u8FrzData);
1452*53ee8cc1Swenshuai.xi 
1453*53ee8cc1Swenshuai.xi     if(u16BerPeriod == 0) u16BerPeriod = 1;
1454*53ee8cc1Swenshuai.xi 
1455*53ee8cc1Swenshuai.xi     *pfber = (float)u32BerValue/u16BerPeriod/(128.0*188.0*8.0);
1456*53ee8cc1Swenshuai.xi 
1457*53ee8cc1Swenshuai.xi     HAL_INTERN_ISDBT_DBINFO(printf("Layer: 0x%x, Post-Ber = %e\n", eLayerIndex, *pfber));
1458*53ee8cc1Swenshuai.xi 
1459*53ee8cc1Swenshuai.xi     return bRet;
1460*53ee8cc1Swenshuai.xi }
1461*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetSignalQualityOfLayerA(void)1462*53ee8cc1Swenshuai.xi static MS_U16 _HAL_INTERN_ISDBT_GetSignalQualityOfLayerA(void)
1463*53ee8cc1Swenshuai.xi {
1464*53ee8cc1Swenshuai.xi     float fber;
1465*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
1466*53ee8cc1Swenshuai.xi     EN_ISDBT_Layer eLayerIndex;
1467*53ee8cc1Swenshuai.xi     MS_U16 u16SQI;
1468*53ee8cc1Swenshuai.xi 
1469*53ee8cc1Swenshuai.xi     // Tmp solution
1470*53ee8cc1Swenshuai.xi     eLayerIndex = E_ISDBT_Layer_A;
1471*53ee8cc1Swenshuai.xi 
1472*53ee8cc1Swenshuai.xi     if(_HAL_INTERN_ISDBT_Check_FEC_Lock() == FALSE)
1473*53ee8cc1Swenshuai.xi     {
1474*53ee8cc1Swenshuai.xi         //printf("Dan Demod unlock!!!\n");
1475*53ee8cc1Swenshuai.xi         u16SQI = 0;
1476*53ee8cc1Swenshuai.xi     }
1477*53ee8cc1Swenshuai.xi     else
1478*53ee8cc1Swenshuai.xi     {
1479*53ee8cc1Swenshuai.xi         // Part 1: get ber value from demod.
1480*53ee8cc1Swenshuai.xi         bRet &= _HAL_INTERN_ISDBT_GetPostViterbiBer(eLayerIndex, &fber);
1481*53ee8cc1Swenshuai.xi 
1482*53ee8cc1Swenshuai.xi         u16SQI = _CALCULATE_SQI(fber);
1483*53ee8cc1Swenshuai.xi     }
1484*53ee8cc1Swenshuai.xi 
1485*53ee8cc1Swenshuai.xi     //printf("dan SQI = %d\n", SQI);
1486*53ee8cc1Swenshuai.xi     return u16SQI;
1487*53ee8cc1Swenshuai.xi }
1488*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetSignalQualityOfLayerB(void)1489*53ee8cc1Swenshuai.xi static MS_U16 _HAL_INTERN_ISDBT_GetSignalQualityOfLayerB(void)
1490*53ee8cc1Swenshuai.xi {
1491*53ee8cc1Swenshuai.xi     float fber;
1492*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
1493*53ee8cc1Swenshuai.xi     EN_ISDBT_Layer eLayerIndex;
1494*53ee8cc1Swenshuai.xi     MS_U16 u16SQI;
1495*53ee8cc1Swenshuai.xi 
1496*53ee8cc1Swenshuai.xi     // Tmp solution
1497*53ee8cc1Swenshuai.xi     eLayerIndex = E_ISDBT_Layer_B;
1498*53ee8cc1Swenshuai.xi 
1499*53ee8cc1Swenshuai.xi     if(_HAL_INTERN_ISDBT_Check_FEC_Lock() == FALSE)
1500*53ee8cc1Swenshuai.xi     {
1501*53ee8cc1Swenshuai.xi         //printf("Dan Demod unlock!!!\n");
1502*53ee8cc1Swenshuai.xi         u16SQI = 0;
1503*53ee8cc1Swenshuai.xi     }
1504*53ee8cc1Swenshuai.xi     else
1505*53ee8cc1Swenshuai.xi     {
1506*53ee8cc1Swenshuai.xi         // Part 1: get ber value from demod.
1507*53ee8cc1Swenshuai.xi         bRet &= _HAL_INTERN_ISDBT_GetPostViterbiBer(eLayerIndex, &fber);
1508*53ee8cc1Swenshuai.xi 
1509*53ee8cc1Swenshuai.xi         u16SQI = _CALCULATE_SQI(fber);
1510*53ee8cc1Swenshuai.xi     }
1511*53ee8cc1Swenshuai.xi 
1512*53ee8cc1Swenshuai.xi     //printf("dan SQI = %d\n", SQI);
1513*53ee8cc1Swenshuai.xi     return u16SQI;
1514*53ee8cc1Swenshuai.xi }
1515*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetSignalQualityOfLayerC(void)1516*53ee8cc1Swenshuai.xi static MS_U16 _HAL_INTERN_ISDBT_GetSignalQualityOfLayerC(void)
1517*53ee8cc1Swenshuai.xi {
1518*53ee8cc1Swenshuai.xi     float fber;
1519*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
1520*53ee8cc1Swenshuai.xi     EN_ISDBT_Layer eLayerIndex;
1521*53ee8cc1Swenshuai.xi     MS_U16 u16SQI;
1522*53ee8cc1Swenshuai.xi 
1523*53ee8cc1Swenshuai.xi     // Tmp solution
1524*53ee8cc1Swenshuai.xi     eLayerIndex = E_ISDBT_Layer_C;
1525*53ee8cc1Swenshuai.xi 
1526*53ee8cc1Swenshuai.xi     if(_HAL_INTERN_ISDBT_Check_FEC_Lock() == FALSE)
1527*53ee8cc1Swenshuai.xi     {
1528*53ee8cc1Swenshuai.xi         //printf("Dan Demod unlock!!!\n");
1529*53ee8cc1Swenshuai.xi         u16SQI = 0;
1530*53ee8cc1Swenshuai.xi     }
1531*53ee8cc1Swenshuai.xi     else
1532*53ee8cc1Swenshuai.xi     {
1533*53ee8cc1Swenshuai.xi         // Part 1: get ber value from demod.
1534*53ee8cc1Swenshuai.xi         bRet &= _HAL_INTERN_ISDBT_GetPostViterbiBer(eLayerIndex, &fber);
1535*53ee8cc1Swenshuai.xi 
1536*53ee8cc1Swenshuai.xi         u16SQI = _CALCULATE_SQI(fber);
1537*53ee8cc1Swenshuai.xi     }
1538*53ee8cc1Swenshuai.xi 
1539*53ee8cc1Swenshuai.xi     //printf("dan SQI = %d\n", SQI);
1540*53ee8cc1Swenshuai.xi     return u16SQI;
1541*53ee8cc1Swenshuai.xi }
1542*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetSignalQualityOfLayerCombine(void)1543*53ee8cc1Swenshuai.xi static MS_U16 _HAL_INTERN_ISDBT_GetSignalQualityOfLayerCombine(void)
1544*53ee8cc1Swenshuai.xi {
1545*53ee8cc1Swenshuai.xi     MS_S8  s8LayerAValue = 0, s8LayerBValue = 0, s8LayerCValue = 0;
1546*53ee8cc1Swenshuai.xi     MS_U16 u16SQI;
1547*53ee8cc1Swenshuai.xi     EN_ISDBT_Layer eLayerIndex;
1548*53ee8cc1Swenshuai.xi     EN_ISDBT_CONSTEL_TYPE eIsdbtConstellationA, eIsdbtConstellationB, eIsdbtConstellationC;
1549*53ee8cc1Swenshuai.xi 
1550*53ee8cc1Swenshuai.xi     //Get modulation of each layer
1551*53ee8cc1Swenshuai.xi     eLayerIndex = E_ISDBT_Layer_A;
1552*53ee8cc1Swenshuai.xi     _HAL_INTERN_ISDBT_GetSignalModulation(eLayerIndex, &eIsdbtConstellationA);
1553*53ee8cc1Swenshuai.xi     eLayerIndex = E_ISDBT_Layer_B;
1554*53ee8cc1Swenshuai.xi     _HAL_INTERN_ISDBT_GetSignalModulation(eLayerIndex, &eIsdbtConstellationB);
1555*53ee8cc1Swenshuai.xi     eLayerIndex = E_ISDBT_Layer_C;
1556*53ee8cc1Swenshuai.xi     _HAL_INTERN_ISDBT_GetSignalModulation(eLayerIndex, &eIsdbtConstellationC);
1557*53ee8cc1Swenshuai.xi 
1558*53ee8cc1Swenshuai.xi     if (eIsdbtConstellationA != E_ISDBT_QAM_INVALID)
1559*53ee8cc1Swenshuai.xi         s8LayerAValue = (MS_S8)eIsdbtConstellationA;
1560*53ee8cc1Swenshuai.xi     else
1561*53ee8cc1Swenshuai.xi         s8LayerAValue = -1;
1562*53ee8cc1Swenshuai.xi 
1563*53ee8cc1Swenshuai.xi     if (eIsdbtConstellationB != E_ISDBT_QAM_INVALID)
1564*53ee8cc1Swenshuai.xi         s8LayerBValue = (MS_S8)eIsdbtConstellationB;
1565*53ee8cc1Swenshuai.xi     else
1566*53ee8cc1Swenshuai.xi         s8LayerBValue = -1;
1567*53ee8cc1Swenshuai.xi 
1568*53ee8cc1Swenshuai.xi     if (eIsdbtConstellationC != E_ISDBT_QAM_INVALID)
1569*53ee8cc1Swenshuai.xi         s8LayerCValue = (MS_S8)eIsdbtConstellationC;
1570*53ee8cc1Swenshuai.xi     else
1571*53ee8cc1Swenshuai.xi         s8LayerCValue = -1;
1572*53ee8cc1Swenshuai.xi 
1573*53ee8cc1Swenshuai.xi     //printf("Layer info A:%d, B:%d, C:%d\n", s8LayerAValue, s8LayerBValue, s8LayerCValue);
1574*53ee8cc1Swenshuai.xi     if (s8LayerAValue >= s8LayerBValue)
1575*53ee8cc1Swenshuai.xi     {
1576*53ee8cc1Swenshuai.xi         if (s8LayerCValue >= s8LayerAValue)
1577*53ee8cc1Swenshuai.xi         {
1578*53ee8cc1Swenshuai.xi             //Get Layer C u16SQI
1579*53ee8cc1Swenshuai.xi             u16SQI = _HAL_INTERN_ISDBT_GetSignalQualityOfLayerC();
1580*53ee8cc1Swenshuai.xi             //printf("dan u16SQI Layer C1: %d\n", u16SQI);
1581*53ee8cc1Swenshuai.xi         }
1582*53ee8cc1Swenshuai.xi         else  //A>C
1583*53ee8cc1Swenshuai.xi         {
1584*53ee8cc1Swenshuai.xi             //Get Layer A u16SQI
1585*53ee8cc1Swenshuai.xi             u16SQI = _HAL_INTERN_ISDBT_GetSignalQualityOfLayerA();
1586*53ee8cc1Swenshuai.xi             //printf("dan u16SQI Layer A: %d\n", u16SQI);
1587*53ee8cc1Swenshuai.xi         }
1588*53ee8cc1Swenshuai.xi     }
1589*53ee8cc1Swenshuai.xi     else  // B >= A
1590*53ee8cc1Swenshuai.xi     {
1591*53ee8cc1Swenshuai.xi         if (s8LayerCValue >= s8LayerBValue)
1592*53ee8cc1Swenshuai.xi         {
1593*53ee8cc1Swenshuai.xi             //Get Layer C u16SQI
1594*53ee8cc1Swenshuai.xi             u16SQI = _HAL_INTERN_ISDBT_GetSignalQualityOfLayerC();
1595*53ee8cc1Swenshuai.xi             //printf("dan u16SQI Layer C2: %d\n", u16SQI);
1596*53ee8cc1Swenshuai.xi         }
1597*53ee8cc1Swenshuai.xi         else  //B>C
1598*53ee8cc1Swenshuai.xi         {
1599*53ee8cc1Swenshuai.xi             //Get Layer B u16SQI
1600*53ee8cc1Swenshuai.xi             u16SQI = _HAL_INTERN_ISDBT_GetSignalQualityOfLayerB();
1601*53ee8cc1Swenshuai.xi             //printf("dan u16SQI Layer B: %d\n", u16SQI);
1602*53ee8cc1Swenshuai.xi         }
1603*53ee8cc1Swenshuai.xi     }
1604*53ee8cc1Swenshuai.xi 
1605*53ee8cc1Swenshuai.xi     return u16SQI;
1606*53ee8cc1Swenshuai.xi }
1607*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetSNR(float * pf_snr)1608*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_GetSNR(float *pf_snr)
1609*53ee8cc1Swenshuai.xi {
1610*53ee8cc1Swenshuai.xi     MS_BOOL bRet = TRUE;
1611*53ee8cc1Swenshuai.xi     MS_U8   u8Data;
1612*53ee8cc1Swenshuai.xi     MS_U32  u32RegSNR = 0;
1613*53ee8cc1Swenshuai.xi     MS_U16  u16RegSnrObsNum = 0;
1614*53ee8cc1Swenshuai.xi     float   fSNRAvg = 0.0;
1615*53ee8cc1Swenshuai.xi 
1616*53ee8cc1Swenshuai.xi     //set freeze
1617*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0xFE, &u8Data);   //0x7f * 2
1618*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_FDP_REG_BASE + 0xFE, (u8Data|0x01));
1619*53ee8cc1Swenshuai.xi     //load
1620*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0xFF, &u8Data);   //0x7f * 2 + 1
1621*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_FDP_REG_BASE + 0xFF, (u8Data|0x01));
1622*53ee8cc1Swenshuai.xi 
1623*53ee8cc1Swenshuai.xi     // ==============Average SNR===============//
1624*53ee8cc1Swenshuai.xi     // [26:0] reg_snr_accu
1625*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDPEXT_REG_BASE+0x2d*2+1, &u8Data);
1626*53ee8cc1Swenshuai.xi     u32RegSNR = u8Data&0x07;
1627*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDPEXT_REG_BASE+0x2d*2, &u8Data);
1628*53ee8cc1Swenshuai.xi     u32RegSNR = (u32RegSNR<<8) | u8Data;
1629*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDPEXT_REG_BASE+0x2c*2+1, &u8Data);
1630*53ee8cc1Swenshuai.xi     u32RegSNR = (u32RegSNR<<8) | u8Data;
1631*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDPEXT_REG_BASE+0x2c*2, &u8Data);
1632*53ee8cc1Swenshuai.xi     u32RegSNR = (u32RegSNR<<8) | u8Data;
1633*53ee8cc1Swenshuai.xi 
1634*53ee8cc1Swenshuai.xi     // [12:0] reg_snr_observe_sum_num
1635*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDPEXT_REG_BASE+0x2a*2+1, &u8Data);
1636*53ee8cc1Swenshuai.xi     u16RegSnrObsNum = u8Data&0x1f;
1637*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDPEXT_REG_BASE+0x2a*2, &u8Data);
1638*53ee8cc1Swenshuai.xi     u16RegSnrObsNum = (u16RegSnrObsNum<<8) | u8Data;
1639*53ee8cc1Swenshuai.xi 
1640*53ee8cc1Swenshuai.xi     //release freeze
1641*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0xFE, &u8Data);   //0x7f * 2
1642*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_FDP_REG_BASE + 0xFE, (u8Data&~0x01));
1643*53ee8cc1Swenshuai.xi     //load
1644*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_FDP_REG_BASE + 0xFF, &u8Data);   //0x7f * 2 + 1
1645*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_FDP_REG_BASE + 0xFF, (u8Data|0x01));
1646*53ee8cc1Swenshuai.xi 
1647*53ee8cc1Swenshuai.xi     if (u16RegSnrObsNum == 0)
1648*53ee8cc1Swenshuai.xi         u16RegSnrObsNum = 1;
1649*53ee8cc1Swenshuai.xi 
1650*53ee8cc1Swenshuai.xi     fSNRAvg = (float)u32RegSNR/u16RegSnrObsNum;
1651*53ee8cc1Swenshuai.xi 
1652*53ee8cc1Swenshuai.xi     if (fSNRAvg == 0)                 //protect value 0
1653*53ee8cc1Swenshuai.xi         fSNRAvg = 0.01;
1654*53ee8cc1Swenshuai.xi 
1655*53ee8cc1Swenshuai.xi     #ifdef MSOS_TYPE_LINUX
1656*53ee8cc1Swenshuai.xi     *pf_snr = 10*(float)log10f((double)fSNRAvg/2);
1657*53ee8cc1Swenshuai.xi     #else
1658*53ee8cc1Swenshuai.xi     *pf_snr = 10*(float)Log10Approx((double)fSNRAvg/2);
1659*53ee8cc1Swenshuai.xi     #endif
1660*53ee8cc1Swenshuai.xi 
1661*53ee8cc1Swenshuai.xi     HAL_INTERN_ISDBT_DBINFO(printf("SNR value = %f\n", *pf_snr));
1662*53ee8cc1Swenshuai.xi 
1663*53ee8cc1Swenshuai.xi     return bRet;
1664*53ee8cc1Swenshuai.xi }
1665*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_Read_PKT_ERR(EN_ISDBT_Layer eLayerIndex,MS_U16 * pu16PacketErr)1666*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_Read_PKT_ERR(EN_ISDBT_Layer eLayerIndex, MS_U16 *pu16PacketErr)
1667*53ee8cc1Swenshuai.xi {
1668*53ee8cc1Swenshuai.xi     MS_U8 bRet = true;
1669*53ee8cc1Swenshuai.xi     MS_U8 u8Data, u8FrzData;
1670*53ee8cc1Swenshuai.xi     MS_U16 u16PacketErrA = 0xFFFF, u16PacketErrB = 0xFFFF, u16PacketErrC = 0xFFFF;
1671*53ee8cc1Swenshuai.xi 
1672*53ee8cc1Swenshuai.xi     // Read packet errors of three layers
1673*53ee8cc1Swenshuai.xi     // OUTER_FUNCTION_ENABLE
1674*53ee8cc1Swenshuai.xi     // [8] reg_biterr_num_pcktprd_freeze
1675*53ee8cc1Swenshuai.xi     // Freeze Packet error
1676*53ee8cc1Swenshuai.xi     bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE+0x01*2+1, &u8FrzData);
1677*53ee8cc1Swenshuai.xi     u8Data = u8FrzData | 0x01;
1678*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_OUTER_REG_BASE+0x01*2+1, u8Data);
1679*53ee8cc1Swenshuai.xi 
1680*53ee8cc1Swenshuai.xi     switch(eLayerIndex)
1681*53ee8cc1Swenshuai.xi     {
1682*53ee8cc1Swenshuai.xi         case E_ISDBT_Layer_A:
1683*53ee8cc1Swenshuai.xi             // [15:0] OUTER_UNCRT_PKT_NUM_PCKTPRD_A
1684*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE+0x08*2+1, &u8Data);
1685*53ee8cc1Swenshuai.xi             u16PacketErrA = u8Data << 8;
1686*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE+0x08*2, &u8Data);
1687*53ee8cc1Swenshuai.xi             u16PacketErrA = u16PacketErrA | u8Data;
1688*53ee8cc1Swenshuai.xi             *pu16PacketErr = u16PacketErrA;
1689*53ee8cc1Swenshuai.xi             break;
1690*53ee8cc1Swenshuai.xi         case E_ISDBT_Layer_B:
1691*53ee8cc1Swenshuai.xi             // [15:0] OUTER_UNCRT_PKT_NUM_PCKTPRD_B
1692*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE+0x21*2+1, &u8Data);
1693*53ee8cc1Swenshuai.xi             u16PacketErrB = u8Data << 8;
1694*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE+0x21*2, &u8Data);
1695*53ee8cc1Swenshuai.xi             u16PacketErrB = u16PacketErrB | u8Data;
1696*53ee8cc1Swenshuai.xi             *pu16PacketErr = u16PacketErrB;
1697*53ee8cc1Swenshuai.xi             break;
1698*53ee8cc1Swenshuai.xi         case E_ISDBT_Layer_C:
1699*53ee8cc1Swenshuai.xi             // [15:0] OUTER_UNCRT_PKT_NUM_PCKTPRD_C
1700*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE+0x42*2+1, &u8Data);
1701*53ee8cc1Swenshuai.xi             u16PacketErrC = u8Data << 8;
1702*53ee8cc1Swenshuai.xi             bRet &= _MBX_ReadReg(ISDBT_OUTER_REG_BASE+0x42*2, &u8Data);
1703*53ee8cc1Swenshuai.xi             u16PacketErrC = u16PacketErrC | u8Data;
1704*53ee8cc1Swenshuai.xi             *pu16PacketErr = u16PacketErrC;
1705*53ee8cc1Swenshuai.xi             break;
1706*53ee8cc1Swenshuai.xi         default:
1707*53ee8cc1Swenshuai.xi             *pu16PacketErr = 0xFFFF;
1708*53ee8cc1Swenshuai.xi             break;
1709*53ee8cc1Swenshuai.xi     }
1710*53ee8cc1Swenshuai.xi 
1711*53ee8cc1Swenshuai.xi     // Unfreeze Packet error
1712*53ee8cc1Swenshuai.xi     bRet &= _MBX_WriteReg(ISDBT_OUTER_REG_BASE+0x01*2+1, u8FrzData);
1713*53ee8cc1Swenshuai.xi 
1714*53ee8cc1Swenshuai.xi     return bRet;
1715*53ee8cc1Swenshuai.xi }
1716*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_GetReg(MS_U16 u16Addr,MS_U8 * pu8Data)1717*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_GetReg(MS_U16 u16Addr, MS_U8 *pu8Data)
1718*53ee8cc1Swenshuai.xi {
1719*53ee8cc1Swenshuai.xi     return _MBX_ReadReg(u16Addr, pu8Data);
1720*53ee8cc1Swenshuai.xi }
1721*53ee8cc1Swenshuai.xi 
_HAL_INTERN_ISDBT_SetReg(MS_U16 u16Addr,MS_U8 u8Data)1722*53ee8cc1Swenshuai.xi static MS_BOOL _HAL_INTERN_ISDBT_SetReg(MS_U16 u16Addr, MS_U8 u8Data)
1723*53ee8cc1Swenshuai.xi {
1724*53ee8cc1Swenshuai.xi     return _MBX_WriteReg(u16Addr, u8Data);
1725*53ee8cc1Swenshuai.xi }
1726*53ee8cc1Swenshuai.xi 
1727*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
1728*53ee8cc1Swenshuai.xi //  Global Functions
1729*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
HAL_INTERN_ISDBT_IOCTL_CMD(DMD_ISDBT_HAL_COMMAND eCmd,void * pArgs)1730*53ee8cc1Swenshuai.xi MS_BOOL HAL_INTERN_ISDBT_IOCTL_CMD(DMD_ISDBT_HAL_COMMAND eCmd, void *pArgs)
1731*53ee8cc1Swenshuai.xi {
1732*53ee8cc1Swenshuai.xi     MS_BOOL bResult = TRUE;
1733*53ee8cc1Swenshuai.xi 
1734*53ee8cc1Swenshuai.xi     switch(eCmd)
1735*53ee8cc1Swenshuai.xi     {
1736*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_Exit:
1737*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_Exit();
1738*53ee8cc1Swenshuai.xi         break;
1739*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_InitClk:
1740*53ee8cc1Swenshuai.xi         _HAL_INTERN_ISDBT_InitClk();
1741*53ee8cc1Swenshuai.xi         break;
1742*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_Download:
1743*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_Download();
1744*53ee8cc1Swenshuai.xi         break;
1745*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_FWVERSION:
1746*53ee8cc1Swenshuai.xi         _HAL_INTERN_ISDBT_FWVERSION();
1747*53ee8cc1Swenshuai.xi         break;
1748*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_SoftReset:
1749*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_SoftReset();
1750*53ee8cc1Swenshuai.xi         break;
1751*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_SetACICoef:
1752*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_SetACICoef();
1753*53ee8cc1Swenshuai.xi         break;
1754*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_SetISDBTMode:
1755*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_SetIsdbtMode();
1756*53ee8cc1Swenshuai.xi         break;
1757*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_SetModeClean:
1758*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_SetModeClean();
1759*53ee8cc1Swenshuai.xi         break;
1760*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_Active:
1761*53ee8cc1Swenshuai.xi         break;
1762*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_Check_FEC_Lock:
1763*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_Check_FEC_Lock();
1764*53ee8cc1Swenshuai.xi         break;
1765*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_Check_FSA_TRACK_Lock:
1766*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_Check_FSA_TRACK_Lock();
1767*53ee8cc1Swenshuai.xi         break;
1768*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_Check_PSYNC_Lock:
1769*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_Check_PSYNC_Lock();
1770*53ee8cc1Swenshuai.xi         break;
1771*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_Check_ICFO_CH_EXIST_Lock:
1772*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_Check_ICFO_CH_EXIST_Lock();
1773*53ee8cc1Swenshuai.xi         break;
1774*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetSignalCodeRate:
1775*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_GetSignalCodeRate((*((DMD_ISDBT_GET_CodeRate*)pArgs)).eIsdbtLayer, &((*((DMD_ISDBT_GET_CodeRate*)pArgs)).eCodeRate));
1776*53ee8cc1Swenshuai.xi         break;
1777*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetSignalGuardInterval:
1778*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_GetSignalGuardInterval((EN_ISDBT_GUARD_INTERVAL *)pArgs);
1779*53ee8cc1Swenshuai.xi         break;
1780*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetSignalTimeInterleaving:
1781*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_GetSignalTimeInterleaving((*((DMD_ISDBT_GET_TimeInterleaving*)pArgs)).eIsdbtLayer, &((*((DMD_ISDBT_GET_TimeInterleaving*)pArgs)).eTimeInterleaving));
1782*53ee8cc1Swenshuai.xi         break;
1783*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetSignalFFTValue:
1784*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_GetSignalFFTValue((EN_ISDBT_FFT_VAL *)pArgs);
1785*53ee8cc1Swenshuai.xi         break;
1786*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetSignalModulation:
1787*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_GetSignalModulation((*((DMD_ISDBT_GET_MODULATION*)pArgs)).eIsdbtLayer, &((*((DMD_ISDBT_GET_MODULATION*)pArgs)).eConstellation));
1788*53ee8cc1Swenshuai.xi         break;
1789*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_ReadIFAGC:
1790*53ee8cc1Swenshuai.xi         *((MS_U16 *)pArgs) = _HAL_INTERN_ISDBT_ReadIFAGC();
1791*53ee8cc1Swenshuai.xi         break;
1792*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetFreqOffset:
1793*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_GetFreqOffset((float *)pArgs);
1794*53ee8cc1Swenshuai.xi         break;
1795*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetSignalQuality:
1796*53ee8cc1Swenshuai.xi         *((MS_U16*)pArgs) = _HAL_INTERN_ISDBT_GetSignalQualityOfLayerA();
1797*53ee8cc1Swenshuai.xi         break;
1798*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetSignalQualityOfLayerA:
1799*53ee8cc1Swenshuai.xi         *((MS_U16*)pArgs) = _HAL_INTERN_ISDBT_GetSignalQualityOfLayerA();
1800*53ee8cc1Swenshuai.xi         break;
1801*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetSignalQualityOfLayerB:
1802*53ee8cc1Swenshuai.xi         *((MS_U16*)pArgs) = _HAL_INTERN_ISDBT_GetSignalQualityOfLayerB();
1803*53ee8cc1Swenshuai.xi         break;
1804*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetSignalQualityOfLayerC:
1805*53ee8cc1Swenshuai.xi         *((MS_U16*)pArgs) = _HAL_INTERN_ISDBT_GetSignalQualityOfLayerC();
1806*53ee8cc1Swenshuai.xi         break;
1807*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetSignalQualityCombine:
1808*53ee8cc1Swenshuai.xi         *((MS_U16*)pArgs) = _HAL_INTERN_ISDBT_GetSignalQualityOfLayerCombine();
1809*53ee8cc1Swenshuai.xi         break;
1810*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetSNR:
1811*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_GetSNR((float *)pArgs);
1812*53ee8cc1Swenshuai.xi         break;
1813*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetPreViterbiBer:
1814*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_GetPreViterbiBer((*((DMD_ISDBT_GET_BER_VALUE*)pArgs)).eIsdbtLayer, &((*((DMD_ISDBT_GET_BER_VALUE*)pArgs)).fBerValue));
1815*53ee8cc1Swenshuai.xi         break;
1816*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GetPostViterbiBer:
1817*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_GetPostViterbiBer((*((DMD_ISDBT_GET_BER_VALUE*)pArgs)).eIsdbtLayer, &((*((DMD_ISDBT_GET_BER_VALUE*)pArgs)).fBerValue));
1818*53ee8cc1Swenshuai.xi         break;
1819*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_Read_PKT_ERR:
1820*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_Read_PKT_ERR((*((DMD_ISDBT_GET_PKT_ERR*)pArgs)).eIsdbtLayer, &((*((DMD_ISDBT_GET_PKT_ERR*)pArgs)).u16PacketErr));
1821*53ee8cc1Swenshuai.xi         break;
1822*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_TS_INTERFACE_CONFIG:
1823*53ee8cc1Swenshuai.xi         break;
1824*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_IIC_Bypass_Mode:
1825*53ee8cc1Swenshuai.xi         break;
1826*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_SSPI_TO_GPIO:
1827*53ee8cc1Swenshuai.xi         break;
1828*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GPIO_GET_LEVEL:
1829*53ee8cc1Swenshuai.xi         break;
1830*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GPIO_SET_LEVEL:
1831*53ee8cc1Swenshuai.xi         break;
1832*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GPIO_OUT_ENABLE:
1833*53ee8cc1Swenshuai.xi         break;
1834*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_GET_REG:
1835*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_GetReg((*((DMD_ISDBT_REG_DATA *)pArgs)).u16Addr, &((*((DMD_ISDBT_REG_DATA *)pArgs)).u8Data));
1836*53ee8cc1Swenshuai.xi         break;
1837*53ee8cc1Swenshuai.xi     case DMD_ISDBT_HAL_CMD_SET_REG:
1838*53ee8cc1Swenshuai.xi         bResult = _HAL_INTERN_ISDBT_SetReg((*((DMD_ISDBT_REG_DATA *)pArgs)).u16Addr, (*((DMD_ISDBT_REG_DATA *)pArgs)).u8Data);
1839*53ee8cc1Swenshuai.xi         break;
1840*53ee8cc1Swenshuai.xi     default:
1841*53ee8cc1Swenshuai.xi         break;
1842*53ee8cc1Swenshuai.xi     }
1843*53ee8cc1Swenshuai.xi 
1844*53ee8cc1Swenshuai.xi     return bResult;
1845*53ee8cc1Swenshuai.xi }
1846*53ee8cc1Swenshuai.xi 
MDrv_DMD_ISDBT_Initial_Hal_Interface(void)1847*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_ISDBT_Initial_Hal_Interface(void)
1848*53ee8cc1Swenshuai.xi {
1849*53ee8cc1Swenshuai.xi     return TRUE;
1850*53ee8cc1Swenshuai.xi }
1851*53ee8cc1Swenshuai.xi 
1852