xref: /utopia/UTPA2-700.0.x/modules/demodulator/hal/k6lite/demod/halDMD_INTERN_DVBS.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¡¨) by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi //
97*53ee8cc1Swenshuai.xi /// @file INTERN_DVBT.c
98*53ee8cc1Swenshuai.xi /// @brief INTERN_DVBT DVBT
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor, Inc.
100*53ee8cc1Swenshuai.xi //
101*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
102*53ee8cc1Swenshuai.xi //0312
103*53ee8cc1Swenshuai.xi 
104*53ee8cc1Swenshuai.xi #define _INTERN_DVBS_C_
105*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
106*53ee8cc1Swenshuai.xi #include <math.h>
107*53ee8cc1Swenshuai.xi #endif
108*53ee8cc1Swenshuai.xi #include "ULog.h"
109*53ee8cc1Swenshuai.xi #include "MsCommon.h"
110*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
111*53ee8cc1Swenshuai.xi #include "MsOS.h"
112*53ee8cc1Swenshuai.xi //#include "apiPWS.h"
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi #include "MsTypes.h"
115*53ee8cc1Swenshuai.xi #include "drvBDMA.h"
116*53ee8cc1Swenshuai.xi //#include "drvIIC.h"
117*53ee8cc1Swenshuai.xi //#include "msAPI_Tuner.h"
118*53ee8cc1Swenshuai.xi //#include "msAPI_MIU.h"
119*53ee8cc1Swenshuai.xi //#include "BinInfo.h"
120*53ee8cc1Swenshuai.xi //#include "halVif.h"
121*53ee8cc1Swenshuai.xi #include "drvDMD_INTERN_DVBS.h"
122*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_DVBS.h"
123*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_common.h"
124*53ee8cc1Swenshuai.xi 
125*53ee8cc1Swenshuai.xi #include "drvMMIO.h"
126*53ee8cc1Swenshuai.xi //#include "TDAG4D01A_SSI_DVBT.c"
127*53ee8cc1Swenshuai.xi #include "drvDMD_VD_MBX.h"
128*53ee8cc1Swenshuai.xi //-----------------------------------------------------------------------
129*53ee8cc1Swenshuai.xi #define BIN_ID_INTERN_DVBS_DEMOD BIN_ID_INTERN_DVBS
130*53ee8cc1Swenshuai.xi 
131*53ee8cc1Swenshuai.xi //For DVBS
132*53ee8cc1Swenshuai.xi //#define DVBT2FEC_REG_BASE           0x3300
133*53ee8cc1Swenshuai.xi #define DVBS2OPPRO_REG_BASE         0x3E00
134*53ee8cc1Swenshuai.xi #define TOP_REG_BASE                0x2000    //DMDTOP
135*53ee8cc1Swenshuai.xi //#define REG_BACKEND 0x1F00//_REG_BACKEND
136*53ee8cc1Swenshuai.xi #define DVBS2FEC_REG_BASE            0x3D00
137*53ee8cc1Swenshuai.xi #define DVBS2_REG_BASE              0x1500
138*53ee8cc1Swenshuai.xi #define DVBS2_INNER_REG_BASE        0x1600
139*53ee8cc1Swenshuai.xi #define DVBS2_INNER_EXT_REG_BASE    0x1700
140*53ee8cc1Swenshuai.xi #define DVBS2_INNER_EXT2_REG_BASE    0x1800
141*53ee8cc1Swenshuai.xi //#define DVBSTFEC_REG_BASE           0x2300    //DVBTFEC
142*53ee8cc1Swenshuai.xi #define FRONTENDEXT_REG_BASE        0x2200
143*53ee8cc1Swenshuai.xi #define FRONTENDEXT2_REG_BASE       0x2300
144*53ee8cc1Swenshuai.xi #define DMDANA_REG_BASE                      0x2E00    //DMDDTOP//reg_dmdana.xls
145*53ee8cc1Swenshuai.xi #define DVBTM_REG_BASE                       0x1E00
146*53ee8cc1Swenshuai.xi 
147*53ee8cc1Swenshuai.xi #define SAMPLING_RATE_FS                    (144000)//(108000)//(96000)
148*53ee8cc1Swenshuai.xi #define INTERN_DVBS_DEMOD_WAIT_TIMEOUT      (6000)
149*53ee8cc1Swenshuai.xi #define INTERN_DVBS_TUNER_WAIT_TIMEOUT      (50)
150*53ee8cc1Swenshuai.xi 
151*53ee8cc1Swenshuai.xi //#define DVBS2_Function                      (1)
152*53ee8cc1Swenshuai.xi //#define MSB131X_ADCPLL_IQ_SWAP            0
153*53ee8cc1Swenshuai.xi //#define INTERN_DVBS_TS_DATA_SWAP            0
154*53ee8cc1Swenshuai.xi 
155*53ee8cc1Swenshuai.xi //#define MS_DEBUG //enable debug dump
156*53ee8cc1Swenshuai.xi 
157*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
158*53ee8cc1Swenshuai.xi #define DBG_INTERN_DVBS(x) x
159*53ee8cc1Swenshuai.xi #define DBG_GET_SIGNAL_DVBS(x)   x
160*53ee8cc1Swenshuai.xi #define DBG_INTERN_DVBS_TIME(x)  x
161*53ee8cc1Swenshuai.xi #define DBG_INTERN_DVBS_LOCK(x)  x
162*53ee8cc1Swenshuai.xi #define INTERN_DVBS_INTERNAL_DEBUG  1
163*53ee8cc1Swenshuai.xi #else
164*53ee8cc1Swenshuai.xi #define DBG_INTERN_DVBS(x)          //x
165*53ee8cc1Swenshuai.xi #define DBG_GET_SIGNAL_DVBS(x)      //x
166*53ee8cc1Swenshuai.xi #define DBG_INTERN_DVBS_TIME(x)     //x
167*53ee8cc1Swenshuai.xi #define DBG_INTERN_DVBS_LOCK(x)     //x
168*53ee8cc1Swenshuai.xi #define INTERN_DVBS_INTERNAL_DEBUG  0
169*53ee8cc1Swenshuai.xi #endif
170*53ee8cc1Swenshuai.xi //----------------------------------------------------------
171*53ee8cc1Swenshuai.xi #define DBG_DUMP_LOAD_DSP_TIME 0
172*53ee8cc1Swenshuai.xi 
173*53ee8cc1Swenshuai.xi 
174*53ee8cc1Swenshuai.xi #define SIGNAL_LEVEL_OFFSET     0.00f
175*53ee8cc1Swenshuai.xi #define TAKEOVERPOINT           -60.0f
176*53ee8cc1Swenshuai.xi #define TAKEOVERRANGE           0.5f
177*53ee8cc1Swenshuai.xi #define LOG10_OFFSET            -0.21f
178*53ee8cc1Swenshuai.xi #define INTERN_DVBS_USE_SAR_3_ENABLE 0
179*53ee8cc1Swenshuai.xi //extern MS_U32 msAPI_Timer_GetTime0(void);
180*53ee8cc1Swenshuai.xi //#define INTERN_DVBS_GET_TIME msAPI_Timer_GetTime0()
181*53ee8cc1Swenshuai.xi 
182*53ee8cc1Swenshuai.xi 
183*53ee8cc1Swenshuai.xi //Debug Info
184*53ee8cc1Swenshuai.xi //Lock/Done Flag
185*53ee8cc1Swenshuai.xi #define AGC_LOCK                                    0x28170100
186*53ee8cc1Swenshuai.xi #define DAGC0_LOCK                                  0x283B0001
187*53ee8cc1Swenshuai.xi #define DAGC1_LOCK                                  0x285B0001
188*53ee8cc1Swenshuai.xi #define DAGC2_LOCK                                  0x28620001 //ACIDAGC 1 2
189*53ee8cc1Swenshuai.xi #define DAGC3_LOCK                                  0x286E0001
190*53ee8cc1Swenshuai.xi #define DCR_LOCK                                    0x28220100
191*53ee8cc1Swenshuai.xi #define COARSE_SYMBOL_RATE_DONE                     0x2A200001 //CSRD 1 2
192*53ee8cc1Swenshuai.xi #define FINE_SYMBOL_RATE_DONE                       0x2A200008 //FSRD 1 2
193*53ee8cc1Swenshuai.xi #define POWER4CFO_DONE                              0x29280100 //POWER4CFO 1 2
194*53ee8cc1Swenshuai.xi //#define CLOSE_COARSE_CFO_LOCK                       0x244E0001
195*53ee8cc1Swenshuai.xi #define TR_LOCK                                     0x3B0E0100 //TR 1 2
196*53ee8cc1Swenshuai.xi #define PR_LOCK                                     0x3B401000
197*53ee8cc1Swenshuai.xi #define FRAME_SYNC_ACQUIRE                          0x3B300001
198*53ee8cc1Swenshuai.xi #define EQ_LOCK                                     0x3B5A1000
199*53ee8cc1Swenshuai.xi #define P_SYNC_LOCK                                 0x22160002
200*53ee8cc1Swenshuai.xi #define IN_SYNC_LOCK                                0x3F0D8000
201*53ee8cc1Swenshuai.xi 
202*53ee8cc1Swenshuai.xi //AGC / DAGC
203*53ee8cc1Swenshuai.xi #define DEBUG_SEL_IF_AGC_GAIN                       0x28260003
204*53ee8cc1Swenshuai.xi #define DEBUG_SEL_AGC_ERR                           0x28260004
205*53ee8cc1Swenshuai.xi #define DEBUG_OUT_AGC                               0x2828
206*53ee8cc1Swenshuai.xi 
207*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC0_GAIN                        0x28E80003
208*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC0_ERR                         0x28E80001
209*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC0_PEAK_MEAN                   0x28E80005
210*53ee8cc1Swenshuai.xi #define DEBUG_OUT_DAGC0                             0x2878
211*53ee8cc1Swenshuai.xi 
212*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC1_GAIN                        0x28E80003//???
213*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC1_ERR                         0x28E80001
214*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC1_PEAK_MEAN                   0x28E80005
215*53ee8cc1Swenshuai.xi #define DEBUG_OUT_DAGC1                             0x28B8
216*53ee8cc1Swenshuai.xi 
217*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC2_GAIN                        0x28E80003
218*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC2_ERR                         0x28E80001
219*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC2_PEAK_MEAN                   0x28E80005
220*53ee8cc1Swenshuai.xi #define DEBUG_OUT_DAGC2                             0x28C4
221*53ee8cc1Swenshuai.xi 
222*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC3_GAIN                        0x29DA0003
223*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC3_ERR                         0x29DA0001
224*53ee8cc1Swenshuai.xi #define DEBUG_SEL_DAGC3_PEAK_MEAN                   0x29DA0005
225*53ee8cc1Swenshuai.xi #define DEBUG_OUT_DAGC3                             0x29DC
226*53ee8cc1Swenshuai.xi 
227*53ee8cc1Swenshuai.xi #define INNER_DEBUG_SEL_TR                          0x24080D00  //TR
228*53ee8cc1Swenshuai.xi #define DEBUG_SEL_TR_SFO_CONVERGE                   0x24080B00
229*53ee8cc1Swenshuai.xi #define DEBUG_SEL_TR_INPUT                          0x24080F00
230*53ee8cc1Swenshuai.xi 
231*53ee8cc1Swenshuai.xi #define FRONTEND_FREEZE_DUMP                        0x21028000
232*53ee8cc1Swenshuai.xi #define INNER_FREEZE_DUMP                           0x16080010
233*53ee8cc1Swenshuai.xi 
234*53ee8cc1Swenshuai.xi #define DCR_OFFSET                                      0x2740
235*53ee8cc1Swenshuai.xi 
236*53ee8cc1Swenshuai.xi #define DMDTOP_REG_BASE              0x2000
237*53ee8cc1Swenshuai.xi #define _REG_DMDTOP(idx)             		(DMDTOP_REG_BASE + (idx)*2)
238*53ee8cc1Swenshuai.xi #define TOP_WR_DBG_90          (_REG_DMDTOP(0x60)+0)
239*53ee8cc1Swenshuai.xi 
240*53ee8cc1Swenshuai.xi #define FRONTEND_REG_BASE           0x2100
241*53ee8cc1Swenshuai.xi #define _REG_FRONTEND(idx)             (FRONTEND_REG_BASE + (idx)*2)
242*53ee8cc1Swenshuai.xi #define FRONTEND_LATCH                                          (_REG_FRONTEND(0x02)+1)//[15]
243*53ee8cc1Swenshuai.xi 
244*53ee8cc1Swenshuai.xi #define FRONTEND_AGC_DEBUG_SEL           (_REG_FRONTEND(0x11)+0)//[3:0]
245*53ee8cc1Swenshuai.xi 
246*53ee8cc1Swenshuai.xi #define FRONTEND_AGC_DEBUG_OUT_R0           (_REG_FRONTEND(0x12)+0)
247*53ee8cc1Swenshuai.xi #define FRONTEND_AGC_DEBUG_OUT_R1           (_REG_FRONTEND(0x12)+1)
248*53ee8cc1Swenshuai.xi #define FRONTEND_AGC_DEBUG_OUT_R2           (_REG_FRONTEND(0x13)+0)
249*53ee8cc1Swenshuai.xi 
250*53ee8cc1Swenshuai.xi #define FRONTEND_IF_MUX                             (_REG_FRONTEND(0x15)+0)//[1]
251*53ee8cc1Swenshuai.xi 
252*53ee8cc1Swenshuai.xi #define FRONTEND_IF_AGC_MANUAL0                 (_REG_FRONTEND(0x19)+0)
253*53ee8cc1Swenshuai.xi #define FRONTEND_IF_AGC_MANUAL1                 (_REG_FRONTEND(0x19)+1)
254*53ee8cc1Swenshuai.xi 
255*53ee8cc1Swenshuai.xi #define FRONTEND_MIXER_IQ_SWAP_OUT                 (_REG_FRONTEND(0x2F)+0)//[1]
256*53ee8cc1Swenshuai.xi #define FRONTEND_INFO_07                        (_REG_FRONTEND(0x7F)+0)
257*53ee8cc1Swenshuai.xi 
258*53ee8cc1Swenshuai.xi 
259*53ee8cc1Swenshuai.xi #define INNER_REG_BASE              0x1600
260*53ee8cc1Swenshuai.xi #define _REG_INNER(idx)             (INNER_REG_BASE + (idx)*2)
261*53ee8cc1Swenshuai.xi #define INNER_LATCH                                                      (_REG_INNER(0x04)+0)//[4]
262*53ee8cc1Swenshuai.xi #define INNER_DEBUG_SEL                                          (_REG_INNER(0x04)+1)
263*53ee8cc1Swenshuai.xi #define INNER_PLSCDEC_DEBUG_OUT0                         (_REG_INNER(0x6B)+0)
264*53ee8cc1Swenshuai.xi #define INNER_PLSCDEC_DEBUG_OUT1                         (_REG_INNER(0x6B)+1)
265*53ee8cc1Swenshuai.xi #define INNER_TR_ROLLOFF		                                     (_REG_INNER(0x0F)+0)//[1:0]
266*53ee8cc1Swenshuai.xi 
267*53ee8cc1Swenshuai.xi #define INNEREXT_FINEFE_DBG_OUT0                        0x2550
268*53ee8cc1Swenshuai.xi #define INNEREXT_FINEFE_DBG_OUT2                        0x2552
269*53ee8cc1Swenshuai.xi #define INNEREXT_FINEFE_KI_FF0                          0x2556
270*53ee8cc1Swenshuai.xi #define INNEREXT_FINEFE_KI_FF2                          0x2558
271*53ee8cc1Swenshuai.xi #define INNEREXT_FINEFE_KI_FF4                          0x255A
272*53ee8cc1Swenshuai.xi #define INNER_PR_DEBUG_OUT0                             0x2486
273*53ee8cc1Swenshuai.xi #define INNER_PR_DEBUG_OUT2                             0x2488
274*53ee8cc1Swenshuai.xi 
275*53ee8cc1Swenshuai.xi //  **********  DVBSFEC.XLS  **********  //
276*53ee8cc1Swenshuai.xi #define DVBSFEC_REG_BASE            0x2800
277*53ee8cc1Swenshuai.xi #define _REG_DVBSFEC(idx)             (DVBSFEC_REG_BASE + (idx)*2)
278*53ee8cc1Swenshuai.xi #define DVBSFEC_VITERBI_IQ_SWAP               	            (_REG_DVBSFEC(0x41)+0)  //[2]
279*53ee8cc1Swenshuai.xi 
280*53ee8cc1Swenshuai.xi 
281*53ee8cc1Swenshuai.xi //  **********  DVBS2FEC.XLS  **********  //
282*53ee8cc1Swenshuai.xi #define DVBS2FEC_REG_BASE              0x3D00//0x2600
283*53ee8cc1Swenshuai.xi #define _REG_DVBS2FEC(idx)             (DVBS2FEC_REG_BASE + (idx)*2)
284*53ee8cc1Swenshuai.xi #define DVBS2FEC_OUTER_FREEZE                              		(_REG_DVBS2FEC(0x02)+0)     //[0]
285*53ee8cc1Swenshuai.xi #define DVBS2FEC_LDPC_ERROR_WINDOW0               		(_REG_DVBS2FEC(0x12)+0)
286*53ee8cc1Swenshuai.xi #define DVBS2FEC_LDPC_ERROR_WINDOW1               		(_REG_DVBS2FEC(0x12)+1)
287*53ee8cc1Swenshuai.xi #define DVBS2FEC_LDPC_BER_COUNT0                                     	(_REG_DVBS2FEC(0x2C)+0)//(_REG_DVBS2FEC(0x32)+0)
288*53ee8cc1Swenshuai.xi #define DVBS2FEC_LDPC_BER_COUNT1                                     	(_REG_DVBS2FEC(0x2C)+1)//(_REG_DVBS2FEC(0x32)+1)
289*53ee8cc1Swenshuai.xi #define DVBS2FEC_LDPC_BER_COUNT2                                     	(_REG_DVBS2FEC(0x2D)+0)//(_REG_DVBS2FEC(0x33)+0)
290*53ee8cc1Swenshuai.xi #define DVBS2FEC_LDPC_BER_COUNT3                                     	(_REG_DVBS2FEC(0x2D)+1)//(_REG_DVBS2FEC(0x33)+1)
291*53ee8cc1Swenshuai.xi 
292*53ee8cc1Swenshuai.xi 
293*53ee8cc1Swenshuai.xi //  **********  DVBS2OPPRO.XLS  **********  //
294*53ee8cc1Swenshuai.xi #define DVBS2OPPRO_REG_BASE              0x3E00
295*53ee8cc1Swenshuai.xi #define _REG_DVBS2OPPRO(idx)             (DVBS2OPPRO_REG_BASE + (idx)*2)
296*53ee8cc1Swenshuai.xi 
297*53ee8cc1Swenshuai.xi #define DVBS2OPPRO_SIS_EN					                            (_REG_DVBS2OPPRO(0x43)+0)     //[2]
298*53ee8cc1Swenshuai.xi #define DVBS2OPPRO_OPPRO_ISID                                                   (_REG_DVBS2OPPRO(0x43)+1)     //[15:8]
299*53ee8cc1Swenshuai.xi #define DVBS2OPPRO_OPPRO_ISID_SEL                                          	(_REG_DVBS2OPPRO(0x50)+0)
300*53ee8cc1Swenshuai.xi #define DVBS2OPPRO_ROLLOFF_DET_DONE						(_REG_DVBS2OPPRO(0x74)+0)  //[0]
301*53ee8cc1Swenshuai.xi #define DVBS2OPPRO_ROLLOFF_DET_VALUE						(_REG_DVBS2OPPRO(0x74)+0)  //[6:4]
302*53ee8cc1Swenshuai.xi #define DVBS2OPPRO_ROLLOFF_DET_ERR						(_REG_DVBS2OPPRO(0x74)+1)  //[8]
303*53ee8cc1Swenshuai.xi 
304*53ee8cc1Swenshuai.xi #define IIS_COUNT0                                      0x2746
305*53ee8cc1Swenshuai.xi #define IIS_COUNT2                                      0x2748
306*53ee8cc1Swenshuai.xi #define IQB_PHASE                                       0x2766
307*53ee8cc1Swenshuai.xi #define IQB_GAIN                                        0x2768
308*53ee8cc1Swenshuai.xi #define TR_INDICATOR_FF0                                0x2454
309*53ee8cc1Swenshuai.xi #define TR_INDICATOR_FF2                                0x2456
310*53ee8cc1Swenshuai.xi #define INNER_TR_LOPF_VALUE_DEBUG0                      0x2444
311*53ee8cc1Swenshuai.xi #define INNER_TR_LOPF_VALUE_DEBUG2                      0x2446
312*53ee8cc1Swenshuai.xi #define INNER_TR_LOPF_VALUE_DEBUG4                      0x2448
313*53ee8cc1Swenshuai.xi //------------------------------------------------------------
314*53ee8cc1Swenshuai.xi //Init Mailbox parameter.
315*53ee8cc1Swenshuai.xi #define     INTERN_DVBS_TS_SERIAL_INVERSION 0
316*53ee8cc1Swenshuai.xi //For Parameter Init Setting
317*53ee8cc1Swenshuai.xi #define     A_S2_ZIF_EN                     0x01                //[0]
318*53ee8cc1Swenshuai.xi #define     A_S2_RF_AGC_EN                  0x00                //[0]
319*53ee8cc1Swenshuai.xi #define     A_S2_DCR_EN                     0x00                //[0]       0=Auto :1=Force
320*53ee8cc1Swenshuai.xi #define     A_S2_IQB_EN                     0x01                //[2]
321*53ee8cc1Swenshuai.xi #define     A_S2_IIS_EN                     0x00                //[0]
322*53ee8cc1Swenshuai.xi #define     A_S2_CCI_EN                     0x00                //[0]       0:1=Enable
323*53ee8cc1Swenshuai.xi #define     A_S2_FORCE_ACI_SELECT           0xFF                //[3:0]     0xFF=OFF(internal default)
324*53ee8cc1Swenshuai.xi #define     A_S2_IQ_SWAP                    0x01                //[0]
325*53ee8cc1Swenshuai.xi #define     A_S2_AGC_REF_EXT_0              0x00                //[7:0]  //0x00 0x90
326*53ee8cc1Swenshuai.xi #define     A_S2_AGC_REF_EXT_1              0x02                //[11:8] //0x02 0x07
327*53ee8cc1Swenshuai.xi #define     A_S2_AGC_K                      0x07                //[15:12]
328*53ee8cc1Swenshuai.xi #define     A_S2_ADCI_GAIN                  0x0F                //[4:0]
329*53ee8cc1Swenshuai.xi #define     A_S2_ADCQ_GAIN                  0x0F                //[12:8]
330*53ee8cc1Swenshuai.xi #define     A_S2_SRD_SIG_SRCH_RNG           0x6A                //[7:0]
331*53ee8cc1Swenshuai.xi #define     A_S2_SRD_DC_EXC_RNG             0x16                //[7:0]
332*53ee8cc1Swenshuai.xi //FRONTENDEXT_SRD_FRC_CFO
333*53ee8cc1Swenshuai.xi #define     A_S2_FORCE_CFO_0                0x00                //[7:0]
334*53ee8cc1Swenshuai.xi #define     A_S2_FORCE_CFO_1                0x00                //[11:8]
335*53ee8cc1Swenshuai.xi #define     A_S2_DECIMATION_NUM             0x00                //[3:0]     00=(Internal Default)
336*53ee8cc1Swenshuai.xi #define     A_S2_PSD_SMTH_TAP               0x29                //[6:0]     Bit7 no define.
337*53ee8cc1Swenshuai.xi //CCI Parameter
338*53ee8cc1Swenshuai.xi //Set_Tuner_BW=(((U16)REG_BASE[DIG_SWUSE1FH]<<8)|REG_BASE[DIG_SWUSE1FL]);
339*53ee8cc1Swenshuai.xi #define     A_S2_CCI_FREQN_0_L              0x00                //[7:0]
340*53ee8cc1Swenshuai.xi #define     A_S2_CCI_FREQN_0_H              0x00                //[11:8]
341*53ee8cc1Swenshuai.xi #define     A_S2_CCI_FREQN_1_L              0x00                //[7:0]
342*53ee8cc1Swenshuai.xi #define     A_S2_CCI_FREQN_1_H              0x00                //[11:8]
343*53ee8cc1Swenshuai.xi #define     A_S2_CCI_FREQN_2_L              0x00                //[7:0]
344*53ee8cc1Swenshuai.xi #define     A_S2_CCI_FREQN_2_H              0x00                //[11:8]
345*53ee8cc1Swenshuai.xi //Inner TR Parameter
346*53ee8cc1Swenshuai.xi #define     A_S2_TR_LOPF_KP                 0x00                //[4:0]     00=(Internal Default)
347*53ee8cc1Swenshuai.xi #define     A_S2_TR_LOPF_KI                 0x00                //[4:0]     00=(Internal Default)
348*53ee8cc1Swenshuai.xi //Inner FineFE Parameter
349*53ee8cc1Swenshuai.xi #define     A_S2_FINEFE_KI_SWITCH_0         0x00                //[15:12]   00=(Internal Default)
350*53ee8cc1Swenshuai.xi #define     A_S2_FINEFE_KI_SWITCH_1         0x00                //[3:0]     00=(Internal Default)
351*53ee8cc1Swenshuai.xi #define     A_S2_FINEFE_KI_SWITCH_2         0x00                //[7:4]     00=(Internal Default)
352*53ee8cc1Swenshuai.xi #define     A_S2_FINEFE_KI_SWITCH_3         0x00                //[11:8]    00=(Internal Default)
353*53ee8cc1Swenshuai.xi #define     A_S2_FINEFE_KI_SWITCH_4         0x00                //[15:12]   00=(Internal Default)
354*53ee8cc1Swenshuai.xi //Inner PR KP Parameter
355*53ee8cc1Swenshuai.xi #define     A_S2_PR_KP_SWITCH_0             0x00                //[11:8]    00=(Internal Default)
356*53ee8cc1Swenshuai.xi #define     A_S2_PR_KP_SWITCH_1             0x00                //[15:12]   00=(Internal Default)
357*53ee8cc1Swenshuai.xi #define     A_S2_PR_KP_SWITCH_2             0x00                //[3:0]     00=(Internal Default)
358*53ee8cc1Swenshuai.xi #define     A_S2_PR_KP_SWITCH_3             0x00                //[7:4]     00=(Internal Default)
359*53ee8cc1Swenshuai.xi #define     A_S2_PR_KP_SWITCH_4             0x00                //[11:8]    00=(Internal Default)
360*53ee8cc1Swenshuai.xi //Inner FS Parameter
361*53ee8cc1Swenshuai.xi #define     A_S2_FS_GAMMA                   0x10                //[7:0]
362*53ee8cc1Swenshuai.xi #define     A_S2_FS_ALPHA0                  0x10                //[7:0]
363*53ee8cc1Swenshuai.xi #define     A_S2_FS_ALPHA1                  0x10                //[7:0]
364*53ee8cc1Swenshuai.xi #define     A_S2_FS_ALPHA2                  0x10                //[7:0]
365*53ee8cc1Swenshuai.xi #define     A_S2_FS_ALPHA3                  0x10                //[7:0]
366*53ee8cc1Swenshuai.xi 
367*53ee8cc1Swenshuai.xi #define     A_S2_FS_H_MODE_SEL              0x01                //[0]
368*53ee8cc1Swenshuai.xi #define     A_S2_FS_OBSWIN                  0x08                //[12:8]
369*53ee8cc1Swenshuai.xi #define     A_S2_FS_PEAK_DET_TH_L           0x00                //[7:0]
370*53ee8cc1Swenshuai.xi #define     A_S2_FS_PEAK_DET_TH_H           0x01                //[15:8]
371*53ee8cc1Swenshuai.xi #define     A_S2_FS_CONFIRM_NUM             0x01                //[3:0]
372*53ee8cc1Swenshuai.xi //Inner EQ Parameter
373*53ee8cc1Swenshuai.xi #define     A_S2_EQ_MU_FFE_DA               0x00                //[3:0]     00=(Internal Default)
374*53ee8cc1Swenshuai.xi #define     A_S2_EQ_MU_FFE_DD               0x00                //[7:4]     00=(Internal Default)
375*53ee8cc1Swenshuai.xi #define     A_S2_EQ_ALPHA_SNR_DA            0x00                //[7:4]     00=(Internal Default)
376*53ee8cc1Swenshuai.xi #define     A_S2_EQ_ALPHA_SNR_DD            0x00                //[11:8]    00=(Internal Default)
377*53ee8cc1Swenshuai.xi //Outer FEC Parameter
378*53ee8cc1Swenshuai.xi #define     A_S2_FEC_ALFA                   0x00                //[12:8]
379*53ee8cc1Swenshuai.xi #define     A_S2_FEC_BETA                   0x01                //[7:4]
380*53ee8cc1Swenshuai.xi #define     A_S2_FEC_SCALING_LLR            0x00                //[7:0]     00=(Internal Default)
381*53ee8cc1Swenshuai.xi //TS Parameter
382*53ee8cc1Swenshuai.xi #if INTERN_DVBS_TS_SERIAL_INVERSION
383*53ee8cc1Swenshuai.xi #define     A_S2_TS_SERIAL                  0x01                //[0]
384*53ee8cc1Swenshuai.xi #else
385*53ee8cc1Swenshuai.xi #define     A_S2_TS_SERIAL                  0x00                //[0]
386*53ee8cc1Swenshuai.xi #endif
387*53ee8cc1Swenshuai.xi #define     A_S2_TS_CLK_RATE                0x00
388*53ee8cc1Swenshuai.xi #define     A_S2_TS_OUT_INV                 0x00                //[5]
389*53ee8cc1Swenshuai.xi #define     A_S2_TS_DATA_SWAP               0x00                //[5]
390*53ee8cc1Swenshuai.xi //Rev Parameter
391*53ee8cc1Swenshuai.xi 
392*53ee8cc1Swenshuai.xi #define     A_S2_FW_VERSION_L               0x00                //From FW
393*53ee8cc1Swenshuai.xi #define     A_S2_FW_VERSION_H               0x00                //From FW
394*53ee8cc1Swenshuai.xi #define     A_S2_CHIP_VERSION               0x01
395*53ee8cc1Swenshuai.xi #define     A_S2_FS_L                       0x00
396*53ee8cc1Swenshuai.xi #define     A_S2_FS_H                       0x00
397*53ee8cc1Swenshuai.xi #define     A_S2_MANUAL_TUNE_SYMBOLRATE_L   0x20
398*53ee8cc1Swenshuai.xi #define     A_S2_MANUAL_TUNE_SYMBOLRATE_H   0x4E
399*53ee8cc1Swenshuai.xi 
400*53ee8cc1Swenshuai.xi MS_U8 INTERN_DVBS_DSPREG[] =
401*53ee8cc1Swenshuai.xi {
402*53ee8cc1Swenshuai.xi     A_S2_ZIF_EN,            A_S2_RF_AGC_EN,         A_S2_DCR_EN,             A_S2_IQB_EN,               A_S2_IIS_EN,              A_S2_CCI_EN,              A_S2_FORCE_ACI_SELECT,          A_S2_IQ_SWAP,                   // 00H ~ 07H
403*53ee8cc1Swenshuai.xi     A_S2_AGC_REF_EXT_0,     A_S2_AGC_REF_EXT_1,     A_S2_AGC_K,              A_S2_ADCI_GAIN,            A_S2_ADCQ_GAIN,           A_S2_SRD_SIG_SRCH_RNG,    A_S2_SRD_DC_EXC_RNG,            A_S2_FORCE_CFO_0,               // 08H ~ 0FH
404*53ee8cc1Swenshuai.xi     A_S2_FORCE_CFO_1,       A_S2_DECIMATION_NUM,    A_S2_PSD_SMTH_TAP,       A_S2_CCI_FREQN_0_L,        A_S2_CCI_FREQN_0_H,       A_S2_CCI_FREQN_1_L,       A_S2_CCI_FREQN_1_H,             A_S2_CCI_FREQN_2_L,             // 10H ~ 17H
405*53ee8cc1Swenshuai.xi     A_S2_CCI_FREQN_2_H,     A_S2_TR_LOPF_KP,        A_S2_TR_LOPF_KI,         A_S2_FINEFE_KI_SWITCH_0,   A_S2_FINEFE_KI_SWITCH_1,  A_S2_FINEFE_KI_SWITCH_2,  A_S2_FINEFE_KI_SWITCH_3,        A_S2_FINEFE_KI_SWITCH_4,        // 18H ~ 1FH
406*53ee8cc1Swenshuai.xi     A_S2_PR_KP_SWITCH_0,    A_S2_PR_KP_SWITCH_1,    A_S2_PR_KP_SWITCH_2,     A_S2_PR_KP_SWITCH_3,       A_S2_PR_KP_SWITCH_4,      A_S2_FS_GAMMA,            A_S2_FS_ALPHA0,                 A_S2_FS_ALPHA1,                 // 20H ~ 27H
407*53ee8cc1Swenshuai.xi     A_S2_FS_ALPHA2,         A_S2_FS_ALPHA3,         A_S2_FS_H_MODE_SEL,      A_S2_FS_OBSWIN,            A_S2_FS_PEAK_DET_TH_L,    A_S2_FS_PEAK_DET_TH_H,    A_S2_FS_CONFIRM_NUM,            A_S2_EQ_MU_FFE_DA,              // 28h ~ 2FH
408*53ee8cc1Swenshuai.xi     A_S2_EQ_MU_FFE_DD,      A_S2_EQ_ALPHA_SNR_DA,   A_S2_EQ_ALPHA_SNR_DD,    A_S2_FEC_ALFA,             A_S2_FEC_BETA,            A_S2_FEC_SCALING_LLR,     A_S2_TS_SERIAL,                 A_S2_TS_CLK_RATE,               // 30H ~ 37H
409*53ee8cc1Swenshuai.xi     A_S2_TS_OUT_INV,        A_S2_TS_DATA_SWAP,      A_S2_FW_VERSION_L,       A_S2_FW_VERSION_H,         A_S2_CHIP_VERSION,        A_S2_FS_L,                A_S2_FS_H,                      A_S2_MANUAL_TUNE_SYMBOLRATE_L,  // 38H ~ 3CH
410*53ee8cc1Swenshuai.xi     A_S2_MANUAL_TUNE_SYMBOLRATE_H,
411*53ee8cc1Swenshuai.xi };
412*53ee8cc1Swenshuai.xi 
413*53ee8cc1Swenshuai.xi /****************************************************************
414*53ee8cc1Swenshuai.xi *Local Variables                                                                                              *
415*53ee8cc1Swenshuai.xi ****************************************************************/
416*53ee8cc1Swenshuai.xi 
417*53ee8cc1Swenshuai.xi /*
418*53ee8cc1Swenshuai.xi static MS_U16             _u16SignalLevel[185][2]=
419*53ee8cc1Swenshuai.xi {//AV2028 SR=22M, 2/3 CN=5.9
420*53ee8cc1Swenshuai.xi     {32100,    920},{32200,    915},{32350,    910},{32390,    905},{32480,    900},{32550,    895},{32620,    890},{32680,    885},{32750,    880},{32830,    875},
421*53ee8cc1Swenshuai.xi     {32930,    870},{33010,    865},{33100,    860},{33200,    855},{33310,    850},{33410,    845},{33520,    840},{33640,    835},{33770,    830},{33900,    825},
422*53ee8cc1Swenshuai.xi     {34030,    820},{34150,    815},{34290,    810},{34390,    805},{34490,    800},{34580,    795},{34700,    790},{34800,    785},{34880,    780},{34940,    775},
423*53ee8cc1Swenshuai.xi     {35030,    770},{35130,    765},{35180,    760},{35260,    755},{35310,    750},{35340,    745},{35380,    740},{35400,    735},{35450,    730},{35550,    725},
424*53ee8cc1Swenshuai.xi     {35620,    720},{35700,    715},{35800,    710},{35890,    705},{36000,    700},{36120,    695},{36180,    690},{36280,    685},{36400,    680},{36570,    675},
425*53ee8cc1Swenshuai.xi     {36730,    670},{36910,    665},{37060,    660},{37100,    655},{37260,    650},{37340,    645},{37410,    640},{37580,    635},{37670,    630},{37700,    625},
426*53ee8cc1Swenshuai.xi     {37750,    620},{37800,    615},{37860,    610},{37980,    605},{38050,    600},{38170,    595},{38370,    590},{38540,    585},{38710,    580},{38870,    575},
427*53ee8cc1Swenshuai.xi     {39020,    570},{39070,    565},{39100,    560},{39180,    555},{39280,    550},{39460,    545},{39510,    540},{39600,    535},{39620,    530},{39680,    525},
428*53ee8cc1Swenshuai.xi     {39720,    520},{39830,    515},{39880,    510},{39930,    505},{39960,    500},{40000,    495},{40200,    490},{40360,    485},{40540,    480},{40730,    475},
429*53ee8cc1Swenshuai.xi     {40880,    470},{41020,    465},{41150,    460},{41280,    455},{41410,    450},{41520,    445},{41620,    440},{41730,    435},{41840,    430},{41930,    425},
430*53ee8cc1Swenshuai.xi     {42010,    420},{42100,    415},{42180,    410},{42260,    405},{42350,    400},{42440,    395},{42520,    390},{42580,    385},{42660,    380},{42730,    375},
431*53ee8cc1Swenshuai.xi     {42800,    370},{42870,    365},{42940,    360},{43000,    355},{43060,    350},{43130,    345},{43180,    340},{43250,    335},{43310,    330},{43370,    325},
432*53ee8cc1Swenshuai.xi     {43420,    320},{43460,    315},{43520,    310},{43570,    305},{43620,    300},{43660,    295},{43710,    290},{43750,    285},{43810,    280},{43860,    275},
433*53ee8cc1Swenshuai.xi     {43910,    270},{43940,    265},{43990,    260},{44020,    255},{44060,    250},{44110,    245},{44140,    240},{44190,    235},{44230,    230},{44270,    225},
434*53ee8cc1Swenshuai.xi     {44320,    220},{44370,    215},{44400,    210},{44450,    205},{44490,    200},{44530,    195},{44590,    190},{44630,    185},{44660,    180},{44720,    175},
435*53ee8cc1Swenshuai.xi     {44750,    170},{44790,    165},{44830,    160},{44880,    155},{44910,    150},{44960,    145},{45000,    140},{45030,    135},{45070,    130},{45100,    125},
436*53ee8cc1Swenshuai.xi     {45130,    120},{45160,    115},{45200,    110},{45240,    105},{45270,    100},{45300,     95},{45330,     90},{45360,     85},{45400,     80},{45430,     75},
437*53ee8cc1Swenshuai.xi     {45460,     70},{45490,     65},{45530,     60},{45560,     55},{45590,     50},{45630,     45},{45670,     40},{45690,     35},{45740,     30},{45760,     25},
438*53ee8cc1Swenshuai.xi     {45800,     20},{45830,     15},{45860,     10},{45880,      5},{45920,      0}
439*53ee8cc1Swenshuai.xi };
440*53ee8cc1Swenshuai.xi */
441*53ee8cc1Swenshuai.xi MS_U8 u8DemodLockFlag;
442*53ee8cc1Swenshuai.xi MS_U8       modulation_order;
443*53ee8cc1Swenshuai.xi MS_BOOL     _bDemodType = FALSE;//DVBS:FALSE   ;  S2:TRUE
444*53ee8cc1Swenshuai.xi //static MS_BOOL TPSLock = 0;
445*53ee8cc1Swenshuai.xi static MS_U32       u32ChkScanTimeStartDVBS = 0;
446*53ee8cc1Swenshuai.xi MS_U8        g_dvbs_lock = 0;
447*53ee8cc1Swenshuai.xi //static float intern_dvb_s_qam_ref[] = {3.0, 0.0, 0.0, 0.0, 0.0, 80.0}; //16q,32q,64q,128q,256q, and others
448*53ee8cc1Swenshuai.xi //static  MS_U8       _u8_DVBS2_CurrentCodeRate;
449*53ee8cc1Swenshuai.xi static  MS_U8       _u8ToneBurstFlag=0;
450*53ee8cc1Swenshuai.xi 
451*53ee8cc1Swenshuai.xi //static  float       _fPostBer=0;
452*53ee8cc1Swenshuai.xi //static  float       _f_DVBS_CurrentSNR=0;
453*53ee8cc1Swenshuai.xi static  MS_U16      _u16BlindScanStartFreq=0;
454*53ee8cc1Swenshuai.xi static  MS_U16      _u16BlindScanEndFreq=0;
455*53ee8cc1Swenshuai.xi static  MS_U16      _u16TunerCenterFreq=0;
456*53ee8cc1Swenshuai.xi MS_U16      _u16ChannelInfoIndex=0;
457*53ee8cc1Swenshuai.xi //Debug Only+
458*53ee8cc1Swenshuai.xi static  MS_U16      _u16NextCenterFreq=0;
459*53ee8cc1Swenshuai.xi MS_U16      _u16LockedSymbolRate=0;
460*53ee8cc1Swenshuai.xi MS_U16      _u16LockedCenterFreq=0;
461*53ee8cc1Swenshuai.xi static  MS_U16      _u16PreLockedHB=0;
462*53ee8cc1Swenshuai.xi static  MS_U16      _u16PreLockedLB=0;
463*53ee8cc1Swenshuai.xi static  MS_U16      _u16CurrentSymbolRate=0;
464*53ee8cc1Swenshuai.xi MS_S16      _s16CurrentCFO=0;
465*53ee8cc1Swenshuai.xi static  MS_U16      _u16CurrentStepSize=0;
466*53ee8cc1Swenshuai.xi //Debug Only-
467*53ee8cc1Swenshuai.xi MS_U16      _u16ChannelInfoArray[2][1000];
468*53ee8cc1Swenshuai.xi 
469*53ee8cc1Swenshuai.xi //static  MS_U32      _u32CurrentSR=0;
470*53ee8cc1Swenshuai.xi static  MS_BOOL        _bSerialTS=FALSE;
471*53ee8cc1Swenshuai.xi static  MS_BOOL        _bTSDataSwap=FALSE;
472*53ee8cc1Swenshuai.xi 
473*53ee8cc1Swenshuai.xi //Global Variables
474*53ee8cc1Swenshuai.xi S_CMDPKTREG gsCmdPacketDVBS;
475*53ee8cc1Swenshuai.xi //MS_U8 gCalIdacCh0, gCalIdacCh1;
476*53ee8cc1Swenshuai.xi static MS_BOOL bDMD_DVBS_NoChannelDetectedWithRFPower = FALSE;
477*53ee8cc1Swenshuai.xi static MS_U32 u32DMD_DVBS_NoChannelTimeAccWithRFPower = 0;
478*53ee8cc1Swenshuai.xi 
479*53ee8cc1Swenshuai.xi // For VCM
480*53ee8cc1Swenshuai.xi static MS_U32 u32DVBS2_DJB_START_ADDR = 0;
481*53ee8cc1Swenshuai.xi static DMD_DVBS_VCM_OPT u8VCM_Enabled_Opt = VCM_Disabled;
482*53ee8cc1Swenshuai.xi static MS_U8 u8Default_VCM_IS_ID = 0;
483*53ee8cc1Swenshuai.xi 
484*53ee8cc1Swenshuai.xi const MS_U8 modulation_order_array[12] = {2, 3, 4, 5, 3, 4, 5, 6, 6, 6, 7, 8};
485*53ee8cc1Swenshuai.xi 
486*53ee8cc1Swenshuai.xi #ifdef INTERN_DVBS_LOAD_FW_FROM_CODE_MEMORY
487*53ee8cc1Swenshuai.xi MS_U8 INTERN_DVBS_table[] =
488*53ee8cc1Swenshuai.xi {
489*53ee8cc1Swenshuai.xi #include "fwDMD_INTERN_DVBS.dat"
490*53ee8cc1Swenshuai.xi };
491*53ee8cc1Swenshuai.xi 
492*53ee8cc1Swenshuai.xi #endif
493*53ee8cc1Swenshuai.xi 
494*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Show_Demod_Version(void);
495*53ee8cc1Swenshuai.xi //MS_BOOL INTERN_DVBS_GetCurrentModulationType(DMD_DVBS_MODULATION_TYPE *pQAMMode);
496*53ee8cc1Swenshuai.xi //MS_BOOL INTERN_DVBS_GetCurrentDemodType(DMD_DVBS_DEMOD_TYPE *pDemodType);
497*53ee8cc1Swenshuai.xi //MS_BOOL INTERN_DVBS_GetCurrentDemodCodeRate(DMD_DVBS_CODE_RATE_TYPE *pCodeRate);
498*53ee8cc1Swenshuai.xi //MS_BOOL INTERN_DVBS_GetCurrentSymbolRate(MS_U32 *u32SymbolRate);
499*53ee8cc1Swenshuai.xi //MS_BOOL INTERN_DVBS_GetCurrentSymbolRateOffset(MS_U16 *pData);
500*53ee8cc1Swenshuai.xi 
501*53ee8cc1Swenshuai.xi #if (INTERN_DVBS_INTERNAL_DEBUG)
502*53ee8cc1Swenshuai.xi void INTERN_DVBS_info(void);
503*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Show_AGC_Info(void);
504*53ee8cc1Swenshuai.xi #endif
505*53ee8cc1Swenshuai.xi 
506*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
507*53ee8cc1Swenshuai.xi //  System Info Function
508*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
509*53ee8cc1Swenshuai.xi //=====================================================================================
INTERN_DVBS_DSPReg_Init(const MS_U8 * u8DVBS_DSPReg,MS_U8 u8Size)510*53ee8cc1Swenshuai.xi MS_U16 INTERN_DVBS_DSPReg_Init(const MS_U8 *u8DVBS_DSPReg,  MS_U8 u8Size)
511*53ee8cc1Swenshuai.xi {
512*53ee8cc1Swenshuai.xi #if 0
513*53ee8cc1Swenshuai.xi     MS_U8   idx = 0, u8RegRead = 0, u8RegWrite = 0, u8Mask = 0;
514*53ee8cc1Swenshuai.xi #endif
515*53ee8cc1Swenshuai.xi     MS_U8   status = true;
516*53ee8cc1Swenshuai.xi #if 0
517*53ee8cc1Swenshuai.xi     MS_U16  u16DspAddr = 0;
518*53ee8cc1Swenshuai.xi #endif
519*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf("INTERN_DVBS_DSPReg_Init\n"));
520*53ee8cc1Swenshuai.xi 
521*53ee8cc1Swenshuai.xi #if 0//def MS_DEBUG
522*53ee8cc1Swenshuai.xi     {
523*53ee8cc1Swenshuai.xi         MS_U8 u8buffer[256];
524*53ee8cc1Swenshuai.xi         printf("INTERN_DVBS_DSPReg_Init Reset\n");
525*53ee8cc1Swenshuai.xi         for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
526*53ee8cc1Swenshuai.xi             MDrv_SYS_DMD_VD_MBX_WriteDSPReg(idx, 0);
527*53ee8cc1Swenshuai.xi 
528*53ee8cc1Swenshuai.xi         for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
529*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(idx, &(u8buffer[idx]));
530*53ee8cc1Swenshuai.xi         printf("INTERN_DVBS_DSPReg_Init ReadBack, should be all 0\n");
531*53ee8cc1Swenshuai.xi         for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
532*53ee8cc1Swenshuai.xi             printf("%x ", u8buffer[idx]);
533*53ee8cc1Swenshuai.xi         printf("\n");
534*53ee8cc1Swenshuai.xi 
535*53ee8cc1Swenshuai.xi         printf("INTERN_DVBS_DSPReg_Init Value\n");
536*53ee8cc1Swenshuai.xi         for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
537*53ee8cc1Swenshuai.xi             printf("%x ", INTERN_DVBS_DSPREG[idx]);
538*53ee8cc1Swenshuai.xi         printf("\n");
539*53ee8cc1Swenshuai.xi     }
540*53ee8cc1Swenshuai.xi #endif
541*53ee8cc1Swenshuai.xi 
542*53ee8cc1Swenshuai.xi     //for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
543*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(idx, INTERN_DVBS_DSPREG[idx]);
544*53ee8cc1Swenshuai.xi 
545*53ee8cc1Swenshuai.xi     // readback to confirm.
546*53ee8cc1Swenshuai.xi     // ~read this to check mailbox initial values
547*53ee8cc1Swenshuai.xi #if 0
548*53ee8cc1Swenshuai.xi     for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
549*53ee8cc1Swenshuai.xi     {
550*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(idx, &u8RegRead);
551*53ee8cc1Swenshuai.xi         if (u8RegRead != INTERN_DVBS_DSPREG[idx])
552*53ee8cc1Swenshuai.xi         {
553*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(printf("[Error]INTERN_DVBS_DSPReg_Init, idx=%d, drv_val=0x%x, firmware_val=0x%x\n",idx,INTERN_DVBS_DSPREG[idx],u8RegRead));
554*53ee8cc1Swenshuai.xi         }
555*53ee8cc1Swenshuai.xi     }
556*53ee8cc1Swenshuai.xi #endif
557*53ee8cc1Swenshuai.xi #if 0
558*53ee8cc1Swenshuai.xi     if (u8DVBS_DSPReg != NULL)
559*53ee8cc1Swenshuai.xi     {
560*53ee8cc1Swenshuai.xi         if (1 == u8DVBS_DSPReg[0])
561*53ee8cc1Swenshuai.xi         {
562*53ee8cc1Swenshuai.xi             u8DVBS_DSPReg+=2;
563*53ee8cc1Swenshuai.xi             for (idx = 0; idx<u8Size; idx++)
564*53ee8cc1Swenshuai.xi             {
565*53ee8cc1Swenshuai.xi                 u16DspAddr = *u8DVBS_DSPReg;
566*53ee8cc1Swenshuai.xi                 u8DVBS_DSPReg++;
567*53ee8cc1Swenshuai.xi                 u16DspAddr = (u16DspAddr) + ((*u8DVBS_DSPReg)<<8);
568*53ee8cc1Swenshuai.xi                 u8DVBS_DSPReg++;
569*53ee8cc1Swenshuai.xi                 u8Mask = *u8DVBS_DSPReg;
570*53ee8cc1Swenshuai.xi                 u8DVBS_DSPReg++;
571*53ee8cc1Swenshuai.xi                 status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(u16DspAddr, &u8RegRead);
572*53ee8cc1Swenshuai.xi                 u8RegWrite = (u8RegRead & (~u8Mask)) | ((*u8DVBS_DSPReg) & (u8Mask));
573*53ee8cc1Swenshuai.xi                 u8DVBS_DSPReg++;
574*53ee8cc1Swenshuai.xi                 DBG_INTERN_DVBS(printf("DSP addr:%x mask:%x read:%x write:%x\n", u16DspAddr, u8Mask, u8RegRead, u8RegWrite));
575*53ee8cc1Swenshuai.xi                 status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(u16DspAddr, u8RegWrite);
576*53ee8cc1Swenshuai.xi             }
577*53ee8cc1Swenshuai.xi         }
578*53ee8cc1Swenshuai.xi         else
579*53ee8cc1Swenshuai.xi         {
580*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(printf("FATAL: parameter version incorrect\n"));
581*53ee8cc1Swenshuai.xi         }
582*53ee8cc1Swenshuai.xi     }
583*53ee8cc1Swenshuai.xi #endif
584*53ee8cc1Swenshuai.xi #if 0//def MS_DEBUG
585*53ee8cc1Swenshuai.xi     {
586*53ee8cc1Swenshuai.xi         MS_U8 u8buffer[256];
587*53ee8cc1Swenshuai.xi         for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
588*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(idx, &(u8buffer[idx]));
589*53ee8cc1Swenshuai.xi         printf("INTERN_DVBC_DSPReg_Init ReadBack\n");
590*53ee8cc1Swenshuai.xi         for (idx = 0; idx<sizeof(INTERN_DVBS_DSPREG); idx++)
591*53ee8cc1Swenshuai.xi             printf("%x ", u8buffer[idx]);
592*53ee8cc1Swenshuai.xi         printf("\n");
593*53ee8cc1Swenshuai.xi     }
594*53ee8cc1Swenshuai.xi #endif
595*53ee8cc1Swenshuai.xi 
596*53ee8cc1Swenshuai.xi #if 0//def MS_DEBUG
597*53ee8cc1Swenshuai.xi     {
598*53ee8cc1Swenshuai.xi         MS_U8 u8buffer[256];
599*53ee8cc1Swenshuai.xi         for (idx = 0; idx<128; idx++)
600*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadReg(0x2380+idx, &(u8buffer[idx]));
601*53ee8cc1Swenshuai.xi         printf("INTERN_DVBS_DSPReg_Init ReadReg 0x2000~0x207F\n");
602*53ee8cc1Swenshuai.xi         for (idx = 0; idx<128; idx++)
603*53ee8cc1Swenshuai.xi         {
604*53ee8cc1Swenshuai.xi             printf("%x ", u8buffer[idx]);
605*53ee8cc1Swenshuai.xi             if ((idx & 0xF) == 0xF) printf("\n");
606*53ee8cc1Swenshuai.xi         }
607*53ee8cc1Swenshuai.xi         printf("\n");
608*53ee8cc1Swenshuai.xi     }
609*53ee8cc1Swenshuai.xi #endif
610*53ee8cc1Swenshuai.xi     return status;
611*53ee8cc1Swenshuai.xi }
612*53ee8cc1Swenshuai.xi 
613*53ee8cc1Swenshuai.xi /***********************************************************************************
614*53ee8cc1Swenshuai.xi   Subject:    Command Packet Interface
615*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_Cmd_Packet_Send
616*53ee8cc1Swenshuai.xi   Parmeter:
617*53ee8cc1Swenshuai.xi   Return:     MS_BOOL
618*53ee8cc1Swenshuai.xi   Remark:
619*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_Cmd_Packet_Send(S_CMDPKTREG * pCmdPacket,MS_U8 param_cnt)620*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Cmd_Packet_Send(S_CMDPKTREG* pCmdPacket, MS_U8 param_cnt)
621*53ee8cc1Swenshuai.xi {
622*53ee8cc1Swenshuai.xi     MS_U8   status = true, indx;
623*53ee8cc1Swenshuai.xi     MS_U8   reg_val, timeout = 0;
624*53ee8cc1Swenshuai.xi     return true;
625*53ee8cc1Swenshuai.xi 
626*53ee8cc1Swenshuai.xi     // ==== Command Phase ===================
627*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","--->INTERN_DVBS (cmd=0x%x)(0x%x,0x%x,0x%x,0x%x,0x%x,0x%x,) \n",pCmdPacket->cmd_code,
628*53ee8cc1Swenshuai.xi                            pCmdPacket->param[0],pCmdPacket->param[1],
629*53ee8cc1Swenshuai.xi                            pCmdPacket->param[2],pCmdPacket->param[3],
630*53ee8cc1Swenshuai.xi                            pCmdPacket->param[4],pCmdPacket->param[5] ));
631*53ee8cc1Swenshuai.xi 
632*53ee8cc1Swenshuai.xi     // wait _BIT_END clear
633*53ee8cc1Swenshuai.xi     do
634*53ee8cc1Swenshuai.xi     {
635*53ee8cc1Swenshuai.xi         reg_val = HAL_DMD_RIU_ReadByte(REG_CMD_CTRL);
636*53ee8cc1Swenshuai.xi         if((reg_val & _BIT_END) != _BIT_END)
637*53ee8cc1Swenshuai.xi         {
638*53ee8cc1Swenshuai.xi             break;
639*53ee8cc1Swenshuai.xi         }
640*53ee8cc1Swenshuai.xi         MsOS_DelayTask(5);
641*53ee8cc1Swenshuai.xi         if (timeout > 200)
642*53ee8cc1Swenshuai.xi         {
643*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","---> INTERN_DVBS_Cmd_Packet_Send fail on 'wait _BIT_END clear' \n"));
644*53ee8cc1Swenshuai.xi             return false;
645*53ee8cc1Swenshuai.xi         }
646*53ee8cc1Swenshuai.xi         timeout++;
647*53ee8cc1Swenshuai.xi     } while (1);
648*53ee8cc1Swenshuai.xi 
649*53ee8cc1Swenshuai.xi     // set cmd_3:0 and _BIT_START
650*53ee8cc1Swenshuai.xi     reg_val = HAL_DMD_RIU_ReadByte(REG_CMD_CTRL);
651*53ee8cc1Swenshuai.xi     reg_val = (reg_val & 0x0f)|(pCmdPacket->cmd_code << 4)|_BIT_START;
652*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(REG_CMD_CTRL, reg_val);
653*53ee8cc1Swenshuai.xi 
654*53ee8cc1Swenshuai.xi 
655*53ee8cc1Swenshuai.xi     //DBG_INTERN_DVBS(printf("demod_config: cmd_code = %bx\n", pCmdPacket->cmd_code));
656*53ee8cc1Swenshuai.xi     // wait _BIT_START clear
657*53ee8cc1Swenshuai.xi     do
658*53ee8cc1Swenshuai.xi     {
659*53ee8cc1Swenshuai.xi         reg_val = HAL_DMD_RIU_ReadByte(REG_CMD_CTRL);
660*53ee8cc1Swenshuai.xi         if((reg_val & _BIT_START) != _BIT_START)
661*53ee8cc1Swenshuai.xi         {
662*53ee8cc1Swenshuai.xi             break;
663*53ee8cc1Swenshuai.xi         }
664*53ee8cc1Swenshuai.xi         MsOS_DelayTask(10);
665*53ee8cc1Swenshuai.xi         if (timeout > 200)
666*53ee8cc1Swenshuai.xi         {
667*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","---> INTERN_DVBS_Cmd_Packet_Send fail on 'wait _BIT_START clear' \n"));
668*53ee8cc1Swenshuai.xi             return false;
669*53ee8cc1Swenshuai.xi         }
670*53ee8cc1Swenshuai.xi         timeout++;
671*53ee8cc1Swenshuai.xi     } while (1);
672*53ee8cc1Swenshuai.xi 
673*53ee8cc1Swenshuai.xi     // ==== Data Phase ======================
674*53ee8cc1Swenshuai.xi 
675*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(REG_CMD_ADDR, 0x00);
676*53ee8cc1Swenshuai.xi 
677*53ee8cc1Swenshuai.xi     for (indx = 0; indx < param_cnt; indx++)
678*53ee8cc1Swenshuai.xi     {
679*53ee8cc1Swenshuai.xi         reg_val = HAL_DMD_RIU_ReadByte(REG_CMD_ADDR);
680*53ee8cc1Swenshuai.xi         //DBG_INTERN_DVBS(printf("demod_config: param[%bd] = %bx\n", reg_val, pCmdPacket->param[indx]));
681*53ee8cc1Swenshuai.xi 
682*53ee8cc1Swenshuai.xi         // set param[indx] and _BIT_DRQ
683*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(REG_CMD_DATA, pCmdPacket->param[indx]);
684*53ee8cc1Swenshuai.xi         reg_val = HAL_DMD_RIU_ReadByte(REG_DTA_CTRL);
685*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(REG_DTA_CTRL, reg_val|_BIT_DRQ);
686*53ee8cc1Swenshuai.xi 
687*53ee8cc1Swenshuai.xi         // wait _BIT_DRQ clear
688*53ee8cc1Swenshuai.xi         do
689*53ee8cc1Swenshuai.xi         {
690*53ee8cc1Swenshuai.xi             reg_val = HAL_DMD_RIU_ReadByte(REG_DTA_CTRL);
691*53ee8cc1Swenshuai.xi             if ((reg_val & _BIT_DRQ) != _BIT_DRQ)
692*53ee8cc1Swenshuai.xi             {
693*53ee8cc1Swenshuai.xi                 break;
694*53ee8cc1Swenshuai.xi             }
695*53ee8cc1Swenshuai.xi             MsOS_DelayTask(5);
696*53ee8cc1Swenshuai.xi             if (timeout > 200)
697*53ee8cc1Swenshuai.xi             {
698*53ee8cc1Swenshuai.xi                 DBG_INTERN_DVBS(ULOGD("DEMOD","---> INTERN_DVBS_Cmd_Packet_Send fail on 'wait _BIT_DRQ clear' \n"));
699*53ee8cc1Swenshuai.xi                 return false;
700*53ee8cc1Swenshuai.xi             }
701*53ee8cc1Swenshuai.xi             timeout++;
702*53ee8cc1Swenshuai.xi         } while (1);
703*53ee8cc1Swenshuai.xi     }
704*53ee8cc1Swenshuai.xi 
705*53ee8cc1Swenshuai.xi     // ==== End Phase =======================
706*53ee8cc1Swenshuai.xi 
707*53ee8cc1Swenshuai.xi     // set _BIT_END to finish command
708*53ee8cc1Swenshuai.xi     reg_val = HAL_DMD_RIU_ReadByte(REG_CMD_CTRL);
709*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(REG_CMD_CTRL, reg_val|_BIT_END);
710*53ee8cc1Swenshuai.xi 
711*53ee8cc1Swenshuai.xi     return status;
712*53ee8cc1Swenshuai.xi }
713*53ee8cc1Swenshuai.xi 
714*53ee8cc1Swenshuai.xi /***********************************************************************************
715*53ee8cc1Swenshuai.xi   Subject:    Command Packet Interface
716*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_Cmd_Packet_Exe_Check
717*53ee8cc1Swenshuai.xi   Parmeter:
718*53ee8cc1Swenshuai.xi   Return:     MS_BOOL
719*53ee8cc1Swenshuai.xi   Remark:
720*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_Cmd_Packet_Exe_Check(MS_BOOL * cmd_done)721*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Cmd_Packet_Exe_Check(MS_BOOL* cmd_done)
722*53ee8cc1Swenshuai.xi {
723*53ee8cc1Swenshuai.xi     return TRUE;
724*53ee8cc1Swenshuai.xi }
725*53ee8cc1Swenshuai.xi 
726*53ee8cc1Swenshuai.xi /***********************************************************************************
727*53ee8cc1Swenshuai.xi   Subject:    SoftStop
728*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_SoftStop
729*53ee8cc1Swenshuai.xi   Parmeter:
730*53ee8cc1Swenshuai.xi   Return:     MS_BOOL
731*53ee8cc1Swenshuai.xi   Remark:
732*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_SoftStop(void)733*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_SoftStop ( void )
734*53ee8cc1Swenshuai.xi {
735*53ee8cc1Swenshuai.xi #if 1
736*53ee8cc1Swenshuai.xi     MS_U16     u16WaitCnt=0;
737*53ee8cc1Swenshuai.xi 
738*53ee8cc1Swenshuai.xi     if (HAL_DMD_RIU_ReadByte(MBRegBase + 0x00))
739*53ee8cc1Swenshuai.xi     {
740*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD",">> MB Busy!\n"));
741*53ee8cc1Swenshuai.xi         return FALSE;
742*53ee8cc1Swenshuai.xi     }
743*53ee8cc1Swenshuai.xi 
744*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x00, 0xA5);                 // MB_CNTL set read mode
745*53ee8cc1Swenshuai.xi 
746*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103483, 0x02);                         // assert interrupt to VD MCU51
747*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103483, 0x00);                         // de-assert interrupt to VD MCU51
748*53ee8cc1Swenshuai.xi 
749*53ee8cc1Swenshuai.xi     while(HAL_DMD_RIU_ReadByte(MBRegBase + 0x00)!= 0x5A)           // wait MB_CNTL set done
750*53ee8cc1Swenshuai.xi     {
751*53ee8cc1Swenshuai.xi         if (u16WaitCnt++ >= 0xFFF)// 0xFF)
752*53ee8cc1Swenshuai.xi         {
753*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD",">> DVBT SoftStop Fail!\n"));
754*53ee8cc1Swenshuai.xi             return FALSE;
755*53ee8cc1Swenshuai.xi         }
756*53ee8cc1Swenshuai.xi     }
757*53ee8cc1Swenshuai.xi 
758*53ee8cc1Swenshuai.xi     //HAL_DMD_RIU_WriteByte(0x103460, 0x01);                       // reset VD_MCU
759*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x00, 0x00);                 // MB_CNTL clear
760*53ee8cc1Swenshuai.xi #endif
761*53ee8cc1Swenshuai.xi     return TRUE;
762*53ee8cc1Swenshuai.xi }
763*53ee8cc1Swenshuai.xi 
764*53ee8cc1Swenshuai.xi /***********************************************************************************
765*53ee8cc1Swenshuai.xi   Subject:    Reset
766*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBC_Reset
767*53ee8cc1Swenshuai.xi   Parmeter:
768*53ee8cc1Swenshuai.xi   Return:     MS_BOOL
769*53ee8cc1Swenshuai.xi   Remark:
770*53ee8cc1Swenshuai.xi ************************************************************************************/
771*53ee8cc1Swenshuai.xi extern void HAL_SYS_DMD_VD_MBX_DVB_WaitHandShake(void);
772*53ee8cc1Swenshuai.xi 
INTERN_DVBS_Reset(void)773*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Reset ( void )// no midify
774*53ee8cc1Swenshuai.xi {
775*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD"," @INTERN_DVBS_reset\n"));
776*53ee8cc1Swenshuai.xi 
777*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS_TIME(ULOGD("DEMOD","INTERN_DVBS_Reset, t = %d\n",MsOS_GetSystemTime()));
778*53ee8cc1Swenshuai.xi 
779*53ee8cc1Swenshuai.xi    //INTERN_DVBS_SoftStop();
780*53ee8cc1Swenshuai.xi 
781*53ee8cc1Swenshuai.xi 
782*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x00, 0x01);     // reset DMD_MCU
783*53ee8cc1Swenshuai.xi 
784*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
785*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x00 , 0x00);     // clear MB_CNTL
786*53ee8cc1Swenshuai.xi 
787*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x00, 0x00);
788*53ee8cc1Swenshuai.xi     MsOS_DelayTask(5);
789*53ee8cc1Swenshuai.xi 
790*53ee8cc1Swenshuai.xi     HAL_SYS_DMD_VD_MBX_DVB_WaitHandShake();
791*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + 0x00 , 0x00);
792*53ee8cc1Swenshuai.xi 
793*53ee8cc1Swenshuai.xi     u32ChkScanTimeStartDVBS = MsOS_GetSystemTime();
794*53ee8cc1Swenshuai.xi     g_dvbs_lock = 0;
795*53ee8cc1Swenshuai.xi 
796*53ee8cc1Swenshuai.xi     return TRUE;
797*53ee8cc1Swenshuai.xi }
798*53ee8cc1Swenshuai.xi 
799*53ee8cc1Swenshuai.xi /***********************************************************************************
800*53ee8cc1Swenshuai.xi   Subject:    Exit
801*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBC_Exit
802*53ee8cc1Swenshuai.xi   Parmeter:
803*53ee8cc1Swenshuai.xi   Return:     MS_BOOL
804*53ee8cc1Swenshuai.xi   Remark:
805*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_Exit(void)806*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Exit ( void )
807*53ee8cc1Swenshuai.xi {
808*53ee8cc1Swenshuai.xi 
809*53ee8cc1Swenshuai.xi     MS_BOOL status = TRUE;
810*53ee8cc1Swenshuai.xi #if 0
811*53ee8cc1Swenshuai.xi     MS_U8 u8Data=0;
812*53ee8cc1Swenshuai.xi     MS_U8 u8Data_temp=0;
813*53ee8cc1Swenshuai.xi 
814*53ee8cc1Swenshuai.xi     u8Data_temp=HAL_DMD_RIU_ReadByte(0x101E39);
815*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101E39, 0);
816*53ee8cc1Swenshuai.xi 
817*53ee8cc1Swenshuai.xi     u8Data=HAL_DMD_RIU_ReadByte(0x1128C0);
818*53ee8cc1Swenshuai.xi     u8Data&=~(0x02);
819*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x1128C0, u8Data);//revert IQ Swap status
820*53ee8cc1Swenshuai.xi 
821*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101E39, u8Data_temp);
822*53ee8cc1Swenshuai.xi #endif
823*53ee8cc1Swenshuai.xi 
824*53ee8cc1Swenshuai.xi // This file is translated by Steven Hung's riu2script.pl
825*53ee8cc1Swenshuai.xi 
826*53ee8cc1Swenshuai.xi // ("==============================================================");
827*53ee8cc1Swenshuai.xi // ("Start demod top initial setting by HK MCU ......");
828*53ee8cc1Swenshuai.xi // ("==============================================================");
829*53ee8cc1Swenshuai.xi // [8] : reg_chiptop_dummy_0 (reg_dmdtop_dmd_sel)
830*53ee8cc1Swenshuai.xi //       1'b0->reg_DMDTOP control by HK_MCU.
831*53ee8cc1Swenshuai.xi //       1'b1->reg_DMDTOP control by DMD_MCU.
832*53ee8cc1Swenshuai.xi // [9] : reg_chiptop_dummy_0 (reg_dmd_ana_regsel)
833*53ee8cc1Swenshuai.xi //       1'b0->reg_DMDANA control by HK_MCU.
834*53ee8cc1Swenshuai.xi //       1'b1->reg_DMDANA control by DMD_MCU.
835*53ee8cc1Swenshuai.xi // ("select HK MCU ......");
836*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CHIP>>1)+7'h1c, 2'b10, 16'h0000);
837*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x101e39, 0x00);
838*53ee8cc1Swenshuai.xi 
839*53ee8cc1Swenshuai.xi // enable DISEQC PAD
840*53ee8cc1Swenshuai.xi // [15] reg_allpad_in
841*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CHIP>>1)+7'h50, 2'b10, 16'h0000);
842*53ee8cc1Swenshuai.xi // [0] reg_if_agc_en
843*53ee8cc1Swenshuai.xi // [1] reg_rf_agc_en
844*53ee8cc1Swenshuai.xi // [2] reg_diseq_in_en = 1'b1
845*53ee8cc1Swenshuai.xi // [3] reg_diseq_out_en = 1'b1
846*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CHIP>>1)+7'h1d, 2'b01, 16'h000c);
847*53ee8cc1Swenshuai.xi 
848*53ee8cc1Swenshuai.xi 
849*53ee8cc1Swenshuai.xi // ("==============================================================");
850*53ee8cc1Swenshuai.xi // ("Start TOP CLKGEN initial setting ......");
851*53ee8cc1Swenshuai.xi // ("==============================================================");
852*53ee8cc1Swenshuai.xi // CLK_DMDMCU clock setting
853*53ee8cc1Swenshuai.xi // reg_ckg_dmdmcu@0x0f[4:0]
854*53ee8cc1Swenshuai.xi // [0]  : disable clock
855*53ee8cc1Swenshuai.xi // [1]  : invert clock
856*53ee8cc1Swenshuai.xi // [4:2]:
857*53ee8cc1Swenshuai.xi //        000:170 MHz(MPLL_DIV_BUF)
858*53ee8cc1Swenshuai.xi //        001:160MHz
859*53ee8cc1Swenshuai.xi //        010:144MHz
860*53ee8cc1Swenshuai.xi //        011:123MHz
861*53ee8cc1Swenshuai.xi //        100:108MHz (Kriti:DVBT2)
862*53ee8cc1Swenshuai.xi //        101:mem_clcok
863*53ee8cc1Swenshuai.xi //        110:mem_clock div 2
864*53ee8cc1Swenshuai.xi //        111:select XTAL
865*53ee8cc1Swenshuai.xi  // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h0f, 2'b11, 16'h0010);
866*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x10331e, 0x11);
867*53ee8cc1Swenshuai.xi 
868*53ee8cc1Swenshuai.xi 
869*53ee8cc1Swenshuai.xi // set parallel ts clock
870*53ee8cc1Swenshuai.xi // [11] : reg_ckg_demod_test_in_en = 0
871*53ee8cc1Swenshuai.xi //        0: select internal ADC CLK
872*53ee8cc1Swenshuai.xi //        1: select external test-in clock
873*53ee8cc1Swenshuai.xi // [10] : reg_ckg_dvbtm_ts_out_mode = 1
874*53ee8cc1Swenshuai.xi //        0: select gated clock
875*53ee8cc1Swenshuai.xi //        1: select free-run clock
876*53ee8cc1Swenshuai.xi // [9]  : reg_ckg_atsc_dvbtc_ts_inv = 0
877*53ee8cc1Swenshuai.xi //        0: normal phase to pad
878*53ee8cc1Swenshuai.xi //        1: invert phase to pad
879*53ee8cc1Swenshuai.xi // [8]  : reg_ckg_atsc_dvb_div_sel  = 1
880*53ee8cc1Swenshuai.xi //        0: select clk_dmplldiv5
881*53ee8cc1Swenshuai.xi //        1: select clk_dmplldiv3
882*53ee8cc1Swenshuai.xi // [4:0]: reg_ckg_dvbtm_ts_divnum   = 5
883*53ee8cc1Swenshuai.xi //        Demod TS output clock phase tuning number
884*53ee8cc1Swenshuai.xi //        If (reg_ckg_tsout_ph_tun_num == reg_ckg_dvbtm_ts_divnum),
885*53ee8cc1Swenshuai.xi //        Demod TS output clock is equal Demod TS internal working clock.
886*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h00, 2'b11, 16'h0511);
887*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h00, 2'b11, 16'h0505);
888*53ee8cc1Swenshuai.xi // wriu 0x103301 0x05
889*53ee8cc1Swenshuai.xi // wriu 0x103300 0x05
890*53ee8cc1Swenshuai.xi 
891*53ee8cc1Swenshuai.xi 
892*53ee8cc1Swenshuai.xi // enable DVBTC ts clock
893*53ee8cc1Swenshuai.xi // [11:8]: reg_ckg_dvbtc_ts0
894*53ee8cc1Swenshuai.xi //      [8]  : disable clock
895*53ee8cc1Swenshuai.xi //      [9]  : invert clock
896*53ee8cc1Swenshuai.xi //      [11:10]: Select clock source
897*53ee8cc1Swenshuai.xi //             00:clk_atsc_dvb_div
898*53ee8cc1Swenshuai.xi //             01:62 MHz
899*53ee8cc1Swenshuai.xi //             10:54 MHz
900*53ee8cc1Swenshuai.xi //             11:reserved
901*53ee8cc1Swenshuai.xi // [15:12]: reg_ckg_dvbtc_ts1
902*53ee8cc1Swenshuai.xi //      [12]  : disable clock
903*53ee8cc1Swenshuai.xi //      [13]  : invert clock
904*53ee8cc1Swenshuai.xi //      [15:14]: Select clock source
905*53ee8cc1Swenshuai.xi //             00:clk_atsc_dvb_div
906*53ee8cc1Swenshuai.xi //             01:62 MHz
907*53ee8cc1Swenshuai.xi //             10:54 MHz
908*53ee8cc1Swenshuai.xi //             11:reserved
909*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h04, 2'b11, 16'h0000);
910*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103309, 0x11);
911*53ee8cc1Swenshuai.xi 
912*53ee8cc1Swenshuai.xi 
913*53ee8cc1Swenshuai.xi // enable dvbc adc clock
914*53ee8cc1Swenshuai.xi // [3:0]: reg_ckg_dvbtc_adc
915*53ee8cc1Swenshuai.xi //       [0]  : disable clock
916*53ee8cc1Swenshuai.xi //       [1]  : invert clock
917*53ee8cc1Swenshuai.xi //       [3:2]: Select clock source => for demod clkgen clk_dvbtc_adc
918*53ee8cc1Swenshuai.xi //      	00:  clk_dmdadc
919*53ee8cc1Swenshuai.xi //      	01:  clk_dmdadc_div2
920*53ee8cc1Swenshuai.xi //      	10:  clk_dmdadc_div4
921*53ee8cc1Swenshuai.xi //      	11:  DFT_CLK
922*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h0a, 2'b11, 16'h0000);
923*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103314, 0x11);
924*53ee8cc1Swenshuai.xi 
925*53ee8cc1Swenshuai.xi // Reset TS divider
926*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h01, 2'b01, 16'h0001);
927*53ee8cc1Swenshuai.xi // wriu 0x103302 0x01
928*53ee8cc1Swenshuai.xi 
929*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h01, 2'b01, 16'h0000);
930*53ee8cc1Swenshuai.xi // wriu 0x103302 0x00
931*53ee8cc1Swenshuai.xi 
932*53ee8cc1Swenshuai.xi // ("==============================================================");
933*53ee8cc1Swenshuai.xi // ("Start demod CLKGEN setting ......");
934*53ee8cc1Swenshuai.xi // ("==============================================================");
935*53ee8cc1Swenshuai.xi // enable atsc_adcd_sync clock
936*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_atsc_adcd_sync
937*53ee8cc1Swenshuai.xi //         [0]  : disable clock
938*53ee8cc1Swenshuai.xi //         [1]  : invert clock
939*53ee8cc1Swenshuai.xi //         [3:2]: Select clock source
940*53ee8cc1Swenshuai.xi //                00:  clk_dmdadc_sync
941*53ee8cc1Swenshuai.xi //                01:  1'b0
942*53ee8cc1Swenshuai.xi //                10:  1'b0
943*53ee8cc1Swenshuai.xi //                11:  DFT_CLK
944*53ee8cc1Swenshuai.xi // [11:8] : reg_ckg_dmd_dma
945*53ee8cc1Swenshuai.xi //         [8]  : disable clock
946*53ee8cc1Swenshuai.xi //         [9]  : invert clock
947*53ee8cc1Swenshuai.xi //         [11:10]: Select clock source
948*53ee8cc1Swenshuai.xi //                00:  clk_dmdadc
949*53ee8cc1Swenshuai.xi //                01:  clk_dmdadc_div2_buf
950*53ee8cc1Swenshuai.xi //                10:  1'b0
951*53ee8cc1Swenshuai.xi //                11:  DFT_CLK
952*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h05, 2'b11, 16'h0000);
953*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x10200b, 0x11);
954*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x10200a, 0x11);
955*53ee8cc1Swenshuai.xi 
956*53ee8cc1Swenshuai.xi 
957*53ee8cc1Swenshuai.xi // [7:4] : reg_ckg_dvbtm_adc0p5x
958*53ee8cc1Swenshuai.xi //         [4]  : disable clock
959*53ee8cc1Swenshuai.xi //         [5]  : invert clock
960*53ee8cc1Swenshuai.xi //         [7:6]: Select clock source
961*53ee8cc1Swenshuai.xi //                00:  adc_clk_div2_buf
962*53ee8cc1Swenshuai.xi //                01:  mpll_clk9_buf
963*53ee8cc1Swenshuai.xi //                10:  1'b0
964*53ee8cc1Swenshuai.xi //                11:  DFT_CLK
965*53ee8cc1Swenshuai.xi // [11:8] reg_ckg_dvbtm_adc1x_eq1x
966*53ee8cc1Swenshuai.xi //         [8]  : disable clock
967*53ee8cc1Swenshuai.xi //         [9]  : invert clock
968*53ee8cc1Swenshuai.xi //         [11:10]: Select clock source
969*53ee8cc1Swenshuai.xi //                00:  adc_clk_buf
970*53ee8cc1Swenshuai.xi //                01:  mpll_clk18_buf
971*53ee8cc1Swenshuai.xi //                10:  1'b0
972*53ee8cc1Swenshuai.xi //                11:  DFT_CLK
973*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h10, 2'b11, 16'h0000);
974*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102021, 0x11);
975*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102020, 0x11);
976*53ee8cc1Swenshuai.xi 
977*53ee8cc1Swenshuai.xi 
978*53ee8cc1Swenshuai.xi // DVBS2
979*53ee8cc1Swenshuai.xi // @0x3511
980*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_dvbs2_inner
981*53ee8cc1Swenshuai.xi //         [0]  : disable clock
982*53ee8cc1Swenshuai.xi //         [1]  : invert clock
983*53ee8cc1Swenshuai.xi //         [3:2]: Select clock source
984*53ee8cc1Swenshuai.xi //               00:  adc_clk_buf
985*53ee8cc1Swenshuai.xi //               01:  1'b0
986*53ee8cc1Swenshuai.xi //               10:  1'b0
987*53ee8cc1Swenshuai.xi //               11:  1'b0
988*53ee8cc1Swenshuai.xi // [7:4] : reg_ckg_dvbs_outer1x
989*53ee8cc1Swenshuai.xi //         [4] : disable clock
990*53ee8cc1Swenshuai.xi //         [5] : invert clock
991*53ee8cc1Swenshuai.xi //         [7:6] : Select clock source
992*53ee8cc1Swenshuai.xi //               00:  adc_clk_buf
993*53ee8cc1Swenshuai.xi //               01:  clk_dvbtc_outer2x_c_p
994*53ee8cc1Swenshuai.xi //               10:  1'b0
995*53ee8cc1Swenshuai.xi //               11:  DFT_CLK
996*53ee8cc1Swenshuai.xi // [11:8] : reg_ckg_dvbs_outer2x
997*53ee8cc1Swenshuai.xi //         [8] : disable clock
998*53ee8cc1Swenshuai.xi //         [9] : invert clock
999*53ee8cc1Swenshuai.xi //         [11:10] : Select clock source
1000*53ee8cc1Swenshuai.xi //               00:  adc_clk_buf
1001*53ee8cc1Swenshuai.xi //               01:  1'b0
1002*53ee8cc1Swenshuai.xi //               10:  1'b0
1003*53ee8cc1Swenshuai.xi //               11:  DFT_CLK
1004*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h11, 2'b11, 16'h0000);
1005*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102023, 0x11);
1006*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102022, 0x11);
1007*53ee8cc1Swenshuai.xi 
1008*53ee8cc1Swenshuai.xi 
1009*53ee8cc1Swenshuai.xi // @0x3512
1010*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbs_rs
1011*53ee8cc1Swenshuai.xi //         [0]  : disable clock
1012*53ee8cc1Swenshuai.xi //         [1]  : invert clock
1013*53ee8cc1Swenshuai.xi //         [4:2]: Select clock source
1014*53ee8cc1Swenshuai.xi //               000:  mpll_clk216_buf
1015*53ee8cc1Swenshuai.xi //               001:  1'b0
1016*53ee8cc1Swenshuai.xi //               010:  1'b0
1017*53ee8cc1Swenshuai.xi //               011:  1'b0
1018*53ee8cc1Swenshuai.xi // [12:8] : reg_ckg_dvbs2_outer
1019*53ee8cc1Swenshuai.xi //         [8] : disable clock
1020*53ee8cc1Swenshuai.xi //         [9] : invert clock
1021*53ee8cc1Swenshuai.xi //         [12:10] : Select clock source
1022*53ee8cc1Swenshuai.xi //               000:  mpll_clk288_buf
1023*53ee8cc1Swenshuai.xi //               001:  mpll_clk216_buf
1024*53ee8cc1Swenshuai.xi //               010:  1'b0
1025*53ee8cc1Swenshuai.xi //               011:  1'b0
1026*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h12, 2'b11, 16'h0000);
1027*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102025, 0x11);
1028*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102024, 0x11);
1029*53ee8cc1Swenshuai.xi 
1030*53ee8cc1Swenshuai.xi 
1031*53ee8cc1Swenshuai.xi 
1032*53ee8cc1Swenshuai.xi // @0x3514
1033*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_dvbs2_ldpc_inner_sram
1034*53ee8cc1Swenshuai.xi //         [0]  : disable clock
1035*53ee8cc1Swenshuai.xi //         [1]  : invert clock
1036*53ee8cc1Swenshuai.xi //         [3:2]: Select clock source
1037*53ee8cc1Swenshuai.xi //               00:  clk_dvbs2_outer_mux8
1038*53ee8cc1Swenshuai.xi //               01:  adc_clk_buf
1039*53ee8cc1Swenshuai.xi //               10:  mpll_clk18_buf
1040*53ee8cc1Swenshuai.xi //               11:  clk_dvbtc_outer2x_c_p
1041*53ee8cc1Swenshuai.xi // [7:4] : reg_ckg_dvbs_viterbi_sram
1042*53ee8cc1Swenshuai.xi //         [4] : disable clock
1043*53ee8cc1Swenshuai.xi //         [5] : invert clock
1044*53ee8cc1Swenshuai.xi //         [7:6] : Select clock source
1045*53ee8cc1Swenshuai.xi //               00:  clk_dvbs2_outer_mux8
1046*53ee8cc1Swenshuai.xi //               01:  adc_clk_buf
1047*53ee8cc1Swenshuai.xi //               10:  mpll_clk18_buf
1048*53ee8cc1Swenshuai.xi //               11:  DFT_CLK
1049*53ee8cc1Swenshuai.xi // [12:8] : reg_ckg_dvbs_rs_deint_sram
1050*53ee8cc1Swenshuai.xi //         [8] : disable clock
1051*53ee8cc1Swenshuai.xi //         [9] : invert clock
1052*53ee8cc1Swenshuai.xi //         [12:10] : Select clock source
1053*53ee8cc1Swenshuai.xi //               000:  clk_dvbs2_outer_mux8
1054*53ee8cc1Swenshuai.xi //               001:  clk_dvbs_outer1x_pre_mux4
1055*53ee8cc1Swenshuai.xi //               010:  adc_clk_buf
1056*53ee8cc1Swenshuai.xi //               011:  mpll_clk18_buf
1057*53ee8cc1Swenshuai.xi //               100:  clk_dvbtc_outer2x_c_p
1058*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h14, 2'b11, 16'h0844);
1059*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102029, 0x11);
1060*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102028, 0x11);
1061*53ee8cc1Swenshuai.xi 
1062*53ee8cc1Swenshuai.xi // @0x3518
1063*53ee8cc1Swenshuai.xi // [4:0]: reg_ckg_dvbs2_outer_rs_adc
1064*53ee8cc1Swenshuai.xi //         [0] : disable clock
1065*53ee8cc1Swenshuai.xi //         [1] : invert clock
1066*53ee8cc1Swenshuai.xi //         [3:2]: Select clock source
1067*53ee8cc1Swenshuai.xi //               000:  clk_dvbs2_outer_mux8
1068*53ee8cc1Swenshuai.xi //               001:  clk_dvbs_rs_p
1069*53ee8cc1Swenshuai.xi //               010:  adc_clk_buf
1070*53ee8cc1Swenshuai.xi //               011:  mpll_clk18_buf
1071*53ee8cc1Swenshuai.xi //               100:  clk_dvbtc_outer2x_c_p
1072*53ee8cc1Swenshuai.xi // [11:8] : reg_ckg_dvbs2_ldpc_inner_j83b_sram
1073*53ee8cc1Swenshuai.xi //         [0]  : disable clock
1074*53ee8cc1Swenshuai.xi //         [1]  : invert clock
1075*53ee8cc1Swenshuai.xi //         [3:2]: Select clock source
1076*53ee8cc1Swenshuai.xi //               00:  clk_dvbs2_outer_mux8
1077*53ee8cc1Swenshuai.xi //               01:  adc_clk_buf
1078*53ee8cc1Swenshuai.xi //               10:  mpll_clk18_buf
1079*53ee8cc1Swenshuai.xi //               11:  clk_dvbtc_outer2x_c_p
1080*53ee8cc1Swenshuai.xi // [15:12] : reg_ckg_dvbs_viterbi_j83b_sram
1081*53ee8cc1Swenshuai.xi //         [12] : disable clock
1082*53ee8cc1Swenshuai.xi //         [13] : invert clock
1083*53ee8cc1Swenshuai.xi //         [15:14] : Select clock source
1084*53ee8cc1Swenshuai.xi //               00:  clk_dvbs2_outer_mux8
1085*53ee8cc1Swenshuai.xi //               01:  adc_clk_buf
1086*53ee8cc1Swenshuai.xi //               10:  mpll_clk18_buf
1087*53ee8cc1Swenshuai.xi //               11:  DFT_CLK
1088*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h18, 2'b11, 16'h4408);
1089*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102031, 0x11);
1090*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102030, 0x11);
1091*53ee8cc1Swenshuai.xi 
1092*53ee8cc1Swenshuai.xi // @0x3519
1093*53ee8cc1Swenshuai.xi // [4:0]: reg_ckg_dvbs2_outer_rs_adc_j83b
1094*53ee8cc1Swenshuai.xi //         [0] : disable clock
1095*53ee8cc1Swenshuai.xi //         [1] : invert clock
1096*53ee8cc1Swenshuai.xi //         [3:2]: Select clock source
1097*53ee8cc1Swenshuai.xi //               000:  clk_dvbs2_outer_mux8
1098*53ee8cc1Swenshuai.xi //               001:  clk_dvbs_rs_p
1099*53ee8cc1Swenshuai.xi //               010:  adc_clk_buf
1100*53ee8cc1Swenshuai.xi //               011:  mpll_clk18_buf
1101*53ee8cc1Swenshuai.xi //               100:  clk_dvbtc_outer2x_c_p
1102*53ee8cc1Swenshuai.xi // [12:8] : reg_ckg_dvbs2_demap
1103*53ee8cc1Swenshuai.xi //         DVBS2 demap clock control register;
1104*53ee8cc1Swenshuai.xi //         [0]=1:gate clock,
1105*53ee8cc1Swenshuai.xi //         [1]=1:invert clock.
1106*53ee8cc1Swenshuai.xi //         [4:2]: clock rate sel.
1107*53ee8cc1Swenshuai.xi //         0: mpll_clk216_buf
1108*53ee8cc1Swenshuai.xi //         1: mpll_clk172p8_buf
1109*53ee8cc1Swenshuai.xi //         2: mpll_clk144_buf
1110*53ee8cc1Swenshuai.xi //         3: mpll_clk96_buf
1111*53ee8cc1Swenshuai.xi //         4: mpll_clk72_buf
1112*53ee8cc1Swenshuai.xi //         5: adc_clk_buf
1113*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h19, 2'b11, 16'h0008);
1114*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102033, 0x11);
1115*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102032, 0x11);
1116*53ee8cc1Swenshuai.xi 
1117*53ee8cc1Swenshuai.xi // [4:0]: reg_ckg_dvbs2_oppro
1118*53ee8cc1Swenshuai.xi //         DVBS2 OPPRO clock control register;
1119*53ee8cc1Swenshuai.xi //         [0]=1:gate clock,
1120*53ee8cc1Swenshuai.xi //         [1]=1:invert clock.
1121*53ee8cc1Swenshuai.xi //         [4:2]: clock rate sel.
1122*53ee8cc1Swenshuai.xi //         0: mpll_clk216_buf
1123*53ee8cc1Swenshuai.xi //         1: mpll_clk172p8_buf
1124*53ee8cc1Swenshuai.xi //         2: mpll_clk144_buf
1125*53ee8cc1Swenshuai.xi //         3: mpll_clk96_buf
1126*53ee8cc1Swenshuai.xi //         4: mpll_clk72_buf
1127*53ee8cc1Swenshuai.xi //         5: adc_clk_buf
1128*53ee8cc1Swenshuai.xi // [12:8]: reg_ckg_dvbtm_ts_in_adc
1129*53ee8cc1Swenshuai.xi //         DVBTM ts_in sram share clock control register;
1130*53ee8cc1Swenshuai.xi //         [0]=1:gate clock,
1131*53ee8cc1Swenshuai.xi //         [1]=1:invert clock.
1132*53ee8cc1Swenshuai.xi //         [4:2]: clock rate sel.
1133*53ee8cc1Swenshuai.xi //         0: clk_dvbs_rs_p
1134*53ee8cc1Swenshuai.xi //         1: mpll_clk48_buf
1135*53ee8cc1Swenshuai.xi //         2: mpll_clk43_buf
1136*53ee8cc1Swenshuai.xi //         3: clk_dvbs_outer1x_pre_mux4
1137*53ee8cc1Swenshuai.xi //         4: clk_dvbs2_oppro_pre_mux4
1138*53ee8cc1Swenshuai.xi //         5: clk_dvbtc_outer2x_c_p
1139*53ee8cc1Swenshuai.xi //         6: adc_clk_buf
1140*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h1a, 2'b11, 16'h1800);
1141*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102035, 0x11);
1142*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102034, 0x11);
1143*53ee8cc1Swenshuai.xi 
1144*53ee8cc1Swenshuai.xi // @0x3515
1145*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbs2_bch
1146*53ee8cc1Swenshuai.xi //         DVBS2 BCH clock control register;
1147*53ee8cc1Swenshuai.xi //         [0]=1:gate clock,
1148*53ee8cc1Swenshuai.xi //         [1]=1:invert clock.
1149*53ee8cc1Swenshuai.xi //         [4:2]: clock rate sel.
1150*53ee8cc1Swenshuai.xi //         0: mpll_clk216_buf
1151*53ee8cc1Swenshuai.xi //         1: mpll_clk172p8_buf
1152*53ee8cc1Swenshuai.xi //         2: mpll_clk144_buf
1153*53ee8cc1Swenshuai.xi //         3: mpll_clk96_bu4
1154*53ee8cc1Swenshuai.xi //         4: mpll_clk72_buf
1155*53ee8cc1Swenshuai.xi //         5: adc_clk_buf
1156*53ee8cc1Swenshuai.xi // [12:8] : reg_ckg_dvbs2_bch_rs_adc
1157*53ee8cc1Swenshuai.xi //         [8] : disable clock
1158*53ee8cc1Swenshuai.xi //         [9] : invert clock
1159*53ee8cc1Swenshuai.xi //         [11:10] : Select clock source
1160*53ee8cc1Swenshuai.xi //               00:  clk_dvbs2_bch_pre_mux4
1161*53ee8cc1Swenshuai.xi //               01:  clk_dvbs_rs_p
1162*53ee8cc1Swenshuai.xi //               10:  adc_clk_buf
1163*53ee8cc1Swenshuai.xi //               11:
1164*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h15, 2'b11, 16'h0800);
1165*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x10202b, 0x11);
1166*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x10202a, 0x11);
1167*53ee8cc1Swenshuai.xi 
1168*53ee8cc1Swenshuai.xi 
1169*53ee8cc1Swenshuai.xi // @0x3516
1170*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbtc_outer2x_c
1171*53ee8cc1Swenshuai.xi //         [0]  : disable clock
1172*53ee8cc1Swenshuai.xi //         [1]  : invert clock
1173*53ee8cc1Swenshuai.xi //         [4:2]: Select clock source
1174*53ee8cc1Swenshuai.xi //               000:  clk_dmplldiv10_buf
1175*53ee8cc1Swenshuai.xi //               001:  clk_dmplldiv10_div2_buf
1176*53ee8cc1Swenshuai.xi //               010:  clk_dmdadc
1177*53ee8cc1Swenshuai.xi //               011:  clk_dmdadc_div2_buf
1178*53ee8cc1Swenshuai.xi //               100:  clk_dmplldiv2_div8_buf
1179*53ee8cc1Swenshuai.xi //               101:  mpll_clk96_buf
1180*53ee8cc1Swenshuai.xi //               110:  mpll_clk48_buf
1181*53ee8cc1Swenshuai.xi //               110:  1'b0
1182*53ee8cc1Swenshuai.xi // [11:8] : reg_ckg_adcd_dvbs_rs
1183*53ee8cc1Swenshuai.xi //         [8] : disable clock
1184*53ee8cc1Swenshuai.xi //         [9] : invert clock
1185*53ee8cc1Swenshuai.xi //         [11:10] : Select clock source
1186*53ee8cc1Swenshuai.xi //               00:  adc_clk_buf
1187*53ee8cc1Swenshuai.xi //               01:  clk_dvbs_rs_p
1188*53ee8cc1Swenshuai.xi //               10:  mpll_clk18_buf
1189*53ee8cc1Swenshuai.xi //               11:
1190*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h16, 2'b10, 16'h0001);
1191*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x10202d, 0x11);
1192*53ee8cc1Swenshuai.xi 
1193*53ee8cc1Swenshuai.xi // 0	reg_force_allsram_on
1194*53ee8cc1Swenshuai.xi // 1	reg_adcdma_sram_sd_en		= 1
1195*53ee8cc1Swenshuai.xi // 2	reg_dvbs2_inner_sram_sd_en	= 1
1196*53ee8cc1Swenshuai.xi // 4	reg_dvbs2_outer_sram_sd_en	= 1
1197*53ee8cc1Swenshuai.xi // 5	reg_dvbs_outer_sram_sd_en	= 1
1198*53ee8cc1Swenshuai.xi // 6	reg_dvbc_outer_sram_sd_en	= 1
1199*53ee8cc1Swenshuai.xi // 7	reg_dvbc_inner_0_sram_sd_en	= 1
1200*53ee8cc1Swenshuai.xi // 8	reg_dvbc_inner_1_sram_sd_en	= 1
1201*53ee8cc1Swenshuai.xi // 9	reg_dvbt_t2_ts_0_sram_sd_en	= 1
1202*53ee8cc1Swenshuai.xi // 10	reg_dvbt_t2_ts_1_sram_sd_en	= 1
1203*53ee8cc1Swenshuai.xi // 11	reg_sram_share_sram_sd_en	= 1
1204*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102104, 0xf6);
1205*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102105, 0x0f);
1206*53ee8cc1Swenshuai.xi 
1207*53ee8cc1Swenshuai.xi // ("==============================================================");
1208*53ee8cc1Swenshuai.xi // ("End demod top initial setting by HK MCU ......");
1209*53ee8cc1Swenshuai.xi // ("==============================================================");
1210*53ee8cc1Swenshuai.xi 
1211*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD"," @INTERN_DVBS_Exit\n"));
1212*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_SoftStop();
1213*53ee8cc1Swenshuai.xi 
1214*53ee8cc1Swenshuai.xi     return status;
1215*53ee8cc1Swenshuai.xi }
1216*53ee8cc1Swenshuai.xi 
1217*53ee8cc1Swenshuai.xi /***********************************************************************************
1218*53ee8cc1Swenshuai.xi   Subject:    Load DSP code to chip
1219*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_LoadDSPCode
1220*53ee8cc1Swenshuai.xi   Parmeter:
1221*53ee8cc1Swenshuai.xi   Return:     MS_BOOL
1222*53ee8cc1Swenshuai.xi   Remark:
1223*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_LoadDSPCode(void)1224*53ee8cc1Swenshuai.xi static MS_BOOL INTERN_DVBS_LoadDSPCode(void)
1225*53ee8cc1Swenshuai.xi {
1226*53ee8cc1Swenshuai.xi     MS_U8  udata = 0x00;
1227*53ee8cc1Swenshuai.xi     MS_U16 i;
1228*53ee8cc1Swenshuai.xi     MS_U16 fail_cnt=0;
1229*53ee8cc1Swenshuai.xi 
1230*53ee8cc1Swenshuai.xi #if (DBG_DUMP_LOAD_DSP_TIME==1)
1231*53ee8cc1Swenshuai.xi     MS_U32 u32Time;
1232*53ee8cc1Swenshuai.xi #endif
1233*53ee8cc1Swenshuai.xi 
1234*53ee8cc1Swenshuai.xi     //MDrv_Sys_DisableWatchDog();
1235*53ee8cc1Swenshuai.xi /*
1236*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103480, 0x01);//reference GUI//reset
1237*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103481, 0x00);
1238*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103480, 0x00);
1239*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103483, 0x50);
1240*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103483, 0x51);
1241*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103484, 0x00);
1242*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103485, 0x00);
1243*53ee8cc1Swenshuai.xi */
1244*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x00,  0x01);        // reset VD_MCU
1245*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x01,  0x00);        // disable SRAM
1246*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03,  0x50);        // enable "vdmcu51_if"
1247*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03,  0x51);        // enable auto-increase
1248*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x04,  0x00);        // sram address low byte
1249*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x05,  0x00);        // sram address high byte
1250*53ee8cc1Swenshuai.xi 
1251*53ee8cc1Swenshuai.xi     ////  Load code thru VDMCU_IF ////
1252*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf(">Load Code.....\n"));
1253*53ee8cc1Swenshuai.xi     for ( i = 0; i < sizeof(INTERN_DVBS_table); i++)
1254*53ee8cc1Swenshuai.xi     {
1255*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x10348C, INTERN_DVBS_table[i]);
1256*53ee8cc1Swenshuai.xi         //HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x0C, INTERN_DVBS_table[i]); // write data to VD MCU 51 code sram
1257*53ee8cc1Swenshuai.xi     }
1258*53ee8cc1Swenshuai.xi 
1259*53ee8cc1Swenshuai.xi     ////  Content verification ////
1260*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD",">Verify Code...\n"));
1261*53ee8cc1Swenshuai.xi 
1262*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x04, 0x00);         // sram address low byte
1263*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x05, 0x00);         // sram address high byte
1264*53ee8cc1Swenshuai.xi 
1265*53ee8cc1Swenshuai.xi     for ( i = 0; i < sizeof(INTERN_DVBS_table); i++)
1266*53ee8cc1Swenshuai.xi     {
1267*53ee8cc1Swenshuai.xi         udata = HAL_DMD_RIU_ReadByte(DMDMcuBase + 0x10);    // read sram data
1268*53ee8cc1Swenshuai.xi         if (udata != INTERN_DVBS_table[i])
1269*53ee8cc1Swenshuai.xi         {
1270*53ee8cc1Swenshuai.xi             ULOGD("DEMOD",">fail add = 0x%x\n", i);
1271*53ee8cc1Swenshuai.xi             ULOGD("DEMOD",">code = 0x%x\n", INTERN_DVBS_table[i]);
1272*53ee8cc1Swenshuai.xi             ULOGD("DEMOD",">data = 0x%x\n", udata);
1273*53ee8cc1Swenshuai.xi 
1274*53ee8cc1Swenshuai.xi             if (fail_cnt > 10)
1275*53ee8cc1Swenshuai.xi             {
1276*53ee8cc1Swenshuai.xi                 ULOGD("DEMOD",">DVB-S DSP Loadcode fail!");
1277*53ee8cc1Swenshuai.xi                 return false;
1278*53ee8cc1Swenshuai.xi             }
1279*53ee8cc1Swenshuai.xi             fail_cnt++;
1280*53ee8cc1Swenshuai.xi         }
1281*53ee8cc1Swenshuai.xi     }
1282*53ee8cc1Swenshuai.xi 
1283*53ee8cc1Swenshuai.xi     #if 1 // Kyoto for VCM DJB
1284*53ee8cc1Swenshuai.xi     //====================================================================
1285*53ee8cc1Swenshuai.xi     // add S2 DRAM bufer start address into fixed location
1286*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x04,  0x30);        // sram address low byte; 0x30 is defined in FW
1287*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x05,  0x00);        // sram address high byte
1288*53ee8cc1Swenshuai.xi 
1289*53ee8cc1Swenshuai.xi     //0x30~0x33
1290*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, (MS_U8)u32DVBS2_DJB_START_ADDR);
1291*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, (MS_U8)(u32DVBS2_DJB_START_ADDR >> 8));
1292*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, (MS_U8)(u32DVBS2_DJB_START_ADDR >> 16));
1293*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, (MS_U8)(u32DVBS2_DJB_START_ADDR >> 24));
1294*53ee8cc1Swenshuai.xi 
1295*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS( ULOGD("DEMOD", "@@@@@ share dram address = 0x %x \n ",u32DVBS2_DJB_START_ADDR) );
1296*53ee8cc1Swenshuai.xi    //=====================================================================
1297*53ee8cc1Swenshuai.xi #endif
1298*53ee8cc1Swenshuai.xi /*
1299*53ee8cc1Swenshuai.xi     //0x30~0x33
1300*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, (MS_U8)(0x11) );
1301*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, (MS_U8)(0x22) );
1302*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, (MS_U8)(0x33) );
1303*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase+0x0C, (MS_U8)(0x44) );
1304*53ee8cc1Swenshuai.xi */
1305*53ee8cc1Swenshuai.xi 
1306*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, 0x50);     // diable auto-increase
1307*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x03, 0x00);     // disable "vdmcu51_if"
1308*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x01, 0x01);     // enable SRAM
1309*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(DMDMcuBase + 0x00, 0x00);     // release VD_MCU
1310*53ee8cc1Swenshuai.xi 
1311*53ee8cc1Swenshuai.xi 
1312*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD",">DSP Loadcode done."));
1313*53ee8cc1Swenshuai.xi #if 0
1314*53ee8cc1Swenshuai.xi     INTERN_DVBS_Config(6875, 128, 36125, 0,1);
1315*53ee8cc1Swenshuai.xi     INTERN_DVBS_Active(ENABLE);
1316*53ee8cc1Swenshuai.xi     while(1);
1317*53ee8cc1Swenshuai.xi #endif
1318*53ee8cc1Swenshuai.xi     //HAL_DMD_RIU_WriteByte(0x101E3E, 0x04);     // DVBT = BIT1 -> 0x02
1319*53ee8cc1Swenshuai.xi 
1320*53ee8cc1Swenshuai.xi     return TRUE;
1321*53ee8cc1Swenshuai.xi }
1322*53ee8cc1Swenshuai.xi 
1323*53ee8cc1Swenshuai.xi /***********************************************************************************
1324*53ee8cc1Swenshuai.xi   Subject:    DVB-S CLKGEN initialized function
1325*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_Power_On_Initialization
1326*53ee8cc1Swenshuai.xi   Parmeter:
1327*53ee8cc1Swenshuai.xi   Return:     MS_BOOL
1328*53ee8cc1Swenshuai.xi   Remark:
1329*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_InitClkgen(MS_BOOL bRFAGCTristateEnable)1330*53ee8cc1Swenshuai.xi void INTERN_DVBS_InitClkgen(MS_BOOL bRFAGCTristateEnable)
1331*53ee8cc1Swenshuai.xi {
1332*53ee8cc1Swenshuai.xi     //MS_U8    u8Temp=0;
1333*53ee8cc1Swenshuai.xi     // This file is translated by Steven Hung's riu2script.pl
1334*53ee8cc1Swenshuai.xi 
1335*53ee8cc1Swenshuai.xi     // ==============================================================
1336*53ee8cc1Swenshuai.xi     // Start demod top initial setting by HK MCU ......
1337*53ee8cc1Swenshuai.xi     // ==============================================================
1338*53ee8cc1Swenshuai.xi     // [8] : reg_chiptop_dummy_0 (reg_dmdtop_dmd_sel)
1339*53ee8cc1Swenshuai.xi     //       1'b0->reg_DMDTOP control by HK_MCU.
1340*53ee8cc1Swenshuai.xi     //       1'b1->reg_DMDTOP control by DMD_MCU.
1341*53ee8cc1Swenshuai.xi     // [9] : reg_chiptop_dummy_0 (reg_dmd_ana_regsel)
1342*53ee8cc1Swenshuai.xi     //       1'b0->reg_DMDANA control by HK_MCU.
1343*53ee8cc1Swenshuai.xi     //       1'b1->reg_DMDANA control by DMD_MCU.
1344*53ee8cc1Swenshuai.xi     // select HK MCU ......
1345*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CHIP>>1)+7'h1c, 2'b10, 16'h0000);
1346*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CHIP>>1)+7'h1c, 2'b10, 16'h0000);
1347*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101e39,0x00);
1348*53ee8cc1Swenshuai.xi 
1349*53ee8cc1Swenshuai.xi 
1350*53ee8cc1Swenshuai.xi     // ==============================================================
1351*53ee8cc1Swenshuai.xi     // Start TOP CLKGEN initial setting ......
1352*53ee8cc1Swenshuai.xi     // ==============================================================
1353*53ee8cc1Swenshuai.xi     // CLK_DMDMCU clock setting
1354*53ee8cc1Swenshuai.xi     // reg_ckg_dmdmcu@0x0f[4:0]
1355*53ee8cc1Swenshuai.xi     // [0]  : disable clock
1356*53ee8cc1Swenshuai.xi     // [1]  : invert clock
1357*53ee8cc1Swenshuai.xi     // [4:2]:
1358*53ee8cc1Swenshuai.xi     //        000:170 MHz(MPLL_DIV_BUF)
1359*53ee8cc1Swenshuai.xi     //        001:160MHz
1360*53ee8cc1Swenshuai.xi     //        010:144MHz
1361*53ee8cc1Swenshuai.xi     //        011:123MHz
1362*53ee8cc1Swenshuai.xi     //        100:108MHz (Kriti:DVBT2)
1363*53ee8cc1Swenshuai.xi     //        101:mem_clcok
1364*53ee8cc1Swenshuai.xi     //        110:mem_clock div 2
1365*53ee8cc1Swenshuai.xi     //        111:select XTAL
1366*53ee8cc1Swenshuai.xi      // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h0f, 2'b11, 16'h001c);
1367*53ee8cc1Swenshuai.xi      // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h0f, 2'b11, 16'h001c);
1368*53ee8cc1Swenshuai.xi      HAL_DMD_RIU_WriteByte(0x10331f, 0x00);
1369*53ee8cc1Swenshuai.xi      HAL_DMD_RIU_WriteByte(0x10331e, 0x30);
1370*53ee8cc1Swenshuai.xi 
1371*53ee8cc1Swenshuai.xi 
1372*53ee8cc1Swenshuai.xi     // set parallel ts clock
1373*53ee8cc1Swenshuai.xi     // [12]  : reg_ckg_atsc_dvb_div_sel  = 1
1374*53ee8cc1Swenshuai.xi     //        0: select clk_dmplldiv5
1375*53ee8cc1Swenshuai.xi     //        1: select clk_dmplldiv3
1376*53ee8cc1Swenshuai.xi     // [11] : reg_ckg_demod_test_in_en = 0
1377*53ee8cc1Swenshuai.xi     //        0: select internal ADC CLK
1378*53ee8cc1Swenshuai.xi     //        1: select external test-in clock
1379*53ee8cc1Swenshuai.xi     // [10] : reg_ckg_dvbtm_ts_out_mode = 1
1380*53ee8cc1Swenshuai.xi     //        0: select gated clock
1381*53ee8cc1Swenshuai.xi     //        1: select free-run clock
1382*53ee8cc1Swenshuai.xi     // [9]  : reg_ckg_atsc_dvbtc_ts_inv = 0
1383*53ee8cc1Swenshuai.xi     //        0: normal phase to pad
1384*53ee8cc1Swenshuai.xi     //        1: invert phase to pad
1385*53ee8cc1Swenshuai.xi     // [4:0]: reg_ckg_dvbtm_ts_divnum   = 11
1386*53ee8cc1Swenshuai.xi     //        Demod TS output clock phase tuning number
1387*53ee8cc1Swenshuai.xi     //        If (reg_ckg_tsout_ph_tun_num == reg_ckg_dvbtm_ts_divnum),
1388*53ee8cc1Swenshuai.xi     //        Demod TS output clock is equal Demod TS internal working clock.
1389*53ee8cc1Swenshuai.xi     //        => TS clock = (864/3)/(2*(5+1)) = 24MHz
1390*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h00, 2'b11, 16'h0511);
1391*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h00, 2'b11, 16'h0511);
1392*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, 0x14);
1393*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103300, 0x05);
1394*53ee8cc1Swenshuai.xi 
1395*53ee8cc1Swenshuai.xi 
1396*53ee8cc1Swenshuai.xi     // enable DVBTC ts clock
1397*53ee8cc1Swenshuai.xi     // [11:8]: reg_ckg_dvbtc_ts
1398*53ee8cc1Swenshuai.xi     //      [8]  : disable clock
1399*53ee8cc1Swenshuai.xi     //      [9]  : invert clock
1400*53ee8cc1Swenshuai.xi     //      [11:10]: Select clock source
1401*53ee8cc1Swenshuai.xi     //             00:clk_atsc_dvb_div
1402*53ee8cc1Swenshuai.xi     //             01:62 MHz
1403*53ee8cc1Swenshuai.xi     //             10:54 MHz
1404*53ee8cc1Swenshuai.xi     //             11:reserved
1405*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h04, 2'b11, 16'h0000);
1406*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h04, 2'b11, 16'h0000);
1407*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103309, 0x00);
1408*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103308, 0x00);
1409*53ee8cc1Swenshuai.xi 
1410*53ee8cc1Swenshuai.xi 
1411*53ee8cc1Swenshuai.xi     // enable dvbc adc clock
1412*53ee8cc1Swenshuai.xi     // [3:0]: reg_ckg_dvbtc_adc
1413*53ee8cc1Swenshuai.xi     //       [0]  : disable clock
1414*53ee8cc1Swenshuai.xi     //       [1]  : invert clock
1415*53ee8cc1Swenshuai.xi     //       [3:2]: Select clock source => for demod clkgen clk_dvbtc_adc
1416*53ee8cc1Swenshuai.xi     //          00:  clk_dmdadc
1417*53ee8cc1Swenshuai.xi     //          01:  clk_dmdadc_div2
1418*53ee8cc1Swenshuai.xi     //          10:  clk_dmdadc_div4
1419*53ee8cc1Swenshuai.xi     //          11:  DFT_CLK
1420*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h0a, 2'b11, 16'h0000);
1421*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h0a, 2'b11, 16'h0000);
1422*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103315, 0x00);
1423*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103314, 0x00);
1424*53ee8cc1Swenshuai.xi 
1425*53ee8cc1Swenshuai.xi     // Reset TS divider
1426*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h01, 2'b01, 16'h0001);
1427*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103302, 0x01);
1428*53ee8cc1Swenshuai.xi 
1429*53ee8cc1Swenshuai.xi     // `RIU_W((`RIUBASE_CLKGEN1>>1)+7'h01, 2'b01, 16'h0000);
1430*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103302, 0x00);
1431*53ee8cc1Swenshuai.xi 
1432*53ee8cc1Swenshuai.xi 
1433*53ee8cc1Swenshuai.xi // ("==============================================================");
1434*53ee8cc1Swenshuai.xi // ("Start demod CLKGEN setting ......");
1435*53ee8cc1Swenshuai.xi // ("==============================================================");
1436*53ee8cc1Swenshuai.xi // enable atsc_adcd_sync clock
1437*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_atsc_adcd_sync
1438*53ee8cc1Swenshuai.xi //         [0]  : disable clock
1439*53ee8cc1Swenshuai.xi //         [1]  : invert clock
1440*53ee8cc1Swenshuai.xi //         [3:2]: Select clock source
1441*53ee8cc1Swenshuai.xi //                00:  clk_dmdadc_sync
1442*53ee8cc1Swenshuai.xi //                01:  1'b0
1443*53ee8cc1Swenshuai.xi //                10:  1'b0
1444*53ee8cc1Swenshuai.xi //                11:  DFT_CLK
1445*53ee8cc1Swenshuai.xi // [11:8] : reg_ckg_dmd_dma
1446*53ee8cc1Swenshuai.xi //         [8]  : disable clock
1447*53ee8cc1Swenshuai.xi //         [9]  : invert clock
1448*53ee8cc1Swenshuai.xi //         [11:10]: Select clock source
1449*53ee8cc1Swenshuai.xi //                00:  clk_dmdadc
1450*53ee8cc1Swenshuai.xi //                01:  clk_dmdadc_div2_buf
1451*53ee8cc1Swenshuai.xi //                10:  1'b0
1452*53ee8cc1Swenshuai.xi //                11:  DFT_CLK
1453*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h05, 2'b11, 16'h0000);
1454*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10200b, 0x00);
1455*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x10200a, 0x00);
1456*53ee8cc1Swenshuai.xi 
1457*53ee8cc1Swenshuai.xi // [7:4] : reg_ckg_dvbtm_adc0p5x
1458*53ee8cc1Swenshuai.xi //         [4]  : disable clock
1459*53ee8cc1Swenshuai.xi //         [5]  : invert clock
1460*53ee8cc1Swenshuai.xi //         [7:6]: Select clock source
1461*53ee8cc1Swenshuai.xi //                00:  adc_clk_div2_buf
1462*53ee8cc1Swenshuai.xi //                01:  mpll_clk9_buf
1463*53ee8cc1Swenshuai.xi //                10:  1'b0
1464*53ee8cc1Swenshuai.xi //                11:  DFT_CLK
1465*53ee8cc1Swenshuai.xi // [11:8] reg_ckg_dvbtm_adc1x_eq1x
1466*53ee8cc1Swenshuai.xi //         [8]  : disable clock
1467*53ee8cc1Swenshuai.xi //         [9]  : invert clock
1468*53ee8cc1Swenshuai.xi //         [11:10]: Select clock source
1469*53ee8cc1Swenshuai.xi //                00:  adc_clk_buf
1470*53ee8cc1Swenshuai.xi //                01:  mpll_clk18_buf
1471*53ee8cc1Swenshuai.xi //                10:  1'b0
1472*53ee8cc1Swenshuai.xi //                11:  DFT_CLK
1473*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h10, 2'b11, 16'h0000);
1474*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102021, 0x00);
1475*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102020, 0x00);
1476*53ee8cc1Swenshuai.xi 
1477*53ee8cc1Swenshuai.xi // DVBS2
1478*53ee8cc1Swenshuai.xi // @0x3511
1479*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_dvbs2_inner
1480*53ee8cc1Swenshuai.xi //         [0]  : disable clock
1481*53ee8cc1Swenshuai.xi //         [1]  : invert clock
1482*53ee8cc1Swenshuai.xi //         [3:2]: Select clock source
1483*53ee8cc1Swenshuai.xi //               00:  adc_clk_buf
1484*53ee8cc1Swenshuai.xi //               01:  1'b0
1485*53ee8cc1Swenshuai.xi //               10:  1'b0
1486*53ee8cc1Swenshuai.xi //               11:  1'b0
1487*53ee8cc1Swenshuai.xi // [7:4] : reg_ckg_dvbs_outer1x
1488*53ee8cc1Swenshuai.xi //         [4] : disable clock
1489*53ee8cc1Swenshuai.xi //         [5] : invert clock
1490*53ee8cc1Swenshuai.xi //         [7:6] : Select clock source
1491*53ee8cc1Swenshuai.xi //               00:  adc_clk_buf
1492*53ee8cc1Swenshuai.xi //               01:  clk_dvbtc_outer2x_c_p
1493*53ee8cc1Swenshuai.xi //               10:  1'b0
1494*53ee8cc1Swenshuai.xi //               11:  DFT_CLK
1495*53ee8cc1Swenshuai.xi // [11:8] : reg_ckg_dvbs_outer2x
1496*53ee8cc1Swenshuai.xi //         [8] : disable clock
1497*53ee8cc1Swenshuai.xi //         [9] : invert clock
1498*53ee8cc1Swenshuai.xi //         [11:10] : Select clock source
1499*53ee8cc1Swenshuai.xi //               00:  adc_clk_buf
1500*53ee8cc1Swenshuai.xi //               01:  1'b0
1501*53ee8cc1Swenshuai.xi //               10:  1'b0
1502*53ee8cc1Swenshuai.xi //               11:  DFT_CLK
1503*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h11, 2'b11, 16'h0000);
1504*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x102023, 0x00);
1505*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x102022, 0x00);
1506*53ee8cc1Swenshuai.xi 
1507*53ee8cc1Swenshuai.xi 
1508*53ee8cc1Swenshuai.xi // @0x3512
1509*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbs_rs
1510*53ee8cc1Swenshuai.xi //         [0]  : disable clock
1511*53ee8cc1Swenshuai.xi //         [1]  : invert clock
1512*53ee8cc1Swenshuai.xi //         [4:2]: Select clock source
1513*53ee8cc1Swenshuai.xi //               000:  mpll_clk216_buf
1514*53ee8cc1Swenshuai.xi //               001:  1'b0
1515*53ee8cc1Swenshuai.xi //               010:  1'b0
1516*53ee8cc1Swenshuai.xi //               011:  1'b0
1517*53ee8cc1Swenshuai.xi // [12:8] : reg_ckg_dvbs2_outer
1518*53ee8cc1Swenshuai.xi //         [8] : disable clock
1519*53ee8cc1Swenshuai.xi //         [9] : invert clock
1520*53ee8cc1Swenshuai.xi //         [12:10] : Select clock source
1521*53ee8cc1Swenshuai.xi //               000:  mpll_clk288_buf
1522*53ee8cc1Swenshuai.xi //               001:  mpll_clk216_buf
1523*53ee8cc1Swenshuai.xi //               010:  1'b0
1524*53ee8cc1Swenshuai.xi //               011:  1'b0
1525*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h12, 2'b11, 16'h0000);
1526*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x102025, 0x00);
1527*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x102024, 0x00);
1528*53ee8cc1Swenshuai.xi 
1529*53ee8cc1Swenshuai.xi 
1530*53ee8cc1Swenshuai.xi // @0x3514
1531*53ee8cc1Swenshuai.xi // [3:0] : reg_ckg_dvbs2_ldpc_inner_sram
1532*53ee8cc1Swenshuai.xi //         [0]  : disable clock
1533*53ee8cc1Swenshuai.xi //         [1]  : invert clock
1534*53ee8cc1Swenshuai.xi //         [3:2]: Select clock source
1535*53ee8cc1Swenshuai.xi //               00:  clk_dvbs2_outer_mux8
1536*53ee8cc1Swenshuai.xi //               01:  adc_clk_buf
1537*53ee8cc1Swenshuai.xi //               10:  mpll_clk18_buf
1538*53ee8cc1Swenshuai.xi //               11:  clk_dvbtc_outer2x_c_p
1539*53ee8cc1Swenshuai.xi // [7:4] : reg_ckg_dvbs_viterbi_sram
1540*53ee8cc1Swenshuai.xi //         [4] : disable clock
1541*53ee8cc1Swenshuai.xi //         [5] : invert clock
1542*53ee8cc1Swenshuai.xi //         [7:6] : Select clock source
1543*53ee8cc1Swenshuai.xi //               00:  clk_dvbs2_outer_mux8
1544*53ee8cc1Swenshuai.xi //               01:  adc_clk_buf
1545*53ee8cc1Swenshuai.xi //               10:  mpll_clk18_buf
1546*53ee8cc1Swenshuai.xi //               11:  DFT_CLK
1547*53ee8cc1Swenshuai.xi // [12:8] : reg_ckg_dvbs_rs_deint_sram
1548*53ee8cc1Swenshuai.xi //         [8] : disable clock
1549*53ee8cc1Swenshuai.xi //         [9] : invert clock
1550*53ee8cc1Swenshuai.xi //         [12:10] : Select clock source
1551*53ee8cc1Swenshuai.xi //               000:  clk_dvbs2_outer_mux8
1552*53ee8cc1Swenshuai.xi //               001:  clk_dvbs_outer1x_pre_mux4
1553*53ee8cc1Swenshuai.xi //               010:  adc_clk_buf
1554*53ee8cc1Swenshuai.xi //               011:  mpll_clk18_buf
1555*53ee8cc1Swenshuai.xi //               100:  clk_dvbtc_outer2x_c_p
1556*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h14, 2'b11, 16'h0844);
1557*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x102029, 0x08);
1558*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x102028, 0x44);
1559*53ee8cc1Swenshuai.xi 
1560*53ee8cc1Swenshuai.xi // @0x3518
1561*53ee8cc1Swenshuai.xi // [4:0]: reg_ckg_dvbs2_outer_rs_adc
1562*53ee8cc1Swenshuai.xi //         [0] : disable clock
1563*53ee8cc1Swenshuai.xi //         [1] : invert clock
1564*53ee8cc1Swenshuai.xi //         [3:2]: Select clock source
1565*53ee8cc1Swenshuai.xi //               000:  clk_dvbs2_outer_mux8
1566*53ee8cc1Swenshuai.xi //               001:  clk_dvbs_rs_p
1567*53ee8cc1Swenshuai.xi //               010:  adc_clk_buf
1568*53ee8cc1Swenshuai.xi //               011:  mpll_clk18_buf
1569*53ee8cc1Swenshuai.xi //               100:  clk_dvbtc_outer2x_c_p
1570*53ee8cc1Swenshuai.xi // [11:8] : reg_ckg_dvbs2_ldpc_inner_j83b_sram
1571*53ee8cc1Swenshuai.xi //         [0]  : disable clock
1572*53ee8cc1Swenshuai.xi //         [1]  : invert clock
1573*53ee8cc1Swenshuai.xi //         [3:2]: Select clock source
1574*53ee8cc1Swenshuai.xi //               00:  clk_dvbs2_outer_mux8
1575*53ee8cc1Swenshuai.xi //               01:  adc_clk_buf
1576*53ee8cc1Swenshuai.xi //               10:  mpll_clk18_buf
1577*53ee8cc1Swenshuai.xi //               11:  clk_dvbtc_outer2x_c_p
1578*53ee8cc1Swenshuai.xi // [15:12] : reg_ckg_dvbs_viterbi_j83b_sram
1579*53ee8cc1Swenshuai.xi //         [12] : disable clock
1580*53ee8cc1Swenshuai.xi //         [13] : invert clock
1581*53ee8cc1Swenshuai.xi //         [15:14] : Select clock source
1582*53ee8cc1Swenshuai.xi //               00:  clk_dvbs2_outer_mux8
1583*53ee8cc1Swenshuai.xi //               01:  adc_clk_buf
1584*53ee8cc1Swenshuai.xi //               10:  mpll_clk18_buf
1585*53ee8cc1Swenshuai.xi //               11:  DFT_CLK
1586*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h18, 2'b11, 16'h4408);
1587*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x102031, 0x44);
1588*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x102030, 0x08);
1589*53ee8cc1Swenshuai.xi 
1590*53ee8cc1Swenshuai.xi 
1591*53ee8cc1Swenshuai.xi // @0x3519
1592*53ee8cc1Swenshuai.xi // [4:0]: reg_ckg_dvbs2_outer_rs_adc_j83b
1593*53ee8cc1Swenshuai.xi //         [0] : disable clock
1594*53ee8cc1Swenshuai.xi //         [1] : invert clock
1595*53ee8cc1Swenshuai.xi //         [3:2]: Select clock source
1596*53ee8cc1Swenshuai.xi //               000:  clk_dvbs2_outer_mux8
1597*53ee8cc1Swenshuai.xi //               001:  clk_dvbs_rs_p
1598*53ee8cc1Swenshuai.xi //               010:  adc_clk_buf
1599*53ee8cc1Swenshuai.xi //               011:  mpll_clk18_buf
1600*53ee8cc1Swenshuai.xi //               100:  clk_dvbtc_outer2x_c_p
1601*53ee8cc1Swenshuai.xi // [12:8] : reg_ckg_dvbs2_demap
1602*53ee8cc1Swenshuai.xi //         DVBS2 demap clock control register;
1603*53ee8cc1Swenshuai.xi //         [0]=1:gate clock,
1604*53ee8cc1Swenshuai.xi //         [1]=1:invert clock.
1605*53ee8cc1Swenshuai.xi //         [4:2]: clock rate sel.
1606*53ee8cc1Swenshuai.xi //         0: mpll_clk216_buf
1607*53ee8cc1Swenshuai.xi //         1: mpll_clk172p8_buf
1608*53ee8cc1Swenshuai.xi //         2: mpll_clk144_buf
1609*53ee8cc1Swenshuai.xi //         3: mpll_clk96_buf
1610*53ee8cc1Swenshuai.xi //         4: mpll_clk72_buf
1611*53ee8cc1Swenshuai.xi //         5: adc_clk_buf
1612*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h19, 2'b11, 16'h0008);
1613*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x102033, 0x00);
1614*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x102032, 0x08);
1615*53ee8cc1Swenshuai.xi 
1616*53ee8cc1Swenshuai.xi 
1617*53ee8cc1Swenshuai.xi // [4:0]: reg_ckg_dvbs2_oppro
1618*53ee8cc1Swenshuai.xi //         DVBS2 OPPRO clock control register;
1619*53ee8cc1Swenshuai.xi //         [0]=1:gate clock,
1620*53ee8cc1Swenshuai.xi //         [1]=1:invert clock.
1621*53ee8cc1Swenshuai.xi //         [4:2]: clock rate sel.
1622*53ee8cc1Swenshuai.xi //         0: mpll_clk216_buf
1623*53ee8cc1Swenshuai.xi //         1: mpll_clk172p8_buf
1624*53ee8cc1Swenshuai.xi //         2: mpll_clk144_buf
1625*53ee8cc1Swenshuai.xi //         3: mpll_clk96_buf
1626*53ee8cc1Swenshuai.xi //         4: mpll_clk72_buf
1627*53ee8cc1Swenshuai.xi //         5: adc_clk_buf
1628*53ee8cc1Swenshuai.xi // [12:8]: reg_ckg_dvbtm_ts_in_adc
1629*53ee8cc1Swenshuai.xi //         DVBTM ts_in sram share clock control register;
1630*53ee8cc1Swenshuai.xi //         [0]=1:gate clock,
1631*53ee8cc1Swenshuai.xi //         [1]=1:invert clock.
1632*53ee8cc1Swenshuai.xi //         [4:2]: clock rate sel.
1633*53ee8cc1Swenshuai.xi //         0: clk_dvbs_rs_p
1634*53ee8cc1Swenshuai.xi //         1: mpll_clk48_buf
1635*53ee8cc1Swenshuai.xi //         2: mpll_clk43_buf
1636*53ee8cc1Swenshuai.xi //         3: clk_dvbs_outer1x_pre_mux4
1637*53ee8cc1Swenshuai.xi //         4: clk_dvbs2_oppro_pre_mux4
1638*53ee8cc1Swenshuai.xi //         5: clk_dvbtc_outer2x_c_p
1639*53ee8cc1Swenshuai.xi //         6: adc_clk_buf
1640*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h1a, 2'b11, 16'h1800);
1641*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x102035, 0x18);
1642*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x102034, 0x00);
1643*53ee8cc1Swenshuai.xi 
1644*53ee8cc1Swenshuai.xi 
1645*53ee8cc1Swenshuai.xi // @0x3515
1646*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbs2_bch
1647*53ee8cc1Swenshuai.xi //         DVBS2 BCH clock control register;
1648*53ee8cc1Swenshuai.xi //         [0]=1:gate clock,
1649*53ee8cc1Swenshuai.xi //         [1]=1:invert clock.
1650*53ee8cc1Swenshuai.xi //         [4:2]: clock rate sel.
1651*53ee8cc1Swenshuai.xi //         0: mpll_clk216_buf
1652*53ee8cc1Swenshuai.xi //         1: mpll_clk172p8_buf
1653*53ee8cc1Swenshuai.xi //         2: mpll_clk144_buf
1654*53ee8cc1Swenshuai.xi //         3: mpll_clk96_bu4
1655*53ee8cc1Swenshuai.xi //         4: mpll_clk72_buf
1656*53ee8cc1Swenshuai.xi //         5: adc_clk_buf
1657*53ee8cc1Swenshuai.xi // [12:8] : reg_ckg_dvbs2_bch_rs_adc
1658*53ee8cc1Swenshuai.xi //         [8] : disable clock
1659*53ee8cc1Swenshuai.xi //         [9] : invert clock
1660*53ee8cc1Swenshuai.xi //         [11:10] : Select clock source
1661*53ee8cc1Swenshuai.xi //               00:  clk_dvbs2_bch_pre_mux4
1662*53ee8cc1Swenshuai.xi //               01:  clk_dvbs_rs_p
1663*53ee8cc1Swenshuai.xi //               10:  adc_clk_buf
1664*53ee8cc1Swenshuai.xi //               11:
1665*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h15, 2'b11, 16'h0800);
1666*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x10202b, 0x08);
1667*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x10202a, 0x00);
1668*53ee8cc1Swenshuai.xi 
1669*53ee8cc1Swenshuai.xi 
1670*53ee8cc1Swenshuai.xi 
1671*53ee8cc1Swenshuai.xi // @0x3516
1672*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbtc_outer2x_c
1673*53ee8cc1Swenshuai.xi //         [0]  : disable clock
1674*53ee8cc1Swenshuai.xi //         [1]  : invert clock
1675*53ee8cc1Swenshuai.xi //         [4:2]: Select clock source
1676*53ee8cc1Swenshuai.xi //               000:  clk_dmplldiv10_buf
1677*53ee8cc1Swenshuai.xi //               001:  clk_dmplldiv10_div2_buf
1678*53ee8cc1Swenshuai.xi //               010:  clk_dmdadc
1679*53ee8cc1Swenshuai.xi //               011:  clk_dmdadc_div2_buf
1680*53ee8cc1Swenshuai.xi //               100:  clk_dmplldiv2_div8_buf
1681*53ee8cc1Swenshuai.xi //               101:  mpll_clk96_buf
1682*53ee8cc1Swenshuai.xi //               110:  mpll_clk48_buf
1683*53ee8cc1Swenshuai.xi //               110:  1'b0
1684*53ee8cc1Swenshuai.xi // [11:8] : reg_ckg_adcd_dvbs_rs
1685*53ee8cc1Swenshuai.xi //         [8] : disable clock
1686*53ee8cc1Swenshuai.xi //         [9] : invert clock
1687*53ee8cc1Swenshuai.xi //         [11:10] : Select clock source
1688*53ee8cc1Swenshuai.xi //               00:  adc_clk_buf
1689*53ee8cc1Swenshuai.xi //               01:  clk_dvbs_rs_p
1690*53ee8cc1Swenshuai.xi //               10:  mpll_clk18_buf
1691*53ee8cc1Swenshuai.xi //               11:
1692*53ee8cc1Swenshuai.xi   // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h16, 2'b10, 16'h0001);
1693*53ee8cc1Swenshuai.xi   HAL_DMD_RIU_WriteByte(0x10202d, 0x00);
1694*53ee8cc1Swenshuai.xi 
1695*53ee8cc1Swenshuai.xi // @0x3513
1696*53ee8cc1Swenshuai.xi // [4:0] : reg_ckg_dvbtm_ts_in
1697*53ee8cc1Swenshuai.xi //         [0]  : disable clock
1698*53ee8cc1Swenshuai.xi //         [1]  : invert clock
1699*53ee8cc1Swenshuai.xi //         [4:2]: Select clock source
1700*53ee8cc1Swenshuai.xi //                000:  clk_dvbtc_rs_p
1701*53ee8cc1Swenshuai.xi //                001:  dvb_clk48_buf
1702*53ee8cc1Swenshuai.xi //                010:  dvb_clk43_buf
1703*53ee8cc1Swenshuai.xi //                011:  clk_dvbs_outer1x_pre_mux4
1704*53ee8cc1Swenshuai.xi //                100:  clk_dvbs2_oppro_pre_mux4
1705*53ee8cc1Swenshuai.xi //                101:  1'b0
1706*53ee8cc1Swenshuai.xi //                110:  1'b0
1707*53ee8cc1Swenshuai.xi //                111:  1'b0
1708*53ee8cc1Swenshuai.xi // [11:8] : reg_ckg_dvbs2_diseqc
1709*53ee8cc1Swenshuai.xi //         [8] : disable clock
1710*53ee8cc1Swenshuai.xi //         [9] : invert clock
1711*53ee8cc1Swenshuai.xi //         [11:10] : Select clock source
1712*53ee8cc1Swenshuai.xi //               00:  xtali_clk24_buf
1713*53ee8cc1Swenshuai.xi //               01:  xtali_clk12_buf
1714*53ee8cc1Swenshuai.xi //               10:  xtali_clk6_buf
1715*53ee8cc1Swenshuai.xi //               11:  xtali_clk3
1716*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CLKGEN_DMD>>1)+7'h13, 2'b11, 16'h0010);
1717*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102027, 0x00);
1718*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x102026, 0x00);
1719*53ee8cc1Swenshuai.xi 
1720*53ee8cc1Swenshuai.xi // ("==============================================================");
1721*53ee8cc1Swenshuai.xi // ("End demod top initial setting by HK MCU ......");
1722*53ee8cc1Swenshuai.xi // ("==============================================================");
1723*53ee8cc1Swenshuai.xi 
1724*53ee8cc1Swenshuai.xi // ===============================================================
1725*53ee8cc1Swenshuai.xi // Select reg_DMDTOP and reg_DMDANA are controlled by DMD MCU
1726*53ee8cc1Swenshuai.xi // ===============================================================
1727*53ee8cc1Swenshuai.xi // [8] : reg_chiptop_dummy_0 (reg_dmdtop_dmd_sel)
1728*53ee8cc1Swenshuai.xi //       1'b0->reg_DMDTOP control by HK_MCU.
1729*53ee8cc1Swenshuai.xi //       1'b1->reg_DMDTOP control by DMD_MCU.
1730*53ee8cc1Swenshuai.xi // [9] : reg_chiptop_dummy_0 (reg_dmd_ana_regsel)
1731*53ee8cc1Swenshuai.xi //       1'b0->reg_DMDANA control by HK_MCU.
1732*53ee8cc1Swenshuai.xi //       1'b1->reg_DMDANA control by DMD_MCU.
1733*53ee8cc1Swenshuai.xi // ("select DMD MCU ......");
1734*53ee8cc1Swenshuai.xi // `RIU_W((`RIUBASE_CHIP>>1)+7'h1c, 2'b10, 16'h0300);  //  select DMD MCU
1735*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x101e39, 0x03);
1736*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103c0e, 0x01);
1737*53ee8cc1Swenshuai.xi 
1738*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_InitClkgen\n"));
1739*53ee8cc1Swenshuai.xi }
1740*53ee8cc1Swenshuai.xi 
1741*53ee8cc1Swenshuai.xi /***********************************************************************************
1742*53ee8cc1Swenshuai.xi   Subject:    Power on initialized function
1743*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_Power_On_Initialization
1744*53ee8cc1Swenshuai.xi   Parmeter:
1745*53ee8cc1Swenshuai.xi   Return:     MS_BOOL
1746*53ee8cc1Swenshuai.xi   Remark:
1747*53ee8cc1Swenshuai.xi ************************************************************************************/
INTERN_DVBS_Power_On_Initialization(MS_BOOL bRFAGCTristateEnable,MS_U8 u8ADCIQMode,MS_U8 u8PadSel,MS_BOOL bPGAEnable,MS_U8 u8PGAGain,const MS_U8 * u8DMD_DVBS_DSPRegInitExt,MS_U8 u8DMD_DVBS_DSPRegInitSize)1748*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Power_On_Initialization(MS_BOOL bRFAGCTristateEnable, MS_U8 u8ADCIQMode, MS_U8 u8PadSel, MS_BOOL bPGAEnable, MS_U8 u8PGAGain, const MS_U8 *u8DMD_DVBS_DSPRegInitExt, MS_U8 u8DMD_DVBS_DSPRegInitSize)
1749*53ee8cc1Swenshuai.xi {
1750*53ee8cc1Swenshuai.xi     MS_U8       status = true;
1751*53ee8cc1Swenshuai.xi     //MS_U8        u8ChipVersion;
1752*53ee8cc1Swenshuai.xi 
1753*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_Power_On_Initialization\n"));
1754*53ee8cc1Swenshuai.xi 
1755*53ee8cc1Swenshuai.xi #if defined(PWS_ENABLE)
1756*53ee8cc1Swenshuai.xi     Mapi_PWS_Stop_VDMCU();
1757*53ee8cc1Swenshuai.xi #endif
1758*53ee8cc1Swenshuai.xi     INTERN_DVBS_InitClkgen(bRFAGCTristateEnable);//~~ no modify
1759*53ee8cc1Swenshuai.xi     HAL_DMD_ADC_IQ_Switch(u8ADCIQMode, u8PadSel, bPGAEnable, u8PGAGain);//~~ no modify
1760*53ee8cc1Swenshuai.xi 
1761*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","@@@@@INTERN_DVBS_Power_On_Initialization1:bRFAGCTristateEnable=%d ;u8ADCIQMode=%d \n",bRFAGCTristateEnable,u8ADCIQMode));
1762*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","@@@@@INTERN_DVBS_Power_On_Initialization2:u8PadSel=%d ;bPGAEnable=%d \n",u8PadSel,bPGAEnable));
1763*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","@@@@@INTERN_DVBS_Power_On_Initialization2:u8PGAGain=%d \n",u8PGAGain));
1764*53ee8cc1Swenshuai.xi 
1765*53ee8cc1Swenshuai.xi     //// Firmware download //////////
1766*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS Load DSP...\n"));
1767*53ee8cc1Swenshuai.xi     //MsOS_DelayTask(100);
1768*53ee8cc1Swenshuai.xi 
1769*53ee8cc1Swenshuai.xi     {
1770*53ee8cc1Swenshuai.xi         if (INTERN_DVBS_LoadDSPCode() == FALSE)
1771*53ee8cc1Swenshuai.xi         {
1772*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","DVB-S Load DSP Code Fail\n"));
1773*53ee8cc1Swenshuai.xi             return FALSE;
1774*53ee8cc1Swenshuai.xi         }
1775*53ee8cc1Swenshuai.xi         else
1776*53ee8cc1Swenshuai.xi         {
1777*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","DVB-S Load DSP Code OK\n"));
1778*53ee8cc1Swenshuai.xi         }
1779*53ee8cc1Swenshuai.xi     }
1780*53ee8cc1Swenshuai.xi 
1781*53ee8cc1Swenshuai.xi     // For VCM
1782*53ee8cc1Swenshuai.xi 
1783*53ee8cc1Swenshuai.xi     // Set VCM option
1784*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_VCM_OPT, u8VCM_Enabled_Opt);
1785*53ee8cc1Swenshuai.xi 
1786*53ee8cc1Swenshuai.xi     if(u8VCM_Enabled_Opt == VCM_Forced_Mode)
1787*53ee8cc1Swenshuai.xi     {
1788*53ee8cc1Swenshuai.xi         // assign IS-ID
1789*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_IS_ID, u8Default_VCM_IS_ID);
1790*53ee8cc1Swenshuai.xi     }
1791*53ee8cc1Swenshuai.xi 
1792*53ee8cc1Swenshuai.xi     //// MCU Reset //////////
1793*53ee8cc1Swenshuai.xi     if (INTERN_DVBS_Reset() == FALSE)
1794*53ee8cc1Swenshuai.xi     {
1795*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS Reset...Fail\n"));
1796*53ee8cc1Swenshuai.xi         return FALSE;
1797*53ee8cc1Swenshuai.xi     }
1798*53ee8cc1Swenshuai.xi     else
1799*53ee8cc1Swenshuai.xi     {
1800*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS Reset...OK\n"));
1801*53ee8cc1Swenshuai.xi     }
1802*53ee8cc1Swenshuai.xi 
1803*53ee8cc1Swenshuai.xi 
1804*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_DSPReg_Init(u8DMD_DVBS_DSPRegInitExt, u8DMD_DVBS_DSPRegInitSize);
1805*53ee8cc1Swenshuai.xi     //status &= INTERN_DVBS_Active(ENABLE);//enable this
1806*53ee8cc1Swenshuai.xi 
1807*53ee8cc1Swenshuai.xi     //Read Demod FW Version.
1808*53ee8cc1Swenshuai.xi     INTERN_DVBS_Show_Demod_Version();
1809*53ee8cc1Swenshuai.xi 
1810*53ee8cc1Swenshuai.xi 
1811*53ee8cc1Swenshuai.xi     return status;
1812*53ee8cc1Swenshuai.xi }
1813*53ee8cc1Swenshuai.xi 
1814*53ee8cc1Swenshuai.xi /************************************************************************************************
1815*53ee8cc1Swenshuai.xi   Subject:    Driving control
1816*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBC_Driving_Control
1817*53ee8cc1Swenshuai.xi   Parmeter:   bInversionEnable : TRUE For High
1818*53ee8cc1Swenshuai.xi   Return:      void
1819*53ee8cc1Swenshuai.xi   Remark:
1820*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_Driving_Control(MS_BOOL bEnable)1821*53ee8cc1Swenshuai.xi void INTERN_DVBS_Driving_Control(MS_BOOL bEnable)
1822*53ee8cc1Swenshuai.xi {
1823*53ee8cc1Swenshuai.xi     MS_U8    u8Temp;
1824*53ee8cc1Swenshuai.xi 
1825*53ee8cc1Swenshuai.xi     u8Temp = HAL_DMD_RIU_ReadByte(0x101E10);
1826*53ee8cc1Swenshuai.xi 
1827*53ee8cc1Swenshuai.xi     if (bEnable)
1828*53ee8cc1Swenshuai.xi     {
1829*53ee8cc1Swenshuai.xi         u8Temp = u8Temp | 0x01; //bit0: clk, bit1~8:data , bit9: sync, bit10:valid
1830*53ee8cc1Swenshuai.xi     }
1831*53ee8cc1Swenshuai.xi     else
1832*53ee8cc1Swenshuai.xi     {
1833*53ee8cc1Swenshuai.xi         u8Temp = u8Temp & (~0x01);
1834*53ee8cc1Swenshuai.xi     }
1835*53ee8cc1Swenshuai.xi 
1836*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","---> INTERN_DVBS_Driving_Control(Bit0) = 0x%x \n",u8Temp));
1837*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x101E10, u8Temp);
1838*53ee8cc1Swenshuai.xi }
1839*53ee8cc1Swenshuai.xi 
1840*53ee8cc1Swenshuai.xi /************************************************************************************************
1841*53ee8cc1Swenshuai.xi   Subject:    Interrupt mode
1842*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_Demod_Interrupt_Monitor
1843*53ee8cc1Swenshuai.xi   Parmeter:
1844*53ee8cc1Swenshuai.xi   Return:      MS_BOOL
1845*53ee8cc1Swenshuai.xi   Remark:
1846*53ee8cc1Swenshuai.xi *************************************************************************************************/
1847*53ee8cc1Swenshuai.xi 
INTERN_DVBS_Demod_Interrupt_Monitor(MS_U8 * pu8IntType)1848*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Demod_Interrupt_Monitor(MS_U8* pu8IntType)
1849*53ee8cc1Swenshuai.xi {
1850*53ee8cc1Swenshuai.xi         MS_U8 u8_interrupt_type = 0;
1851*53ee8cc1Swenshuai.xi         MS_BOOL bRet= TRUE;
1852*53ee8cc1Swenshuai.xi         MS_U8 u8Data = 0;
1853*53ee8cc1Swenshuai.xi 
1854*53ee8cc1Swenshuai.xi         // For VCM
1855*53ee8cc1Swenshuai.xi         MS_U8 IS_ID = 0;
1856*53ee8cc1Swenshuai.xi         MS_U8 IS_ID_Table[32];
1857*53ee8cc1Swenshuai.xi 
1858*53ee8cc1Swenshuai.xi 	//MS_U8 u8TsDiv = 1;
1859*53ee8cc1Swenshuai.xi 	//MS_FLOAT temp = 0;
1860*53ee8cc1Swenshuai.xi 
1861*53ee8cc1Swenshuai.xi 	DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_Demod_Interrupt_Monitor\n"));
1862*53ee8cc1Swenshuai.xi 
1863*53ee8cc1Swenshuai.xi 	bRet &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_LOCK_COUNT, &u8Data);
1864*53ee8cc1Swenshuai.xi 	//bRet &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &u8Data);
1865*53ee8cc1Swenshuai.xi 
1866*53ee8cc1Swenshuai.xi         switch(u8Data)
1867*53ee8cc1Swenshuai.xi         {
1868*53ee8cc1Swenshuai.xi             case 0: // DVBS2
1869*53ee8cc1Swenshuai.xi             {
1870*53ee8cc1Swenshuai.xi                 u8_interrupt_type = 1;
1871*53ee8cc1Swenshuai.xi                _bDemodType = TRUE;    //S2
1872*53ee8cc1Swenshuai.xi 
1873*53ee8cc1Swenshuai.xi                 if( u8VCM_Enabled_Opt == VCM_MODE && INTERN_DVBS2_VCM_CHECK() )
1874*53ee8cc1Swenshuai.xi                 {
1875*53ee8cc1Swenshuai.xi                     INTERN_DVBS2_Get_IS_ID_INFO(&IS_ID, IS_ID_Table);
1876*53ee8cc1Swenshuai.xi                     INTERN_DVBS2_Set_Default_IS_ID(&IS_ID, IS_ID_Table);
1877*53ee8cc1Swenshuai.xi 
1878*53ee8cc1Swenshuai.xi                     ULOGD("DEMOD",">>>INTERN_DVBS_Demod VCM Default IS ID = %d<<<\n", IS_ID);
1879*53ee8cc1Swenshuai.xi                 }
1880*53ee8cc1Swenshuai.xi 
1881*53ee8cc1Swenshuai.xi                 DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_Demod DVBS2 Interrupt Lock<<<\n"));
1882*53ee8cc1Swenshuai.xi 
1883*53ee8cc1Swenshuai.xi                 //For Auto Test
1884*53ee8cc1Swenshuai.xi                 DBG_INTERN_DVBS(ULOGD("DEMOD","@INTERN_DVBS_Demod Lock+++\n"));
1885*53ee8cc1Swenshuai.xi                 u8DemodLockFlag = 1;
1886*53ee8cc1Swenshuai.xi             }
1887*53ee8cc1Swenshuai.xi             break;
1888*53ee8cc1Swenshuai.xi 
1889*53ee8cc1Swenshuai.xi             case 1: // DVBS
1890*53ee8cc1Swenshuai.xi             {
1891*53ee8cc1Swenshuai.xi                 u8_interrupt_type = 1;
1892*53ee8cc1Swenshuai.xi                 _bDemodType = FALSE;   //S
1893*53ee8cc1Swenshuai.xi                 DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_Demod DVBS Interrupt Lock<<<\n"));
1894*53ee8cc1Swenshuai.xi                 //For Auto Test
1895*53ee8cc1Swenshuai.xi                 DBG_INTERN_DVBS(ULOGD("DEMOD","@INTERN_DVBS_Demod Lock+++\n"));
1896*53ee8cc1Swenshuai.xi                 u8DemodLockFlag = 1;
1897*53ee8cc1Swenshuai.xi             }
1898*53ee8cc1Swenshuai.xi             break;
1899*53ee8cc1Swenshuai.xi 
1900*53ee8cc1Swenshuai.xi             case 2:
1901*53ee8cc1Swenshuai.xi             {
1902*53ee8cc1Swenshuai.xi                 u8_interrupt_type = 2;
1903*53ee8cc1Swenshuai.xi                 DBG_INTERN_DVBS(ULOGD("DEMOD","@INTERN_DVBS_Demod Interrupt UnLock---\n"));
1904*53ee8cc1Swenshuai.xi                 u8DemodLockFlag = 0;
1905*53ee8cc1Swenshuai.xi                 _bTSDataSwap = FALSE;
1906*53ee8cc1Swenshuai.xi             }
1907*53ee8cc1Swenshuai.xi             break;
1908*53ee8cc1Swenshuai.xi 
1909*53ee8cc1Swenshuai.xi             default:
1910*53ee8cc1Swenshuai.xi             {
1911*53ee8cc1Swenshuai.xi                 u8_interrupt_type = 0;
1912*53ee8cc1Swenshuai.xi                 DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_Demod_Interrupt_Monitor Error<<<\n"));
1913*53ee8cc1Swenshuai.xi             }
1914*53ee8cc1Swenshuai.xi             break;
1915*53ee8cc1Swenshuai.xi         }
1916*53ee8cc1Swenshuai.xi 
1917*53ee8cc1Swenshuai.xi #if 0
1918*53ee8cc1Swenshuai.xi 	if((u8Data==0x00) || (u8Data==0x01))//lock
1919*53ee8cc1Swenshuai.xi 	{
1920*53ee8cc1Swenshuai.xi         u8_interrupt_type = 1;
1921*53ee8cc1Swenshuai.xi         if(u8Data==0x01)
1922*53ee8cc1Swenshuai.xi         {
1923*53ee8cc1Swenshuai.xi            _bDemodType=FALSE;   //S
1924*53ee8cc1Swenshuai.xi            DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_Demod DVBS Interrupt Lock<<<\n"));
1925*53ee8cc1Swenshuai.xi         }
1926*53ee8cc1Swenshuai.xi         else
1927*53ee8cc1Swenshuai.xi         {
1928*53ee8cc1Swenshuai.xi            _bDemodType=TRUE;    //S2
1929*53ee8cc1Swenshuai.xi            DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_Demod DVBS2 Interrupt Lock<<<\n"));
1930*53ee8cc1Swenshuai.xi         }
1931*53ee8cc1Swenshuai.xi 
1932*53ee8cc1Swenshuai.xi 
1933*53ee8cc1Swenshuai.xi         INTERN_DVBS_GetTsDivNum(&temp);  //ts_div_num
1934*53ee8cc1Swenshuai.xi         u8TsDiv = temp;
1935*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_GetLock TsClkDivNum = 0x%x<<<\n", u8TsDiv));
1936*53ee8cc1Swenshuai.xi         if (u8TsDiv > 0x1F)
1937*53ee8cc1Swenshuai.xi             u8TsDiv=0x1F;
1938*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103300, u8TsDiv);
1939*53ee8cc1Swenshuai.xi         //Ts Output Enable
1940*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x101eaa,0x10);
1941*53ee8cc1Swenshuai.xi 
1942*53ee8cc1Swenshuai.xi 
1943*53ee8cc1Swenshuai.xi         //For Auto Test
1944*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","@INTERN_DVBS_Demod Lock+++\n"));
1945*53ee8cc1Swenshuai.xi         u8DemodLockFlag=1;
1946*53ee8cc1Swenshuai.xi 
1947*53ee8cc1Swenshuai.xi         if(_bSerialTS==1)
1948*53ee8cc1Swenshuai.xi         {
1949*53ee8cc1Swenshuai.xi            _bTSDataSwap=TRUE;
1950*53ee8cc1Swenshuai.xi            MDrv_SYS_DMD_VD_MBX_ReadReg( (DVBTM_REG_BASE + 0x20*2), &u8Data);//DVBTM_REG_BASE
1951*53ee8cc1Swenshuai.xi            u8Data^=0x20;//h0020    h0020    5    5    reg_ts_data_reverse
1952*53ee8cc1Swenshuai.xi            MDrv_SYS_DMD_VD_MBX_WriteReg( (DVBTM_REG_BASE + 0x20*2), u8Data);
1953*53ee8cc1Swenshuai.xi         }
1954*53ee8cc1Swenshuai.xi     }
1955*53ee8cc1Swenshuai.xi     else if(u8Data==0x02)//unlock
1956*53ee8cc1Swenshuai.xi     {
1957*53ee8cc1Swenshuai.xi         u8_interrupt_type = 2;
1958*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","@INTERN_DVBS_Demod Interrupt UnLock---\n"));
1959*53ee8cc1Swenshuai.xi         u8DemodLockFlag=0;
1960*53ee8cc1Swenshuai.xi         _bTSDataSwap=false;
1961*53ee8cc1Swenshuai.xi     }
1962*53ee8cc1Swenshuai.xi 
1963*53ee8cc1Swenshuai.xi     else if(u8Data==0x03)//update TS
1964*53ee8cc1Swenshuai.xi     {
1965*53ee8cc1Swenshuai.xi         u8_interrupt_type = 3;
1966*53ee8cc1Swenshuai.xi         INTERN_DVBS_GetTsDivNum(&temp);  //ts_div_num
1967*53ee8cc1Swenshuai.xi         u8TsDiv = temp;
1968*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_Demod Interrupt TsClkDivNum = 0x%x<<<\n", u8TsDiv));
1969*53ee8cc1Swenshuai.xi         if (u8TsDiv > 0x1F)
1970*53ee8cc1Swenshuai.xi             u8TsDiv=0x1F;
1971*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103300, u8TsDiv);
1972*53ee8cc1Swenshuai.xi     }
1973*53ee8cc1Swenshuai.xi     else
1974*53ee8cc1Swenshuai.xi     {
1975*53ee8cc1Swenshuai.xi         u8_interrupt_type = 0;
1976*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_Demod_Interrupt_Monitor Error<<<\n"));
1977*53ee8cc1Swenshuai.xi     }
1978*53ee8cc1Swenshuai.xi #endif
1979*53ee8cc1Swenshuai.xi 
1980*53ee8cc1Swenshuai.xi     *pu8IntType = u8_interrupt_type;
1981*53ee8cc1Swenshuai.xi 
1982*53ee8cc1Swenshuai.xi     return bRet;
1983*53ee8cc1Swenshuai.xi }
1984*53ee8cc1Swenshuai.xi 
1985*53ee8cc1Swenshuai.xi /************************************************************************************************
1986*53ee8cc1Swenshuai.xi   Subject:    Clk Inversion control
1987*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_Clk_Inversion_Control
1988*53ee8cc1Swenshuai.xi   Parmeter:   bInversionEnable : TRUE For Inversion Action
1989*53ee8cc1Swenshuai.xi   Return:      void
1990*53ee8cc1Swenshuai.xi   Remark:
1991*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_Clk_Inversion_Control(MS_BOOL bInversionEnable)1992*53ee8cc1Swenshuai.xi void INTERN_DVBS_Clk_Inversion_Control(MS_BOOL bInversionEnable)
1993*53ee8cc1Swenshuai.xi {
1994*53ee8cc1Swenshuai.xi     MS_U8   u8Temp;
1995*53ee8cc1Swenshuai.xi 
1996*53ee8cc1Swenshuai.xi     u8Temp = HAL_DMD_RIU_ReadByte(0x103301);
1997*53ee8cc1Swenshuai.xi 
1998*53ee8cc1Swenshuai.xi     if (bInversionEnable)
1999*53ee8cc1Swenshuai.xi     {
2000*53ee8cc1Swenshuai.xi         u8Temp = u8Temp | 0x02; //bit 9: clk inv
2001*53ee8cc1Swenshuai.xi     }
2002*53ee8cc1Swenshuai.xi     else
2003*53ee8cc1Swenshuai.xi     {
2004*53ee8cc1Swenshuai.xi         u8Temp = u8Temp & (~0x02);
2005*53ee8cc1Swenshuai.xi     }
2006*53ee8cc1Swenshuai.xi 
2007*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","---> Inversion(Bit9) = 0x%x \n",u8Temp));
2008*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(0x103301, u8Temp);
2009*53ee8cc1Swenshuai.xi }
2010*53ee8cc1Swenshuai.xi 
2011*53ee8cc1Swenshuai.xi /************************************************************************************************
2012*53ee8cc1Swenshuai.xi   Subject:    Transport stream serial/parallel control
2013*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_Serial_Control
2014*53ee8cc1Swenshuai.xi   Parmeter:   bEnable : TRUE For serial
2015*53ee8cc1Swenshuai.xi   Return:     MS_BOOL :
2016*53ee8cc1Swenshuai.xi   Remark:
2017*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_Serial_Control(MS_BOOL bEnable,MS_U8 u8TSClk)2018*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Serial_Control(MS_BOOL bEnable, MS_U8 u8TSClk)
2019*53ee8cc1Swenshuai.xi {
2020*53ee8cc1Swenshuai.xi     MS_U8   status = true;
2021*53ee8cc1Swenshuai.xi     MS_U8   temp_val;
2022*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD"," @INTERN_DVBS_ts... u8TSClk=%d\n", u8TSClk));
2023*53ee8cc1Swenshuai.xi 
2024*53ee8cc1Swenshuai.xi     if (u8TSClk == 0xFF) u8TSClk=0x13;
2025*53ee8cc1Swenshuai.xi     if (bEnable)    //Serial mode for TS pad
2026*53ee8cc1Swenshuai.xi     {
2027*53ee8cc1Swenshuai.xi         // serial
2028*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103308, 0x01);   // serial mode: 0x0401
2029*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103309, 0x04);   // reg_ckg_dvbtc_ts@0x04
2030*53ee8cc1Swenshuai.xi 
2031*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103300, 0x00);   // serial mode 0x0400
2032*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2033*53ee8cc1Swenshuai.xi         //HAL_DMD_RIU_WriteByte(0x103301, 0x04);   // reg_ckg_dvbtmk_ts_out_mode@0x00
2034*53ee8cc1Swenshuai.xi         temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2035*53ee8cc1Swenshuai.xi         temp_val|=0x04;
2036*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2037*53ee8cc1Swenshuai.xi #else
2038*53ee8cc1Swenshuai.xi         // HAL_DMD_RIU_WriteByte(0x103301, 0x07);   // reg_ckg_dvbtmk_ts_out_mode@0x00
2039*53ee8cc1Swenshuai.xi         temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2040*53ee8cc1Swenshuai.xi         temp_val|=0x07;
2041*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2042*53ee8cc1Swenshuai.xi #endif
2043*53ee8cc1Swenshuai.xi         //move to drvSYS HAL_DMD_RIU_WriteByte(0x101EA5, HAL_DMD_RIU_ReadByte(0x101EA5)&0xEF);   // PAD_TS1 is used as output
2044*53ee8cc1Swenshuai.xi         //move to drvSYS HAL_DMD_RIU_WriteByte(0x101EAF, HAL_DMD_RIU_ReadByte(0x101EAF)&0xE3);   // PAD_TS1 Disable TS CLK PAD
2045*53ee8cc1Swenshuai.xi 
2046*53ee8cc1Swenshuai.xi         //// INTERN_DVBS TS Control: Serial //////////
2047*53ee8cc1Swenshuai.xi 
2048*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_SERIAL, TS_SERIAL);
2049*53ee8cc1Swenshuai.xi 
2050*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2051*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_OUT_INV, 0);
2052*53ee8cc1Swenshuai.xi #else
2053*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_OUT_INV, 1);
2054*53ee8cc1Swenshuai.xi #endif
2055*53ee8cc1Swenshuai.xi         gsCmdPacketDVBS.cmd_code = CMD_TS_CTRL;
2056*53ee8cc1Swenshuai.xi 
2057*53ee8cc1Swenshuai.xi         gsCmdPacketDVBS.param[0] = TS_SERIAL;
2058*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2059*53ee8cc1Swenshuai.xi         gsCmdPacketDVBS.param[1] = 0;//TS_CLK_NO_INV;
2060*53ee8cc1Swenshuai.xi #else
2061*53ee8cc1Swenshuai.xi         gsCmdPacketDVBS.param[1] = 1;//TS_CLK_INVERSE;
2062*53ee8cc1Swenshuai.xi #endif
2063*53ee8cc1Swenshuai.xi         status &= INTERN_DVBS_Cmd_Packet_Send(&gsCmdPacketDVBS, 2);
2064*53ee8cc1Swenshuai.xi     }
2065*53ee8cc1Swenshuai.xi     else
2066*53ee8cc1Swenshuai.xi     {
2067*53ee8cc1Swenshuai.xi         //parallel
2068*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103308, 0x01);   // parallel mode:0x0001
2069*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103309, 0x00);   // reg_ckg_dvbtc_ts@0x04
2070*53ee8cc1Swenshuai.xi 
2071*53ee8cc1Swenshuai.xi         //HAL_DMD_RIU_WriteByte(0x103300, 0x11);    // parallel mode: 0x0511 => ts_clk=288/(2*(0x11+1))=8MHz
2072*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103300, u8TSClk);   // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
2073*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_PARALLEL_INVERSION == 0)
2074*53ee8cc1Swenshuai.xi         //HAL_DMD_RIU_WriteByte(0x103301, 0x05);   // reg_ckg_dvbtmk_ts_out_mode@0x00
2075*53ee8cc1Swenshuai.xi         temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2076*53ee8cc1Swenshuai.xi         temp_val|=0x05;
2077*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2078*53ee8cc1Swenshuai.xi #else
2079*53ee8cc1Swenshuai.xi         //HAL_DMD_RIU_WriteByte(0x103301, 0x07);   // reg_ckg_dvbtmk_ts_out_mode@0x00
2080*53ee8cc1Swenshuai.xi         temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2081*53ee8cc1Swenshuai.xi         temp_val|=0x07;
2082*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2083*53ee8cc1Swenshuai.xi #endif
2084*53ee8cc1Swenshuai.xi 
2085*53ee8cc1Swenshuai.xi         //move to drvSYS HAL_DMD_RIU_WriteByte(0x101EA5, HAL_DMD_RIU_ReadByte(0x101EA5)|0x10);          // PAD_TS1 is used as output
2086*53ee8cc1Swenshuai.xi         //move to drvSYS HAL_DMD_RIU_WriteByte(0x101EAF, (HAL_DMD_RIU_ReadByte(0x101EAF)&0xC0)|0x11);   // PAD_TS1 enable TS clk pad
2087*53ee8cc1Swenshuai.xi 
2088*53ee8cc1Swenshuai.xi         //// INTERN_DVBS TS Control: Parallel //////////
2089*53ee8cc1Swenshuai.xi 
2090*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_SERIAL, TS_PARALLEL);
2091*53ee8cc1Swenshuai.xi 
2092*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2093*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_OUT_INV, 0);
2094*53ee8cc1Swenshuai.xi #else
2095*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_OUT_INV, 1);
2096*53ee8cc1Swenshuai.xi #endif
2097*53ee8cc1Swenshuai.xi         //// INTERN_DVBC TS Control: Parallel //////////
2098*53ee8cc1Swenshuai.xi         gsCmdPacketDVBS.cmd_code = CMD_TS_CTRL;
2099*53ee8cc1Swenshuai.xi 
2100*53ee8cc1Swenshuai.xi         gsCmdPacketDVBS.param[0] = TS_PARALLEL;
2101*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_PARALLEL_INVERSION == 0)
2102*53ee8cc1Swenshuai.xi         gsCmdPacketDVBS.param[1] = 0;//TS_CLK_NO_INV;
2103*53ee8cc1Swenshuai.xi #else
2104*53ee8cc1Swenshuai.xi         gsCmdPacketDVBS.param[1] = 1;//TS_CLK_INVERSE;
2105*53ee8cc1Swenshuai.xi #endif
2106*53ee8cc1Swenshuai.xi         status &= INTERN_DVBS_Cmd_Packet_Send(&gsCmdPacketDVBS, 2);
2107*53ee8cc1Swenshuai.xi     }
2108*53ee8cc1Swenshuai.xi 
2109*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2110*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","---> Inversion(Bit5) = %d \n",0 ));
2111*53ee8cc1Swenshuai.xi #else
2112*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","---> Inversion(Bit5) = %d \n",1 ));
2113*53ee8cc1Swenshuai.xi #endif
2114*53ee8cc1Swenshuai.xi 
2115*53ee8cc1Swenshuai.xi     INTERN_DVBS_Driving_Control(INTERN_DVBS_DTV_DRIVING_LEVEL);
2116*53ee8cc1Swenshuai.xi     return status;
2117*53ee8cc1Swenshuai.xi }
2118*53ee8cc1Swenshuai.xi 
2119*53ee8cc1Swenshuai.xi /************************************************************************************************
2120*53ee8cc1Swenshuai.xi   Subject:    TS1 output control
2121*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_PAD_TS1_Enable
2122*53ee8cc1Swenshuai.xi   Parmeter:   flag : TRUE For Turn on TS1, FALSE For Turn off TS1
2123*53ee8cc1Swenshuai.xi   Return:     void
2124*53ee8cc1Swenshuai.xi   Remark:
2125*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_PAD_TS1_Enable(MS_BOOL flag)2126*53ee8cc1Swenshuai.xi void INTERN_DVBS_PAD_TS1_Enable(MS_BOOL flag)
2127*53ee8cc1Swenshuai.xi {
2128*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD"," @INTERN_DVBS_TS1_Enable... \n"));
2129*53ee8cc1Swenshuai.xi 
2130*53ee8cc1Swenshuai.xi     if(flag) // PAD_TS1 Enable TS CLK PAD
2131*53ee8cc1Swenshuai.xi     {
2132*53ee8cc1Swenshuai.xi         //printf("=== TS1_Enable ===\n");
2133*53ee8cc1Swenshuai.xi         //HAL_DMD_RIU_WriteByte(0x101EA5, HAL_DMD_RIU_ReadByte(0x101EA5)|0x10);   //For T3
2134*53ee8cc1Swenshuai.xi         //HAL_DMD_RIU_WriteByte(0x101EAF, HAL_DMD_RIU_ReadByte(0x101EAF)|0x18);   //For T4
2135*53ee8cc1Swenshuai.xi         //move to drvSYS HAL_DMD_RIU_WriteByte(0x101EAF, HAL_DMD_RIU_ReadByte(0x101EAF)|0x11);   //For T8
2136*53ee8cc1Swenshuai.xi     }
2137*53ee8cc1Swenshuai.xi     else // PAD_TS1 Disable TS CLK PAD
2138*53ee8cc1Swenshuai.xi     {
2139*53ee8cc1Swenshuai.xi         //printf("=== TS1_Disable ===\n");
2140*53ee8cc1Swenshuai.xi         //HAL_DMD_RIU_WriteByte(0x101EA5, HAL_DMD_RIU_ReadByte(0x101EA5)&0xEF);   //For T3
2141*53ee8cc1Swenshuai.xi         //HAL_DMD_RIU_WriteByte(0x101EAF, HAL_DMD_RIU_ReadByte(0x101EAF)&0xE3);   //For T4
2142*53ee8cc1Swenshuai.xi         //move to drvSYS HAL_DMD_RIU_WriteByte(0x101EAF, HAL_DMD_RIU_ReadByte(0x101EAF)&0xC0);   //For T8
2143*53ee8cc1Swenshuai.xi     }
2144*53ee8cc1Swenshuai.xi }
2145*53ee8cc1Swenshuai.xi 
2146*53ee8cc1Swenshuai.xi /************************************************************************************************
2147*53ee8cc1Swenshuai.xi   Subject:    channel change config
2148*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBC_Config
2149*53ee8cc1Swenshuai.xi   Parmeter:   BW: bandwidth
2150*53ee8cc1Swenshuai.xi   Return:     MS_BOOL :
2151*53ee8cc1Swenshuai.xi   Remark:
2152*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_Config(MS_U32 u32SymbolRate,DMD_DVBS_MODULATION_TYPE eQamMode,MS_U32 u32IFFreq,MS_BOOL bSpecInv,MS_BOOL bSerialTS,MS_U8 u8TSClk,MS_U16 * pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)2153*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Config(MS_U32 u32SymbolRate, DMD_DVBS_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS, MS_U8 u8TSClk, MS_U16 *pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)
2154*53ee8cc1Swenshuai.xi {
2155*53ee8cc1Swenshuai.xi 
2156*53ee8cc1Swenshuai.xi     MS_BOOL         status= true;
2157*53ee8cc1Swenshuai.xi     MS_U16          u16CenterFreq;
2158*53ee8cc1Swenshuai.xi     // MS_U16       u16Fc = 0;
2159*53ee8cc1Swenshuai.xi     MS_U8             temp_val;
2160*53ee8cc1Swenshuai.xi     MS_U8           u8Data =0;
2161*53ee8cc1Swenshuai.xi     MS_U8           u8counter = 0;
2162*53ee8cc1Swenshuai.xi     //MS_U32          u32CurrentSR;
2163*53ee8cc1Swenshuai.xi 
2164*53ee8cc1Swenshuai.xi     //u32CurrentSR = u32SymbolRate/1000;  //KHz
2165*53ee8cc1Swenshuai.xi 
2166*53ee8cc1Swenshuai.xi     //u32SymbolRate= u32SymbolRate/1000;//to match fw format
2167*53ee8cc1Swenshuai.xi     u16CenterFreq  =u32IFFreq;
2168*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD"," @INTERN_DVBS_config+, QAM=%d, u32IFFreq=%d, bSpecInv=%d, bSerialTS=%d, u8TSClk=%d\n", eQamMode, u32IFFreq, bSpecInv, bSerialTS, u8TSClk));
2169*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_Config, t = %d\n",MsOS_GetSystemTime()));
2170*53ee8cc1Swenshuai.xi 
2171*53ee8cc1Swenshuai.xi     u8TSClk=0x05;//if (u8TSClk == 0xFF) u8TSClk=0x13;//set a fater speed for initial condition
2172*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_Reset();
2173*53ee8cc1Swenshuai.xi 
2174*53ee8cc1Swenshuai.xi     u8DemodLockFlag=0;
2175*53ee8cc1Swenshuai.xi /*
2176*53ee8cc1Swenshuai.xi     // Symbol Rate
2177*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L, u32CurrentSR&0xff);
2178*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H, (u32CurrentSR>>8)&0xff);
2179*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_DMDTOP_DBG_5, (u32CurrentSR>>16)&0xff);
2180*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf(">>>INTERN_DVBS_Config u32SymbolRate %d<<<\n", u32CurrentSR));
2181*53ee8cc1Swenshuai.xi */
2182*53ee8cc1Swenshuai.xi #if 0
2183*53ee8cc1Swenshuai.xi     //========  check SR is right or not ===========
2184*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L, &u8Data);
2185*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf(">>>Mailbox read: E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L addr=%d    mailbox value=%d<<<\n", E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L,u8Data));
2186*53ee8cc1Swenshuai.xi     u32SR =u8Data;
2187*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H, &u8Data);
2188*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf(">>>Mailbox read: E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H addr=%d    mailbox value=%d<<<\n", E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H,u8Data));
2189*53ee8cc1Swenshuai.xi     u32SR =((U32)u8Data<<8)|u32SR  ;
2190*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_5, &u8Data);
2191*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf(">>>Mailbox read: E_DMD_S2_MB_DMDTOP_DBG_5 addr=%d    mailbox value=%d<<<\n", E_DMD_S2_MB_DMDTOP_DBG_5,u8Data));
2192*53ee8cc1Swenshuai.xi     u32SR =((U32)u8Data<<16)|u32SR;
2193*53ee8cc1Swenshuai.xi     //=================================================
2194*53ee8cc1Swenshuai.xi #endif
2195*53ee8cc1Swenshuai.xi 
2196*53ee8cc1Swenshuai.xi     // IQ Swap ,ADCPLL IQ swap / DMDANA_IQ_SWAP
2197*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_IQ_SWAP, bSpecInv? 0x01:0x00);
2198*53ee8cc1Swenshuai.xi     if(bSpecInv)
2199*53ee8cc1Swenshuai.xi     {
2200*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DMDANA_REG_BASE+0xC0, &u8Data);//Demod\reg_dmdana.xls
2201*53ee8cc1Swenshuai.xi         u8Data|=(0x02);
2202*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DMDANA_REG_BASE+0xC0, u8Data);
2203*53ee8cc1Swenshuai.xi     }
2204*53ee8cc1Swenshuai.xi 
2205*53ee8cc1Swenshuai.xi     // TS mode
2206*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_SERIAL, bSerialTS? 0x01:0x00);
2207*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_Config TS Serial %d<<<\n", bSerialTS));
2208*53ee8cc1Swenshuai.xi     _bSerialTS = bSerialTS;
2209*53ee8cc1Swenshuai.xi 
2210*53ee8cc1Swenshuai.xi     if (bSerialTS)
2211*53ee8cc1Swenshuai.xi     {
2212*53ee8cc1Swenshuai.xi         // serial
2213*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103308, 0x01);   // parallel mode:0x0001 / serial mode: 0x0401
2214*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103309, 0x04);   // reg_ckg_dvbtc_ts@0x04
2215*53ee8cc1Swenshuai.xi 
2216*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103300, 0x00);   // parallel mode: 0x0511 /serial mode 0x0400
2217*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2218*53ee8cc1Swenshuai.xi         temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2219*53ee8cc1Swenshuai.xi         temp_val|=0x04;
2220*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2221*53ee8cc1Swenshuai.xi #else
2222*53ee8cc1Swenshuai.xi         temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2223*53ee8cc1Swenshuai.xi         temp_val|=0x07;
2224*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2225*53ee8cc1Swenshuai.xi #endif
2226*53ee8cc1Swenshuai.xi     }
2227*53ee8cc1Swenshuai.xi     else
2228*53ee8cc1Swenshuai.xi     {
2229*53ee8cc1Swenshuai.xi         //parallel
2230*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103308, 0x01);   // parallel mode:0x0001 / serial mode: 0x0401
2231*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103309, 0x00);   // reg_ckg_dvbtc_ts@0x04
2232*53ee8cc1Swenshuai.xi 
2233*53ee8cc1Swenshuai.xi         //HAL_DMD_RIU_WriteByte(0x103300, 0x11);   // parallel mode: 0x0511 => ts_clk=288/(2*(0x11+1))=8MHz
2234*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103300, u8TSClk);  // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
2235*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_PARALLEL_INVERSION == 0)
2236*53ee8cc1Swenshuai.xi         temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2237*53ee8cc1Swenshuai.xi         temp_val|=0x05;
2238*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2239*53ee8cc1Swenshuai.xi #else
2240*53ee8cc1Swenshuai.xi         temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2241*53ee8cc1Swenshuai.xi         temp_val|=0x07;
2242*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2243*53ee8cc1Swenshuai.xi #endif
2244*53ee8cc1Swenshuai.xi     }
2245*53ee8cc1Swenshuai.xi #if (INTERN_DVBS_INTERNAL_DEBUG == 1)
2246*53ee8cc1Swenshuai.xi     INTERN_DVBS_Show_Demod_Version();
2247*53ee8cc1Swenshuai.xi #endif
2248*53ee8cc1Swenshuai.xi 
2249*53ee8cc1Swenshuai.xi     //-----------------------------------------------------------
2250*53ee8cc1Swenshuai.xi     //From INTERN_DVBS_Demod_Restart function.
2251*53ee8cc1Swenshuai.xi 
2252*53ee8cc1Swenshuai.xi     //FW sw reset
2253*53ee8cc1Swenshuai.xi     //[0]: 0: SW Reset, 1: Start state machine
2254*53ee8cc1Swenshuai.xi     //[1]: 1: Blind scan enable, 0: manual scan
2255*53ee8cc1Swenshuai.xi     //[2]: 1: Code flow track enable
2256*53ee8cc1Swenshuai.xi     //[3]: 1: go to AGC state
2257*53ee8cc1Swenshuai.xi     //[4]: 1: set DiSEqC
2258*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg((TOP_REG_BASE + 0x60*2), &u8Data);
2259*53ee8cc1Swenshuai.xi     u8Data = (u8Data&0xF0)|0x01;
2260*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg((TOP_REG_BASE + 0x60*2), u8Data);
2261*53ee8cc1Swenshuai.xi     //DBG_INTERN_DVBS(printf(">>>REG write check: addr=%d    value=%d<<<\n",(TOP_REG_BASE + 0x60*2), u8Data));
2262*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg((TOP_REG_BASE + 0x60*2), &u8Data);
2263*53ee8cc1Swenshuai.xi     //DBG_INTERN_DVBS(printf(">>>REG read check: addr=%d    value=%d<<<\n",(TOP_REG_BASE + 0x60*2), u8Data));
2264*53ee8cc1Swenshuai.xi 
2265*53ee8cc1Swenshuai.xi     u8counter = 20;
2266*53ee8cc1Swenshuai.xi     while( ((u8Data&0x01) == 0x00) && (u8counter != 0) )
2267*53ee8cc1Swenshuai.xi     {
2268*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
2269*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","TOP_WR_DBG_90=0x%x, status=%d, u8counter=%d\n", u8Data, status, u8counter);
2270*53ee8cc1Swenshuai.xi         u8Data|=0x01;
2271*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
2272*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
2273*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD",">>>(while)REG read check: addr=%d    value=%d<<<\n",(TOP_REG_BASE + 0x60*2), u8Data));
2274*53ee8cc1Swenshuai.xi         u8counter--;
2275*53ee8cc1Swenshuai.xi     }
2276*53ee8cc1Swenshuai.xi 
2277*53ee8cc1Swenshuai.xi     if((u8Data & 0x01)==0x00)
2278*53ee8cc1Swenshuai.xi     {
2279*53ee8cc1Swenshuai.xi         status = FALSE;
2280*53ee8cc1Swenshuai.xi     }
2281*53ee8cc1Swenshuai.xi 
2282*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_config done\n"));
2283*53ee8cc1Swenshuai.xi     return status;
2284*53ee8cc1Swenshuai.xi }
2285*53ee8cc1Swenshuai.xi /************************************************************************************************
2286*53ee8cc1Swenshuai.xi   Subject:    channel change config
2287*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_Blind_Scan_Config
2288*53ee8cc1Swenshuai.xi   Parmeter:   BW: bandwidth
2289*53ee8cc1Swenshuai.xi   Return:     MS_BOOL :
2290*53ee8cc1Swenshuai.xi   Remark:
2291*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_BlindScan_Config(MS_U32 u32SymbolRate,DMD_DVBS_MODULATION_TYPE eQamMode,MS_U32 u32IFFreq,MS_BOOL bSpecInv,MS_BOOL bSerialTS,MS_U8 u8TSClk,MS_U16 * pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)2292*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_Config(MS_U32 u32SymbolRate, DMD_DVBS_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS, MS_U8 u8TSClk, MS_U16 *pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)
2293*53ee8cc1Swenshuai.xi {
2294*53ee8cc1Swenshuai.xi 
2295*53ee8cc1Swenshuai.xi     MS_BOOL         status= true;
2296*53ee8cc1Swenshuai.xi     MS_U16          u16CenterFreq;
2297*53ee8cc1Swenshuai.xi     // MS_U16       u16Fc = 0;
2298*53ee8cc1Swenshuai.xi     MS_U8             temp_val;
2299*53ee8cc1Swenshuai.xi     MS_U8           u8Data=0;
2300*53ee8cc1Swenshuai.xi     MS_U16           u16WaitCount = 0;
2301*53ee8cc1Swenshuai.xi 
2302*53ee8cc1Swenshuai.xi     //MS_U32          u32CurrentSR;
2303*53ee8cc1Swenshuai.xi 
2304*53ee8cc1Swenshuai.xi     //u32CurrentSR = u32SymbolRate/1000;  //KHz
2305*53ee8cc1Swenshuai.xi 
2306*53ee8cc1Swenshuai.xi     //u32SymbolRate= u32SymbolRate/1000;//to match fw format
2307*53ee8cc1Swenshuai.xi     u16CenterFreq  =u32IFFreq;
2308*53ee8cc1Swenshuai.xi 
2309*53ee8cc1Swenshuai.xi     //DBG_INTERN_DVBS(printf(" @INTERN_DVBS_blindScan_Config+, SR=%d, QAM=%d, u32IFFreq=%d, bSpecInv=%d, bSerialTS=%d, u8TSClk=%d\n", u32CurrentSR, eQamMode, u32IFFreq, bSpecInv, bSerialTS, u8TSClk));
2310*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_blindScan_Config, t = %d\n",MsOS_GetSystemTime()));
2311*53ee8cc1Swenshuai.xi 
2312*53ee8cc1Swenshuai.xi     //status &= INTERN_DVBS_Reset();
2313*53ee8cc1Swenshuai.xi     /*
2314*53ee8cc1Swenshuai.xi     g_dvbs_lock = 0;
2315*53ee8cc1Swenshuai.xi     u8DemodLockFlag=0;
2316*53ee8cc1Swenshuai.xi     // Symbol Rate
2317*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L, u32CurrentSR&0xff);
2318*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H, (u32CurrentSR>>8)&0xff);
2319*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_DMDTOP_DBG_5, (u32CurrentSR>>16)&0xff);
2320*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf(">>>INTERN_DVBS_Config u32SymbolRate %d<<<\n", u32CurrentSR));
2321*53ee8cc1Swenshuai.xi     */
2322*53ee8cc1Swenshuai.xi #if 0
2323*53ee8cc1Swenshuai.xi     //========  check SR is right or not ===========
2324*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L, &u8Data);
2325*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf(">>>Mailbox read: E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L addr=%d    mailbox value=%d<<<\n", E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L,u8Data));
2326*53ee8cc1Swenshuai.xi     u32SR =u8Data;
2327*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H, &u8Data);
2328*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf(">>>Mailbox read: E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H addr=%d    mailbox value=%d<<<\n", E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H,u8Data));
2329*53ee8cc1Swenshuai.xi     u32SR =((U32)u8Data<<8)|u32SR  ;
2330*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_5, &u8Data);
2331*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf(">>>Mailbox read: E_DMD_S2_MB_DMDTOP_DBG_5 addr=%d    mailbox value=%d<<<\n", E_DMD_S2_MB_DMDTOP_DBG_5,u8Data));
2332*53ee8cc1Swenshuai.xi     u32SR =((U32)u8Data<<16)|u32SR;
2333*53ee8cc1Swenshuai.xi     //=================================================
2334*53ee8cc1Swenshuai.xi #endif
2335*53ee8cc1Swenshuai.xi 
2336*53ee8cc1Swenshuai.xi     // IQ Swap ,ADCPLL IQ swap / DMDANA_IQ_SWAP
2337*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_IQ_SWAP, bSpecInv? 0x01:0x00);
2338*53ee8cc1Swenshuai.xi     if(bSpecInv)
2339*53ee8cc1Swenshuai.xi     {
2340*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DMDANA_REG_BASE+0xC0, &u8Data);//Demod\reg_dmdana.xls
2341*53ee8cc1Swenshuai.xi         u8Data|=(0x02);
2342*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DMDANA_REG_BASE+0xC0, u8Data);
2343*53ee8cc1Swenshuai.xi     }
2344*53ee8cc1Swenshuai.xi 
2345*53ee8cc1Swenshuai.xi     // TS mode
2346*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_TS_SERIAL, bSerialTS? 0x01:0x00);
2347*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_Config TS Serial %d<<<\n", bSerialTS));
2348*53ee8cc1Swenshuai.xi     _bSerialTS = bSerialTS;
2349*53ee8cc1Swenshuai.xi     u8TSClk=0x05;//if (u8TSClk == 0xFF) u8TSClk=0x13;//set a fater speed for initial condition
2350*53ee8cc1Swenshuai.xi 
2351*53ee8cc1Swenshuai.xi     if (bSerialTS)
2352*53ee8cc1Swenshuai.xi     {
2353*53ee8cc1Swenshuai.xi         // serial
2354*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103308, 0x01);   // parallel mode:0x0001 / serial mode: 0x0401
2355*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103309, 0x04);   // reg_ckg_dvbtc_ts@0x04
2356*53ee8cc1Swenshuai.xi 
2357*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103300, 0x00);   // parallel mode: 0x0511 /serial mode 0x0400
2358*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_SERIAL_INVERSION == 0)
2359*53ee8cc1Swenshuai.xi         temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2360*53ee8cc1Swenshuai.xi         temp_val|=0x04;
2361*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2362*53ee8cc1Swenshuai.xi #else
2363*53ee8cc1Swenshuai.xi         temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2364*53ee8cc1Swenshuai.xi         temp_val|=0x07;
2365*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2366*53ee8cc1Swenshuai.xi #endif
2367*53ee8cc1Swenshuai.xi     }
2368*53ee8cc1Swenshuai.xi     else
2369*53ee8cc1Swenshuai.xi     {
2370*53ee8cc1Swenshuai.xi         //parallel
2371*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103308, 0x01);   // parallel mode:0x0001 / serial mode: 0x0401
2372*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103309, 0x00);   // reg_ckg_dvbtc_ts@0x04
2373*53ee8cc1Swenshuai.xi 
2374*53ee8cc1Swenshuai.xi         //HAL_DMD_RIU_WriteByte(0x103300, 0x11);   // parallel mode: 0x0511 => ts_clk=288/(2*(0x11+1))=8MHz
2375*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103300, u8TSClk);  // parallel mode: 0x0513 => ts_clk=288/(2*(0x16+1))=6.26MHz //@@++--
2376*53ee8cc1Swenshuai.xi #if(INTERN_DVBS_TS_PARALLEL_INVERSION == 0)
2377*53ee8cc1Swenshuai.xi         temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2378*53ee8cc1Swenshuai.xi         temp_val|=0x05;
2379*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2380*53ee8cc1Swenshuai.xi #else
2381*53ee8cc1Swenshuai.xi         temp_val=HAL_DMD_RIU_ReadByte(0x103301);
2382*53ee8cc1Swenshuai.xi         temp_val|=0x07;
2383*53ee8cc1Swenshuai.xi         HAL_DMD_RIU_WriteByte(0x103301,temp_val);
2384*53ee8cc1Swenshuai.xi #endif
2385*53ee8cc1Swenshuai.xi     }
2386*53ee8cc1Swenshuai.xi #if (INTERN_DVBS_INTERNAL_DEBUG == 1)
2387*53ee8cc1Swenshuai.xi     INTERN_DVBS_Show_Demod_Version();
2388*53ee8cc1Swenshuai.xi #endif
2389*53ee8cc1Swenshuai.xi 
2390*53ee8cc1Swenshuai.xi     //-----------------------------------------------------------
2391*53ee8cc1Swenshuai.xi     //From INTERN_DVBS_Demod_Restart function.
2392*53ee8cc1Swenshuai.xi 
2393*53ee8cc1Swenshuai.xi     //enable send DiSEqC
2394*53ee8cc1Swenshuai.xi     //[0]: 0: SW Reset, 1: Start state machine
2395*53ee8cc1Swenshuai.xi     //[1]: 1: Blind scan enable, 0: manual scan
2396*53ee8cc1Swenshuai.xi     //[2]: 1: Code flow track enable
2397*53ee8cc1Swenshuai.xi     //[3]: 1: go to AGC state
2398*53ee8cc1Swenshuai.xi     //[4]: 1: set DiSEqC
2399*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg((TOP_REG_BASE + 0x60*2), &u8Data);
2400*53ee8cc1Swenshuai.xi     u8Data |= 0x08;
2401*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg((TOP_REG_BASE + 0x60*2), u8Data);
2402*53ee8cc1Swenshuai.xi 
2403*53ee8cc1Swenshuai.xi     u16WaitCount=0;
2404*53ee8cc1Swenshuai.xi     do
2405*53ee8cc1Swenshuai.xi     {
2406*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_STATE_FLAG, &u8Data);//SubState
2407*53ee8cc1Swenshuai.xi         u16WaitCount++;
2408*53ee8cc1Swenshuai.xi         //DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_NextFreq u8Data:0x%x u16WaitCount:%d\n", u8Data, u16WaitCount));
2409*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
2410*53ee8cc1Swenshuai.xi     }while((u8Data!=0x01)&&(u16WaitCount<INTERN_DVBS_DEMOD_WAIT_TIMEOUT));
2411*53ee8cc1Swenshuai.xi 
2412*53ee8cc1Swenshuai.xi     // disable blind scan
2413*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg((TOP_REG_BASE + 0x60*2), &u8Data);
2414*53ee8cc1Swenshuai.xi     u8Data&=~(0x02);
2415*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg((TOP_REG_BASE + 0x60*2), u8Data);
2416*53ee8cc1Swenshuai.xi 
2417*53ee8cc1Swenshuai.xi     //disble send DiSEqC
2418*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg((TOP_REG_BASE + 0x60*2), &u8Data);
2419*53ee8cc1Swenshuai.xi     u8Data&=~(0x08);
2420*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg((TOP_REG_BASE + 0x60*2), u8Data);
2421*53ee8cc1Swenshuai.xi 
2422*53ee8cc1Swenshuai.xi 
2423*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_blindScan_Config done\n"));
2424*53ee8cc1Swenshuai.xi     return status;
2425*53ee8cc1Swenshuai.xi }
2426*53ee8cc1Swenshuai.xi 
INTERN_DVBS_Power_ON_OFF(MS_U8 bPowerOn)2427*53ee8cc1Swenshuai.xi void INTERN_DVBS_Power_ON_OFF(MS_U8 bPowerOn)
2428*53ee8cc1Swenshuai.xi {
2429*53ee8cc1Swenshuai.xi     bPowerOn = bPowerOn;
2430*53ee8cc1Swenshuai.xi }
2431*53ee8cc1Swenshuai.xi 
INTERN_DVBS_Power_Save(void)2432*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Power_Save(void)
2433*53ee8cc1Swenshuai.xi {
2434*53ee8cc1Swenshuai.xi     return TRUE;
2435*53ee8cc1Swenshuai.xi }
2436*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
2437*53ee8cc1Swenshuai.xi //  END System Info Function
2438*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
2439*53ee8cc1Swenshuai.xi 
2440*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
2441*53ee8cc1Swenshuai.xi //  Get And Show Info Function
2442*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
2443*53ee8cc1Swenshuai.xi /************************************************************************************************
2444*53ee8cc1Swenshuai.xi   Subject:    enable hw to lock channel
2445*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_Active
2446*53ee8cc1Swenshuai.xi   Parmeter:   bEnable
2447*53ee8cc1Swenshuai.xi   Return:     MS_BOOL
2448*53ee8cc1Swenshuai.xi   Remark:
2449*53ee8cc1Swenshuai.xi *************************************************************************************************/
INTERN_DVBS_Active(MS_BOOL bEnable)2450*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Active(MS_BOOL bEnable)
2451*53ee8cc1Swenshuai.xi {
2452*53ee8cc1Swenshuai.xi     MS_U8   status = TRUE;
2453*53ee8cc1Swenshuai.xi     //MS_U8 u8Data;
2454*53ee8cc1Swenshuai.xi 
2455*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD"," @INTERN_DVBS_Active\n"));
2456*53ee8cc1Swenshuai.xi 
2457*53ee8cc1Swenshuai.xi     //// INTERN_DVBS Finite State Machine on/off //////////
2458*53ee8cc1Swenshuai.xi #if 0
2459*53ee8cc1Swenshuai.xi     gsCmdPacketDVBC.cmd_code = CMD_FSM_CTRL;
2460*53ee8cc1Swenshuai.xi 
2461*53ee8cc1Swenshuai.xi     gsCmdPacketDVBS.param[0] = (MS_U8)bEnable;
2462*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_Cmd_Packet_Send(&gsCmdPacketDVBS, 1);
2463*53ee8cc1Swenshuai.xi #else
2464*53ee8cc1Swenshuai.xi 
2465*53ee8cc1Swenshuai.xi     HAL_DMD_RIU_WriteByte(MBRegBase + (0x0e)*2, 0x01); // FSM_EN
2466*53ee8cc1Swenshuai.xi #endif
2467*53ee8cc1Swenshuai.xi 
2468*53ee8cc1Swenshuai.xi     bDMD_DVBS_NoChannelDetectedWithRFPower = FALSE;
2469*53ee8cc1Swenshuai.xi     u32DMD_DVBS_NoChannelTimeAccWithRFPower = 0;
2470*53ee8cc1Swenshuai.xi     return status;
2471*53ee8cc1Swenshuai.xi }
2472*53ee8cc1Swenshuai.xi 
INTERN_DVBS_GetTsDivNum(MS_U32 * u32SymbolRate,MS_U8 * system_type_reg,MS_U8 * code_rate_idx,MS_U8 * fec_type_idx,MS_U8 * pilot_flag,MS_U32 * u32temp,MS_U8 * code_rate_reg)2473*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetTsDivNum(MS_U32 *u32SymbolRate, MS_U8* system_type_reg, MS_U8 *code_rate_idx, MS_U8 *fec_type_idx, MS_U8 *pilot_flag, MS_U32 *u32temp, MS_U8 *code_rate_reg)
2474*53ee8cc1Swenshuai.xi {
2475*53ee8cc1Swenshuai.xi     MS_U8 u8Data = 0;
2476*53ee8cc1Swenshuai.xi     MS_BOOL     status = true;
2477*53ee8cc1Swenshuai.xi     //MS_U32      u32SymbolRate=0;
2478*53ee8cc1Swenshuai.xi     //float       fSymbolRate;
2479*53ee8cc1Swenshuai.xi     //MS_U8 ISSY_EN = 0;
2480*53ee8cc1Swenshuai.xi     //MS_U8 code_rate_idx_temp = 0;
2481*53ee8cc1Swenshuai.xi     //MS_U8 pilot_flag_temp = 0;
2482*53ee8cc1Swenshuai.xi     //MS_U8 fec_type_idx_temp = 0;
2483*53ee8cc1Swenshuai.xi     MS_U8 mod_type_idx = 0;
2484*53ee8cc1Swenshuai.xi     //MS_U16 k_bch_array[2][11] ={
2485*53ee8cc1Swenshuai.xi      //           {16008, 21408, 25728, 32208, 38688, 43040, 48408, 51648, 53840, 57472, 58192},
2486*53ee8cc1Swenshuai.xi      //           { 3072,  5232,  6312,  7032,  9552, 10632, 11712, 12432, 13152, 14232,     0}};
2487*53ee8cc1Swenshuai.xi     //MS_U16 n_ldpc_array[2] = {64800, 16200};
2488*53ee8cc1Swenshuai.xi     //MS_FLOAT pilot_term = 0;
2489*53ee8cc1Swenshuai.xi     //MS_FLOAT k_bch;
2490*53ee8cc1Swenshuai.xi     //MS_FLOAT n_ldpc;
2491*53ee8cc1Swenshuai.xi     //MS_FLOAT ts_div_num_offset = 2.0;
2492*53ee8cc1Swenshuai.xi     //MS_U32 u32Time_start,u32Time_end;
2493*53ee8cc1Swenshuai.xi     //MS_U32 u32temp;
2494*53ee8cc1Swenshuai.xi     //MS_FLOAT pkt_interval;
2495*53ee8cc1Swenshuai.xi     //MS_U8 time_counter=0;
2496*53ee8cc1Swenshuai.xi 
2497*53ee8cc1Swenshuai.xi     MS_U32 current_time = 0;
2498*53ee8cc1Swenshuai.xi     MS_U8 VCM_OPT = VCM_Disabled;
2499*53ee8cc1Swenshuai.xi 
2500*53ee8cc1Swenshuai.xi      INTERN_DVBS_GetCurrentSymbolRate(u32SymbolRate);
2501*53ee8cc1Swenshuai.xi      //fSymbolRate=u32SymbolRate+0.0;///1000.0;//Symbol Rate(KHz)
2502*53ee8cc1Swenshuai.xi      DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetTsDivNum u32SymbolRate=%d\n", *u32SymbolRate));
2503*53ee8cc1Swenshuai.xi //     DMD_DVBS_MODULATION_TYPE pQAMMode;
2504*53ee8cc1Swenshuai.xi 
2505*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &u8Data);//V
2506*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetTsDivNum GetCurrentDemodType E_DMD_S2_SYSTEM_TYPE=%d\n", u8Data));//u8Data:0 is S2;  1 is DVBS
2507*53ee8cc1Swenshuai.xi 
2508*53ee8cc1Swenshuai.xi     //ULOGD("DEMOD","INTERN_DVBS_GetTsDivNum GetCurrentDemodType E_DMD_S2_SYSTEM_TYPE=%d\n", u8Data);
2509*53ee8cc1Swenshuai.xi 
2510*53ee8cc1Swenshuai.xi     *system_type_reg = u8Data;
2511*53ee8cc1Swenshuai.xi     if(!u8Data)//DVBS2
2512*53ee8cc1Swenshuai.xi     {
2513*53ee8cc1Swenshuai.xi         /*
2514*53ee8cc1Swenshuai.xi         //Get DVBS2 Code Rate
2515*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_CODE_RATE, &u8Data);//V
2516*53ee8cc1Swenshuai.xi         printf("[S2]INTERN_DVBS_GetTsDivNum DVBS2 E_DMD_S2_CODERATE=0x%x\n", u8Data);
2517*53ee8cc1Swenshuai.xi         switch (u8Data)
2518*53ee8cc1Swenshuai.xi         {
2519*53ee8cc1Swenshuai.xi             case 0x03: //CR 1/2
2520*53ee8cc1Swenshuai.xi                   k_bch=32208.0;
2521*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 5;
2522*53ee8cc1Swenshuai.xi                   DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=1_2\n"));
2523*53ee8cc1Swenshuai.xi                break;
2524*53ee8cc1Swenshuai.xi             case 0x01: //CR 1/3
2525*53ee8cc1Swenshuai.xi                   k_bch=21408.0; //8PSK???
2526*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 6;
2527*53ee8cc1Swenshuai.xi                   DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=1_3\n"));
2528*53ee8cc1Swenshuai.xi                break;
2529*53ee8cc1Swenshuai.xi             case 0x05: //CR 2/3
2530*53ee8cc1Swenshuai.xi                   k_bch=43040.0;
2531*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 7;
2532*53ee8cc1Swenshuai.xi                   DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=2_3\n"));
2533*53ee8cc1Swenshuai.xi                break;
2534*53ee8cc1Swenshuai.xi             case 0x00: //CR 1/4
2535*53ee8cc1Swenshuai.xi                   k_bch=16008.0; //8PSK???
2536*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 8;
2537*53ee8cc1Swenshuai.xi                   DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=1_4\n"));
2538*53ee8cc1Swenshuai.xi                break;
2539*53ee8cc1Swenshuai.xi             case 0x06: //CR 3/4
2540*53ee8cc1Swenshuai.xi                   k_bch=48408.0;
2541*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 9;
2542*53ee8cc1Swenshuai.xi                   DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=3_4\n"));
2543*53ee8cc1Swenshuai.xi                break;
2544*53ee8cc1Swenshuai.xi             case 0x02: //CR 2/5
2545*53ee8cc1Swenshuai.xi                   k_bch=25728.0; //8PSK???
2546*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 10;
2547*53ee8cc1Swenshuai.xi                   DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=2_5\n"));
2548*53ee8cc1Swenshuai.xi                break;
2549*53ee8cc1Swenshuai.xi             case 0x04: //CR 3/5
2550*53ee8cc1Swenshuai.xi                   k_bch=38688.0;
2551*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 11;
2552*53ee8cc1Swenshuai.xi                   DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=3_5\n"));
2553*53ee8cc1Swenshuai.xi                break;
2554*53ee8cc1Swenshuai.xi             case 0x07: //CR 4/5
2555*53ee8cc1Swenshuai.xi                   k_bch=51648.0;
2556*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 12;
2557*53ee8cc1Swenshuai.xi                   DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=4_5\n"));
2558*53ee8cc1Swenshuai.xi                break;
2559*53ee8cc1Swenshuai.xi             case 0x08: //CR 5/6
2560*53ee8cc1Swenshuai.xi                   k_bch=53840.0;
2561*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 13;
2562*53ee8cc1Swenshuai.xi                   DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=5_6\n"));
2563*53ee8cc1Swenshuai.xi                break;
2564*53ee8cc1Swenshuai.xi             case 0x09: //CR 8/9
2565*53ee8cc1Swenshuai.xi                   k_bch=57472.0;
2566*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 14;
2567*53ee8cc1Swenshuai.xi                   DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=8_9\n"));
2568*53ee8cc1Swenshuai.xi                break;
2569*53ee8cc1Swenshuai.xi             case 0x0A: //CR 9/10
2570*53ee8cc1Swenshuai.xi                   k_bch=58192.0;
2571*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 15;
2572*53ee8cc1Swenshuai.xi                   DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate=9_10\n"));
2573*53ee8cc1Swenshuai.xi                break;
2574*53ee8cc1Swenshuai.xi             default:
2575*53ee8cc1Swenshuai.xi                   k_bch=58192.0;
2576*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 15;
2577*53ee8cc1Swenshuai.xi                   DBG_INTERN_DVBS(printf("INTERN_DVBS_GetTsDivNum INTERN_DVBS2_GetCurrentCodeRate= default 9_10\n"));
2578*53ee8cc1Swenshuai.xi                break;
2579*53ee8cc1Swenshuai.xi         }   //printf("INTERN_DVBS_GetTsDivNum k_bch=%ld\n", (MS_U32)k_bch);
2580*53ee8cc1Swenshuai.xi          */
2581*53ee8cc1Swenshuai.xi         //INTERN_DVBS_GetCurrentModulationType(&pQAMMode);  //V
2582*53ee8cc1Swenshuai.xi         //printf("INTERN_DVBS_GetTsDivNum Mod_order=%d\n", modulation_order);
2583*53ee8cc1Swenshuai.xi 
2584*53ee8cc1Swenshuai.xi         // pilot_flag     =>   0 : off    1 : on
2585*53ee8cc1Swenshuai.xi         // fec_type_idx   =>   0 : normal 1 : short
2586*53ee8cc1Swenshuai.xi         // mod_type_idx   =>   0 : QPSK   1 : 8PSK   2 : 16APSK   3 : 32APSK
2587*53ee8cc1Swenshuai.xi         // code_rate_idx  =>   d0: 1/4, d1: 1/3, d2: 2/5, d3: 1/2, d4: 3/5, d5: 2/3, d6: 3/4, d7: 4/5, d8: 5/6, d9: 8/9, d10: 9/10
2588*53ee8cc1Swenshuai.xi         //set TS clock rate
2589*53ee8cc1Swenshuai.xi 
2590*53ee8cc1Swenshuai.xi         if( INTERN_DVBS2_VCM_CHECK() ) // VCM signal
2591*53ee8cc1Swenshuai.xi         {
2592*53ee8cc1Swenshuai.xi             // wait current IS ID which we want to get
2593*53ee8cc1Swenshuai.xi             current_time = MsOS_GetSystemTime();
2594*53ee8cc1Swenshuai.xi             do
2595*53ee8cc1Swenshuai.xi             {
2596*53ee8cc1Swenshuai.xi                     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_VCM_OPT, &VCM_OPT);
2597*53ee8cc1Swenshuai.xi             }
2598*53ee8cc1Swenshuai.xi             while( VCM_OPT != VCM_Forced_Mode && (MsOS_GetSystemTime() - current_time) < 500);
2599*53ee8cc1Swenshuai.xi         }
2600*53ee8cc1Swenshuai.xi 
2601*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_CODE_RATE, code_rate_idx);
2602*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_FEC_TYPE, fec_type_idx);
2603*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MOD_TYPE, &mod_type_idx);
2604*53ee8cc1Swenshuai.xi         modulation_order = modulation_order_array[mod_type_idx];
2605*53ee8cc1Swenshuai.xi         //modulation_order = mod_type_idx;
2606*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_PILOT_FLAG, pilot_flag);
2607*53ee8cc1Swenshuai.xi 
2608*53ee8cc1Swenshuai.xi         //ULOGD("DEMOD","FEC = : %x\n", *fec_type_idx);
2609*53ee8cc1Swenshuai.xi         //ULOGD("DEMOD","cr = : %x\n", *code_rate_idx);
2610*53ee8cc1Swenshuai.xi         //ULOGD("DEMOD","pilot = : %x\n", *pilot_flag);
2611*53ee8cc1Swenshuai.xi         //ULOGD("DEMOD","MOD = : %x\n", mod_type_idx);
2612*53ee8cc1Swenshuai.xi 
2613*53ee8cc1Swenshuai.xi         //MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_PILOT_FLAG, &u8Data);
2614*53ee8cc1Swenshuai.xi 
2615*53ee8cc1Swenshuai.xi        /*
2616*53ee8cc1Swenshuai.xi 	MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_ISSY_ACTIVE, ISSY_EN);
2617*53ee8cc1Swenshuai.xi         if(*ISSY_EN==0)
2618*53ee8cc1Swenshuai.xi         {
2619*53ee8cc1Swenshuai.xi             k_bch = k_bch_array[fec_type_idx][code_rate_idx];
2620*53ee8cc1Swenshuai.xi             n_ldpc = n_ldpc_array[fec_type_idx];
2621*53ee8cc1Swenshuai.xi             pilot_term = ((float) n_ldpc / modulation_order / 1440 * 36) * pilot_flag;
2622*53ee8cc1Swenshuai.xi             if(sDMD_DVBS_Info.bSerialTS)//serial mode
2623*53ee8cc1Swenshuai.xi             {
2624*53ee8cc1Swenshuai.xi                 *fTSDivNum =(288000.0/(k_bch/((n_ldpc/modulation_order+90+pilot_term)/u32SymbolRate)) - ts_div_num_offset);
2625*53ee8cc1Swenshuai.xi                 *fTSDivNum = (*fTSDivNum-1)/2;// since  288/(2(fTSDivNum+1)) = 288/TS_RATE = A  ==> fTSDivNum = (A-1)/2
2626*53ee8cc1Swenshuai.xi             }
2627*53ee8cc1Swenshuai.xi             else//parallel mode
2628*53ee8cc1Swenshuai.xi             {
2629*53ee8cc1Swenshuai.xi                 *fTSDivNum = (288000.0/(k_bch/((n_ldpc/modulation_order+90+pilot_term)/u32SymbolRate)/8) - ts_div_num_offset);
2630*53ee8cc1Swenshuai.xi                 *fTSDivNum = (*fTSDivNum-1)/2;
2631*53ee8cc1Swenshuai.xi             }
2632*53ee8cc1Swenshuai.xi         }
2633*53ee8cc1Swenshuai.xi         else if(*ISSY_EN==1)//ISSY = 1
2634*53ee8cc1Swenshuai.xi         {
2635*53ee8cc1Swenshuai.xi                //u32Time_start = msAPI_Timer_GetTime0();
2636*53ee8cc1Swenshuai.xi                time_counter=0;
2637*53ee8cc1Swenshuai.xi             do
2638*53ee8cc1Swenshuai.xi             {
2639*53ee8cc1Swenshuai.xi                  MDrv_SYS_DMD_VD_MBX_ReadReg((0x3E00 + 0x4D*2), &u8Data);//DVBS2OPPRO_ISCR_CAL_DONE     (_REG_DVBS2OPPRO(0x4D)+0)
2640*53ee8cc1Swenshuai.xi                  u8Data &= 0x01;
2641*53ee8cc1Swenshuai.xi                 // u32Time_end =msAPI_Timer_GetTime0();
2642*53ee8cc1Swenshuai.xi                 MsOS_DelayTask(1);
2643*53ee8cc1Swenshuai.xi                 time_counter = time_counter +1;
2644*53ee8cc1Swenshuai.xi             }while( (u8Data!=0x01) && ( (time_counter )< 50) );
2645*53ee8cc1Swenshuai.xi 
2646*53ee8cc1Swenshuai.xi             //read pkt interval
2647*53ee8cc1Swenshuai.xi             MDrv_SYS_DMD_VD_MBX_ReadReg((0x3E00 + 0x70*2), &u8Data);
2648*53ee8cc1Swenshuai.xi             *u32temp = u8Data;
2649*53ee8cc1Swenshuai.xi             MDrv_SYS_DMD_VD_MBX_ReadReg((DVBS2OPPRO_REG_BASE + 0x70*2+1), &u8Data);
2650*53ee8cc1Swenshuai.xi             *u32temp |= (MS_U32)u8Data<<8;
2651*53ee8cc1Swenshuai.xi             MDrv_SYS_DMD_VD_MBX_ReadReg((DVBS2OPPRO_REG_BASE + 0x71*2), &u8Data);
2652*53ee8cc1Swenshuai.xi             *u32temp |= (MS_U32)u8Data<<16;
2653*53ee8cc1Swenshuai.xi             MDrv_SYS_DMD_VD_MBX_ReadReg((DVBS2OPPRO_REG_BASE + 0x71*2+1), &u8Data);
2654*53ee8cc1Swenshuai.xi             *u32temp |= (MS_U32)u8Data<<24;
2655*53ee8cc1Swenshuai.xi 
2656*53ee8cc1Swenshuai.xi             pkt_interval = (MS_FLOAT) u32temp / 1024.0;
2657*53ee8cc1Swenshuai.xi             if(sDMD_DVBS_Info.bSerialTS)//serial mode
2658*53ee8cc1Swenshuai.xi             {
2659*53ee8cc1Swenshuai.xi                  *fTSDivNum=288000.0 / (188*8*u32SymbolRate/pkt_interval) - ts_div_num_offset;
2660*53ee8cc1Swenshuai.xi                  *fTSDivNum = (*fTSDivNum-1)/2;
2661*53ee8cc1Swenshuai.xi             }
2662*53ee8cc1Swenshuai.xi             else
2663*53ee8cc1Swenshuai.xi             {
2664*53ee8cc1Swenshuai.xi                  *fTSDivNum=288000.0 / (188*u32SymbolRate/pkt_interval) - ts_div_num_offset;
2665*53ee8cc1Swenshuai.xi                 *fTSDivNum = (*fTSDivNum-1)/2;
2666*53ee8cc1Swenshuai.xi             }
2667*53ee8cc1Swenshuai.xi 
2668*53ee8cc1Swenshuai.xi         }
2669*53ee8cc1Swenshuai.xi         else
2670*53ee8cc1Swenshuai.xi         {
2671*53ee8cc1Swenshuai.xi            // *fTSDivNum =0x0A;
2672*53ee8cc1Swenshuai.xi         }
2673*53ee8cc1Swenshuai.xi 
2674*53ee8cc1Swenshuai.xi         if(*fTSDivNum>255)
2675*53ee8cc1Swenshuai.xi             *fTSDivNum=255;
2676*53ee8cc1Swenshuai.xi         if(*fTSDivNum<1)
2677*53ee8cc1Swenshuai.xi             *fTSDivNum=1;
2678*53ee8cc1Swenshuai.xi              */
2679*53ee8cc1Swenshuai.xi #if 0
2680*53ee8cc1Swenshuai.xi        //printf("INTERN_DVBS_GetTsDivNum Pilot E_DMD_S2_MB_DMDTOP_DBG_9=%d\n", u8Data);
2681*53ee8cc1Swenshuai.xi        /*if(u8Data) // Pilot ON
2682*53ee8cc1Swenshuai.xi              printf(">>>INTERN_DVBS_GetTsDivNum Pilot ON<<<\n");
2683*53ee8cc1Swenshuai.xi          else //Pilot off
2684*53ee8cc1Swenshuai.xi              printf(">>>INTERN_DVBS_GetTsDivNum Pilot off<<<\n");
2685*53ee8cc1Swenshuai.xi          */
2686*53ee8cc1Swenshuai.xi        if(_bSerialTS)
2687*53ee8cc1Swenshuai.xi        {
2688*53ee8cc1Swenshuai.xi           if(u8Data)//if pilot ON
2689*53ee8cc1Swenshuai.xi           {
2690*53ee8cc1Swenshuai.xi             if(modulation_order==2)
2691*53ee8cc1Swenshuai.xi                *u8TSDivNum = (MS_U8)(144000/(k_bch/((64800/modulation_order+90+36*22)/u32SymbolRate)) - 3);
2692*53ee8cc1Swenshuai.xi             else if(modulation_order==3)
2693*53ee8cc1Swenshuai.xi                *u8TSDivNum = (MS_U8)(144000/(k_bch/((64800/modulation_order+90+36*15)/u32SymbolRate)) - 3);
2694*53ee8cc1Swenshuai.xi           }
2695*53ee8cc1Swenshuai.xi           else
2696*53ee8cc1Swenshuai.xi             *u8TSDivNum = (MS_U8)(144000/(k_bch/((64800/modulation_order+90)/u32SymbolRate)) - 3);
2697*53ee8cc1Swenshuai.xi         }
2698*53ee8cc1Swenshuai.xi         else//Parallel mode
2699*53ee8cc1Swenshuai.xi         {
2700*53ee8cc1Swenshuai.xi             if(u8Data)
2701*53ee8cc1Swenshuai.xi             {
2702*53ee8cc1Swenshuai.xi                if(modulation_order==2)
2703*53ee8cc1Swenshuai.xi                   *u8TSDivNum = (MS_U8)(float)(144000/(k_bch/((64800/modulation_order+90.0+36*22)/u32SymbolRate)/8.0) - 3);
2704*53ee8cc1Swenshuai.xi                else if(modulation_order==3)
2705*53ee8cc1Swenshuai.xi                   *u8TSDivNum = (MS_U8)(float)(144000/(k_bch/((64800/modulation_order+90.0+36*15)/u32SymbolRate)/8.0) - 3);
2706*53ee8cc1Swenshuai.xi             }
2707*53ee8cc1Swenshuai.xi             else
2708*53ee8cc1Swenshuai.xi                *u8TSDivNum = (MS_U8)(float)(144000/(k_bch/((64800/modulation_order+90.0)/u32SymbolRate)/8.0) - 3);
2709*53ee8cc1Swenshuai.xi         }
2710*53ee8cc1Swenshuai.xi #endif
2711*53ee8cc1Swenshuai.xi     }
2712*53ee8cc1Swenshuai.xi     else                                            //S
2713*53ee8cc1Swenshuai.xi     {
2714*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE + 0x3A*2, &u8Data);
2715*53ee8cc1Swenshuai.xi         //u8_gCodeRate = (u8Data & 0x70)>>4;
2716*53ee8cc1Swenshuai.xi         //DVBS Code Rate
2717*53ee8cc1Swenshuai.xi         //switch (u8_gCodeRate)
2718*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_CODE_RATE, &u8Data);
2719*53ee8cc1Swenshuai.xi 	 *code_rate_reg=u8Data;
2720*53ee8cc1Swenshuai.xi         switch (u8Data)
2721*53ee8cc1Swenshuai.xi         {
2722*53ee8cc1Swenshuai.xi             case 0x00: //CR 1/2
2723*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 0;
2724*53ee8cc1Swenshuai.xi                DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetTsDivNum INTERN_DVBS_GetCurrentCodeRate=1_2\n"));
2725*53ee8cc1Swenshuai.xi                /*
2726*53ee8cc1Swenshuai.xi 		    if(sDMD_DVBS_Info.bSerialTS)
2727*53ee8cc1Swenshuai.xi                       *fTSDivNum = (288000.0/((1.0/2.0)*(188.0/204.0)*u32SymbolRate*2) - 5);
2728*53ee8cc1Swenshuai.xi                   else
2729*53ee8cc1Swenshuai.xi                       *fTSDivNum = (288000.0/((1.0/2.0)*(188.0/204.0)*u32SymbolRate*2/8.0) - 5);
2730*53ee8cc1Swenshuai.xi 
2731*53ee8cc1Swenshuai.xi                *fTSDivNum = (*fTSDivNum-1)/2;
2732*53ee8cc1Swenshuai.xi                 if(*fTSDivNum>255)
2733*53ee8cc1Swenshuai.xi                     *fTSDivNum=255;
2734*53ee8cc1Swenshuai.xi                 if(*fTSDivNum<1)
2735*53ee8cc1Swenshuai.xi                     *fTSDivNum=1;
2736*53ee8cc1Swenshuai.xi                     */
2737*53ee8cc1Swenshuai.xi                break;
2738*53ee8cc1Swenshuai.xi             case 0x01: //CR 2/3
2739*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 1;
2740*53ee8cc1Swenshuai.xi                DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetTsDivNum INTERN_DVBS_GetCurrentCodeRate=2_3\n"));
2741*53ee8cc1Swenshuai.xi                   /*
2742*53ee8cc1Swenshuai.xi 		    if(sDMD_DVBS_Info.bSerialTS)
2743*53ee8cc1Swenshuai.xi                       *fTSDivNum = (MS_U8)(288000.0/((2.0/3.0)*(188.0/204.0)*u32SymbolRate*2) - 5);
2744*53ee8cc1Swenshuai.xi                   else
2745*53ee8cc1Swenshuai.xi                 *fTSDivNum = (MS_U8)(288000.0/((2.0/3.0)*(188.0/204.0)*u32SymbolRate*2/8.0) - 5);
2746*53ee8cc1Swenshuai.xi 
2747*53ee8cc1Swenshuai.xi                *fTSDivNum = (*fTSDivNum-1)/2;
2748*53ee8cc1Swenshuai.xi                 if(*fTSDivNum>255)
2749*53ee8cc1Swenshuai.xi                     *fTSDivNum=255;
2750*53ee8cc1Swenshuai.xi                 if(*fTSDivNum<1)
2751*53ee8cc1Swenshuai.xi                     *fTSDivNum=1;
2752*53ee8cc1Swenshuai.xi                     */
2753*53ee8cc1Swenshuai.xi                break;
2754*53ee8cc1Swenshuai.xi             case 0x02: //CR 3/4
2755*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 2;
2756*53ee8cc1Swenshuai.xi                DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetTsDivNum INTERN_DVBS_GetCurrentCodeRate=3_4\n"));
2757*53ee8cc1Swenshuai.xi                  /*
2758*53ee8cc1Swenshuai.xi 		    if(sDMD_DVBS_Info.bSerialTS)
2759*53ee8cc1Swenshuai.xi                       *fTSDivNum = (288000.0/((3.0/4.0)*(188.0/204.0)*u32SymbolRate*2) - 5);
2760*53ee8cc1Swenshuai.xi                   else
2761*53ee8cc1Swenshuai.xi                 *fTSDivNum = (288000.0/((3.0/4.0)*(188.0/204.0)*u32SymbolRate*2/8.0) - 5);
2762*53ee8cc1Swenshuai.xi                *fTSDivNum = (*fTSDivNum-1)/2;
2763*53ee8cc1Swenshuai.xi                 if(*fTSDivNum>255)
2764*53ee8cc1Swenshuai.xi                     *fTSDivNum=255;
2765*53ee8cc1Swenshuai.xi                 if(*fTSDivNum<1)
2766*53ee8cc1Swenshuai.xi                     *fTSDivNum=1;
2767*53ee8cc1Swenshuai.xi                     */
2768*53ee8cc1Swenshuai.xi                break;
2769*53ee8cc1Swenshuai.xi             case 0x03: //CR 5/6
2770*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 3;
2771*53ee8cc1Swenshuai.xi                DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetTsDivNum INTERN_DVBS_GetCurrentCodeRate=5_6\n"));
2772*53ee8cc1Swenshuai.xi                   /*
2773*53ee8cc1Swenshuai.xi 		    if(sDMD_DVBS_Info.bSerialTS)
2774*53ee8cc1Swenshuai.xi                       *fTSDivNum = (288000.0/((5.0/6.0)*(188.0/204.0)*u32SymbolRate*2) - 5);
2775*53ee8cc1Swenshuai.xi                   else
2776*53ee8cc1Swenshuai.xi                 *fTSDivNum = (288000.0/((5.0/6.0)*(188.0/204.0)*u32SymbolRate*2/8.0) - 5);
2777*53ee8cc1Swenshuai.xi 
2778*53ee8cc1Swenshuai.xi                *fTSDivNum = (*fTSDivNum-1)/2;
2779*53ee8cc1Swenshuai.xi                 if(*fTSDivNum>255)
2780*53ee8cc1Swenshuai.xi                     *fTSDivNum=255;
2781*53ee8cc1Swenshuai.xi                 if(*fTSDivNum<1)
2782*53ee8cc1Swenshuai.xi                     *fTSDivNum=1;
2783*53ee8cc1Swenshuai.xi                   */
2784*53ee8cc1Swenshuai.xi                break;
2785*53ee8cc1Swenshuai.xi             case 0x04: //CR 7/8
2786*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 4;
2787*53ee8cc1Swenshuai.xi                DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetTsDivNum INTERN_DVBS_GetCurrentCodeRate=7_8\n"));
2788*53ee8cc1Swenshuai.xi                   /*
2789*53ee8cc1Swenshuai.xi 		    if(sDMD_DVBS_Info.bSerialTS)
2790*53ee8cc1Swenshuai.xi                       *fTSDivNum =(288000.0/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*2) - 5);
2791*53ee8cc1Swenshuai.xi                   else
2792*53ee8cc1Swenshuai.xi                 *fTSDivNum = (288000.0/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*2/8.0) - 5);
2793*53ee8cc1Swenshuai.xi 
2794*53ee8cc1Swenshuai.xi                *fTSDivNum = (*fTSDivNum-1)/2;
2795*53ee8cc1Swenshuai.xi             if(*fTSDivNum>255)
2796*53ee8cc1Swenshuai.xi                 *fTSDivNum=255;
2797*53ee8cc1Swenshuai.xi             if(*fTSDivNum<1)
2798*53ee8cc1Swenshuai.xi                 *fTSDivNum=1;
2799*53ee8cc1Swenshuai.xi                 */
2800*53ee8cc1Swenshuai.xi                break;
2801*53ee8cc1Swenshuai.xi             default:
2802*53ee8cc1Swenshuai.xi                   //_u8_DVBS2_CurrentCodeRate = 4;
2803*53ee8cc1Swenshuai.xi                DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetTsDivNum INTERN_DVBS_GetCurrentCodeRate= default 7_8\n"));
2804*53ee8cc1Swenshuai.xi                  /*
2805*53ee8cc1Swenshuai.xi 		    if(sDMD_DVBS_Info.bSerialTS)
2806*53ee8cc1Swenshuai.xi                       *fTSDivNum = (288000.0/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*2) - 5);
2807*53ee8cc1Swenshuai.xi                   else
2808*53ee8cc1Swenshuai.xi                 *fTSDivNum = (288000.0/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*2/8.0) - 5);
2809*53ee8cc1Swenshuai.xi 
2810*53ee8cc1Swenshuai.xi                *fTSDivNum = (*fTSDivNum-1)/2;
2811*53ee8cc1Swenshuai.xi             if(*fTSDivNum>255)
2812*53ee8cc1Swenshuai.xi                 *fTSDivNum=255;
2813*53ee8cc1Swenshuai.xi             if(*fTSDivNum<1)
2814*53ee8cc1Swenshuai.xi                 *fTSDivNum=1;
2815*53ee8cc1Swenshuai.xi                 */
2816*53ee8cc1Swenshuai.xi                break;
2817*53ee8cc1Swenshuai.xi         }
2818*53ee8cc1Swenshuai.xi     } //printf("INTERN_DVBS_GetTsDivNum u8TSClk = 0x%x\n", *u8TSDivNum);
2819*53ee8cc1Swenshuai.xi     return status;
2820*53ee8cc1Swenshuai.xi }
2821*53ee8cc1Swenshuai.xi 
INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK_TYPE eType,MS_U16 fCurrRFPowerDbm,MS_U16 fNoChannelRFPowerDbm,MS_U32 u32TimeInterval)2822*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK_TYPE eType, MS_U16 fCurrRFPowerDbm, MS_U16 fNoChannelRFPowerDbm, MS_U32 u32TimeInterval)
2823*53ee8cc1Swenshuai.xi {
2824*53ee8cc1Swenshuai.xi     MS_U8 u8Data =0; //MS_U8 u8Data2 =0;
2825*53ee8cc1Swenshuai.xi     MS_U8 bRet = TRUE;
2826*53ee8cc1Swenshuai.xi 
2827*53ee8cc1Swenshuai.xi     MS_U8 IS_ID = 0;
2828*53ee8cc1Swenshuai.xi     MS_U8 IS_ID_Table[32];
2829*53ee8cc1Swenshuai.xi 
2830*53ee8cc1Swenshuai.xi     switch( eType )
2831*53ee8cc1Swenshuai.xi     {
2832*53ee8cc1Swenshuai.xi         case DMD_DVBS_GETLOCK:
2833*53ee8cc1Swenshuai.xi #if (INTERN_DVBS_INTERNAL_DEBUG)
2834*53ee8cc1Swenshuai.xi             INTERN_DVBS_info();
2835*53ee8cc1Swenshuai.xi #endif
2836*53ee8cc1Swenshuai.xi             bRet &= MDrv_SYS_DMD_VD_MBX_ReadReg((TOP_WR_DBG_90), &u8Data);
2837*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_GetLock manual tune=%d<<<\n", u8Data));
2838*53ee8cc1Swenshuai.xi             if ((u8Data&0x02)==0x00)//manual mode
2839*53ee8cc1Swenshuai.xi             {
2840*53ee8cc1Swenshuai.xi                 bRet &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_STATE_FLAG, &u8Data);
2841*53ee8cc1Swenshuai.xi                 DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_GetLock MailBox state=%d<<<\n", u8Data));
2842*53ee8cc1Swenshuai.xi 
2843*53ee8cc1Swenshuai.xi                 //ULOGD("DEMOD",">>>INTERN_DVBS_GetLock MailBox state=%d<<<\n", u8Data);
2844*53ee8cc1Swenshuai.xi 
2845*53ee8cc1Swenshuai.xi                 if((u8Data == 15) || (u8Data == 16))
2846*53ee8cc1Swenshuai.xi                 {
2847*53ee8cc1Swenshuai.xi                     if (u8Data==15)
2848*53ee8cc1Swenshuai.xi                     {
2849*53ee8cc1Swenshuai.xi                         _bDemodType = FALSE;   //S
2850*53ee8cc1Swenshuai.xi                         DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_Demod DVBS Lock<<<\n"));
2851*53ee8cc1Swenshuai.xi                     }
2852*53ee8cc1Swenshuai.xi                     else if(u8Data==16)
2853*53ee8cc1Swenshuai.xi                     {
2854*53ee8cc1Swenshuai.xi                         _bDemodType = TRUE;    //S2
2855*53ee8cc1Swenshuai.xi                         DBG_INTERN_DVBS(ULOGD("DEMOD",">>>INTERN_DVBS_Demod DVBS2 Lock<<<\n"));
2856*53ee8cc1Swenshuai.xi 
2857*53ee8cc1Swenshuai.xi                         if( u8VCM_Enabled_Opt == VCM_MODE && INTERN_DVBS2_VCM_CHECK() )
2858*53ee8cc1Swenshuai.xi                         {
2859*53ee8cc1Swenshuai.xi                             INTERN_DVBS2_Get_IS_ID_INFO(&IS_ID, IS_ID_Table);
2860*53ee8cc1Swenshuai.xi                             INTERN_DVBS2_Set_Default_IS_ID(&IS_ID, IS_ID_Table);
2861*53ee8cc1Swenshuai.xi 
2862*53ee8cc1Swenshuai.xi                             ULOGD("DEMOD",">>>INTERN_DVBS_Demod VCM Default IS ID = %d<<<\n", IS_ID);
2863*53ee8cc1Swenshuai.xi                         }
2864*53ee8cc1Swenshuai.xi                     }
2865*53ee8cc1Swenshuai.xi                     if(g_dvbs_lock == 0)
2866*53ee8cc1Swenshuai.xi                     {
2867*53ee8cc1Swenshuai.xi                         g_dvbs_lock = 1;
2868*53ee8cc1Swenshuai.xi                     }
2869*53ee8cc1Swenshuai.xi 
2870*53ee8cc1Swenshuai.xi                     if(u8DemodLockFlag==0)
2871*53ee8cc1Swenshuai.xi                     {
2872*53ee8cc1Swenshuai.xi                         u8DemodLockFlag=1;
2873*53ee8cc1Swenshuai.xi 
2874*53ee8cc1Swenshuai.xi                         // caculate TS clock divider number
2875*53ee8cc1Swenshuai.xi                         /*
2876*53ee8cc1Swenshuai.xi                         INTERN_DVBS_GetTsDivNum(&fTSDivNum);  //ts_div_num
2877*53ee8cc1Swenshuai.xi                         u8Data = (MS_U8)fTSDivNum;
2878*53ee8cc1Swenshuai.xi                         DBG_INTERN_DVBS(printf(">>>INTERN_DVBS_GetLock TsClkDivNum = 0x%x<<<\n", u8Data));
2879*53ee8cc1Swenshuai.xi 
2880*53ee8cc1Swenshuai.xi                         if (u8Data > 0x1F)
2881*53ee8cc1Swenshuai.xi                             u8Data=0x1F;
2882*53ee8cc1Swenshuai.xi                         //if (u8Data < 0x05) u8Data=0x05;
2883*53ee8cc1Swenshuai.xi                         HAL_DMD_RIU_WriteByte(0x103300, u8Data);
2884*53ee8cc1Swenshuai.xi 
2885*53ee8cc1Swenshuai.xi                         //Ts Output Enable
2886*53ee8cc1Swenshuai.xi                         HAL_DMD_RIU_WriteByte(0x101eaa,0x10);
2887*53ee8cc1Swenshuai.xi                         */
2888*53ee8cc1Swenshuai.xi                     }
2889*53ee8cc1Swenshuai.xi                     DBG_INTERN_DVBS(ULOGD("DEMOD","@INTERN_DVBS_Demod Lock+++\n"));
2890*53ee8cc1Swenshuai.xi                     bRet = TRUE;
2891*53ee8cc1Swenshuai.xi                 }
2892*53ee8cc1Swenshuai.xi                 else
2893*53ee8cc1Swenshuai.xi                 {
2894*53ee8cc1Swenshuai.xi                     if(g_dvbs_lock == 1)
2895*53ee8cc1Swenshuai.xi                     {
2896*53ee8cc1Swenshuai.xi                         g_dvbs_lock = 0;
2897*53ee8cc1Swenshuai.xi                         u8DemodLockFlag=0;
2898*53ee8cc1Swenshuai.xi                     }
2899*53ee8cc1Swenshuai.xi                     DBG_INTERN_DVBS(ULOGD("DEMOD","@INTERN_DVBS_Demod UnLock---\n"));
2900*53ee8cc1Swenshuai.xi                     bRet = FALSE;
2901*53ee8cc1Swenshuai.xi                 }
2902*53ee8cc1Swenshuai.xi 
2903*53ee8cc1Swenshuai.xi                 if(_bSerialTS==1)
2904*53ee8cc1Swenshuai.xi                 {
2905*53ee8cc1Swenshuai.xi                     if (bRet==FALSE)
2906*53ee8cc1Swenshuai.xi                     {
2907*53ee8cc1Swenshuai.xi                         _bTSDataSwap=FALSE;
2908*53ee8cc1Swenshuai.xi                     }
2909*53ee8cc1Swenshuai.xi                     else
2910*53ee8cc1Swenshuai.xi                     {
2911*53ee8cc1Swenshuai.xi                         if (_bTSDataSwap==FALSE)
2912*53ee8cc1Swenshuai.xi                         {
2913*53ee8cc1Swenshuai.xi                             _bTSDataSwap=TRUE;
2914*53ee8cc1Swenshuai.xi                             MDrv_SYS_DMD_VD_MBX_ReadReg( (DVBTM_REG_BASE + 0x20*2), &u8Data);//DVBTM_REG_BASE
2915*53ee8cc1Swenshuai.xi                             u8Data^=0x20;//h0020    h0020    5    5    reg_ts_data_reverse
2916*53ee8cc1Swenshuai.xi                             MDrv_SYS_DMD_VD_MBX_WriteReg( (DVBTM_REG_BASE + 0x20*2), u8Data);
2917*53ee8cc1Swenshuai.xi                         }
2918*53ee8cc1Swenshuai.xi                     }
2919*53ee8cc1Swenshuai.xi                 }
2920*53ee8cc1Swenshuai.xi             }
2921*53ee8cc1Swenshuai.xi             else
2922*53ee8cc1Swenshuai.xi             {
2923*53ee8cc1Swenshuai.xi                 bRet = TRUE;
2924*53ee8cc1Swenshuai.xi             }
2925*53ee8cc1Swenshuai.xi             break;
2926*53ee8cc1Swenshuai.xi 
2927*53ee8cc1Swenshuai.xi         default:
2928*53ee8cc1Swenshuai.xi             bRet = FALSE;
2929*53ee8cc1Swenshuai.xi     }
2930*53ee8cc1Swenshuai.xi     return bRet;
2931*53ee8cc1Swenshuai.xi }
2932*53ee8cc1Swenshuai.xi 
INTERN_DVBS2_Set_IS_ID(MS_U8 u8IS_ID)2933*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS2_Set_IS_ID(MS_U8 u8IS_ID)
2934*53ee8cc1Swenshuai.xi {
2935*53ee8cc1Swenshuai.xi     MS_U8 VCM_OPT = 0;
2936*53ee8cc1Swenshuai.xi     MS_U32 current_time = 0;
2937*53ee8cc1Swenshuai.xi     MS_BOOL   status = TRUE;
2938*53ee8cc1Swenshuai.xi 
2939*53ee8cc1Swenshuai.xi     // assign IS-ID
2940*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_IS_ID, u8IS_ID);
2941*53ee8cc1Swenshuai.xi 
2942*53ee8cc1Swenshuai.xi     // wait for VCM_OPT == 1 or time out
2943*53ee8cc1Swenshuai.xi     current_time = MsOS_GetSystemTime();
2944*53ee8cc1Swenshuai.xi     do
2945*53ee8cc1Swenshuai.xi     {
2946*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_VCM_OPT, &VCM_OPT);
2947*53ee8cc1Swenshuai.xi     }
2948*53ee8cc1Swenshuai.xi     while(VCM_OPT != 1 && (MsOS_GetSystemTime() - current_time) < 100);
2949*53ee8cc1Swenshuai.xi 
2950*53ee8cc1Swenshuai.xi     return status;
2951*53ee8cc1Swenshuai.xi }
2952*53ee8cc1Swenshuai.xi 
INTERN_DVBS2_Set_Default_IS_ID(MS_U8 * u8IS_ID,MS_U8 * u8IS_ID_table)2953*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS2_Set_Default_IS_ID(MS_U8 *u8IS_ID, MS_U8 *u8IS_ID_table)
2954*53ee8cc1Swenshuai.xi {
2955*53ee8cc1Swenshuai.xi     MS_U8 VCM_OPT = 0;
2956*53ee8cc1Swenshuai.xi     MS_U32 current_time = 0;
2957*53ee8cc1Swenshuai.xi     MS_BOOL status = TRUE;
2958*53ee8cc1Swenshuai.xi 
2959*53ee8cc1Swenshuai.xi     MS_U8 Default_IS_ID = 0;
2960*53ee8cc1Swenshuai.xi     MS_U8 iter;
2961*53ee8cc1Swenshuai.xi     MS_U8 temp, convert_counter;
2962*53ee8cc1Swenshuai.xi 
2963*53ee8cc1Swenshuai.xi     // Find the smallest IS_ID in the table
2964*53ee8cc1Swenshuai.xi 
2965*53ee8cc1Swenshuai.xi     for(iter = 0; iter < 0x0F;++iter)
2966*53ee8cc1Swenshuai.xi     {
2967*53ee8cc1Swenshuai.xi         // low byte
2968*53ee8cc1Swenshuai.xi         temp = u8IS_ID_table[2*iter];
2969*53ee8cc1Swenshuai.xi 
2970*53ee8cc1Swenshuai.xi         if( temp != 0)
2971*53ee8cc1Swenshuai.xi         {
2972*53ee8cc1Swenshuai.xi             for(convert_counter = 0; convert_counter < 8;++convert_counter)
2973*53ee8cc1Swenshuai.xi             {
2974*53ee8cc1Swenshuai.xi                 if( temp > ( (temp >> 1) * 2) )
2975*53ee8cc1Swenshuai.xi                     break;
2976*53ee8cc1Swenshuai.xi                 else
2977*53ee8cc1Swenshuai.xi                     temp = temp >> 1;
2978*53ee8cc1Swenshuai.xi             }
2979*53ee8cc1Swenshuai.xi 
2980*53ee8cc1Swenshuai.xi             Default_IS_ID = iter*16 + convert_counter;
2981*53ee8cc1Swenshuai.xi         }
2982*53ee8cc1Swenshuai.xi 
2983*53ee8cc1Swenshuai.xi         // high byte
2984*53ee8cc1Swenshuai.xi         temp = u8IS_ID_table[2*iter + 1];
2985*53ee8cc1Swenshuai.xi 
2986*53ee8cc1Swenshuai.xi         if( temp != 0)
2987*53ee8cc1Swenshuai.xi         {
2988*53ee8cc1Swenshuai.xi             for(convert_counter = 0; convert_counter < 8;++convert_counter)
2989*53ee8cc1Swenshuai.xi             {
2990*53ee8cc1Swenshuai.xi                 if( temp > ( (temp >> 1) * 2) )
2991*53ee8cc1Swenshuai.xi                     break;
2992*53ee8cc1Swenshuai.xi                 else
2993*53ee8cc1Swenshuai.xi                     temp = temp >> 1;
2994*53ee8cc1Swenshuai.xi             }
2995*53ee8cc1Swenshuai.xi 
2996*53ee8cc1Swenshuai.xi             Default_IS_ID = iter*16 + 8 + convert_counter;
2997*53ee8cc1Swenshuai.xi         }
2998*53ee8cc1Swenshuai.xi     }
2999*53ee8cc1Swenshuai.xi 
3000*53ee8cc1Swenshuai.xi     // assign IS-ID
3001*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_IS_ID, Default_IS_ID);
3002*53ee8cc1Swenshuai.xi 
3003*53ee8cc1Swenshuai.xi     *u8IS_ID = Default_IS_ID;
3004*53ee8cc1Swenshuai.xi 
3005*53ee8cc1Swenshuai.xi     // wait for VCM_OPT == 1 or time out
3006*53ee8cc1Swenshuai.xi     current_time = MsOS_GetSystemTime();
3007*53ee8cc1Swenshuai.xi     do
3008*53ee8cc1Swenshuai.xi     {
3009*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_VCM_OPT, &VCM_OPT);
3010*53ee8cc1Swenshuai.xi     }
3011*53ee8cc1Swenshuai.xi     while(VCM_OPT != 1 && (MsOS_GetSystemTime() - current_time) < 100);
3012*53ee8cc1Swenshuai.xi 
3013*53ee8cc1Swenshuai.xi     return status;
3014*53ee8cc1Swenshuai.xi }
3015*53ee8cc1Swenshuai.xi 
3016*53ee8cc1Swenshuai.xi 
INTERN_DVBS2_Get_IS_ID_INFO(MS_U8 * u8IS_ID,MS_U8 * u8IS_ID_table)3017*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS2_Get_IS_ID_INFO(MS_U8 *u8IS_ID, MS_U8 *u8IS_ID_table)
3018*53ee8cc1Swenshuai.xi {
3019*53ee8cc1Swenshuai.xi     MS_BOOL   status = TRUE;
3020*53ee8cc1Swenshuai.xi     MS_U8 iter;
3021*53ee8cc1Swenshuai.xi 
3022*53ee8cc1Swenshuai.xi     // get IS-ID
3023*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_IS_ID, u8IS_ID);
3024*53ee8cc1Swenshuai.xi     // get IS-ID table
3025*53ee8cc1Swenshuai.xi     for(iter = 0; iter <= 0x0F;++iter)
3026*53ee8cc1Swenshuai.xi     {
3027*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_IS_ID_TABLE + 2*iter, &u8IS_ID_table[2*iter]);
3028*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_IS_ID_TABLE + 2*iter + 1, &u8IS_ID_table[2*iter + 1]);
3029*53ee8cc1Swenshuai.xi     }
3030*53ee8cc1Swenshuai.xi 
3031*53ee8cc1Swenshuai.xi     return status;
3032*53ee8cc1Swenshuai.xi }
3033*53ee8cc1Swenshuai.xi 
INTERN_DVBS2_VCM_INIT(DMD_DVBS_VCM_OPT u8VCM_OPT,MS_U8 u8IS_ID,MS_U32 u32DMD_DVBS2_DJB_START_ADDR)3034*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS2_VCM_INIT(DMD_DVBS_VCM_OPT u8VCM_OPT, MS_U8 u8IS_ID, MS_U32 u32DMD_DVBS2_DJB_START_ADDR)
3035*53ee8cc1Swenshuai.xi {
3036*53ee8cc1Swenshuai.xi     MS_BOOL   status = TRUE;
3037*53ee8cc1Swenshuai.xi 
3038*53ee8cc1Swenshuai.xi     // Enabled VCM mode
3039*53ee8cc1Swenshuai.xi     u8VCM_Enabled_Opt = u8VCM_OPT;
3040*53ee8cc1Swenshuai.xi 
3041*53ee8cc1Swenshuai.xi     if(u8VCM_OPT != 0)
3042*53ee8cc1Swenshuai.xi     {
3043*53ee8cc1Swenshuai.xi         // assign IS-ID
3044*53ee8cc1Swenshuai.xi         u8Default_VCM_IS_ID = u8IS_ID;
3045*53ee8cc1Swenshuai.xi         // assign DJB address
3046*53ee8cc1Swenshuai.xi         u32DVBS2_DJB_START_ADDR = u32DMD_DVBS2_DJB_START_ADDR;
3047*53ee8cc1Swenshuai.xi     }
3048*53ee8cc1Swenshuai.xi 
3049*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","-->VCM_OPT<--%d\n", u8VCM_OPT));
3050*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","-->VCM_ISID<--%d\n", u8IS_ID));
3051*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","-->VCM_DJB<--%d\n", u32DMD_DVBS2_DJB_START_ADDR));
3052*53ee8cc1Swenshuai.xi 
3053*53ee8cc1Swenshuai.xi     return status;
3054*53ee8cc1Swenshuai.xi }
3055*53ee8cc1Swenshuai.xi 
INTERN_DVBS2_VCM_CHECK(void)3056*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS2_VCM_CHECK(void)
3057*53ee8cc1Swenshuai.xi {
3058*53ee8cc1Swenshuai.xi     MS_U8 VCM_Check = 0;
3059*53ee8cc1Swenshuai.xi     MS_BOOL   status = TRUE;
3060*53ee8cc1Swenshuai.xi 
3061*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2OPPRO_SIS_EN, &VCM_Check);
3062*53ee8cc1Swenshuai.xi 
3063*53ee8cc1Swenshuai.xi     if( (VCM_Check & 0x04) == 0x00) // VCM signal
3064*53ee8cc1Swenshuai.xi         status = TRUE;
3065*53ee8cc1Swenshuai.xi     else // CCM signal
3066*53ee8cc1Swenshuai.xi         status = FALSE;
3067*53ee8cc1Swenshuai.xi 
3068*53ee8cc1Swenshuai.xi     return status;
3069*53ee8cc1Swenshuai.xi }
3070*53ee8cc1Swenshuai.xi 
INTERN_DVBS2_VCM_ENABLED(MS_U8 u8VCM_ENABLED)3071*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS2_VCM_ENABLED(MS_U8 u8VCM_ENABLED)
3072*53ee8cc1Swenshuai.xi {
3073*53ee8cc1Swenshuai.xi     MS_BOOL   status = TRUE;
3074*53ee8cc1Swenshuai.xi     // Enabled VCM mode
3075*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_VCM_OPT, u8VCM_ENABLED);
3076*53ee8cc1Swenshuai.xi 
3077*53ee8cc1Swenshuai.xi     return status;
3078*53ee8cc1Swenshuai.xi }
3079*53ee8cc1Swenshuai.xi 
INTERN_DVBS2_VCM_MODE(DMD_DVBS_VCM_OPT u8VCM_OPT)3080*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS2_VCM_MODE(DMD_DVBS_VCM_OPT u8VCM_OPT)
3081*53ee8cc1Swenshuai.xi {
3082*53ee8cc1Swenshuai.xi     MS_BOOL   status = TRUE;
3083*53ee8cc1Swenshuai.xi     u8VCM_Enabled_Opt = u8VCM_OPT;
3084*53ee8cc1Swenshuai.xi     // Change VCM mode
3085*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_VCM_OPT, u8VCM_Enabled_Opt);
3086*53ee8cc1Swenshuai.xi 
3087*53ee8cc1Swenshuai.xi     return status;
3088*53ee8cc1Swenshuai.xi }
3089*53ee8cc1Swenshuai.xi 
INTERN_DVBS_GetTunrSignalLevel_PWR(MS_U16 * u16Data)3090*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetTunrSignalLevel_PWR(MS_U16 *u16Data)// Need check debug out table
3091*53ee8cc1Swenshuai.xi {
3092*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
3093*53ee8cc1Swenshuai.xi     MS_U8  u8Data =0;
3094*53ee8cc1Swenshuai.xi     //MS_U8  u8Index =0;
3095*53ee8cc1Swenshuai.xi     //float  fCableLess = 0.0;
3096*53ee8cc1Swenshuai.xi /*
3097*53ee8cc1Swenshuai.xi     if (FALSE == INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK, 200.0f, -200.0f, 0) )//Demod unlock
3098*53ee8cc1Swenshuai.xi     {
3099*53ee8cc1Swenshuai.xi         fCableLess = 0;
3100*53ee8cc1Swenshuai.xi     }
3101*53ee8cc1Swenshuai.xi */
3102*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE+0x11*2, &u8Data);//FRONTEND_AGC_DEBUG_SEL
3103*53ee8cc1Swenshuai.xi     u8Data=(u8Data&0xF0)|0x03;
3104*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE+0x11*2, u8Data);
3105*53ee8cc1Swenshuai.xi 
3106*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE+0x02, &u8Data);//FRONTEND_LATCH
3107*53ee8cc1Swenshuai.xi     u8Data|=0x80;
3108*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE+0x02, u8Data);
3109*53ee8cc1Swenshuai.xi 
3110*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE+0x12*2+1, &u8Data);//FRONTEND_AGC_DEBUG_OUT_R1
3111*53ee8cc1Swenshuai.xi     *u16Data=u8Data;
3112*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE+0x12*2, &u8Data);//FRONTEND_AGC_DEBUG_OUT_R0
3113*53ee8cc1Swenshuai.xi     *u16Data=(*u16Data<<8)|u8Data;
3114*53ee8cc1Swenshuai.xi     //printf("===========================Tuner 65535-u16Data = %d\n", (65535-u16Data));
3115*53ee8cc1Swenshuai.xi     //MsOS_DelayTask(400);
3116*53ee8cc1Swenshuai.xi 
3117*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE+0x02, &u8Data);//FRONTEND_LOAD0
3118*53ee8cc1Swenshuai.xi     u8Data&=~(0x80);
3119*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE+0x02, u8Data);
3120*53ee8cc1Swenshuai.xi /*
3121*53ee8cc1Swenshuai.xi     if (status==FALSE)
3122*53ee8cc1Swenshuai.xi     {
3123*53ee8cc1Swenshuai.xi         DBG_GET_SIGNAL_DVBS(printf("INTERN_DVBS GetSignalStrength fail!!! \n "));
3124*53ee8cc1Swenshuai.xi         fCableLess = 0;
3125*53ee8cc1Swenshuai.xi     }
3126*53ee8cc1Swenshuai.xi */
3127*53ee8cc1Swenshuai.xi    // printf("#### INTERN_DVBS_GetTunrSignalLevel_PWR u16Data = %d\n", (int)u16Data);
3128*53ee8cc1Swenshuai.xi 	/*
3129*53ee8cc1Swenshuai.xi     for (u8Index=0; u8Index < (sizeof(_u16SignalLevel)/sizeof(_u16SignalLevel[0])); u8Index++)
3130*53ee8cc1Swenshuai.xi     {
3131*53ee8cc1Swenshuai.xi         if ((65535 - u16Data) <= _u16SignalLevel[u8Index][0])
3132*53ee8cc1Swenshuai.xi         {
3133*53ee8cc1Swenshuai.xi             if (u8Index >=1)
3134*53ee8cc1Swenshuai.xi             {
3135*53ee8cc1Swenshuai.xi                 fCableLess = (float)(_u16SignalLevel[u8Index][1])+((float)(_u16SignalLevel[u8Index][0] - (65535 - u16Data)) / (float)(_u16SignalLevel[u8Index][0] - _u16SignalLevel[u8Index-1][0]))*(float)(_u16SignalLevel[u8Index-1][1] - _u16SignalLevel[u8Index][1]);
3136*53ee8cc1Swenshuai.xi             }
3137*53ee8cc1Swenshuai.xi             else
3138*53ee8cc1Swenshuai.xi             {
3139*53ee8cc1Swenshuai.xi                 fCableLess = _u16SignalLevel[u8Index][1];
3140*53ee8cc1Swenshuai.xi             }
3141*53ee8cc1Swenshuai.xi         }
3142*53ee8cc1Swenshuai.xi     }
3143*53ee8cc1Swenshuai.xi //---------------------------------------------------
3144*53ee8cc1Swenshuai.xi     if (fCableLess >= 350)
3145*53ee8cc1Swenshuai.xi         fCableLess = fCableLess - 35;
3146*53ee8cc1Swenshuai.xi     else if ((fCableLess < 350) && (fCableLess >= 250))
3147*53ee8cc1Swenshuai.xi         fCableLess = fCableLess - 25;
3148*53ee8cc1Swenshuai.xi     else
3149*53ee8cc1Swenshuai.xi         fCableLess = fCableLess - 5;
3150*53ee8cc1Swenshuai.xi 
3151*53ee8cc1Swenshuai.xi     if (fCableLess < 0)
3152*53ee8cc1Swenshuai.xi         fCableLess = 0;
3153*53ee8cc1Swenshuai.xi     if (fCableLess > 920)
3154*53ee8cc1Swenshuai.xi         fCableLess = 920;
3155*53ee8cc1Swenshuai.xi 
3156*53ee8cc1Swenshuai.xi     fCableLess = (-1.0)*(fCableLess/10.0);
3157*53ee8cc1Swenshuai.xi 
3158*53ee8cc1Swenshuai.xi     //printf("===========================fCableLess2 = %.2f\n",fCableLess);
3159*53ee8cc1Swenshuai.xi 
3160*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf("INTERN_DVBS GetSignalStrength %f\n", fCableLess));
3161*53ee8cc1Swenshuai.xi */
3162*53ee8cc1Swenshuai.xi     return status;
3163*53ee8cc1Swenshuai.xi }
3164*53ee8cc1Swenshuai.xi 
3165*53ee8cc1Swenshuai.xi /****************************************************************************
3166*53ee8cc1Swenshuai.xi   Subject:    To get the Post viterbi BER
3167*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_GetPostViterbiBer
3168*53ee8cc1Swenshuai.xi   Parmeter:  Quility
3169*53ee8cc1Swenshuai.xi   Return:       E_RESULT_SUCCESS
3170*53ee8cc1Swenshuai.xi                    E_RESULT_FAILURE =>Read I2C fail, INTERN_DVBC_VIT_STATUS_NG
3171*53ee8cc1Swenshuai.xi   Remark:     For the Performance issue, here we just return the Post Value.(Not BER)
3172*53ee8cc1Swenshuai.xi                    We will not read the Period, and have the "/256/8"
3173*53ee8cc1Swenshuai.xi *****************************************************************************/
3174*53ee8cc1Swenshuai.xi 
INTERN_DVBS_GetPostViterbiBer(MS_U32 * BitErr,MS_U16 * BitErrPeriod)3175*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetPostViterbiBer(MS_U32 *BitErr, MS_U16 *BitErrPeriod)//POST BER //V
3176*53ee8cc1Swenshuai.xi {
3177*53ee8cc1Swenshuai.xi     MS_BOOL           status = true;
3178*53ee8cc1Swenshuai.xi     MS_U8             reg = 0, reg_frz = 0;
3179*53ee8cc1Swenshuai.xi     MS_U32          current_time = 0;
3180*53ee8cc1Swenshuai.xi     //MS_U16            u16BitErrPeriod;
3181*53ee8cc1Swenshuai.xi     //MS_U32            u32BitErr;
3182*53ee8cc1Swenshuai.xi 
3183*53ee8cc1Swenshuai.xi     /////////// Post-Viterbi BER /////////////After Viterbi
3184*53ee8cc1Swenshuai.xi 
3185*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &reg);
3186*53ee8cc1Swenshuai.xi 
3187*53ee8cc1Swenshuai.xi     if(!reg) // DVBS2
3188*53ee8cc1Swenshuai.xi     {
3189*53ee8cc1Swenshuai.xi         // wait buffer is full
3190*53ee8cc1Swenshuai.xi         current_time = MsOS_GetSystemTime();
3191*53ee8cc1Swenshuai.xi 
3192*53ee8cc1Swenshuai.xi         do
3193*53ee8cc1Swenshuai.xi         {
3194*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_LDPC_BER_COUNT3, &reg);
3195*53ee8cc1Swenshuai.xi         }while(reg == 0xFF && (MsOS_GetSystemTime() - current_time) < 1000);
3196*53ee8cc1Swenshuai.xi 
3197*53ee8cc1Swenshuai.xi         // freeze outer
3198*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_OUTER_FREEZE, &reg);
3199*53ee8cc1Swenshuai.xi         reg |= 0x01;
3200*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_OUTER_FREEZE, reg);
3201*53ee8cc1Swenshuai.xi 
3202*53ee8cc1Swenshuai.xi         // Get LDPC error window
3203*53ee8cc1Swenshuai.xi 
3204*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_LDPC_ERROR_WINDOW1, &reg);
3205*53ee8cc1Swenshuai.xi         *BitErrPeriod = reg;
3206*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_LDPC_ERROR_WINDOW0, &reg);
3207*53ee8cc1Swenshuai.xi         *BitErrPeriod = (*BitErrPeriod << 8) | reg;
3208*53ee8cc1Swenshuai.xi 
3209*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_LDPC_BER_COUNT3, &reg);
3210*53ee8cc1Swenshuai.xi         *BitErr = reg;
3211*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_LDPC_BER_COUNT2, &reg);
3212*53ee8cc1Swenshuai.xi         *BitErr = (*BitErr << 8) | reg;
3213*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_LDPC_BER_COUNT1, &reg);
3214*53ee8cc1Swenshuai.xi         *BitErr = (*BitErr << 8) | reg;
3215*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_LDPC_BER_COUNT0, &reg);
3216*53ee8cc1Swenshuai.xi         *BitErr = (*BitErr << 8) | reg;
3217*53ee8cc1Swenshuai.xi 
3218*53ee8cc1Swenshuai.xi         // unfreeze outer
3219*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_OUTER_FREEZE, &reg);
3220*53ee8cc1Swenshuai.xi         reg &= ~(0x01);
3221*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_OUTER_FREEZE, reg);
3222*53ee8cc1Swenshuai.xi 
3223*53ee8cc1Swenshuai.xi         //fber = (float)u32BitErr/(u16BitErrPeriod*64800);
3224*53ee8cc1Swenshuai.xi         //*p_postBer = fber;
3225*53ee8cc1Swenshuai.xi     }
3226*53ee8cc1Swenshuai.xi     else //DVBS
3227*53ee8cc1Swenshuai.xi     {
3228*53ee8cc1Swenshuai.xi         // freeze ,DVBSRS_BACKEND_BIT_ERR_NUM_FREEZE
3229*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x08*2, &reg_frz);//h0001    h0001    8    8    reg_ber_en
3230*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBSFEC_REG_BASE+0x08*2, reg_frz|0x08);
3231*53ee8cc1Swenshuai.xi 
3232*53ee8cc1Swenshuai.xi         // bank 1f 0x46 [7:0] reg_bit_err_sblprd_7_0 ,DVBSFEC_BIT_ERR_SBLPRD_7_0
3233*53ee8cc1Swenshuai.xi         //             0x47 [15:8] reg_bit_err_sblprd_15_8
3234*53ee8cc1Swenshuai.xi         //KRIS register table
3235*53ee8cc1Swenshuai.xi         //h0018    h0018    7    0    reg_bit_err_sblprd_7_0
3236*53ee8cc1Swenshuai.xi         //h0018    h0018    15    8    reg_bit_err_sblprd_15_8
3237*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x18*2+1, &reg);
3238*53ee8cc1Swenshuai.xi         *BitErrPeriod = reg;
3239*53ee8cc1Swenshuai.xi 
3240*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x18*2, &reg);
3241*53ee8cc1Swenshuai.xi         *BitErrPeriod = (*BitErrPeriod << 8)|reg;
3242*53ee8cc1Swenshuai.xi 
3243*53ee8cc1Swenshuai.xi 
3244*53ee8cc1Swenshuai.xi         //h001d    h001d    7    0    reg_bit_err_num_7_0
3245*53ee8cc1Swenshuai.xi         //h001d    h001d    15    8    reg_bit_err_num_15_8
3246*53ee8cc1Swenshuai.xi         //h001e    h001e    7    0    reg_bit_err_num_23_16
3247*53ee8cc1Swenshuai.xi         //h001e    h001e    15    8    reg_bit_err_num_31_24
3248*53ee8cc1Swenshuai.xi 
3249*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x1E*2+1, &reg);
3250*53ee8cc1Swenshuai.xi         *BitErr = reg;
3251*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x1E*2, &reg);
3252*53ee8cc1Swenshuai.xi         *BitErr = (*BitErr << 8)|reg;
3253*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x1D*2+1, &reg);
3254*53ee8cc1Swenshuai.xi         *BitErr = (*BitErr << 8)|reg;
3255*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x1D*2, &reg);
3256*53ee8cc1Swenshuai.xi         *BitErr = (*BitErr << 8)|reg;
3257*53ee8cc1Swenshuai.xi 
3258*53ee8cc1Swenshuai.xi         // bank 1f 0x03 [1:0] reg_bit_err_num_freeze
3259*53ee8cc1Swenshuai.xi         reg_frz=reg_frz&(~0x08);
3260*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBSFEC_REG_BASE+0x08*2, reg_frz);
3261*53ee8cc1Swenshuai.xi     }
3262*53ee8cc1Swenshuai.xi 
3263*53ee8cc1Swenshuai.xi     /*
3264*53ee8cc1Swenshuai.xi     if (BitErrPeriod == 0 )    //PRD
3265*53ee8cc1Swenshuai.xi         BitErrPeriod = 1;
3266*53ee8cc1Swenshuai.xi 
3267*53ee8cc1Swenshuai.xi     if (BitErr <= 0 )
3268*53ee8cc1Swenshuai.xi         *postber = 0.5f / ((float)BitErrPeriod*128*188*8);
3269*53ee8cc1Swenshuai.xi     else
3270*53ee8cc1Swenshuai.xi         *postber = (float)BitErr / ((float)BitErrPeriod*128*188*8);
3271*53ee8cc1Swenshuai.xi 
3272*53ee8cc1Swenshuai.xi     if (*postber <= 0.0f)
3273*53ee8cc1Swenshuai.xi         *postber = 1.0e-10f;
3274*53ee8cc1Swenshuai.xi 
3275*53ee8cc1Swenshuai.xi     DBG_GET_SIGNAL_DVBS(printf("INTERN_DVBS PostVitBER = %8.3e \n", *postber));
3276*53ee8cc1Swenshuai.xi     */
3277*53ee8cc1Swenshuai.xi 
3278*53ee8cc1Swenshuai.xi     return status;
3279*53ee8cc1Swenshuai.xi }
3280*53ee8cc1Swenshuai.xi 
3281*53ee8cc1Swenshuai.xi 
INTERN_DVBS_GetPreViterbiBer(float * preber)3282*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetPreViterbiBer(float *preber)//PER BER // not yet
3283*53ee8cc1Swenshuai.xi {
3284*53ee8cc1Swenshuai.xi     MS_BOOL           status = true;
3285*53ee8cc1Swenshuai.xi     //MS_U8             reg = 0, reg_frz = 0;
3286*53ee8cc1Swenshuai.xi     //MS_U16            BitErrPeriod;
3287*53ee8cc1Swenshuai.xi     //MS_U32            BitErr;
3288*53ee8cc1Swenshuai.xi 
3289*53ee8cc1Swenshuai.xi #if 0
3290*53ee8cc1Swenshuai.xi     /////////// Pre-Viterbi BER /////////////Before Viterbi
3291*53ee8cc1Swenshuai.xi 
3292*53ee8cc1Swenshuai.xi     // freeze ,DVBSRS_BACKEND_BIT_ERR_NUM_FREEZE
3293*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x10, &reg_frz);
3294*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBSTFEC_REG_BASE+0x10, reg_frz|0x08);
3295*53ee8cc1Swenshuai.xi 
3296*53ee8cc1Swenshuai.xi     // bank 1f 0x46 [7:0] reg_bit_err_sblprd_7_0 ,DVBSFEC_BIT_ERR_SBLPRD_7_0
3297*53ee8cc1Swenshuai.xi     //             0x47 [15:8] reg_bit_err_sblprd_15_8
3298*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x19, &reg);
3299*53ee8cc1Swenshuai.xi     BitErrPeriod = reg;
3300*53ee8cc1Swenshuai.xi 
3301*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x18, &reg);
3302*53ee8cc1Swenshuai.xi     BitErrPeriod = (BitErrPeriod << 8)|reg;
3303*53ee8cc1Swenshuai.xi 
3304*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x17, &reg);
3305*53ee8cc1Swenshuai.xi     BitErrPeriod = (BitErrPeriod << 8)|reg;
3306*53ee8cc1Swenshuai.xi 
3307*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x16, &reg);
3308*53ee8cc1Swenshuai.xi     BitErrPeriod = (BitErrPeriod << 8)|reg;
3309*53ee8cc1Swenshuai.xi     BitErrPeriod = (BitErrPeriod & 0x3FFF);
3310*53ee8cc1Swenshuai.xi 
3311*53ee8cc1Swenshuai.xi     // bank 1f 0x6a [7:0] reg_bit_err_num_7_0
3312*53ee8cc1Swenshuai.xi     //             0x6b [15:8] reg_bit_err_num_15_8
3313*53ee8cc1Swenshuai.xi     // bank 1f 0x6c [7:0] reg_bit_err_num_23_16
3314*53ee8cc1Swenshuai.xi     //             0x6d [15:8] reg_bit_err_num_31_24
3315*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x1F, &reg);
3316*53ee8cc1Swenshuai.xi     BitErr = reg;
3317*53ee8cc1Swenshuai.xi 
3318*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE+0x1E, &reg);
3319*53ee8cc1Swenshuai.xi     BitErr = (BitErr << 8)|reg;
3320*53ee8cc1Swenshuai.xi 
3321*53ee8cc1Swenshuai.xi     // bank 1f 0x03 [1:0] reg_bit_err_num_freeze
3322*53ee8cc1Swenshuai.xi     reg_frz=reg_frz&(~0x08);
3323*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBSFEC_REG_BASE+0x10, reg_frz);
3324*53ee8cc1Swenshuai.xi 
3325*53ee8cc1Swenshuai.xi     if (BitErrPeriod ==0 )//protect 0
3326*53ee8cc1Swenshuai.xi         BitErrPeriod=1;
3327*53ee8cc1Swenshuai.xi     if (BitErr <=0 )
3328*53ee8cc1Swenshuai.xi         *perber=0.5f / (float)BitErrPeriod / 256;
3329*53ee8cc1Swenshuai.xi     else
3330*53ee8cc1Swenshuai.xi         *perber=(float)BitErr / (float)BitErrPeriod / 256;
3331*53ee8cc1Swenshuai.xi 
3332*53ee8cc1Swenshuai.xi     if (*perber <= 0.0f)
3333*53ee8cc1Swenshuai.xi         *perber = 1.0e-10f;
3334*53ee8cc1Swenshuai.xi 
3335*53ee8cc1Swenshuai.xi     DBG_GET_SIGNAL_DVBS(printf("INTERN_DVBS PerVitBER = %8.3e \n", *perber));
3336*53ee8cc1Swenshuai.xi #endif
3337*53ee8cc1Swenshuai.xi 
3338*53ee8cc1Swenshuai.xi     return status;
3339*53ee8cc1Swenshuai.xi }
3340*53ee8cc1Swenshuai.xi 
3341*53ee8cc1Swenshuai.xi /****************************************************************************
3342*53ee8cc1Swenshuai.xi   Subject:    To get the Packet error
3343*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_GetPacketErr
3344*53ee8cc1Swenshuai.xi   Parmeter:   pktErr
3345*53ee8cc1Swenshuai.xi   Return:     E_RESULT_SUCCESS
3346*53ee8cc1Swenshuai.xi                    E_RESULT_FAILURE =>Read I2C fail, INTERN_DVBT_VIT_STATUS_NG
3347*53ee8cc1Swenshuai.xi   Remark:     For the Performance issue, here we just return the Post Value.(Not BER)
3348*53ee8cc1Swenshuai.xi                    We will not read the Period, and have the "/256/8"
3349*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetPacketErr(MS_U16 * pktErr)3350*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetPacketErr(MS_U16 *pktErr)//V
3351*53ee8cc1Swenshuai.xi {
3352*53ee8cc1Swenshuai.xi     MS_BOOL          status = true;
3353*53ee8cc1Swenshuai.xi     MS_U8            u8Data = 0;
3354*53ee8cc1Swenshuai.xi     MS_U16           u16PktErr = 0;
3355*53ee8cc1Swenshuai.xi 
3356*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &u8Data);
3357*53ee8cc1Swenshuai.xi     if(!u8Data) //DVB-S2
3358*53ee8cc1Swenshuai.xi     {
3359*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_REG_BASE+0x02*2, &u8Data);//DVBS2FEC_OUTER_FREEZE   (_REG_DVBS2FEC(0x02)+0)     //[0]
3360*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_REG_BASE+0x02*2, u8Data|0x01);
3361*53ee8cc1Swenshuai.xi 
3362*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_REG_BASE+0x2B*2+1, &u8Data);//DVBS2FEC_BCH_EFLAG2_SUM1 (_REG_DVBS2FEC(0x2B)+1)
3363*53ee8cc1Swenshuai.xi         u16PktErr = u8Data;
3364*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_REG_BASE+0x2B*2, &u8Data);
3365*53ee8cc1Swenshuai.xi         u16PktErr = (u16PktErr << 8)|u8Data;
3366*53ee8cc1Swenshuai.xi 
3367*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2FEC_REG_BASE+0x02*2, &u8Data);
3368*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_REG_BASE+0x02*2, u8Data&(~0x01));
3369*53ee8cc1Swenshuai.xi     }
3370*53ee8cc1Swenshuai.xi     else
3371*53ee8cc1Swenshuai.xi     {
3372*53ee8cc1Swenshuai.xi         //DVB-S
3373*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x19*2, &u8Data); //0x19 [7] reg_bit_err_num_freeze
3374*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBSFEC_REG_BASE+0x19*2, u8Data|0x80);
3375*53ee8cc1Swenshuai.xi 
3376*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x1F*2+1, &u8Data);// DVBSFEC_UNCRT_PKT_NUM_15_8    (_REG_DVBSFEC(0x1F)+1)
3377*53ee8cc1Swenshuai.xi         u16PktErr = u8Data;
3378*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x1F*2, &u8Data);
3379*53ee8cc1Swenshuai.xi         u16PktErr = (u16PktErr << 8)|u8Data;
3380*53ee8cc1Swenshuai.xi 
3381*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE+0x19*2, &u8Data); //0x19 [7] reg_bit_err_num_freeze
3382*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBSFEC_REG_BASE+0x19*2, u8Data&(~0x80));
3383*53ee8cc1Swenshuai.xi     }
3384*53ee8cc1Swenshuai.xi     *pktErr = u16PktErr;
3385*53ee8cc1Swenshuai.xi 
3386*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS PktErr = %d \n", (int)u16PktErr));
3387*53ee8cc1Swenshuai.xi 
3388*53ee8cc1Swenshuai.xi     return status;
3389*53ee8cc1Swenshuai.xi }
3390*53ee8cc1Swenshuai.xi 
3391*53ee8cc1Swenshuai.xi /****************************************************************************
3392*53ee8cc1Swenshuai.xi   Subject:    Read the signal to noise ratio (SNR)
3393*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_GetSNR
3394*53ee8cc1Swenshuai.xi   Parmeter:   None
3395*53ee8cc1Swenshuai.xi   Return:     -1 mean I2C fail, otherwise I2C success then return SNR value
3396*53ee8cc1Swenshuai.xi   Remark:
3397*53ee8cc1Swenshuai.xi *****************************************************************************/
3398*53ee8cc1Swenshuai.xi 
INTERN_DVBS_GetSNR(MS_U32 * u32NDA_SNR_A,MS_U32 * u32NDA_SNR_AB)3399*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetSNR(MS_U32 *u32NDA_SNR_A, MS_U32 *u32NDA_SNR_AB)//V
3400*53ee8cc1Swenshuai.xi {
3401*53ee8cc1Swenshuai.xi     MS_BOOL status= TRUE;
3402*53ee8cc1Swenshuai.xi     MS_U8  u8Data =0;//, reg_frz =0;
3403*53ee8cc1Swenshuai.xi     //NDA SNR
3404*53ee8cc1Swenshuai.xi    // MS_U32 u32NDA_SNR_A =0;
3405*53ee8cc1Swenshuai.xi     //MS_U32 u32NDA_SNR_AB =0;
3406*53ee8cc1Swenshuai.xi     //NDA SNR
3407*53ee8cc1Swenshuai.xi     //float NDA_SNR_A =0.0;
3408*53ee8cc1Swenshuai.xi     //float NDA_SNR_AB =0.0;
3409*53ee8cc1Swenshuai.xi     //float NDA_SNR =0.0;
3410*53ee8cc1Swenshuai.xi     //double NDA_SNR_LINEAR=0.0;
3411*53ee8cc1Swenshuai.xi     //float snr_poly =0.0;
3412*53ee8cc1Swenshuai.xi     //float Fixed_SNR =0.0;
3413*53ee8cc1Swenshuai.xi     /*
3414*53ee8cc1Swenshuai.xi     if (INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK, 200.0f, -200.0f, 0)== FALSE)
3415*53ee8cc1Swenshuai.xi     {
3416*53ee8cc1Swenshuai.xi         return 0;
3417*53ee8cc1Swenshuai.xi     }
3418*53ee8cc1Swenshuai.xi     */
3419*53ee8cc1Swenshuai.xi     // freeze
3420*53ee8cc1Swenshuai.xi     #if 0
3421*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE+0x04*2, &reg_frz);
3422*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_INNER_REG_BASE+0x04*2, reg_frz|0x10);//INNE_LATCH      bit[4]
3423*53ee8cc1Swenshuai.xi 
3424*53ee8cc1Swenshuai.xi     //NDA SNR_A
3425*53ee8cc1Swenshuai.xi     // read Linear_SNR
3426*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x47*2, &u8Data);
3427*53ee8cc1Swenshuai.xi     *u32NDA_SNR_A=(u8Data&0x03);
3428*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x46*2 + 1, &u8Data);
3429*53ee8cc1Swenshuai.xi     *u32NDA_SNR_A=(*u32NDA_SNR_A<<8)|u8Data;
3430*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x46*2, &u8Data);
3431*53ee8cc1Swenshuai.xi     *u32NDA_SNR_A=(*u32NDA_SNR_A<<8)|u8Data;
3432*53ee8cc1Swenshuai.xi     //NDA SNR_AB
3433*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x49*2+1, &u8Data);
3434*53ee8cc1Swenshuai.xi     *u32NDA_SNR_AB=(u8Data&0x3F);
3435*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x49*2, &u8Data);
3436*53ee8cc1Swenshuai.xi     *u32NDA_SNR_AB = (*u32NDA_SNR_AB<<8)|u8Data;
3437*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x48*2 + 1, &u8Data);
3438*53ee8cc1Swenshuai.xi     *u32NDA_SNR_AB=(*u32NDA_SNR_AB<<8)|u8Data;
3439*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x48*2, &u8Data);
3440*53ee8cc1Swenshuai.xi     *u32NDA_SNR_AB=(*u32NDA_SNR_AB<<8)|u8Data;
3441*53ee8cc1Swenshuai.xi 
3442*53ee8cc1Swenshuai.xi     //UN_freeze
3443*53ee8cc1Swenshuai.xi     reg_frz=reg_frz&(~0x10);
3444*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_INNER_REG_BASE+0x08, reg_frz);
3445*53ee8cc1Swenshuai.xi 
3446*53ee8cc1Swenshuai.xi     if (status== FALSE)
3447*53ee8cc1Swenshuai.xi     {
3448*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetSNR Fail! \n"));
3449*53ee8cc1Swenshuai.xi         return 0;
3450*53ee8cc1Swenshuai.xi     }
3451*53ee8cc1Swenshuai.xi 
3452*53ee8cc1Swenshuai.xi     //NDA SNR
3453*53ee8cc1Swenshuai.xi     //NDA_SNR_A=(float)u32NDA_SNR_A/65536;
3454*53ee8cc1Swenshuai.xi     //NDA_SNR_AB=(float)u32NDA_SNR_AB/4194304;
3455*53ee8cc1Swenshuai.xi     //
3456*53ee8cc1Swenshuai.xi     //since support 16,32APSK we need to add judgement
3457*53ee8cc1Swenshuai.xi     /*
3458*53ee8cc1Swenshuai.xi     if(modulation_order==4)
3459*53ee8cc1Swenshuai.xi         NDA_SNR_AB=(float)sqrt(NDA_SNR_AB/(2-1.252295758529242));//for 16APSK CR2/3
3460*53ee8cc1Swenshuai.xi     else if(modulation_order==5)//(2-1.41333232789)
3461*53ee8cc1Swenshuai.xi         NDA_SNR_AB=(float)sqrt(NDA_SNR_AB/(2-1.41333232789));//for 32APSK CR3/4
3462*53ee8cc1Swenshuai.xi     else
3463*53ee8cc1Swenshuai.xi         NDA_SNR_AB=(float)sqrt(NDA_SNR_AB);
3464*53ee8cc1Swenshuai.xi 
3465*53ee8cc1Swenshuai.xi     NDA_SNR_LINEAR =(1/((NDA_SNR_A/NDA_SNR_AB)-1)) ;
3466*53ee8cc1Swenshuai.xi 
3467*53ee8cc1Swenshuai.xi     if(NDA_SNR_LINEAR<=0)
3468*53ee8cc1Swenshuai.xi         NDA_SNR=1.0;
3469*53ee8cc1Swenshuai.xi     else
3470*53ee8cc1Swenshuai.xi          NDA_SNR=10*log10(NDA_SNR_LINEAR);
3471*53ee8cc1Swenshuai.xi 
3472*53ee8cc1Swenshuai.xi     //printf("[DVBS]: NDA_SNR ================================: %.1f\n", NDA_SNR);
3473*53ee8cc1Swenshuai.xi     _f_DVBS_CurrentSNR = NDA_SNR;
3474*53ee8cc1Swenshuai.xi     */
3475*53ee8cc1Swenshuai.xi     /*
3476*53ee8cc1Swenshuai.xi         //[DVBS/S2, QPSK/8PSK, 1/2~9/10 the same CN]
3477*53ee8cc1Swenshuai.xi         snr_poly = 0.0;     //use Polynomial curve fitting to fix SNR
3478*53ee8cc1Swenshuai.xi         snr_poly = 0.005261367463671*pow(NDA_SNR, 3)-0.116517828301214*pow(NDA_SNR, 2)+0.744836970505452*pow(NDA_SNR, 1)-0.86727609780167;
3479*53ee8cc1Swenshuai.xi         Fixed_SNR = NDA_SNR + snr_poly;
3480*53ee8cc1Swenshuai.xi         //printf("[DVBS]: NDA_SNR + snr_poly =====================: %.1f\n", Fixed_SNR);
3481*53ee8cc1Swenshuai.xi 
3482*53ee8cc1Swenshuai.xi         if (Fixed_SNR < 17.0)
3483*53ee8cc1Swenshuai.xi             Fixed_SNR = Fixed_SNR;
3484*53ee8cc1Swenshuai.xi         else if ((Fixed_SNR < 20.0) && (Fixed_SNR >= 17.0))
3485*53ee8cc1Swenshuai.xi             Fixed_SNR = Fixed_SNR - 0.8;
3486*53ee8cc1Swenshuai.xi         else if ((Fixed_SNR < 22.5) && (Fixed_SNR >= 20.0))
3487*53ee8cc1Swenshuai.xi             Fixed_SNR = Fixed_SNR - 2.0;
3488*53ee8cc1Swenshuai.xi         else if ((Fixed_SNR < 27.0) && (Fixed_SNR >= 22.5))
3489*53ee8cc1Swenshuai.xi             Fixed_SNR = Fixed_SNR - 3.0;
3490*53ee8cc1Swenshuai.xi         else if ((Fixed_SNR < 29.0) && (Fixed_SNR >= 27.0))
3491*53ee8cc1Swenshuai.xi             Fixed_SNR = Fixed_SNR - 3.5;
3492*53ee8cc1Swenshuai.xi         else if (Fixed_SNR >= 29.0)
3493*53ee8cc1Swenshuai.xi             Fixed_SNR = Fixed_SNR - 3.0;
3494*53ee8cc1Swenshuai.xi 
3495*53ee8cc1Swenshuai.xi         if (Fixed_SNR < 1.0)
3496*53ee8cc1Swenshuai.xi             Fixed_SNR = 1.0;
3497*53ee8cc1Swenshuai.xi         if (Fixed_SNR > 30.0)
3498*53ee8cc1Swenshuai.xi             Fixed_SNR = 30.0;
3499*53ee8cc1Swenshuai.xi     */
3500*53ee8cc1Swenshuai.xi     //*f_snr = NDA_SNR;
3501*53ee8cc1Swenshuai.xi      //printf("[DVBS]: NDA_SNR=============================: %.1f\n", NDA_SNR);
3502*53ee8cc1Swenshuai.xi     #endif
3503*53ee8cc1Swenshuai.xi 
3504*53ee8cc1Swenshuai.xi     // freeze FW write SNR
3505*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_INFO_07, &u8Data);
3506*53ee8cc1Swenshuai.xi     u8Data |= 0x01;
3507*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_INFO_07, u8Data);
3508*53ee8cc1Swenshuai.xi 
3509*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_INFO_07, &u8Data);
3510*53ee8cc1Swenshuai.xi     *u32NDA_SNR_A = u8Data;
3511*53ee8cc1Swenshuai.xi 
3512*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_INFO_08, &u8Data);
3513*53ee8cc1Swenshuai.xi     *u32NDA_SNR_AB = u8Data;
3514*53ee8cc1Swenshuai.xi 
3515*53ee8cc1Swenshuai.xi     // unfreeze FW write SNR
3516*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_INFO_07, &u8Data);
3517*53ee8cc1Swenshuai.xi     u8Data &= (~0x01);
3518*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_INFO_07, u8Data);
3519*53ee8cc1Swenshuai.xi 
3520*53ee8cc1Swenshuai.xi     return status;
3521*53ee8cc1Swenshuai.xi }
3522*53ee8cc1Swenshuai.xi 
INTERN_DVBS_GetIFAGC(MS_U8 * ifagc_reg,MS_U8 * ifagc_reg_lsb,MS_U16 * ifagc_err)3523*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetIFAGC(MS_U8 *ifagc_reg, MS_U8 *ifagc_reg_lsb, MS_U16 *ifagc_err)
3524*53ee8cc1Swenshuai.xi {
3525*53ee8cc1Swenshuai.xi 	MS_BOOL status = true;
3526*53ee8cc1Swenshuai.xi 
3527*53ee8cc1Swenshuai.xi 	status = HAL_DMD_IFAGC_RegRead(ifagc_reg, ifagc_reg_lsb, ifagc_err);
3528*53ee8cc1Swenshuai.xi 
3529*53ee8cc1Swenshuai.xi 	return status;
3530*53ee8cc1Swenshuai.xi }
3531*53ee8cc1Swenshuai.xi 
3532*53ee8cc1Swenshuai.xi //SSI
INTERN_DVBS_GetSignalStrength(MS_U16 fRFPowerDbm,DMD_DVBS_DEMOD_TYPE * pDemodType,MS_U8 * u8_DVBS2_CurrentCodeRateLocal,MS_U8 * u8_DVBS2_CurrentConstellationLocal)3533*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetSignalStrength(MS_U16 fRFPowerDbm, DMD_DVBS_DEMOD_TYPE *pDemodType, MS_U8  *u8_DVBS2_CurrentCodeRateLocal,  MS_U8   *u8_DVBS2_CurrentConstellationLocal)
3534*53ee8cc1Swenshuai.xi {
3535*53ee8cc1Swenshuai.xi     //-1.2~-92.2 dBm
3536*53ee8cc1Swenshuai.xi     MS_BOOL status = true;
3537*53ee8cc1Swenshuai.xi     MS_U8   u8Data =0;
3538*53ee8cc1Swenshuai.xi     //MS_U8   _u8_DVBS2_CurrentCodeRateLocal = 0;
3539*53ee8cc1Swenshuai.xi     //float   ch_power_db=0.0f, ch_power_db_rel=0.0f;
3540*53ee8cc1Swenshuai.xi     //MS_U8   u8Data2 = 0;
3541*53ee8cc1Swenshuai.xi     //MS_U8   _u8_DVBS2_CurrentConstellationLocal = 0;
3542*53ee8cc1Swenshuai.xi     //DMD_DVBS_DEMOD_TYPE pDemodType = 0;
3543*53ee8cc1Swenshuai.xi 
3544*53ee8cc1Swenshuai.xi     //DBG_INTERN_DVBS_TIME(printf("INTERN_DVBS_GetSignalStrength, t=%ld, RF level=%f, Table=%lx\n",MsOS_GetSystemTime(), fRFPowerDbm, (MS_U32)(sDMD_DVBS_InitData->pTuner_RfagcSsi)));
3545*53ee8cc1Swenshuai.xi 
3546*53ee8cc1Swenshuai.xi     // if (INTERN_DVBC_Lock(COFDM_TPS_LOCK))
3547*53ee8cc1Swenshuai.xi     // if (INTERN_DVBC_Lock(COFDM_AGC_LOCK))
3548*53ee8cc1Swenshuai.xi     // Actually, it's more reasonable, that signal level depended on cable input power level
3549*53ee8cc1Swenshuai.xi     // thougth the signal isn't dvb-t signal.
3550*53ee8cc1Swenshuai.xi     //
3551*53ee8cc1Swenshuai.xi     // use pointer of IFAGC table to identify
3552*53ee8cc1Swenshuai.xi     // case 1: RFAGC from SAR, IFAGC controlled by demod
3553*53ee8cc1Swenshuai.xi     // case 2: RFAGC from tuner, ,IFAGC controlled by demod
3554*53ee8cc1Swenshuai.xi     //status=HAL_DMD_GetRFLevel(&ch_power_db, fRFPowerDbm, u8SarValue,
3555*53ee8cc1Swenshuai.xi     //                          sDMD_DVBS_InitData->pTuner_RfagcSsi, sDMD_DVBS_InitData->u16Tuner_RfagcSsi_Size,
3556*53ee8cc1Swenshuai.xi     //                          sDMD_DVBS_InitData->pTuner_IfagcSsi_HiRef, sDMD_DVBS_InitData->u16Tuner_IfagcSsi_HiRef_Size,
3557*53ee8cc1Swenshuai.xi     //                          sDMD_DVBS_InitData->pTuner_IfagcSsi_LoRef, sDMD_DVBS_InitData->u16Tuner_IfagcSsi_LoRef_Size,
3558*53ee8cc1Swenshuai.xi     //                          sDMD_DVBS_InitData->pTuner_IfagcErr_HiRef, sDMD_DVBS_InitData->u16Tuner_IfagcErr_HiRef_Size,
3559*53ee8cc1Swenshuai.xi     //                          sDMD_DVBS_InitData->pTuner_IfagcErr_LoRef, sDMD_DVBS_InitData->u16Tuner_IfagcErr_LoRef_Size);
3560*53ee8cc1Swenshuai.xi     //ch_power_db = INTERN_DVBS_GetTunrSignalLevel_PWR();
3561*53ee8cc1Swenshuai.xi     //printf("@@@@@@@@@ ch_power_db = %f \n", ch_power_db);
3562*53ee8cc1Swenshuai.xi 
3563*53ee8cc1Swenshuai.xi 
3564*53ee8cc1Swenshuai.xi 
3565*53ee8cc1Swenshuai.xi 
3566*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_GetCurrentDemodType(pDemodType);
3567*53ee8cc1Swenshuai.xi 
3568*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_CODE_RATE, &u8Data);
3569*53ee8cc1Swenshuai.xi     *u8_DVBS2_CurrentCodeRateLocal = u8Data;
3570*53ee8cc1Swenshuai.xi 
3571*53ee8cc1Swenshuai.xi 
3572*53ee8cc1Swenshuai.xi     if((MS_U8)*pDemodType == (MS_U8)DMD_SAT_DVBS) // DVBS
3573*53ee8cc1Swenshuai.xi     {
3574*53ee8cc1Swenshuai.xi         /*
3575*53ee8cc1Swenshuai.xi 		float fDVBS_SSI_Pref[]=
3576*53ee8cc1Swenshuai.xi         {
3577*53ee8cc1Swenshuai.xi             //0,       1,       2,       3,       4
3578*53ee8cc1Swenshuai.xi             -78.9,   -77.15,  -76.14,  -75.19,  -74.57,//QPSK
3579*53ee8cc1Swenshuai.xi         };
3580*53ee8cc1Swenshuai.xi         */
3581*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_REG_BASE + 0x84, &u8Data);
3582*53ee8cc1Swenshuai.xi         //ch_power_db_rel = ch_power_db - fDVBS_SSI_Pref[_u8_DVBS2_CurrentCodeRateLocal];
3583*53ee8cc1Swenshuai.xi     }
3584*53ee8cc1Swenshuai.xi     else // DVBS2
3585*53ee8cc1Swenshuai.xi     {
3586*53ee8cc1Swenshuai.xi         /*
3587*53ee8cc1Swenshuai.xi         float fDVBS2_SSI_Pref[][11]=
3588*53ee8cc1Swenshuai.xi         {
3589*53ee8cc1Swenshuai.xi         //  0,    1,       2,       3,       4,       5,       6,       7,       8,        9,       10
3590*53ee8cc1Swenshuai.xi         //1/4,    1/3,     2/5,     1/2,     3/5,     2/3,     3/4,     4/5,     5/6,      8/9,     9/10
3591*53ee8cc1Swenshuai.xi         {-85.17, -84.08,  -83.15,  -81.86,  -80.63,  -79.77,  -78.84,  -78.19,  -77.69,   -76.68,  -76.46}, //QPSK
3592*53ee8cc1Swenshuai.xi         {   0.0,    0.0,     0.0,     0.0,  -77.36,  -76.24,  -74.95,     0.0,  -73.52,   -72.18,  -71.84}  //8PSK
3593*53ee8cc1Swenshuai.xi         };
3594*53ee8cc1Swenshuai.xi         */
3595*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MOD_TYPE, &u8Data);
3596*53ee8cc1Swenshuai.xi         *u8_DVBS2_CurrentConstellationLocal = u8Data;
3597*53ee8cc1Swenshuai.xi     }
3598*53ee8cc1Swenshuai.xi         //ch_power_db_rel = ch_power_db - fDVBS2_SSI_Pref[_u8_DVBS2_CurrentConstellationLocal][_u8_DVBS2_CurrentCodeRateLocal];
3599*53ee8cc1Swenshuai.xi 
3600*53ee8cc1Swenshuai.xi /*
3601*53ee8cc1Swenshuai.xi     if(ch_power_db_rel <= -15.0f)
3602*53ee8cc1Swenshuai.xi     {
3603*53ee8cc1Swenshuai.xi         *pu16SignalBar = 0;
3604*53ee8cc1Swenshuai.xi     }
3605*53ee8cc1Swenshuai.xi     else if (ch_power_db_rel <= 0.0f)
3606*53ee8cc1Swenshuai.xi     {
3607*53ee8cc1Swenshuai.xi         *pu16SignalBar = (MS_U16)(2.0f/3 * (ch_power_db_rel+15.0f));
3608*53ee8cc1Swenshuai.xi     }
3609*53ee8cc1Swenshuai.xi     else if (ch_power_db_rel <= 20.0f)
3610*53ee8cc1Swenshuai.xi     {
3611*53ee8cc1Swenshuai.xi         *pu16SignalBar = (MS_U16)(4.0f * ch_power_db_rel + 10.0f);
3612*53ee8cc1Swenshuai.xi     }
3613*53ee8cc1Swenshuai.xi     else if (ch_power_db_rel <= 35.0f)
3614*53ee8cc1Swenshuai.xi     {
3615*53ee8cc1Swenshuai.xi         *pu16SignalBar = (MS_U16)(2.0f/3 * (ch_power_db_rel-20.0f) + 90.0);
3616*53ee8cc1Swenshuai.xi     }
3617*53ee8cc1Swenshuai.xi     else
3618*53ee8cc1Swenshuai.xi     {
3619*53ee8cc1Swenshuai.xi         *pu16SignalBar = 100;
3620*53ee8cc1Swenshuai.xi     }
3621*53ee8cc1Swenshuai.xi */
3622*53ee8cc1Swenshuai.xi     //printf("SSI_CH_PWR(dB) = %f \n", ch_power_db_rel);
3623*53ee8cc1Swenshuai.xi     //DBG_INTERN_DVBS(printf(">>>>>Signal Strength(SSI) = %d\n", (int)*pu16SignalBar));
3624*53ee8cc1Swenshuai.xi 
3625*53ee8cc1Swenshuai.xi     return status;
3626*53ee8cc1Swenshuai.xi }
3627*53ee8cc1Swenshuai.xi 
3628*53ee8cc1Swenshuai.xi //SQI
3629*53ee8cc1Swenshuai.xi /****************************************************************************
3630*53ee8cc1Swenshuai.xi   Subject:    To get the DVT Signal quility
3631*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_GetSignalQuality
3632*53ee8cc1Swenshuai.xi   Parmeter:  Quility
3633*53ee8cc1Swenshuai.xi   Return:      E_RESULT_SUCCESS
3634*53ee8cc1Swenshuai.xi                    E_RESULT_FAILURE
3635*53ee8cc1Swenshuai.xi   Remark:    Here we have 4 level range
3636*53ee8cc1Swenshuai.xi                   <1>.First Range => Quility =100  (You can define it by INTERN_DVBT_SIGNAL_BASE_100)
3637*53ee8cc1Swenshuai.xi                   <2>.2th Range => 60 < Quality < 100 (You can define it by INTERN_DVBT_SIGNAL_BASE_60)
3638*53ee8cc1Swenshuai.xi                   <3>.3th Range => 10 < Quality < 60  (You can define it by INTERN_DVBT_SIGNAL_BASE_10)
3639*53ee8cc1Swenshuai.xi                   <4>.4th Range => Quality <10
3640*53ee8cc1Swenshuai.xi *****************************************************************************/
3641*53ee8cc1Swenshuai.xi #if (0)
INTERN_DVBS_GetSignalQuality(MS_U16 * quality,const DMD_DVBS_InitData * sDMD_DVBS_InitData,MS_U8 u8SarValue,float fRFPowerDbm)3642*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetSignalQuality(MS_U16 *quality, const DMD_DVBS_InitData *sDMD_DVBS_InitData, MS_U8 u8SarValue, float fRFPowerDbm)
3643*53ee8cc1Swenshuai.xi {
3644*53ee8cc1Swenshuai.xi 
3645*53ee8cc1Swenshuai.xi     float       fber = 0.0;
3646*53ee8cc1Swenshuai.xi     //float       log_ber;
3647*53ee8cc1Swenshuai.xi     MS_BOOL     status = TRUE;
3648*53ee8cc1Swenshuai.xi     float       f_snr = 0.0, ber_sqi = 0.0, cn_rel = 0.0;
3649*53ee8cc1Swenshuai.xi     //MS_U8       u8Data =0;
3650*53ee8cc1Swenshuai.xi     DMD_DVBS_CODE_RATE_TYPE       _u8_DVBS2_CurrentCodeRateLocal ;
3651*53ee8cc1Swenshuai.xi     MS_U16     bchpkt_error,BCH_Eflag2_Window;
3652*53ee8cc1Swenshuai.xi     //fRFPowerDbm = fRFPowerDbm;
3653*53ee8cc1Swenshuai.xi     float snr_poly =0.0;
3654*53ee8cc1Swenshuai.xi     float Fixed_SNR =0.0;
3655*53ee8cc1Swenshuai.xi     double eFlag_PER=0.0;
3656*53ee8cc1Swenshuai.xi 
3657*53ee8cc1Swenshuai.xi     if (TRUE == INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK, 200.0f, -200.0f, 0))
3658*53ee8cc1Swenshuai.xi     {
3659*53ee8cc1Swenshuai.xi         if(_bDemodType)  //S2
3660*53ee8cc1Swenshuai.xi         {
3661*53ee8cc1Swenshuai.xi 
3662*53ee8cc1Swenshuai.xi            INTERN_DVBS_GetSNR(&f_snr);
3663*53ee8cc1Swenshuai.xi            snr_poly = 0.005261367463671*pow(f_snr, 3)-0.116517828301214*pow(f_snr, 2)+0.744836970505452*pow(f_snr, 1)-0.86727609780167;
3664*53ee8cc1Swenshuai.xi            Fixed_SNR = f_snr + snr_poly;
3665*53ee8cc1Swenshuai.xi 
3666*53ee8cc1Swenshuai.xi            if (Fixed_SNR < 17.0)
3667*53ee8cc1Swenshuai.xi               Fixed_SNR = Fixed_SNR;
3668*53ee8cc1Swenshuai.xi            else if ((Fixed_SNR < 20.0) && (Fixed_SNR >= 17.0))
3669*53ee8cc1Swenshuai.xi               Fixed_SNR = Fixed_SNR - 0.8;
3670*53ee8cc1Swenshuai.xi            else if ((Fixed_SNR < 22.5) && (Fixed_SNR >= 20.0))
3671*53ee8cc1Swenshuai.xi               Fixed_SNR = Fixed_SNR - 2.0;
3672*53ee8cc1Swenshuai.xi            else if ((Fixed_SNR < 27.0) && (Fixed_SNR >= 22.5))
3673*53ee8cc1Swenshuai.xi               Fixed_SNR = Fixed_SNR - 3.0;
3674*53ee8cc1Swenshuai.xi            else if ((Fixed_SNR < 29.0) && (Fixed_SNR >= 27.0))
3675*53ee8cc1Swenshuai.xi               Fixed_SNR = Fixed_SNR - 3.5;
3676*53ee8cc1Swenshuai.xi            else if (Fixed_SNR >= 29.0)
3677*53ee8cc1Swenshuai.xi               Fixed_SNR = Fixed_SNR - 3.0;
3678*53ee8cc1Swenshuai.xi 
3679*53ee8cc1Swenshuai.xi 
3680*53ee8cc1Swenshuai.xi            if (Fixed_SNR < 1.0)
3681*53ee8cc1Swenshuai.xi               Fixed_SNR = 1.0;
3682*53ee8cc1Swenshuai.xi            if (Fixed_SNR > 30.0)
3683*53ee8cc1Swenshuai.xi               Fixed_SNR = 30.0;
3684*53ee8cc1Swenshuai.xi 
3685*53ee8cc1Swenshuai.xi             //BCH EFLAG2_Window,  window size 0x2000
3686*53ee8cc1Swenshuai.xi             BCH_Eflag2_Window=0x2000;
3687*53ee8cc1Swenshuai.xi             MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_REG_BASE + 0x25*2 + 1, (BCH_Eflag2_Window>>8));
3688*53ee8cc1Swenshuai.xi             MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_REG_BASE + 0x25*2 , (BCH_Eflag2_Window&0xff));
3689*53ee8cc1Swenshuai.xi             INTERN_DVBS_GetPacketErr(&bchpkt_error);
3690*53ee8cc1Swenshuai.xi             eFlag_PER = (float)(bchpkt_error)/(float)(BCH_Eflag2_Window);
3691*53ee8cc1Swenshuai.xi             if(eFlag_PER>0)
3692*53ee8cc1Swenshuai.xi               fber = 0.089267531133002*pow(eFlag_PER, 2) + 0.019640560289510*eFlag_PER + 0.0000001;
3693*53ee8cc1Swenshuai.xi             else
3694*53ee8cc1Swenshuai.xi               fber = 0;
3695*53ee8cc1Swenshuai.xi 
3696*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
3697*53ee8cc1Swenshuai.xi                     //log_ber = ( - 1) *log10f(1 / fber);
3698*53ee8cc1Swenshuai.xi                     if (fber > 1.0E-1)
3699*53ee8cc1Swenshuai.xi                         ber_sqi = (log10f(1.0f/fber))*20.0f + 8.0f;
3700*53ee8cc1Swenshuai.xi                     else if(fber > 8.5E-7)
3701*53ee8cc1Swenshuai.xi                         ber_sqi = (log10f(1.0f/fber))*20.0f - 30.0f;
3702*53ee8cc1Swenshuai.xi                     else
3703*53ee8cc1Swenshuai.xi                         ber_sqi = 100.0;
3704*53ee8cc1Swenshuai.xi #else
3705*53ee8cc1Swenshuai.xi                     //log_ber = ( - 1) *Log10Approx(1 / fber);
3706*53ee8cc1Swenshuai.xi                     if (fber > 1.0E-1)
3707*53ee8cc1Swenshuai.xi                         ber_sqi = (Log10Approx(1.0f/fber))*20.0f + 8.0f;
3708*53ee8cc1Swenshuai.xi                     else if(fber > 8.5E-7)
3709*53ee8cc1Swenshuai.xi                         ber_sqi = (Log10Approx(1.0f/fber))*20.0f - 30.0f;
3710*53ee8cc1Swenshuai.xi                     else
3711*53ee8cc1Swenshuai.xi                         ber_sqi = 100.0;
3712*53ee8cc1Swenshuai.xi 
3713*53ee8cc1Swenshuai.xi #endif
3714*53ee8cc1Swenshuai.xi 
3715*53ee8cc1Swenshuai.xi             *quality = Fixed_SNR/30*ber_sqi;
3716*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(printf(" Fixed_SNR %f\n",Fixed_SNR));
3717*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(printf(" BCH_Eflag2_Window %d\n",BCH_Eflag2_Window));
3718*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(printf(" eFlag_PER [%f]\n fber [%8.3e]\n ber_sqi [%f]\n",eFlag_PER,fber,ber_sqi));
3719*53ee8cc1Swenshuai.xi         }
3720*53ee8cc1Swenshuai.xi         else  //S
3721*53ee8cc1Swenshuai.xi         {
3722*53ee8cc1Swenshuai.xi             if (INTERN_DVBS_GetPostViterbiBer(&fber) == FALSE)//ViterbiBer
3723*53ee8cc1Swenshuai.xi             {
3724*53ee8cc1Swenshuai.xi                 DBG_INTERN_DVBS(printf("\nGetPostViterbiBer Fail!"));
3725*53ee8cc1Swenshuai.xi                 return FALSE;
3726*53ee8cc1Swenshuai.xi             }
3727*53ee8cc1Swenshuai.xi             _fPostBer=fber;
3728*53ee8cc1Swenshuai.xi 
3729*53ee8cc1Swenshuai.xi 
3730*53ee8cc1Swenshuai.xi             if (status==FALSE)
3731*53ee8cc1Swenshuai.xi             {
3732*53ee8cc1Swenshuai.xi                 DBG_INTERN_DVBS(printf("MSB131X_DTV_GetSignalQuality GetPostViterbiBer Fail!\n"));
3733*53ee8cc1Swenshuai.xi                 return 0;
3734*53ee8cc1Swenshuai.xi             }
3735*53ee8cc1Swenshuai.xi             float fDVBS_SQI_CNref[]=
3736*53ee8cc1Swenshuai.xi             {   //0,    1,    2,    3,    4
3737*53ee8cc1Swenshuai.xi                 4.2,   5.9,  6,  6.9,  7.5,//QPSK
3738*53ee8cc1Swenshuai.xi             };
3739*53ee8cc1Swenshuai.xi 
3740*53ee8cc1Swenshuai.xi             INTERN_DVBS_GetCurrentDemodCodeRate(&_u8_DVBS2_CurrentCodeRateLocal);
3741*53ee8cc1Swenshuai.xi #if 0
3742*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
3743*53ee8cc1Swenshuai.xi             log_ber = ( - 1.0f) *log10f(1.0f / fber);           //BY modify
3744*53ee8cc1Swenshuai.xi #else
3745*53ee8cc1Swenshuai.xi             log_ber = ( - 1.0f) *Log10Approx(1.0f / fber);      //BY modify
3746*53ee8cc1Swenshuai.xi #endif
3747*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(printf("\nLog(BER) = %f\n",log_ber));
3748*53ee8cc1Swenshuai.xi #endif
3749*53ee8cc1Swenshuai.xi             if (fber > 2.5E-2)
3750*53ee8cc1Swenshuai.xi                 ber_sqi = 0.0;
3751*53ee8cc1Swenshuai.xi             else if(fber > 8.5E-7)
3752*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
3753*53ee8cc1Swenshuai.xi                 ber_sqi = (log10f(1.0f/fber))*20.0f - 32.0f; //40.0f;
3754*53ee8cc1Swenshuai.xi #else
3755*53ee8cc1Swenshuai.xi                 ber_sqi = (Log10Approx(1.0f/fber))*20.0f - 32.0f;//40.0f;
3756*53ee8cc1Swenshuai.xi #endif
3757*53ee8cc1Swenshuai.xi             else
3758*53ee8cc1Swenshuai.xi                 ber_sqi = 100.0;
3759*53ee8cc1Swenshuai.xi 
3760*53ee8cc1Swenshuai.xi             status &= INTERN_DVBS_GetSNR(&f_snr);
3761*53ee8cc1Swenshuai.xi             DBG_GET_SIGNAL_DVBS(printf("INTERN_DVBS GetSNR = %d \n", (int)f_snr));
3762*53ee8cc1Swenshuai.xi 
3763*53ee8cc1Swenshuai.xi             cn_rel = f_snr - fDVBS_SQI_CNref[_u8_DVBS2_CurrentCodeRateLocal];
3764*53ee8cc1Swenshuai.xi 
3765*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(printf(" fber = %f\n",fber));
3766*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(printf(" f_snr = %f\n",f_snr));
3767*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(printf(" cn_nordig_s1 = %f\n",fDVBS_SQI_CNref[_u8_DVBS2_CurrentCodeRateLocal]));
3768*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(printf(" cn_rel = %f\n",cn_rel));
3769*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(printf(" ber_sqi = %f\n",ber_sqi));
3770*53ee8cc1Swenshuai.xi 
3771*53ee8cc1Swenshuai.xi             if (cn_rel < -7.0f)
3772*53ee8cc1Swenshuai.xi             {
3773*53ee8cc1Swenshuai.xi                 *quality = 0;
3774*53ee8cc1Swenshuai.xi             }
3775*53ee8cc1Swenshuai.xi             else if (cn_rel < 3.0)
3776*53ee8cc1Swenshuai.xi             {
3777*53ee8cc1Swenshuai.xi                 *quality = (MS_U16)(ber_sqi*((cn_rel - 3.0)/10.0 + 1.0));
3778*53ee8cc1Swenshuai.xi             }
3779*53ee8cc1Swenshuai.xi             else
3780*53ee8cc1Swenshuai.xi             {
3781*53ee8cc1Swenshuai.xi                 *quality = (MS_U16)ber_sqi;
3782*53ee8cc1Swenshuai.xi             }
3783*53ee8cc1Swenshuai.xi 
3784*53ee8cc1Swenshuai.xi 
3785*53ee8cc1Swenshuai.xi         }
3786*53ee8cc1Swenshuai.xi             //INTERN_DVBS_GetTunrSignalLevel_PWR();//For Debug.
3787*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(printf(">>>>>Signal Quility(SQI) = %d\n", *quality));
3788*53ee8cc1Swenshuai.xi             return TRUE;
3789*53ee8cc1Swenshuai.xi     }
3790*53ee8cc1Swenshuai.xi     else
3791*53ee8cc1Swenshuai.xi     {
3792*53ee8cc1Swenshuai.xi         *quality = 0;
3793*53ee8cc1Swenshuai.xi     }
3794*53ee8cc1Swenshuai.xi 
3795*53ee8cc1Swenshuai.xi     return TRUE;
3796*53ee8cc1Swenshuai.xi }
3797*53ee8cc1Swenshuai.xi #endif
3798*53ee8cc1Swenshuai.xi /****************************************************************************
3799*53ee8cc1Swenshuai.xi   Subject:    To get the Cell ID
3800*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_Get_CELL_ID
3801*53ee8cc1Swenshuai.xi   Parmeter:   point to return parameter cell_id
3802*53ee8cc1Swenshuai.xi 
3803*53ee8cc1Swenshuai.xi   Return:     TRUE
3804*53ee8cc1Swenshuai.xi               FALSE
3805*53ee8cc1Swenshuai.xi   Remark:
3806*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_Get_CELL_ID(MS_U16 * cell_id)3807*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Get_CELL_ID(MS_U16 *cell_id)
3808*53ee8cc1Swenshuai.xi {
3809*53ee8cc1Swenshuai.xi     MS_BOOL status = true;
3810*53ee8cc1Swenshuai.xi     MS_U8 value1 = 0;
3811*53ee8cc1Swenshuai.xi     MS_U8 value2 = 0;
3812*53ee8cc1Swenshuai.xi 
3813*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FDP_REG_BASE+0x2B, &value2); //TPS Cell ID [15:8]
3814*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FDP_REG_BASE+0x2A, &value1); //TPS Cell ID [7:0]
3815*53ee8cc1Swenshuai.xi 
3816*53ee8cc1Swenshuai.xi     *cell_id = ((MS_U16)value1<<8)|value2;
3817*53ee8cc1Swenshuai.xi     return status;
3818*53ee8cc1Swenshuai.xi }
3819*53ee8cc1Swenshuai.xi 
3820*53ee8cc1Swenshuai.xi /****************************************************************************
3821*53ee8cc1Swenshuai.xi   Subject:    To get the DVBC Carrier Freq Offset
3822*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_Get_FreqOffset
3823*53ee8cc1Swenshuai.xi   Parmeter:   Frequency offset (in KHz), bandwidth
3824*53ee8cc1Swenshuai.xi   Return:     E_RESULT_SUCCESS
3825*53ee8cc1Swenshuai.xi               E_RESULT_FAILURE
3826*53ee8cc1Swenshuai.xi   Remark:
3827*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_Get_FreqOffset(MS_S16 * s16CFO)3828*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Get_FreqOffset(MS_S16 *s16CFO)
3829*53ee8cc1Swenshuai.xi {
3830*53ee8cc1Swenshuai.xi     MS_U8       u8Data=0;
3831*53ee8cc1Swenshuai.xi     MS_U16      u16Data;
3832*53ee8cc1Swenshuai.xi     //MS_S16      s16CFO;
3833*53ee8cc1Swenshuai.xi     //float       FreqOffset;
3834*53ee8cc1Swenshuai.xi     //MS_U32      u32FreqOffset = 0;
3835*53ee8cc1Swenshuai.xi     //MS_U8       reg = 0;
3836*53ee8cc1Swenshuai.xi     MS_BOOL     status = TRUE;
3837*53ee8cc1Swenshuai.xi 
3838*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD",">>> INTERN_DVBS_Get_FreqOffset DVBS_Estimated_CFO <<<\n"));
3839*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_97, &u8Data);
3840*53ee8cc1Swenshuai.xi     u16Data=u8Data;
3841*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_96, &u8Data);
3842*53ee8cc1Swenshuai.xi     u16Data=(u16Data<<8)|u8Data;                            //Center_Freq_Offset
3843*53ee8cc1Swenshuai.xi 
3844*53ee8cc1Swenshuai.xi     if (u16Data >= 0x8000)
3845*53ee8cc1Swenshuai.xi     {
3846*53ee8cc1Swenshuai.xi         u16Data = 0x10000- u16Data;
3847*53ee8cc1Swenshuai.xi         *s16CFO = -1*u16Data;
3848*53ee8cc1Swenshuai.xi     }
3849*53ee8cc1Swenshuai.xi     else
3850*53ee8cc1Swenshuai.xi     {
3851*53ee8cc1Swenshuai.xi         *s16CFO=u16Data;
3852*53ee8cc1Swenshuai.xi     }
3853*53ee8cc1Swenshuai.xi 
3854*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD",">>> INTERN_DVBS_Get_FreqOffset CFO = %d[KHz] <<<\n", *s16CFO));
3855*53ee8cc1Swenshuai.xi 
3856*53ee8cc1Swenshuai.xi     return status;
3857*53ee8cc1Swenshuai.xi }
3858*53ee8cc1Swenshuai.xi 
INTERN_DVBS_Get_IQ_MODE(HAL_DEMOD_EN_SAT_IQ_MODE * SAT_IQ_MODE)3859*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Get_IQ_MODE(HAL_DEMOD_EN_SAT_IQ_MODE *SAT_IQ_MODE)
3860*53ee8cc1Swenshuai.xi {
3861*53ee8cc1Swenshuai.xi     MS_BOOL status = true;
3862*53ee8cc1Swenshuai.xi     MS_U8 u8Data = 0;
3863*53ee8cc1Swenshuai.xi 
3864*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_Get_IQ_MODE\n"));
3865*53ee8cc1Swenshuai.xi 
3866*53ee8cc1Swenshuai.xi     if(_bDemodType) // DVBS2
3867*53ee8cc1Swenshuai.xi     {
3868*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_MIXER_IQ_SWAP_OUT, &u8Data);
3869*53ee8cc1Swenshuai.xi 
3870*53ee8cc1Swenshuai.xi         if( (u8Data&0x02) == 0x00 )
3871*53ee8cc1Swenshuai.xi             *SAT_IQ_MODE = HAL_DEMOD_SAT_IQ_NORMAL;
3872*53ee8cc1Swenshuai.xi         else
3873*53ee8cc1Swenshuai.xi             *SAT_IQ_MODE = HAL_DEMOD_SAT_IQ_INVERSE;
3874*53ee8cc1Swenshuai.xi     }
3875*53ee8cc1Swenshuai.xi     else // DVBS
3876*53ee8cc1Swenshuai.xi     {
3877*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSFEC_VITERBI_IQ_SWAP, &u8Data);
3878*53ee8cc1Swenshuai.xi 
3879*53ee8cc1Swenshuai.xi         if( (u8Data & 0x04) == 0)
3880*53ee8cc1Swenshuai.xi             *SAT_IQ_MODE = HAL_DEMOD_SAT_IQ_NORMAL;
3881*53ee8cc1Swenshuai.xi         else
3882*53ee8cc1Swenshuai.xi             *SAT_IQ_MODE = HAL_DEMOD_SAT_IQ_INVERSE;
3883*53ee8cc1Swenshuai.xi     }
3884*53ee8cc1Swenshuai.xi 
3885*53ee8cc1Swenshuai.xi     return status;
3886*53ee8cc1Swenshuai.xi }
3887*53ee8cc1Swenshuai.xi 
3888*53ee8cc1Swenshuai.xi /****************************************************************************
3889*53ee8cc1Swenshuai.xi   Subject:    To get the current modulation type at the DVB-S Demod
3890*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_GetCurrentModulationType
3891*53ee8cc1Swenshuai.xi   Parmeter:   pointer for return QAM type
3892*53ee8cc1Swenshuai.xi 
3893*53ee8cc1Swenshuai.xi   Return:     TRUE
3894*53ee8cc1Swenshuai.xi               FALSE
3895*53ee8cc1Swenshuai.xi   Remark:
3896*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetCurrentModulationType(DMD_DVBS_MODULATION_TYPE * pQAMMode)3897*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentModulationType(DMD_DVBS_MODULATION_TYPE *pQAMMode)
3898*53ee8cc1Swenshuai.xi {
3899*53ee8cc1Swenshuai.xi     MS_U8 u8Data=0;
3900*53ee8cc1Swenshuai.xi     MS_U16 u16tmp=0;
3901*53ee8cc1Swenshuai.xi     MS_U8 MOD_type;
3902*53ee8cc1Swenshuai.xi     MS_BOOL     status = true;
3903*53ee8cc1Swenshuai.xi     //DMD_DVBS_DEMOD_TYPE pDemodType = 0;
3904*53ee8cc1Swenshuai.xi 
3905*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetCurrentModulationType\n"));
3906*53ee8cc1Swenshuai.xi 
3907*53ee8cc1Swenshuai.xi     //status &= INTERN_DVBS_GetCurrentDemodType(&pDemodType);
3908*53ee8cc1Swenshuai.xi 
3909*53ee8cc1Swenshuai.xi     // read code rate, pilot on/off, long/short FEC type, and modulation type for calculating TOP_DVBTM_TS_CLK_DIVNUM
3910*53ee8cc1Swenshuai.xi     // pilot_flag     =>   0 : off    1 : on
3911*53ee8cc1Swenshuai.xi     // fec_type_idx   =>   0 : normal 1 : short
3912*53ee8cc1Swenshuai.xi     // mod_type_idx   =>   0 : QPSK   1 : 8PSK   2 : 16APSK
3913*53ee8cc1Swenshuai.xi     // code_rate_idx  =>   0 : 1/4    1 : 1/3    2 : 2/5    3 : 1/2    4 : 3/5    5 : 2/3
3914*53ee8cc1Swenshuai.xi     //                     6 : 3/4    7 : 4/5    8 : 5/6    9 : 8/9   10 : 9/10
3915*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &u8Data);//V
3916*53ee8cc1Swenshuai.xi     if(u8Data)
3917*53ee8cc1Swenshuai.xi     {
3918*53ee8cc1Swenshuai.xi         *pQAMMode = DMD_DVBS_QPSK;
3919*53ee8cc1Swenshuai.xi         modulation_order=2;
3920*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","INTERN_DVBS_GetCurrentModulationType [dvbs]ModulationType=DVBS_QPSK\n");//DBG_INTERN_DVBS_LOCK(printf("[dvbs]ModulationType=DVBS_QPSK\n"));
3921*53ee8cc1Swenshuai.xi         //return TRUE;
3922*53ee8cc1Swenshuai.xi     }
3923*53ee8cc1Swenshuai.xi     else                                        //S2
3924*53ee8cc1Swenshuai.xi     {
3925*53ee8cc1Swenshuai.xi         //MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x96, &u8Data);
3926*53ee8cc1Swenshuai.xi         //printf(">>> INTERN_DVBS_GetCurrentModulationType INNER 0x4B = 0x%x <<<\n", u8Data);
3927*53ee8cc1Swenshuai.xi         //if((u8Data & 0x0F)==0x02)       //QPSK
3928*53ee8cc1Swenshuai.xi         /*MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MOD_TYPE, &u8Data1);
3929*53ee8cc1Swenshuai.xi       printf("@@@@@E_DMD_S2_MOD_TYPE = %d \n ",u8Data1);
3930*53ee8cc1Swenshuai.xi       printf("@@@@@  E_DMD_S2_MOD_TYPE=%d  \n",E_DMD_S2_MOD_TYPE);
3931*53ee8cc1Swenshuai.xi 
3932*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_IS_ID, &u8Data1);
3933*53ee8cc1Swenshuai.xi       printf("@@@@@E_DMD_S2_IS_ID = %d \n ",u8Data1);
3934*53ee8cc1Swenshuai.xi       printf("@@@@@  E_DMD_S2_IS_ID=%d  \n",E_DMD_S2_IS_ID);*/
3935*53ee8cc1Swenshuai.xi 
3936*53ee8cc1Swenshuai.xi         // INNER_DEBUG_SEL
3937*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_ReadReg(INNER_DEBUG_SEL, &u8Data);
3938*53ee8cc1Swenshuai.xi         u8Data &= 0xc0;
3939*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_WriteReg(INNER_DEBUG_SEL, u8Data);
3940*53ee8cc1Swenshuai.xi         // reg_plscdec_debug_out
3941*53ee8cc1Swenshuai.xi         // PLSCDEC info
3942*53ee8cc1Swenshuai.xi         //[0:7] PLSC MODCOD
3943*53ee8cc1Swenshuai.xi         //[8:12] modulation_type
3944*53ee8cc1Swenshuai.xi         //[13] dummy frame
3945*53ee8cc1Swenshuai.xi         //[14] reserved_frame
3946*53ee8cc1Swenshuai.xi         //[15] is DVBS2X
3947*53ee8cc1Swenshuai.xi         //[16:22] code rate
3948*53ee8cc1Swenshuai.xi         //[23] FEC type
3949*53ee8cc1Swenshuai.xi         //[24] pilot type
3950*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_ReadReg(INNER_PLSCDEC_DEBUG_OUT1, &u8Data);
3951*53ee8cc1Swenshuai.xi         u16tmp = (MS_U16)(u8Data & 0x1F);
3952*53ee8cc1Swenshuai.xi         MOD_type = u16tmp;
3953*53ee8cc1Swenshuai.xi         switch(MOD_type)
3954*53ee8cc1Swenshuai.xi         {
3955*53ee8cc1Swenshuai.xi             case 2:
3956*53ee8cc1Swenshuai.xi             {
3957*53ee8cc1Swenshuai.xi                 *pQAMMode = DMD_DVBS_QPSK;
3958*53ee8cc1Swenshuai.xi                 modulation_order=2;
3959*53ee8cc1Swenshuai.xi                 ULOGD("DEMOD","INTERN_DVBS_GetCurrentModulationType [dvbs2]ModulationType=DVBS2_QPSK\n");//DBG_INTERN_DVBS_LOCK(printf("[dvbs]ModulationType=DVBS2_QPSK\n"));
3960*53ee8cc1Swenshuai.xi             }
3961*53ee8cc1Swenshuai.xi             break;
3962*53ee8cc1Swenshuai.xi 
3963*53ee8cc1Swenshuai.xi             case 3:
3964*53ee8cc1Swenshuai.xi             {
3965*53ee8cc1Swenshuai.xi                 *pQAMMode = DMD_DVBS_8PSK;
3966*53ee8cc1Swenshuai.xi                 modulation_order=3;
3967*53ee8cc1Swenshuai.xi                 ULOGD("DEMOD","INTERN_DVBS_GetCurrentModulationType [dvbs2]ModulationType=DVBS2_8PSK\n");//DBG_INTERN_DVBS_LOCK(printf("[dvbs]ModulationType=DVBS2_8PSK\n"));
3968*53ee8cc1Swenshuai.xi             }
3969*53ee8cc1Swenshuai.xi 
3970*53ee8cc1Swenshuai.xi             break;
3971*53ee8cc1Swenshuai.xi 
3972*53ee8cc1Swenshuai.xi             case 4:
3973*53ee8cc1Swenshuai.xi             {
3974*53ee8cc1Swenshuai.xi                 *pQAMMode = DMD_DVBS_16APSK;
3975*53ee8cc1Swenshuai.xi                 modulation_order=4;
3976*53ee8cc1Swenshuai.xi                 ULOGD("DEMOD","INTERN_DVBS_GetCurrentModulationType [dvbs2]ModulationType=DVBS2_16APSK\n");
3977*53ee8cc1Swenshuai.xi             }
3978*53ee8cc1Swenshuai.xi             break;
3979*53ee8cc1Swenshuai.xi 
3980*53ee8cc1Swenshuai.xi             case 5:
3981*53ee8cc1Swenshuai.xi             {
3982*53ee8cc1Swenshuai.xi                 *pQAMMode = DMD_DVBS_32APSK;
3983*53ee8cc1Swenshuai.xi                 modulation_order=5;
3984*53ee8cc1Swenshuai.xi                 ULOGD("DEMOD","INTERN_DVBS_GetCurrentModulationType [dvbs2]ModulationType=DVBS2_32APSK\n");//DBG_INTERN_DVBS_LOCK(printf("[dvbs]ModulationType=DVBS2_QPSK\n"));
3985*53ee8cc1Swenshuai.xi             }
3986*53ee8cc1Swenshuai.xi             break;
3987*53ee8cc1Swenshuai.xi 
3988*53ee8cc1Swenshuai.xi             case 6:
3989*53ee8cc1Swenshuai.xi             {
3990*53ee8cc1Swenshuai.xi                 *pQAMMode = DMD_DVBS_8APSK;
3991*53ee8cc1Swenshuai.xi                 modulation_order=3;
3992*53ee8cc1Swenshuai.xi                 ULOGD("DEMOD","INTERN_DVBS_GetCurrentModulationType [dvbs2]ModulationType=DVBS2_8APSK\n");//DBG_INTERN_DVBS_LOCK(printf("[dvbs]ModulationType=DVBS2_QPSK\n"));
3993*53ee8cc1Swenshuai.xi             }
3994*53ee8cc1Swenshuai.xi             break;
3995*53ee8cc1Swenshuai.xi 
3996*53ee8cc1Swenshuai.xi             case 7:
3997*53ee8cc1Swenshuai.xi             {
3998*53ee8cc1Swenshuai.xi                 *pQAMMode = DMD_DVBS_8_8APSK;
3999*53ee8cc1Swenshuai.xi                 modulation_order=4;
4000*53ee8cc1Swenshuai.xi                 ULOGD("DEMOD","INTERN_DVBS_GetCurrentModulationType [dvbs2]ModulationType=DVBS2_8+8APSK\n");//DBG_INTERN_DVBS_LOCK(printf("[dvbs]ModulationType=DVBS2_QPSK\n"));
4001*53ee8cc1Swenshuai.xi             }
4002*53ee8cc1Swenshuai.xi             break;
4003*53ee8cc1Swenshuai.xi 
4004*53ee8cc1Swenshuai.xi             case 8:
4005*53ee8cc1Swenshuai.xi             {
4006*53ee8cc1Swenshuai.xi                 *pQAMMode = DMD_DVBS_4_8_4_16APSK;
4007*53ee8cc1Swenshuai.xi                 modulation_order=5;
4008*53ee8cc1Swenshuai.xi                 ULOGD("DEMOD","INTERN_DVBS_GetCurrentModulationType [dvbs2]ModulationType=DVBS2_4+8+4+16APSK\n");//DBG_INTERN_DVBS_LOCK(printf("[dvbs]ModulationType=DVBS2_QPSK\n"));
4009*53ee8cc1Swenshuai.xi             }
4010*53ee8cc1Swenshuai.xi             break;
4011*53ee8cc1Swenshuai.xi 
4012*53ee8cc1Swenshuai.xi             default:
4013*53ee8cc1Swenshuai.xi             {
4014*53ee8cc1Swenshuai.xi                 *pQAMMode = DMD_DVBS_QPSK;
4015*53ee8cc1Swenshuai.xi                 modulation_order=2;
4016*53ee8cc1Swenshuai.xi                 ULOGD("DEMOD","INTERN_DVBS_GetCurrentModulationType [dvbs2]ModulationType=NOT SUPPORT\n");
4017*53ee8cc1Swenshuai.xi                 return FALSE;
4018*53ee8cc1Swenshuai.xi             }
4019*53ee8cc1Swenshuai.xi             break;
4020*53ee8cc1Swenshuai.xi         }
4021*53ee8cc1Swenshuai.xi     }
4022*53ee8cc1Swenshuai.xi 
4023*53ee8cc1Swenshuai.xi     return status;
4024*53ee8cc1Swenshuai.xi }
4025*53ee8cc1Swenshuai.xi 
4026*53ee8cc1Swenshuai.xi /****************************************************************************
4027*53ee8cc1Swenshuai.xi   Subject:    To get the current DemodType at the DVB-S Demod
4028*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_GetCurrentDemodType
4029*53ee8cc1Swenshuai.xi   Parmeter:   pointer for return DVBS/DVBS2 type
4030*53ee8cc1Swenshuai.xi 
4031*53ee8cc1Swenshuai.xi   Return:     TRUE
4032*53ee8cc1Swenshuai.xi               FALSE
4033*53ee8cc1Swenshuai.xi   Remark:
4034*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetCurrentDemodType(DMD_DVBS_DEMOD_TYPE * pDemodType)4035*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentDemodType(DMD_DVBS_DEMOD_TYPE *pDemodType)//V
4036*53ee8cc1Swenshuai.xi {
4037*53ee8cc1Swenshuai.xi     MS_U8 u8Data=0;
4038*53ee8cc1Swenshuai.xi     MS_BOOL     status = true;
4039*53ee8cc1Swenshuai.xi 
4040*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetCurrentDemodType\n"));
4041*53ee8cc1Swenshuai.xi 
4042*53ee8cc1Swenshuai.xi     //MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x80, &u8Data);//status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0x80, &u8Data);
4043*53ee8cc1Swenshuai.xi     //printf(">>> INTERN_DVBS_GetCurrentDemodType INNER 0x40 = 0x%x <<<\n", u8Data);
4044*53ee8cc1Swenshuai.xi     //if ((u8Data & 0x01) == 0)
4045*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &u8Data);//E_DMD_S2_SYSTEM_TYPE 0: S2 ; 1 :S
4046*53ee8cc1Swenshuai.xi     if(!u8Data)                                                       //S2
4047*53ee8cc1Swenshuai.xi     {
4048*53ee8cc1Swenshuai.xi         *pDemodType = DMD_SAT_DVBS2;
4049*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","[dvbs]DemodType=DVBS2\n"));
4050*53ee8cc1Swenshuai.xi     }
4051*53ee8cc1Swenshuai.xi     else                                                                            //S
4052*53ee8cc1Swenshuai.xi     {
4053*53ee8cc1Swenshuai.xi         *pDemodType = DMD_SAT_DVBS;
4054*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","[dvbs]DemodType=DVBS\n"));
4055*53ee8cc1Swenshuai.xi     }
4056*53ee8cc1Swenshuai.xi     return status;
4057*53ee8cc1Swenshuai.xi }
4058*53ee8cc1Swenshuai.xi /****************************************************************************
4059*53ee8cc1Swenshuai.xi   Subject:    To get the current CodeRate at the DVB-S Demod
4060*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_GetCurrentCodeRate
4061*53ee8cc1Swenshuai.xi   Parmeter:   pointer for return Code Rate type
4062*53ee8cc1Swenshuai.xi 
4063*53ee8cc1Swenshuai.xi   Return:     TRUE
4064*53ee8cc1Swenshuai.xi               FALSE
4065*53ee8cc1Swenshuai.xi   Remark:
4066*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetCurrentDemodCodeRate(DMD_DVBS_CODE_RATE_TYPE * pCodeRate)4067*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentDemodCodeRate(DMD_DVBS_CODE_RATE_TYPE *pCodeRate)
4068*53ee8cc1Swenshuai.xi {
4069*53ee8cc1Swenshuai.xi     MS_U8 u8Data = 0;//, u8_gCodeRate = 0;
4070*53ee8cc1Swenshuai.xi     MS_BOOL     status = true;
4071*53ee8cc1Swenshuai.xi 
4072*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetCurrentCodeRate\n"));
4073*53ee8cc1Swenshuai.xi     //DMD_DVBS_DEMOD_TYPE pDemodType = 0;
4074*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &u8Data);
4075*53ee8cc1Swenshuai.xi     //status &= INTERN_DVBS_GetCurrentDemodType(&pDemodType);
4076*53ee8cc1Swenshuai.xi     if(!u8Data)
4077*53ee8cc1Swenshuai.xi     //if((MS_U8)pDemodType == (MS_U8)DMD_SAT_DVBS2 )  //S2
4078*53ee8cc1Swenshuai.xi     {
4079*53ee8cc1Swenshuai.xi         //d0: 1/4, d1: 1/3, d2: 2/5, d3: 1/2, d4: 3/5, d5: 2/3, d6: 3/4, d7: 4/5, d8: 5/6, d9: 8/9, d10: 9/10,
4080*53ee8cc1Swenshuai.xi         //d11: 2/9, d12: 13/45, d13: 9/20, d14: 90/180, d15: 96/180, d16: 11/20, d17: 100/180, d18: 104/180, d19: 26/45
4081*53ee8cc1Swenshuai.xi         //d20: 18/30, d21: 28/45, d22: 23/36, d23: 116/180, d24: 20/30, d25: 124/180, d26: 25/36, d27: 128/180,, d28: 13/18
4082*53ee8cc1Swenshuai.xi         //d29: 132/180, d30: 22/30, d31: 135/180, d32: 140/180, d33: 7/9, d34: 154/180
4083*53ee8cc1Swenshuai.xi         //d35: 11/45, d36: 4/15, d37: 14/45, d38: 7/15, d39: 8/15, d40: 26/45, d41: 32/45
4084*53ee8cc1Swenshuai.xi 
4085*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_CODE_RATE, &u8Data);
4086*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0xD7, &u8Data);
4087*53ee8cc1Swenshuai.xi         //u8_gCodeRate = (u8Data & 0x3C);
4088*53ee8cc1Swenshuai.xi         //_u8_DVBS2_CurrentCodeRate = 0;
4089*53ee8cc1Swenshuai.xi         switch (u8Data)
4090*53ee8cc1Swenshuai.xi         {
4091*53ee8cc1Swenshuai.xi         case 0x00:
4092*53ee8cc1Swenshuai.xi         {
4093*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_1_4;
4094*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 8;//3
4095*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=1_4\n"));
4096*53ee8cc1Swenshuai.xi         }
4097*53ee8cc1Swenshuai.xi         break;
4098*53ee8cc1Swenshuai.xi 
4099*53ee8cc1Swenshuai.xi         case 0x01:
4100*53ee8cc1Swenshuai.xi         {
4101*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_1_3;
4102*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 6;
4103*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=1_3\n"));
4104*53ee8cc1Swenshuai.xi         }
4105*53ee8cc1Swenshuai.xi         break;
4106*53ee8cc1Swenshuai.xi         case 0x02:
4107*53ee8cc1Swenshuai.xi         {
4108*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_2_5;
4109*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 10;//5;
4110*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=2_5\n"));
4111*53ee8cc1Swenshuai.xi         }
4112*53ee8cc1Swenshuai.xi         break;
4113*53ee8cc1Swenshuai.xi         case 0x03:
4114*53ee8cc1Swenshuai.xi         {
4115*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_1_2;
4116*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4117*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=1_2\n"));
4118*53ee8cc1Swenshuai.xi         }
4119*53ee8cc1Swenshuai.xi         break;
4120*53ee8cc1Swenshuai.xi         case 0x04:
4121*53ee8cc1Swenshuai.xi         {
4122*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_3_5;
4123*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 11;//6;
4124*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=3_5\n"));
4125*53ee8cc1Swenshuai.xi         }
4126*53ee8cc1Swenshuai.xi         break;
4127*53ee8cc1Swenshuai.xi         case 0x05:
4128*53ee8cc1Swenshuai.xi         {
4129*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_2_3;
4130*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 7;//2;
4131*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=2_3\n"));
4132*53ee8cc1Swenshuai.xi         }
4133*53ee8cc1Swenshuai.xi         break;
4134*53ee8cc1Swenshuai.xi         case 0x06:
4135*53ee8cc1Swenshuai.xi         {
4136*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_3_4;
4137*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 9;//4;
4138*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=3_4\n"));
4139*53ee8cc1Swenshuai.xi         }
4140*53ee8cc1Swenshuai.xi         break;
4141*53ee8cc1Swenshuai.xi         case 0x07:
4142*53ee8cc1Swenshuai.xi         {
4143*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_4_5;
4144*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 12;//7;
4145*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=4_5\n"));
4146*53ee8cc1Swenshuai.xi         }
4147*53ee8cc1Swenshuai.xi         break;
4148*53ee8cc1Swenshuai.xi         case 0x08:
4149*53ee8cc1Swenshuai.xi         {
4150*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_5_6;
4151*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 13;//8;
4152*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=5_6\n"));
4153*53ee8cc1Swenshuai.xi         }
4154*53ee8cc1Swenshuai.xi         break;
4155*53ee8cc1Swenshuai.xi         case 0x09:
4156*53ee8cc1Swenshuai.xi         {
4157*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_8_9;
4158*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 14;//9;
4159*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=8_9\n"));
4160*53ee8cc1Swenshuai.xi         }
4161*53ee8cc1Swenshuai.xi         break;
4162*53ee8cc1Swenshuai.xi         case 0x0A:
4163*53ee8cc1Swenshuai.xi         {
4164*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_9_10;
4165*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 15;//10;
4166*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=9_10\n"));
4167*53ee8cc1Swenshuai.xi         }
4168*53ee8cc1Swenshuai.xi         break;
4169*53ee8cc1Swenshuai.xi         case 0x0B:
4170*53ee8cc1Swenshuai.xi         {
4171*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_2_9;
4172*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 16;//0;
4173*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=2_9\n"));
4174*53ee8cc1Swenshuai.xi         }
4175*53ee8cc1Swenshuai.xi         break;
4176*53ee8cc1Swenshuai.xi         case 0x0C:
4177*53ee8cc1Swenshuai.xi         {
4178*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_13_45;
4179*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 17;//0;
4180*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=13_45\n"));
4181*53ee8cc1Swenshuai.xi         }
4182*53ee8cc1Swenshuai.xi         break;
4183*53ee8cc1Swenshuai.xi         case 0x0D:
4184*53ee8cc1Swenshuai.xi         {
4185*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_9_20;
4186*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 18;//0;
4187*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=9_20\n"));
4188*53ee8cc1Swenshuai.xi         }
4189*53ee8cc1Swenshuai.xi         break;
4190*53ee8cc1Swenshuai.xi         case 0x0E:
4191*53ee8cc1Swenshuai.xi         {
4192*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_90_180;
4193*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 19;//0;
4194*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=90_180\n"));
4195*53ee8cc1Swenshuai.xi         }
4196*53ee8cc1Swenshuai.xi         break;
4197*53ee8cc1Swenshuai.xi         case 0x0F:
4198*53ee8cc1Swenshuai.xi         {
4199*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_96_180;
4200*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 20;//0;
4201*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=96_180\n"));
4202*53ee8cc1Swenshuai.xi         }
4203*53ee8cc1Swenshuai.xi         break;
4204*53ee8cc1Swenshuai.xi         case 0x10:
4205*53ee8cc1Swenshuai.xi         {
4206*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_11_20;
4207*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4208*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=11_20\n"));
4209*53ee8cc1Swenshuai.xi         }
4210*53ee8cc1Swenshuai.xi         break;
4211*53ee8cc1Swenshuai.xi         case 0x11:
4212*53ee8cc1Swenshuai.xi         {
4213*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_100_180;
4214*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4215*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=100_180\n"));
4216*53ee8cc1Swenshuai.xi         }
4217*53ee8cc1Swenshuai.xi         break;
4218*53ee8cc1Swenshuai.xi         case 0x12:
4219*53ee8cc1Swenshuai.xi         {
4220*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_104_180;
4221*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4222*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=104_180\n"));
4223*53ee8cc1Swenshuai.xi         }
4224*53ee8cc1Swenshuai.xi         break;
4225*53ee8cc1Swenshuai.xi         case 0x13:
4226*53ee8cc1Swenshuai.xi         {
4227*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_26_45_L;
4228*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4229*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=26_45\n"));
4230*53ee8cc1Swenshuai.xi         }
4231*53ee8cc1Swenshuai.xi         break;
4232*53ee8cc1Swenshuai.xi         case 0x14:
4233*53ee8cc1Swenshuai.xi         {
4234*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_18_30;
4235*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4236*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=18_30\n"));
4237*53ee8cc1Swenshuai.xi         }
4238*53ee8cc1Swenshuai.xi         break;
4239*53ee8cc1Swenshuai.xi         case 0x15:
4240*53ee8cc1Swenshuai.xi         {
4241*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_28_45;
4242*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4243*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=28_45\n"));
4244*53ee8cc1Swenshuai.xi         }
4245*53ee8cc1Swenshuai.xi         break;
4246*53ee8cc1Swenshuai.xi         case 0x16:
4247*53ee8cc1Swenshuai.xi         {
4248*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_23_36;
4249*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4250*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=23_36\n"));
4251*53ee8cc1Swenshuai.xi         }
4252*53ee8cc1Swenshuai.xi         break;
4253*53ee8cc1Swenshuai.xi         case 0x17:
4254*53ee8cc1Swenshuai.xi         {
4255*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_116_180;
4256*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4257*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=116_180\n"));
4258*53ee8cc1Swenshuai.xi         }
4259*53ee8cc1Swenshuai.xi         break;
4260*53ee8cc1Swenshuai.xi         case 0x18:
4261*53ee8cc1Swenshuai.xi         {
4262*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_20_30;
4263*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4264*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=20_30\n"));
4265*53ee8cc1Swenshuai.xi         }
4266*53ee8cc1Swenshuai.xi         break;
4267*53ee8cc1Swenshuai.xi 
4268*53ee8cc1Swenshuai.xi         case 0x19:
4269*53ee8cc1Swenshuai.xi         {
4270*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_124_180;
4271*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4272*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=124_180\n"));
4273*53ee8cc1Swenshuai.xi         }
4274*53ee8cc1Swenshuai.xi         break;
4275*53ee8cc1Swenshuai.xi         case 0x1A:
4276*53ee8cc1Swenshuai.xi         {
4277*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_25_36;
4278*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4279*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=25_36\n"));
4280*53ee8cc1Swenshuai.xi         }
4281*53ee8cc1Swenshuai.xi         break;
4282*53ee8cc1Swenshuai.xi 
4283*53ee8cc1Swenshuai.xi         case 0x1B:
4284*53ee8cc1Swenshuai.xi         {
4285*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_128_180;
4286*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4287*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=128_180\n"));
4288*53ee8cc1Swenshuai.xi         }
4289*53ee8cc1Swenshuai.xi         break;
4290*53ee8cc1Swenshuai.xi         case 0x1C:
4291*53ee8cc1Swenshuai.xi         {
4292*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_13_18;
4293*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4294*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=13_18\n"));
4295*53ee8cc1Swenshuai.xi         }
4296*53ee8cc1Swenshuai.xi         break;
4297*53ee8cc1Swenshuai.xi 
4298*53ee8cc1Swenshuai.xi         case 0x1D:
4299*53ee8cc1Swenshuai.xi         {
4300*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_132_180;
4301*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4302*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=132_180\n"));
4303*53ee8cc1Swenshuai.xi         }
4304*53ee8cc1Swenshuai.xi         break;
4305*53ee8cc1Swenshuai.xi         case 0x1E:
4306*53ee8cc1Swenshuai.xi         {
4307*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_22_30;
4308*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4309*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=22_30\n"));
4310*53ee8cc1Swenshuai.xi         }
4311*53ee8cc1Swenshuai.xi         break;
4312*53ee8cc1Swenshuai.xi 
4313*53ee8cc1Swenshuai.xi         case 0x1F:
4314*53ee8cc1Swenshuai.xi         {
4315*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_135_180;
4316*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4317*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=135_180\n"));
4318*53ee8cc1Swenshuai.xi         }
4319*53ee8cc1Swenshuai.xi         break;
4320*53ee8cc1Swenshuai.xi         case 0x20:
4321*53ee8cc1Swenshuai.xi         {
4322*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_140_180;
4323*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4324*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=140_180\n"));
4325*53ee8cc1Swenshuai.xi         }
4326*53ee8cc1Swenshuai.xi         break;
4327*53ee8cc1Swenshuai.xi 
4328*53ee8cc1Swenshuai.xi         case 0x21:
4329*53ee8cc1Swenshuai.xi         {
4330*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_7_9;
4331*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4332*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=7_9\n"));
4333*53ee8cc1Swenshuai.xi         }
4334*53ee8cc1Swenshuai.xi         break;
4335*53ee8cc1Swenshuai.xi         case 0x22:
4336*53ee8cc1Swenshuai.xi         {
4337*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_154_180;
4338*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4339*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=154_180\n"));
4340*53ee8cc1Swenshuai.xi         }
4341*53ee8cc1Swenshuai.xi         break;
4342*53ee8cc1Swenshuai.xi 
4343*53ee8cc1Swenshuai.xi         case 0x23:
4344*53ee8cc1Swenshuai.xi         {
4345*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_11_45;
4346*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4347*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=11_45\n"));
4348*53ee8cc1Swenshuai.xi         }
4349*53ee8cc1Swenshuai.xi         break;
4350*53ee8cc1Swenshuai.xi         case 0x24:
4351*53ee8cc1Swenshuai.xi         {
4352*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_4_15;
4353*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4354*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=4_15\n"));
4355*53ee8cc1Swenshuai.xi         }
4356*53ee8cc1Swenshuai.xi         break;
4357*53ee8cc1Swenshuai.xi 
4358*53ee8cc1Swenshuai.xi         case 0x25:
4359*53ee8cc1Swenshuai.xi         {
4360*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_14_45;
4361*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4362*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=14_45\n"));
4363*53ee8cc1Swenshuai.xi         }
4364*53ee8cc1Swenshuai.xi         break;
4365*53ee8cc1Swenshuai.xi         case 0x26:
4366*53ee8cc1Swenshuai.xi         {
4367*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_7_15;
4368*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4369*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=7_15\n"));
4370*53ee8cc1Swenshuai.xi         }
4371*53ee8cc1Swenshuai.xi         break;
4372*53ee8cc1Swenshuai.xi 
4373*53ee8cc1Swenshuai.xi         case 0x27:
4374*53ee8cc1Swenshuai.xi         {
4375*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_8_15;
4376*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4377*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=8_15\n"));
4378*53ee8cc1Swenshuai.xi         }
4379*53ee8cc1Swenshuai.xi         break;
4380*53ee8cc1Swenshuai.xi 
4381*53ee8cc1Swenshuai.xi         case 0x28:
4382*53ee8cc1Swenshuai.xi         {
4383*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_26_45_S;
4384*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4385*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=26_45_S\n"));
4386*53ee8cc1Swenshuai.xi         }
4387*53ee8cc1Swenshuai.xi         break;
4388*53ee8cc1Swenshuai.xi 
4389*53ee8cc1Swenshuai.xi         case 0x29:
4390*53ee8cc1Swenshuai.xi         {
4391*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_DVBS2_CODE_RATE_32_45;
4392*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 5;//0;
4393*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=32_45\n"));
4394*53ee8cc1Swenshuai.xi         }
4395*53ee8cc1Swenshuai.xi         break;
4396*53ee8cc1Swenshuai.xi 
4397*53ee8cc1Swenshuai.xi         default:
4398*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_9_10;
4399*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 15;//10;
4400*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS2_GetCurrentCodeRate=DVBS2_Default\n"));
4401*53ee8cc1Swenshuai.xi         }
4402*53ee8cc1Swenshuai.xi     }
4403*53ee8cc1Swenshuai.xi     else                                            //S
4404*53ee8cc1Swenshuai.xi     {
4405*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_CODE_RATE, &u8Data);
4406*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE + 0x3A*2, &u8Data);
4407*53ee8cc1Swenshuai.xi         //u8_gCodeRate = (u8Data & 0x70)>>4;
4408*53ee8cc1Swenshuai.xi         switch (u8Data)
4409*53ee8cc1Swenshuai.xi         //switch (u8_gCodeRate)
4410*53ee8cc1Swenshuai.xi         {
4411*53ee8cc1Swenshuai.xi         case 0x00:
4412*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_1_2;
4413*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 0;
4414*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetCurrentCodeRate=1_2\n"));
4415*53ee8cc1Swenshuai.xi             break;
4416*53ee8cc1Swenshuai.xi         case 0x01:
4417*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_2_3;
4418*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 1;
4419*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetCurrentCodeRate=2_3\n"));
4420*53ee8cc1Swenshuai.xi             break;
4421*53ee8cc1Swenshuai.xi         case 0x02:
4422*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_3_4;
4423*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 2;
4424*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetCurrentCodeRate=3_4\n"));
4425*53ee8cc1Swenshuai.xi             break;
4426*53ee8cc1Swenshuai.xi         case 0x03:
4427*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_5_6;
4428*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 3;
4429*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetCurrentCodeRate=5_6\n"));
4430*53ee8cc1Swenshuai.xi             break;
4431*53ee8cc1Swenshuai.xi         case 0x04:
4432*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_7_8;
4433*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 4;
4434*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetCurrentCodeRate=7_8\n"));
4435*53ee8cc1Swenshuai.xi             break;
4436*53ee8cc1Swenshuai.xi         default:
4437*53ee8cc1Swenshuai.xi             *pCodeRate = DMD_CONV_CODE_RATE_7_8;
4438*53ee8cc1Swenshuai.xi             //_u8_DVBS2_CurrentCodeRate = 4;
4439*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetCurrentCodeRate=DVBS_Default\n"));
4440*53ee8cc1Swenshuai.xi         }
4441*53ee8cc1Swenshuai.xi     }
4442*53ee8cc1Swenshuai.xi     return status;
4443*53ee8cc1Swenshuai.xi }
4444*53ee8cc1Swenshuai.xi 
4445*53ee8cc1Swenshuai.xi /****************************************************************************
4446*53ee8cc1Swenshuai.xi   Subject:    To get the current symbol rate at the DVB-S Demod
4447*53ee8cc1Swenshuai.xi   Function:   INTERN_DVBS_GetCurrentSymbolRate
4448*53ee8cc1Swenshuai.xi   Parmeter:   pointer pData for return Symbolrate
4449*53ee8cc1Swenshuai.xi 
4450*53ee8cc1Swenshuai.xi   Return:     TRUE
4451*53ee8cc1Swenshuai.xi               FALSE
4452*53ee8cc1Swenshuai.xi   Remark:
4453*53ee8cc1Swenshuai.xi *****************************************************************************/
INTERN_DVBS_GetCurrentSymbolRate(MS_U32 * u32SymbolRate)4454*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetCurrentSymbolRate(MS_U32 *u32SymbolRate)
4455*53ee8cc1Swenshuai.xi {
4456*53ee8cc1Swenshuai.xi     MS_U8  tmp = 0;
4457*53ee8cc1Swenshuai.xi     MS_U16 u16SymbolRateTmp = 0;
4458*53ee8cc1Swenshuai.xi 
4459*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H, &tmp);
4460*53ee8cc1Swenshuai.xi     u16SymbolRateTmp = tmp;
4461*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L, &tmp);
4462*53ee8cc1Swenshuai.xi     u16SymbolRateTmp = (u16SymbolRateTmp<<8)|tmp;
4463*53ee8cc1Swenshuai.xi 
4464*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_5, &tmp);
4465*53ee8cc1Swenshuai.xi     *u32SymbolRate = (tmp<<16)|u16SymbolRateTmp;
4466*53ee8cc1Swenshuai.xi 
4467*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS_LOCK(ULOGD("DEMOD","[dvbs]Symbol Rate=%d\n",*u32SymbolRate));
4468*53ee8cc1Swenshuai.xi 
4469*53ee8cc1Swenshuai.xi     return TRUE;
4470*53ee8cc1Swenshuai.xi }
4471*53ee8cc1Swenshuai.xi 
INTERN_DVBS_Version(MS_U16 * ver)4472*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Version(MS_U16 *ver)
4473*53ee8cc1Swenshuai.xi {
4474*53ee8cc1Swenshuai.xi     MS_U8 status = true;
4475*53ee8cc1Swenshuai.xi     MS_U8 tmp = 0;
4476*53ee8cc1Swenshuai.xi     MS_U16 u16_INTERN_DVBS_Version;
4477*53ee8cc1Swenshuai.xi 
4478*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_FW_VERSION_L, &tmp);
4479*53ee8cc1Swenshuai.xi     u16_INTERN_DVBS_Version = tmp;
4480*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_FW_VERSION_H, &tmp);
4481*53ee8cc1Swenshuai.xi     u16_INTERN_DVBS_Version = u16_INTERN_DVBS_Version<<8|tmp;
4482*53ee8cc1Swenshuai.xi     *ver = u16_INTERN_DVBS_Version;
4483*53ee8cc1Swenshuai.xi 
4484*53ee8cc1Swenshuai.xi     return status;
4485*53ee8cc1Swenshuai.xi }
4486*53ee8cc1Swenshuai.xi 
INTERN_DVBS_Show_Demod_Version(void)4487*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Show_Demod_Version(void)
4488*53ee8cc1Swenshuai.xi {
4489*53ee8cc1Swenshuai.xi     MS_BOOL status = true;
4490*53ee8cc1Swenshuai.xi     MS_U16 u16_INTERN_DVBS_Version;
4491*53ee8cc1Swenshuai.xi 
4492*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_Version(&u16_INTERN_DVBS_Version);
4493*53ee8cc1Swenshuai.xi 
4494*53ee8cc1Swenshuai.xi     ULOGD("DEMOD",">>> [UTPA-700]Demod FW Version: R0x%X.0x%X <<<\n", (u16_INTERN_DVBS_Version&0x00FF),((u16_INTERN_DVBS_Version>>8)&0x00FF));
4495*53ee8cc1Swenshuai.xi 
4496*53ee8cc1Swenshuai.xi 
4497*53ee8cc1Swenshuai.xi     return status;
4498*53ee8cc1Swenshuai.xi }
4499*53ee8cc1Swenshuai.xi 
INTERN_DVBS_GetRollOff(MS_U8 * pRollOff)4500*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_GetRollOff(MS_U8 *pRollOff)
4501*53ee8cc1Swenshuai.xi {
4502*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
4503*53ee8cc1Swenshuai.xi     MS_U8 u8Data=0;
4504*53ee8cc1Swenshuai.xi 
4505*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SYSTEM_TYPE, &u8Data);//V
4506*53ee8cc1Swenshuai.xi 
4507*53ee8cc1Swenshuai.xi     if(u8Data == 1) // DVBS
4508*53ee8cc1Swenshuai.xi     {
4509*53ee8cc1Swenshuai.xi         *pRollOff = HAL_DEMOD_SAT_RO_35;  //Rolloff 0.35
4510*53ee8cc1Swenshuai.xi     }
4511*53ee8cc1Swenshuai.xi     else // DVBS2
4512*53ee8cc1Swenshuai.xi     {
4513*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2OPPRO_ROLLOFF_DET_DONE, &u8Data);
4514*53ee8cc1Swenshuai.xi 
4515*53ee8cc1Swenshuai.xi         if(u8Data)
4516*53ee8cc1Swenshuai.xi         {
4517*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2OPPRO_ROLLOFF_DET_VALUE, &u8Data);
4518*53ee8cc1Swenshuai.xi 
4519*53ee8cc1Swenshuai.xi             u8Data = (u8Data & 0x30) >> 4;
4520*53ee8cc1Swenshuai.xi 
4521*53ee8cc1Swenshuai.xi             if (u8Data==0x02)
4522*53ee8cc1Swenshuai.xi                 *pRollOff = HAL_DEMOD_SAT_RO_35;  //Rolloff 0.35
4523*53ee8cc1Swenshuai.xi             else if (u8Data==0x01)
4524*53ee8cc1Swenshuai.xi                 *pRollOff = HAL_DEMOD_SAT_RO_25;  //Rolloff 0.25
4525*53ee8cc1Swenshuai.xi             else
4526*53ee8cc1Swenshuai.xi                 *pRollOff = HAL_DEMOD_SAT_RO_20;  //Rolloff 0.20
4527*53ee8cc1Swenshuai.xi 
4528*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetRollOff:%d\n", *pRollOff));
4529*53ee8cc1Swenshuai.xi         }
4530*53ee8cc1Swenshuai.xi     }
4531*53ee8cc1Swenshuai.xi 
4532*53ee8cc1Swenshuai.xi #if 0
4533*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(INNER_TR_ROLLOFF, &u8Data);//#define INNER_TR_ROLLOFF (_REG_INNER(0x0F)+0)
4534*53ee8cc1Swenshuai.xi     if ((u8Data&0x03)==0x00)
4535*53ee8cc1Swenshuai.xi         *pRollOff = 0;  //Rolloff 0.35
4536*53ee8cc1Swenshuai.xi     else if (((u8Data&0x03)==0x01) || ((u8Data&0x03)==0x03))
4537*53ee8cc1Swenshuai.xi         *pRollOff = 1;  //Rolloff 0.25
4538*53ee8cc1Swenshuai.xi     else
4539*53ee8cc1Swenshuai.xi         *pRollOff = 2;  //Rolloff 0.20
4540*53ee8cc1Swenshuai.xi 
4541*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_GetRollOff:%d\n", *pRollOff));
4542*53ee8cc1Swenshuai.xi #endif
4543*53ee8cc1Swenshuai.xi 
4544*53ee8cc1Swenshuai.xi     return status;
4545*53ee8cc1Swenshuai.xi }
4546*53ee8cc1Swenshuai.xi 
INTERN_DVBS_Get_DTV_SQuality_BAR(MS_U8 * u8_gSQValue)4547*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Get_DTV_SQuality_BAR(MS_U8 *u8_gSQValue)
4548*53ee8cc1Swenshuai.xi {
4549*53ee8cc1Swenshuai.xi     MS_BOOL     status=TRUE;
4550*53ee8cc1Swenshuai.xi     //MS_U16      u16_gSignalQualityValue;
4551*53ee8cc1Swenshuai.xi     MS_U16      _u16_packetError;
4552*53ee8cc1Swenshuai.xi 
4553*53ee8cc1Swenshuai.xi    // status = INTERN_DVBS_GetSignalQuality(&u16_gSignalQualityValue,0,0,0);
4554*53ee8cc1Swenshuai.xi     status = INTERN_DVBS_GetPacketErr(&_u16_packetError);
4555*53ee8cc1Swenshuai.xi     /*
4556*53ee8cc1Swenshuai.xi     if ((_u16_packetError >= 1) && (u16_gSignalQualityValue > 30))           //Average
4557*53ee8cc1Swenshuai.xi     {
4558*53ee8cc1Swenshuai.xi         *u8_gSQValue = 30;
4559*53ee8cc1Swenshuai.xi     }
4560*53ee8cc1Swenshuai.xi     else if ((_u16_packetError >= 1) && (u16_gSignalQualityValue > 10))      //Poor
4561*53ee8cc1Swenshuai.xi     {
4562*53ee8cc1Swenshuai.xi         *u8_gSQValue = 10;
4563*53ee8cc1Swenshuai.xi     }
4564*53ee8cc1Swenshuai.xi     */
4565*53ee8cc1Swenshuai.xi     return status;
4566*53ee8cc1Swenshuai.xi }
4567*53ee8cc1Swenshuai.xi 
4568*53ee8cc1Swenshuai.xi /****************************************************************************
4569*53ee8cc1Swenshuai.xi **      Function: Read demod related information
4570*53ee8cc1Swenshuai.xi **      Polling after demod lock
4571*53ee8cc1Swenshuai.xi **      GAIN & DCR /Fine CFO & PR & IIS & IQB & SNR /PacketErr & BER
4572*53ee8cc1Swenshuai.xi ****************************************************************************/
INTERN_DVBS_Show_AGC_Info(void)4573*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Show_AGC_Info(void)
4574*53ee8cc1Swenshuai.xi {
4575*53ee8cc1Swenshuai.xi     MS_BOOL status = TRUE;
4576*53ee8cc1Swenshuai.xi 
4577*53ee8cc1Swenshuai.xi     //MS_U8 tmp = 0;
4578*53ee8cc1Swenshuai.xi     //MS_U8 agc_k = 0,d0_k = 0,d0_ref = 0,d1_k = 0,d1_ref = 0,d2_k = 0,d2_ref = 0,d3_k = 0,d3_ref = 0;
4579*53ee8cc1Swenshuai.xi     //MS_U16 if_agc_gain = 0,d0_gain = 0,d1_gain = 0,d2_gain = 0,d3_gain = 0, agc_ref = 0;
4580*53ee8cc1Swenshuai.xi     //MS_U16 if_agc_err = 0;
4581*53ee8cc1Swenshuai.xi #if 0
4582*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x08*2 + 1,&agc_k);
4583*53ee8cc1Swenshuai.xi     agc_k = ((agc_k & 0xF0)>>4);
4584*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x09*2 + 1,&tmp);
4585*53ee8cc1Swenshuai.xi     agc_ref = tmp;
4586*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0xE8,&tmp);
4587*53ee8cc1Swenshuai.xi     //agc_ref = (agc_ref<<8)|tmp;
4588*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x38*2,&d0_k);
4589*53ee8cc1Swenshuai.xi     d0_k = ((d0_k & 0xF0)>>4);
4590*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x38*2 + 1,&d0_ref);
4591*53ee8cc1Swenshuai.xi     d0_ref = (d0_ref & 0xFF);
4592*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x58*2,&d1_k);
4593*53ee8cc1Swenshuai.xi     d1_k = (d1_k & 0xF0)>>4;
4594*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x58*2 + 1,&d1_ref);
4595*53ee8cc1Swenshuai.xi     d1_ref = (d1_ref & 0xFF);
4596*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x5E*2,&d2_k);
4597*53ee8cc1Swenshuai.xi     d2_k = ((d2_k & 0xF0)>>4);
4598*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x5E*2 + 1,&d2_ref);
4599*53ee8cc1Swenshuai.xi     d2_ref = (d2_ref & 0xFF);
4600*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x6A*2,&d3_k);
4601*53ee8cc1Swenshuai.xi     d3_k = ((d3_k & 0xF0)>>4);
4602*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT2_REG_BASE + 0x6A*2 + 1,&d3_ref);
4603*53ee8cc1Swenshuai.xi     d3_ref = (d3_ref & 0xFF);
4604*53ee8cc1Swenshuai.xi 
4605*53ee8cc1Swenshuai.xi 
4606*53ee8cc1Swenshuai.xi     // select IF gain to read
4607*53ee8cc1Swenshuai.xi     //Debug Select
4608*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x13*2, &tmp);
4609*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x13*2, (tmp&0xF0)|0x03);
4610*53ee8cc1Swenshuai.xi     //IF_AGC_GAIN
4611*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x14*2 + 1, &tmp);
4612*53ee8cc1Swenshuai.xi     if_agc_gain = tmp;
4613*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x14*2, &tmp);
4614*53ee8cc1Swenshuai.xi     if_agc_gain = (if_agc_gain<<8)|tmp;
4615*53ee8cc1Swenshuai.xi 
4616*53ee8cc1Swenshuai.xi 
4617*53ee8cc1Swenshuai.xi     // select d0 gain to read.
4618*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x74*2 + 1, &tmp);
4619*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x74*2 + 1, (tmp&0xF0)|0x03);
4620*53ee8cc1Swenshuai.xi     //DAGC0_GAIN
4621*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x3D*2, &tmp);
4622*53ee8cc1Swenshuai.xi     d0_gain = tmp;
4623*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x3C*2 + 1, &tmp);
4624*53ee8cc1Swenshuai.xi     d0_gain = (d0_gain<<8)|tmp;
4625*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x3C*2, &tmp);
4626*53ee8cc1Swenshuai.xi     d0_gain = (d0_gain<<4)|(tmp>>4);
4627*53ee8cc1Swenshuai.xi 
4628*53ee8cc1Swenshuai.xi 
4629*53ee8cc1Swenshuai.xi     // select d1 gain to read.
4630*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x8C, &tmp);
4631*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x8C, (tmp&0xF0)|0x00);
4632*53ee8cc1Swenshuai.xi     //DAGC1_GAIN
4633*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x5C*2 + 1, &tmp);
4634*53ee8cc1Swenshuai.xi     d1_gain = tmp;
4635*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x5C*2, &tmp);
4636*53ee8cc1Swenshuai.xi     d1_gain = (d1_gain<<8)|tmp;
4637*53ee8cc1Swenshuai.xi 
4638*53ee8cc1Swenshuai.xi 
4639*53ee8cc1Swenshuai.xi     // select d2 gain to read.
4640*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x06, &tmp);
4641*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTENDEXT_REG_BASE + 0x06, (tmp&0xF0)|0x03);
4642*53ee8cc1Swenshuai.xi     //DAGC2_GAIN
4643*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x62*2 + 1, &tmp);
4644*53ee8cc1Swenshuai.xi     d2_gain = tmp;
4645*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x62*2, &tmp);
4646*53ee8cc1Swenshuai.xi     d2_gain = (d2_gain<<8)|tmp;
4647*53ee8cc1Swenshuai.xi 
4648*53ee8cc1Swenshuai.xi 
4649*53ee8cc1Swenshuai.xi     // select d3 gain to read.
4650*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT2_REG_BASE + 0x6D*2, &tmp);
4651*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTENDEXT2_REG_BASE + 0x6D*2, (tmp&0xF0)|0x03);
4652*53ee8cc1Swenshuai.xi     //DAGC3_GAIN
4653*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x6F*2, &tmp);
4654*53ee8cc1Swenshuai.xi     d3_gain = tmp;
4655*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x6E*2 + 1, &tmp);
4656*53ee8cc1Swenshuai.xi     d3_gain = (d3_gain<<8)|tmp;
4657*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x6E*2, &tmp);
4658*53ee8cc1Swenshuai.xi     d3_gain = (d3_gain<<4)|(tmp>>4);
4659*53ee8cc1Swenshuai.xi 
4660*53ee8cc1Swenshuai.xi 
4661*53ee8cc1Swenshuai.xi     // select IF gain err to read
4662*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x13*2, &tmp);
4663*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x13*2, (tmp&0xF0)|0x00);
4664*53ee8cc1Swenshuai.xi 
4665*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x14*2 + 1, &tmp);
4666*53ee8cc1Swenshuai.xi     if_agc_err = tmp;
4667*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x14*2, &tmp);
4668*53ee8cc1Swenshuai.xi     if_agc_err = (if_agc_err<<8)|tmp;
4669*53ee8cc1Swenshuai.xi 
4670*53ee8cc1Swenshuai.xi 
4671*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf("[dvbs]agc_k=0x%x, agc_ref=0x%x, d0_k=0x%x, d0_ref=0x%x, d1_k=0x%x, d1_ref=0x%x, d2_k=0x%x, d2_ref=0x%x, d3_k=0x%x, d3_ref=0x%x\n",
4672*53ee8cc1Swenshuai.xi                            agc_k, agc_ref, d0_k, d0_ref, d1_k, d1_ref, d2_k, d2_ref, d3_k, d3_ref));
4673*53ee8cc1Swenshuai.xi 
4674*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf("[dvbs]agc_g=0x%x, d0_g=0x%x, d1_g=0x%x, d2_g=0x%x, d3_g=0x%x, agc_err=0x%x\n", if_agc_gain, d0_gain, d1_gain, d2_gain, d3_gain, if_agc_err));
4675*53ee8cc1Swenshuai.xi 
4676*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf("[dvbs]agc_k=0x%x, agc_ref=0x%x, d0_k=0x%x, d0_ref=0x%x, d1_k=0x%x, d1_ref=0x%x, d2_k=0x%x, d2_ref=0x%x, d3_k=0x%x, d3_ref=0x%x\n",
4677*53ee8cc1Swenshuai.xi                            agc_k, agc_ref, d0_k, d0_ref, d1_k, d1_ref, d2_k, d2_ref, d3_k, d3_ref));
4678*53ee8cc1Swenshuai.xi 
4679*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf("[dvbs]agc_g=0x%x, d0_g=0x%x, d1_g=0x%x, d2_g=0x%x, d3_g=0x%x, agc_err=0x%x\n", if_agc_gain, d0_gain, d1_gain, d2_gain, d3_gain, if_agc_err));
4680*53ee8cc1Swenshuai.xi #endif
4681*53ee8cc1Swenshuai.xi     return status;
4682*53ee8cc1Swenshuai.xi }
4683*53ee8cc1Swenshuai.xi 
4684*53ee8cc1Swenshuai.xi /****************************************************************************
4685*53ee8cc1Swenshuai.xi **      Function: Read demod related information
4686*53ee8cc1Swenshuai.xi **      Polling after demod lock
4687*53ee8cc1Swenshuai.xi **      GAIN & DCR /Fine CFO & PR & IIS & IQB & SNR /PacketErr & BER
4688*53ee8cc1Swenshuai.xi ****************************************************************************/
INTERN_DVBS_AGC_Info(MS_U8 u8dbg_mode,MS_U16 * pu16Data)4689*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_AGC_Info(MS_U8 u8dbg_mode, MS_U16* pu16Data)
4690*53ee8cc1Swenshuai.xi {
4691*53ee8cc1Swenshuai.xi     MS_BOOL status = true;
4692*53ee8cc1Swenshuai.xi     MS_U8 u8Data;
4693*53ee8cc1Swenshuai.xi     MS_U16 u16Data;
4694*53ee8cc1Swenshuai.xi 
4695*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_AGC_DEBUG_SEL,&u8Data);
4696*53ee8cc1Swenshuai.xi     u8Data = (u8Data & 0xf0) | u8dbg_mode;
4697*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_AGC_DEBUG_SEL,u8Data);
4698*53ee8cc1Swenshuai.xi 
4699*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_LATCH,&u8Data);
4700*53ee8cc1Swenshuai.xi     u8Data = u8Data | 0x80;
4701*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_LATCH,u8Data);
4702*53ee8cc1Swenshuai.xi 
4703*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_AGC_DEBUG_OUT_R1,&u8Data);
4704*53ee8cc1Swenshuai.xi     u16Data = u8Data;
4705*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_AGC_DEBUG_OUT_R0,&u8Data);
4706*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8) | u8Data;
4707*53ee8cc1Swenshuai.xi 
4708*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_LATCH,&u8Data);
4709*53ee8cc1Swenshuai.xi     u8Data = u8Data & 0x7f;
4710*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_LATCH,u8Data);
4711*53ee8cc1Swenshuai.xi 
4712*53ee8cc1Swenshuai.xi     *pu16Data=u16Data;
4713*53ee8cc1Swenshuai.xi 
4714*53ee8cc1Swenshuai.xi     if (status==FALSE)
4715*53ee8cc1Swenshuai.xi     {
4716*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_AGC_Info  Error!!! \n"));
4717*53ee8cc1Swenshuai.xi     }
4718*53ee8cc1Swenshuai.xi 
4719*53ee8cc1Swenshuai.xi     return status;
4720*53ee8cc1Swenshuai.xi 
4721*53ee8cc1Swenshuai.xi     //MS_U8 tmp = 0;
4722*53ee8cc1Swenshuai.xi     //MS_U8 agc_k = 0,d0_k = 0,d0_ref = 0,d1_k = 0,d1_ref = 0,d2_k = 0,d2_ref = 0,d3_k = 0,d3_ref = 0;
4723*53ee8cc1Swenshuai.xi     //MS_U16 if_agc_gain = 0,d0_gain = 0,d1_gain = 0,d2_gain = 0,d3_gain = 0, agc_ref = 0;
4724*53ee8cc1Swenshuai.xi     //MS_U16 if_agc_err = 0;
4725*53ee8cc1Swenshuai.xi #if 0
4726*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x08*2 + 1,&agc_k);
4727*53ee8cc1Swenshuai.xi     agc_k = ((agc_k & 0xF0)>>4);
4728*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x09*2 + 1,&tmp);
4729*53ee8cc1Swenshuai.xi     agc_ref = tmp;
4730*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0xE8,&tmp);
4731*53ee8cc1Swenshuai.xi     //agc_ref = (agc_ref<<8)|tmp;
4732*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x38*2,&d0_k);
4733*53ee8cc1Swenshuai.xi     d0_k = ((d0_k & 0xF0)>>4);
4734*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x38*2 + 1,&d0_ref);
4735*53ee8cc1Swenshuai.xi     d0_ref = (d0_ref & 0xFF);
4736*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x58*2,&d1_k);
4737*53ee8cc1Swenshuai.xi     d1_k = (d1_k & 0xF0)>>4;
4738*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x58*2 + 1,&d1_ref);
4739*53ee8cc1Swenshuai.xi     d1_ref = (d1_ref & 0xFF);
4740*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x5E*2,&d2_k);
4741*53ee8cc1Swenshuai.xi     d2_k = ((d2_k & 0xF0)>>4);
4742*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x5E*2 + 1,&d2_ref);
4743*53ee8cc1Swenshuai.xi     d2_ref = (d2_ref & 0xFF);
4744*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x6A*2,&d3_k);
4745*53ee8cc1Swenshuai.xi     d3_k = ((d3_k & 0xF0)>>4);
4746*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT2_REG_BASE + 0x6A*2 + 1,&d3_ref);
4747*53ee8cc1Swenshuai.xi     d3_ref = (d3_ref & 0xFF);
4748*53ee8cc1Swenshuai.xi 
4749*53ee8cc1Swenshuai.xi 
4750*53ee8cc1Swenshuai.xi     // select IF gain to read
4751*53ee8cc1Swenshuai.xi     //Debug Select
4752*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x13*2, &tmp);
4753*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x13*2, (tmp&0xF0)|0x03);
4754*53ee8cc1Swenshuai.xi     //IF_AGC_GAIN
4755*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x14*2 + 1, &tmp);
4756*53ee8cc1Swenshuai.xi     if_agc_gain = tmp;
4757*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x14*2, &tmp);
4758*53ee8cc1Swenshuai.xi     if_agc_gain = (if_agc_gain<<8)|tmp;
4759*53ee8cc1Swenshuai.xi 
4760*53ee8cc1Swenshuai.xi 
4761*53ee8cc1Swenshuai.xi     // select d0 gain to read.
4762*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x74*2 + 1, &tmp);
4763*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x74*2 + 1, (tmp&0xF0)|0x03);
4764*53ee8cc1Swenshuai.xi     //DAGC0_GAIN
4765*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x3D*2, &tmp);
4766*53ee8cc1Swenshuai.xi     d0_gain = tmp;
4767*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x3C*2 + 1, &tmp);
4768*53ee8cc1Swenshuai.xi     d0_gain = (d0_gain<<8)|tmp;
4769*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x3C*2, &tmp);
4770*53ee8cc1Swenshuai.xi     d0_gain = (d0_gain<<4)|(tmp>>4);
4771*53ee8cc1Swenshuai.xi 
4772*53ee8cc1Swenshuai.xi 
4773*53ee8cc1Swenshuai.xi     // select d1 gain to read.
4774*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x8C, &tmp);
4775*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x8C, (tmp&0xF0)|0x00);
4776*53ee8cc1Swenshuai.xi     //DAGC1_GAIN
4777*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x5C*2 + 1, &tmp);
4778*53ee8cc1Swenshuai.xi     d1_gain = tmp;
4779*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x5C*2, &tmp);
4780*53ee8cc1Swenshuai.xi     d1_gain = (d1_gain<<8)|tmp;
4781*53ee8cc1Swenshuai.xi 
4782*53ee8cc1Swenshuai.xi 
4783*53ee8cc1Swenshuai.xi     // select d2 gain to read.
4784*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x06, &tmp);
4785*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTENDEXT_REG_BASE + 0x06, (tmp&0xF0)|0x03);
4786*53ee8cc1Swenshuai.xi     //DAGC2_GAIN
4787*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x62*2 + 1, &tmp);
4788*53ee8cc1Swenshuai.xi     d2_gain = tmp;
4789*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x62*2, &tmp);
4790*53ee8cc1Swenshuai.xi     d2_gain = (d2_gain<<8)|tmp;
4791*53ee8cc1Swenshuai.xi 
4792*53ee8cc1Swenshuai.xi 
4793*53ee8cc1Swenshuai.xi     // select d3 gain to read.
4794*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT2_REG_BASE + 0x6D*2, &tmp);
4795*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTENDEXT2_REG_BASE + 0x6D*2, (tmp&0xF0)|0x03);
4796*53ee8cc1Swenshuai.xi     //DAGC3_GAIN
4797*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x6F*2, &tmp);
4798*53ee8cc1Swenshuai.xi     d3_gain = tmp;
4799*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x6E*2 + 1, &tmp);
4800*53ee8cc1Swenshuai.xi     d3_gain = (d3_gain<<8)|tmp;
4801*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTENDEXT_REG_BASE + 0x6E*2, &tmp);
4802*53ee8cc1Swenshuai.xi     d3_gain = (d3_gain<<4)|(tmp>>4);
4803*53ee8cc1Swenshuai.xi 
4804*53ee8cc1Swenshuai.xi 
4805*53ee8cc1Swenshuai.xi     // select IF gain err to read
4806*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x13*2, &tmp);
4807*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(FRONTEND_REG_BASE + 0x13*2, (tmp&0xF0)|0x00);
4808*53ee8cc1Swenshuai.xi 
4809*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x14*2 + 1, &tmp);
4810*53ee8cc1Swenshuai.xi     if_agc_err = tmp;
4811*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(FRONTEND_REG_BASE + 0x14*2, &tmp);
4812*53ee8cc1Swenshuai.xi     if_agc_err = (if_agc_err<<8)|tmp;
4813*53ee8cc1Swenshuai.xi 
4814*53ee8cc1Swenshuai.xi 
4815*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf("[dvbs]agc_k=0x%x, agc_ref=0x%x, d0_k=0x%x, d0_ref=0x%x, d1_k=0x%x, d1_ref=0x%x, d2_k=0x%x, d2_ref=0x%x, d3_k=0x%x, d3_ref=0x%x\n",
4816*53ee8cc1Swenshuai.xi                            agc_k, agc_ref, d0_k, d0_ref, d1_k, d1_ref, d2_k, d2_ref, d3_k, d3_ref));
4817*53ee8cc1Swenshuai.xi 
4818*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf("[dvbs]agc_g=0x%x, d0_g=0x%x, d1_g=0x%x, d2_g=0x%x, d3_g=0x%x, agc_err=0x%x\n", if_agc_gain, d0_gain, d1_gain, d2_gain, d3_gain, if_agc_err));
4819*53ee8cc1Swenshuai.xi 
4820*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf("[dvbs]agc_k=0x%x, agc_ref=0x%x, d0_k=0x%x, d0_ref=0x%x, d1_k=0x%x, d1_ref=0x%x, d2_k=0x%x, d2_ref=0x%x, d3_k=0x%x, d3_ref=0x%x\n",
4821*53ee8cc1Swenshuai.xi                            agc_k, agc_ref, d0_k, d0_ref, d1_k, d1_ref, d2_k, d2_ref, d3_k, d3_ref));
4822*53ee8cc1Swenshuai.xi 
4823*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(printf("[dvbs]agc_g=0x%x, d0_g=0x%x, d1_g=0x%x, d2_g=0x%x, d3_g=0x%x, agc_err=0x%x\n", if_agc_gain, d0_gain, d1_gain, d2_gain, d3_gain, if_agc_err));
4824*53ee8cc1Swenshuai.xi #endif
4825*53ee8cc1Swenshuai.xi     return status;
4826*53ee8cc1Swenshuai.xi }
4827*53ee8cc1Swenshuai.xi 
INTERN_DVBS_info(void)4828*53ee8cc1Swenshuai.xi void INTERN_DVBS_info(void)
4829*53ee8cc1Swenshuai.xi {
4830*53ee8cc1Swenshuai.xi     //status &= INTERN_DVBS_Show_Demod_Version();
4831*53ee8cc1Swenshuai.xi     //status &= INTERN_DVBS_Demod_Get_Debug_Info_get_once();
4832*53ee8cc1Swenshuai.xi     //status &= INTERN_DVBS_Demod_Get_Debug_Info_polling();
4833*53ee8cc1Swenshuai.xi }
4834*53ee8cc1Swenshuai.xi 
INTERN_DVBS_Demod_Get_Debug_Info_get_once(void)4835*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Demod_Get_Debug_Info_get_once(void)
4836*53ee8cc1Swenshuai.xi {
4837*53ee8cc1Swenshuai.xi     MS_BOOL             status = TRUE;
4838*53ee8cc1Swenshuai.xi     //MS_U8               u8Data = 0;
4839*53ee8cc1Swenshuai.xi     //MS_U16              u16Data = 0, u16Address = 0;
4840*53ee8cc1Swenshuai.xi     //float               psd_smooth_factor;
4841*53ee8cc1Swenshuai.xi     //float               srd_right_bottom_value, srd_right_top_value, srd_left_bottom_value, srd_left_top_value;
4842*53ee8cc1Swenshuai.xi     //MS_U16              u32temp5;
4843*53ee8cc1Swenshuai.xi     //MS_U16              srd_left, srd_right, srd_left_top, srd_left_bottom, srd_right_top, srd_right_bottom;
4844*53ee8cc1Swenshuai.xi 
4845*53ee8cc1Swenshuai.xi #if 0
4846*53ee8cc1Swenshuai.xi //Lock Flag
4847*53ee8cc1Swenshuai.xi     printf("========================================================================\n");
4848*53ee8cc1Swenshuai.xi     printf("Debug Message Flag [Lock Flag]==========================================\n");
4849*53ee8cc1Swenshuai.xi 
4850*53ee8cc1Swenshuai.xi     u16Address = (AGC_LOCK>>16)&0xffff;
4851*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4852*53ee8cc1Swenshuai.xi     if ((u16Data&(AGC_LOCK&0xffff))!=(AGC_LOCK&0xffff))
4853*53ee8cc1Swenshuai.xi         printf("[DVBS]: AGC LOCK ======================: Fail. \n");
4854*53ee8cc1Swenshuai.xi     else
4855*53ee8cc1Swenshuai.xi         printf("[DVBS]: AGC LOCK ======================: OK. \n");
4856*53ee8cc1Swenshuai.xi 
4857*53ee8cc1Swenshuai.xi     u16Address = (DAGC0_LOCK>>16)&0xffff;
4858*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4859*53ee8cc1Swenshuai.xi     if ((u16Data&(DAGC0_LOCK&0xffff))!=(DAGC0_LOCK&0xffff))
4860*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC0 LOCK ====================: Fail. \n");
4861*53ee8cc1Swenshuai.xi     else
4862*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC0 LOCK ====================: OK. \n");
4863*53ee8cc1Swenshuai.xi 
4864*53ee8cc1Swenshuai.xi     u16Address = (DAGC1_LOCK>>16)&0xffff;
4865*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4866*53ee8cc1Swenshuai.xi     if ((u16Data&(DAGC1_LOCK&0xffff))!=(DAGC1_LOCK&0xffff))
4867*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC1 LOCK ====================: Fail. \n");
4868*53ee8cc1Swenshuai.xi     else
4869*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC1 LOCK ====================: OK. \n");
4870*53ee8cc1Swenshuai.xi 
4871*53ee8cc1Swenshuai.xi     u16Address = (DAGC2_LOCK>>16)&0xffff;
4872*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4873*53ee8cc1Swenshuai.xi     if ((u16Data&(DAGC2_LOCK&0xffff))!=(DAGC2_LOCK&0xffff))
4874*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC2 LOCK ====================: Fail. \n");
4875*53ee8cc1Swenshuai.xi     else
4876*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC2 LOCK ====================: OK. \n");
4877*53ee8cc1Swenshuai.xi 
4878*53ee8cc1Swenshuai.xi     u16Address = (DAGC3_LOCK>>16)&0xffff;
4879*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4880*53ee8cc1Swenshuai.xi     if ((u16Data&(DAGC3_LOCK&0xffff))!=(DAGC3_LOCK&0xffff))
4881*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC3 LOCK ====================: Fail. \n");
4882*53ee8cc1Swenshuai.xi     else
4883*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC3 LOCK ====================: OK. \n");
4884*53ee8cc1Swenshuai.xi 
4885*53ee8cc1Swenshuai.xi     u16Address = (DCR_LOCK>>16)&0xffff;
4886*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4887*53ee8cc1Swenshuai.xi     if ((u16Data&(DCR_LOCK&0xffff))!=(DCR_LOCK&0xffff))
4888*53ee8cc1Swenshuai.xi         printf("[DVBS]: DCR LOCK ======================: Fail. \n");
4889*53ee8cc1Swenshuai.xi     else
4890*53ee8cc1Swenshuai.xi         printf("[DVBS]: DCR LOCK ======================: OK. \n");
4891*53ee8cc1Swenshuai.xi //Mark Coarse SRD
4892*53ee8cc1Swenshuai.xi //Mark Fine SRD
4893*53ee8cc1Swenshuai.xi /*
4894*53ee8cc1Swenshuai.xi     u16Address = (CLOSE_COARSE_CFO_LOCK>>16)&0xffff;
4895*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4896*53ee8cc1Swenshuai.xi     if ((u16Data&(CLOSE_COARSE_CFO_LOCK&0xffff))!=(CLOSE_COARSE_CFO_LOCK&0xffff))
4897*53ee8cc1Swenshuai.xi         printf("[DVBS]: Close CFO =====================: Fail. \n");
4898*53ee8cc1Swenshuai.xi     else
4899*53ee8cc1Swenshuai.xi         printf("[DVBS]: Close CFO =====================: OK. \n");
4900*53ee8cc1Swenshuai.xi */
4901*53ee8cc1Swenshuai.xi     u16Address = (TR_LOCK>>16)&0xffff;
4902*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4903*53ee8cc1Swenshuai.xi     if ((u16Data&(TR_LOCK&0xffff))!=(TR_LOCK&0xffff))
4904*53ee8cc1Swenshuai.xi         printf("[DVBS]: TR LOCK =======================: Fail. \n");
4905*53ee8cc1Swenshuai.xi     else
4906*53ee8cc1Swenshuai.xi         printf("[DVBS]: TR LOCK =======================: OK. \n");
4907*53ee8cc1Swenshuai.xi 
4908*53ee8cc1Swenshuai.xi     u16Address = (FRAME_SYNC_ACQUIRE>>16)&0xffff;
4909*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4910*53ee8cc1Swenshuai.xi     if ((u16Data&(FRAME_SYNC_ACQUIRE&0xffff))!=(FRAME_SYNC_ACQUIRE&0xffff))
4911*53ee8cc1Swenshuai.xi         printf("[DVBS]: FS Acquire ====================: Fail. \n");
4912*53ee8cc1Swenshuai.xi     else
4913*53ee8cc1Swenshuai.xi         printf("[DVBS]: FS Acquire ====================: OK. \n");
4914*53ee8cc1Swenshuai.xi 
4915*53ee8cc1Swenshuai.xi     u16Address = (PR_LOCK>>16)&0xffff;
4916*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4917*53ee8cc1Swenshuai.xi     if ((u16Data&(PR_LOCK&0xffff))!=(PR_LOCK&0xffff))
4918*53ee8cc1Swenshuai.xi         printf("[DVBS]: PR LOCK =======================: Fail. \n");
4919*53ee8cc1Swenshuai.xi     else
4920*53ee8cc1Swenshuai.xi         printf("[DVBS]: PR LOCK =======================: OK. \n");
4921*53ee8cc1Swenshuai.xi 
4922*53ee8cc1Swenshuai.xi     u16Address = (EQ_LOCK>>16)&0xffff;
4923*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4924*53ee8cc1Swenshuai.xi     if ((u16Data&(EQ_LOCK&0xffff))!=(EQ_LOCK&0xffff))
4925*53ee8cc1Swenshuai.xi         printf("[DVBS]: EQ LOCK =======================: Fail. \n");
4926*53ee8cc1Swenshuai.xi     else
4927*53ee8cc1Swenshuai.xi         printf("[DVBS]: EQ LOCK =======================: OK. \n");
4928*53ee8cc1Swenshuai.xi 
4929*53ee8cc1Swenshuai.xi     u16Address = (P_SYNC_LOCK>>16)&0xffff;
4930*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4931*53ee8cc1Swenshuai.xi     if ((u16Data&0x0002)!=0x0002)
4932*53ee8cc1Swenshuai.xi         printf("[DVBS]: P_sync ========================: Fail. \n");
4933*53ee8cc1Swenshuai.xi     else
4934*53ee8cc1Swenshuai.xi         printf("[DVBS]: P_sync ========================: OK. \n");
4935*53ee8cc1Swenshuai.xi 
4936*53ee8cc1Swenshuai.xi     u16Address = (IN_SYNC_LOCK>>16)&0xffff;
4937*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
4938*53ee8cc1Swenshuai.xi     if ((u16Data&0x8000)!=0x8000)
4939*53ee8cc1Swenshuai.xi         printf("[DVBS]: In_sync =======================: Fail. \n");
4940*53ee8cc1Swenshuai.xi     else
4941*53ee8cc1Swenshuai.xi         printf("[DVBS]: In_sync =======================: OK. \n");
4942*53ee8cc1Swenshuai.xi //---------------------------------------------------------
4943*53ee8cc1Swenshuai.xi //Lock Time
4944*53ee8cc1Swenshuai.xi     printf("------------------------------------------------------------------------\n");
4945*53ee8cc1Swenshuai.xi     printf("Debug Message [Lock Time]===============================================\n");
4946*53ee8cc1Swenshuai.xi 
4947*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_INFO_05, &u8Data);
4948*53ee8cc1Swenshuai.xi     printf("[DVBS]: AGC Lock Time =================: %d\n",u8Data&0x00FF);
4949*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_INFO_06, &u8Data);
4950*53ee8cc1Swenshuai.xi     printf("[DVBS]: DCR Lock Time =================: %d\n",u8Data&0x00FF);
4951*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_2, &u8Data);
4952*53ee8cc1Swenshuai.xi     printf("[DVBS]: TR Lock Time ==================: %d\n",u8Data&0x00FF);
4953*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_3, &u8Data);
4954*53ee8cc1Swenshuai.xi     printf("[DVBS]: FS Lock Time ==================: %d\n",u8Data&0x00FF);
4955*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_4, &u8Data);
4956*53ee8cc1Swenshuai.xi     printf("[DVBS]: PR Lock Time ==================: %d\n",u8Data&0x00FF);
4957*53ee8cc1Swenshuai.xi     //printf("[DVBS]: PLSC Lock Time ================: %d\n",(u16Data>>8)&0x00FF);//No used
4958*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_6, &u8Data);
4959*53ee8cc1Swenshuai.xi     printf("[DVBS]: EQ Lock Time ==================: %d\n",u8Data&0x00FF);
4960*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_7, &u8Data);
4961*53ee8cc1Swenshuai.xi     printf("[DVBS]: FEC Lock Time =================: %d\n",u8Data&0x00FF);
4962*53ee8cc1Swenshuai.xi 
4963*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_0, &u8Data);
4964*53ee8cc1Swenshuai.xi     printf("[DVBS]: CSRD ==========================: %d\n",u8Data&0x00FF);
4965*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_1, &u8Data);
4966*53ee8cc1Swenshuai.xi     printf("[DVBS]: FSRD ==========================: %d\n",u8Data&0x00FF);
4967*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_INFO_01, &u8Data);
4968*53ee8cc1Swenshuai.xi     printf("[DVBS]: CCFO ==========================: %d\n",u8Data&0x00FF);
4969*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_INFO_02, &u8Data);
4970*53ee8cc1Swenshuai.xi     printf("[DVBS]: FCFO ==========================: %d\n",u8Data&0x00FF);
4971*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_STATE_FLAG, &u8Data);
4972*53ee8cc1Swenshuai.xi     printf("[DVBS]: State =========================: %d\n",u8Data&0x00FF);
4973*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SUBSTATE_FLAG, &u8Data);
4974*53ee8cc1Swenshuai.xi     printf("[DVBS]: SubState ======================: %d\n",u8Data&0x00FF);
4975*53ee8cc1Swenshuai.xi 
4976*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE00H, &u8Data);
4977*53ee8cc1Swenshuai.xi     u16Data = u8Data;
4978*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE00L, &u8Data);
4979*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
4980*53ee8cc1Swenshuai.xi     printf("[DVBS]: DBG1: =========================: 0x%x\n",u16Data);
4981*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE01H, &u8Data);
4982*53ee8cc1Swenshuai.xi     u16Data = u8Data;
4983*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE01L, &u8Data);
4984*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
4985*53ee8cc1Swenshuai.xi     printf("[DVBS]: DBG2: =========================: 0x%x\n",u16Data);
4986*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE02H, &u8Data);
4987*53ee8cc1Swenshuai.xi     u16Data = u8Data;
4988*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE02L, &u8Data);
4989*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
4990*53ee8cc1Swenshuai.xi     printf("[DVBS]: DBG3: =========================: 0x%x\n",u16Data);
4991*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE03H, &u8Data);
4992*53ee8cc1Swenshuai.xi     u16Data = u8Data;
4993*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE03L, &u8Data);
4994*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
4995*53ee8cc1Swenshuai.xi     printf("[DVBS]: DBG4: =========================: 0x%x\n",u16Data);
4996*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE04H, &u8Data);
4997*53ee8cc1Swenshuai.xi     u16Data = u8Data;
4998*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE04L, &u8Data);
4999*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5000*53ee8cc1Swenshuai.xi     printf("[DVBS]: DBG5: =========================: 0x%x\n",u16Data);
5001*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE05H, &u8Data);
5002*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5003*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE05L, &u8Data);
5004*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5005*53ee8cc1Swenshuai.xi     printf("[DVBS]: DBG6: =========================: 0x%x\n",u16Data);
5006*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE06H, &u8Data);
5007*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5008*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE06L, &u8Data);
5009*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5010*53ee8cc1Swenshuai.xi     printf("[DVBS]: EQ Sum: =======================: 0x%x\n",u16Data);
5011*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5012*53ee8cc1Swenshuai.xi //FIQ Status
5013*53ee8cc1Swenshuai.xi     printf("------------------------------------------------------------------------\n");
5014*53ee8cc1Swenshuai.xi     printf("Debug Message [FIQ Status]==============================================\n");
5015*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE00H, &u8Data);
5016*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5017*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE00L, &u8Data);
5018*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5019*53ee8cc1Swenshuai.xi 
5020*53ee8cc1Swenshuai.xi     if ((u16Data&0x0001)==0x0000)
5021*53ee8cc1Swenshuai.xi         printf("[DVBS]: AGC Lock ======================: Fail. \n");
5022*53ee8cc1Swenshuai.xi     else
5023*53ee8cc1Swenshuai.xi         printf("[DVBS]: AGC Lock ======================: OK. \n");
5024*53ee8cc1Swenshuai.xi 
5025*53ee8cc1Swenshuai.xi     if ((u16Data&0x0002)==0x0000)
5026*53ee8cc1Swenshuai.xi         printf("[DVBS]: Hum Detect ====================: Fail. \n");
5027*53ee8cc1Swenshuai.xi     else
5028*53ee8cc1Swenshuai.xi         printf("[DVBS]: Hum Detect ====================: OK. \n");
5029*53ee8cc1Swenshuai.xi 
5030*53ee8cc1Swenshuai.xi     if ((u16Data&0x0004)==0x0000)
5031*53ee8cc1Swenshuai.xi         printf("[DVBS]: DCR Lock ======================: Fail. \n");
5032*53ee8cc1Swenshuai.xi     else
5033*53ee8cc1Swenshuai.xi         printf("[DVBS]: DCR Lock ======================: OK. \n");
5034*53ee8cc1Swenshuai.xi 
5035*53ee8cc1Swenshuai.xi     if ((u16Data&0x0008)==0x0000)
5036*53ee8cc1Swenshuai.xi         printf("[DVBS]: IIS Detect ====================: Fail. \n");
5037*53ee8cc1Swenshuai.xi     else
5038*53ee8cc1Swenshuai.xi         printf("[DVBS]: IIS Detect ====================: OK. \n");
5039*53ee8cc1Swenshuai.xi 
5040*53ee8cc1Swenshuai.xi     if ((u16Data&0x0010)==0x0000)
5041*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC0 Lock ====================: Fail. \n");
5042*53ee8cc1Swenshuai.xi     else
5043*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC0 Lock ====================: OK. \n");
5044*53ee8cc1Swenshuai.xi 
5045*53ee8cc1Swenshuai.xi     if ((u16Data&0x0020)==0x0000)
5046*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC1 Lock ====================: Fail. \n");
5047*53ee8cc1Swenshuai.xi     else
5048*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC1 Lock ====================: OK. \n");
5049*53ee8cc1Swenshuai.xi 
5050*53ee8cc1Swenshuai.xi     if ((u16Data&0x0040)==0x0000)
5051*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC2 Lock ====================: Fail. \n");
5052*53ee8cc1Swenshuai.xi     else
5053*53ee8cc1Swenshuai.xi         printf("[DVBS]: DAGC2 Lock ====================: OK. \n");
5054*53ee8cc1Swenshuai.xi 
5055*53ee8cc1Swenshuai.xi     if ((u16Data&0x0080)==0x0000)
5056*53ee8cc1Swenshuai.xi         printf("[DVBS]: CCI Detect ====================: Fail. \n");
5057*53ee8cc1Swenshuai.xi     else
5058*53ee8cc1Swenshuai.xi         printf("[DVBS]: CCI Detect ====================: OK. \n");
5059*53ee8cc1Swenshuai.xi 
5060*53ee8cc1Swenshuai.xi     if ((u16Data&0x0100)==0x0000)
5061*53ee8cc1Swenshuai.xi         printf("[DVBS]: SRD Coarse Done ===============: Fail. \n");
5062*53ee8cc1Swenshuai.xi     else
5063*53ee8cc1Swenshuai.xi         printf("[DVBS]: SRD Coarse Done ===============: OK. \n");
5064*53ee8cc1Swenshuai.xi 
5065*53ee8cc1Swenshuai.xi     if ((u16Data&0x0200)==0x0000)
5066*53ee8cc1Swenshuai.xi         printf("[DVBS]: SRD Fine Done =================: Fail. \n");
5067*53ee8cc1Swenshuai.xi     else
5068*53ee8cc1Swenshuai.xi         printf("[DVBS]: SRD Fine Done =================: OK. \n");
5069*53ee8cc1Swenshuai.xi 
5070*53ee8cc1Swenshuai.xi     if ((u16Data&0x0400)==0x0000)
5071*53ee8cc1Swenshuai.xi         printf("[DVBS]: EQ Lock =======================: Fail. \n");
5072*53ee8cc1Swenshuai.xi     else
5073*53ee8cc1Swenshuai.xi         printf("[DVBS]: EQ Lock =======================: OK. \n");
5074*53ee8cc1Swenshuai.xi 
5075*53ee8cc1Swenshuai.xi     if ((u16Data&0x0800)==0x0000)
5076*53ee8cc1Swenshuai.xi         printf("[DVBS]: FineFE Done ===================: Fail. \n");
5077*53ee8cc1Swenshuai.xi     else
5078*53ee8cc1Swenshuai.xi         printf("[DVBS]: FineFE Done ===================: OK. \n");
5079*53ee8cc1Swenshuai.xi 
5080*53ee8cc1Swenshuai.xi     if ((u16Data&0x1000)==0x0000)
5081*53ee8cc1Swenshuai.xi         printf("[DVBS]: PR Lock =======================: Fail. \n");
5082*53ee8cc1Swenshuai.xi     else
5083*53ee8cc1Swenshuai.xi         printf("[DVBS]: PR Lock =======================: OK. \n");
5084*53ee8cc1Swenshuai.xi 
5085*53ee8cc1Swenshuai.xi     if ((u16Data&0x2000)==0x0000)
5086*53ee8cc1Swenshuai.xi         printf("[DVBS]: Reserved Frame ================: Fail. \n");
5087*53ee8cc1Swenshuai.xi     else
5088*53ee8cc1Swenshuai.xi         printf("[DVBS]: Reserved Frame ================: OK. \n");
5089*53ee8cc1Swenshuai.xi 
5090*53ee8cc1Swenshuai.xi     if ((u16Data&0x4000)==0x0000)
5091*53ee8cc1Swenshuai.xi         printf("[DVBS]: Dummy Frame ===================: Fail. \n");
5092*53ee8cc1Swenshuai.xi     else
5093*53ee8cc1Swenshuai.xi         printf("[DVBS]: Dummy Frame ===================: OK. \n");
5094*53ee8cc1Swenshuai.xi 
5095*53ee8cc1Swenshuai.xi     if ((u16Data&0x8000)==0x0000)
5096*53ee8cc1Swenshuai.xi         printf("[DVBS]: PLSC Done =====================: Fail. \n");
5097*53ee8cc1Swenshuai.xi     else
5098*53ee8cc1Swenshuai.xi         printf("[DVBS]: PLSC Done =====================: OK. \n");
5099*53ee8cc1Swenshuai.xi 
5100*53ee8cc1Swenshuai.xi     printf("------------------------------------------------------------------------\n");
5101*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE01H, &u8Data);
5102*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5103*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_SWUSE01L, &u8Data);
5104*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5105*53ee8cc1Swenshuai.xi     if ((u16Data&0x0001)==0x0000)
5106*53ee8cc1Swenshuai.xi         printf("[DVBS]: FS Get Info From Len ==========: Fail. \n");
5107*53ee8cc1Swenshuai.xi     else
5108*53ee8cc1Swenshuai.xi         printf("[DVBS]: FS Get Info From Len ==========: OK. \n");
5109*53ee8cc1Swenshuai.xi 
5110*53ee8cc1Swenshuai.xi     if ((u16Data&0x0002)==0x0000)
5111*53ee8cc1Swenshuai.xi         printf("[DVBS]: IQ Swap Detect ================: Fail. \n");
5112*53ee8cc1Swenshuai.xi     else
5113*53ee8cc1Swenshuai.xi         printf("[DVBS]: IQ Swap Detect ================: OK. \n");
5114*53ee8cc1Swenshuai.xi 
5115*53ee8cc1Swenshuai.xi     if ((u16Data&0x0004)==0x0000)
5116*53ee8cc1Swenshuai.xi         printf("[DVBS]: FS Acquisition ================: Fail. \n");
5117*53ee8cc1Swenshuai.xi     else
5118*53ee8cc1Swenshuai.xi         printf("[DVBS]: FS Acquisition ================: OK. \n");
5119*53ee8cc1Swenshuai.xi 
5120*53ee8cc1Swenshuai.xi     if ((u16Data&0x0008)==0x0000)
5121*53ee8cc1Swenshuai.xi         printf("[DVBS]: TR Lock =======================: Fail. \n");
5122*53ee8cc1Swenshuai.xi     else
5123*53ee8cc1Swenshuai.xi         printf("[DVBS]: TR Lock =======================: OK. \n");
5124*53ee8cc1Swenshuai.xi 
5125*53ee8cc1Swenshuai.xi     if ((u16Data&0x0010)==0x0000)
5126*53ee8cc1Swenshuai.xi         printf("[DVBS]: CLCFE Lock ====================: Fail. \n");
5127*53ee8cc1Swenshuai.xi     else
5128*53ee8cc1Swenshuai.xi         printf("[DVBS]: CLCFE Lock ====================: OK. \n");
5129*53ee8cc1Swenshuai.xi 
5130*53ee8cc1Swenshuai.xi     if ((u16Data&0x0020)==0x0000)
5131*53ee8cc1Swenshuai.xi         printf("[DVBS]: OLCFE Lock ====================: Fail. \n");
5132*53ee8cc1Swenshuai.xi     else
5133*53ee8cc1Swenshuai.xi         printf("[DVBS]: OLCFE Lock ====================: OK. \n");
5134*53ee8cc1Swenshuai.xi 
5135*53ee8cc1Swenshuai.xi     if ((u16Data&0x0040)==0x0000)
5136*53ee8cc1Swenshuai.xi         printf("[DVBS]: Fsync Found ===================: Fail. \n");
5137*53ee8cc1Swenshuai.xi     else
5138*53ee8cc1Swenshuai.xi         printf("[DVBS]: Fsync Found ===================: OK. \n");
5139*53ee8cc1Swenshuai.xi 
5140*53ee8cc1Swenshuai.xi     if ((u16Data&0x0080)==0x0000)
5141*53ee8cc1Swenshuai.xi         printf("[DVBS]: Fsync Lock ====================: Fail. \n");
5142*53ee8cc1Swenshuai.xi     else
5143*53ee8cc1Swenshuai.xi         printf("[DVBS]: Fsync Lock ====================: OK. \n");
5144*53ee8cc1Swenshuai.xi 
5145*53ee8cc1Swenshuai.xi     if ((u16Data&0x0100)==0x0000)
5146*53ee8cc1Swenshuai.xi         printf("[DVBS]: Fsync Fail Search =============: Fail. \n");
5147*53ee8cc1Swenshuai.xi     else
5148*53ee8cc1Swenshuai.xi         printf("[DVBS]: Fsync Fail Search =============: OK. \n");
5149*53ee8cc1Swenshuai.xi 
5150*53ee8cc1Swenshuai.xi     if ((u16Data&0x0200)==0x0000)
5151*53ee8cc1Swenshuai.xi         printf("[DVBS]: Fsync Fail Lock ===============: Fail. \n");
5152*53ee8cc1Swenshuai.xi     else
5153*53ee8cc1Swenshuai.xi         printf("[DVBS]: Fsync Fail Lock ===============: OK. \n");
5154*53ee8cc1Swenshuai.xi 
5155*53ee8cc1Swenshuai.xi     if ((u16Data&0x0400)==0x0000)
5156*53ee8cc1Swenshuai.xi         printf("[DVBS]: False Alarm ===================: Fail. \n");
5157*53ee8cc1Swenshuai.xi     else
5158*53ee8cc1Swenshuai.xi         printf("[DVBS]: False Alarm ===================: OK. \n");
5159*53ee8cc1Swenshuai.xi 
5160*53ee8cc1Swenshuai.xi     if ((u16Data&0x0800)==0x0000)
5161*53ee8cc1Swenshuai.xi         printf("[DVBS]: Viterbi In Sync ===============: Fail. \n");
5162*53ee8cc1Swenshuai.xi     else
5163*53ee8cc1Swenshuai.xi         printf("[DVBS]: Viterbi In Sync ===============: OK. \n");
5164*53ee8cc1Swenshuai.xi 
5165*53ee8cc1Swenshuai.xi     if ((u16Data&0x1000)==0x0000)
5166*53ee8cc1Swenshuai.xi         printf("[DVBS]: Uncrt Over ====================: Fail. \n");
5167*53ee8cc1Swenshuai.xi     else
5168*53ee8cc1Swenshuai.xi         printf("[DVBS]: Uncrt Over ====================: OK. \n");
5169*53ee8cc1Swenshuai.xi 
5170*53ee8cc1Swenshuai.xi     if ((u16Data&0x2000)==0x0000)
5171*53ee8cc1Swenshuai.xi         printf("[DVBS]: CLK Cnt Over ==================: Fail. \n");
5172*53ee8cc1Swenshuai.xi     else
5173*53ee8cc1Swenshuai.xi         printf("[DVBS]: CLK Cnt Over ==================: OK. \n");
5174*53ee8cc1Swenshuai.xi 
5175*53ee8cc1Swenshuai.xi     //if ((u16Data&0x4000)==0x0000)
5176*53ee8cc1Swenshuai.xi     //    printf("[DVBS]: Data In Ready FIFO ============: Fail. \n");
5177*53ee8cc1Swenshuai.xi     //else
5178*53ee8cc1Swenshuai.xi     //    printf("[DVBS]: Data In Ready FIFO ============: OK. \n");
5179*53ee8cc1Swenshuai.xi 
5180*53ee8cc1Swenshuai.xi     //if ((u16Data&0x8000)==0x0000)
5181*53ee8cc1Swenshuai.xi     //    printf("[DVBS]: IIR Buff Busy =================: Fail. \n");
5182*53ee8cc1Swenshuai.xi     //else
5183*53ee8cc1Swenshuai.xi     //    printf("[DVBS]: IIR Buff Busy =================: OK. \n");
5184*53ee8cc1Swenshuai.xi 
5185*53ee8cc1Swenshuai.xi     /*
5186*53ee8cc1Swenshuai.xi     printf("------------------------------------------------------------------------\n");
5187*53ee8cc1Swenshuai.xi     u16Address = 0x0B64;
5188*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(u16Address+1, &u8Data);
5189*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5190*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(u16Address , &u8Data);
5191*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5192*53ee8cc1Swenshuai.xi     if ((u16Data&0x0001)==0x0000)
5193*53ee8cc1Swenshuai.xi         printf("[DVBS]: IIR Busy LDPC =================: Fail. \n");
5194*53ee8cc1Swenshuai.xi     else
5195*53ee8cc1Swenshuai.xi         printf("[DVBS]: IIR Busy LDPC =================: OK. \n");
5196*53ee8cc1Swenshuai.xi 
5197*53ee8cc1Swenshuai.xi     if ((u16Data&0x0002)==0x0000)
5198*53ee8cc1Swenshuai.xi         printf("[DVBS]: BCH Busy ======================: Fail. \n");
5199*53ee8cc1Swenshuai.xi     else
5200*53ee8cc1Swenshuai.xi         printf("[DVBS]: BCH Busy ======================: OK. \n");
5201*53ee8cc1Swenshuai.xi 
5202*53ee8cc1Swenshuai.xi     if ((u16Data&0x0004)==0x0000)
5203*53ee8cc1Swenshuai.xi         printf("[DVBS]: Oppro Ready Out ===============: Fail. \n");
5204*53ee8cc1Swenshuai.xi     else
5205*53ee8cc1Swenshuai.xi         printf("[DVBS]: Oppro Ready Out ===============: OK. \n");
5206*53ee8cc1Swenshuai.xi 
5207*53ee8cc1Swenshuai.xi     if ((u16Data&0x0008)==0x0000)
5208*53ee8cc1Swenshuai.xi         printf("[DVBS]: LDPC Win ======================: Fail. \n");
5209*53ee8cc1Swenshuai.xi     else
5210*53ee8cc1Swenshuai.xi         printf("[DVBS]: LDPC Win ======================: OK. \n");
5211*53ee8cc1Swenshuai.xi 
5212*53ee8cc1Swenshuai.xi     if ((u16Data&0x0010)==0x0000)
5213*53ee8cc1Swenshuai.xi         printf("[DVBS]: LDPC Error ====================: Fail. \n");
5214*53ee8cc1Swenshuai.xi     else
5215*53ee8cc1Swenshuai.xi         printf("[DVBS]: LDPC Error ====================: OK. \n");
5216*53ee8cc1Swenshuai.xi 
5217*53ee8cc1Swenshuai.xi     if ((u16Data&0x0020)==0x0000)
5218*53ee8cc1Swenshuai.xi         printf("[DVBS]: Out BCH Error =================: Fail. \n");
5219*53ee8cc1Swenshuai.xi     else
5220*53ee8cc1Swenshuai.xi         printf("[DVBS]: Out BCH Error =================: OK. \n");
5221*53ee8cc1Swenshuai.xi 
5222*53ee8cc1Swenshuai.xi     if ((u16Data&0x0040)==0x0000)
5223*53ee8cc1Swenshuai.xi         printf("[DVBS]: Descr BCH FEC Num Error =======: Fail. \n");
5224*53ee8cc1Swenshuai.xi     else
5225*53ee8cc1Swenshuai.xi         printf("[DVBS]: Descr BCH FEC Num Error =======: OK. \n");
5226*53ee8cc1Swenshuai.xi 
5227*53ee8cc1Swenshuai.xi     if ((u16Data&0x0080)==0x0000)
5228*53ee8cc1Swenshuai.xi         printf("[DVBS]: Descr BCH Data Num Error ======: Fail. \n");
5229*53ee8cc1Swenshuai.xi     else
5230*53ee8cc1Swenshuai.xi         printf("[DVBS]: Descr BCH Data Num Error ======: OK. \n");
5231*53ee8cc1Swenshuai.xi 
5232*53ee8cc1Swenshuai.xi     if ((u16Data&0x0100)==0x0000)
5233*53ee8cc1Swenshuai.xi         printf("[DVBS]: Packet Error Out ==============: Fail. \n");
5234*53ee8cc1Swenshuai.xi     else
5235*53ee8cc1Swenshuai.xi         printf("[DVBS]: Packet Error Out ==============: OK. \n");
5236*53ee8cc1Swenshuai.xi 
5237*53ee8cc1Swenshuai.xi     if ((u16Data&0x0200)==0x0000)
5238*53ee8cc1Swenshuai.xi         printf("[DVBS]: BBH CRC Error =================: Fail. \n");
5239*53ee8cc1Swenshuai.xi     else
5240*53ee8cc1Swenshuai.xi         printf("[DVBS]: BBH CRC Error =================: OK. \n");
5241*53ee8cc1Swenshuai.xi 
5242*53ee8cc1Swenshuai.xi     if ((u16Data&0x0400)==0x0000)
5243*53ee8cc1Swenshuai.xi         printf("[DVBS]: BBH Decode Done ===============: Fail. \n");
5244*53ee8cc1Swenshuai.xi     else
5245*53ee8cc1Swenshuai.xi         printf("[DVBS]: BBH Decode Done ===============: OK. \n");
5246*53ee8cc1Swenshuai.xi 
5247*53ee8cc1Swenshuai.xi     if ((u16Data&0x0800)==0x0000)
5248*53ee8cc1Swenshuai.xi         printf("[DVBS]: ISRC Calculate Done ===========: Fail. \n");
5249*53ee8cc1Swenshuai.xi     else
5250*53ee8cc1Swenshuai.xi         printf("[DVBS]: ISRC Calculate Done ===========: OK. \n");
5251*53ee8cc1Swenshuai.xi 
5252*53ee8cc1Swenshuai.xi     if ((u16Data&0x1000)==0x0000)
5253*53ee8cc1Swenshuai.xi         printf("[DVBS]: Syncd Check Error =============: Fail. \n");
5254*53ee8cc1Swenshuai.xi     else
5255*53ee8cc1Swenshuai.xi         printf("[DVBS]: Syncd Check Error =============: OK. \n");
5256*53ee8cc1Swenshuai.xi 
5257*53ee8cc1Swenshuai.xi     //if ((u16Data&0x2000)==0x0000)
5258*53ee8cc1Swenshuai.xi     //      printf("[DVBS]: Syncd Check Error======: Fail. \n");
5259*53ee8cc1Swenshuai.xi     //else
5260*53ee8cc1Swenshuai.xi     //      printf("[DVBS]: Syncd Check Error======: OK. \n");
5261*53ee8cc1Swenshuai.xi 
5262*53ee8cc1Swenshuai.xi     if ((u16Data&0x4000)==0x0000)
5263*53ee8cc1Swenshuai.xi         printf("[DVBS]: Demap Init ====================: Fail. \n");
5264*53ee8cc1Swenshuai.xi     else
5265*53ee8cc1Swenshuai.xi         printf("[DVBS]: Demap Init ====================: OK. \n");
5266*53ee8cc1Swenshuai.xi     */
5267*53ee8cc1Swenshuai.xi //Spectrum Information
5268*53ee8cc1Swenshuai.xi     printf("------------------------------------------------------------------------\n");
5269*53ee8cc1Swenshuai.xi 
5270*53ee8cc1Swenshuai.xi     u16Address = 0x2836;
5271*53ee8cc1Swenshuai.xi     status &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5272*53ee8cc1Swenshuai.xi     psd_smooth_factor=(u16Data>>8)&0x7F;
5273*53ee8cc1Swenshuai.xi 
5274*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE12H, &u8Data);
5275*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5276*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE12L, &u8Data);
5277*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5278*53ee8cc1Swenshuai.xi     u32temp5=u16Data;
5279*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE13H, &u8Data);
5280*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5281*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE13L, &u8Data);
5282*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5283*53ee8cc1Swenshuai.xi     u32temp5|=(u16Data<<16);
5284*53ee8cc1Swenshuai.xi     if (psd_smooth_factor!=0)
5285*53ee8cc1Swenshuai.xi         srd_left_top_value=(float)u32temp5/256.0/psd_smooth_factor;
5286*53ee8cc1Swenshuai.xi     else
5287*53ee8cc1Swenshuai.xi         srd_left_top_value=0;
5288*53ee8cc1Swenshuai.xi 
5289*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14H, &u8Data);
5290*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5291*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14L, &u8Data);
5292*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5293*53ee8cc1Swenshuai.xi     u32temp5=u16Data;
5294*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE15H, &u8Data);
5295*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5296*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE15L, &u8Data);
5297*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5298*53ee8cc1Swenshuai.xi     u32temp5|=(u16Data<<16);
5299*53ee8cc1Swenshuai.xi     if (psd_smooth_factor!=0)
5300*53ee8cc1Swenshuai.xi         srd_left_bottom_value=(float)u32temp5/256.0/psd_smooth_factor;
5301*53ee8cc1Swenshuai.xi     else
5302*53ee8cc1Swenshuai.xi         srd_left_bottom_value=0;
5303*53ee8cc1Swenshuai.xi 
5304*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE16H, &u8Data);
5305*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5306*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE16L, &u8Data);
5307*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5308*53ee8cc1Swenshuai.xi     u32temp5=u16Data;
5309*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE17H, &u8Data);
5310*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5311*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE17L, &u8Data);
5312*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5313*53ee8cc1Swenshuai.xi     u32temp5|=(u16Data<<16);
5314*53ee8cc1Swenshuai.xi     if (psd_smooth_factor!=0)
5315*53ee8cc1Swenshuai.xi         srd_right_top_value=(float)u32temp5/256.0/psd_smooth_factor;
5316*53ee8cc1Swenshuai.xi     else
5317*53ee8cc1Swenshuai.xi         srd_right_top_value=0;
5318*53ee8cc1Swenshuai.xi 
5319*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE18H, &u8Data);
5320*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5321*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE18L, &u8Data);
5322*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5323*53ee8cc1Swenshuai.xi     u32temp5=u16Data;
5324*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE19H, &u8Data);
5325*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5326*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE19L, &u8Data);
5327*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5328*53ee8cc1Swenshuai.xi     u32temp5|=(u16Data<<16);
5329*53ee8cc1Swenshuai.xi     if (psd_smooth_factor!=0)
5330*53ee8cc1Swenshuai.xi         srd_right_bottom_value=(float)u32temp5/256.0/psd_smooth_factor;
5331*53ee8cc1Swenshuai.xi     else
5332*53ee8cc1Swenshuai.xi         srd_right_bottom_value=0;
5333*53ee8cc1Swenshuai.xi 
5334*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1AH, &u8Data);
5335*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5336*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1AL, &u8Data);
5337*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5338*53ee8cc1Swenshuai.xi     srd_left=u16Data;
5339*53ee8cc1Swenshuai.xi     printf("[DVBS]: FFT Left ======================: %d, %f\n", srd_left, srd_left_top_value - srd_left_bottom_value);
5340*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1BH, &u8Data);
5341*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5342*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1BL, &u8Data);
5343*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5344*53ee8cc1Swenshuai.xi     srd_right=u16Data;
5345*53ee8cc1Swenshuai.xi     printf("[DVBS]: FFT Right =====================: %d, %f\n", srd_right, srd_right_top_value - srd_right_bottom_value);
5346*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1CH, &u8Data);
5347*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5348*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1CL, &u8Data);
5349*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5350*53ee8cc1Swenshuai.xi     srd_left_top=u16Data;
5351*53ee8cc1Swenshuai.xi     printf("[DVBS]: FFT Left Top ==================: %d, %f\n", srd_left_top, srd_left_top_value);
5352*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1DH, &u8Data);
5353*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5354*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1DL, &u8Data);
5355*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5356*53ee8cc1Swenshuai.xi     srd_left_bottom=u16Data;
5357*53ee8cc1Swenshuai.xi     printf("[DVBS]: FFT Left Bottom ===============: %d, %f\n", srd_left_bottom, srd_left_bottom_value);
5358*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1EH, &u8Data);
5359*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5360*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1EL, &u8Data);
5361*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5362*53ee8cc1Swenshuai.xi     srd_right_top=u16Data;
5363*53ee8cc1Swenshuai.xi     printf("[DVBS]: FFT Right Top =================: %d, %f\n", srd_right_top, srd_right_top_value);
5364*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1FH, &u8Data);
5365*53ee8cc1Swenshuai.xi     u16Data = u8Data;
5366*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE1FL, &u8Data);
5367*53ee8cc1Swenshuai.xi     u16Data = (u16Data<<8)|u8Data;
5368*53ee8cc1Swenshuai.xi     srd_right_bottom=u16Data;
5369*53ee8cc1Swenshuai.xi     printf("[DVBS]: FFT Right Bottom ==============: %d, %f\n", srd_right_bottom, srd_right_bottom_value);
5370*53ee8cc1Swenshuai.xi 
5371*53ee8cc1Swenshuai.xi     printf("-----------------------------------------\n");
5372*53ee8cc1Swenshuai.xi     printf("[DVBS]: Left-Bottom ===================: %d\n", srd_left-srd_left_bottom);
5373*53ee8cc1Swenshuai.xi     printf("[DVBS]: Left-Top ======================: %d\n", srd_left_top - srd_left);
5374*53ee8cc1Swenshuai.xi     printf("[DVBS]: Right-Top =====================: %d\n", srd_right - srd_right_top);
5375*53ee8cc1Swenshuai.xi     printf("[DVBS]: Right-Bottom ==================: %d\n", srd_right_bottom - srd_right);
5376*53ee8cc1Swenshuai.xi 
5377*53ee8cc1Swenshuai.xi     if (psd_smooth_factor!=0)
5378*53ee8cc1Swenshuai.xi     {
5379*53ee8cc1Swenshuai.xi         if ((srd_left_top-srd_left_bottom)!=0)
5380*53ee8cc1Swenshuai.xi             printf("[DVBS]: Left Slope ====================: %f\n", (srd_left_top_value - srd_left_bottom_value)/(srd_left_top-srd_left_bottom));
5381*53ee8cc1Swenshuai.xi         else
5382*53ee8cc1Swenshuai.xi             printf("[DVBS]: Left Slope ====================: %f\n", 0.000000);
5383*53ee8cc1Swenshuai.xi 
5384*53ee8cc1Swenshuai.xi         if((srd_right_bottom - srd_right_top)!=0)
5385*53ee8cc1Swenshuai.xi             printf("[DVBS]: Right Slope ===================: %f\n", (srd_right_top_value - srd_right_bottom_value)/(srd_right_bottom - srd_right_top));
5386*53ee8cc1Swenshuai.xi         else
5387*53ee8cc1Swenshuai.xi             printf("[DVBS]: Right Slope ===================: %f\n", 0.000000);
5388*53ee8cc1Swenshuai.xi 
5389*53ee8cc1Swenshuai.xi         if (((srd_right_top_value - srd_right_bottom_value)!=0)&&((srd_right_bottom - srd_right_top))!=0)
5390*53ee8cc1Swenshuai.xi             printf("[DVBS]: Slope Ratio ===================: %f\n", ((srd_left_top_value - srd_left_bottom_value)/(srd_left_top-srd_left_bottom))/((srd_right_top_value - srd_right_bottom_value)/(srd_right_bottom - srd_right_top)));
5391*53ee8cc1Swenshuai.xi         else
5392*53ee8cc1Swenshuai.xi             printf("[DVBS]: Slope Ratio ===================: %f\n", 0.000000);
5393*53ee8cc1Swenshuai.xi     }
5394*53ee8cc1Swenshuai.xi     else
5395*53ee8cc1Swenshuai.xi     {
5396*53ee8cc1Swenshuai.xi         printf("[DVBS]: Left Slope ======================: %d\n", 0);
5397*53ee8cc1Swenshuai.xi         printf("[DVBS]: Right Slope =====================: %d\n", 0);
5398*53ee8cc1Swenshuai.xi         printf("[DVBS]: Slope Ratio =====================: %d\n", 0);
5399*53ee8cc1Swenshuai.xi     }
5400*53ee8cc1Swenshuai.xi #endif
5401*53ee8cc1Swenshuai.xi     return status;
5402*53ee8cc1Swenshuai.xi }
5403*53ee8cc1Swenshuai.xi 
INTERN_DVBS_Demod_Get_Debug_Info_polling(void)5404*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_Demod_Get_Debug_Info_polling(void)
5405*53ee8cc1Swenshuai.xi {
5406*53ee8cc1Swenshuai.xi     MS_BOOL bRet = FALSE;
5407*53ee8cc1Swenshuai.xi #if 0
5408*53ee8cc1Swenshuai.xi     MS_U8                u8Data = 0;
5409*53ee8cc1Swenshuai.xi     MS_U16               u16Data = 0;
5410*53ee8cc1Swenshuai.xi     MS_U16               u16Address = 0;
5411*53ee8cc1Swenshuai.xi     MS_U32               u32DebugInfo_Fb = 0;            //Fb, SymbolRate
5412*53ee8cc1Swenshuai.xi     MS_U32               u32DebugInfo_Fs = 96000;        //Fs, 96000k
5413*53ee8cc1Swenshuai.xi     float                AGC_IF_Gain;
5414*53ee8cc1Swenshuai.xi     float                DAGC0_Gain, DAGC1_Gain, DAGC2_Gain, DAGC3_Gain, DAGC0_Peak_Mean, DAGC1_Peak_Mean, DAGC2_Peak_Mean, DAGC3_Peak_Mean;
5415*53ee8cc1Swenshuai.xi     short                AGC_Err, DAGC0_Err, DAGC1_Err, DAGC2_Err, DAGC3_Err;
5416*53ee8cc1Swenshuai.xi     float                DCR_Offset_I, DCR_Offset_Q;
5417*53ee8cc1Swenshuai.xi     float                FineCFO_loop_input_value, FineCFO_loop_out_value;
5418*53ee8cc1Swenshuai.xi     double               FineCFO_loop_ki_value, TR_loop_ki;
5419*53ee8cc1Swenshuai.xi     float                PR_in_value, PR_out_value, PR_loop_ki, PR_loopback_ki;
5420*53ee8cc1Swenshuai.xi     float                IQB_Phase, IQB_Gain;
5421*53ee8cc1Swenshuai.xi     MS_U16               IIS_cnt, ConvegenceLen;
5422*53ee8cc1Swenshuai.xi     float                Linear_SNR_dd, SNR_dd_dB, Linear_SNR_da, SNR_da_dB, SNR_nda_dB, Linear_SNR;
5423*53ee8cc1Swenshuai.xi     float                Packet_Err, BER;
5424*53ee8cc1Swenshuai.xi     float                TR_Indicator_ff, TR_SFO_Converge, Fs_value, Fb_value;
5425*53ee8cc1Swenshuai.xi     float                TR_Loop_Output, TR_Loop_Ki, TR_loop_input, TR_tmp0, TR_tmp1, TR_tmp2;
5426*53ee8cc1Swenshuai.xi     float                Eq_variance_da, Eq_variance_dd;
5427*53ee8cc1Swenshuai.xi     float                ndasnr_ratio, ndasnr_a, ndasnr_ab;
5428*53ee8cc1Swenshuai.xi     MS_U16               BitErr, BitErrPeriod;
5429*53ee8cc1Swenshuai.xi     MS_BOOL              BEROver;
5430*53ee8cc1Swenshuai.xi 
5431*53ee8cc1Swenshuai.xi     //Fb
5432*53ee8cc1Swenshuai.xi     bRet &= MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
5433*53ee8cc1Swenshuai.xi     //bRet &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
5434*53ee8cc1Swenshuai.xi     if((u8Data&0x02)==0x00)                                         //Manual Tune
5435*53ee8cc1Swenshuai.xi     {
5436*53ee8cc1Swenshuai.xi         u32DebugInfo_Fb = 0x0;//_u32CurrentSR;
5437*53ee8cc1Swenshuai.xi     }
5438*53ee8cc1Swenshuai.xi     else                                                            //Blind Scan
5439*53ee8cc1Swenshuai.xi     {
5440*53ee8cc1Swenshuai.xi         bRet &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14H, &u8Data);
5441*53ee8cc1Swenshuai.xi         u16Data = u8Data;
5442*53ee8cc1Swenshuai.xi         bRet &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14L, &u8Data);
5443*53ee8cc1Swenshuai.xi         u16Data = (u16Data<<8)|u8Data;
5444*53ee8cc1Swenshuai.xi         u32DebugInfo_Fb = u16Data;
5445*53ee8cc1Swenshuai.xi     }
5446*53ee8cc1Swenshuai.xi     printf("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
5447*53ee8cc1Swenshuai.xi     printf("Fs ====================================: %lu [kHz]\n",u32DebugInfo_Fs);
5448*53ee8cc1Swenshuai.xi     printf("Fb ====================================: %lu [kHz]\n",u32DebugInfo_Fb);
5449*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5450*53ee8cc1Swenshuai.xi //Page1-GAIN & DCR
5451*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5452*53ee8cc1Swenshuai.xi //GAIN
5453*53ee8cc1Swenshuai.xi     printf("\n");
5454*53ee8cc1Swenshuai.xi     printf("========================================================================\n");
5455*53ee8cc1Swenshuai.xi     printf("Debug Message [GAIN & DCR]==============================================\n");
5456*53ee8cc1Swenshuai.xi 
5457*53ee8cc1Swenshuai.xi     //Debug select
5458*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_IF_AGC_GAIN>>16)&0xffff;
5459*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5460*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_IF_AGC_GAIN)&0xffff);
5461*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5462*53ee8cc1Swenshuai.xi 
5463*53ee8cc1Swenshuai.xi     //Freeze and dump
5464*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5465*53ee8cc1Swenshuai.xi     //AGC_IF_GAIN
5466*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_AGC)&0xffff;
5467*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5468*53ee8cc1Swenshuai.xi     AGC_IF_Gain=u16Data;
5469*53ee8cc1Swenshuai.xi     //Unfreeze
5470*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5471*53ee8cc1Swenshuai.xi 
5472*53ee8cc1Swenshuai.xi     AGC_IF_Gain=AGC_IF_Gain/0x8000;     //(16, 15)
5473*53ee8cc1Swenshuai.xi     printf("[DVBS]: AGC_IF_Gain ===================: %f\n", AGC_IF_Gain);
5474*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5475*53ee8cc1Swenshuai.xi     //Debug select
5476*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_DAGC0_GAIN>>16)&0xffff;
5477*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5478*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC0_GAIN)&0xffff);
5479*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5480*53ee8cc1Swenshuai.xi 
5481*53ee8cc1Swenshuai.xi     //Freeze and dump
5482*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5483*53ee8cc1Swenshuai.xi     //DAGC0_GAIN
5484*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_DAGC0)&0xffff;
5485*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5486*53ee8cc1Swenshuai.xi     u16Data = (u16Data>>4);
5487*53ee8cc1Swenshuai.xi     DAGC0_Gain=(u16Data&0x0fff);
5488*53ee8cc1Swenshuai.xi     //Unfreeze
5489*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5490*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5491*53ee8cc1Swenshuai.xi     //Debug select
5492*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_DAGC1_GAIN>>16)&0xffff;
5493*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5494*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC1_GAIN)&0xffff);
5495*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5496*53ee8cc1Swenshuai.xi 
5497*53ee8cc1Swenshuai.xi     //Freeze and dump
5498*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5499*53ee8cc1Swenshuai.xi     //DAGC1_GAIN
5500*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_DAGC1)&0xffff;
5501*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5502*53ee8cc1Swenshuai.xi     DAGC1_Gain=(u16Data&0x07ff);
5503*53ee8cc1Swenshuai.xi     //Unfreeze
5504*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5505*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5506*53ee8cc1Swenshuai.xi     //Debug select
5507*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_DAGC2_GAIN>>16)&0xffff;
5508*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5509*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC2_GAIN)&0xffff);
5510*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5511*53ee8cc1Swenshuai.xi 
5512*53ee8cc1Swenshuai.xi     //Freeze and dump
5513*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5514*53ee8cc1Swenshuai.xi     //DAGC2_GAIN
5515*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_DAGC2)&0xffff;
5516*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5517*53ee8cc1Swenshuai.xi     DAGC2_Gain=(u16Data&0x0fff);
5518*53ee8cc1Swenshuai.xi     //Unfreeze
5519*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5520*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5521*53ee8cc1Swenshuai.xi     //Debug select
5522*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_DAGC3_GAIN>>16)&0xffff;
5523*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5524*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC3_GAIN)&0xffff);
5525*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5526*53ee8cc1Swenshuai.xi 
5527*53ee8cc1Swenshuai.xi     //Freeze and dump
5528*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5529*53ee8cc1Swenshuai.xi     //DAGC3_GAIN
5530*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_DAGC3)&0xffff;
5531*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5532*53ee8cc1Swenshuai.xi     u16Data = (u16Data>>4);
5533*53ee8cc1Swenshuai.xi     DAGC3_Gain=(u16Data&0x0fff);
5534*53ee8cc1Swenshuai.xi     //Unfreeze
5535*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5536*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5537*53ee8cc1Swenshuai.xi 
5538*53ee8cc1Swenshuai.xi     DAGC0_Gain=DAGC0_Gain/0x200; //<12,9>
5539*53ee8cc1Swenshuai.xi     DAGC1_Gain=DAGC1_Gain/0x200; //<11,9>
5540*53ee8cc1Swenshuai.xi     DAGC2_Gain=DAGC2_Gain/0x200; //<12,9>
5541*53ee8cc1Swenshuai.xi     DAGC3_Gain=DAGC3_Gain/0x200; //<12,9>
5542*53ee8cc1Swenshuai.xi     printf("[DVBS]: DAGC0_Gain ====================: %f\n", DAGC0_Gain);
5543*53ee8cc1Swenshuai.xi     printf("[DVBS]: DAGC1_Gain ====================: %f\n", DAGC1_Gain);
5544*53ee8cc1Swenshuai.xi     printf("[DVBS]: DAGC2_Gain ====================: %f\n", DAGC2_Gain);
5545*53ee8cc1Swenshuai.xi     printf("[DVBS]: DAGC3_Gain ====================: %f\n", DAGC3_Gain);
5546*53ee8cc1Swenshuai.xi 
5547*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5548*53ee8cc1Swenshuai.xi //ERROR
5549*53ee8cc1Swenshuai.xi     //Debug select
5550*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_AGC_ERR>>16)&0xffff;
5551*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5552*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_AGC_ERR)&0xffff);
5553*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5554*53ee8cc1Swenshuai.xi 
5555*53ee8cc1Swenshuai.xi     //Freeze and dump
5556*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5557*53ee8cc1Swenshuai.xi     //AGC_ERR
5558*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_AGC)&0xffff;
5559*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5560*53ee8cc1Swenshuai.xi     AGC_Err=(u16Data&0x03ff);
5561*53ee8cc1Swenshuai.xi     //Unfreeze
5562*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5563*53ee8cc1Swenshuai.xi 
5564*53ee8cc1Swenshuai.xi     //Debug select
5565*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_DAGC0_ERR>>16)&0xffff;
5566*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5567*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC0_ERR)&0xffff);
5568*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5569*53ee8cc1Swenshuai.xi 
5570*53ee8cc1Swenshuai.xi     //Freeze and dump
5571*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5572*53ee8cc1Swenshuai.xi     //DAGC0_ERR
5573*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_DAGC0)&0xffff;
5574*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5575*53ee8cc1Swenshuai.xi     u16Data = (u16Data>>4);
5576*53ee8cc1Swenshuai.xi     DAGC0_Err=(u16Data&0x7fff);
5577*53ee8cc1Swenshuai.xi     //Unfreeze
5578*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5579*53ee8cc1Swenshuai.xi 
5580*53ee8cc1Swenshuai.xi     //Debug select
5581*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_DAGC1_ERR>>16)&0xffff;
5582*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5583*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC1_ERR)&0xffff);
5584*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5585*53ee8cc1Swenshuai.xi 
5586*53ee8cc1Swenshuai.xi     //Freeze and dump
5587*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5588*53ee8cc1Swenshuai.xi     //DAGC1_ERR
5589*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_DAGC1)&0xffff;
5590*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5591*53ee8cc1Swenshuai.xi     DAGC1_Err=(u16Data&0x7fff);
5592*53ee8cc1Swenshuai.xi     //Unfreeze
5593*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5594*53ee8cc1Swenshuai.xi 
5595*53ee8cc1Swenshuai.xi     //Debug select
5596*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_DAGC2_ERR>>16)&0xffff;
5597*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5598*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC2_ERR)&0xffff);
5599*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5600*53ee8cc1Swenshuai.xi 
5601*53ee8cc1Swenshuai.xi     //Freeze and dump
5602*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5603*53ee8cc1Swenshuai.xi     //DAGC2_ERR
5604*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_DAGC2)&0xffff;
5605*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5606*53ee8cc1Swenshuai.xi     DAGC2_Err=(u16Data&0x7fff);
5607*53ee8cc1Swenshuai.xi     //Unfreeze
5608*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5609*53ee8cc1Swenshuai.xi 
5610*53ee8cc1Swenshuai.xi     //Debug select
5611*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_DAGC3_ERR>>16)&0xffff;
5612*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5613*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC3_ERR)&0xffff);
5614*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5615*53ee8cc1Swenshuai.xi 
5616*53ee8cc1Swenshuai.xi     //Freeze and dump
5617*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5618*53ee8cc1Swenshuai.xi     //DAGC3_ERR
5619*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_DAGC3)&0xffff;
5620*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5621*53ee8cc1Swenshuai.xi     u16Data = (u16Data>>4);
5622*53ee8cc1Swenshuai.xi     DAGC3_Err=(u16Data&0x7fff);
5623*53ee8cc1Swenshuai.xi     //Unfreeze
5624*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5625*53ee8cc1Swenshuai.xi 
5626*53ee8cc1Swenshuai.xi     if (AGC_Err>=0x200)
5627*53ee8cc1Swenshuai.xi         AGC_Err=AGC_Err-0x400;
5628*53ee8cc1Swenshuai.xi     if (DAGC0_Err>=0x4000)
5629*53ee8cc1Swenshuai.xi         DAGC0_Err=DAGC0_Err-0x8000;
5630*53ee8cc1Swenshuai.xi     if (DAGC1_Err>=0x4000)
5631*53ee8cc1Swenshuai.xi         DAGC1_Err=DAGC1_Err-0x8000;
5632*53ee8cc1Swenshuai.xi     if (DAGC2_Err>=0x4000)
5633*53ee8cc1Swenshuai.xi         DAGC2_Err=DAGC2_Err-0x8000;
5634*53ee8cc1Swenshuai.xi     if (DAGC3_Err>=0x4000)
5635*53ee8cc1Swenshuai.xi         DAGC3_Err=DAGC3_Err-0x8000;
5636*53ee8cc1Swenshuai.xi 
5637*53ee8cc1Swenshuai.xi     printf("[DVBS]: AGC_Err =========================: %.3f\n", (float)AGC_Err);
5638*53ee8cc1Swenshuai.xi     printf("[DVBS]: DAGC0_Err =======================: %.3f\n", (float)DAGC0_Err);
5639*53ee8cc1Swenshuai.xi     printf("[DVBS]: DAGC1_Err =======================: %.3f\n", (float)DAGC1_Err);
5640*53ee8cc1Swenshuai.xi     printf("[DVBS]: DAGC2_Err =======================: %.3f\n", (float)DAGC2_Err);
5641*53ee8cc1Swenshuai.xi     printf("[DVBS]: DAGC3_Err =======================: %.3f\n", (float)DAGC3_Err);
5642*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5643*53ee8cc1Swenshuai.xi //PEAK_MEAN
5644*53ee8cc1Swenshuai.xi     //Debug select
5645*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_DAGC0_PEAK_MEAN>>16)&0xffff;
5646*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5647*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC0_PEAK_MEAN)&0xffff);
5648*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5649*53ee8cc1Swenshuai.xi 
5650*53ee8cc1Swenshuai.xi     //Freeze and dump
5651*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5652*53ee8cc1Swenshuai.xi     //DAGC0_PEAK_MEAN
5653*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_DAGC0)&0xffff;
5654*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5655*53ee8cc1Swenshuai.xi     u16Data = (u16Data>>4);
5656*53ee8cc1Swenshuai.xi     DAGC0_Peak_Mean=(u16Data&0x0fff);
5657*53ee8cc1Swenshuai.xi     //Unfreeze
5658*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5659*53ee8cc1Swenshuai.xi 
5660*53ee8cc1Swenshuai.xi     //Debug select
5661*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_DAGC1_PEAK_MEAN>>16)&0xffff;
5662*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5663*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC1_PEAK_MEAN)&0xffff);
5664*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5665*53ee8cc1Swenshuai.xi 
5666*53ee8cc1Swenshuai.xi     //Freeze and dump
5667*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5668*53ee8cc1Swenshuai.xi     //DAGC1_PEAK_MEAN
5669*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_DAGC1)&0xffff;
5670*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5671*53ee8cc1Swenshuai.xi     DAGC1_Peak_Mean=(u16Data&0x0fff);
5672*53ee8cc1Swenshuai.xi     //Unfreeze
5673*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5674*53ee8cc1Swenshuai.xi 
5675*53ee8cc1Swenshuai.xi     //Debug select
5676*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_DAGC2_PEAK_MEAN>>16)&0xffff;
5677*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5678*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC2_PEAK_MEAN)&0xffff);
5679*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5680*53ee8cc1Swenshuai.xi 
5681*53ee8cc1Swenshuai.xi     //Freeze and dump
5682*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5683*53ee8cc1Swenshuai.xi     //DAGC2_PEAK_MEAN
5684*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_DAGC2)&0xffff;
5685*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5686*53ee8cc1Swenshuai.xi     DAGC2_Peak_Mean=(u16Data&0x0fff);
5687*53ee8cc1Swenshuai.xi     //Unfreeze
5688*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5689*53ee8cc1Swenshuai.xi 
5690*53ee8cc1Swenshuai.xi     //Debug select
5691*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_DAGC3_PEAK_MEAN>>16)&0xffff;
5692*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5693*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xfff0)|DEBUG_SEL_DAGC3_PEAK_MEAN)&0xffff);
5694*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5695*53ee8cc1Swenshuai.xi 
5696*53ee8cc1Swenshuai.xi     //Freeze and dump
5697*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5698*53ee8cc1Swenshuai.xi     //DAGC3_PEAK_MEAN
5699*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_OUT_DAGC3)&0xffff;
5700*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5701*53ee8cc1Swenshuai.xi     u16Data = (u16Data>>4);
5702*53ee8cc1Swenshuai.xi     DAGC3_Peak_Mean=(u16Data&0x0fff);
5703*53ee8cc1Swenshuai.xi     //Unfreeze
5704*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5705*53ee8cc1Swenshuai.xi 
5706*53ee8cc1Swenshuai.xi 
5707*53ee8cc1Swenshuai.xi     DAGC0_Peak_Mean = DAGC0_Peak_Mean / 0x800;  //<12,11>
5708*53ee8cc1Swenshuai.xi     DAGC1_Peak_Mean = DAGC1_Peak_Mean / 0x800;  //<12,11>
5709*53ee8cc1Swenshuai.xi     DAGC2_Peak_Mean = DAGC2_Peak_Mean / 0x800;  //<12,11>
5710*53ee8cc1Swenshuai.xi     DAGC3_Peak_Mean = DAGC3_Peak_Mean / 0x800;  //<12,11>
5711*53ee8cc1Swenshuai.xi 
5712*53ee8cc1Swenshuai.xi     printf("[DVBS]: DAGC0_Peak_Mean ===============: %f\n", DAGC0_Peak_Mean);
5713*53ee8cc1Swenshuai.xi     printf("[DVBS]: DAGC1_Peak_Mean ===============: %f\n", DAGC1_Peak_Mean);
5714*53ee8cc1Swenshuai.xi     printf("[DVBS]: DAGC2_Peak_Mean ===============: %f\n", DAGC2_Peak_Mean);
5715*53ee8cc1Swenshuai.xi     printf("[DVBS]: DAGC3_Peak_Mean ===============: %f\n", DAGC3_Peak_Mean);
5716*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5717*53ee8cc1Swenshuai.xi     //Freeze and dump
5718*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5719*53ee8cc1Swenshuai.xi 
5720*53ee8cc1Swenshuai.xi     u16Address = (DCR_OFFSET)&0xffff;
5721*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5722*53ee8cc1Swenshuai.xi 
5723*53ee8cc1Swenshuai.xi     DCR_Offset_I=(u16Data&0xff);
5724*53ee8cc1Swenshuai.xi     if (DCR_Offset_I >= 0x80)
5725*53ee8cc1Swenshuai.xi         DCR_Offset_I = DCR_Offset_I-0x100;
5726*53ee8cc1Swenshuai.xi     DCR_Offset_I = DCR_Offset_I/0x80;
5727*53ee8cc1Swenshuai.xi 
5728*53ee8cc1Swenshuai.xi     DCR_Offset_Q=(u16Data>>8)&0xff;
5729*53ee8cc1Swenshuai.xi     if (DCR_Offset_Q >= 0x80)
5730*53ee8cc1Swenshuai.xi         DCR_Offset_Q = DCR_Offset_Q-0x100;
5731*53ee8cc1Swenshuai.xi     DCR_Offset_Q = DCR_Offset_Q/0x80;
5732*53ee8cc1Swenshuai.xi 
5733*53ee8cc1Swenshuai.xi     //Unfreeze
5734*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5735*53ee8cc1Swenshuai.xi 
5736*53ee8cc1Swenshuai.xi     printf("[DVBS]: DCR_Offset_I ==================: %f\n", DCR_Offset_I);
5737*53ee8cc1Swenshuai.xi     printf("[DVBS]: DCR_Offset_Q ==================: %f\n", DCR_Offset_Q);
5738*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5739*53ee8cc1Swenshuai.xi ////Page1-FineCFO & PR & IIS & IQB
5740*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5741*53ee8cc1Swenshuai.xi //FineCFO
5742*53ee8cc1Swenshuai.xi     printf("------------------------------------------------------------------------\n");
5743*53ee8cc1Swenshuai.xi     printf("Debug Message [FineCFO & PR & IIS & IQB & SNR Status]===================\n");
5744*53ee8cc1Swenshuai.xi     //Debug Select
5745*53ee8cc1Swenshuai.xi     u16Address = INNER_DEBUG_SEL;
5746*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5747*53ee8cc1Swenshuai.xi     u16Data=((u16Data&0xC0FF)|0x0400);
5748*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5749*53ee8cc1Swenshuai.xi 
5750*53ee8cc1Swenshuai.xi     //Freeze and dump
5751*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5752*53ee8cc1Swenshuai.xi 
5753*53ee8cc1Swenshuai.xi     u16Address = INNEREXT_FINEFE_DBG_OUT0;
5754*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5755*53ee8cc1Swenshuai.xi     FineCFO_loop_out_value=u16Data;
5756*53ee8cc1Swenshuai.xi     u16Address = INNEREXT_FINEFE_DBG_OUT2;
5757*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5758*53ee8cc1Swenshuai.xi     FineCFO_loop_out_value=(FineCFO_loop_out_value+(float)u16Data*pow(2.0, 16));
5759*53ee8cc1Swenshuai.xi 
5760*53ee8cc1Swenshuai.xi     //Too large.Use 10Bit
5761*53ee8cc1Swenshuai.xi     u16Address = INNEREXT_FINEFE_KI_FF0;
5762*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5763*53ee8cc1Swenshuai.xi     FineCFO_loop_ki_value=u16Data;
5764*53ee8cc1Swenshuai.xi     u16Address = INNEREXT_FINEFE_KI_FF2;
5765*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5766*53ee8cc1Swenshuai.xi     FineCFO_loop_ki_value=(FineCFO_loop_ki_value+(float)u16Data*pow(2.0, 16));
5767*53ee8cc1Swenshuai.xi     u16Address = INNEREXT_FINEFE_KI_FF4;
5768*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5769*53ee8cc1Swenshuai.xi     FineCFO_loop_ki_value=(FineCFO_loop_ki_value+(double)(u16Data&0x00FF)*pow(2.0, 32));
5770*53ee8cc1Swenshuai.xi     //Unfreeze
5771*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5772*53ee8cc1Swenshuai.xi 
5773*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5774*53ee8cc1Swenshuai.xi     //Debug Select
5775*53ee8cc1Swenshuai.xi     u16Address = INNER_DEBUG_SEL;
5776*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5777*53ee8cc1Swenshuai.xi     u16Data=((u16Data&0xC0FF)|0x0100);
5778*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5779*53ee8cc1Swenshuai.xi 
5780*53ee8cc1Swenshuai.xi     //Freeze and dump
5781*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5782*53ee8cc1Swenshuai.xi 
5783*53ee8cc1Swenshuai.xi     u16Address = INNEREXT_FINEFE_DBG_OUT0;
5784*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5785*53ee8cc1Swenshuai.xi     FineCFO_loop_input_value=u16Data;
5786*53ee8cc1Swenshuai.xi     u16Address = INNEREXT_FINEFE_DBG_OUT2;
5787*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5788*53ee8cc1Swenshuai.xi     FineCFO_loop_input_value=(FineCFO_loop_input_value+(float)u16Data*pow(2.0, 16));
5789*53ee8cc1Swenshuai.xi 
5790*53ee8cc1Swenshuai.xi     //Unfreeze
5791*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5792*53ee8cc1Swenshuai.xi 
5793*53ee8cc1Swenshuai.xi     FineCFO_loop_ki_value = FineCFO_loop_ki_value/1024;
5794*53ee8cc1Swenshuai.xi 
5795*53ee8cc1Swenshuai.xi     if (FineCFO_loop_out_value > 8388608)
5796*53ee8cc1Swenshuai.xi         FineCFO_loop_out_value=FineCFO_loop_out_value - 16777216;
5797*53ee8cc1Swenshuai.xi     if (FineCFO_loop_ki_value > 536870912)//549755813888/1024)
5798*53ee8cc1Swenshuai.xi         FineCFO_loop_ki_value=FineCFO_loop_ki_value - 1073741824;//1099511627776/1024;
5799*53ee8cc1Swenshuai.xi     if (FineCFO_loop_input_value> 1048576)
5800*53ee8cc1Swenshuai.xi         FineCFO_loop_input_value=FineCFO_loop_input_value - 2097152;
5801*53ee8cc1Swenshuai.xi 
5802*53ee8cc1Swenshuai.xi     FineCFO_loop_out_value = ((float)FineCFO_loop_out_value/16777216);
5803*53ee8cc1Swenshuai.xi     FineCFO_loop_ki_value = ((double)FineCFO_loop_ki_value/67108864*u32DebugInfo_Fb);//68719476736/1024*Fb
5804*53ee8cc1Swenshuai.xi     FineCFO_loop_input_value = ((float)FineCFO_loop_input_value/2097152);
5805*53ee8cc1Swenshuai.xi 
5806*53ee8cc1Swenshuai.xi     printf("[DVBS]: FineCFO_loop_out_value ========: %f \n", FineCFO_loop_out_value);
5807*53ee8cc1Swenshuai.xi     printf("[DVBS]: FineCFO_loop_ki_value =========: %f \n", FineCFO_loop_ki_value);
5808*53ee8cc1Swenshuai.xi     printf("[DVBS]: FineCFO_loop_input_value ======: %f \n", FineCFO_loop_input_value);
5809*53ee8cc1Swenshuai.xi 
5810*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5811*53ee8cc1Swenshuai.xi //Phase Recovery
5812*53ee8cc1Swenshuai.xi     //Debug select
5813*53ee8cc1Swenshuai.xi     u16Address = INNER_DEBUG_SEL;
5814*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5815*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0x00FF)|0x0600)&0xffff);
5816*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5817*53ee8cc1Swenshuai.xi 
5818*53ee8cc1Swenshuai.xi     //Freeze and dump
5819*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5820*53ee8cc1Swenshuai.xi 
5821*53ee8cc1Swenshuai.xi     u16Address = INNER_PR_DEBUG_OUT0;
5822*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5823*53ee8cc1Swenshuai.xi     PR_out_value=u16Data;
5824*53ee8cc1Swenshuai.xi     if (PR_out_value>=0x1000)
5825*53ee8cc1Swenshuai.xi         PR_out_value=PR_out_value-0x2000;
5826*53ee8cc1Swenshuai.xi 
5827*53ee8cc1Swenshuai.xi     //Unfreeze
5828*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5829*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5830*53ee8cc1Swenshuai.xi     //Debug select
5831*53ee8cc1Swenshuai.xi     u16Address = INNER_DEBUG_SEL;
5832*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5833*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0x00FF)|0x0100)&0xffff);
5834*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5835*53ee8cc1Swenshuai.xi 
5836*53ee8cc1Swenshuai.xi     //Freeze and dump
5837*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5838*53ee8cc1Swenshuai.xi 
5839*53ee8cc1Swenshuai.xi     u16Address = INNER_PR_DEBUG_OUT0;
5840*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5841*53ee8cc1Swenshuai.xi     PR_in_value=u16Data;
5842*53ee8cc1Swenshuai.xi     u16Address = INNER_PR_DEBUG_OUT2;
5843*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5844*53ee8cc1Swenshuai.xi     PR_in_value=(((u16Data&0x000F)<<16)|(MS_U16)PR_in_value);
5845*53ee8cc1Swenshuai.xi     if (PR_in_value>=0x80000)
5846*53ee8cc1Swenshuai.xi         PR_in_value=PR_in_value-0x100000;
5847*53ee8cc1Swenshuai.xi 
5848*53ee8cc1Swenshuai.xi     //Unfreeze
5849*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5850*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5851*53ee8cc1Swenshuai.xi     //Debug select
5852*53ee8cc1Swenshuai.xi     u16Address = INNER_DEBUG_SEL;
5853*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5854*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0xC0FF)|0x0400)&0xffff);
5855*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5856*53ee8cc1Swenshuai.xi 
5857*53ee8cc1Swenshuai.xi     //Freeze and dump
5858*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5859*53ee8cc1Swenshuai.xi 
5860*53ee8cc1Swenshuai.xi     u16Address = INNER_PR_DEBUG_OUT0;
5861*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5862*53ee8cc1Swenshuai.xi     PR_loop_ki=u16Data;
5863*53ee8cc1Swenshuai.xi     u16Address = INNER_PR_DEBUG_OUT2;
5864*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5865*53ee8cc1Swenshuai.xi     PR_loop_ki=(((u16Data&0x00FF)<<16)+PR_loop_ki);
5866*53ee8cc1Swenshuai.xi     if (PR_loop_ki>=0x800000)
5867*53ee8cc1Swenshuai.xi         PR_loop_ki=PR_loop_ki-0x1000000;
5868*53ee8cc1Swenshuai.xi 
5869*53ee8cc1Swenshuai.xi     //Unfreeze
5870*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5871*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5872*53ee8cc1Swenshuai.xi     //Debug select
5873*53ee8cc1Swenshuai.xi     u16Address = INNER_DEBUG_SEL;
5874*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5875*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0x00FF)|0x0500)&0xffff);
5876*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
5877*53ee8cc1Swenshuai.xi 
5878*53ee8cc1Swenshuai.xi     //Freeze and dump
5879*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5880*53ee8cc1Swenshuai.xi 
5881*53ee8cc1Swenshuai.xi     u16Address = INNER_PR_DEBUG_OUT0;
5882*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5883*53ee8cc1Swenshuai.xi     PR_loopback_ki=u16Data;
5884*53ee8cc1Swenshuai.xi     u16Address = INNER_PR_DEBUG_OUT2;
5885*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5886*53ee8cc1Swenshuai.xi     PR_loopback_ki=(((u16Data&0x00FF)<<16)+PR_loopback_ki);
5887*53ee8cc1Swenshuai.xi     if (PR_loopback_ki>=0x800000)
5888*53ee8cc1Swenshuai.xi         PR_loopback_ki=PR_loopback_ki-0x1000000;
5889*53ee8cc1Swenshuai.xi 
5890*53ee8cc1Swenshuai.xi     //Unfreeze
5891*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
5892*53ee8cc1Swenshuai.xi 
5893*53ee8cc1Swenshuai.xi     PR_out_value = ((float)PR_out_value/4096);
5894*53ee8cc1Swenshuai.xi     PR_in_value = ((float)PR_in_value/131072);
5895*53ee8cc1Swenshuai.xi     PR_loop_ki = ((float)PR_loop_ki/67108864*u32DebugInfo_Fb);
5896*53ee8cc1Swenshuai.xi     PR_loopback_ki = ((float)PR_loopback_ki/67108864*u32DebugInfo_Fb);
5897*53ee8cc1Swenshuai.xi 
5898*53ee8cc1Swenshuai.xi     printf("[DVBS]: PR_out_value ==================: %f\n", PR_out_value);
5899*53ee8cc1Swenshuai.xi     printf("[DVBS]: PR_in_value ===================: %f\n", PR_in_value);
5900*53ee8cc1Swenshuai.xi     printf("[DVBS]: PR_loop_ki ====================: %f\n", PR_loop_ki);
5901*53ee8cc1Swenshuai.xi     printf("[DVBS]: PR_loopback_ki ================: %f\n", PR_loopback_ki);
5902*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5903*53ee8cc1Swenshuai.xi //IIS
5904*53ee8cc1Swenshuai.xi     //Freeze and dump
5905*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5906*53ee8cc1Swenshuai.xi 
5907*53ee8cc1Swenshuai.xi     u16Address = (IIS_COUNT0)&0xffff;
5908*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5909*53ee8cc1Swenshuai.xi     IIS_cnt=u16Data;
5910*53ee8cc1Swenshuai.xi     u16Address = (IIS_COUNT2)&0xffff;
5911*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5912*53ee8cc1Swenshuai.xi     IIS_cnt=(u16Data&0x1f)<<16|IIS_cnt;
5913*53ee8cc1Swenshuai.xi 
5914*53ee8cc1Swenshuai.xi     printf("[DVBS]: IIS_cnt =======================: %d\n", IIS_cnt);
5915*53ee8cc1Swenshuai.xi 
5916*53ee8cc1Swenshuai.xi     //Unfreeze
5917*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5918*53ee8cc1Swenshuai.xi //IQB
5919*53ee8cc1Swenshuai.xi     //Freeze and dump
5920*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendSetFreeze();
5921*53ee8cc1Swenshuai.xi 
5922*53ee8cc1Swenshuai.xi     u16Address = (IQB_PHASE)&0xffff;
5923*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5924*53ee8cc1Swenshuai.xi     IQB_Phase=u16Data&0x3FF;
5925*53ee8cc1Swenshuai.xi     if (IQB_Phase>=0x200)
5926*53ee8cc1Swenshuai.xi         IQB_Phase=IQB_Phase-0x400;
5927*53ee8cc1Swenshuai.xi     IQB_Phase=IQB_Phase/0x400*180;
5928*53ee8cc1Swenshuai.xi 
5929*53ee8cc1Swenshuai.xi     u16Address = (IQB_GAIN)&0xffff;
5930*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5931*53ee8cc1Swenshuai.xi     IQB_Gain=u16Data&0x7FF;
5932*53ee8cc1Swenshuai.xi     IQB_Gain=IQB_Gain/0x400;
5933*53ee8cc1Swenshuai.xi 
5934*53ee8cc1Swenshuai.xi     printf("[DVBS]: IQB_Phase =====================: %f\n", IQB_Phase);
5935*53ee8cc1Swenshuai.xi     printf("[DVBS]: IQB_Gain ======================: %f\n", IQB_Gain);
5936*53ee8cc1Swenshuai.xi 
5937*53ee8cc1Swenshuai.xi     //Unfreeze
5938*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_FrontendUnFreeze();
5939*53ee8cc1Swenshuai.xi //---------------------------------------------------------
5940*53ee8cc1Swenshuai.xi //SNR
5941*53ee8cc1Swenshuai.xi     //Freeze and dump
5942*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
5943*53ee8cc1Swenshuai.xi 
5944*53ee8cc1Swenshuai.xi     Eq_variance_da=0;
5945*53ee8cc1Swenshuai.xi     u16Address = 0x249E;
5946*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5947*53ee8cc1Swenshuai.xi     Eq_variance_da=u16Data;
5948*53ee8cc1Swenshuai.xi     u16Address = 0x24A0;
5949*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5950*53ee8cc1Swenshuai.xi     Eq_variance_da=((float)(u16Data&0x03fff)*pow(2.0, 16)+Eq_variance_da)/pow(2.0, 29);
5951*53ee8cc1Swenshuai.xi 
5952*53ee8cc1Swenshuai.xi     if (Eq_variance_da==0)
5953*53ee8cc1Swenshuai.xi         Eq_variance_da=1;
5954*53ee8cc1Swenshuai.xi     Linear_SNR_da=1.0/Eq_variance_da;
5955*53ee8cc1Swenshuai.xi     SNR_da_dB=10*log10(Linear_SNR_da);
5956*53ee8cc1Swenshuai.xi 
5957*53ee8cc1Swenshuai.xi     Eq_variance_dd=0;
5958*53ee8cc1Swenshuai.xi     u16Address = 0x24A2;
5959*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5960*53ee8cc1Swenshuai.xi     Eq_variance_dd=u16Data;
5961*53ee8cc1Swenshuai.xi     u16Address = 0x24A4;
5962*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5963*53ee8cc1Swenshuai.xi     Eq_variance_dd=(((float)(u16Data&0x3fff)*65536)+Eq_variance_dd)/pow(2.0, 29);
5964*53ee8cc1Swenshuai.xi 
5965*53ee8cc1Swenshuai.xi     if (Eq_variance_dd==0)
5966*53ee8cc1Swenshuai.xi         Eq_variance_dd=1;
5967*53ee8cc1Swenshuai.xi     Linear_SNR_dd=1.0/Eq_variance_dd;
5968*53ee8cc1Swenshuai.xi     SNR_dd_dB=10*log10(Linear_SNR_dd);
5969*53ee8cc1Swenshuai.xi 
5970*53ee8cc1Swenshuai.xi     ndasnr_a=0;
5971*53ee8cc1Swenshuai.xi     u16Address = 0x248C;
5972*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5973*53ee8cc1Swenshuai.xi     ndasnr_a=u16Data;
5974*53ee8cc1Swenshuai.xi     u16Address = 0x248E;
5975*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5976*53ee8cc1Swenshuai.xi     ndasnr_a=(((float)(u16Data&0x0003)*pow(2.0, 16))+ndasnr_a)/65536;
5977*53ee8cc1Swenshuai.xi 
5978*53ee8cc1Swenshuai.xi     ndasnr_ab=0;
5979*53ee8cc1Swenshuai.xi     u16Address = 0x2490;
5980*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5981*53ee8cc1Swenshuai.xi     ndasnr_ab=u16Data;
5982*53ee8cc1Swenshuai.xi     u16Address = 0x2492;
5983*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5984*53ee8cc1Swenshuai.xi     ndasnr_ab=(((float)(u16Data&0x03ff)*pow(2.0, 16))+ndasnr_ab)/4194304;
5985*53ee8cc1Swenshuai.xi 
5986*53ee8cc1Swenshuai.xi     ndasnr_ab=sqrt(ndasnr_ab);
5987*53ee8cc1Swenshuai.xi     if (ndasnr_ab==0)
5988*53ee8cc1Swenshuai.xi         ndasnr_ab=1;
5989*53ee8cc1Swenshuai.xi     ndasnr_ratio=(float)ndasnr_a/ndasnr_ab;
5990*53ee8cc1Swenshuai.xi     if (ndasnr_ratio> 1)
5991*53ee8cc1Swenshuai.xi         SNR_nda_dB=10*log10(1/(ndasnr_ratio - 1));
5992*53ee8cc1Swenshuai.xi     else
5993*53ee8cc1Swenshuai.xi         SNR_nda_dB=0;
5994*53ee8cc1Swenshuai.xi 
5995*53ee8cc1Swenshuai.xi     u16Address = 0x24BA;
5996*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
5997*53ee8cc1Swenshuai.xi     Linear_SNR=u16Data;
5998*53ee8cc1Swenshuai.xi     u16Address = 0x24BC;
5999*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6000*53ee8cc1Swenshuai.xi     Linear_SNR=(((float)(u16Data&0x0007)*pow(2.0, 16))+Linear_SNR)/64;
6001*53ee8cc1Swenshuai.xi     if (Linear_SNR==0)
6002*53ee8cc1Swenshuai.xi         Linear_SNR=1;
6003*53ee8cc1Swenshuai.xi     Linear_SNR=10*log10(Linear_SNR);
6004*53ee8cc1Swenshuai.xi 
6005*53ee8cc1Swenshuai.xi     //Unfreeze
6006*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
6007*53ee8cc1Swenshuai.xi     printf("[DVBS]: SNR ===========================: %.2f\n", Linear_SNR);
6008*53ee8cc1Swenshuai.xi     printf("[DVBS]: SNR_DA_dB =====================: %.2f\n", SNR_da_dB);
6009*53ee8cc1Swenshuai.xi     printf("[DVBS]: SNR_DD_dB =====================: %.2f\n", SNR_dd_dB);
6010*53ee8cc1Swenshuai.xi     printf("[DVBS]: SNR_NDA_dB ====================: %.2f\n", SNR_nda_dB);
6011*53ee8cc1Swenshuai.xi //---------------------------------------------------------
6012*53ee8cc1Swenshuai.xi     printf("------------------------------------------------------------------------\n");
6013*53ee8cc1Swenshuai.xi     printf("Debug Message [DVBS - PacketErr & BER]==================================\n");
6014*53ee8cc1Swenshuai.xi //BER
6015*53ee8cc1Swenshuai.xi     //freeze
6016*53ee8cc1Swenshuai.xi     u16Address = 0x2103;
6017*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6018*53ee8cc1Swenshuai.xi     u16Data=u16Data|0x0001;
6019*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
6020*53ee8cc1Swenshuai.xi 
6021*53ee8cc1Swenshuai.xi     // bank 17 0x18 [7:0] reg_bit_err_sblprd_7_0  [15:8] reg_bit_err_sblprd_15_8
6022*53ee8cc1Swenshuai.xi     u16Address = 0x2166;
6023*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6024*53ee8cc1Swenshuai.xi     Packet_Err=u16Data;
6025*53ee8cc1Swenshuai.xi 
6026*53ee8cc1Swenshuai.xi     printf("[DVBS]: Packet Err ====================: %.3E\n", Packet_Err);
6027*53ee8cc1Swenshuai.xi 
6028*53ee8cc1Swenshuai.xi     /////////// Post-Viterbi BER /////////////
6029*53ee8cc1Swenshuai.xi     // bank 7 0x18 [7:0] reg_bit_err_sblprd_7_0
6030*53ee8cc1Swenshuai.xi     //             [15:8] reg_bit_err_sblprd_15_8
6031*53ee8cc1Swenshuai.xi     u16Address = 0x2146;
6032*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6033*53ee8cc1Swenshuai.xi     BitErrPeriod=u16Data;
6034*53ee8cc1Swenshuai.xi 
6035*53ee8cc1Swenshuai.xi     // bank 17 0x1D [7:0] reg_bit_err_num_7_0   [15:8] reg_bit_err_num_15_8
6036*53ee8cc1Swenshuai.xi     // bank 17 0x1E [7:0] reg_bit_err_num_23_16 [15:8] reg_bit_err_num_31_24
6037*53ee8cc1Swenshuai.xi     u16Address = 0x216A;
6038*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6039*53ee8cc1Swenshuai.xi     BitErr=u16Data;
6040*53ee8cc1Swenshuai.xi     u16Address = 0x216C;
6041*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6042*53ee8cc1Swenshuai.xi     BitErr=(u16Data<<16)|BitErr;
6043*53ee8cc1Swenshuai.xi 
6044*53ee8cc1Swenshuai.xi     if (BitErrPeriod ==0 )//protect 0
6045*53ee8cc1Swenshuai.xi         BitErrPeriod=1;
6046*53ee8cc1Swenshuai.xi     if (BitErr <=0 )
6047*53ee8cc1Swenshuai.xi         BER=0.5 / (float)(BitErrPeriod*128*188*8);
6048*53ee8cc1Swenshuai.xi     else
6049*53ee8cc1Swenshuai.xi         BER=(float)(BitErr) / (float)(BitErrPeriod*128*188*8);
6050*53ee8cc1Swenshuai.xi 
6051*53ee8cc1Swenshuai.xi     printf("[DVBS]: Post-Viterbi BER ==============: %.3E\n", BER);
6052*53ee8cc1Swenshuai.xi 
6053*53ee8cc1Swenshuai.xi     // bank 7 0x19 [7] reg_bit_err_num_freeze
6054*53ee8cc1Swenshuai.xi     u16Address = 0x2103;
6055*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6056*53ee8cc1Swenshuai.xi     u16Data=u16Data&(~0x0001);
6057*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
6058*53ee8cc1Swenshuai.xi 
6059*53ee8cc1Swenshuai.xi     /////////// Pre-Viterbi BER /////////////
6060*53ee8cc1Swenshuai.xi     // bank 17 0x08 [3] reg_rd_freezeber
6061*53ee8cc1Swenshuai.xi     u16Address = 0x2110;
6062*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6063*53ee8cc1Swenshuai.xi     u16Data=u16Data|0x0008;
6064*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
6065*53ee8cc1Swenshuai.xi 
6066*53ee8cc1Swenshuai.xi     // bank 17 0x0b [7:0] reg_ber_timerl  [15:8] reg_ber_timerm
6067*53ee8cc1Swenshuai.xi     // bank 17 0x0c [5:0] reg_ber_timerh
6068*53ee8cc1Swenshuai.xi     u16Address = 0x2116;
6069*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6070*53ee8cc1Swenshuai.xi     BitErrPeriod=u16Data;
6071*53ee8cc1Swenshuai.xi     u16Address = 0x2118;
6072*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6073*53ee8cc1Swenshuai.xi     BitErrPeriod=((u16Data&0x3f)<<16)|BitErrPeriod;
6074*53ee8cc1Swenshuai.xi 
6075*53ee8cc1Swenshuai.xi     // bank 17 0x0f [7:0] reg_ber_7_0  [15:8] reg_ber_15_8
6076*53ee8cc1Swenshuai.xi     u16Address = 0x211E;
6077*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6078*53ee8cc1Swenshuai.xi     BitErr=u16Data;
6079*53ee8cc1Swenshuai.xi 
6080*53ee8cc1Swenshuai.xi     // bank 17 0x0D [13:8] reg_cor_intstat_reg
6081*53ee8cc1Swenshuai.xi     u16Address = 0x211A;
6082*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6083*53ee8cc1Swenshuai.xi     if (u16Data & 0x1000)
6084*53ee8cc1Swenshuai.xi     {
6085*53ee8cc1Swenshuai.xi         BEROver = true;
6086*53ee8cc1Swenshuai.xi     }
6087*53ee8cc1Swenshuai.xi     else
6088*53ee8cc1Swenshuai.xi     {
6089*53ee8cc1Swenshuai.xi         BEROver = false;
6090*53ee8cc1Swenshuai.xi     }
6091*53ee8cc1Swenshuai.xi 
6092*53ee8cc1Swenshuai.xi     if (BitErrPeriod ==0 )//protect 0
6093*53ee8cc1Swenshuai.xi         BitErrPeriod=1;
6094*53ee8cc1Swenshuai.xi     if (BitErr <=0 )
6095*53ee8cc1Swenshuai.xi         BER=0.5 / (float)(BitErrPeriod) / 256;
6096*53ee8cc1Swenshuai.xi     else
6097*53ee8cc1Swenshuai.xi         BER=(float)(BitErr) / (float)(BitErrPeriod) / 256;
6098*53ee8cc1Swenshuai.xi     printf("[DVBS]: Pre-Viterbi BER ===============: %.3E\n", BER);
6099*53ee8cc1Swenshuai.xi 
6100*53ee8cc1Swenshuai.xi     // bank 17 0x08 [3] reg_rd_freezeber
6101*53ee8cc1Swenshuai.xi     u16Address = 0x2110;
6102*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6103*53ee8cc1Swenshuai.xi     u16Data=u16Data&(~0x0008);
6104*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
6105*53ee8cc1Swenshuai.xi 
6106*53ee8cc1Swenshuai.xi     u16Address = 0x2188;
6107*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6108*53ee8cc1Swenshuai.xi     ConvegenceLen = ((u16Data>>8)&0xFF);
6109*53ee8cc1Swenshuai.xi     printf("[DVBS]: ConvegenceLen =================: %d\n", ConvegenceLen);
6110*53ee8cc1Swenshuai.xi 
6111*53ee8cc1Swenshuai.xi //---------------------------------------------------------
6112*53ee8cc1Swenshuai.xi //Timing Recovery
6113*53ee8cc1Swenshuai.xi     //Debug select
6114*53ee8cc1Swenshuai.xi     u16Address = (INNER_DEBUG_SEL_TR>>16)&0xffff;
6115*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6116*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0x00ff)|INNER_DEBUG_SEL_TR)&0xffff);
6117*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
6118*53ee8cc1Swenshuai.xi 
6119*53ee8cc1Swenshuai.xi     //Freeze and dump
6120*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
6121*53ee8cc1Swenshuai.xi 
6122*53ee8cc1Swenshuai.xi     u16Address = (TR_INDICATOR_FF0)&0xffff;
6123*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6124*53ee8cc1Swenshuai.xi     TR_Indicator_ff=u16Data;
6125*53ee8cc1Swenshuai.xi     u16Address = (TR_INDICATOR_FF0)&0xffff;
6126*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6127*53ee8cc1Swenshuai.xi     TR_Indicator_ff=((u16Data<<16) | (MS_U16)TR_Indicator_ff)&0x7fffff;
6128*53ee8cc1Swenshuai.xi     if (TR_Indicator_ff >= 0x400000)
6129*53ee8cc1Swenshuai.xi         TR_Indicator_ff=TR_Indicator_ff - 0x800000;
6130*53ee8cc1Swenshuai.xi 
6131*53ee8cc1Swenshuai.xi     //Unfreeze
6132*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
6133*53ee8cc1Swenshuai.xi 
6134*53ee8cc1Swenshuai.xi     //Debug select
6135*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_TR_SFO_CONVERGE>>16)&0xffff;
6136*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6137*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0x00ff)|DEBUG_SEL_TR_SFO_CONVERGE)&0xffff);
6138*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
6139*53ee8cc1Swenshuai.xi 
6140*53ee8cc1Swenshuai.xi     //Freeze and dump
6141*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
6142*53ee8cc1Swenshuai.xi 
6143*53ee8cc1Swenshuai.xi     u16Address = (TR_INDICATOR_FF0)&0xffff;
6144*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6145*53ee8cc1Swenshuai.xi     TR_SFO_Converge=u16Data;
6146*53ee8cc1Swenshuai.xi     u16Address = (TR_INDICATOR_FF0)&0xffff;
6147*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6148*53ee8cc1Swenshuai.xi     TR_SFO_Converge=((u16Data<<16) | (MS_U16)TR_SFO_Converge)&0x7fffff;
6149*53ee8cc1Swenshuai.xi     if (TR_SFO_Converge >= 0x400000)
6150*53ee8cc1Swenshuai.xi         TR_SFO_Converge=TR_SFO_Converge - 0x800000;
6151*53ee8cc1Swenshuai.xi 
6152*53ee8cc1Swenshuai.xi     u16Address = INNER_TR_LOPF_VALUE_DEBUG0;
6153*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6154*53ee8cc1Swenshuai.xi     TR_loop_ki=u16Data;
6155*53ee8cc1Swenshuai.xi     u16Address = INNER_TR_LOPF_VALUE_DEBUG2;
6156*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6157*53ee8cc1Swenshuai.xi     TR_loop_ki=((float)u16Data*pow(2.0, 16))+TR_loop_ki;
6158*53ee8cc1Swenshuai.xi     u16Address = INNER_TR_LOPF_VALUE_DEBUG4;
6159*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6160*53ee8cc1Swenshuai.xi     TR_loop_ki=(((double)(u16Data&0x01ff)*pow(2.0, 32))+ TR_loop_ki);
6161*53ee8cc1Swenshuai.xi     if (TR_loop_ki>=pow(2.0, 40))
6162*53ee8cc1Swenshuai.xi         TR_loop_ki=TR_loop_ki-pow(2.0, 41);
6163*53ee8cc1Swenshuai.xi 
6164*53ee8cc1Swenshuai.xi     //Unfreeze
6165*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
6166*53ee8cc1Swenshuai.xi 
6167*53ee8cc1Swenshuai.xi     //Debug select
6168*53ee8cc1Swenshuai.xi     u16Address = (DEBUG_SEL_TR_INPUT>>16)&0xffff;
6169*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6170*53ee8cc1Swenshuai.xi     u16Data=(((u16Data&0x00ff)|DEBUG_SEL_TR_INPUT)&0xffff);
6171*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
6172*53ee8cc1Swenshuai.xi 
6173*53ee8cc1Swenshuai.xi     //Freeze and dump
6174*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerSetFreeze();
6175*53ee8cc1Swenshuai.xi 
6176*53ee8cc1Swenshuai.xi     u16Address = (TR_INDICATOR_FF0)&0xffff;
6177*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6178*53ee8cc1Swenshuai.xi     TR_loop_input=u16Data;
6179*53ee8cc1Swenshuai.xi     //banknum=(TR_INDICATOR_FF1>>8)&0xff;
6180*53ee8cc1Swenshuai.xi     //addr=(TR_INDICATOR_FF1)&0xff;
6181*53ee8cc1Swenshuai.xi     //if(InformRead(banknum, addr, &data)==FALSE) return;
6182*53ee8cc1Swenshuai.xi     //TR_loop_input=((float)((data&0x00ff)<<16) + TR_loop_input);
6183*53ee8cc1Swenshuai.xi     if (TR_loop_input >= 0x8000)
6184*53ee8cc1Swenshuai.xi         TR_loop_input=TR_loop_input - 0x10000;
6185*53ee8cc1Swenshuai.xi 
6186*53ee8cc1Swenshuai.xi     //Unfreeze
6187*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_DTV_InnerUnFreeze();
6188*53ee8cc1Swenshuai.xi 
6189*53ee8cc1Swenshuai.xi     Fs_value=u32DebugInfo_Fs;
6190*53ee8cc1Swenshuai.xi     Fb_value=u32DebugInfo_Fb;
6191*53ee8cc1Swenshuai.xi     TR_tmp0=(float)TR_SFO_Converge/0x200000;
6192*53ee8cc1Swenshuai.xi     TR_tmp2=TR_loop_ki/pow(2.0, 39);
6193*53ee8cc1Swenshuai.xi     TR_tmp1=(float)Fs_value/2/Fb_value;
6194*53ee8cc1Swenshuai.xi 
6195*53ee8cc1Swenshuai.xi     TR_Indicator_ff = (TR_Indicator_ff/0x400);
6196*53ee8cc1Swenshuai.xi     TR_Loop_Output = (TR_tmp0/TR_tmp1*1000000);
6197*53ee8cc1Swenshuai.xi     TR_Loop_Ki = (TR_tmp2/TR_tmp1*1000000);
6198*53ee8cc1Swenshuai.xi     TR_loop_input = (TR_loop_input/0x8000);
6199*53ee8cc1Swenshuai.xi 
6200*53ee8cc1Swenshuai.xi     printf("[DVBS]: TR_Indicator_ff================: %f \n", TR_Indicator_ff);
6201*53ee8cc1Swenshuai.xi     printf("[DVBS]: TR_Loop_Output=================: %f [ppm]\n", TR_Loop_Output);
6202*53ee8cc1Swenshuai.xi     printf("[DVBS]: TR_Loop_Ki=====================: %f [ppm]\n", TR_Loop_Ki);
6203*53ee8cc1Swenshuai.xi     printf("[DVBS]: TR_loop_input==================: %f \n", TR_loop_input);
6204*53ee8cc1Swenshuai.xi #endif
6205*53ee8cc1Swenshuai.xi     bRet=true;
6206*53ee8cc1Swenshuai.xi     return bRet;
6207*53ee8cc1Swenshuai.xi }
6208*53ee8cc1Swenshuai.xi 
6209*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6210*53ee8cc1Swenshuai.xi //  END Get And Show Info Function
6211*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6212*53ee8cc1Swenshuai.xi 
6213*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6214*53ee8cc1Swenshuai.xi //  BlindScan Function
6215*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6216*53ee8cc1Swenshuai.xi 
INTERN_DVBS_BlindScan_Start(MS_U16 u16StartFreq,MS_U16 u16EndFreq)6217*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_Start(MS_U16 u16StartFreq,MS_U16 u16EndFreq)
6218*53ee8cc1Swenshuai.xi {
6219*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6220*53ee8cc1Swenshuai.xi     MS_U8 u8Data=0;
6221*53ee8cc1Swenshuai.xi 
6222*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_Start+\n"));
6223*53ee8cc1Swenshuai.xi 
6224*53ee8cc1Swenshuai.xi     _u16BlindScanStartFreq=u16StartFreq;
6225*53ee8cc1Swenshuai.xi     _u16BlindScanEndFreq=u16EndFreq;
6226*53ee8cc1Swenshuai.xi     _u16TunerCenterFreq=0;
6227*53ee8cc1Swenshuai.xi     _u16ChannelInfoIndex=0;
6228*53ee8cc1Swenshuai.xi 
6229*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_WR_DBG_90, &u8Data);
6230*53ee8cc1Swenshuai.xi     u8Data &= 0xd0;
6231*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data);
6232*53ee8cc1Swenshuai.xi 
6233*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_92, (MS_U8)_u16BlindScanStartFreq&0x00ff);
6234*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_93, (MS_U8)(_u16BlindScanStartFreq>>8)&0x00ff);
6235*53ee8cc1Swenshuai.xi 
6236*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_Start- _u16BlindScanStartFreq%d u16StartFreq %d u16EndFreq %d\n", _u16BlindScanStartFreq, u16StartFreq, u16EndFreq));
6237*53ee8cc1Swenshuai.xi 
6238*53ee8cc1Swenshuai.xi     return status;
6239*53ee8cc1Swenshuai.xi }
6240*53ee8cc1Swenshuai.xi 
INTERN_DVBS_BlindScan_NextFreq(MS_BOOL * bBlindScanEnd)6241*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_NextFreq(MS_BOOL* bBlindScanEnd)
6242*53ee8cc1Swenshuai.xi {
6243*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6244*53ee8cc1Swenshuai.xi     MS_U8   u8Data=0;
6245*53ee8cc1Swenshuai.xi 
6246*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_NextFreq+\n"));
6247*53ee8cc1Swenshuai.xi 
6248*53ee8cc1Swenshuai.xi     * bBlindScanEnd=FALSE;
6249*53ee8cc1Swenshuai.xi 
6250*53ee8cc1Swenshuai.xi     if (_u16TunerCenterFreq >=_u16BlindScanEndFreq)
6251*53ee8cc1Swenshuai.xi     {
6252*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_NextFreq . _u16TunerCenterFreq %d _u16BlindScanEndFreq%d\n", _u16TunerCenterFreq, _u16BlindScanEndFreq));
6253*53ee8cc1Swenshuai.xi         * bBlindScanEnd=TRUE;
6254*53ee8cc1Swenshuai.xi 
6255*53ee8cc1Swenshuai.xi         return status;
6256*53ee8cc1Swenshuai.xi     }
6257*53ee8cc1Swenshuai.xi     //Set Tuner Frequency
6258*53ee8cc1Swenshuai.xi     MsOS_DelayTask(10);
6259*53ee8cc1Swenshuai.xi 
6260*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_WR_DBG_90, &u8Data);
6261*53ee8cc1Swenshuai.xi     if ((u8Data&0x02)==0x00)//Manual Tune
6262*53ee8cc1Swenshuai.xi     {
6263*53ee8cc1Swenshuai.xi         u8Data&=~(0x28);
6264*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data);
6265*53ee8cc1Swenshuai.xi         u8Data|=0x02;
6266*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data);
6267*53ee8cc1Swenshuai.xi         u8Data|=0x01;
6268*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data);
6269*53ee8cc1Swenshuai.xi     }
6270*53ee8cc1Swenshuai.xi     else
6271*53ee8cc1Swenshuai.xi     {
6272*53ee8cc1Swenshuai.xi         u8Data&=~(0x28);
6273*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data);
6274*53ee8cc1Swenshuai.xi     }
6275*53ee8cc1Swenshuai.xi 
6276*53ee8cc1Swenshuai.xi     return status;
6277*53ee8cc1Swenshuai.xi }
6278*53ee8cc1Swenshuai.xi 
INTERN_DVBS_BlindScan_GetTunerFreq(MS_U16 * u16TunerCenterFreq,MS_U16 * u16TunerCutOffFreq)6279*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_GetTunerFreq(MS_U16 *u16TunerCenterFreq, MS_U16 *u16TunerCutOffFreq)
6280*53ee8cc1Swenshuai.xi {
6281*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6282*53ee8cc1Swenshuai.xi     MS_U8   u8Data=0;
6283*53ee8cc1Swenshuai.xi     MS_U16  u16WaitCount;
6284*53ee8cc1Swenshuai.xi     MS_U16  u16TunerCutOff;
6285*53ee8cc1Swenshuai.xi 
6286*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_SetTunerFreq+\n"));
6287*53ee8cc1Swenshuai.xi 
6288*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_WR_DBG_90, &u8Data);
6289*53ee8cc1Swenshuai.xi     if ((u8Data&0x02)==0x02)
6290*53ee8cc1Swenshuai.xi     {
6291*53ee8cc1Swenshuai.xi         u8Data|=0x08;
6292*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data);
6293*53ee8cc1Swenshuai.xi         u16WaitCount=0;
6294*53ee8cc1Swenshuai.xi         do
6295*53ee8cc1Swenshuai.xi         {
6296*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_STATE_FLAG, &u8Data);//SubState
6297*53ee8cc1Swenshuai.xi             u16WaitCount++;
6298*53ee8cc1Swenshuai.xi             //DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_NextFreq u8Data:0x%x u16WaitCount:%d\n", u8Data, u16WaitCount));
6299*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
6300*53ee8cc1Swenshuai.xi             }while((u8Data!=0x01)&&(u16WaitCount<INTERN_DVBS_DEMOD_WAIT_TIMEOUT));
6301*53ee8cc1Swenshuai.xi     }
6302*53ee8cc1Swenshuai.xi     else if((u8Data&0x01)==0x01)
6303*53ee8cc1Swenshuai.xi     {
6304*53ee8cc1Swenshuai.xi         u8Data|=0x20;
6305*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data);
6306*53ee8cc1Swenshuai.xi         u16WaitCount=0;
6307*53ee8cc1Swenshuai.xi         do
6308*53ee8cc1Swenshuai.xi         {
6309*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_STATE_FLAG, &u8Data);//SubState
6310*53ee8cc1Swenshuai.xi             u16WaitCount++;
6311*53ee8cc1Swenshuai.xi             //DBG_INTERN_DVBS(printf("MDrv_Demod_BlindScan_NextFreq u8Data:0x%x u16WaitCount:%d\n", u8Data, u16WaitCount));
6312*53ee8cc1Swenshuai.xi             MsOS_DelayTask(1);
6313*53ee8cc1Swenshuai.xi         }while((u8Data!=0x01)&&(u16WaitCount<INTERN_DVBS_DEMOD_WAIT_TIMEOUT));
6314*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_WR_DBG_90, &u8Data);
6315*53ee8cc1Swenshuai.xi         u8Data|=0x02;
6316*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data);
6317*53ee8cc1Swenshuai.xi     }
6318*53ee8cc1Swenshuai.xi     u16WaitCount=0;
6319*53ee8cc1Swenshuai.xi 
6320*53ee8cc1Swenshuai.xi     _u16TunerCenterFreq=0;
6321*53ee8cc1Swenshuai.xi 
6322*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_93, &u8Data);
6323*53ee8cc1Swenshuai.xi     //printf("INTERN_DVBS_BlindScan_GetTunerFreq E_DMD_S2_BS_Tuner_Center_Freq_H=%d\n", u8Data);//RRRRR
6324*53ee8cc1Swenshuai.xi     _u16TunerCenterFreq=u8Data;
6325*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_92, &u8Data);
6326*53ee8cc1Swenshuai.xi     //printf("INTERN_DVBS_BlindScan_GetTunerFreq E_DMD_S2_BS_Tuner_Center_Freq_L=%d\n", u8Data);//RRRRR
6327*53ee8cc1Swenshuai.xi     _u16TunerCenterFreq=(_u16TunerCenterFreq<<8)|u8Data;
6328*53ee8cc1Swenshuai.xi 
6329*53ee8cc1Swenshuai.xi     *u16TunerCenterFreq = _u16TunerCenterFreq;
6330*53ee8cc1Swenshuai.xi //claire test
6331*53ee8cc1Swenshuai.xi     u16TunerCutOff=44000;
6332*53ee8cc1Swenshuai.xi     if(_u16TunerCenterFreq<=990)//980
6333*53ee8cc1Swenshuai.xi     {
6334*53ee8cc1Swenshuai.xi 
6335*53ee8cc1Swenshuai.xi        status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_BALANCE_TRACK, &u8Data);
6336*53ee8cc1Swenshuai.xi        if(u8Data==0x01)
6337*53ee8cc1Swenshuai.xi        {
6338*53ee8cc1Swenshuai.xi           if(_u16TunerCenterFreq<970)//970
6339*53ee8cc1Swenshuai.xi           {
6340*53ee8cc1Swenshuai.xi             u16TunerCutOff=10000;
6341*53ee8cc1Swenshuai.xi           }
6342*53ee8cc1Swenshuai.xi           else
6343*53ee8cc1Swenshuai.xi           {
6344*53ee8cc1Swenshuai.xi             u16TunerCutOff=20000;
6345*53ee8cc1Swenshuai.xi           }
6346*53ee8cc1Swenshuai.xi           u8Data=0x02;
6347*53ee8cc1Swenshuai.xi           status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_BALANCE_TRACK, u8Data);
6348*53ee8cc1Swenshuai.xi        }
6349*53ee8cc1Swenshuai.xi        else if(u8Data==0x02)
6350*53ee8cc1Swenshuai.xi        {
6351*53ee8cc1Swenshuai.xi           u8Data=0x00;
6352*53ee8cc1Swenshuai.xi           status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_BALANCE_TRACK, u8Data);
6353*53ee8cc1Swenshuai.xi        }
6354*53ee8cc1Swenshuai.xi     }
6355*53ee8cc1Swenshuai.xi 
6356*53ee8cc1Swenshuai.xi     if(u16TunerCutOffFreq != NULL)
6357*53ee8cc1Swenshuai.xi         *u16TunerCutOffFreq = u16TunerCutOff;
6358*53ee8cc1Swenshuai.xi 
6359*53ee8cc1Swenshuai.xi 
6360*53ee8cc1Swenshuai.xi //end claire test
6361*53ee8cc1Swenshuai.xi 
6362*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_SetTunerFreq- _u16TunerCenterFreq:%d\n", _u16TunerCenterFreq));
6363*53ee8cc1Swenshuai.xi 
6364*53ee8cc1Swenshuai.xi 
6365*53ee8cc1Swenshuai.xi     return status;
6366*53ee8cc1Swenshuai.xi }
6367*53ee8cc1Swenshuai.xi 
INTERN_DVBS_BlindScan_WaitCurFreqFinished(MS_U8 * u8Progress,MS_U8 * u8FindNum,MS_U8 * substate_reg,MS_U32 * u32Data,MS_U16 * symbolrate_reg,MS_U16 * CFO_reg)6368*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_WaitCurFreqFinished(MS_U8* u8Progress,MS_U8 *u8FindNum, MS_U8 *substate_reg, MS_U32  *u32Data, MS_U16 *symbolrate_reg, MS_U16 *CFO_reg)
6369*53ee8cc1Swenshuai.xi {
6370*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6371*53ee8cc1Swenshuai.xi     //MS_U32  u32Data=0;
6372*53ee8cc1Swenshuai.xi     MS_U16  u16Data=0;
6373*53ee8cc1Swenshuai.xi     MS_U8   u8Data=0, u8Data2=0;
6374*53ee8cc1Swenshuai.xi     MS_U16  u16WaitCount;
6375*53ee8cc1Swenshuai.xi 
6376*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_WaitCurFreqFinished+\n"));
6377*53ee8cc1Swenshuai.xi 
6378*53ee8cc1Swenshuai.xi     u16WaitCount=0;
6379*53ee8cc1Swenshuai.xi     *u8FindNum=0;
6380*53ee8cc1Swenshuai.xi     *u8Progress=0;
6381*53ee8cc1Swenshuai.xi 
6382*53ee8cc1Swenshuai.xi     do
6383*53ee8cc1Swenshuai.xi     {
6384*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_STATE_FLAG, &u8Data);        //State=BlindScan
6385*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_BLINDSCAN_CHECK, &u8Data2);    //SubState=BlindScan
6386*53ee8cc1Swenshuai.xi         u16WaitCount++;
6387*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_BlindScan_WaitCurFreqFinished State: 0x%x Status: 0x%x u16WaitCount:%d\n", u8Data, u8Data2, u16WaitCount));
6388*53ee8cc1Swenshuai.xi         //printf("INTERN_DVBS_BlindScan_WaitCurFreqFinished State: 0x%x Status: 0x%x u16WaitCount:%d\n", u8Data, u8Data2, u16WaitCount);
6389*53ee8cc1Swenshuai.xi 
6390*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
6391*53ee8cc1Swenshuai.xi     }while(((u8Data!=17)||(u8Data2!=0xff))&&(u16WaitCount<INTERN_DVBS_DEMOD_WAIT_TIMEOUT));//E_DMD_S2_STATE_FLAG
6392*53ee8cc1Swenshuai.xi 
6393*53ee8cc1Swenshuai.xi 
6394*53ee8cc1Swenshuai.xi 
6395*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DUMMY_REG_2, &u8Data);
6396*53ee8cc1Swenshuai.xi     u16Data=u8Data;
6397*53ee8cc1Swenshuai.xi 
6398*53ee8cc1Swenshuai.xi 
6399*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_WaitCurFreqFinished OuterCheckStatus:0x%x\n", u16Data));
6400*53ee8cc1Swenshuai.xi 
6401*53ee8cc1Swenshuai.xi     if (u16WaitCount>=INTERN_DVBS_DEMOD_WAIT_TIMEOUT)
6402*53ee8cc1Swenshuai.xi     {
6403*53ee8cc1Swenshuai.xi         status=false;
6404*53ee8cc1Swenshuai.xi         ULOGD("DEMOD","Debug blind scan wait finished time out!!!!\n");
6405*53ee8cc1Swenshuai.xi     }
6406*53ee8cc1Swenshuai.xi     else
6407*53ee8cc1Swenshuai.xi     {
6408*53ee8cc1Swenshuai.xi 
6409*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_SUBSTATE_FLAG, &u8Data);//SubState
6410*53ee8cc1Swenshuai.xi         *substate_reg=u8Data;
6411*53ee8cc1Swenshuai.xi         if (u8Data==0)
6412*53ee8cc1Swenshuai.xi         {
6413*53ee8cc1Swenshuai.xi 
6414*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE13L, &u8Data);
6415*53ee8cc1Swenshuai.xi             *u32Data=u8Data;
6416*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE12H, &u8Data);
6417*53ee8cc1Swenshuai.xi             *u32Data=(*u32Data<<8)|u8Data;
6418*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE12L, &u8Data);
6419*53ee8cc1Swenshuai.xi             *u32Data=(*u32Data<<8)|u8Data;
6420*53ee8cc1Swenshuai.xi             //_u16ChannelInfoArray[0][_u16ChannelInfoIndex]=((*u32Data+500)/1000);
6421*53ee8cc1Swenshuai.xi             //_u16LockedCenterFreq=((*u32Data+500)/1000);                //Center Freq
6422*53ee8cc1Swenshuai.xi 
6423*53ee8cc1Swenshuai.xi 
6424*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14H, &u8Data);
6425*53ee8cc1Swenshuai.xi             u16Data=u8Data;
6426*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14L, &u8Data);
6427*53ee8cc1Swenshuai.xi             u16Data=(u16Data<<8)|u8Data;
6428*53ee8cc1Swenshuai.xi 	     *symbolrate_reg=u16Data;
6429*53ee8cc1Swenshuai.xi             //_u16ChannelInfoArray[1][_u16ChannelInfoIndex]=(u16Data);//Symbol Rate
6430*53ee8cc1Swenshuai.xi             //_u16LockedSymbolRate=u16Data;
6431*53ee8cc1Swenshuai.xi             //_u16ChannelInfoIndex++;
6432*53ee8cc1Swenshuai.xi             //*u8FindNum=_u16ChannelInfoIndex;
6433*53ee8cc1Swenshuai.xi             //printf("claire debug blind scan: find TP frequency %d SR %d index %d\n",_u16LockedCenterFreq,_u16LockedSymbolRate,_u16ChannelInfoIndex);
6434*53ee8cc1Swenshuai.xi 
6435*53ee8cc1Swenshuai.xi 
6436*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE15H, &u8Data);
6437*53ee8cc1Swenshuai.xi             u16Data=u8Data;
6438*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE15L, &u8Data);
6439*53ee8cc1Swenshuai.xi             u16Data=(u16Data<<8)|u8Data;                            //Center_Freq_Offset_Locked
6440*53ee8cc1Swenshuai.xi             *CFO_reg=u16Data;
6441*53ee8cc1Swenshuai.xi             /*
6442*53ee8cc1Swenshuai.xi 	     if (u16Data*1000 >= 0x8000)
6443*53ee8cc1Swenshuai.xi             {
6444*53ee8cc1Swenshuai.xi                 u16Data=0x10000- u16Data*1000;
6445*53ee8cc1Swenshuai.xi                 _s16CurrentCFO=-1*u16Data/1000;
6446*53ee8cc1Swenshuai.xi             }
6447*53ee8cc1Swenshuai.xi             else
6448*53ee8cc1Swenshuai.xi             {
6449*53ee8cc1Swenshuai.xi                 _s16CurrentCFO=u16Data;
6450*53ee8cc1Swenshuai.xi             }
6451*53ee8cc1Swenshuai.xi             */
6452*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE16H, &u8Data);
6453*53ee8cc1Swenshuai.xi             u16Data=u8Data;
6454*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE16L, &u8Data);
6455*53ee8cc1Swenshuai.xi             u16Data=(u16Data<<8)|u8Data;
6456*53ee8cc1Swenshuai.xi             _u16CurrentStepSize=u16Data;            //Tuner_Frequency_Step
6457*53ee8cc1Swenshuai.xi 
6458*53ee8cc1Swenshuai.xi 
6459*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE18H, &u8Data);
6460*53ee8cc1Swenshuai.xi             u16Data=u8Data;
6461*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE18L, &u8Data);
6462*53ee8cc1Swenshuai.xi             u16Data=(u16Data<<8)|u8Data;
6463*53ee8cc1Swenshuai.xi             _u16PreLockedHB=u16Data;                //Pre_Scanned_HB
6464*53ee8cc1Swenshuai.xi 
6465*53ee8cc1Swenshuai.xi 
6466*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE19H, &u8Data);
6467*53ee8cc1Swenshuai.xi             u16Data=u8Data;
6468*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE19L, &u8Data);
6469*53ee8cc1Swenshuai.xi             u16Data=(u16Data<<8)|u8Data;
6470*53ee8cc1Swenshuai.xi             _u16PreLockedLB=u16Data;                //Pre_Scanned_LB
6471*53ee8cc1Swenshuai.xi 
6472*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","Current Locked BWH:%d BWL:%d Step:%d\n ",_u16PreLockedHB, _u16PreLockedLB, _u16CurrentStepSize));
6473*53ee8cc1Swenshuai.xi         }
6474*53ee8cc1Swenshuai.xi         else if (u8Data==1)
6475*53ee8cc1Swenshuai.xi         {
6476*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD", "Debug blind scan: TP not found\n"));
6477*53ee8cc1Swenshuai.xi 
6478*53ee8cc1Swenshuai.xi             //ULOGD("DEMOD", "Debug blind scan: TP not found\n");
6479*53ee8cc1Swenshuai.xi 
6480*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_93, &u8Data);
6481*53ee8cc1Swenshuai.xi             u16Data=u8Data;
6482*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_92, &u8Data);
6483*53ee8cc1Swenshuai.xi             u16Data=(u16Data<<8)|u8Data;
6484*53ee8cc1Swenshuai.xi             _u16NextCenterFreq=u16Data;
6485*53ee8cc1Swenshuai.xi 
6486*53ee8cc1Swenshuai.xi 
6487*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE12H, &u8Data);
6488*53ee8cc1Swenshuai.xi             u16Data=u8Data;
6489*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE12L, &u8Data);
6490*53ee8cc1Swenshuai.xi             u16Data=(u16Data<<8)|u8Data;
6491*53ee8cc1Swenshuai.xi             _u16PreLockedHB=u16Data;            //Pre_Scanned_HB
6492*53ee8cc1Swenshuai.xi 
6493*53ee8cc1Swenshuai.xi 
6494*53ee8cc1Swenshuai.xi 
6495*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE13H, &u8Data);
6496*53ee8cc1Swenshuai.xi             u16Data=u8Data;
6497*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE13L, &u8Data);
6498*53ee8cc1Swenshuai.xi             u16Data=(u16Data<<8)|u8Data;
6499*53ee8cc1Swenshuai.xi             _u16PreLockedLB=u16Data;            //Pre_Scanned_LB
6500*53ee8cc1Swenshuai.xi 
6501*53ee8cc1Swenshuai.xi 
6502*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14H, &u8Data);
6503*53ee8cc1Swenshuai.xi             u16Data=u8Data;
6504*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE14L, &u8Data);
6505*53ee8cc1Swenshuai.xi             u16Data=(u16Data<<8)|u8Data;
6506*53ee8cc1Swenshuai.xi             _u16CurrentSymbolRate=u16Data;        //Fine_Symbol_Rate
6507*53ee8cc1Swenshuai.xi 
6508*53ee8cc1Swenshuai.xi 
6509*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE15H, &u8Data);
6510*53ee8cc1Swenshuai.xi             u16Data=u8Data;
6511*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE15L, &u8Data);
6512*53ee8cc1Swenshuai.xi             u16Data=(u16Data<<8)|u8Data;        //Center_Freq_Offset
6513*53ee8cc1Swenshuai.xi             *CFO_reg=u16Data;
6514*53ee8cc1Swenshuai.xi 		/*
6515*53ee8cc1Swenshuai.xi             if (u16Data*1000 >= 0x8000)
6516*53ee8cc1Swenshuai.xi             {
6517*53ee8cc1Swenshuai.xi                 u16Data=0x1000- u16Data*1000;
6518*53ee8cc1Swenshuai.xi                 _s16CurrentCFO=-1*u16Data/1000;
6519*53ee8cc1Swenshuai.xi             }
6520*53ee8cc1Swenshuai.xi             else
6521*53ee8cc1Swenshuai.xi             {
6522*53ee8cc1Swenshuai.xi                 _s16CurrentCFO=u16Data;
6523*53ee8cc1Swenshuai.xi             }
6524*53ee8cc1Swenshuai.xi             */
6525*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE16H, &u8Data);
6526*53ee8cc1Swenshuai.xi             u16Data=u8Data;
6527*53ee8cc1Swenshuai.xi             status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_SWUSE16L, &u8Data);
6528*53ee8cc1Swenshuai.xi             u16Data=(u16Data<<8)|u8Data;
6529*53ee8cc1Swenshuai.xi             _u16CurrentStepSize=u16Data;        //Tuner_Frequency_Step
6530*53ee8cc1Swenshuai.xi 
6531*53ee8cc1Swenshuai.xi             DBG_INTERN_DVBS(ULOGD("DEMOD","Pre Locked BWH:%d BWL:%d Step:%d\n ",_u16PreLockedHB, _u16PreLockedLB, _u16CurrentStepSize));
6532*53ee8cc1Swenshuai.xi         }
6533*53ee8cc1Swenshuai.xi     }
6534*53ee8cc1Swenshuai.xi     *u8Progress=100;
6535*53ee8cc1Swenshuai.xi 
6536*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_WaitCurFreqFinished- u8Progress: %d u8FindNum %d\n", *u8Progress, *u8FindNum));
6537*53ee8cc1Swenshuai.xi 
6538*53ee8cc1Swenshuai.xi     return status;
6539*53ee8cc1Swenshuai.xi }
6540*53ee8cc1Swenshuai.xi 
INTERN_DVBS_BlindScan_Cancel(void)6541*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_Cancel(void)
6542*53ee8cc1Swenshuai.xi {
6543*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6544*53ee8cc1Swenshuai.xi     MS_U8   u8Data=0;
6545*53ee8cc1Swenshuai.xi     MS_U16  u16Data;
6546*53ee8cc1Swenshuai.xi 
6547*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_Cancel+\n"));
6548*53ee8cc1Swenshuai.xi 
6549*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_WR_DBG_90, &u8Data);
6550*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
6551*53ee8cc1Swenshuai.xi     u8Data&=0xF0;
6552*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data);
6553*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, u8Data);
6554*53ee8cc1Swenshuai.xi 
6555*53ee8cc1Swenshuai.xi     //MDrv_SYS_DMD_VD_MBX_WriteReg(0x20E1, 0x00);
6556*53ee8cc1Swenshuai.xi     //MDrv_SYS_DMD_VD_MBX_WriteReg(0x20E0, 0x00);
6557*53ee8cc1Swenshuai.xi     u16Data = 0x0000;
6558*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_92, (MS_U8)u16Data&0x00ff);
6559*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_93, (MS_U8)(u16Data>>8)&0x00ff);
6560*53ee8cc1Swenshuai.xi 
6561*53ee8cc1Swenshuai.xi     _u16TunerCenterFreq=0;
6562*53ee8cc1Swenshuai.xi     _u16ChannelInfoIndex=0;
6563*53ee8cc1Swenshuai.xi 
6564*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_Cancel-\n"));
6565*53ee8cc1Swenshuai.xi 
6566*53ee8cc1Swenshuai.xi     return status;
6567*53ee8cc1Swenshuai.xi }
6568*53ee8cc1Swenshuai.xi 
INTERN_DVBS_BlindScan_End(void)6569*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_End(void)
6570*53ee8cc1Swenshuai.xi {
6571*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6572*53ee8cc1Swenshuai.xi     MS_U8   u8Data=0;
6573*53ee8cc1Swenshuai.xi     MS_U16  u16Data;
6574*53ee8cc1Swenshuai.xi 
6575*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_End+\n"));
6576*53ee8cc1Swenshuai.xi 
6577*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_WR_DBG_90, &u8Data);
6578*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
6579*53ee8cc1Swenshuai.xi     u8Data&=0xF0;
6580*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data);
6581*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, u8Data);
6582*53ee8cc1Swenshuai.xi 
6583*53ee8cc1Swenshuai.xi     //MDrv_SYS_DMD_VD_MBX_WriteReg(0x20E1, 0x00);
6584*53ee8cc1Swenshuai.xi     //MDrv_SYS_DMD_VD_MBX_WriteReg(0x20E0, 0x00);
6585*53ee8cc1Swenshuai.xi     u16Data = 0x0000;
6586*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_92, (MS_U8)u16Data&0x00ff);
6587*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_93, (MS_U8)(u16Data>>8)&0x00ff);
6588*53ee8cc1Swenshuai.xi 
6589*53ee8cc1Swenshuai.xi     _u16TunerCenterFreq=0;
6590*53ee8cc1Swenshuai.xi     _u16ChannelInfoIndex=0;
6591*53ee8cc1Swenshuai.xi 
6592*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_End-\n"));
6593*53ee8cc1Swenshuai.xi 
6594*53ee8cc1Swenshuai.xi     return status;
6595*53ee8cc1Swenshuai.xi }
6596*53ee8cc1Swenshuai.xi 
INTERN_DVBS_BlindScan_GetChannel(MS_U16 u16ReadStart,MS_U16 * u16TPNum,HAL_DEMOD_MS_FE_CARRIER_PARAM * pTable)6597*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_GetChannel(MS_U16 u16ReadStart,MS_U16* u16TPNum,HAL_DEMOD_MS_FE_CARRIER_PARAM *pTable)
6598*53ee8cc1Swenshuai.xi {
6599*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6600*53ee8cc1Swenshuai.xi     MS_U16  u16TableIndex;
6601*53ee8cc1Swenshuai.xi 
6602*53ee8cc1Swenshuai.xi     *u16TPNum=_u16ChannelInfoIndex-u16ReadStart;
6603*53ee8cc1Swenshuai.xi     for(u16TableIndex = 0; u16TableIndex < (*u16TPNum); u16TableIndex++)
6604*53ee8cc1Swenshuai.xi     {
6605*53ee8cc1Swenshuai.xi         pTable[u16TableIndex].u32Frequency = _u16ChannelInfoArray[0][_u16ChannelInfoIndex-1];
6606*53ee8cc1Swenshuai.xi         pTable[u16TableIndex].SatParam.u32SymbolRate = _u16ChannelInfoArray[1][_u16ChannelInfoIndex-1];
6607*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","MDrv_Demod_BlindScan_GetChannel Freq: %d SymbolRate: %d\n", pTable[u16TableIndex].u32Frequency, pTable[u16TableIndex].SatParam.u32SymbolRate));
6608*53ee8cc1Swenshuai.xi     }
6609*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_u16TPNum:%d\n", *u16TPNum));
6610*53ee8cc1Swenshuai.xi 
6611*53ee8cc1Swenshuai.xi     return status;
6612*53ee8cc1Swenshuai.xi }
6613*53ee8cc1Swenshuai.xi 
INTERN_DVBS_BlindScan_GetCurrentFreq(MS_U32 * u32CurrentFeq)6614*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_BlindScan_GetCurrentFreq(MS_U32 *u32CurrentFeq)
6615*53ee8cc1Swenshuai.xi {
6616*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6617*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_BlindScan_GetCurrentFreq+\n"));
6618*53ee8cc1Swenshuai.xi 
6619*53ee8cc1Swenshuai.xi     *u32CurrentFeq=_u16TunerCenterFreq;
6620*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_BlindScan_GetCurrentFreq-: %d\n", _u16TunerCenterFreq));
6621*53ee8cc1Swenshuai.xi     return status;
6622*53ee8cc1Swenshuai.xi }
6623*53ee8cc1Swenshuai.xi 
6624*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6625*53ee8cc1Swenshuai.xi //  END BlindScan Function
6626*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6627*53ee8cc1Swenshuai.xi 
6628*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6629*53ee8cc1Swenshuai.xi //  DiSEqc Function
6630*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
INTERN_DVBS_DiSEqC_Init(void)6631*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_Init(void)
6632*53ee8cc1Swenshuai.xi {
6633*53ee8cc1Swenshuai.xi     MS_BOOL status = true;
6634*53ee8cc1Swenshuai.xi     MS_U8 u8Data = 0;
6635*53ee8cc1Swenshuai.xi 
6636*53ee8cc1Swenshuai.xi     //Clear status
6637*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xCD, &u8Data);
6638*53ee8cc1Swenshuai.xi     u8Data=(u8Data|0x3E)&(~0x3E);
6639*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCD, u8Data);
6640*53ee8cc1Swenshuai.xi 
6641*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC0, 0x00);
6642*53ee8cc1Swenshuai.xi     //Tone En
6643*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC0, &u8Data);
6644*53ee8cc1Swenshuai.xi     u8Data=(u8Data&(~0x06))|(0x06);
6645*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC0, u8Data);
6646*53ee8cc1Swenshuai.xi 
6647*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_DiSEqC_Init\n"));
6648*53ee8cc1Swenshuai.xi 
6649*53ee8cc1Swenshuai.xi     return status;
6650*53ee8cc1Swenshuai.xi }
6651*53ee8cc1Swenshuai.xi 
INTERN_DVBS_DiSEqC_SetTone(MS_BOOL bTone1)6652*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_SetTone(MS_BOOL bTone1)
6653*53ee8cc1Swenshuai.xi {
6654*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6655*53ee8cc1Swenshuai.xi     MS_U8 u8Data=0;
6656*53ee8cc1Swenshuai.xi     MS_U8 u8ReSet22k=0;
6657*53ee8cc1Swenshuai.xi 
6658*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC4, 0x01);//0x62;DVBS2_DISEQC_TX1
6659*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC0, 0x4E);//0x60
6660*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCC, 0x88);//0x66
6661*53ee8cc1Swenshuai.xi 
6662*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data);//0x61
6663*53ee8cc1Swenshuai.xi     u8ReSet22k=u8Data;
6664*53ee8cc1Swenshuai.xi 
6665*53ee8cc1Swenshuai.xi     if (bTone1==TRUE)
6666*53ee8cc1Swenshuai.xi     {
6667*53ee8cc1Swenshuai.xi         //Tone burst 1
6668*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC2, 0x19);
6669*53ee8cc1Swenshuai.xi         _u8ToneBurstFlag=1;
6670*53ee8cc1Swenshuai.xi     }
6671*53ee8cc1Swenshuai.xi     else
6672*53ee8cc1Swenshuai.xi     {
6673*53ee8cc1Swenshuai.xi         //Tone burst 0
6674*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC2, 0x11);
6675*53ee8cc1Swenshuai.xi         _u8ToneBurstFlag=2;
6676*53ee8cc1Swenshuai.xi     }
6677*53ee8cc1Swenshuai.xi     //DIG_DISEQC_TX_EN
6678*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xCD, &u8Data);
6679*53ee8cc1Swenshuai.xi     //u8Data=u8Data&~(0x01);//Tx Disable
6680*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCD, u8Data);
6681*53ee8cc1Swenshuai.xi 
6682*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
6683*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xCD, &u8Data);//0x66 high byte DVBS2_DISEQC_TX_EN
6684*53ee8cc1Swenshuai.xi     u8Data=u8Data|0x3E;     //Status clear
6685*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCD, u8Data);
6686*53ee8cc1Swenshuai.xi     MsOS_DelayTask(10);
6687*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xCD, &u8Data);
6688*53ee8cc1Swenshuai.xi     u8Data=u8Data&~(0x3E);
6689*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCD, u8Data);
6690*53ee8cc1Swenshuai.xi     MsOS_DelayTask(1);
6691*53ee8cc1Swenshuai.xi 
6692*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xCD, &u8Data);
6693*53ee8cc1Swenshuai.xi     u8Data=u8Data|0x01;      //Tx Enable
6694*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCD, u8Data);
6695*53ee8cc1Swenshuai.xi 
6696*53ee8cc1Swenshuai.xi     MsOS_DelayTask(30);//(100)
6697*53ee8cc1Swenshuai.xi     //For ToneBurst 22k issue.
6698*53ee8cc1Swenshuai.xi     u8Data=u8ReSet22k;
6699*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC2, u8Data);//0x61
6700*53ee8cc1Swenshuai.xi 
6701*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_DiSEqC_SetTone:%d\n", bTone1));
6702*53ee8cc1Swenshuai.xi     //MsOS_DelayTask(100);
6703*53ee8cc1Swenshuai.xi     return status;
6704*53ee8cc1Swenshuai.xi }
6705*53ee8cc1Swenshuai.xi 
INTERN_DVBS_DiSEqC_SetLNBOut(MS_BOOL bLow)6706*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_SetLNBOut(MS_BOOL bLow)
6707*53ee8cc1Swenshuai.xi {
6708*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6709*53ee8cc1Swenshuai.xi     MS_U8 u8Data=0;
6710*53ee8cc1Swenshuai.xi 
6711*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data);
6712*53ee8cc1Swenshuai.xi     if (bLow==TRUE)
6713*53ee8cc1Swenshuai.xi     {
6714*53ee8cc1Swenshuai.xi         u8Data=(u8Data|0x40);    //13V
6715*53ee8cc1Swenshuai.xi     }
6716*53ee8cc1Swenshuai.xi     else
6717*53ee8cc1Swenshuai.xi     {
6718*53ee8cc1Swenshuai.xi         u8Data=(u8Data&(~0x40));//18V
6719*53ee8cc1Swenshuai.xi     }
6720*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC2, u8Data);
6721*53ee8cc1Swenshuai.xi 
6722*53ee8cc1Swenshuai.xi     return status;
6723*53ee8cc1Swenshuai.xi }
6724*53ee8cc1Swenshuai.xi 
INTERN_DVBS_DiSEqC_GetLNBOut(MS_BOOL * bLNBOutLow)6725*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_GetLNBOut(MS_BOOL* bLNBOutLow)
6726*53ee8cc1Swenshuai.xi {
6727*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6728*53ee8cc1Swenshuai.xi     MS_U8 u8Data=0;
6729*53ee8cc1Swenshuai.xi 
6730*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data);
6731*53ee8cc1Swenshuai.xi     if( (u8Data&0x40)==0x40)
6732*53ee8cc1Swenshuai.xi     {
6733*53ee8cc1Swenshuai.xi         * bLNBOutLow=TRUE;
6734*53ee8cc1Swenshuai.xi     }
6735*53ee8cc1Swenshuai.xi     else
6736*53ee8cc1Swenshuai.xi     {
6737*53ee8cc1Swenshuai.xi         * bLNBOutLow=FALSE;
6738*53ee8cc1Swenshuai.xi     }
6739*53ee8cc1Swenshuai.xi 
6740*53ee8cc1Swenshuai.xi     return status;
6741*53ee8cc1Swenshuai.xi }
6742*53ee8cc1Swenshuai.xi 
INTERN_DVBS_DiSEqC_Set22kOnOff(MS_BOOL b22kOn)6743*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_Set22kOnOff(MS_BOOL b22kOn)
6744*53ee8cc1Swenshuai.xi {
6745*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6746*53ee8cc1Swenshuai.xi     MS_U8   u8Data=0;
6747*53ee8cc1Swenshuai.xi 
6748*53ee8cc1Swenshuai.xi     //Set DiSeqC 22K
6749*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xCC, 0x44);        //Set 11K-->22K
6750*53ee8cc1Swenshuai.xi 
6751*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data);
6752*53ee8cc1Swenshuai.xi 
6753*53ee8cc1Swenshuai.xi     if (b22kOn==TRUE)
6754*53ee8cc1Swenshuai.xi     {
6755*53ee8cc1Swenshuai.xi         u8Data=(u8Data&0xc7);
6756*53ee8cc1Swenshuai.xi         u8Data=(u8Data|0x08);
6757*53ee8cc1Swenshuai.xi     }
6758*53ee8cc1Swenshuai.xi     else
6759*53ee8cc1Swenshuai.xi     {
6760*53ee8cc1Swenshuai.xi         u8Data=(u8Data&0xc7);
6761*53ee8cc1Swenshuai.xi     }
6762*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC2, u8Data);
6763*53ee8cc1Swenshuai.xi 
6764*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS_DiSEqC_Set22kOnOff:%d\n", b22kOn));
6765*53ee8cc1Swenshuai.xi     return status;
6766*53ee8cc1Swenshuai.xi }
6767*53ee8cc1Swenshuai.xi 
INTERN_DVBS_DiSEqC_Get22kOnOff(MS_BOOL * b22kOn)6768*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_Get22kOnOff(MS_BOOL* b22kOn)
6769*53ee8cc1Swenshuai.xi {
6770*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6771*53ee8cc1Swenshuai.xi     MS_U8   u8Data=0;
6772*53ee8cc1Swenshuai.xi 
6773*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data);
6774*53ee8cc1Swenshuai.xi     if ((u8Data&0x38)==0x08)
6775*53ee8cc1Swenshuai.xi     {
6776*53ee8cc1Swenshuai.xi         *b22kOn=TRUE;
6777*53ee8cc1Swenshuai.xi     }
6778*53ee8cc1Swenshuai.xi     else
6779*53ee8cc1Swenshuai.xi     {
6780*53ee8cc1Swenshuai.xi         *b22kOn=FALSE;
6781*53ee8cc1Swenshuai.xi     }
6782*53ee8cc1Swenshuai.xi 
6783*53ee8cc1Swenshuai.xi     return status;
6784*53ee8cc1Swenshuai.xi }
6785*53ee8cc1Swenshuai.xi 
INTERN_DVBS_DiSEqC_SendCmd(MS_U8 * pCmd,MS_U8 u8CmdSize)6786*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_SendCmd(MS_U8* pCmd,MS_U8 u8CmdSize)
6787*53ee8cc1Swenshuai.xi {
6788*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6789*53ee8cc1Swenshuai.xi     MS_U8   u8Data;
6790*53ee8cc1Swenshuai.xi     MS_U8   u8Index;
6791*53ee8cc1Swenshuai.xi     MS_U16  u16WaitCount;
6792*53ee8cc1Swenshuai.xi /*
6793*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
6794*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
6795*53ee8cc1Swenshuai.xi     u8Data=(u8Data&~(0x10));
6796*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_REG_BASE + 0x60*2, u8Data);
6797*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, u8Data);
6798*53ee8cc1Swenshuai.xi */
6799*53ee8cc1Swenshuai.xi #if 0       //For Unicable command timing
6800*53ee8cc1Swenshuai.xi     u16WaitCount=0;
6801*53ee8cc1Swenshuai.xi     do
6802*53ee8cc1Swenshuai.xi     {
6803*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_DISEQC_STATUS_FLAG, &u8Data);
6804*53ee8cc1Swenshuai.xi         //printf(">>> INTERN_DVBS_DiSEqC_SendCmd DiSEqC Status = 0x%x <<<\n", u8Data);
6805*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_REG_BASE + 0x60*2, &u8Data);
6806*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
6807*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
6808*53ee8cc1Swenshuai.xi         u16WaitCount++;
6809*53ee8cc1Swenshuai.xi     }while(((u8Data&0x10)==0x10)&&(u16WaitCount < INTERN_DVBS_DEMOD_WAIT_TIMEOUT));
6810*53ee8cc1Swenshuai.xi 
6811*53ee8cc1Swenshuai.xi     if (u16WaitCount >= INTERN_DVBS_DEMOD_WAIT_TIMEOUT)
6812*53ee8cc1Swenshuai.xi     {
6813*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(printf("INTERN_DVBS DiSEqC Send Command Busy!!!\n"));
6814*53ee8cc1Swenshuai.xi         return FALSE;
6815*53ee8cc1Swenshuai.xi     }
6816*53ee8cc1Swenshuai.xi #endif
6817*53ee8cc1Swenshuai.xi 
6818*53ee8cc1Swenshuai.xi     //u16Address=0x0BC4;
6819*53ee8cc1Swenshuai.xi     for (u8Index=0; u8Index < u8CmdSize; u8Index++)
6820*53ee8cc1Swenshuai.xi     {
6821*53ee8cc1Swenshuai.xi         u8Data=*(pCmd+u8Index);
6822*53ee8cc1Swenshuai.xi         status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xC4 + u8Index, u8Data);//#define DVBS2_DISEQC_TX1                            (_REG_DVBS2(0x62)+0)//[7:0]
6823*53ee8cc1Swenshuai.xi          DBG_INTERN_DVBS(ULOGD("DEMOD","=============INTERN_DVBS_DiSEqC_SendCmd(Demod1) = 0x%X\n",u8Data));
6824*53ee8cc1Swenshuai.xi     }
6825*53ee8cc1Swenshuai.xi 
6826*53ee8cc1Swenshuai.xi     //set DiSEqC Tx Length, Odd Enable, Tone Burst Mode
6827*53ee8cc1Swenshuai.xi     u8Data=((u8CmdSize-1)&0x07)|0x40;
6828*53ee8cc1Swenshuai.xi     if (_u8ToneBurstFlag==1)
6829*53ee8cc1Swenshuai.xi     {
6830*53ee8cc1Swenshuai.xi         u8Data|=0x80;//0x20;
6831*53ee8cc1Swenshuai.xi     }
6832*53ee8cc1Swenshuai.xi     else if (_u8ToneBurstFlag==2)
6833*53ee8cc1Swenshuai.xi     {
6834*53ee8cc1Swenshuai.xi         u8Data|=0x20;//0x80;
6835*53ee8cc1Swenshuai.xi     }
6836*53ee8cc1Swenshuai.xi     _u8ToneBurstFlag=0;
6837*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_DMDTOP_DBG_8, u8Data);
6838*53ee8cc1Swenshuai.xi 
6839*53ee8cc1Swenshuai.xi    //add this only for check mailbox R/W
6840*53ee8cc1Swenshuai.xi     #if 1
6841*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD"," Write into E_DMD_S2_MB_DMDTOP_DBG_8 = 0x%X!!!\n",u8Data));
6842*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_DMDTOP_DBG_8, &u8Data);
6843*53ee8cc1Swenshuai.xi     DBG_INTERN_DVBS(ULOGD("DEMOD"," Read from E_DMD_S2_MB_DMDTOP_DBG_8 = 0x%X!!!\n",u8Data));
6844*53ee8cc1Swenshuai.xi     #endif
6845*53ee8cc1Swenshuai.xi 
6846*53ee8cc1Swenshuai.xi     MsOS_DelayTask(25);//MsOS_DelayTask(10);
6847*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_WR_DBG_90, &u8Data);//#define TOP_WR_DBG_90                           (_REG_DMDTOP(0x3A)+0)
6848*53ee8cc1Swenshuai.xi     //u8Data=u8Data|0x10;
6849*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data|0x10);//enable DiSEqC_Data_Tx
6850*53ee8cc1Swenshuai.xi     //MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data); DBG_INTERN_DVBS(printf(">>>+++ INTERN_DVBS_DiSEqC_SendCmd DiSEqC_Init_Mode = 0x%X +++<<<\n",u8Data));
6851*53ee8cc1Swenshuai.xi     //MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_DISEQC_STATUS_FLAG, &u8Data); DBG_INTERN_DVBS(printf(">>>+++ INTERN_DVBS_DiSEqC_SendCmd DiSEqC_State_Flag = %d +++<<<\n",u8Data));
6852*53ee8cc1Swenshuai.xi 
6853*53ee8cc1Swenshuai.xi #if 1           //For Unicable command timing???
6854*53ee8cc1Swenshuai.xi     u16WaitCount=0;
6855*53ee8cc1Swenshuai.xi     do
6856*53ee8cc1Swenshuai.xi     {
6857*53ee8cc1Swenshuai.xi         //MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data); DBG_INTERN_DVBS(printf(">>>*** INTERN_DVBS_DiSEqC_SendCmd DiSEqC_Init_Mode = 0x%X ***<<<\n",u8Data));
6858*53ee8cc1Swenshuai.xi         //MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_DISEQC_STATUS_FLAG, &u8Data); DBG_INTERN_DVBS(printf(">>>*** INTERN_DVBS_DiSEqC_SendCmd DiSEqC_State_Flag = %d ***<<<\n",u8Data));
6859*53ee8cc1Swenshuai.xi         MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_WR_DBG_90, &u8Data);
6860*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
6861*53ee8cc1Swenshuai.xi         MsOS_DelayTask(1);
6862*53ee8cc1Swenshuai.xi         u16WaitCount++;
6863*53ee8cc1Swenshuai.xi     }while(((u8Data&0x10)==0x10)&&(u16WaitCount < INTERN_DVBS_DEMOD_WAIT_TIMEOUT)) ;
6864*53ee8cc1Swenshuai.xi 
6865*53ee8cc1Swenshuai.xi     if (u16WaitCount >= INTERN_DVBS_DEMOD_WAIT_TIMEOUT)
6866*53ee8cc1Swenshuai.xi     {
6867*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS DiSEqC Send Command Busy!!!\n"));
6868*53ee8cc1Swenshuai.xi         return FALSE;
6869*53ee8cc1Swenshuai.xi     }
6870*53ee8cc1Swenshuai.xi      else
6871*53ee8cc1Swenshuai.xi     {
6872*53ee8cc1Swenshuai.xi         DBG_INTERN_DVBS(ULOGD("DEMOD","INTERN_DVBS DiSEqC Send Command Success!!!\n"));
6873*53ee8cc1Swenshuai.xi         return TRUE;
6874*53ee8cc1Swenshuai.xi     }
6875*53ee8cc1Swenshuai.xi 
6876*53ee8cc1Swenshuai.xi 
6877*53ee8cc1Swenshuai.xi #endif
6878*53ee8cc1Swenshuai.xi         //MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xC2, &u8Data); printf(">>>--- INTERN_DVBS_DiSEqC_SendCmd DiSEqC_Init_Mode = 0x%X ---<<<\n",u8Data);
6879*53ee8cc1Swenshuai.xi         //MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_DISEQC_STATUS_FLAG, &u8Data); printf(">>>--- INTERN_DVBS_DiSEqC_SendCmd DiSEqC_State_Flag = %d ---<<<\n",u8Data+1);
6880*53ee8cc1Swenshuai.xi 
6881*53ee8cc1Swenshuai.xi     return status;
6882*53ee8cc1Swenshuai.xi }
6883*53ee8cc1Swenshuai.xi 
INTERN_DVBS_DiSEqC_SetTxToneMode(MS_BOOL bTxTone22kOff)6884*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DiSEqC_SetTxToneMode(MS_BOOL bTxTone22kOff)
6885*53ee8cc1Swenshuai.xi {
6886*53ee8cc1Swenshuai.xi     MS_BOOL status=TRUE;
6887*53ee8cc1Swenshuai.xi     MS_U8   u8Data=0;
6888*53ee8cc1Swenshuai.xi 
6889*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_REG_BASE + 0xD7, &u8Data);//h006b    h006b    15    15    reg_diseqc_tx_tone_mode
6890*53ee8cc1Swenshuai.xi     if (bTxTone22kOff==TRUE)
6891*53ee8cc1Swenshuai.xi     {
6892*53ee8cc1Swenshuai.xi         u8Data=(u8Data|0x80);                   //1: without 22K.
6893*53ee8cc1Swenshuai.xi     }
6894*53ee8cc1Swenshuai.xi     else
6895*53ee8cc1Swenshuai.xi     {
6896*53ee8cc1Swenshuai.xi         u8Data=(u8Data&(~0x80));                //0: with 22K.
6897*53ee8cc1Swenshuai.xi     }
6898*53ee8cc1Swenshuai.xi     status &= MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2_REG_BASE + 0xD7, u8Data);
6899*53ee8cc1Swenshuai.xi 
6900*53ee8cc1Swenshuai.xi     return status;
6901*53ee8cc1Swenshuai.xi }
6902*53ee8cc1Swenshuai.xi 
INTERN_DVBS_UnicableAGCCheckPower(MS_BOOL pbAGCCheckPower)6903*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_UnicableAGCCheckPower(MS_BOOL pbAGCCheckPower)
6904*53ee8cc1Swenshuai.xi {
6905*53ee8cc1Swenshuai.xi     //MS_BOOL status = TRUE;
6906*53ee8cc1Swenshuai.xi     MS_U8 u8Data=0;
6907*53ee8cc1Swenshuai.xi 
6908*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, 0x00);
6909*53ee8cc1Swenshuai.xi 
6910*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_WR_DBG_90, &u8Data);
6911*53ee8cc1Swenshuai.xi     u8Data &= 0xFE;//clean bit0
6912*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data);
6913*53ee8cc1Swenshuai.xi 
6914*53ee8cc1Swenshuai.xi     if (pbAGCCheckPower == FALSE)//0
6915*53ee8cc1Swenshuai.xi     {
6916*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, &u8Data);
6917*53ee8cc1Swenshuai.xi         u8Data &= 0xFE;//clean bit0
6918*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, u8Data);
6919*53ee8cc1Swenshuai.xi         //printf("CMD=MS_FALSE==============================\n");
6920*53ee8cc1Swenshuai.xi     }
6921*53ee8cc1Swenshuai.xi     else
6922*53ee8cc1Swenshuai.xi     {
6923*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, &u8Data);
6924*53ee8cc1Swenshuai.xi         u8Data |= 0x01;           //bit1=1
6925*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, u8Data);
6926*53ee8cc1Swenshuai.xi         //printf("CMD=MS_TRUE==============================\n");
6927*53ee8cc1Swenshuai.xi     }
6928*53ee8cc1Swenshuai.xi 
6929*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_ReadReg(TOP_WR_DBG_90, &u8Data);
6930*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, &u8Data);
6931*53ee8cc1Swenshuai.xi     u8Data &= 0xF0;
6932*53ee8cc1Swenshuai.xi     u8Data |= 0x01;
6933*53ee8cc1Swenshuai.xi     MDrv_SYS_DMD_VD_MBX_WriteReg(TOP_WR_DBG_90, u8Data);
6934*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, u8Data);
6935*53ee8cc1Swenshuai.xi     MsOS_DelayTask(500);
6936*53ee8cc1Swenshuai.xi 
6937*53ee8cc1Swenshuai.xi     //status &= MDrv_SYS_DMD_VD_MBX_ReadDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, &u8Data);
6938*53ee8cc1Swenshuai.xi     u8Data &= 0x80;             //Read bit7
6939*53ee8cc1Swenshuai.xi     if (u8Data == 0x80)
6940*53ee8cc1Swenshuai.xi     {
6941*53ee8cc1Swenshuai.xi         u8Data = 0x00;
6942*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, u8Data);
6943*53ee8cc1Swenshuai.xi         u8Data = 0x00;
6944*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, u8Data);
6945*53ee8cc1Swenshuai.xi         return TRUE;
6946*53ee8cc1Swenshuai.xi     }
6947*53ee8cc1Swenshuai.xi     else
6948*53ee8cc1Swenshuai.xi     {
6949*53ee8cc1Swenshuai.xi         u8Data = 0x00;
6950*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_90, u8Data);
6951*53ee8cc1Swenshuai.xi         u8Data = 0x00;
6952*53ee8cc1Swenshuai.xi         //status &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_TOP_WR_DBG_91, u8Data);
6953*53ee8cc1Swenshuai.xi         return FALSE;
6954*53ee8cc1Swenshuai.xi     }
6955*53ee8cc1Swenshuai.xi }
6956*53ee8cc1Swenshuai.xi 
6957*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6958*53ee8cc1Swenshuai.xi //  END DiSEqc Function
6959*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6960*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
6961*53ee8cc1Swenshuai.xi //  R/W Function
6962*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
INTERN_DVBS_WriteReg2bytes(MS_U16 u16Addr,MS_U16 u16Data)6963*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_WriteReg2bytes(MS_U16 u16Addr, MS_U16 u16Data)
6964*53ee8cc1Swenshuai.xi {
6965*53ee8cc1Swenshuai.xi     MS_BOOL     bRet= TRUE;
6966*53ee8cc1Swenshuai.xi     bRet &= MDrv_SYS_DMD_VD_MBX_WriteReg(u16Addr, (MS_U8)u16Data&0x00ff);
6967*53ee8cc1Swenshuai.xi     bRet &= MDrv_SYS_DMD_VD_MBX_WriteReg(u16Addr + 0x0001, (MS_U8)(u16Data>>8)&0x00ff);
6968*53ee8cc1Swenshuai.xi     return bRet;
6969*53ee8cc1Swenshuai.xi }
6970*53ee8cc1Swenshuai.xi 
INTERN_DVBS_ReadReg2bytes(MS_U16 u16Addr,MS_U16 * pu16Data)6971*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_ReadReg2bytes(MS_U16 u16Addr, MS_U16 *pu16Data)
6972*53ee8cc1Swenshuai.xi {
6973*53ee8cc1Swenshuai.xi     MS_BOOL   bRet= TRUE;
6974*53ee8cc1Swenshuai.xi     MS_U8     u8Data =0;
6975*53ee8cc1Swenshuai.xi     MS_U16    u16Data =0;
6976*53ee8cc1Swenshuai.xi 
6977*53ee8cc1Swenshuai.xi     bRet &= MDrv_SYS_DMD_VD_MBX_ReadReg(u16Addr + 0x0001, &u8Data);
6978*53ee8cc1Swenshuai.xi     u16Data = u8Data;
6979*53ee8cc1Swenshuai.xi     bRet &= MDrv_SYS_DMD_VD_MBX_ReadReg(u16Addr, &u8Data);
6980*53ee8cc1Swenshuai.xi     *pu16Data = (u16Data<<8)|u8Data;
6981*53ee8cc1Swenshuai.xi 
6982*53ee8cc1Swenshuai.xi     return bRet;
6983*53ee8cc1Swenshuai.xi }
6984*53ee8cc1Swenshuai.xi 
6985*53ee8cc1Swenshuai.xi //Frontend Freeze
INTERN_DVBS_DTV_FrontendSetFreeze(void)6986*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DTV_FrontendSetFreeze(void)
6987*53ee8cc1Swenshuai.xi {
6988*53ee8cc1Swenshuai.xi     MS_BOOL       bRet = TRUE;
6989*53ee8cc1Swenshuai.xi     MS_U16        u16Address;
6990*53ee8cc1Swenshuai.xi     MS_U16        u16Data = 0;
6991*53ee8cc1Swenshuai.xi 
6992*53ee8cc1Swenshuai.xi     u16Address = (FRONTEND_FREEZE_DUMP>>16)&0xffff;
6993*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
6994*53ee8cc1Swenshuai.xi     u16Data|=(FRONTEND_FREEZE_DUMP&0xffff);
6995*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
6996*53ee8cc1Swenshuai.xi 
6997*53ee8cc1Swenshuai.xi     return bRet;
6998*53ee8cc1Swenshuai.xi }
6999*53ee8cc1Swenshuai.xi 
INTERN_DVBS_DTV_FrontendUnFreeze(void)7000*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DTV_FrontendUnFreeze(void)
7001*53ee8cc1Swenshuai.xi {
7002*53ee8cc1Swenshuai.xi     MS_BOOL     bRet= TRUE;
7003*53ee8cc1Swenshuai.xi     MS_U16      u16Address;
7004*53ee8cc1Swenshuai.xi     MS_U16      u16Data = 0;
7005*53ee8cc1Swenshuai.xi 
7006*53ee8cc1Swenshuai.xi     u16Address = (FRONTEND_FREEZE_DUMP>>16)&0xffff;
7007*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
7008*53ee8cc1Swenshuai.xi     u16Data&=~(FRONTEND_FREEZE_DUMP&0xffff);
7009*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
7010*53ee8cc1Swenshuai.xi 
7011*53ee8cc1Swenshuai.xi     return bRet;
7012*53ee8cc1Swenshuai.xi }
7013*53ee8cc1Swenshuai.xi 
7014*53ee8cc1Swenshuai.xi //Inner Freeze
INTERN_DVBS_DTV_InnerSetFreeze(void)7015*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DTV_InnerSetFreeze(void)
7016*53ee8cc1Swenshuai.xi {
7017*53ee8cc1Swenshuai.xi     MS_BOOL       bRet= TRUE;
7018*53ee8cc1Swenshuai.xi     MS_U16        u16Address;
7019*53ee8cc1Swenshuai.xi     MS_U16        u16Data = 0;
7020*53ee8cc1Swenshuai.xi 
7021*53ee8cc1Swenshuai.xi     u16Address = (INNER_FREEZE_DUMP>>16)&0xffff;
7022*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
7023*53ee8cc1Swenshuai.xi     u16Data|=(INNER_FREEZE_DUMP&0xffff);
7024*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
7025*53ee8cc1Swenshuai.xi 
7026*53ee8cc1Swenshuai.xi     return bRet;
7027*53ee8cc1Swenshuai.xi }
7028*53ee8cc1Swenshuai.xi 
INTERN_DVBS_DTV_InnerUnFreeze(void)7029*53ee8cc1Swenshuai.xi MS_BOOL INTERN_DVBS_DTV_InnerUnFreeze(void)
7030*53ee8cc1Swenshuai.xi {
7031*53ee8cc1Swenshuai.xi     MS_BOOL     bRet= TRUE;
7032*53ee8cc1Swenshuai.xi     MS_U16      u16Address;
7033*53ee8cc1Swenshuai.xi     MS_U16      u16Data = 0;
7034*53ee8cc1Swenshuai.xi 
7035*53ee8cc1Swenshuai.xi     u16Address = (INNER_FREEZE_DUMP>>16)&0xffff;
7036*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_ReadReg2bytes(u16Address, &u16Data);
7037*53ee8cc1Swenshuai.xi     u16Data&=~(INNER_FREEZE_DUMP&0xffff);
7038*53ee8cc1Swenshuai.xi     bRet &= INTERN_DVBS_WriteReg2bytes(u16Address, u16Data);
7039*53ee8cc1Swenshuai.xi 
7040*53ee8cc1Swenshuai.xi     return bRet;
7041*53ee8cc1Swenshuai.xi }
7042*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
7043*53ee8cc1Swenshuai.xi //  END R/W Function
7044*53ee8cc1Swenshuai.xi //------------------------------------------------------------------
7045*53ee8cc1Swenshuai.xi 
7046*53ee8cc1Swenshuai.xi 
7047*53ee8cc1Swenshuai.xi /***********************************************************************************
7048*53ee8cc1Swenshuai.xi   Subject:    read register
7049*53ee8cc1Swenshuai.xi   Function:   MDrv_1210_IIC_Bypass_Mode
7050*53ee8cc1Swenshuai.xi   Parmeter:
7051*53ee8cc1Swenshuai.xi   Return:
7052*53ee8cc1Swenshuai.xi   Remark:
7053*53ee8cc1Swenshuai.xi ************************************************************************************/
7054*53ee8cc1Swenshuai.xi //void MDrv_1210_IIC_Bypass_Mode(MS_BOOL enable)
7055*53ee8cc1Swenshuai.xi //{
7056*53ee8cc1Swenshuai.xi //    UNUSED(enable);
7057*53ee8cc1Swenshuai.xi //    if (enable)
7058*53ee8cc1Swenshuai.xi //        MDrv_SYS_DMD_VD_MBX_WriteReg(0x8010, 0x10);        // IIC by-pass mode on
7059*53ee8cc1Swenshuai.xi //    else
7060*53ee8cc1Swenshuai.xi //        MDrv_SYS_DMD_VD_MBX_WriteReg(0x8010, 0x00);        // IIC by-pass mode off
7061*53ee8cc1Swenshuai.xi //}
7062*53ee8cc1Swenshuai.xi 
7063