1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi // Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi // No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi // modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi // supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi // Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi // Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi // obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi // such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi // MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi // confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi // third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi // kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi // without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi // intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi // and in conformity with any international standard. You agree to waive any
38*53ee8cc1Swenshuai.xi // claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi // incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi // In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi // consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi // revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi // You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi // even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi // request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi // parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi // services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi // MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi // ("Services").
52*53ee8cc1Swenshuai.xi // You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi // writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi // disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi // or otherwise:
58*53ee8cc1Swenshuai.xi // (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi // mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi // (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi // including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi // of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi // (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi // of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi // Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi // settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi // Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi // Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi // with the said Rules.
72*53ee8cc1Swenshuai.xi // The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi // be English.
74*53ee8cc1Swenshuai.xi // The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81*53ee8cc1Swenshuai.xi // All rights reserved.
82*53ee8cc1Swenshuai.xi //
83*53ee8cc1Swenshuai.xi // Unless otherwise stipulated in writing, any and all information contained
84*53ee8cc1Swenshuai.xi // herein regardless in any format shall remain the sole proprietary of
85*53ee8cc1Swenshuai.xi // MStar Semiconductor Inc. and be kept in strict confidence
86*53ee8cc1Swenshuai.xi // ("MStar Confidential Information") by the recipient.
87*53ee8cc1Swenshuai.xi // Any unauthorized act including without limitation unauthorized disclosure,
88*53ee8cc1Swenshuai.xi // copying, use, reproduction, sale, distribution, modification, disassembling,
89*53ee8cc1Swenshuai.xi // reverse engineering and compiling of the contents of MStar Confidential
90*53ee8cc1Swenshuai.xi // Information is unlawful and strictly prohibited. MStar hereby reserves the
91*53ee8cc1Swenshuai.xi // rights to any and all damages, losses, costs and expenses resulting therefrom.
92*53ee8cc1Swenshuai.xi //
93*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
94*53ee8cc1Swenshuai.xi
95*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
96*53ee8cc1Swenshuai.xi ///
97*53ee8cc1Swenshuai.xi /// file drvDMD_INTERN_DVBS.c
98*53ee8cc1Swenshuai.xi /// @brief DVBS Driver Interface
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
100*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
101*53ee8cc1Swenshuai.xi
102*53ee8cc1Swenshuai.xi
103*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
104*53ee8cc1Swenshuai.xi // Include Files
105*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
106*53ee8cc1Swenshuai.xi // Common Definition
107*53ee8cc1Swenshuai.xi #include "drvDMD_INTERN_DVBS.h"
108*53ee8cc1Swenshuai.xi #include "drvDMD_INTERN_DVBS_v2.h"
109*53ee8cc1Swenshuai.xi //#include <string.h>
110*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX_KERNEL
111*53ee8cc1Swenshuai.xi #include <linux/string.h>
112*53ee8cc1Swenshuai.xi #else
113*53ee8cc1Swenshuai.xi #include <string.h>
114*53ee8cc1Swenshuai.xi #include <stdio.h>
115*53ee8cc1Swenshuai.xi #include <math.h>
116*53ee8cc1Swenshuai.xi #endif
117*53ee8cc1Swenshuai.xi #include "MsCommon.h"
118*53ee8cc1Swenshuai.xi #include "MsVersion.h"
119*53ee8cc1Swenshuai.xi #include "MsOS.h"
120*53ee8cc1Swenshuai.xi // Internal Definition
121*53ee8cc1Swenshuai.xi //#include "regCHIP.h"
122*53ee8cc1Swenshuai.xi //#include "regAVD.h"
123*53ee8cc1Swenshuai.xi //#include "mapi_tuner.h"
124*53ee8cc1Swenshuai.xi #include "drvSYS.h"
125*53ee8cc1Swenshuai.xi #include "drvDMD_VD_MBX.h"
126*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_DVBS.h"
127*53ee8cc1Swenshuai.xi #include "halDMD_INTERN_common.h"
128*53ee8cc1Swenshuai.xi #include "../../include/drvSAR.h" // for Utopia2
129*53ee8cc1Swenshuai.xi #include "utopia.h"
130*53ee8cc1Swenshuai.xi #include "utopia_dapi.h"
131*53ee8cc1Swenshuai.xi #include "ULog.h"
132*53ee8cc1Swenshuai.xi #include "../../include/drvDMD_INTERN_DVBS_v2.h" // for Utopia2
133*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
134*53ee8cc1Swenshuai.xi // Driver Compiler Options
135*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
136*53ee8cc1Swenshuai.xi
137*53ee8cc1Swenshuai.xi
138*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
139*53ee8cc1Swenshuai.xi // Local Defines
140*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
141*53ee8cc1Swenshuai.xi #define DVBS2FEC_REG_BASE 0x3D00
142*53ee8cc1Swenshuai.xi //#define MS_DEBUG 1
143*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
144*53ee8cc1Swenshuai.xi // Local Structurs
145*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
146*53ee8cc1Swenshuai.xi
147*53ee8cc1Swenshuai.xi
148*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
149*53ee8cc1Swenshuai.xi // Global Variables
150*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
151*53ee8cc1Swenshuai.xi extern MS_S16 _s16CurrentCFO;
152*53ee8cc1Swenshuai.xi extern MS_U16 _u16ChannelInfoArray[2][1000];
153*53ee8cc1Swenshuai.xi extern MS_U16 _u16ChannelInfoIndex;
154*53ee8cc1Swenshuai.xi extern MS_U16 _u16LockedCenterFreq;
155*53ee8cc1Swenshuai.xi extern MS_U16 _u16LockedSymbolRate;
156*53ee8cc1Swenshuai.xi extern MS_U8 modulation_order;
157*53ee8cc1Swenshuai.xi extern DMD_DVBS_Info sDMD_DVBS_Info;
158*53ee8cc1Swenshuai.xi extern MS_U8 u8DemodLockFlag;
159*53ee8cc1Swenshuai.xi extern MS_U8 g_dvbs_lock;
160*53ee8cc1Swenshuai.xi extern MS_BOOL _bDemodType;
161*53ee8cc1Swenshuai.xi extern DMD_DVBS_DbgLv _u8DMD_DVBS_DbgLevel;
162*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
163*53ee8cc1Swenshuai.xi // Local Variables
164*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
165*53ee8cc1Swenshuai.xi /*
166*53ee8cc1Swenshuai.xi static MS_U16 _u16SignalLevel[185][2]=
167*53ee8cc1Swenshuai.xi {//AV2028 SR=22M, 2/3 CN=5.9
168*53ee8cc1Swenshuai.xi {32100, 920},{32200, 915},{32350, 910},{32390, 905},{32480, 900},{32550, 895},{32620, 890},{32680, 885},{32750, 880},{32830, 875},
169*53ee8cc1Swenshuai.xi {32930, 870},{33010, 865},{33100, 860},{33200, 855},{33310, 850},{33410, 845},{33520, 840},{33640, 835},{33770, 830},{33900, 825},
170*53ee8cc1Swenshuai.xi {34030, 820},{34150, 815},{34290, 810},{34390, 805},{34490, 800},{34580, 795},{34700, 790},{34800, 785},{34880, 780},{34940, 775},
171*53ee8cc1Swenshuai.xi {35030, 770},{35130, 765},{35180, 760},{35260, 755},{35310, 750},{35340, 745},{35380, 740},{35400, 735},{35450, 730},{35550, 725},
172*53ee8cc1Swenshuai.xi {35620, 720},{35700, 715},{35800, 710},{35890, 705},{36000, 700},{36120, 695},{36180, 690},{36280, 685},{36400, 680},{36570, 675},
173*53ee8cc1Swenshuai.xi {36730, 670},{36910, 665},{37060, 660},{37100, 655},{37260, 650},{37340, 645},{37410, 640},{37580, 635},{37670, 630},{37700, 625},
174*53ee8cc1Swenshuai.xi {37750, 620},{37800, 615},{37860, 610},{37980, 605},{38050, 600},{38170, 595},{38370, 590},{38540, 585},{38710, 580},{38870, 575},
175*53ee8cc1Swenshuai.xi {39020, 570},{39070, 565},{39100, 560},{39180, 555},{39280, 550},{39460, 545},{39510, 540},{39600, 535},{39620, 530},{39680, 525},
176*53ee8cc1Swenshuai.xi {39720, 520},{39830, 515},{39880, 510},{39930, 505},{39960, 500},{40000, 495},{40200, 490},{40360, 485},{40540, 480},{40730, 475},
177*53ee8cc1Swenshuai.xi {40880, 470},{41020, 465},{41150, 460},{41280, 455},{41410, 450},{41520, 445},{41620, 440},{41730, 435},{41840, 430},{41930, 425},
178*53ee8cc1Swenshuai.xi {42010, 420},{42100, 415},{42180, 410},{42260, 405},{42350, 400},{42440, 395},{42520, 390},{42580, 385},{42660, 380},{42730, 375},
179*53ee8cc1Swenshuai.xi {42800, 370},{42870, 365},{42940, 360},{43000, 355},{43060, 350},{43130, 345},{43180, 340},{43250, 335},{43310, 330},{43370, 325},
180*53ee8cc1Swenshuai.xi {43420, 320},{43460, 315},{43520, 310},{43570, 305},{43620, 300},{43660, 295},{43710, 290},{43750, 285},{43810, 280},{43860, 275},
181*53ee8cc1Swenshuai.xi {43910, 270},{43940, 265},{43990, 260},{44020, 255},{44060, 250},{44110, 245},{44140, 240},{44190, 235},{44230, 230},{44270, 225},
182*53ee8cc1Swenshuai.xi {44320, 220},{44370, 215},{44400, 210},{44450, 205},{44490, 200},{44530, 195},{44590, 190},{44630, 185},{44660, 180},{44720, 175},
183*53ee8cc1Swenshuai.xi {44750, 170},{44790, 165},{44830, 160},{44880, 155},{44910, 150},{44960, 145},{45000, 140},{45030, 135},{45070, 130},{45100, 125},
184*53ee8cc1Swenshuai.xi {45130, 120},{45160, 115},{45200, 110},{45240, 105},{45270, 100},{45300, 95},{45330, 90},{45360, 85},{45400, 80},{45430, 75},
185*53ee8cc1Swenshuai.xi {45460, 70},{45490, 65},{45530, 60},{45560, 55},{45590, 50},{45630, 45},{45670, 40},{45690, 35},{45740, 30},{45760, 25},
186*53ee8cc1Swenshuai.xi {45800, 20},{45830, 15},{45860, 10},{45880, 5},{45920, 0}
187*53ee8cc1Swenshuai.xi };
188*53ee8cc1Swenshuai.xi */
189*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
190*53ee8cc1Swenshuai.xi // Debug Functions
191*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
192*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
193*53ee8cc1Swenshuai.xi #define DMD_DBG(x) (x)
194*53ee8cc1Swenshuai.xi #else
195*53ee8cc1Swenshuai.xi #define DMD_DBG(x) //(x)
196*53ee8cc1Swenshuai.xi #endif
197*53ee8cc1Swenshuai.xi
198*53ee8cc1Swenshuai.xi static void* ppDVBSInstant = NULL;
199*53ee8cc1Swenshuai.xi static MS_U32 u32DVBSopen = 0;
200*53ee8cc1Swenshuai.xi static MS_U8 u8DVBSUtopiaOpen = 0; //for SetStillImagePara is earlier called than Init
201*53ee8cc1Swenshuai.xi
202*53ee8cc1Swenshuai.xi static DMD_DVBS_InitData AgcSsi_Para;
203*53ee8cc1Swenshuai.xi //static float intern_dvb_c_qam_ref[] = {3.0, 0.0, 0.0, 0.0, 0.0, 80.0}; //16q,32q,64q,128q,256q, and others
204*53ee8cc1Swenshuai.xi
205*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
206*53ee8cc1Swenshuai.xi // Local Functions
207*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
208*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX
209*53ee8cc1Swenshuai.xi #if 1
210*53ee8cc1Swenshuai.xi static float _LogApproxTableX[80] =
211*53ee8cc1Swenshuai.xi { 1.00, 1.30, 1.69, 2.20, 2.86, 3.71, 4.83, 6.27, 8.16, 10.60, 13.79,
212*53ee8cc1Swenshuai.xi 17.92, 23.30, 30.29, 39.37, 51.19, 66.54, 86.50, 112.46, 146.19,
213*53ee8cc1Swenshuai.xi 190.05, 247.06, 321.18, 417.54, 542.80, 705.64, 917.33, 1192.53,
214*53ee8cc1Swenshuai.xi 1550.29, 2015.38, 2620.00, 3405.99, 4427.79, 5756.13, 7482.97,
215*53ee8cc1Swenshuai.xi 9727.86, 12646.22, 16440.08, 21372.11, 27783.74, 36118.86,
216*53ee8cc1Swenshuai.xi 46954.52, 61040.88, 79353.15, 103159.09, 134106.82, 174338.86,
217*53ee8cc1Swenshuai.xi 226640.52, 294632.68, 383022.48, 497929.22, 647307.99, 841500.39, 1093950.50,
218*53ee8cc1Swenshuai.xi 1422135.65, 1848776.35, 2403409.25, 3124432.03, 4061761.64, 5280290.13,
219*53ee8cc1Swenshuai.xi 6864377.17, 8923690.32, 11600797.42, 15081036.65, 19605347.64, 25486951.94,
220*53ee8cc1Swenshuai.xi 33133037.52, 43072948.77, 55994833.40, 72793283.42, 94631268.45,
221*53ee8cc1Swenshuai.xi 123020648.99, 159926843.68, 207904896.79, 270276365.82, 351359275.57,
222*53ee8cc1Swenshuai.xi 456767058.24, 593797175.72, 771936328.43, 1003517226.96
223*53ee8cc1Swenshuai.xi };
224*53ee8cc1Swenshuai.xi
225*53ee8cc1Swenshuai.xi static float _LogApproxTableY[80] =
226*53ee8cc1Swenshuai.xi { 0.00, 0.11, 0.23, 0.34, 0.46, 0.57, 0.68, 0.80, 0.91, 1.03, 1.14, 1.25,
227*53ee8cc1Swenshuai.xi 1.37, 1.48, 1.60, 1.71, 1.82, 1.94, 2.05, 2.16, 2.28, 2.39, 2.51, 2.62,
228*53ee8cc1Swenshuai.xi 2.73, 2.85, 2.96, 3.08, 3.19, 3.30, 3.42, 3.53, 3.65, 3.76, 3.87, 3.99,
229*53ee8cc1Swenshuai.xi 4.10, 4.22, 4.33, 4.44, 4.56, 4.67, 4.79, 4.90, 5.01, 5.13, 5.24, 5.36,
230*53ee8cc1Swenshuai.xi 5.47, 5.58, 5.70, 5.81, 5.93, 6.04, 6.15, 6.27, 6.04, 6.15, 6.27, 6.38,
231*53ee8cc1Swenshuai.xi 6.49, 6.61, 6.72, 6.84, 6.95, 7.06, 7.18, 7.29, 7.41, 7.52, 7.63, 7.75,
232*53ee8cc1Swenshuai.xi 7.86, 7.98, 8.09, 8.20, 8.32, 8.43, 8.55, 8.66
233*53ee8cc1Swenshuai.xi };
234*53ee8cc1Swenshuai.xi
Log10Approx(float flt_x)235*53ee8cc1Swenshuai.xi static float Log10Approx(float flt_x)
236*53ee8cc1Swenshuai.xi {
237*53ee8cc1Swenshuai.xi MS_U8 indx = 0;
238*53ee8cc1Swenshuai.xi
239*53ee8cc1Swenshuai.xi do {
240*53ee8cc1Swenshuai.xi if (flt_x < _LogApproxTableX[indx])
241*53ee8cc1Swenshuai.xi break;
242*53ee8cc1Swenshuai.xi indx++;
243*53ee8cc1Swenshuai.xi }while (indx < 79); //stop at indx = 80
244*53ee8cc1Swenshuai.xi
245*53ee8cc1Swenshuai.xi return _LogApproxTableY[indx];
246*53ee8cc1Swenshuai.xi }
247*53ee8cc1Swenshuai.xi #else
Log10Approx(float flt_x)248*53ee8cc1Swenshuai.xi static float Log10Approx(float flt_x)
249*53ee8cc1Swenshuai.xi {
250*53ee8cc1Swenshuai.xi MS_U32 u32_temp = 1;
251*53ee8cc1Swenshuai.xi MS_U8 indx = 0;
252*53ee8cc1Swenshuai.xi
253*53ee8cc1Swenshuai.xi do {
254*53ee8cc1Swenshuai.xi u32_temp = u32_temp << 1;
255*53ee8cc1Swenshuai.xi if (flt_x < (float)u32_temp)
256*53ee8cc1Swenshuai.xi break;
257*53ee8cc1Swenshuai.xi }while (++indx < 32);
258*53ee8cc1Swenshuai.xi
259*53ee8cc1Swenshuai.xi // 10*log10(X) ~= 0.3*N, when X ~= 2^N
260*53ee8cc1Swenshuai.xi return (float)0.3 * indx;
261*53ee8cc1Swenshuai.xi }
262*53ee8cc1Swenshuai.xi #endif
263*53ee8cc1Swenshuai.xi #endif
264*53ee8cc1Swenshuai.xi
265*53ee8cc1Swenshuai.xi #ifdef UFO_SUPPORT_KERNEL_FLOATING
266*53ee8cc1Swenshuai.xi #define MAX_INT 0x7FFFFFFF
267*53ee8cc1Swenshuai.xi #define Pow2_62 0x4000000000000000
268*53ee8cc1Swenshuai.xi
ABS_32(MS_S32 input)269*53ee8cc1Swenshuai.xi MS_U32 ABS_32(MS_S32 input)
270*53ee8cc1Swenshuai.xi {
271*53ee8cc1Swenshuai.xi MS_U32 result;
272*53ee8cc1Swenshuai.xi
273*53ee8cc1Swenshuai.xi if(input < 0)
274*53ee8cc1Swenshuai.xi {
275*53ee8cc1Swenshuai.xi result = (-1)*input;
276*53ee8cc1Swenshuai.xi }
277*53ee8cc1Swenshuai.xi else
278*53ee8cc1Swenshuai.xi result = input;
279*53ee8cc1Swenshuai.xi
280*53ee8cc1Swenshuai.xi return result;
281*53ee8cc1Swenshuai.xi }
282*53ee8cc1Swenshuai.xi
ABS_64(MS_S64 input)283*53ee8cc1Swenshuai.xi MS_U64 ABS_64(MS_S64 input)
284*53ee8cc1Swenshuai.xi {
285*53ee8cc1Swenshuai.xi MS_U64 result;
286*53ee8cc1Swenshuai.xi
287*53ee8cc1Swenshuai.xi if(input < 0)
288*53ee8cc1Swenshuai.xi {
289*53ee8cc1Swenshuai.xi result = (-1)*input;
290*53ee8cc1Swenshuai.xi }
291*53ee8cc1Swenshuai.xi else
292*53ee8cc1Swenshuai.xi result = input;
293*53ee8cc1Swenshuai.xi
294*53ee8cc1Swenshuai.xi return result;
295*53ee8cc1Swenshuai.xi }
296*53ee8cc1Swenshuai.xi
Find_MSB(MS_S64 input)297*53ee8cc1Swenshuai.xi MS_U8 Find_MSB(MS_S64 input)
298*53ee8cc1Swenshuai.xi {
299*53ee8cc1Swenshuai.xi MS_S8 iter = -1;
300*53ee8cc1Swenshuai.xi MS_U64 data = ABS_64(input);
301*53ee8cc1Swenshuai.xi
302*53ee8cc1Swenshuai.xi while(0 != data)
303*53ee8cc1Swenshuai.xi {
304*53ee8cc1Swenshuai.xi ++iter;
305*53ee8cc1Swenshuai.xi data >>= 1;
306*53ee8cc1Swenshuai.xi }
307*53ee8cc1Swenshuai.xi
308*53ee8cc1Swenshuai.xi if(iter >= 0)
309*53ee8cc1Swenshuai.xi {
310*53ee8cc1Swenshuai.xi return iter;
311*53ee8cc1Swenshuai.xi }
312*53ee8cc1Swenshuai.xi
313*53ee8cc1Swenshuai.xi return 0;
314*53ee8cc1Swenshuai.xi }
315*53ee8cc1Swenshuai.xi
Normalize(MS_FLOAT_ST * input)316*53ee8cc1Swenshuai.xi void Normalize(MS_FLOAT_ST *input)
317*53ee8cc1Swenshuai.xi {
318*53ee8cc1Swenshuai.xi MS_U8 LSB, sign_flag;
319*53ee8cc1Swenshuai.xi
320*53ee8cc1Swenshuai.xi MS_S8 EXP;
321*53ee8cc1Swenshuai.xi MS_U32 data;
322*53ee8cc1Swenshuai.xi
323*53ee8cc1Swenshuai.xi if((*input).DATA == 0)
324*53ee8cc1Swenshuai.xi {
325*53ee8cc1Swenshuai.xi (*input).EXP = 0;
326*53ee8cc1Swenshuai.xi }
327*53ee8cc1Swenshuai.xi else
328*53ee8cc1Swenshuai.xi {
329*53ee8cc1Swenshuai.xi LSB = 0;
330*53ee8cc1Swenshuai.xi
331*53ee8cc1Swenshuai.xi if((*input).DATA < 0) // negative value
332*53ee8cc1Swenshuai.xi sign_flag = 1;
333*53ee8cc1Swenshuai.xi else
334*53ee8cc1Swenshuai.xi sign_flag = 0;
335*53ee8cc1Swenshuai.xi
336*53ee8cc1Swenshuai.xi data = ABS_32((*input).DATA);
337*53ee8cc1Swenshuai.xi EXP = (*input).EXP;
338*53ee8cc1Swenshuai.xi
339*53ee8cc1Swenshuai.xi if(EXP != 0)
340*53ee8cc1Swenshuai.xi {
341*53ee8cc1Swenshuai.xi while( (data & 0x01) == 0x00 )
342*53ee8cc1Swenshuai.xi {
343*53ee8cc1Swenshuai.xi ++LSB;
344*53ee8cc1Swenshuai.xi data >>= 1;
345*53ee8cc1Swenshuai.xi }
346*53ee8cc1Swenshuai.xi
347*53ee8cc1Swenshuai.xi EXP += LSB;
348*53ee8cc1Swenshuai.xi
349*53ee8cc1Swenshuai.xi (*input).DATA = data;
350*53ee8cc1Swenshuai.xi (*input).EXP = EXP;
351*53ee8cc1Swenshuai.xi
352*53ee8cc1Swenshuai.xi if(sign_flag == 1)
353*53ee8cc1Swenshuai.xi {
354*53ee8cc1Swenshuai.xi (*input).DATA *= (-1);
355*53ee8cc1Swenshuai.xi }
356*53ee8cc1Swenshuai.xi }
357*53ee8cc1Swenshuai.xi }
358*53ee8cc1Swenshuai.xi }
359*53ee8cc1Swenshuai.xi
MS_FLOAT_OP(MS_FLOAT_ST stRn,MS_FLOAT_ST stRd,OP_type eOpcode)360*53ee8cc1Swenshuai.xi MS_FLOAT_ST MS_FLOAT_OP(MS_FLOAT_ST stRn,MS_FLOAT_ST stRd, OP_type eOpcode)
361*53ee8cc1Swenshuai.xi {
362*53ee8cc1Swenshuai.xi MS_FLOAT_ST result;
363*53ee8cc1Swenshuai.xi
364*53ee8cc1Swenshuai.xi MS_S32 data1, data2;
365*53ee8cc1Swenshuai.xi MS_U32 udata1, udata2;
366*53ee8cc1Swenshuai.xi MS_S8 EXP1, EXP2;
367*53ee8cc1Swenshuai.xi MS_S8 iter, MSB, MSB_temp;
368*53ee8cc1Swenshuai.xi
369*53ee8cc1Swenshuai.xi MS_S64 temp;
370*53ee8cc1Swenshuai.xi
371*53ee8cc1Swenshuai.xi Normalize(&stRn);
372*53ee8cc1Swenshuai.xi Normalize(&stRd);
373*53ee8cc1Swenshuai.xi
374*53ee8cc1Swenshuai.xi data1 = stRn.DATA;
375*53ee8cc1Swenshuai.xi data2 = stRd.DATA;
376*53ee8cc1Swenshuai.xi
377*53ee8cc1Swenshuai.xi udata1 = ABS_32(data1);
378*53ee8cc1Swenshuai.xi udata2 = ABS_32(data2);
379*53ee8cc1Swenshuai.xi
380*53ee8cc1Swenshuai.xi EXP1 = stRn.EXP;
381*53ee8cc1Swenshuai.xi EXP2 = stRd.EXP;
382*53ee8cc1Swenshuai.xi
383*53ee8cc1Swenshuai.xi switch(eOpcode)
384*53ee8cc1Swenshuai.xi {
385*53ee8cc1Swenshuai.xi case add:
386*53ee8cc1Swenshuai.xi {
387*53ee8cc1Swenshuai.xi if(EXP1 == EXP2)
388*53ee8cc1Swenshuai.xi {
389*53ee8cc1Swenshuai.xi temp = data1;
390*53ee8cc1Swenshuai.xi temp += data2;
391*53ee8cc1Swenshuai.xi
392*53ee8cc1Swenshuai.xi if(temp > MAX_INT || temp < (-1)*MAX_INT)
393*53ee8cc1Swenshuai.xi {
394*53ee8cc1Swenshuai.xi temp >>= 1;
395*53ee8cc1Swenshuai.xi result.DATA = temp;
396*53ee8cc1Swenshuai.xi result.EXP = (EXP1 + 1);
397*53ee8cc1Swenshuai.xi }
398*53ee8cc1Swenshuai.xi else
399*53ee8cc1Swenshuai.xi {
400*53ee8cc1Swenshuai.xi result.DATA = (data1 + data2);
401*53ee8cc1Swenshuai.xi result.EXP = EXP1;
402*53ee8cc1Swenshuai.xi }
403*53ee8cc1Swenshuai.xi }
404*53ee8cc1Swenshuai.xi else if(EXP1 > EXP2)
405*53ee8cc1Swenshuai.xi {
406*53ee8cc1Swenshuai.xi temp = data1;
407*53ee8cc1Swenshuai.xi
408*53ee8cc1Swenshuai.xi MSB = Find_MSB(temp);
409*53ee8cc1Swenshuai.xi
410*53ee8cc1Swenshuai.xi if( (MSB - EXP2) < 63)
411*53ee8cc1Swenshuai.xi {
412*53ee8cc1Swenshuai.xi for(iter = EXP1; iter > EXP2;--iter)
413*53ee8cc1Swenshuai.xi {
414*53ee8cc1Swenshuai.xi temp = (temp << 1);
415*53ee8cc1Swenshuai.xi }
416*53ee8cc1Swenshuai.xi
417*53ee8cc1Swenshuai.xi temp += data2;
418*53ee8cc1Swenshuai.xi
419*53ee8cc1Swenshuai.xi if(temp > MAX_INT || temp < (-1)*MAX_INT)
420*53ee8cc1Swenshuai.xi {
421*53ee8cc1Swenshuai.xi MSB = Find_MSB(temp);
422*53ee8cc1Swenshuai.xi
423*53ee8cc1Swenshuai.xi temp >>= (MSB-30);
424*53ee8cc1Swenshuai.xi result.DATA = temp;
425*53ee8cc1Swenshuai.xi result.EXP = (EXP2 + (MSB-30));
426*53ee8cc1Swenshuai.xi }
427*53ee8cc1Swenshuai.xi else
428*53ee8cc1Swenshuai.xi {
429*53ee8cc1Swenshuai.xi result.DATA = temp;
430*53ee8cc1Swenshuai.xi result.EXP = EXP2;
431*53ee8cc1Swenshuai.xi }
432*53ee8cc1Swenshuai.xi }
433*53ee8cc1Swenshuai.xi else
434*53ee8cc1Swenshuai.xi {
435*53ee8cc1Swenshuai.xi result.DATA = data1;
436*53ee8cc1Swenshuai.xi result.EXP = data1;
437*53ee8cc1Swenshuai.xi }
438*53ee8cc1Swenshuai.xi }
439*53ee8cc1Swenshuai.xi else
440*53ee8cc1Swenshuai.xi {
441*53ee8cc1Swenshuai.xi return MS_FLOAT_OP(stRd, stRn, add);
442*53ee8cc1Swenshuai.xi }
443*53ee8cc1Swenshuai.xi }
444*53ee8cc1Swenshuai.xi break;
445*53ee8cc1Swenshuai.xi
446*53ee8cc1Swenshuai.xi case minus:
447*53ee8cc1Swenshuai.xi {
448*53ee8cc1Swenshuai.xi stRd.DATA *= (-1);
449*53ee8cc1Swenshuai.xi return MS_FLOAT_OP(stRn, stRd, add);
450*53ee8cc1Swenshuai.xi }
451*53ee8cc1Swenshuai.xi break;
452*53ee8cc1Swenshuai.xi
453*53ee8cc1Swenshuai.xi case multiply:
454*53ee8cc1Swenshuai.xi {
455*53ee8cc1Swenshuai.xi if(data1 == 0 || data2 == 0)
456*53ee8cc1Swenshuai.xi {
457*53ee8cc1Swenshuai.xi result.DATA = 0;
458*53ee8cc1Swenshuai.xi result.EXP = 0;
459*53ee8cc1Swenshuai.xi }
460*53ee8cc1Swenshuai.xi else
461*53ee8cc1Swenshuai.xi {
462*53ee8cc1Swenshuai.xi temp = data1;
463*53ee8cc1Swenshuai.xi temp *= data2;
464*53ee8cc1Swenshuai.xi
465*53ee8cc1Swenshuai.xi if( (temp <= MAX_INT) && (temp >= (-1*MAX_INT) ) )
466*53ee8cc1Swenshuai.xi {
467*53ee8cc1Swenshuai.xi result.DATA = data1 * data2;
468*53ee8cc1Swenshuai.xi result.EXP = EXP1 + EXP2;
469*53ee8cc1Swenshuai.xi }
470*53ee8cc1Swenshuai.xi else // overflow
471*53ee8cc1Swenshuai.xi {
472*53ee8cc1Swenshuai.xi MSB = Find_MSB(temp);
473*53ee8cc1Swenshuai.xi
474*53ee8cc1Swenshuai.xi temp = temp >> (MSB-30);
475*53ee8cc1Swenshuai.xi
476*53ee8cc1Swenshuai.xi result.DATA = (MS_S32)temp;
477*53ee8cc1Swenshuai.xi result.EXP = EXP1 + EXP2 + (MSB-30);
478*53ee8cc1Swenshuai.xi }
479*53ee8cc1Swenshuai.xi }
480*53ee8cc1Swenshuai.xi }
481*53ee8cc1Swenshuai.xi break;
482*53ee8cc1Swenshuai.xi
483*53ee8cc1Swenshuai.xi case divide:
484*53ee8cc1Swenshuai.xi {
485*53ee8cc1Swenshuai.xi if(data1 != 0 && data2 != 0)
486*53ee8cc1Swenshuai.xi {
487*53ee8cc1Swenshuai.xi if(udata1 < udata2)
488*53ee8cc1Swenshuai.xi {
489*53ee8cc1Swenshuai.xi temp = Pow2_62;
490*53ee8cc1Swenshuai.xi temp = temp / data2 * data1;
491*53ee8cc1Swenshuai.xi
492*53ee8cc1Swenshuai.xi MSB = Find_MSB(temp);
493*53ee8cc1Swenshuai.xi
494*53ee8cc1Swenshuai.xi if(MSB > 30)
495*53ee8cc1Swenshuai.xi {
496*53ee8cc1Swenshuai.xi temp >>= (MSB-30);
497*53ee8cc1Swenshuai.xi result.DATA = temp;
498*53ee8cc1Swenshuai.xi result.EXP = EXP1 - EXP2 + (MSB-30) - 62;
499*53ee8cc1Swenshuai.xi }
500*53ee8cc1Swenshuai.xi else
501*53ee8cc1Swenshuai.xi {
502*53ee8cc1Swenshuai.xi result.DATA = temp;
503*53ee8cc1Swenshuai.xi result.EXP = EXP1 - EXP2 - 62;
504*53ee8cc1Swenshuai.xi }
505*53ee8cc1Swenshuai.xi }
506*53ee8cc1Swenshuai.xi else if(udata1 == udata2)
507*53ee8cc1Swenshuai.xi {
508*53ee8cc1Swenshuai.xi result.DATA = data1 / data2;
509*53ee8cc1Swenshuai.xi result.EXP = EXP1 - EXP2;
510*53ee8cc1Swenshuai.xi }
511*53ee8cc1Swenshuai.xi else // udata1 > udata2
512*53ee8cc1Swenshuai.xi {
513*53ee8cc1Swenshuai.xi MSB = Find_MSB(data1);
514*53ee8cc1Swenshuai.xi MSB_temp = Find_MSB(data2);
515*53ee8cc1Swenshuai.xi
516*53ee8cc1Swenshuai.xi EXP2 -= ((MSB-MSB_temp) + 1);
517*53ee8cc1Swenshuai.xi
518*53ee8cc1Swenshuai.xi temp = Pow2_62;
519*53ee8cc1Swenshuai.xi temp = temp / ( ((MS_S64)data2) << ((MSB-MSB_temp) + 1)) * data1;
520*53ee8cc1Swenshuai.xi
521*53ee8cc1Swenshuai.xi MSB = Find_MSB(temp);
522*53ee8cc1Swenshuai.xi
523*53ee8cc1Swenshuai.xi if(MSB > 30)
524*53ee8cc1Swenshuai.xi {
525*53ee8cc1Swenshuai.xi temp >>= (MSB-30);
526*53ee8cc1Swenshuai.xi result.DATA = temp;
527*53ee8cc1Swenshuai.xi result.EXP = EXP1 - EXP2 + (MSB-30) - 62;
528*53ee8cc1Swenshuai.xi }
529*53ee8cc1Swenshuai.xi else
530*53ee8cc1Swenshuai.xi {
531*53ee8cc1Swenshuai.xi result.DATA = temp;
532*53ee8cc1Swenshuai.xi result.EXP = EXP1 - EXP2 - 62;
533*53ee8cc1Swenshuai.xi }
534*53ee8cc1Swenshuai.xi }
535*53ee8cc1Swenshuai.xi }
536*53ee8cc1Swenshuai.xi else
537*53ee8cc1Swenshuai.xi {
538*53ee8cc1Swenshuai.xi result.DATA = 0;
539*53ee8cc1Swenshuai.xi result.EXP = 0;
540*53ee8cc1Swenshuai.xi }
541*53ee8cc1Swenshuai.xi }
542*53ee8cc1Swenshuai.xi break;
543*53ee8cc1Swenshuai.xi
544*53ee8cc1Swenshuai.xi default:
545*53ee8cc1Swenshuai.xi break;
546*53ee8cc1Swenshuai.xi }
547*53ee8cc1Swenshuai.xi
548*53ee8cc1Swenshuai.xi Normalize(&result);
549*53ee8cc1Swenshuai.xi
550*53ee8cc1Swenshuai.xi return result;
551*53ee8cc1Swenshuai.xi }
552*53ee8cc1Swenshuai.xi #endif
553*53ee8cc1Swenshuai.xi
554*53ee8cc1Swenshuai.xi #ifdef UFO_DEMOD_DVBS_SUPPORT_DMD_INT
MDrv_DMD_DVBS_Reg_INT_CB(fpIntCallBack fpCBReg)555*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_Reg_INT_CB(fpIntCallBack fpCBReg)
556*53ee8cc1Swenshuai.xi {
557*53ee8cc1Swenshuai.xi DVBS_INT_MODE Drv_DVBS_INT_MODE;
558*53ee8cc1Swenshuai.xi Drv_DVBS_INT_MODE.fpCB = fpCBReg;
559*53ee8cc1Swenshuai.xi Drv_DVBS_INT_MODE.ret = FALSE;
560*53ee8cc1Swenshuai.xi
561*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
562*53ee8cc1Swenshuai.xi {
563*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_INT_MODE,&Drv_DVBS_INT_MODE);
564*53ee8cc1Swenshuai.xi }
565*53ee8cc1Swenshuai.xi
566*53ee8cc1Swenshuai.xi return Drv_DVBS_INT_MODE.ret;
567*53ee8cc1Swenshuai.xi }
568*53ee8cc1Swenshuai.xi #endif
569*53ee8cc1Swenshuai.xi
570*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
571*53ee8cc1Swenshuai.xi // Global Functions
572*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
MDrv_DMD_DVBS_Init(DMD_DVBS_InitData * pDMD_DVBS_InitData,MS_U32 u32InitDataLen)573*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_Init(DMD_DVBS_InitData *pDMD_DVBS_InitData, MS_U32 u32InitDataLen)
574*53ee8cc1Swenshuai.xi {
575*53ee8cc1Swenshuai.xi void* pAttribte = NULL;
576*53ee8cc1Swenshuai.xi
577*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
578*53ee8cc1Swenshuai.xi ULOGD("DEMOD","******check driver layer DVBS init!!*******\n");
579*53ee8cc1Swenshuai.xi #endif
580*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_Init\n"));
581*53ee8cc1Swenshuai.xi
582*53ee8cc1Swenshuai.xi DVBS_Init_PARAM Drv_DVBS_Init_PARAM;
583*53ee8cc1Swenshuai.xi DMD_DVBS_InitData_Transform Init_Para_Temp;
584*53ee8cc1Swenshuai.xi
585*53ee8cc1Swenshuai.xi Init_Para_Temp.u8SarChannel=pDMD_DVBS_InitData->u8SarChannel;
586*53ee8cc1Swenshuai.xi Init_Para_Temp.u8DMD_DVBS_DSPRegInitExt=pDMD_DVBS_InitData->u8DMD_DVBS_DSPRegInitExt;
587*53ee8cc1Swenshuai.xi Init_Para_Temp.u8DMD_DVBS_DSPRegInitSize=pDMD_DVBS_InitData->u8DMD_DVBS_DSPRegInitSize;
588*53ee8cc1Swenshuai.xi Init_Para_Temp.u8DMD_DVBS_InitExt=pDMD_DVBS_InitData->u8DMD_DVBS_InitExt;
589*53ee8cc1Swenshuai.xi /*
590*53ee8cc1Swenshuai.xi Init_Para_Temp.pTuner_RfagcSsi=pDMD_DVBS_InitData->pTuner_RfagcSsi;
591*53ee8cc1Swenshuai.xi Init_Para_Temp.u16Tuner_RfagcSsi_Size=pDMD_DVBS_InitData->u16Tuner_RfagcSsi_Size;
592*53ee8cc1Swenshuai.xi Init_Para_Temp.pTuner_IfagcSsi_LoRef=pDMD_DVBS_InitData->pTuner_IfagcSsi_LoRef;
593*53ee8cc1Swenshuai.xi Init_Para_Temp.u16Tuner_IfagcSsi_LoRef_Size=pDMD_DVBS_InitData->u16Tuner_IfagcSsi_LoRef_Size;
594*53ee8cc1Swenshuai.xi Init_Para_Temp.pTuner_IfagcSsi_HiRef=pDMD_DVBS_InitData->pTuner_IfagcSsi_HiRef;
595*53ee8cc1Swenshuai.xi Init_Para_Temp.u16Tuner_IfagcSsi_HiRef_Size=pDMD_DVBS_InitData->u16Tuner_IfagcSsi_HiRef_Size;
596*53ee8cc1Swenshuai.xi Init_Para_Temp.pTuner_IfagcErr_LoRef=pDMD_DVBS_InitData->pTuner_IfagcErr_LoRef;
597*53ee8cc1Swenshuai.xi Init_Para_Temp.u16Tuner_IfagcErr_LoRef_Size=pDMD_DVBS_InitData->u16Tuner_IfagcErr_LoRef_Size;
598*53ee8cc1Swenshuai.xi Init_Para_Temp.pTuner_IfagcSsi_HiRef=pDMD_DVBS_InitData->pTuner_IfagcSsi_HiRef;
599*53ee8cc1Swenshuai.xi Init_Para_Temp.u16Tuner_IfagcErr_HiRef_Size=pDMD_DVBS_InitData->u16Tuner_IfagcErr_HiRef_Size;
600*53ee8cc1Swenshuai.xi Init_Para_Temp.pSqiCnNordigP1=pDMD_DVBS_InitData->pSqiCnNordigP1;
601*53ee8cc1Swenshuai.xi Init_Para_Temp.u16SqiCnNordigP1_Size=pDMD_DVBS_InitData->u16SqiCnNordigP1_Size;
602*53ee8cc1Swenshuai.xi */
603*53ee8cc1Swenshuai.xi
604*53ee8cc1Swenshuai.xi AgcSsi_Para.pTuner_RfagcSsi=pDMD_DVBS_InitData->pTuner_RfagcSsi;
605*53ee8cc1Swenshuai.xi AgcSsi_Para.u16Tuner_RfagcSsi_Size=pDMD_DVBS_InitData->u16Tuner_RfagcSsi_Size;
606*53ee8cc1Swenshuai.xi AgcSsi_Para.pTuner_IfagcSsi_LoRef=pDMD_DVBS_InitData->pTuner_IfagcSsi_LoRef;
607*53ee8cc1Swenshuai.xi AgcSsi_Para.u16Tuner_IfagcSsi_LoRef_Size=pDMD_DVBS_InitData->u16Tuner_IfagcSsi_LoRef_Size;
608*53ee8cc1Swenshuai.xi AgcSsi_Para.pTuner_IfagcSsi_HiRef=pDMD_DVBS_InitData->pTuner_IfagcSsi_HiRef;
609*53ee8cc1Swenshuai.xi AgcSsi_Para.u16Tuner_IfagcSsi_HiRef_Size=pDMD_DVBS_InitData->u16Tuner_IfagcSsi_HiRef_Size;
610*53ee8cc1Swenshuai.xi AgcSsi_Para.pTuner_IfagcErr_LoRef=pDMD_DVBS_InitData->pTuner_IfagcErr_LoRef;
611*53ee8cc1Swenshuai.xi AgcSsi_Para.u16Tuner_IfagcErr_LoRef_Size=pDMD_DVBS_InitData->u16Tuner_IfagcErr_LoRef_Size;
612*53ee8cc1Swenshuai.xi AgcSsi_Para.pTuner_IfagcSsi_HiRef=pDMD_DVBS_InitData->pTuner_IfagcSsi_HiRef;
613*53ee8cc1Swenshuai.xi AgcSsi_Para.u16Tuner_IfagcErr_HiRef_Size=pDMD_DVBS_InitData->u16Tuner_IfagcErr_HiRef_Size;
614*53ee8cc1Swenshuai.xi
615*53ee8cc1Swenshuai.xi Drv_DVBS_Init_PARAM.u32InitDataLen=sizeof(Init_Para_Temp);
616*53ee8cc1Swenshuai.xi Drv_DVBS_Init_PARAM.pDMD_DVBS_InitData=&Init_Para_Temp;
617*53ee8cc1Swenshuai.xi Drv_DVBS_Init_PARAM.ret=false;
618*53ee8cc1Swenshuai.xi
619*53ee8cc1Swenshuai.xi if(u8DVBSUtopiaOpen == 0) // First time open
620*53ee8cc1Swenshuai.xi {
621*53ee8cc1Swenshuai.xi if(UtopiaOpen(MODULE_DVBS/*|KERNEL_MODE*/ , &ppDVBSInstant, 0, pAttribte) == UTOPIA_STATUS_SUCCESS) //kernel space
622*53ee8cc1Swenshuai.xi //if(UtopiaOpen(MODULE_DVBS , &ppDVBSInstant, 0, pAttribte) == UTOPIA_STATUS_SUCCESS) //user space
623*53ee8cc1Swenshuai.xi {
624*53ee8cc1Swenshuai.xi u32DVBSopen = 1;
625*53ee8cc1Swenshuai.xi ULOGD("DEMOD","Leo check DVBS utopia open sucessful!!\n");
626*53ee8cc1Swenshuai.xi //return_val=true;
627*53ee8cc1Swenshuai.xi // ULOGD("DEMOD","\r\n ======== DVBS Open Successful %x =========", (WORD)u32DVBSopen);
628*53ee8cc1Swenshuai.xi }
629*53ee8cc1Swenshuai.xi else
630*53ee8cc1Swenshuai.xi {
631*53ee8cc1Swenshuai.xi // ULOGD("DEMOD","\r\n ======== DVBS Open Fail %x =========", (WORD)u32DVBSopen);
632*53ee8cc1Swenshuai.xi //return_val=false;
633*53ee8cc1Swenshuai.xi ULOGD("DEMOD","DVBS utopia open fail!!\n");
634*53ee8cc1Swenshuai.xi return false;
635*53ee8cc1Swenshuai.xi }
636*53ee8cc1Swenshuai.xi
637*53ee8cc1Swenshuai.xi u8DVBSUtopiaOpen = 1;
638*53ee8cc1Swenshuai.xi }
639*53ee8cc1Swenshuai.xi
640*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
641*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_Init,&Drv_DVBS_Init_PARAM);
642*53ee8cc1Swenshuai.xi else
643*53ee8cc1Swenshuai.xi return false;
644*53ee8cc1Swenshuai.xi
645*53ee8cc1Swenshuai.xi return Drv_DVBS_Init_PARAM.ret;
646*53ee8cc1Swenshuai.xi }
647*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_Exit(void)648*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_Exit(void)
649*53ee8cc1Swenshuai.xi {
650*53ee8cc1Swenshuai.xi DVBS_EXIT_PARAM_PARAM Drv_DVBS_EXIT_PARAM_PARAM;
651*53ee8cc1Swenshuai.xi Drv_DVBS_EXIT_PARAM_PARAM.ret=false;
652*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_Exit\n"));
653*53ee8cc1Swenshuai.xi
654*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
655*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_Exit,&Drv_DVBS_EXIT_PARAM_PARAM);
656*53ee8cc1Swenshuai.xi else
657*53ee8cc1Swenshuai.xi return false;
658*53ee8cc1Swenshuai.xi
659*53ee8cc1Swenshuai.xi return Drv_DVBS_EXIT_PARAM_PARAM.ret;
660*53ee8cc1Swenshuai.xi }
661*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_SetDbgLevel(DMD_DVBS_DbgLv u8DbgLevel)662*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_SetDbgLevel(DMD_DVBS_DbgLv u8DbgLevel)
663*53ee8cc1Swenshuai.xi {
664*53ee8cc1Swenshuai.xi DVBS_SetDbgLevel_PARAM Drv_DVBS_SetDbgLevel_PARAM;
665*53ee8cc1Swenshuai.xi Drv_DVBS_SetDbgLevel_PARAM.u8DbgLevel=u8DbgLevel;
666*53ee8cc1Swenshuai.xi Drv_DVBS_SetDbgLevel_PARAM.ret=false;
667*53ee8cc1Swenshuai.xi
668*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_SetDbgLevel\n"));
669*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
670*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_SetDbgLevel,&Drv_DVBS_SetDbgLevel_PARAM);
671*53ee8cc1Swenshuai.xi else
672*53ee8cc1Swenshuai.xi return false;
673*53ee8cc1Swenshuai.xi
674*53ee8cc1Swenshuai.xi return Drv_DVBS_SetDbgLevel_PARAM.ret;
675*53ee8cc1Swenshuai.xi }
676*53ee8cc1Swenshuai.xi
677*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_GetInfo(void)678*53ee8cc1Swenshuai.xi const DMD_DVBS_Info* MDrv_DMD_DVBS_GetInfo(void)
679*53ee8cc1Swenshuai.xi {
680*53ee8cc1Swenshuai.xi DVBS_GetInfo_PARAM Drv_DVBS_GetInfo_PARAM;
681*53ee8cc1Swenshuai.xi Drv_DVBS_GetInfo_PARAM.ret_info=NULL;
682*53ee8cc1Swenshuai.xi
683*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
684*53ee8cc1Swenshuai.xi {
685*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetInfo,&Drv_DVBS_GetInfo_PARAM);
686*53ee8cc1Swenshuai.xi }
687*53ee8cc1Swenshuai.xi else
688*53ee8cc1Swenshuai.xi {
689*53ee8cc1Swenshuai.xi return false;
690*53ee8cc1Swenshuai.xi }
691*53ee8cc1Swenshuai.xi
692*53ee8cc1Swenshuai.xi
693*53ee8cc1Swenshuai.xi return Drv_DVBS_GetInfo_PARAM.ret_info;
694*53ee8cc1Swenshuai.xi
695*53ee8cc1Swenshuai.xi }
696*53ee8cc1Swenshuai.xi #endif
697*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_GetLibVer(const MSIF_Version ** ppVersion)698*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetLibVer(const MSIF_Version **ppVersion)
699*53ee8cc1Swenshuai.xi {
700*53ee8cc1Swenshuai.xi DVBS_GetLibVer_PARAM Drv_DVBS_GetLibVer_PARAM;
701*53ee8cc1Swenshuai.xi Drv_DVBS_GetLibVer_PARAM.ppVersion=ppVersion;
702*53ee8cc1Swenshuai.xi Drv_DVBS_GetLibVer_PARAM.ret= false;
703*53ee8cc1Swenshuai.xi
704*53ee8cc1Swenshuai.xi
705*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
706*53ee8cc1Swenshuai.xi {
707*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetLibVer,&Drv_DVBS_GetLibVer_PARAM);
708*53ee8cc1Swenshuai.xi Drv_DVBS_GetLibVer_PARAM.ret= true;
709*53ee8cc1Swenshuai.xi }
710*53ee8cc1Swenshuai.xi else
711*53ee8cc1Swenshuai.xi {
712*53ee8cc1Swenshuai.xi return false;
713*53ee8cc1Swenshuai.xi }
714*53ee8cc1Swenshuai.xi
715*53ee8cc1Swenshuai.xi return Drv_DVBS_GetLibVer_PARAM.ret;
716*53ee8cc1Swenshuai.xi }
717*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_GetFWVer(MS_U16 * ver)718*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetFWVer(MS_U16 *ver)
719*53ee8cc1Swenshuai.xi {
720*53ee8cc1Swenshuai.xi DVBS_GetFWVer_PARAM Drv_DVBS_GetFWVer_PARAM;
721*53ee8cc1Swenshuai.xi Drv_DVBS_GetFWVer_PARAM.ver=ver;
722*53ee8cc1Swenshuai.xi Drv_DVBS_GetFWVer_PARAM.ret=false;
723*53ee8cc1Swenshuai.xi
724*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
725*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetFWVer,&Drv_DVBS_GetFWVer_PARAM);
726*53ee8cc1Swenshuai.xi else
727*53ee8cc1Swenshuai.xi {
728*53ee8cc1Swenshuai.xi return false;
729*53ee8cc1Swenshuai.xi }
730*53ee8cc1Swenshuai.xi
731*53ee8cc1Swenshuai.xi return Drv_DVBS_GetFWVer_PARAM.ret;
732*53ee8cc1Swenshuai.xi
733*53ee8cc1Swenshuai.xi }
734*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_GetDSPReg(MS_U16 u16Addr,MS_U8 * pu8Data)735*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetDSPReg(MS_U16 u16Addr, MS_U8 *pu8Data)
736*53ee8cc1Swenshuai.xi {
737*53ee8cc1Swenshuai.xi #if defined(CHIP_K1)
738*53ee8cc1Swenshuai.xi DVBS_GetDSPReg_PARAM Drv_DVBS_GetDSPReg_PARAM;
739*53ee8cc1Swenshuai.xi Drv_DVBS_GetDSPReg_PARAM.u16Addr=u16Addr;
740*53ee8cc1Swenshuai.xi Drv_DVBS_GetDSPReg_PARAM.pu8Data=pu8Data;
741*53ee8cc1Swenshuai.xi
742*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
743*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetDSPReg,&Drv_DVBS_GetDSPReg_PARAM);
744*53ee8cc1Swenshuai.xi else
745*53ee8cc1Swenshuai.xi {
746*53ee8cc1Swenshuai.xi return false;
747*53ee8cc1Swenshuai.xi }
748*53ee8cc1Swenshuai.xi
749*53ee8cc1Swenshuai.xi return Drv_DVBS_GetDSPReg_PARAM.ret;
750*53ee8cc1Swenshuai.xi #else
751*53ee8cc1Swenshuai.xi ULOGD("DEMOD","Not Support function: MDrv_DMD_DVBS_GetDSPReg\n");
752*53ee8cc1Swenshuai.xi return FALSE;
753*53ee8cc1Swenshuai.xi #endif
754*53ee8cc1Swenshuai.xi }
755*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_SetDSPReg(MS_U16 u16Addr,MS_U8 pu8Data)756*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_SetDSPReg(MS_U16 u16Addr, MS_U8 pu8Data)
757*53ee8cc1Swenshuai.xi {
758*53ee8cc1Swenshuai.xi #if defined(CHIP_K1)
759*53ee8cc1Swenshuai.xi DVBS_SetDSPReg_PARAM Drv_DVBS_SetDSPReg_PARAM;
760*53ee8cc1Swenshuai.xi
761*53ee8cc1Swenshuai.xi Drv_DVBS_SetDSPReg_PARAM.pu8Data=pu8Data;
762*53ee8cc1Swenshuai.xi Drv_DVBS_SetDSPReg_PARAM.u16Addr=u16Addr;
763*53ee8cc1Swenshuai.xi
764*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
765*53ee8cc1Swenshuai.xi {
766*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_SetDSPReg,&Drv_DVBS_SetDSPReg_PARAM);
767*53ee8cc1Swenshuai.xi }
768*53ee8cc1Swenshuai.xi else
769*53ee8cc1Swenshuai.xi {
770*53ee8cc1Swenshuai.xi return false;
771*53ee8cc1Swenshuai.xi }
772*53ee8cc1Swenshuai.xi
773*53ee8cc1Swenshuai.xi return Drv_DVBS_SetDSPReg_PARAM.ret;
774*53ee8cc1Swenshuai.xi #else
775*53ee8cc1Swenshuai.xi ULOGD("DEMOD","Not Support function: MDrv_DMD_DVBS_SetDSPReg\n");
776*53ee8cc1Swenshuai.xi return FALSE;
777*53ee8cc1Swenshuai.xi #endif
778*53ee8cc1Swenshuai.xi }
779*53ee8cc1Swenshuai.xi
780*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_GetReg(MS_U16 u16Addr,MS_U8 * pu8Data)781*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetReg(MS_U16 u16Addr, MS_U8 *pu8Data)
782*53ee8cc1Swenshuai.xi {
783*53ee8cc1Swenshuai.xi DVBS_GetReg_PARAM Drv_DVBS_GetReg_PARAM;
784*53ee8cc1Swenshuai.xi Drv_DVBS_GetReg_PARAM.u16Addr=u16Addr;
785*53ee8cc1Swenshuai.xi Drv_DVBS_GetReg_PARAM.pu8Data=pu8Data;
786*53ee8cc1Swenshuai.xi Drv_DVBS_GetReg_PARAM.ret=false;
787*53ee8cc1Swenshuai.xi
788*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
789*53ee8cc1Swenshuai.xi {
790*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetReg,&Drv_DVBS_GetReg_PARAM);
791*53ee8cc1Swenshuai.xi }
792*53ee8cc1Swenshuai.xi else
793*53ee8cc1Swenshuai.xi {
794*53ee8cc1Swenshuai.xi return false;
795*53ee8cc1Swenshuai.xi }
796*53ee8cc1Swenshuai.xi
797*53ee8cc1Swenshuai.xi return Drv_DVBS_GetReg_PARAM.ret;
798*53ee8cc1Swenshuai.xi
799*53ee8cc1Swenshuai.xi }
800*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_SetReg(MS_U16 u16Addr,MS_U8 u8Data)801*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_SetReg(MS_U16 u16Addr, MS_U8 u8Data)
802*53ee8cc1Swenshuai.xi {
803*53ee8cc1Swenshuai.xi DVBS_SetReg_PARAM Drv_DVBS_SetReg_PARAM;
804*53ee8cc1Swenshuai.xi Drv_DVBS_SetReg_PARAM.u16Addr=u16Addr;
805*53ee8cc1Swenshuai.xi Drv_DVBS_SetReg_PARAM.u8Data=u8Data;
806*53ee8cc1Swenshuai.xi Drv_DVBS_SetReg_PARAM.ret=false;
807*53ee8cc1Swenshuai.xi
808*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
809*53ee8cc1Swenshuai.xi {
810*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_SetReg,&Drv_DVBS_SetReg_PARAM);
811*53ee8cc1Swenshuai.xi }
812*53ee8cc1Swenshuai.xi else
813*53ee8cc1Swenshuai.xi {
814*53ee8cc1Swenshuai.xi return false;
815*53ee8cc1Swenshuai.xi }
816*53ee8cc1Swenshuai.xi
817*53ee8cc1Swenshuai.xi return Drv_DVBS_SetReg_PARAM.ret;
818*53ee8cc1Swenshuai.xi }
819*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_SetSerialControl(MS_BOOL bEnable)820*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_SetSerialControl(MS_BOOL bEnable)
821*53ee8cc1Swenshuai.xi {
822*53ee8cc1Swenshuai.xi DVBS_SetSerialControl_PARAM Drv_DVBS_SetSerialControl_PARAM;
823*53ee8cc1Swenshuai.xi Drv_DVBS_SetSerialControl_PARAM.bEnable=bEnable;
824*53ee8cc1Swenshuai.xi Drv_DVBS_SetSerialControl_PARAM.ret=false;
825*53ee8cc1Swenshuai.xi
826*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
827*53ee8cc1Swenshuai.xi {
828*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_SetSerialControl,&Drv_DVBS_SetSerialControl_PARAM);
829*53ee8cc1Swenshuai.xi }
830*53ee8cc1Swenshuai.xi else
831*53ee8cc1Swenshuai.xi {
832*53ee8cc1Swenshuai.xi return false;
833*53ee8cc1Swenshuai.xi }
834*53ee8cc1Swenshuai.xi
835*53ee8cc1Swenshuai.xi
836*53ee8cc1Swenshuai.xi return Drv_DVBS_SetSerialControl_PARAM.ret;
837*53ee8cc1Swenshuai.xi }
838*53ee8cc1Swenshuai.xi
839*53ee8cc1Swenshuai.xi #ifdef UFO_DEMOD_BLINDSCAN_NEW_FLOW
840*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_BlindScan_Config(MS_U32 u32SymbolRate,DMD_DVBS_MODULATION_TYPE eQamMode,MS_U32 u32IFFreq,MS_BOOL bSpecInv,MS_BOOL bSerialTS)841*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_BlindScan_Config(MS_U32 u32SymbolRate, DMD_DVBS_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS)
842*53ee8cc1Swenshuai.xi {
843*53ee8cc1Swenshuai.xi return MDrv_DMD_DVBS_BlindScan_Config_symbol_rate_list(u32SymbolRate, eQamMode, u32IFFreq, bSpecInv, bSerialTS, NULL, 0);
844*53ee8cc1Swenshuai.xi }
845*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_BlindScan_Config_symbol_rate_list(MS_U32 u32SymbolRate,DMD_DVBS_MODULATION_TYPE eQamMode,MS_U32 u32IFFreq,MS_BOOL bSpecInv,MS_BOOL bSerialTS,MS_U16 * pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)846*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_BlindScan_Config_symbol_rate_list(MS_U32 u32SymbolRate, DMD_DVBS_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS, MS_U16 *pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)
847*53ee8cc1Swenshuai.xi {
848*53ee8cc1Swenshuai.xi MS_U32 u32CurrentSR;
849*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
850*53ee8cc1Swenshuai.xi ULOGD("DEMOD","check driver layer DVBS BlindScan_Config_symbol_rate_list!!\n");
851*53ee8cc1Swenshuai.xi #endif
852*53ee8cc1Swenshuai.xi
853*53ee8cc1Swenshuai.xi DVBS_BlindScan_Config_Symbol_rate_list_PARAM Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM;
854*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM.u32SymbolRate=u32SymbolRate;
855*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM.eQamMode=eQamMode;
856*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM.u32IFFreq=u32IFFreq;
857*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM.bSpecInv=bSpecInv;
858*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM.bSerialTS=bSerialTS;
859*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM.pu16_symbol_rate_list=pu16_symbol_rate_list;
860*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM.u8_symbol_rate_list_num=u8_symbol_rate_list_num;
861*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM.ret=false;
862*53ee8cc1Swenshuai.xi
863*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
864*53ee8cc1Swenshuai.xi {
865*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_BlindScan_Config_symbol_rate_list,&Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM);
866*53ee8cc1Swenshuai.xi g_dvbs_lock = 0;
867*53ee8cc1Swenshuai.xi u8DemodLockFlag=0;
868*53ee8cc1Swenshuai.xi u32CurrentSR = u32SymbolRate/1000; //KHz
869*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM.ret &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L, u32CurrentSR&0xff);
870*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM.ret &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H, (u32CurrentSR>>8)&0xff);
871*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM.ret &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_DMDTOP_DBG_5, (u32CurrentSR>>16)&0xff);
872*53ee8cc1Swenshuai.xi ULOGD("DEMOD","drv_DMD_DVBS_BlindScan_Config u32SymbolRate = %d \n", u32CurrentSR);
873*53ee8cc1Swenshuai.xi }
874*53ee8cc1Swenshuai.xi else
875*53ee8cc1Swenshuai.xi {
876*53ee8cc1Swenshuai.xi return false;
877*53ee8cc1Swenshuai.xi }
878*53ee8cc1Swenshuai.xi
879*53ee8cc1Swenshuai.xi return Drv_DVBS_BlindScan_Config_Symbol_rate_list_PARAM.ret;
880*53ee8cc1Swenshuai.xi }
881*53ee8cc1Swenshuai.xi #endif
882*53ee8cc1Swenshuai.xi #endif
883*53ee8cc1Swenshuai.xi
884*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_SetConfig(MS_U32 u32SymbolRate,DMD_DVBS_MODULATION_TYPE eQamMode,MS_U32 u32IFFreq,MS_BOOL bSpecInv,MS_BOOL bSerialTS)885*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_SetConfig(MS_U32 u32SymbolRate, DMD_DVBS_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS)
886*53ee8cc1Swenshuai.xi {
887*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
888*53ee8cc1Swenshuai.xi ULOGD("DEMOD","check driver layer DVBS SetConfig!!\n");
889*53ee8cc1Swenshuai.xi #endif
890*53ee8cc1Swenshuai.xi
891*53ee8cc1Swenshuai.xi return MDrv_DMD_DVBS_SetConfig_symbol_rate_list(u32SymbolRate, eQamMode, u32IFFreq, bSpecInv, bSerialTS, NULL, 0);
892*53ee8cc1Swenshuai.xi }
893*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_SetConfig_symbol_rate_list(MS_U32 u32SymbolRate,DMD_DVBS_MODULATION_TYPE eQamMode,MS_U32 u32IFFreq,MS_BOOL bSpecInv,MS_BOOL bSerialTS,MS_U16 * pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)894*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_SetConfig_symbol_rate_list(MS_U32 u32SymbolRate, DMD_DVBS_MODULATION_TYPE eQamMode, MS_U32 u32IFFreq, MS_BOOL bSpecInv, MS_BOOL bSerialTS, MS_U16 *pu16_symbol_rate_list,MS_U8 u8_symbol_rate_list_num)
895*53ee8cc1Swenshuai.xi {
896*53ee8cc1Swenshuai.xi MS_U32 u32CurrentSR;
897*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
898*53ee8cc1Swenshuai.xi ULOGD("DEMOD","check driver layer DVBS SetConfig_symbol_rate_list!!\n");
899*53ee8cc1Swenshuai.xi #endif
900*53ee8cc1Swenshuai.xi
901*53ee8cc1Swenshuai.xi DVBS_SetConfig_Symbol_rate_list_PARAM Drv_DVBS_SetConfig_Symbol_rate_list_PARAM;
902*53ee8cc1Swenshuai.xi Drv_DVBS_SetConfig_Symbol_rate_list_PARAM.u16SymbolRate=u32SymbolRate;
903*53ee8cc1Swenshuai.xi Drv_DVBS_SetConfig_Symbol_rate_list_PARAM.eQamMode=eQamMode;
904*53ee8cc1Swenshuai.xi Drv_DVBS_SetConfig_Symbol_rate_list_PARAM.u32IFFreq=u32IFFreq;
905*53ee8cc1Swenshuai.xi Drv_DVBS_SetConfig_Symbol_rate_list_PARAM.bSpecInv=bSpecInv;
906*53ee8cc1Swenshuai.xi Drv_DVBS_SetConfig_Symbol_rate_list_PARAM.bSerialTS=bSerialTS;
907*53ee8cc1Swenshuai.xi Drv_DVBS_SetConfig_Symbol_rate_list_PARAM.pu16_symbol_rate_list=pu16_symbol_rate_list;
908*53ee8cc1Swenshuai.xi Drv_DVBS_SetConfig_Symbol_rate_list_PARAM.u8_symbol_rate_list_num=u8_symbol_rate_list_num;
909*53ee8cc1Swenshuai.xi Drv_DVBS_SetConfig_Symbol_rate_list_PARAM.ret=false;
910*53ee8cc1Swenshuai.xi
911*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
912*53ee8cc1Swenshuai.xi {
913*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_SetConfig_symbol_rate_list,&Drv_DVBS_SetConfig_Symbol_rate_list_PARAM);
914*53ee8cc1Swenshuai.xi g_dvbs_lock = 0;
915*53ee8cc1Swenshuai.xi u8DemodLockFlag=0;
916*53ee8cc1Swenshuai.xi u32CurrentSR = u32SymbolRate/1000; //KHz
917*53ee8cc1Swenshuai.xi Drv_DVBS_SetConfig_Symbol_rate_list_PARAM.ret &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_L, u32CurrentSR&0xff);
918*53ee8cc1Swenshuai.xi Drv_DVBS_SetConfig_Symbol_rate_list_PARAM.ret &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MANUAL_TUNE_SYMBOLRATE_H, (u32CurrentSR>>8)&0xff);
919*53ee8cc1Swenshuai.xi Drv_DVBS_SetConfig_Symbol_rate_list_PARAM.ret &= MDrv_SYS_DMD_VD_MBX_WriteDSPReg(E_DMD_S2_MB_DMDTOP_DBG_5, (u32CurrentSR>>16)&0xff);
920*53ee8cc1Swenshuai.xi ULOGD("DEMOD","drv_DMD_DVBS_SetConfig u32SymbolRate = %d \n", (int)u32CurrentSR);
921*53ee8cc1Swenshuai.xi }
922*53ee8cc1Swenshuai.xi else
923*53ee8cc1Swenshuai.xi {
924*53ee8cc1Swenshuai.xi return false;
925*53ee8cc1Swenshuai.xi }
926*53ee8cc1Swenshuai.xi
927*53ee8cc1Swenshuai.xi return Drv_DVBS_SetConfig_Symbol_rate_list_PARAM.ret;
928*53ee8cc1Swenshuai.xi }
929*53ee8cc1Swenshuai.xi #endif
MDrv_DMD_DVBS_SetActive(MS_BOOL bEnable)930*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_SetActive(MS_BOOL bEnable)
931*53ee8cc1Swenshuai.xi {
932*53ee8cc1Swenshuai.xi DVBS_SetActive_PARAM Drv_DVBS_SetActive_PARAM;
933*53ee8cc1Swenshuai.xi Drv_DVBS_SetActive_PARAM.bEnable=bEnable;
934*53ee8cc1Swenshuai.xi Drv_DVBS_SetActive_PARAM.ret=false;
935*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_SetActive\n"));
936*53ee8cc1Swenshuai.xi
937*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
938*53ee8cc1Swenshuai.xi ULOGD("DEMOD","check driver layer DVBS SetActive!!\n");
939*53ee8cc1Swenshuai.xi #endif
940*53ee8cc1Swenshuai.xi
941*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
942*53ee8cc1Swenshuai.xi {
943*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_SetActive,&Drv_DVBS_SetActive_PARAM);
944*53ee8cc1Swenshuai.xi }
945*53ee8cc1Swenshuai.xi else
946*53ee8cc1Swenshuai.xi {
947*53ee8cc1Swenshuai.xi return false;
948*53ee8cc1Swenshuai.xi }
949*53ee8cc1Swenshuai.xi
950*53ee8cc1Swenshuai.xi return Drv_DVBS_SetActive_PARAM.ret;
951*53ee8cc1Swenshuai.xi }
952*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_GetLock(DMD_DVBS_GETLOCK_TYPE eType,DMD_DVBS_LOCK_STATUS * eLockStatus)953*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetLock(DMD_DVBS_GETLOCK_TYPE eType, DMD_DVBS_LOCK_STATUS *eLockStatus)
954*53ee8cc1Swenshuai.xi {
955*53ee8cc1Swenshuai.xi return MDrv_DMD_DVBS_GetLockWithRFPower(eType, eLockStatus, 200.0f, -200.0f);
956*53ee8cc1Swenshuai.xi }
957*53ee8cc1Swenshuai.xi #endif
958*53ee8cc1Swenshuai.xi
959*53ee8cc1Swenshuai.xi #ifdef UFO_DEMOD_GetParam_NEW_FLOW
MDrv_DMD_DVBS_GetParam(HAL_DEMOD_MS_SAT_CARRIER_PARAM * pParam)960*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetParam(HAL_DEMOD_MS_SAT_CARRIER_PARAM *pParam)
961*53ee8cc1Swenshuai.xi {
962*53ee8cc1Swenshuai.xi DVBS_GET_INFO Drv_DVBS_GET_INFO;
963*53ee8cc1Swenshuai.xi
964*53ee8cc1Swenshuai.xi Drv_DVBS_GET_INFO.ret = FALSE;
965*53ee8cc1Swenshuai.xi
966*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
967*53ee8cc1Swenshuai.xi {
968*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetParam, &Drv_DVBS_GET_INFO);
969*53ee8cc1Swenshuai.xi }
970*53ee8cc1Swenshuai.xi
971*53ee8cc1Swenshuai.xi pParam->eCodeRate = Drv_DVBS_GET_INFO.eCodeRate;
972*53ee8cc1Swenshuai.xi pParam->eRollOff = Drv_DVBS_GET_INFO.eRollOff;
973*53ee8cc1Swenshuai.xi pParam->eConstellation = Drv_DVBS_GET_INFO.eConstellation;
974*53ee8cc1Swenshuai.xi pParam->eDemodType = Drv_DVBS_GET_INFO.eDemodType;
975*53ee8cc1Swenshuai.xi pParam->eFreqoff = Drv_DVBS_GET_INFO.eFreqoff;
976*53ee8cc1Swenshuai.xi pParam->eIQ_Mode = Drv_DVBS_GET_INFO.eIQ_Mode;
977*53ee8cc1Swenshuai.xi
978*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
979*53ee8cc1Swenshuai.xi ULOGD("DEMOD","Code rate :%d\n",pParam->eCodeRate);
980*53ee8cc1Swenshuai.xi ULOGD("DEMOD","Roll-off Factor :%d\n",pParam->eRollOff);
981*53ee8cc1Swenshuai.xi ULOGD("DEMOD","Modulation mode :%d\n",pParam->eConstellation);
982*53ee8cc1Swenshuai.xi ULOGD("DEMOD","Demod type :%d\n",pParam->eDemodType);
983*53ee8cc1Swenshuai.xi ULOGD("DEMOD","CFO :%f\n",pParam->eFreqoff);
984*53ee8cc1Swenshuai.xi #endif
985*53ee8cc1Swenshuai.xi
986*53ee8cc1Swenshuai.xi return Drv_DVBS_GET_INFO.ret;
987*53ee8cc1Swenshuai.xi }
988*53ee8cc1Swenshuai.xi #endif
989*53ee8cc1Swenshuai.xi
990*53ee8cc1Swenshuai.xi #ifdef UFO_DEMOD_GET_AGC_INFO
MDrv_DMD_DVBS_GetAGCInfo(MS_U8 u8dbg_mode,MS_U16 * pu16Data)991*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetAGCInfo(MS_U8 u8dbg_mode, MS_U16 *pu16Data)
992*53ee8cc1Swenshuai.xi {
993*53ee8cc1Swenshuai.xi DVBS_GET_AGC_INFO Drv_DVBS_GET_AGC_INFO;
994*53ee8cc1Swenshuai.xi
995*53ee8cc1Swenshuai.xi Drv_DVBS_GET_AGC_INFO.u8dbg_mode = u8dbg_mode;
996*53ee8cc1Swenshuai.xi Drv_DVBS_GET_AGC_INFO.pu16Data = pu16Data;
997*53ee8cc1Swenshuai.xi Drv_DVBS_GET_AGC_INFO.ret = false;
998*53ee8cc1Swenshuai.xi
999*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
1000*53ee8cc1Swenshuai.xi {
1001*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetAGCInfo, &Drv_DVBS_GET_AGC_INFO);
1002*53ee8cc1Swenshuai.xi }
1003*53ee8cc1Swenshuai.xi
1004*53ee8cc1Swenshuai.xi return Drv_DVBS_GET_AGC_INFO.ret;
1005*53ee8cc1Swenshuai.xi }
1006*53ee8cc1Swenshuai.xi #endif
1007*53ee8cc1Swenshuai.xi
1008*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_GetLockWithRFPower(DMD_DVBS_GETLOCK_TYPE eType,DMD_DVBS_LOCK_STATUS * eLockStatus,float fCurrRFPowerDbm,float fNoChannelRFPowerDbm)1009*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetLockWithRFPower(DMD_DVBS_GETLOCK_TYPE eType, DMD_DVBS_LOCK_STATUS *eLockStatus, float fCurrRFPowerDbm, float fNoChannelRFPowerDbm)
1010*53ee8cc1Swenshuai.xi {
1011*53ee8cc1Swenshuai.xi MS_BOOL status = true;
1012*53ee8cc1Swenshuai.xi
1013*53ee8cc1Swenshuai.xi DMD_IFAGC_SSI *ifagc_ssi;
1014*53ee8cc1Swenshuai.xi DMD_IFAGC_ERR *ifagc_err;
1015*53ee8cc1Swenshuai.xi float ch_power_rf=0.0f;
1016*53ee8cc1Swenshuai.xi float ch_power_db=0.0f;
1017*53ee8cc1Swenshuai.xi float ch_power_if=0.0f, ch_power_ifa = 0.0f, ch_power_ifb =0.0f;
1018*53ee8cc1Swenshuai.xi MS_U16 if_agc_val =0, if_agc_vala =0, if_agc_valb =0, if_agc_val_lsb =0, i;
1019*53ee8cc1Swenshuai.xi float ch_power_takeover=0.0f;
1020*53ee8cc1Swenshuai.xi MS_U8 ssi_tbl_len = 0, err_tbl_len = 0;
1021*53ee8cc1Swenshuai.xi
1022*53ee8cc1Swenshuai.xi MS_U8 ifagc_reg;
1023*53ee8cc1Swenshuai.xi MS_U8 ifagc_reg_lsb;
1024*53ee8cc1Swenshuai.xi MS_U16 ifagc_err_reg;
1025*53ee8cc1Swenshuai.xi MS_U32 u32SymbolRate=0;
1026*53ee8cc1Swenshuai.xi //float fSymbolRate;
1027*53ee8cc1Swenshuai.xi //MS_U8 ISSY_EN = 0;
1028*53ee8cc1Swenshuai.xi MS_U8 code_rate_idx = 0;
1029*53ee8cc1Swenshuai.xi MS_U8 pilot_flag = 0;
1030*53ee8cc1Swenshuai.xi MS_U8 fec_type_idx = 0;
1031*53ee8cc1Swenshuai.xi MS_U16 k_bch_array[2][42] =
1032*53ee8cc1Swenshuai.xi {
1033*53ee8cc1Swenshuai.xi {
1034*53ee8cc1Swenshuai.xi 16008, 21408, 25728, 32208, 38688, 43040, 48408, 51648, 53840, 57472,
1035*53ee8cc1Swenshuai.xi 58192, 14208, 18528, 28968, 32208, 34368, 35448, 35808, 37248, 37248,
1036*53ee8cc1Swenshuai.xi 38688, 40128, 41208, 41568, 43008, 44448, 44808, 45888, 46608, 47328,
1037*53ee8cc1Swenshuai.xi 47328, 48408, 50208, 50208, 55248, 0, 0, 0, 0, 0,
1038*53ee8cc1Swenshuai.xi 0, 0,
1039*53ee8cc1Swenshuai.xi },
1040*53ee8cc1Swenshuai.xi {
1041*53ee8cc1Swenshuai.xi 3072, 5232, 6312, 7032, 9552, 10632, 11712, 12432, 13152, 14232,
1042*53ee8cc1Swenshuai.xi 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1043*53ee8cc1Swenshuai.xi 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1044*53ee8cc1Swenshuai.xi 0, 0, 0, 0, 0, 3792, 4152, 4872, 7392, 8472,
1045*53ee8cc1Swenshuai.xi 9192, 11352
1046*53ee8cc1Swenshuai.xi }
1047*53ee8cc1Swenshuai.xi };
1048*53ee8cc1Swenshuai.xi MS_U16 n_ldpc_array[2] = {64800, 16200};
1049*53ee8cc1Swenshuai.xi
1050*53ee8cc1Swenshuai.xi MS_FLOAT pilot_term = 0;
1051*53ee8cc1Swenshuai.xi MS_FLOAT k_bch;
1052*53ee8cc1Swenshuai.xi MS_FLOAT n_ldpc;
1053*53ee8cc1Swenshuai.xi MS_FLOAT ts_div_num_offset = 1.5;
1054*53ee8cc1Swenshuai.xi MS_FLOAT ts_div_num_margin_ratio = 1.03;
1055*53ee8cc1Swenshuai.xi MS_FLOAT ftmp;
1056*53ee8cc1Swenshuai.xi //MS_U32 u32Time_start,u32Time_end;
1057*53ee8cc1Swenshuai.xi MS_U32 u32temp=0;
1058*53ee8cc1Swenshuai.xi //MS_FLOAT pkt_interval;
1059*53ee8cc1Swenshuai.xi MS_U8 system_type_reg=0;
1060*53ee8cc1Swenshuai.xi MS_U8 code_rate_reg=0;
1061*53ee8cc1Swenshuai.xi MS_FLOAT fTSDivNum;
1062*53ee8cc1Swenshuai.xi MS_U8 u8Data;
1063*53ee8cc1Swenshuai.xi
1064*53ee8cc1Swenshuai.xi DVBS_GetLockWithRFPower Drv_DVBS_GetLockWithRFPower;
1065*53ee8cc1Swenshuai.xi
1066*53ee8cc1Swenshuai.xi Drv_DVBS_GetLockWithRFPower.eType=eType;
1067*53ee8cc1Swenshuai.xi Drv_DVBS_GetLockWithRFPower.eLockStatus=eLockStatus;
1068*53ee8cc1Swenshuai.xi //Drv_DVBS_GetLockWithRFPower.u32CurrRFPowerDbm=(MS_U32)(fCurrRFPowerDbm*10);
1069*53ee8cc1Swenshuai.xi //Drv_DVBS_GetLockWithRFPower.u32NoChannelRFPowerDbm=(MS_U32)(fNoChannelRFPowerDbm*10);
1070*53ee8cc1Swenshuai.xi Drv_DVBS_GetLockWithRFPower.ret=false;
1071*53ee8cc1Swenshuai.xi
1072*53ee8cc1Swenshuai.xi DVBS_GetIFAGC_PARAM Drv_DVBS_GetIFAGC_PARAM;
1073*53ee8cc1Swenshuai.xi Drv_DVBS_GetIFAGC_PARAM.ifagc_reg=&ifagc_reg;
1074*53ee8cc1Swenshuai.xi Drv_DVBS_GetIFAGC_PARAM.ifagc_reg_lsb=&ifagc_reg_lsb;
1075*53ee8cc1Swenshuai.xi Drv_DVBS_GetIFAGC_PARAM.ifagc_err_reg=&ifagc_err_reg;
1076*53ee8cc1Swenshuai.xi Drv_DVBS_GetIFAGC_PARAM.ret=false;
1077*53ee8cc1Swenshuai.xi
1078*53ee8cc1Swenshuai.xi DVBS_GetTsDivNum_PARAM Drv_DVBS_GetTsDivNum_PARAM;
1079*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.u32SymbolRate=&u32SymbolRate;
1080*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.system_type_reg=&system_type_reg;
1081*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.code_rate_idx=&code_rate_idx;
1082*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.fec_type_idx=&fec_type_idx;
1083*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.pilot_flag=&pilot_flag;
1084*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.u32temp=&u32temp;
1085*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.code_rate_reg=&code_rate_reg;
1086*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.bRet=false;
1087*53ee8cc1Swenshuai.xi
1088*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
1089*53ee8cc1Swenshuai.xi {
1090*53ee8cc1Swenshuai.xi if((AgcSsi_Para.pTuner_IfagcSsi_HiRef != NULL) && (AgcSsi_Para.pTuner_IfagcSsi_LoRef != NULL))
1091*53ee8cc1Swenshuai.xi {
1092*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetIFAGC,&Drv_DVBS_GetIFAGC_PARAM);
1093*53ee8cc1Swenshuai.xi status &= Drv_DVBS_GetIFAGC_PARAM.ret;
1094*53ee8cc1Swenshuai.xi
1095*53ee8cc1Swenshuai.xi ch_power_rf = fCurrRFPowerDbm;
1096*53ee8cc1Swenshuai.xi if_agc_val = ifagc_reg;
1097*53ee8cc1Swenshuai.xi if_agc_val_lsb = ifagc_reg_lsb;
1098*53ee8cc1Swenshuai.xi
1099*53ee8cc1Swenshuai.xi ifagc_ssi = AgcSsi_Para.pTuner_IfagcSsi_LoRef;
1100*53ee8cc1Swenshuai.xi ssi_tbl_len = AgcSsi_Para.u16Tuner_IfagcSsi_LoRef_Size;
1101*53ee8cc1Swenshuai.xi ifagc_err = AgcSsi_Para.pTuner_IfagcErr_LoRef;
1102*53ee8cc1Swenshuai.xi err_tbl_len = AgcSsi_Para.u16Tuner_IfagcErr_LoRef_Size;
1103*53ee8cc1Swenshuai.xi
1104*53ee8cc1Swenshuai.xi ch_power_if=ifagc_ssi[0].power_db;
1105*53ee8cc1Swenshuai.xi if (if_agc_val >=ifagc_ssi[0].agc_val)
1106*53ee8cc1Swenshuai.xi {
1107*53ee8cc1Swenshuai.xi for(i = 1; i < ssi_tbl_len; i++)
1108*53ee8cc1Swenshuai.xi {
1109*53ee8cc1Swenshuai.xi if (if_agc_val < ifagc_ssi[i].agc_val)
1110*53ee8cc1Swenshuai.xi {
1111*53ee8cc1Swenshuai.xi if_agc_valb = ifagc_ssi[i].agc_val;
1112*53ee8cc1Swenshuai.xi ch_power_ifb = ifagc_ssi[i].power_db;
1113*53ee8cc1Swenshuai.xi
1114*53ee8cc1Swenshuai.xi i--;
1115*53ee8cc1Swenshuai.xi if_agc_vala = ifagc_ssi[i].agc_val;
1116*53ee8cc1Swenshuai.xi ch_power_ifa=ifagc_ssi[i].power_db;
1117*53ee8cc1Swenshuai.xi while ((i>1) && (if_agc_vala==ifagc_ssi[i-1].agc_val))
1118*53ee8cc1Swenshuai.xi {
1119*53ee8cc1Swenshuai.xi ch_power_ifa=ifagc_ssi[i-1].power_db;
1120*53ee8cc1Swenshuai.xi i--;
1121*53ee8cc1Swenshuai.xi }
1122*53ee8cc1Swenshuai.xi ch_power_if = ch_power_ifa+(ch_power_ifb-ch_power_ifa)*(float)((if_agc_val-if_agc_vala)*256+if_agc_val_lsb)/((if_agc_valb-if_agc_vala)*256);
1123*53ee8cc1Swenshuai.xi break;
1124*53ee8cc1Swenshuai.xi }
1125*53ee8cc1Swenshuai.xi }
1126*53ee8cc1Swenshuai.xi }
1127*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1128*53ee8cc1Swenshuai.xi ULOGD("DEMOD","if prev %f %x\n", ch_power_ifa, if_agc_vala);
1129*53ee8cc1Swenshuai.xi ULOGD("DEMOD","if next %f %x\n", ch_power_ifb, if_agc_valb);
1130*53ee8cc1Swenshuai.xi #endif
1131*53ee8cc1Swenshuai.xi
1132*53ee8cc1Swenshuai.xi
1133*53ee8cc1Swenshuai.xi for(i = 0; i < ssi_tbl_len; i++)
1134*53ee8cc1Swenshuai.xi {
1135*53ee8cc1Swenshuai.xi if (ifagc_ssi[i].agc_val <= ifagc_ssi[i+1].agc_val)
1136*53ee8cc1Swenshuai.xi {
1137*53ee8cc1Swenshuai.xi ch_power_takeover = ifagc_ssi[i+1].power_db;
1138*53ee8cc1Swenshuai.xi break;
1139*53ee8cc1Swenshuai.xi }
1140*53ee8cc1Swenshuai.xi }
1141*53ee8cc1Swenshuai.xi
1142*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1143*53ee8cc1Swenshuai.xi //ULOGD("DEMOD","ch_power_rf = %f\n", ch_power_rf);
1144*53ee8cc1Swenshuai.xi ULOGD("DEMOD","ch_power_if = %f\n", ch_power_if);
1145*53ee8cc1Swenshuai.xi ULOGD("DEMOD","ch_power_takeover = %f\n", ch_power_takeover);
1146*53ee8cc1Swenshuai.xi #endif
1147*53ee8cc1Swenshuai.xi
1148*53ee8cc1Swenshuai.xi // ch_power_db = (ch_power_rf > ch_power_if)? ch_power_rf : ch_power_if;
1149*53ee8cc1Swenshuai.xi
1150*53ee8cc1Swenshuai.xi if(ch_power_rf > (ch_power_takeover + 0.5))
1151*53ee8cc1Swenshuai.xi {
1152*53ee8cc1Swenshuai.xi ch_power_db = ch_power_rf;
1153*53ee8cc1Swenshuai.xi }
1154*53ee8cc1Swenshuai.xi else if(ch_power_if < (ch_power_takeover - 0.5))
1155*53ee8cc1Swenshuai.xi {
1156*53ee8cc1Swenshuai.xi ch_power_db = ch_power_if;
1157*53ee8cc1Swenshuai.xi }
1158*53ee8cc1Swenshuai.xi else
1159*53ee8cc1Swenshuai.xi {
1160*53ee8cc1Swenshuai.xi ch_power_db = (ch_power_if + ch_power_rf)/2;
1161*53ee8cc1Swenshuai.xi }
1162*53ee8cc1Swenshuai.xi
1163*53ee8cc1Swenshuai.xi // ch_power_db = (ch_power_rf > ch_power_if)? ch_power_if : ch_power_rf;
1164*53ee8cc1Swenshuai.xi
1165*53ee8cc1Swenshuai.xi if(if_agc_val == 0xff)
1166*53ee8cc1Swenshuai.xi {
1167*53ee8cc1Swenshuai.xi for(i = 0; i < err_tbl_len; i++)
1168*53ee8cc1Swenshuai.xi {
1169*53ee8cc1Swenshuai.xi if ( ifagc_err_reg <= ifagc_err[i].agc_err ) // signed char comparison
1170*53ee8cc1Swenshuai.xi {
1171*53ee8cc1Swenshuai.xi ch_power_db += ifagc_err[i].attn_db;
1172*53ee8cc1Swenshuai.xi break;
1173*53ee8cc1Swenshuai.xi }
1174*53ee8cc1Swenshuai.xi }
1175*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1176*53ee8cc1Swenshuai.xi ULOGD("DEMOD","if_agc_err = 0x%x\n", ifagc_err_reg);
1177*53ee8cc1Swenshuai.xi #endif
1178*53ee8cc1Swenshuai.xi }
1179*53ee8cc1Swenshuai.xi }
1180*53ee8cc1Swenshuai.xi else
1181*53ee8cc1Swenshuai.xi {
1182*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1183*53ee8cc1Swenshuai.xi if (fCurrRFPowerDbm>=100.0) // unreasonable input value, get RF level from RFAGG
1184*53ee8cc1Swenshuai.xi {
1185*53ee8cc1Swenshuai.xi ULOGD("DEMOD","Error!! please add AGC table\n");
1186*53ee8cc1Swenshuai.xi }
1187*53ee8cc1Swenshuai.xi #endif
1188*53ee8cc1Swenshuai.xi ch_power_db = fCurrRFPowerDbm;
1189*53ee8cc1Swenshuai.xi }
1190*53ee8cc1Swenshuai.xi
1191*53ee8cc1Swenshuai.xi Drv_DVBS_GetLockWithRFPower.u32CurrRFPowerDbm=(MS_U32)(ch_power_db);
1192*53ee8cc1Swenshuai.xi Drv_DVBS_GetLockWithRFPower.u32NoChannelRFPowerDbm=(MS_U32)(fNoChannelRFPowerDbm);
1193*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetLockWithRFPower,&Drv_DVBS_GetLockWithRFPower);
1194*53ee8cc1Swenshuai.xi status &= Drv_DVBS_GetLockWithRFPower.ret;
1195*53ee8cc1Swenshuai.xi if(u8DemodLockFlag==1)
1196*53ee8cc1Swenshuai.xi {
1197*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetTsDivNum, &Drv_DVBS_GetTsDivNum_PARAM);
1198*53ee8cc1Swenshuai.xi status &= Drv_DVBS_GetTsDivNum_PARAM.bRet;
1199*53ee8cc1Swenshuai.xi
1200*53ee8cc1Swenshuai.xi //fec_type_idx = *Drv_DVBS_GetTsDivNum_PARAM.fec_type_idx;
1201*53ee8cc1Swenshuai.xi //code_rate_idx = *Drv_DVBS_GetTsDivNum_PARAM.code_rate_idx;
1202*53ee8cc1Swenshuai.xi //pilot_flag = *Drv_DVBS_GetTsDivNum_PARAM.pilot_flag;
1203*53ee8cc1Swenshuai.xi
1204*53ee8cc1Swenshuai.xi if(!system_type_reg)//DVBS2
1205*53ee8cc1Swenshuai.xi {
1206*53ee8cc1Swenshuai.xi k_bch = k_bch_array[fec_type_idx][code_rate_idx];
1207*53ee8cc1Swenshuai.xi n_ldpc = n_ldpc_array[fec_type_idx];
1208*53ee8cc1Swenshuai.xi pilot_term = ((float) n_ldpc / modulation_order / 1440 * 36) * pilot_flag;
1209*53ee8cc1Swenshuai.xi
1210*53ee8cc1Swenshuai.xi //data rate
1211*53ee8cc1Swenshuai.xi ftmp = k_bch/((n_ldpc/modulation_order+90+pilot_term)/u32SymbolRate);
1212*53ee8cc1Swenshuai.xi
1213*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)//serial mode
1214*53ee8cc1Swenshuai.xi {
1215*53ee8cc1Swenshuai.xi fTSDivNum = 288000.0 / (ftmp) / 2.0 - 1;
1216*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1;// since 288/(2(fTSDivNum+1)) = 288/TS_RATE = A ==> fTSDivNum = A/2-1
1217*53ee8cc1Swenshuai.xi }
1218*53ee8cc1Swenshuai.xi else//parallel mode
1219*53ee8cc1Swenshuai.xi {
1220*53ee8cc1Swenshuai.xi fTSDivNum = 288000.0 / (ftmp/8.0) / 2.0 - 1;
1221*53ee8cc1Swenshuai.xi //fTSDivNum = (fTSDivNum-1)/2;
1222*53ee8cc1Swenshuai.xi }
1223*53ee8cc1Swenshuai.xi
1224*53ee8cc1Swenshuai.xi fTSDivNum -= ts_div_num_offset;
1225*53ee8cc1Swenshuai.xi
1226*53ee8cc1Swenshuai.xi if(fTSDivNum > 0x1F)
1227*53ee8cc1Swenshuai.xi fTSDivNum = 0x1F;
1228*53ee8cc1Swenshuai.xi else if(fTSDivNum < 0x01)
1229*53ee8cc1Swenshuai.xi fTSDivNum = 0x01;
1230*53ee8cc1Swenshuai.xi
1231*53ee8cc1Swenshuai.xi //ULOGD("DEMOD", ">>>Modulation Order = 0x%x<<<\n", modulation_order);
1232*53ee8cc1Swenshuai.xi //ULOGD("DEMOD", ">>>FEC Type = 0x%x<<<\n", fec_type_idx);
1233*53ee8cc1Swenshuai.xi //ULOGD("DEMOD", ">>>CR Type = 0x%x<<<\n", code_rate_idx);
1234*53ee8cc1Swenshuai.xi //ULOGD("DEMOD", ">>>Pilot Type = 0x%x<<<\n", pilot_flag);
1235*53ee8cc1Swenshuai.xi }
1236*53ee8cc1Swenshuai.xi else //S
1237*53ee8cc1Swenshuai.xi {
1238*53ee8cc1Swenshuai.xi code_rate_reg = *Drv_DVBS_GetTsDivNum_PARAM.code_rate_reg;
1239*53ee8cc1Swenshuai.xi switch (code_rate_reg)
1240*53ee8cc1Swenshuai.xi {
1241*53ee8cc1Swenshuai.xi case 0x00: //CR 1/2
1242*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)
1243*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((1.0/2.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2)) /2)-ts_div_num_offset;
1244*53ee8cc1Swenshuai.xi else
1245*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((1.0/2.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2/8.0))/2)-ts_div_num_offset;
1246*53ee8cc1Swenshuai.xi
1247*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1-5;
1248*53ee8cc1Swenshuai.xi
1249*53ee8cc1Swenshuai.xi break;
1250*53ee8cc1Swenshuai.xi case 0x01: //CR 2/3
1251*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)
1252*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((2.0/3.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2)) /2)-ts_div_num_offset;
1253*53ee8cc1Swenshuai.xi else
1254*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((2.0/3.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2/8.0))/2)-ts_div_num_offset;
1255*53ee8cc1Swenshuai.xi
1256*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1-5;
1257*53ee8cc1Swenshuai.xi
1258*53ee8cc1Swenshuai.xi break;
1259*53ee8cc1Swenshuai.xi case 0x02: //CR 3/4
1260*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)
1261*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((3.0/4.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2)) /2)-ts_div_num_offset;
1262*53ee8cc1Swenshuai.xi else
1263*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((3.0/4.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2/8.0))/2)-ts_div_num_offset;
1264*53ee8cc1Swenshuai.xi
1265*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1-5;
1266*53ee8cc1Swenshuai.xi break;
1267*53ee8cc1Swenshuai.xi case 0x03: //CR 5/6
1268*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)
1269*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((5.0/6.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2)) /2)-ts_div_num_offset;
1270*53ee8cc1Swenshuai.xi else
1271*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((5.0/6.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2/8.0))/2)-ts_div_num_offset;
1272*53ee8cc1Swenshuai.xi
1273*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1-5;
1274*53ee8cc1Swenshuai.xi
1275*53ee8cc1Swenshuai.xi break;
1276*53ee8cc1Swenshuai.xi case 0x04: //CR 7/8
1277*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)
1278*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2)) /2)-ts_div_num_offset;
1279*53ee8cc1Swenshuai.xi else
1280*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2/8.0))/2)-ts_div_num_offset;
1281*53ee8cc1Swenshuai.xi
1282*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1-5;
1283*53ee8cc1Swenshuai.xi
1284*53ee8cc1Swenshuai.xi break;
1285*53ee8cc1Swenshuai.xi default:
1286*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)
1287*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2)) /2)-ts_div_num_offset;
1288*53ee8cc1Swenshuai.xi else
1289*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2/8.0))/2)-ts_div_num_offset;
1290*53ee8cc1Swenshuai.xi
1291*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1-5;
1292*53ee8cc1Swenshuai.xi
1293*53ee8cc1Swenshuai.xi break;
1294*53ee8cc1Swenshuai.xi }
1295*53ee8cc1Swenshuai.xi }
1296*53ee8cc1Swenshuai.xi
1297*53ee8cc1Swenshuai.xi //fTSDivNum = 0x01;
1298*53ee8cc1Swenshuai.xi u8Data = (MS_U8)fTSDivNum;
1299*53ee8cc1Swenshuai.xi
1300*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1301*53ee8cc1Swenshuai.xi ULOGD("DEMOD", ">>>INTERN_DVBS_GetLock TsClkDivNum = 0x%x<<<\n", u8Data);
1302*53ee8cc1Swenshuai.xi #endif
1303*53ee8cc1Swenshuai.xi
1304*53ee8cc1Swenshuai.xi if (u8Data > 0x1F)
1305*53ee8cc1Swenshuai.xi u8Data = 0x1F;
1306*53ee8cc1Swenshuai.xi
1307*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103300, u8Data);
1308*53ee8cc1Swenshuai.xi
1309*53ee8cc1Swenshuai.xi //Ts Output Enable
1310*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x101eaa,0x10);
1311*53ee8cc1Swenshuai.xi }
1312*53ee8cc1Swenshuai.xi
1313*53ee8cc1Swenshuai.xi }
1314*53ee8cc1Swenshuai.xi else
1315*53ee8cc1Swenshuai.xi {
1316*53ee8cc1Swenshuai.xi return false;
1317*53ee8cc1Swenshuai.xi }
1318*53ee8cc1Swenshuai.xi
1319*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1320*53ee8cc1Swenshuai.xi //if(*(Drv_DVBS_GetLockWithRFPower_Transform.eLockStatus)==DMD_DVBS_LOCK)
1321*53ee8cc1Swenshuai.xi if(*(Drv_DVBS_GetLockWithRFPower.eLockStatus)==DMD_DVBS_LOCK)
1322*53ee8cc1Swenshuai.xi {
1323*53ee8cc1Swenshuai.xi ULOGD("DEMOD","check in drv layer DVBS demod locked!!\n");
1324*53ee8cc1Swenshuai.xi }
1325*53ee8cc1Swenshuai.xi else
1326*53ee8cc1Swenshuai.xi {
1327*53ee8cc1Swenshuai.xi ULOGD("DEMOD","check in drv layer DVBS demod unlock!!\n");
1328*53ee8cc1Swenshuai.xi return false;
1329*53ee8cc1Swenshuai.xi }
1330*53ee8cc1Swenshuai.xi #endif
1331*53ee8cc1Swenshuai.xi
1332*53ee8cc1Swenshuai.xi return status;
1333*53ee8cc1Swenshuai.xi }
1334*53ee8cc1Swenshuai.xi #endif
1335*53ee8cc1Swenshuai.xi
1336*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_GetSignalStrength(MS_U16 * u16Strength)1337*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetSignalStrength(MS_U16 *u16Strength)
1338*53ee8cc1Swenshuai.xi {
1339*53ee8cc1Swenshuai.xi return MDrv_DMD_DVBS_GetSignalStrengthWithRFPower(u16Strength, 200.0f);
1340*53ee8cc1Swenshuai.xi }
1341*53ee8cc1Swenshuai.xi #endif
1342*53ee8cc1Swenshuai.xi
1343*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_GetSignalStrengthWithRFPower(MS_U16 * u16Strength,float fRFPowerDbm)1344*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetSignalStrengthWithRFPower(MS_U16 *u16Strength, float fRFPowerDbm)
1345*53ee8cc1Swenshuai.xi {
1346*53ee8cc1Swenshuai.xi MS_BOOL status = true;
1347*53ee8cc1Swenshuai.xi
1348*53ee8cc1Swenshuai.xi DMD_IFAGC_SSI *ifagc_ssi;
1349*53ee8cc1Swenshuai.xi DMD_IFAGC_ERR *ifagc_err;
1350*53ee8cc1Swenshuai.xi float ch_power_rf=0.0f;
1351*53ee8cc1Swenshuai.xi float ch_power_db=0.0f, ch_power_db_rel=0.0f;
1352*53ee8cc1Swenshuai.xi float ch_power_if=0.0f, ch_power_ifa = 0.0f, ch_power_ifb =0.0f;
1353*53ee8cc1Swenshuai.xi MS_U16 if_agc_val =0, if_agc_vala =0, if_agc_valb =0, if_agc_val_lsb =0, i;
1354*53ee8cc1Swenshuai.xi float ch_power_takeover=0.0f;
1355*53ee8cc1Swenshuai.xi MS_U8 ssi_tbl_len = 0, err_tbl_len = 0;
1356*53ee8cc1Swenshuai.xi
1357*53ee8cc1Swenshuai.xi MS_U8 ifagc_reg;
1358*53ee8cc1Swenshuai.xi MS_U8 ifagc_reg_lsb;
1359*53ee8cc1Swenshuai.xi MS_U16 ifagc_err_reg;
1360*53ee8cc1Swenshuai.xi
1361*53ee8cc1Swenshuai.xi // float ch_power_db=0.0f, ch_power_db_rel=0.0f;
1362*53ee8cc1Swenshuai.xi DMD_DVBS_DEMOD_TYPE pDemodType;
1363*53ee8cc1Swenshuai.xi MS_U8 u8_DVBS2_CurrentCodeRateLocal;
1364*53ee8cc1Swenshuai.xi MS_U8 u8_DVBS2_CurrentConstellationLocal;
1365*53ee8cc1Swenshuai.xi //MS_U16 u16Data=0;
1366*53ee8cc1Swenshuai.xi //MS_U8 u8Index;
1367*53ee8cc1Swenshuai.xi //DMD_DVBS_MODULATION_TYPE Qam_mode;
1368*53ee8cc1Swenshuai.xi // MS_U16 SymbolRate;
1369*53ee8cc1Swenshuai.xi // float FreqOff;
1370*53ee8cc1Swenshuai.xi
1371*53ee8cc1Swenshuai.xi //DVBS_GetSignalStrengthWithRFPower_PARAM Drv_DVBS_GetSignalStrengthWithRFPower_PARAM;
1372*53ee8cc1Swenshuai.xi //Drv_DVBS_GetSignalStrengthWithRFPower_PARAM.u16Strength=u16Strength;
1373*53ee8cc1Swenshuai.xi //Drv_DVBS_GetSignalStrengthWithRFPower_PARAM.fRFPowerDbm=fRFPowerDbm;
1374*53ee8cc1Swenshuai.xi
1375*53ee8cc1Swenshuai.xi DVBS_GetIFAGC_PARAM Drv_DVBS_GetIFAGC_PARAM;
1376*53ee8cc1Swenshuai.xi Drv_DVBS_GetIFAGC_PARAM.ifagc_reg=&ifagc_reg;
1377*53ee8cc1Swenshuai.xi Drv_DVBS_GetIFAGC_PARAM.ifagc_reg_lsb=&ifagc_reg_lsb;
1378*53ee8cc1Swenshuai.xi Drv_DVBS_GetIFAGC_PARAM.ifagc_err_reg=&ifagc_err_reg;
1379*53ee8cc1Swenshuai.xi Drv_DVBS_GetIFAGC_PARAM.ret=false;
1380*53ee8cc1Swenshuai.xi
1381*53ee8cc1Swenshuai.xi /*
1382*53ee8cc1Swenshuai.xi DVBS_GetTunrSignalLevel_PWR_PARAM Drv_DVBS_GetTunrSignalLevel_PWR_PARAM;
1383*53ee8cc1Swenshuai.xi Drv_DVBS_GetTunrSignalLevel_PWR_PARAM.u16Data=&u16Data;
1384*53ee8cc1Swenshuai.xi Drv_DVBS_GetTunrSignalLevel_PWR_PARAM.bRet=false;
1385*53ee8cc1Swenshuai.xi */
1386*53ee8cc1Swenshuai.xi DVBS_GetSignalStrengthWithRFPower_PARAM Drv_DVBS_GetSignalStrengthWithRFPower_PARAM;
1387*53ee8cc1Swenshuai.xi Drv_DVBS_GetSignalStrengthWithRFPower_PARAM.fRFPowerDbm=(MS_U16)fRFPowerDbm;
1388*53ee8cc1Swenshuai.xi Drv_DVBS_GetSignalStrengthWithRFPower_PARAM.pDemodType=&pDemodType;
1389*53ee8cc1Swenshuai.xi Drv_DVBS_GetSignalStrengthWithRFPower_PARAM.u8_DVBS2_CurrentCodeRateLocal=&u8_DVBS2_CurrentCodeRateLocal;
1390*53ee8cc1Swenshuai.xi Drv_DVBS_GetSignalStrengthWithRFPower_PARAM.u8_DVBS2_CurrentConstellationLocal=&u8_DVBS2_CurrentConstellationLocal;
1391*53ee8cc1Swenshuai.xi Drv_DVBS_GetSignalStrengthWithRFPower_PARAM.ret=false;
1392*53ee8cc1Swenshuai.xi
1393*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
1394*53ee8cc1Swenshuai.xi {
1395*53ee8cc1Swenshuai.xi
1396*53ee8cc1Swenshuai.xi if((AgcSsi_Para.pTuner_IfagcSsi_HiRef != NULL) && (AgcSsi_Para.pTuner_IfagcSsi_LoRef != NULL))
1397*53ee8cc1Swenshuai.xi {
1398*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetIFAGC,&Drv_DVBS_GetIFAGC_PARAM);
1399*53ee8cc1Swenshuai.xi status &= Drv_DVBS_GetIFAGC_PARAM.ret;
1400*53ee8cc1Swenshuai.xi
1401*53ee8cc1Swenshuai.xi ch_power_rf = fRFPowerDbm;
1402*53ee8cc1Swenshuai.xi
1403*53ee8cc1Swenshuai.xi if_agc_val = ifagc_reg;
1404*53ee8cc1Swenshuai.xi if_agc_val_lsb = ifagc_reg_lsb;
1405*53ee8cc1Swenshuai.xi
1406*53ee8cc1Swenshuai.xi ifagc_ssi = AgcSsi_Para.pTuner_IfagcSsi_LoRef;
1407*53ee8cc1Swenshuai.xi ssi_tbl_len = AgcSsi_Para.u16Tuner_IfagcSsi_LoRef_Size;
1408*53ee8cc1Swenshuai.xi ifagc_err = AgcSsi_Para.pTuner_IfagcErr_LoRef;
1409*53ee8cc1Swenshuai.xi err_tbl_len = AgcSsi_Para.u16Tuner_IfagcErr_LoRef_Size;
1410*53ee8cc1Swenshuai.xi
1411*53ee8cc1Swenshuai.xi ch_power_if=ifagc_ssi[0].power_db;
1412*53ee8cc1Swenshuai.xi if (if_agc_val >=ifagc_ssi[0].agc_val)
1413*53ee8cc1Swenshuai.xi {
1414*53ee8cc1Swenshuai.xi for(i = 1; i < ssi_tbl_len; i++)
1415*53ee8cc1Swenshuai.xi {
1416*53ee8cc1Swenshuai.xi if (if_agc_val < ifagc_ssi[i].agc_val)
1417*53ee8cc1Swenshuai.xi {
1418*53ee8cc1Swenshuai.xi if_agc_valb = ifagc_ssi[i].agc_val;
1419*53ee8cc1Swenshuai.xi ch_power_ifb = ifagc_ssi[i].power_db;
1420*53ee8cc1Swenshuai.xi
1421*53ee8cc1Swenshuai.xi i--;
1422*53ee8cc1Swenshuai.xi if_agc_vala = ifagc_ssi[i].agc_val;
1423*53ee8cc1Swenshuai.xi ch_power_ifa=ifagc_ssi[i].power_db;
1424*53ee8cc1Swenshuai.xi while ((i>1) && (if_agc_vala==ifagc_ssi[i-1].agc_val))
1425*53ee8cc1Swenshuai.xi {
1426*53ee8cc1Swenshuai.xi ch_power_ifa=ifagc_ssi[i-1].power_db;
1427*53ee8cc1Swenshuai.xi i--;
1428*53ee8cc1Swenshuai.xi }
1429*53ee8cc1Swenshuai.xi ch_power_if = ch_power_ifa+(ch_power_ifb-ch_power_ifa)*(float)((if_agc_val-if_agc_vala)*256+if_agc_val_lsb)/((if_agc_valb-if_agc_vala)*256);
1430*53ee8cc1Swenshuai.xi break;
1431*53ee8cc1Swenshuai.xi }
1432*53ee8cc1Swenshuai.xi }
1433*53ee8cc1Swenshuai.xi }
1434*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1435*53ee8cc1Swenshuai.xi ULOGD("DEMOD","if prev %f %x\n", ch_power_ifa, if_agc_vala);
1436*53ee8cc1Swenshuai.xi ULOGD("DEMOD","if next %f %x\n", ch_power_ifb, if_agc_valb);
1437*53ee8cc1Swenshuai.xi #endif
1438*53ee8cc1Swenshuai.xi
1439*53ee8cc1Swenshuai.xi for(i = 0; i < ssi_tbl_len; i++)
1440*53ee8cc1Swenshuai.xi {
1441*53ee8cc1Swenshuai.xi if (ifagc_ssi[i].agc_val <= ifagc_ssi[i+1].agc_val)
1442*53ee8cc1Swenshuai.xi {
1443*53ee8cc1Swenshuai.xi ch_power_takeover = ifagc_ssi[i+1].power_db;
1444*53ee8cc1Swenshuai.xi break;
1445*53ee8cc1Swenshuai.xi }
1446*53ee8cc1Swenshuai.xi }
1447*53ee8cc1Swenshuai.xi
1448*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1449*53ee8cc1Swenshuai.xi ULOGD("DEMOD","ch_power_rf = %f\n", ch_power_rf);
1450*53ee8cc1Swenshuai.xi ULOGD("DEMOD","ch_power_if = %f\n", ch_power_if);
1451*53ee8cc1Swenshuai.xi ULOGD("DEMOD","ch_power_takeover = %f\n", ch_power_takeover);
1452*53ee8cc1Swenshuai.xi #endif
1453*53ee8cc1Swenshuai.xi
1454*53ee8cc1Swenshuai.xi // ch_power_db = (ch_power_rf > ch_power_if)? ch_power_rf : ch_power_if;
1455*53ee8cc1Swenshuai.xi
1456*53ee8cc1Swenshuai.xi if(ch_power_rf > (ch_power_takeover + 0.5))
1457*53ee8cc1Swenshuai.xi {
1458*53ee8cc1Swenshuai.xi ch_power_db = ch_power_rf;
1459*53ee8cc1Swenshuai.xi }
1460*53ee8cc1Swenshuai.xi else if(ch_power_if < (ch_power_takeover - 0.5))
1461*53ee8cc1Swenshuai.xi {
1462*53ee8cc1Swenshuai.xi ch_power_db = ch_power_if;
1463*53ee8cc1Swenshuai.xi }
1464*53ee8cc1Swenshuai.xi else
1465*53ee8cc1Swenshuai.xi {
1466*53ee8cc1Swenshuai.xi ch_power_db = (ch_power_if + ch_power_rf)/2;
1467*53ee8cc1Swenshuai.xi }
1468*53ee8cc1Swenshuai.xi
1469*53ee8cc1Swenshuai.xi // ch_power_db = (ch_power_rf > ch_power_if)? ch_power_if : ch_power_rf;
1470*53ee8cc1Swenshuai.xi
1471*53ee8cc1Swenshuai.xi if(if_agc_val == 0xff)
1472*53ee8cc1Swenshuai.xi {
1473*53ee8cc1Swenshuai.xi for(i = 0; i < err_tbl_len; i++)
1474*53ee8cc1Swenshuai.xi {
1475*53ee8cc1Swenshuai.xi if ( ifagc_err_reg <= ifagc_err[i].agc_err ) // signed char comparison
1476*53ee8cc1Swenshuai.xi {
1477*53ee8cc1Swenshuai.xi ch_power_db += ifagc_err[i].attn_db;
1478*53ee8cc1Swenshuai.xi break;
1479*53ee8cc1Swenshuai.xi }
1480*53ee8cc1Swenshuai.xi }
1481*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1482*53ee8cc1Swenshuai.xi ULOGD("DEMOD","if_agc_err = 0x%x\n", ifagc_err_reg);
1483*53ee8cc1Swenshuai.xi #endif
1484*53ee8cc1Swenshuai.xi }
1485*53ee8cc1Swenshuai.xi }
1486*53ee8cc1Swenshuai.xi else
1487*53ee8cc1Swenshuai.xi {
1488*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1489*53ee8cc1Swenshuai.xi if (fRFPowerDbm>=100.0) // unreasonable input value, get RF level from RFAGG
1490*53ee8cc1Swenshuai.xi {
1491*53ee8cc1Swenshuai.xi ULOGD("DEMOD","Error!! please add AGC table\n");
1492*53ee8cc1Swenshuai.xi }
1493*53ee8cc1Swenshuai.xi #endif
1494*53ee8cc1Swenshuai.xi ch_power_db = fRFPowerDbm;
1495*53ee8cc1Swenshuai.xi }
1496*53ee8cc1Swenshuai.xi /*
1497*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetTunrSignalLevel_PWR,&Drv_DVBS_GetTunrSignalLevel_PWR_PARAM);
1498*53ee8cc1Swenshuai.xi status &= Drv_DVBS_GetTunrSignalLevel_PWR_PARAM.bRet;
1499*53ee8cc1Swenshuai.xi if (u8DemodLockFlag == 0 || status == FALSE)//Demod unlock
1500*53ee8cc1Swenshuai.xi {
1501*53ee8cc1Swenshuai.xi ch_power_db = 0;
1502*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]INTERN_DVBS GetSignalStrength failed\n"));
1503*53ee8cc1Swenshuai.xi }
1504*53ee8cc1Swenshuai.xi else
1505*53ee8cc1Swenshuai.xi {
1506*53ee8cc1Swenshuai.xi for (u8Index=0; u8Index < (sizeof(_u16SignalLevel)/sizeof(_u16SignalLevel[0])); u8Index++)
1507*53ee8cc1Swenshuai.xi {
1508*53ee8cc1Swenshuai.xi if ((65535 - u16Data) <= _u16SignalLevel[u8Index][0])
1509*53ee8cc1Swenshuai.xi {
1510*53ee8cc1Swenshuai.xi if (u8Index >=1)
1511*53ee8cc1Swenshuai.xi {
1512*53ee8cc1Swenshuai.xi ch_power_db = (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]);
1513*53ee8cc1Swenshuai.xi }
1514*53ee8cc1Swenshuai.xi else
1515*53ee8cc1Swenshuai.xi {
1516*53ee8cc1Swenshuai.xi ch_power_db = _u16SignalLevel[u8Index][1];
1517*53ee8cc1Swenshuai.xi }
1518*53ee8cc1Swenshuai.xi break;
1519*53ee8cc1Swenshuai.xi }
1520*53ee8cc1Swenshuai.xi }
1521*53ee8cc1Swenshuai.xi //----------
1522*53ee8cc1Swenshuai.xi if (ch_power_db >= 350)
1523*53ee8cc1Swenshuai.xi ch_power_db = ch_power_db - 35;
1524*53ee8cc1Swenshuai.xi else if ((ch_power_db < 350) && (ch_power_db >= 250))
1525*53ee8cc1Swenshuai.xi ch_power_db = ch_power_db - 25;
1526*53ee8cc1Swenshuai.xi else
1527*53ee8cc1Swenshuai.xi ch_power_db = ch_power_db - 5;
1528*53ee8cc1Swenshuai.xi
1529*53ee8cc1Swenshuai.xi if (ch_power_db < 0)
1530*53ee8cc1Swenshuai.xi ch_power_db = 0;
1531*53ee8cc1Swenshuai.xi if (ch_power_db > 920)
1532*53ee8cc1Swenshuai.xi ch_power_db = 920;
1533*53ee8cc1Swenshuai.xi
1534*53ee8cc1Swenshuai.xi ch_power_db = (-1.0)*(ch_power_db/10.0);
1535*53ee8cc1Swenshuai.xi //DBG_INTERN_DVBS(printf("INTERN_DVBS GetSignalStrength %f\n", ch_power_db));
1536*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]INTERN_DVBS GetSignalStrength %f\n", ch_power_db));
1537*53ee8cc1Swenshuai.xi }
1538*53ee8cc1Swenshuai.xi */
1539*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetSignalStrengthWithRFPower,&Drv_DVBS_GetSignalStrengthWithRFPower_PARAM);
1540*53ee8cc1Swenshuai.xi status &= Drv_DVBS_GetSignalStrengthWithRFPower_PARAM.ret;
1541*53ee8cc1Swenshuai.xi
1542*53ee8cc1Swenshuai.xi #if 1
1543*53ee8cc1Swenshuai.xi if((MS_U8)pDemodType == (MS_U8)DMD_SAT_DVBS)//S
1544*53ee8cc1Swenshuai.xi {
1545*53ee8cc1Swenshuai.xi float fDVBS_SSI_Pref[]=
1546*53ee8cc1Swenshuai.xi {
1547*53ee8cc1Swenshuai.xi //0, 1, 2, 3, 4
1548*53ee8cc1Swenshuai.xi -78.9, -77.15, -76.14, -75.19, -74.57,//QPSK
1549*53ee8cc1Swenshuai.xi };
1550*53ee8cc1Swenshuai.xi //status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBSTFEC_REG_BASE + 0x84, &u8Data);
1551*53ee8cc1Swenshuai.xi //u8_DVBS2_CurrentCodeRateLocal = (u8Data & 0x07);
1552*53ee8cc1Swenshuai.xi ch_power_db_rel = ch_power_db - fDVBS_SSI_Pref[u8_DVBS2_CurrentCodeRateLocal];
1553*53ee8cc1Swenshuai.xi }
1554*53ee8cc1Swenshuai.xi else
1555*53ee8cc1Swenshuai.xi {
1556*53ee8cc1Swenshuai.xi #if 0
1557*53ee8cc1Swenshuai.xi float fDVBS2_SSI_Pref[][11]=
1558*53ee8cc1Swenshuai.xi {
1559*53ee8cc1Swenshuai.xi // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
1560*53ee8cc1Swenshuai.xi //1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5, 5/6, 8/9, 9/10
1561*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
1562*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
1563*53ee8cc1Swenshuai.xi };
1564*53ee8cc1Swenshuai.xi #endif
1565*53ee8cc1Swenshuai.xi /*
1566*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0xD7, &u8Data);
1567*53ee8cc1Swenshuai.xi u8_DVBS2_CurrentCodeRateLocal = (u8Data & 0x3C)>>2;
1568*53ee8cc1Swenshuai.xi
1569*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0xD7, &u8Data);
1570*53ee8cc1Swenshuai.xi status &= MDrv_SYS_DMD_VD_MBX_ReadReg(DVBS2_INNER_REG_BASE + 0xD6, &u8Data2);
1571*53ee8cc1Swenshuai.xi
1572*53ee8cc1Swenshuai.xi if(((u8Data & 0x03)==0x01) && ((u8Data2 & 0x80)==0x00))
1573*53ee8cc1Swenshuai.xi {
1574*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentConstellationLocal = DMD_DVBS_QPSK;
1575*53ee8cc1Swenshuai.xi }
1576*53ee8cc1Swenshuai.xi else if (((u8Data & 0x03)==0x01) && ((u8Data2 & 0x80)==0x80))
1577*53ee8cc1Swenshuai.xi {
1578*53ee8cc1Swenshuai.xi _u8_DVBS2_CurrentConstellationLocal = DMD_DVBS_8PSK;//8PSK
1579*53ee8cc1Swenshuai.xi }
1580*53ee8cc1Swenshuai.xi */
1581*53ee8cc1Swenshuai.xi ch_power_db_rel = ch_power_db - (-80);//fDVBS2_SSI_Pref[u8_DVBS2_CurrentConstellationLocal][u8_DVBS2_CurrentCodeRateLocal];
1582*53ee8cc1Swenshuai.xi }
1583*53ee8cc1Swenshuai.xi #endif
1584*53ee8cc1Swenshuai.xi
1585*53ee8cc1Swenshuai.xi if(ch_power_db_rel <= -15.0f)
1586*53ee8cc1Swenshuai.xi {
1587*53ee8cc1Swenshuai.xi *u16Strength= 0;
1588*53ee8cc1Swenshuai.xi }
1589*53ee8cc1Swenshuai.xi else if (ch_power_db_rel <= 0.0f)
1590*53ee8cc1Swenshuai.xi {
1591*53ee8cc1Swenshuai.xi *u16Strength = (MS_U16)(2.0f/3 * (ch_power_db_rel+15.0f));
1592*53ee8cc1Swenshuai.xi }
1593*53ee8cc1Swenshuai.xi else if (ch_power_db_rel <= 20.0f)
1594*53ee8cc1Swenshuai.xi {
1595*53ee8cc1Swenshuai.xi *u16Strength = (MS_U16)(4.0f * ch_power_db_rel + 10.0f);
1596*53ee8cc1Swenshuai.xi }
1597*53ee8cc1Swenshuai.xi else if (ch_power_db_rel <= 35.0f)
1598*53ee8cc1Swenshuai.xi {
1599*53ee8cc1Swenshuai.xi *u16Strength = (MS_U16)(2.0f/3 * (ch_power_db_rel-20.0f) + 90.0);
1600*53ee8cc1Swenshuai.xi }
1601*53ee8cc1Swenshuai.xi else
1602*53ee8cc1Swenshuai.xi {
1603*53ee8cc1Swenshuai.xi *u16Strength = 100;
1604*53ee8cc1Swenshuai.xi }
1605*53ee8cc1Swenshuai.xi
1606*53ee8cc1Swenshuai.xi //ULOGD("DEMOD","Signal Strength(SSI) = %d \n", (int)*u16Strength);
1607*53ee8cc1Swenshuai.xi sDMD_DVBS_Info.u16Strength=*u16Strength;
1608*53ee8cc1Swenshuai.xi }
1609*53ee8cc1Swenshuai.xi
1610*53ee8cc1Swenshuai.xi else
1611*53ee8cc1Swenshuai.xi {
1612*53ee8cc1Swenshuai.xi return false;
1613*53ee8cc1Swenshuai.xi }
1614*53ee8cc1Swenshuai.xi
1615*53ee8cc1Swenshuai.xi return status;
1616*53ee8cc1Swenshuai.xi }
1617*53ee8cc1Swenshuai.xi #endif
1618*53ee8cc1Swenshuai.xi
1619*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_GetSignalQuality(MS_U16 * u16Quality)1620*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetSignalQuality(MS_U16 *u16Quality)
1621*53ee8cc1Swenshuai.xi {
1622*53ee8cc1Swenshuai.xi return MDrv_DMD_DVBS_GetSignalQualityWithRFPower(u16Quality, 200.0f);
1623*53ee8cc1Swenshuai.xi }
1624*53ee8cc1Swenshuai.xi #endif
1625*53ee8cc1Swenshuai.xi
1626*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_GetSignalQualityWithRFPower(MS_U16 * u16Quality,float fRFPowerDbm)1627*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetSignalQualityWithRFPower(MS_U16 *u16Quality, float fRFPowerDbm)
1628*53ee8cc1Swenshuai.xi {
1629*53ee8cc1Swenshuai.xi MS_BOOL bRet;
1630*53ee8cc1Swenshuai.xi float fber = 0.0;
1631*53ee8cc1Swenshuai.xi //float log_ber;
1632*53ee8cc1Swenshuai.xi MS_BOOL status = TRUE;
1633*53ee8cc1Swenshuai.xi float f_snr = 0.0, ber_sqi = 0.0, cn_rel = 0.0;
1634*53ee8cc1Swenshuai.xi //MS_U8 u8Data =0;
1635*53ee8cc1Swenshuai.xi DMD_DVBS_CODE_RATE_TYPE _u8_DVBS2_CurrentCodeRateLocal ;
1636*53ee8cc1Swenshuai.xi MS_U16 bchpkt_error,BCH_Eflag2_Window;
1637*53ee8cc1Swenshuai.xi //fRFPowerDbm = fRFPowerDbm;
1638*53ee8cc1Swenshuai.xi float snr_poly =0.0;
1639*53ee8cc1Swenshuai.xi float Fixed_SNR =0.0;
1640*53ee8cc1Swenshuai.xi double eFlag_PER=0.0;
1641*53ee8cc1Swenshuai.xi
1642*53ee8cc1Swenshuai.xi
1643*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
1644*53ee8cc1Swenshuai.xi {
1645*53ee8cc1Swenshuai.xi if (u8DemodLockFlag == 1)
1646*53ee8cc1Swenshuai.xi // if (TRUE == INTERN_DVBS_GetLock(DMD_DVBS_GETLOCK, 200.0f, -200.0f, 0))
1647*53ee8cc1Swenshuai.xi {
1648*53ee8cc1Swenshuai.xi if(_bDemodType) //S2
1649*53ee8cc1Swenshuai.xi {
1650*53ee8cc1Swenshuai.xi
1651*53ee8cc1Swenshuai.xi MDrv_DMD_DVBS_GetSNR(&f_snr);
1652*53ee8cc1Swenshuai.xi snr_poly = 0.005261367463671*pow(f_snr, 3)-0.116517828301214*pow(f_snr, 2)+0.744836970505452*pow(f_snr, 1)-0.86727609780167;
1653*53ee8cc1Swenshuai.xi Fixed_SNR = f_snr + snr_poly;
1654*53ee8cc1Swenshuai.xi
1655*53ee8cc1Swenshuai.xi if (Fixed_SNR < 17.0)
1656*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR;
1657*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 20.0) && (Fixed_SNR >= 17.0))
1658*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 0.8;
1659*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 22.5) && (Fixed_SNR >= 20.0))
1660*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 2.0;
1661*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 27.0) && (Fixed_SNR >= 22.5))
1662*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.0;
1663*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 29.0) && (Fixed_SNR >= 27.0))
1664*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.5;
1665*53ee8cc1Swenshuai.xi else if (Fixed_SNR >= 29.0)
1666*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.0;
1667*53ee8cc1Swenshuai.xi
1668*53ee8cc1Swenshuai.xi
1669*53ee8cc1Swenshuai.xi if (Fixed_SNR < 1.0)
1670*53ee8cc1Swenshuai.xi Fixed_SNR = 1.0;
1671*53ee8cc1Swenshuai.xi if (Fixed_SNR > 30.0)
1672*53ee8cc1Swenshuai.xi Fixed_SNR = 30.0;
1673*53ee8cc1Swenshuai.xi
1674*53ee8cc1Swenshuai.xi //BCH EFLAG2_Window, window size 0x2000
1675*53ee8cc1Swenshuai.xi BCH_Eflag2_Window=0x2000;
1676*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_REG_BASE + 0x25*2 + 1, (BCH_Eflag2_Window>>8));
1677*53ee8cc1Swenshuai.xi MDrv_SYS_DMD_VD_MBX_WriteReg(DVBS2FEC_REG_BASE + 0x25*2 , (BCH_Eflag2_Window&0xff));
1678*53ee8cc1Swenshuai.xi MDrv_DMD_DVBS_GetPacketErr(&bchpkt_error);
1679*53ee8cc1Swenshuai.xi eFlag_PER = (float)(bchpkt_error)/(float)(BCH_Eflag2_Window);
1680*53ee8cc1Swenshuai.xi if(eFlag_PER>0)
1681*53ee8cc1Swenshuai.xi fber = 0.089267531133002*pow(eFlag_PER, 2) + 0.019640560289510*eFlag_PER + 0.0000001;
1682*53ee8cc1Swenshuai.xi else
1683*53ee8cc1Swenshuai.xi fber = 0;
1684*53ee8cc1Swenshuai.xi
1685*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
1686*53ee8cc1Swenshuai.xi //log_ber = ( - 1) *log10f(1 / fber);
1687*53ee8cc1Swenshuai.xi if (fber > 1.0E-1)
1688*53ee8cc1Swenshuai.xi ber_sqi = (log10f(1.0f/fber))*20.0f + 8.0f;
1689*53ee8cc1Swenshuai.xi else if(fber > 8.5E-7)
1690*53ee8cc1Swenshuai.xi ber_sqi = (log10f(1.0f/fber))*20.0f - 30.0f;
1691*53ee8cc1Swenshuai.xi else
1692*53ee8cc1Swenshuai.xi ber_sqi = 100.0;
1693*53ee8cc1Swenshuai.xi #else
1694*53ee8cc1Swenshuai.xi //log_ber = ( - 1) *Log10Approx(1 / fber);
1695*53ee8cc1Swenshuai.xi if (fber > 1.0E-1)
1696*53ee8cc1Swenshuai.xi ber_sqi = (Log10Approx(1.0f/fber))*20.0f + 8.0f;
1697*53ee8cc1Swenshuai.xi else if(fber > 8.5E-7)
1698*53ee8cc1Swenshuai.xi ber_sqi = (Log10Approx(1.0f/fber))*20.0f - 30.0f;
1699*53ee8cc1Swenshuai.xi else
1700*53ee8cc1Swenshuai.xi ber_sqi = 100.0;
1701*53ee8cc1Swenshuai.xi
1702*53ee8cc1Swenshuai.xi #endif
1703*53ee8cc1Swenshuai.xi
1704*53ee8cc1Swenshuai.xi *u16Quality = Fixed_SNR/30*ber_sqi;
1705*53ee8cc1Swenshuai.xi //DBG_INTERN_DVBS(printf(" Fixed_SNR %f\n",Fixed_SNR));
1706*53ee8cc1Swenshuai.xi //DBG_INTERN_DVBS(printf(" BCH_Eflag2_Window %d\n",BCH_Eflag2_Window));
1707*53ee8cc1Swenshuai.xi //DBG_INTERN_DVBS(printf(" eFlag_PER [%f]\n fber [%8.3e]\n ber_sqi [%f]\n",eFlag_PER,fber,ber_sqi));
1708*53ee8cc1Swenshuai.xi }
1709*53ee8cc1Swenshuai.xi else //S
1710*53ee8cc1Swenshuai.xi {
1711*53ee8cc1Swenshuai.xi if (MDrv_DMD_DVBS_GetPostViterbiBer(&fber) == FALSE)//ViterbiBer
1712*53ee8cc1Swenshuai.xi {
1713*53ee8cc1Swenshuai.xi ULOGD("DEMOD","GetPostViterbiBer Fail! \n");
1714*53ee8cc1Swenshuai.xi bRet= FALSE;
1715*53ee8cc1Swenshuai.xi }
1716*53ee8cc1Swenshuai.xi //_fPostBer=fber;
1717*53ee8cc1Swenshuai.xi
1718*53ee8cc1Swenshuai.xi
1719*53ee8cc1Swenshuai.xi if (status==FALSE)
1720*53ee8cc1Swenshuai.xi {
1721*53ee8cc1Swenshuai.xi ULOGD("DEMOD","Maserati_GetSignalQuality GetPostViterbiBer Fail! \n");
1722*53ee8cc1Swenshuai.xi bRet= FALSE;
1723*53ee8cc1Swenshuai.xi }
1724*53ee8cc1Swenshuai.xi float fDVBS_SQI_CNref[]=
1725*53ee8cc1Swenshuai.xi { //0, 1, 2, 3, 4
1726*53ee8cc1Swenshuai.xi 4.2, 5.9, 6, 6.9, 7.5,//QPSK
1727*53ee8cc1Swenshuai.xi };
1728*53ee8cc1Swenshuai.xi
1729*53ee8cc1Swenshuai.xi DVBS_GetCurrentDemodCodeRate_PARAM Drv_DVBS_GetCurrentDemodCodeRate_PARAM;
1730*53ee8cc1Swenshuai.xi Drv_DVBS_GetCurrentDemodCodeRate_PARAM.pCodeRate=&_u8_DVBS2_CurrentCodeRateLocal;
1731*53ee8cc1Swenshuai.xi Drv_DVBS_GetCurrentDemodCodeRate_PARAM.bRet=false;
1732*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetCurrentDemodCodeRate,&Drv_DVBS_GetCurrentDemodCodeRate_PARAM);
1733*53ee8cc1Swenshuai.xi #if 0
1734*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
1735*53ee8cc1Swenshuai.xi log_ber = ( - 1.0f) *log10f(1.0f / fber); //BY modify
1736*53ee8cc1Swenshuai.xi #else
1737*53ee8cc1Swenshuai.xi log_ber = ( - 1.0f) *Log10Approx(1.0f / fber); //BY modify
1738*53ee8cc1Swenshuai.xi #endif
1739*53ee8cc1Swenshuai.xi DBG_INTERN_DVBS(printf("\nLog(BER) = %f\n",log_ber));
1740*53ee8cc1Swenshuai.xi #endif
1741*53ee8cc1Swenshuai.xi if (fber > 2.5E-2)
1742*53ee8cc1Swenshuai.xi ber_sqi = 0.0;
1743*53ee8cc1Swenshuai.xi else if(fber > 8.5E-7)
1744*53ee8cc1Swenshuai.xi #ifdef MSOS_TYPE_LINUX
1745*53ee8cc1Swenshuai.xi ber_sqi = (log10f(1.0f/fber))*20.0f - 32.0f; //40.0f;
1746*53ee8cc1Swenshuai.xi #else
1747*53ee8cc1Swenshuai.xi ber_sqi = (Log10Approx(1.0f/fber))*20.0f - 32.0f;//40.0f;
1748*53ee8cc1Swenshuai.xi #endif
1749*53ee8cc1Swenshuai.xi else
1750*53ee8cc1Swenshuai.xi ber_sqi = 100.0;
1751*53ee8cc1Swenshuai.xi
1752*53ee8cc1Swenshuai.xi status &= MDrv_DMD_DVBS_GetSNR(&f_snr);
1753*53ee8cc1Swenshuai.xi ULOGD("DEMOD","drv_DVBS_GetSNR = %d \n", (int)f_snr );
1754*53ee8cc1Swenshuai.xi cn_rel = f_snr - fDVBS_SQI_CNref[_u8_DVBS2_CurrentCodeRateLocal];
1755*53ee8cc1Swenshuai.xi
1756*53ee8cc1Swenshuai.xi ULOGD("DEMOD","fber = %f\n", fber );
1757*53ee8cc1Swenshuai.xi ULOGD("DEMOD","f_snr = %f\n", f_snr );
1758*53ee8cc1Swenshuai.xi ULOGD("DEMOD","cn_nordig_s1 = %f\n", fDVBS_SQI_CNref[_u8_DVBS2_CurrentCodeRateLocal] );
1759*53ee8cc1Swenshuai.xi ULOGD("DEMOD","cn_rel = %f\n", cn_rel );
1760*53ee8cc1Swenshuai.xi ULOGD("DEMOD","ber_sqi = %f\n", ber_sqi );
1761*53ee8cc1Swenshuai.xi
1762*53ee8cc1Swenshuai.xi if (cn_rel < -7.0f)
1763*53ee8cc1Swenshuai.xi {
1764*53ee8cc1Swenshuai.xi *u16Quality = 0;
1765*53ee8cc1Swenshuai.xi }
1766*53ee8cc1Swenshuai.xi else if (cn_rel < 3.0)
1767*53ee8cc1Swenshuai.xi {
1768*53ee8cc1Swenshuai.xi *u16Quality = (MS_U16)(ber_sqi*((cn_rel - 3.0)/10.0 + 1.0));
1769*53ee8cc1Swenshuai.xi }
1770*53ee8cc1Swenshuai.xi else
1771*53ee8cc1Swenshuai.xi {
1772*53ee8cc1Swenshuai.xi *u16Quality = (MS_U16)ber_sqi;
1773*53ee8cc1Swenshuai.xi }
1774*53ee8cc1Swenshuai.xi
1775*53ee8cc1Swenshuai.xi
1776*53ee8cc1Swenshuai.xi }
1777*53ee8cc1Swenshuai.xi //INTERN_DVBS_GetTunrSignalLevel_PWR();//For Debug.
1778*53ee8cc1Swenshuai.xi //ULOGD("DEMOD","Signal Quility(SQI) = %d\n", *u16Quality );
1779*53ee8cc1Swenshuai.xi bRet= TRUE;
1780*53ee8cc1Swenshuai.xi }
1781*53ee8cc1Swenshuai.xi else
1782*53ee8cc1Swenshuai.xi {
1783*53ee8cc1Swenshuai.xi *u16Quality = 0;
1784*53ee8cc1Swenshuai.xi }
1785*53ee8cc1Swenshuai.xi bRet= TRUE;
1786*53ee8cc1Swenshuai.xi sDMD_DVBS_Info.u16Quality=*u16Quality;
1787*53ee8cc1Swenshuai.xi }
1788*53ee8cc1Swenshuai.xi else
1789*53ee8cc1Swenshuai.xi {
1790*53ee8cc1Swenshuai.xi return false;
1791*53ee8cc1Swenshuai.xi }
1792*53ee8cc1Swenshuai.xi return bRet;
1793*53ee8cc1Swenshuai.xi }
1794*53ee8cc1Swenshuai.xi #endif
1795*53ee8cc1Swenshuai.xi
1796*53ee8cc1Swenshuai.xi #ifdef CHIP_KAISER
MDrv_DMD_DVBS_ActiveDmdSwitch(MS_U8 demod_no)1797*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_ActiveDmdSwitch(MS_U8 demod_no)
1798*53ee8cc1Swenshuai.xi {
1799*53ee8cc1Swenshuai.xi DVBS_ActiveDmdSwitch_PARAM Drv_DVBS_ActiveDmdSwitch_PARAM;
1800*53ee8cc1Swenshuai.xi Drv_DVBS_ActiveDmdSwitch_PARAM.demod_no=demod_no;
1801*53ee8cc1Swenshuai.xi
1802*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
1803*53ee8cc1Swenshuai.xi {
1804*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_ActiveDmdSwitch,&Drv_DVBS_ActiveDmdSwitch_PARAM);
1805*53ee8cc1Swenshuai.xi }
1806*53ee8cc1Swenshuai.xi else
1807*53ee8cc1Swenshuai.xi {
1808*53ee8cc1Swenshuai.xi return false;
1809*53ee8cc1Swenshuai.xi }
1810*53ee8cc1Swenshuai.xi
1811*53ee8cc1Swenshuai.xi return Drv_DVBS_ActiveDmdSwitch_PARAM.ret;
1812*53ee8cc1Swenshuai.xi }
1813*53ee8cc1Swenshuai.xi #else
MDrv_DMD_DVBS_ActiveDmdSwitch(MS_U8 demod_no)1814*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_ActiveDmdSwitch(MS_U8 demod_no)
1815*53ee8cc1Swenshuai.xi {
1816*53ee8cc1Swenshuai.xi ULOGD("DEMOD","Doesn't support DVBS_ActiveDmdSwitch function!!!\n");
1817*53ee8cc1Swenshuai.xi return false;
1818*53ee8cc1Swenshuai.xi }
1819*53ee8cc1Swenshuai.xi #endif
1820*53ee8cc1Swenshuai.xi
1821*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_GetSNR(float * fSNR)1822*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetSNR(float *fSNR)
1823*53ee8cc1Swenshuai.xi {
1824*53ee8cc1Swenshuai.xi MS_U32 u32NDA_SNR_A =0;
1825*53ee8cc1Swenshuai.xi MS_U32 u32NDA_SNR_AB =0;
1826*53ee8cc1Swenshuai.xi //float NDA_SNR_A =0.0;
1827*53ee8cc1Swenshuai.xi //float NDA_SNR_AB =0.0;
1828*53ee8cc1Swenshuai.xi float NDA_SNR =0.0;
1829*53ee8cc1Swenshuai.xi //double NDA_SNR_LINEAR=0.0;
1830*53ee8cc1Swenshuai.xi
1831*53ee8cc1Swenshuai.xi DVBS_GetSNR_PARAM Drv_DVBS_GetSNR_PARAM;
1832*53ee8cc1Swenshuai.xi Drv_DVBS_GetSNR_PARAM.u32NDA_SNR_A=&u32NDA_SNR_A;
1833*53ee8cc1Swenshuai.xi Drv_DVBS_GetSNR_PARAM.u32NDA_SNR_AB=&u32NDA_SNR_AB;
1834*53ee8cc1Swenshuai.xi Drv_DVBS_GetSNR_PARAM.ret = false;
1835*53ee8cc1Swenshuai.xi
1836*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
1837*53ee8cc1Swenshuai.xi {
1838*53ee8cc1Swenshuai.xi if (u8DemodLockFlag == 0)
1839*53ee8cc1Swenshuai.xi {
1840*53ee8cc1Swenshuai.xi Drv_DVBS_GetSNR_PARAM.ret=FALSE;
1841*53ee8cc1Swenshuai.xi }
1842*53ee8cc1Swenshuai.xi else
1843*53ee8cc1Swenshuai.xi {
1844*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetSNR,&Drv_DVBS_GetSNR_PARAM);
1845*53ee8cc1Swenshuai.xi }
1846*53ee8cc1Swenshuai.xi
1847*53ee8cc1Swenshuai.xi if (Drv_DVBS_GetSNR_PARAM.ret== FALSE)
1848*53ee8cc1Swenshuai.xi {
1849*53ee8cc1Swenshuai.xi ULOGD("DEMOD","DVBS_GetSNR Fail! \n");
1850*53ee8cc1Swenshuai.xi }
1851*53ee8cc1Swenshuai.xi else
1852*53ee8cc1Swenshuai.xi {
1853*53ee8cc1Swenshuai.xi #if 0
1854*53ee8cc1Swenshuai.xi //NDA SNR
1855*53ee8cc1Swenshuai.xi NDA_SNR_A=(float)u32NDA_SNR_A/65536;
1856*53ee8cc1Swenshuai.xi NDA_SNR_AB=(float)u32NDA_SNR_AB/4194304;
1857*53ee8cc1Swenshuai.xi //
1858*53ee8cc1Swenshuai.xi //since support 16,32APSK we need to add judgement
1859*53ee8cc1Swenshuai.xi if(modulation_order==4)
1860*53ee8cc1Swenshuai.xi NDA_SNR_AB=(float)sqrt(NDA_SNR_AB/(2-1.252295758529242));//for 16APSK CR2/3
1861*53ee8cc1Swenshuai.xi else if(modulation_order==5)//(2-1.41333232789)
1862*53ee8cc1Swenshuai.xi NDA_SNR_AB=(float)sqrt(NDA_SNR_AB/(2-1.41333232789));//for 32APSK CR3/4
1863*53ee8cc1Swenshuai.xi else
1864*53ee8cc1Swenshuai.xi NDA_SNR_AB=(float)sqrt(NDA_SNR_AB);
1865*53ee8cc1Swenshuai.xi
1866*53ee8cc1Swenshuai.xi NDA_SNR_LINEAR =(1/((NDA_SNR_A/NDA_SNR_AB)-1)) ;
1867*53ee8cc1Swenshuai.xi
1868*53ee8cc1Swenshuai.xi if(NDA_SNR_LINEAR<=0)
1869*53ee8cc1Swenshuai.xi NDA_SNR=1.0;
1870*53ee8cc1Swenshuai.xi else
1871*53ee8cc1Swenshuai.xi NDA_SNR=10*log10(NDA_SNR_LINEAR);
1872*53ee8cc1Swenshuai.xi
1873*53ee8cc1Swenshuai.xi //printf("[DVBS]: NDA_SNR ================================: %.1f\n", NDA_SNR);
1874*53ee8cc1Swenshuai.xi //_f_DVBS_CurrentSNR = NDA_SNR;
1875*53ee8cc1Swenshuai.xi /*
1876*53ee8cc1Swenshuai.xi //[DVBS/S2, QPSK/8PSK, 1/2~9/10 the same CN]
1877*53ee8cc1Swenshuai.xi snr_poly = 0.0; //use Polynomial curve fitting to fix SNR
1878*53ee8cc1Swenshuai.xi snr_poly = 0.005261367463671*pow(NDA_SNR, 3)-0.116517828301214*pow(NDA_SNR, 2)+0.744836970505452*pow(NDA_SNR, 1)-0.86727609780167;
1879*53ee8cc1Swenshuai.xi Fixed_SNR = NDA_SNR + snr_poly;
1880*53ee8cc1Swenshuai.xi //printf("[DVBS]: NDA_SNR + snr_poly =====================: %.1f\n", Fixed_SNR);
1881*53ee8cc1Swenshuai.xi
1882*53ee8cc1Swenshuai.xi if (Fixed_SNR < 17.0)
1883*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR;
1884*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 20.0) && (Fixed_SNR >= 17.0))
1885*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 0.8;
1886*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 22.5) && (Fixed_SNR >= 20.0))
1887*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 2.0;
1888*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 27.0) && (Fixed_SNR >= 22.5))
1889*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.0;
1890*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 29.0) && (Fixed_SNR >= 27.0))
1891*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.5;
1892*53ee8cc1Swenshuai.xi else if (Fixed_SNR >= 29.0)
1893*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.0;
1894*53ee8cc1Swenshuai.xi
1895*53ee8cc1Swenshuai.xi if (Fixed_SNR < 1.0)
1896*53ee8cc1Swenshuai.xi Fixed_SNR = 1.0;
1897*53ee8cc1Swenshuai.xi if (Fixed_SNR > 30.0)
1898*53ee8cc1Swenshuai.xi Fixed_SNR = 30.0;
1899*53ee8cc1Swenshuai.xi */
1900*53ee8cc1Swenshuai.xi
1901*53ee8cc1Swenshuai.xi #endif
1902*53ee8cc1Swenshuai.xi
1903*53ee8cc1Swenshuai.xi NDA_SNR = u32NDA_SNR_A + ((float)u32NDA_SNR_AB / 256.0);
1904*53ee8cc1Swenshuai.xi
1905*53ee8cc1Swenshuai.xi *fSNR = NDA_SNR;
1906*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
1907*53ee8cc1Swenshuai.xi ULOGD("DEMOD", "[DVBS]: NDA_SNR=============================: %.1f\n", NDA_SNR);
1908*53ee8cc1Swenshuai.xi #endif
1909*53ee8cc1Swenshuai.xi }
1910*53ee8cc1Swenshuai.xi
1911*53ee8cc1Swenshuai.xi Drv_DVBS_GetSNR_PARAM.ret = true;
1912*53ee8cc1Swenshuai.xi }
1913*53ee8cc1Swenshuai.xi else
1914*53ee8cc1Swenshuai.xi {
1915*53ee8cc1Swenshuai.xi return false;
1916*53ee8cc1Swenshuai.xi }
1917*53ee8cc1Swenshuai.xi
1918*53ee8cc1Swenshuai.xi return Drv_DVBS_GetSNR_PARAM.ret;
1919*53ee8cc1Swenshuai.xi }
1920*53ee8cc1Swenshuai.xi #endif
1921*53ee8cc1Swenshuai.xi
1922*53ee8cc1Swenshuai.xi #ifdef UFO_SUPPORT_KERNEL_FLOATING
MDrv_DMD_DVBS_GetSNR_Kernel(MS_FLOAT_ST * fSNR)1923*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetSNR_Kernel(MS_FLOAT_ST *fSNR)
1924*53ee8cc1Swenshuai.xi {
1925*53ee8cc1Swenshuai.xi MS_U32 u32NDA_SNR_A =0;
1926*53ee8cc1Swenshuai.xi MS_U32 u32NDA_SNR_AB =0;
1927*53ee8cc1Swenshuai.xi //float NDA_SNR_A =0.0;
1928*53ee8cc1Swenshuai.xi //float NDA_SNR_AB =0.0;
1929*53ee8cc1Swenshuai.xi //float NDA_SNR =0.0;
1930*53ee8cc1Swenshuai.xi MS_FLOAT_ST NDA_SNR;
1931*53ee8cc1Swenshuai.xi //double NDA_SNR_LINEAR=0.0;
1932*53ee8cc1Swenshuai.xi
1933*53ee8cc1Swenshuai.xi DVBS_GetSNR_PARAM Drv_DVBS_GetSNR_PARAM;
1934*53ee8cc1Swenshuai.xi Drv_DVBS_GetSNR_PARAM.u32NDA_SNR_A=&u32NDA_SNR_A;
1935*53ee8cc1Swenshuai.xi Drv_DVBS_GetSNR_PARAM.u32NDA_SNR_AB=&u32NDA_SNR_AB;
1936*53ee8cc1Swenshuai.xi Drv_DVBS_GetSNR_PARAM.ret = false;
1937*53ee8cc1Swenshuai.xi
1938*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
1939*53ee8cc1Swenshuai.xi {
1940*53ee8cc1Swenshuai.xi if (u8DemodLockFlag == 0)
1941*53ee8cc1Swenshuai.xi {
1942*53ee8cc1Swenshuai.xi Drv_DVBS_GetSNR_PARAM.ret=FALSE;
1943*53ee8cc1Swenshuai.xi }
1944*53ee8cc1Swenshuai.xi else
1945*53ee8cc1Swenshuai.xi {
1946*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetSNR,&Drv_DVBS_GetSNR_PARAM);
1947*53ee8cc1Swenshuai.xi }
1948*53ee8cc1Swenshuai.xi
1949*53ee8cc1Swenshuai.xi if (Drv_DVBS_GetSNR_PARAM.ret== FALSE)
1950*53ee8cc1Swenshuai.xi {
1951*53ee8cc1Swenshuai.xi ULOGD("DEMOD","DVBS_GetSNR Fail! \n");
1952*53ee8cc1Swenshuai.xi }
1953*53ee8cc1Swenshuai.xi else
1954*53ee8cc1Swenshuai.xi {
1955*53ee8cc1Swenshuai.xi #if 0
1956*53ee8cc1Swenshuai.xi //NDA SNR
1957*53ee8cc1Swenshuai.xi NDA_SNR_A=(float)u32NDA_SNR_A/65536;
1958*53ee8cc1Swenshuai.xi NDA_SNR_AB=(float)u32NDA_SNR_AB/4194304;
1959*53ee8cc1Swenshuai.xi //
1960*53ee8cc1Swenshuai.xi //since support 16,32APSK we need to add judgement
1961*53ee8cc1Swenshuai.xi if(modulation_order==4)
1962*53ee8cc1Swenshuai.xi NDA_SNR_AB=(float)sqrt(NDA_SNR_AB/(2-1.252295758529242));//for 16APSK CR2/3
1963*53ee8cc1Swenshuai.xi else if(modulation_order==5)//(2-1.41333232789)
1964*53ee8cc1Swenshuai.xi NDA_SNR_AB=(float)sqrt(NDA_SNR_AB/(2-1.41333232789));//for 32APSK CR3/4
1965*53ee8cc1Swenshuai.xi else
1966*53ee8cc1Swenshuai.xi NDA_SNR_AB=(float)sqrt(NDA_SNR_AB);
1967*53ee8cc1Swenshuai.xi
1968*53ee8cc1Swenshuai.xi NDA_SNR_LINEAR =(1/((NDA_SNR_A/NDA_SNR_AB)-1)) ;
1969*53ee8cc1Swenshuai.xi
1970*53ee8cc1Swenshuai.xi if(NDA_SNR_LINEAR<=0)
1971*53ee8cc1Swenshuai.xi NDA_SNR=1.0;
1972*53ee8cc1Swenshuai.xi else
1973*53ee8cc1Swenshuai.xi NDA_SNR=10*log10(NDA_SNR_LINEAR);
1974*53ee8cc1Swenshuai.xi
1975*53ee8cc1Swenshuai.xi //printf("[DVBS]: NDA_SNR ================================: %.1f\n", NDA_SNR);
1976*53ee8cc1Swenshuai.xi //_f_DVBS_CurrentSNR = NDA_SNR;
1977*53ee8cc1Swenshuai.xi /*
1978*53ee8cc1Swenshuai.xi //[DVBS/S2, QPSK/8PSK, 1/2~9/10 the same CN]
1979*53ee8cc1Swenshuai.xi snr_poly = 0.0; //use Polynomial curve fitting to fix SNR
1980*53ee8cc1Swenshuai.xi snr_poly = 0.005261367463671*pow(NDA_SNR, 3)-0.116517828301214*pow(NDA_SNR, 2)+0.744836970505452*pow(NDA_SNR, 1)-0.86727609780167;
1981*53ee8cc1Swenshuai.xi Fixed_SNR = NDA_SNR + snr_poly;
1982*53ee8cc1Swenshuai.xi //printf("[DVBS]: NDA_SNR + snr_poly =====================: %.1f\n", Fixed_SNR);
1983*53ee8cc1Swenshuai.xi
1984*53ee8cc1Swenshuai.xi if (Fixed_SNR < 17.0)
1985*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR;
1986*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 20.0) && (Fixed_SNR >= 17.0))
1987*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 0.8;
1988*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 22.5) && (Fixed_SNR >= 20.0))
1989*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 2.0;
1990*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 27.0) && (Fixed_SNR >= 22.5))
1991*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.0;
1992*53ee8cc1Swenshuai.xi else if ((Fixed_SNR < 29.0) && (Fixed_SNR >= 27.0))
1993*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.5;
1994*53ee8cc1Swenshuai.xi else if (Fixed_SNR >= 29.0)
1995*53ee8cc1Swenshuai.xi Fixed_SNR = Fixed_SNR - 3.0;
1996*53ee8cc1Swenshuai.xi
1997*53ee8cc1Swenshuai.xi if (Fixed_SNR < 1.0)
1998*53ee8cc1Swenshuai.xi Fixed_SNR = 1.0;
1999*53ee8cc1Swenshuai.xi if (Fixed_SNR > 30.0)
2000*53ee8cc1Swenshuai.xi Fixed_SNR = 30.0;
2001*53ee8cc1Swenshuai.xi */
2002*53ee8cc1Swenshuai.xi
2003*53ee8cc1Swenshuai.xi #endif
2004*53ee8cc1Swenshuai.xi
2005*53ee8cc1Swenshuai.xi //NDA_SNR = u32NDA_SNR_A + ((float)u32NDA_SNR_AB / 256.0);
2006*53ee8cc1Swenshuai.xi
2007*53ee8cc1Swenshuai.xi NDA_SNR.DATA = ((u32NDA_SNR_A << 8) | u32NDA_SNR_AB);
2008*53ee8cc1Swenshuai.xi NDA_SNR.EXP = -8;
2009*53ee8cc1Swenshuai.xi
2010*53ee8cc1Swenshuai.xi *fSNR = NDA_SNR;
2011*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
2012*53ee8cc1Swenshuai.xi ULOGD("DEMOD", "[DVBS]: NDA_SNR=============================: %d*2^%d\n", NDA_SNR.DATA, NDA_SNR.EXP);
2013*53ee8cc1Swenshuai.xi #endif
2014*53ee8cc1Swenshuai.xi }
2015*53ee8cc1Swenshuai.xi }
2016*53ee8cc1Swenshuai.xi
2017*53ee8cc1Swenshuai.xi return Drv_DVBS_GetSNR_PARAM.ret;
2018*53ee8cc1Swenshuai.xi }
2019*53ee8cc1Swenshuai.xi #endif
2020*53ee8cc1Swenshuai.xi
2021*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_GetPostViterbiBer(float * ber)2022*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetPostViterbiBer(float *ber)
2023*53ee8cc1Swenshuai.xi {
2024*53ee8cc1Swenshuai.xi MS_U16 BitErrPeriod_reg;
2025*53ee8cc1Swenshuai.xi MS_U32 BitErr_reg;
2026*53ee8cc1Swenshuai.xi
2027*53ee8cc1Swenshuai.xi DVBS_GetPostViterbiBer_PARAM Drv_DVBS_GetPostViterbiBer_PARAM;
2028*53ee8cc1Swenshuai.xi Drv_DVBS_GetPostViterbiBer_PARAM.BitErr_reg=&BitErr_reg;
2029*53ee8cc1Swenshuai.xi Drv_DVBS_GetPostViterbiBer_PARAM.BitErrPeriod_reg=&BitErrPeriod_reg;
2030*53ee8cc1Swenshuai.xi Drv_DVBS_GetPostViterbiBer_PARAM.ret=false;
2031*53ee8cc1Swenshuai.xi
2032*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2033*53ee8cc1Swenshuai.xi {
2034*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetPostViterbiBer,&Drv_DVBS_GetPostViterbiBer_PARAM);
2035*53ee8cc1Swenshuai.xi
2036*53ee8cc1Swenshuai.xi if (BitErrPeriod_reg == 0 ) //PRD
2037*53ee8cc1Swenshuai.xi BitErrPeriod_reg = 1;
2038*53ee8cc1Swenshuai.xi
2039*53ee8cc1Swenshuai.xi if(_bDemodType) //DVBS2
2040*53ee8cc1Swenshuai.xi {
2041*53ee8cc1Swenshuai.xi if (BitErr_reg <= 0 )
2042*53ee8cc1Swenshuai.xi *ber = 0.5f / (float)(BitErrPeriod_reg) / 64800.0;
2043*53ee8cc1Swenshuai.xi else
2044*53ee8cc1Swenshuai.xi *ber = (float)BitErr_reg / (float)(BitErrPeriod_reg) / 64800.0;
2045*53ee8cc1Swenshuai.xi
2046*53ee8cc1Swenshuai.xi if (*ber <= 0.0f)
2047*53ee8cc1Swenshuai.xi *ber = 1.0e-10f;
2048*53ee8cc1Swenshuai.xi
2049*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","BER = %8.3e \n ", *ber));
2050*53ee8cc1Swenshuai.xi }
2051*53ee8cc1Swenshuai.xi else
2052*53ee8cc1Swenshuai.xi {
2053*53ee8cc1Swenshuai.xi if (BitErr_reg <= 0 )
2054*53ee8cc1Swenshuai.xi *ber = 0.5f / ((float)BitErrPeriod_reg*128*188*8);
2055*53ee8cc1Swenshuai.xi else
2056*53ee8cc1Swenshuai.xi *ber = (float)BitErr_reg / ((float)BitErrPeriod_reg*128*188*8);
2057*53ee8cc1Swenshuai.xi
2058*53ee8cc1Swenshuai.xi if (*ber <= 0.0f)
2059*53ee8cc1Swenshuai.xi *ber = 1.0e-10f;
2060*53ee8cc1Swenshuai.xi
2061*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","PostVitBER = %8.3e \n ", *ber));
2062*53ee8cc1Swenshuai.xi }
2063*53ee8cc1Swenshuai.xi
2064*53ee8cc1Swenshuai.xi Drv_DVBS_GetPostViterbiBer_PARAM.ret=true;
2065*53ee8cc1Swenshuai.xi }
2066*53ee8cc1Swenshuai.xi
2067*53ee8cc1Swenshuai.xi return Drv_DVBS_GetPostViterbiBer_PARAM.ret;
2068*53ee8cc1Swenshuai.xi }
2069*53ee8cc1Swenshuai.xi #endif
2070*53ee8cc1Swenshuai.xi
2071*53ee8cc1Swenshuai.xi #ifdef UFO_SUPPORT_KERNEL_FLOATING
MDrv_DMD_DVBS_GetBER_Kernel(MS_FLOAT_ST * ber)2072*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetBER_Kernel(MS_FLOAT_ST *ber)
2073*53ee8cc1Swenshuai.xi {
2074*53ee8cc1Swenshuai.xi MS_U16 BitErrPeriod_reg;
2075*53ee8cc1Swenshuai.xi MS_U32 BitErr_reg;
2076*53ee8cc1Swenshuai.xi
2077*53ee8cc1Swenshuai.xi MS_FLOAT_ST temp;
2078*53ee8cc1Swenshuai.xi
2079*53ee8cc1Swenshuai.xi DVBS_GetPostViterbiBer_PARAM Drv_DVBS_GetPostViterbiBer_PARAM;
2080*53ee8cc1Swenshuai.xi Drv_DVBS_GetPostViterbiBer_PARAM.BitErr_reg=&BitErr_reg;
2081*53ee8cc1Swenshuai.xi Drv_DVBS_GetPostViterbiBer_PARAM.BitErrPeriod_reg=&BitErrPeriod_reg;
2082*53ee8cc1Swenshuai.xi Drv_DVBS_GetPostViterbiBer_PARAM.ret=false;
2083*53ee8cc1Swenshuai.xi
2084*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2085*53ee8cc1Swenshuai.xi {
2086*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetPostViterbiBer,&Drv_DVBS_GetPostViterbiBer_PARAM);
2087*53ee8cc1Swenshuai.xi
2088*53ee8cc1Swenshuai.xi if(BitErrPeriod_reg == 0)
2089*53ee8cc1Swenshuai.xi {
2090*53ee8cc1Swenshuai.xi (*ber).DATA = 1;
2091*53ee8cc1Swenshuai.xi (*ber).EXP = 0;
2092*53ee8cc1Swenshuai.xi }
2093*53ee8cc1Swenshuai.xi else if(BitErr_reg == 0)
2094*53ee8cc1Swenshuai.xi {
2095*53ee8cc1Swenshuai.xi (*ber).DATA = 0;
2096*53ee8cc1Swenshuai.xi (*ber).EXP = 0;
2097*53ee8cc1Swenshuai.xi }
2098*53ee8cc1Swenshuai.xi else
2099*53ee8cc1Swenshuai.xi {
2100*53ee8cc1Swenshuai.xi (*ber).DATA = BitErr_reg;
2101*53ee8cc1Swenshuai.xi (*ber).EXP = 0;
2102*53ee8cc1Swenshuai.xi
2103*53ee8cc1Swenshuai.xi if(_bDemodType) //DVBS2
2104*53ee8cc1Swenshuai.xi {
2105*53ee8cc1Swenshuai.xi temp.DATA = BitErrPeriod_reg*64800;
2106*53ee8cc1Swenshuai.xi temp.EXP = 0;
2107*53ee8cc1Swenshuai.xi }
2108*53ee8cc1Swenshuai.xi else
2109*53ee8cc1Swenshuai.xi {
2110*53ee8cc1Swenshuai.xi temp.DATA = BitErrPeriod_reg*128*188*8;
2111*53ee8cc1Swenshuai.xi temp.EXP = 0;
2112*53ee8cc1Swenshuai.xi }
2113*53ee8cc1Swenshuai.xi
2114*53ee8cc1Swenshuai.xi *ber = MS_FLOAT_OP(*ber, temp, divide);
2115*53ee8cc1Swenshuai.xi }
2116*53ee8cc1Swenshuai.xi
2117*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","BER = %d*2^%d \n", (*ber).DATA, (*ber).EXP));
2118*53ee8cc1Swenshuai.xi }
2119*53ee8cc1Swenshuai.xi
2120*53ee8cc1Swenshuai.xi return Drv_DVBS_GetPostViterbiBer_PARAM.ret;
2121*53ee8cc1Swenshuai.xi }
2122*53ee8cc1Swenshuai.xi #endif
MDrv_DMD_DVBS_GetPacketErr(MS_U16 * pktErr)2123*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetPacketErr(MS_U16 *pktErr)
2124*53ee8cc1Swenshuai.xi {
2125*53ee8cc1Swenshuai.xi DVBS_GetPacketErr_PARAM Drv_DVBS_GetPacketErr_PARAM;
2126*53ee8cc1Swenshuai.xi Drv_DVBS_GetPacketErr_PARAM.pktErr=pktErr;
2127*53ee8cc1Swenshuai.xi Drv_DVBS_GetPacketErr_PARAM.ret=false;
2128*53ee8cc1Swenshuai.xi
2129*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2130*53ee8cc1Swenshuai.xi {
2131*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetPacketErr,&Drv_DVBS_GetPacketErr_PARAM);
2132*53ee8cc1Swenshuai.xi }
2133*53ee8cc1Swenshuai.xi
2134*53ee8cc1Swenshuai.xi return Drv_DVBS_GetPacketErr_PARAM.ret;
2135*53ee8cc1Swenshuai.xi }
2136*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_GetCellID(MS_U16 * u16CellID)2137*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetCellID(MS_U16 *u16CellID)
2138*53ee8cc1Swenshuai.xi {
2139*53ee8cc1Swenshuai.xi DVBS_GetCellID_PARAM Drv_DVBS_GetCellID_PARAM;
2140*53ee8cc1Swenshuai.xi Drv_DVBS_GetCellID_PARAM.u16CellID=u16CellID;
2141*53ee8cc1Swenshuai.xi Drv_DVBS_GetCellID_PARAM.ret=false;
2142*53ee8cc1Swenshuai.xi
2143*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2144*53ee8cc1Swenshuai.xi {
2145*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetCellID,&Drv_DVBS_GetCellID_PARAM);
2146*53ee8cc1Swenshuai.xi }
2147*53ee8cc1Swenshuai.xi else
2148*53ee8cc1Swenshuai.xi {
2149*53ee8cc1Swenshuai.xi return false;
2150*53ee8cc1Swenshuai.xi }
2151*53ee8cc1Swenshuai.xi
2152*53ee8cc1Swenshuai.xi return Drv_DVBS_GetCellID_PARAM.ret;
2153*53ee8cc1Swenshuai.xi
2154*53ee8cc1Swenshuai.xi }
2155*53ee8cc1Swenshuai.xi
2156*53ee8cc1Swenshuai.xi
2157*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_GetStatus(DMD_DVBS_MODULATION_TYPE * pQAMMode,MS_U32 * u32SymbolRate,float * pFreqOff)2158*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_GetStatus(DMD_DVBS_MODULATION_TYPE *pQAMMode, MS_U32 *u32SymbolRate, float *pFreqOff)
2159*53ee8cc1Swenshuai.xi {
2160*53ee8cc1Swenshuai.xi MS_S16 s16CFO=0;
2161*53ee8cc1Swenshuai.xi
2162*53ee8cc1Swenshuai.xi DVBS_GetStatus_PARAM Drv_DVBS_GetStatus_PARAM;
2163*53ee8cc1Swenshuai.xi Drv_DVBS_GetStatus_PARAM.pQAMMode=pQAMMode;
2164*53ee8cc1Swenshuai.xi Drv_DVBS_GetStatus_PARAM.u32SymbolRate=u32SymbolRate;
2165*53ee8cc1Swenshuai.xi Drv_DVBS_GetStatus_PARAM.s16CFO=&s16CFO;
2166*53ee8cc1Swenshuai.xi Drv_DVBS_GetStatus_PARAM.ret=false;
2167*53ee8cc1Swenshuai.xi
2168*53ee8cc1Swenshuai.xi //float f_Fc, FreqCfo_offset;
2169*53ee8cc1Swenshuai.xi
2170*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2171*53ee8cc1Swenshuai.xi {
2172*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_GetStatus,&Drv_DVBS_GetStatus_PARAM);
2173*53ee8cc1Swenshuai.xi if(abs(s16CFO)%1000 >= 500)
2174*53ee8cc1Swenshuai.xi {
2175*53ee8cc1Swenshuai.xi if(s16CFO < 0)
2176*53ee8cc1Swenshuai.xi *pFreqOff=(s16CFO/1000)-1.0;
2177*53ee8cc1Swenshuai.xi else
2178*53ee8cc1Swenshuai.xi *pFreqOff=(s16CFO/1000)+1.0;
2179*53ee8cc1Swenshuai.xi }
2180*53ee8cc1Swenshuai.xi else
2181*53ee8cc1Swenshuai.xi *pFreqOff = s16CFO/1000;
2182*53ee8cc1Swenshuai.xi
2183*53ee8cc1Swenshuai.xi *pQAMMode = *(Drv_DVBS_GetStatus_PARAM.pQAMMode);
2184*53ee8cc1Swenshuai.xi *u32SymbolRate = *(Drv_DVBS_GetStatus_PARAM.u32SymbolRate);
2185*53ee8cc1Swenshuai.xi
2186*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
2187*53ee8cc1Swenshuai.xi if (_u8DMD_DVBS_DbgLevel >= DMD_DVBS_DBGLV_INFO)
2188*53ee8cc1Swenshuai.xi {
2189*53ee8cc1Swenshuai.xi ULOGD("DEMOD","MDrv_DMD_DVBS_GetStatus %d %d %f \n", *pQAMMode, *u32SymbolRate, *pFreqOff);
2190*53ee8cc1Swenshuai.xi }
2191*53ee8cc1Swenshuai.xi #endif
2192*53ee8cc1Swenshuai.xi }
2193*53ee8cc1Swenshuai.xi else
2194*53ee8cc1Swenshuai.xi {
2195*53ee8cc1Swenshuai.xi return false;
2196*53ee8cc1Swenshuai.xi }
2197*53ee8cc1Swenshuai.xi
2198*53ee8cc1Swenshuai.xi return Drv_DVBS_GetStatus_PARAM.ret;
2199*53ee8cc1Swenshuai.xi }
2200*53ee8cc1Swenshuai.xi #endif
2201*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_SetPowerState(EN_POWER_MODE u16PowerState)2202*53ee8cc1Swenshuai.xi MS_U32 MDrv_DMD_DVBS_SetPowerState(EN_POWER_MODE u16PowerState)
2203*53ee8cc1Swenshuai.xi {
2204*53ee8cc1Swenshuai.xi DVBS_SetPowerState_PARAM Drv_DVBS_SetPowerState_PARAM;
2205*53ee8cc1Swenshuai.xi Drv_DVBS_SetPowerState_PARAM.u16PowerState=u16PowerState;
2206*53ee8cc1Swenshuai.xi Drv_DVBS_SetPowerState_PARAM.ret_U32=false;
2207*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_SetPowerState\n"));
2208*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2209*53ee8cc1Swenshuai.xi {
2210*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_SetPowerState,&Drv_DVBS_SetPowerState_PARAM);
2211*53ee8cc1Swenshuai.xi }
2212*53ee8cc1Swenshuai.xi else
2213*53ee8cc1Swenshuai.xi {
2214*53ee8cc1Swenshuai.xi return false;
2215*53ee8cc1Swenshuai.xi }
2216*53ee8cc1Swenshuai.xi
2217*53ee8cc1Swenshuai.xi return Drv_DVBS_SetPowerState_PARAM.ret_U32;
2218*53ee8cc1Swenshuai.xi }
2219*53ee8cc1Swenshuai.xi
2220*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_Get_FreqOffset(float * pFreqOff,MS_U8 u8BW)2221*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_Get_FreqOffset(float *pFreqOff, MS_U8 u8BW)
2222*53ee8cc1Swenshuai.xi {
2223*53ee8cc1Swenshuai.xi MS_S16 s16CFO=0;
2224*53ee8cc1Swenshuai.xi DVBS_Get_FreqOffset_PARAM Drv_DVBS_Get_FreqOffset_PARAM;
2225*53ee8cc1Swenshuai.xi Drv_DVBS_Get_FreqOffset_PARAM.s16CFO=&s16CFO;
2226*53ee8cc1Swenshuai.xi Drv_DVBS_Get_FreqOffset_PARAM.bRet=false;
2227*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_Get_FreqOffset\n"));
2228*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2229*53ee8cc1Swenshuai.xi {
2230*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_Get_FreqOffset,&Drv_DVBS_Get_FreqOffset_PARAM);
2231*53ee8cc1Swenshuai.xi if(abs(s16CFO)%1000 >= 500)
2232*53ee8cc1Swenshuai.xi {
2233*53ee8cc1Swenshuai.xi if(s16CFO < 0)
2234*53ee8cc1Swenshuai.xi *pFreqOff=(s16CFO/1000)-1.0;
2235*53ee8cc1Swenshuai.xi else
2236*53ee8cc1Swenshuai.xi *pFreqOff=(s16CFO/1000)+1.0;
2237*53ee8cc1Swenshuai.xi }
2238*53ee8cc1Swenshuai.xi else
2239*53ee8cc1Swenshuai.xi *pFreqOff = s16CFO/1000;
2240*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
2241*53ee8cc1Swenshuai.xi ULOGD("DEMOD","MDrv_DMD_DVBS_Get_FreqOffset %f \n", *pFreqOff);
2242*53ee8cc1Swenshuai.xi #endif
2243*53ee8cc1Swenshuai.xi //DBG_INTERN_DVBS(printf(">>> INTERN_DVBS_Get_FreqOffset *pFreqOff = %d[MHz] <<<\n", (MS_S16)*pFreqOff));
2244*53ee8cc1Swenshuai.xi }
2245*53ee8cc1Swenshuai.xi else
2246*53ee8cc1Swenshuai.xi {
2247*53ee8cc1Swenshuai.xi return false;
2248*53ee8cc1Swenshuai.xi }
2249*53ee8cc1Swenshuai.xi
2250*53ee8cc1Swenshuai.xi return Drv_DVBS_Get_FreqOffset_PARAM.bRet;
2251*53ee8cc1Swenshuai.xi }
2252*53ee8cc1Swenshuai.xi #endif
2253*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_BlindScan_Start(MS_U16 u16StartFreq,MS_U16 u16EndFreq)2254*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_BlindScan_Start(MS_U16 u16StartFreq, MS_U16 u16EndFreq)
2255*53ee8cc1Swenshuai.xi {
2256*53ee8cc1Swenshuai.xi DVBS_BlindScan_Start_PARAM Drv_DVBS_BlindScan_Start_PARAM;
2257*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Start_PARAM.u16StartFreq=u16StartFreq;
2258*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Start_PARAM.u16EndFreq=u16EndFreq;
2259*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Start_PARAM.bRet=false;
2260*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_BlindScan_Start\n"));
2261*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2262*53ee8cc1Swenshuai.xi {
2263*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_BlindScan_Start,&Drv_DVBS_BlindScan_Start_PARAM);
2264*53ee8cc1Swenshuai.xi }
2265*53ee8cc1Swenshuai.xi else
2266*53ee8cc1Swenshuai.xi {
2267*53ee8cc1Swenshuai.xi return false;
2268*53ee8cc1Swenshuai.xi }
2269*53ee8cc1Swenshuai.xi
2270*53ee8cc1Swenshuai.xi return Drv_DVBS_BlindScan_Start_PARAM.bRet;
2271*53ee8cc1Swenshuai.xi }
2272*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_BlindScan_NextFreq(MS_BOOL * bBlindScanEnd)2273*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_BlindScan_NextFreq(MS_BOOL* bBlindScanEnd)
2274*53ee8cc1Swenshuai.xi {
2275*53ee8cc1Swenshuai.xi DVBS_BlindScan_NextFreq_PARAM Drv_DVBS_BlindScan_NextFreq_PARAM;
2276*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_NextFreq_PARAM.bBlindScanEnd=bBlindScanEnd;
2277*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_NextFreq_PARAM.bRet=false;
2278*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_BlindScan_NextFreq\n"));
2279*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2280*53ee8cc1Swenshuai.xi {
2281*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_BlindScan_NextFreq,&Drv_DVBS_BlindScan_NextFreq_PARAM);
2282*53ee8cc1Swenshuai.xi }
2283*53ee8cc1Swenshuai.xi else
2284*53ee8cc1Swenshuai.xi {
2285*53ee8cc1Swenshuai.xi return false;
2286*53ee8cc1Swenshuai.xi }
2287*53ee8cc1Swenshuai.xi
2288*53ee8cc1Swenshuai.xi return Drv_DVBS_BlindScan_NextFreq_PARAM.bRet;
2289*53ee8cc1Swenshuai.xi }
2290*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_BlindScan_Cancel(void)2291*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_BlindScan_Cancel(void)
2292*53ee8cc1Swenshuai.xi {
2293*53ee8cc1Swenshuai.xi DVBS_BlindScan_Cancel_PARAM Drv_DVBS_BlindScan_Cancel_PARAM;
2294*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Cancel_PARAM.bRet=false;
2295*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_BlindScan_Cancel\n"));
2296*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2297*53ee8cc1Swenshuai.xi {
2298*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_BlindScan_Cancel,&Drv_DVBS_BlindScan_Cancel_PARAM);
2299*53ee8cc1Swenshuai.xi }
2300*53ee8cc1Swenshuai.xi else
2301*53ee8cc1Swenshuai.xi {
2302*53ee8cc1Swenshuai.xi return false;
2303*53ee8cc1Swenshuai.xi }
2304*53ee8cc1Swenshuai.xi
2305*53ee8cc1Swenshuai.xi return Drv_DVBS_BlindScan_Cancel_PARAM.bRet;
2306*53ee8cc1Swenshuai.xi }
2307*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_BlindScan_End(void)2308*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_BlindScan_End(void)
2309*53ee8cc1Swenshuai.xi {
2310*53ee8cc1Swenshuai.xi DVBS_BlindScan_End_PARAM Drv_DVBS_Blindscan_End_PARAM;
2311*53ee8cc1Swenshuai.xi Drv_DVBS_Blindscan_End_PARAM.bRet=false;
2312*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_BlindScan_End\n"));
2313*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2314*53ee8cc1Swenshuai.xi {
2315*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_BlindScan_End,&Drv_DVBS_Blindscan_End_PARAM);
2316*53ee8cc1Swenshuai.xi }
2317*53ee8cc1Swenshuai.xi else
2318*53ee8cc1Swenshuai.xi {
2319*53ee8cc1Swenshuai.xi return false;
2320*53ee8cc1Swenshuai.xi }
2321*53ee8cc1Swenshuai.xi
2322*53ee8cc1Swenshuai.xi return Drv_DVBS_Blindscan_End_PARAM.bRet;
2323*53ee8cc1Swenshuai.xi }
2324*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_BlindScan_GetChannel(MS_U16 u16ReadStart,MS_U16 * u16TPNum,HAL_DEMOD_MS_FE_CARRIER_PARAM * pTable)2325*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_BlindScan_GetChannel(MS_U16 u16ReadStart, MS_U16* u16TPNum, HAL_DEMOD_MS_FE_CARRIER_PARAM *pTable)
2326*53ee8cc1Swenshuai.xi {
2327*53ee8cc1Swenshuai.xi DVBS_BlindScan_GetChannel_PARAM Drv_DVBS_BlindScan_Getchannel_PARAM;
2328*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Getchannel_PARAM.u16ReadStart=u16ReadStart;
2329*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Getchannel_PARAM.u16TPNum=u16TPNum;
2330*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Getchannel_PARAM.pTable=pTable;
2331*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_Getchannel_PARAM.bRet=false;
2332*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_BlindScan_GetChannel\n"));
2333*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2334*53ee8cc1Swenshuai.xi {
2335*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_BlindScan_GetChannel,&Drv_DVBS_BlindScan_Getchannel_PARAM);
2336*53ee8cc1Swenshuai.xi }
2337*53ee8cc1Swenshuai.xi else
2338*53ee8cc1Swenshuai.xi {
2339*53ee8cc1Swenshuai.xi return false;
2340*53ee8cc1Swenshuai.xi }
2341*53ee8cc1Swenshuai.xi
2342*53ee8cc1Swenshuai.xi return Drv_DVBS_BlindScan_Getchannel_PARAM.bRet;
2343*53ee8cc1Swenshuai.xi }
2344*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_BlindScan_GetCurrentFreq(MS_U32 * u32CurrentFreq)2345*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_BlindScan_GetCurrentFreq(MS_U32 *u32CurrentFreq)
2346*53ee8cc1Swenshuai.xi {
2347*53ee8cc1Swenshuai.xi DVBS_BlindScan_GetCurrentFreq_PARAM Drv_DVBS_BlindScan_GetCurrentFreq_PARAM;
2348*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_GetCurrentFreq_PARAM.u32CurrentFreq=u32CurrentFreq;
2349*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_GetCurrentFreq_PARAM.bRet=false;
2350*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_BlindScan_GetCurrentFreq\n"));
2351*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2352*53ee8cc1Swenshuai.xi {
2353*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_BlindScan_GetCurrentFreq,&Drv_DVBS_BlindScan_GetCurrentFreq_PARAM);
2354*53ee8cc1Swenshuai.xi }
2355*53ee8cc1Swenshuai.xi else
2356*53ee8cc1Swenshuai.xi {
2357*53ee8cc1Swenshuai.xi return false;
2358*53ee8cc1Swenshuai.xi }
2359*53ee8cc1Swenshuai.xi
2360*53ee8cc1Swenshuai.xi return Drv_DVBS_BlindScan_GetCurrentFreq_PARAM.bRet;
2361*53ee8cc1Swenshuai.xi }
2362*53ee8cc1Swenshuai.xi
2363*53ee8cc1Swenshuai.xi #ifndef MSOS_TYPE_LINUX_KERNEL
MDrv_DMD_DVBS_BlindScan_WaitCurFreqFinished(MS_U8 * u8Progress,MS_U8 * u8FindNum)2364*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_BlindScan_WaitCurFreqFinished(MS_U8* u8Progress,MS_U8 *u8FindNum)
2365*53ee8cc1Swenshuai.xi {
2366*53ee8cc1Swenshuai.xi MS_U8 substate_reg=2;
2367*53ee8cc1Swenshuai.xi MS_U32 u32Data=0;
2368*53ee8cc1Swenshuai.xi MS_U16 symbolrate_reg=0;
2369*53ee8cc1Swenshuai.xi MS_U16 CFO_reg;
2370*53ee8cc1Swenshuai.xi DVBS_BlindScan_WaitCurFreqFinished_PARAM Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM;
2371*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM.u8Progress=u8Progress;
2372*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM.u8FindNum=u8FindNum;
2373*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM.substate_reg=&substate_reg;
2374*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM.u32Data=&u32Data;
2375*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM.symbolrate_reg=&symbolrate_reg;
2376*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM.CFO_reg=&CFO_reg;
2377*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM.bRet=false;
2378*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_BlindScan_WaitCurFreqFinished\n"));
2379*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2380*53ee8cc1Swenshuai.xi {
2381*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_BlindScan_WaitCurFreqFinished,&Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM);
2382*53ee8cc1Swenshuai.xi
2383*53ee8cc1Swenshuai.xi substate_reg = *Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM.substate_reg;
2384*53ee8cc1Swenshuai.xi u32Data = *Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM.u32Data;
2385*53ee8cc1Swenshuai.xi symbolrate_reg = *Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM.symbolrate_reg;
2386*53ee8cc1Swenshuai.xi CFO_reg = *Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM.CFO_reg;
2387*53ee8cc1Swenshuai.xi //CFO_reg = 0;
2388*53ee8cc1Swenshuai.xi
2389*53ee8cc1Swenshuai.xi if(substate_reg==0)
2390*53ee8cc1Swenshuai.xi {
2391*53ee8cc1Swenshuai.xi _u16ChannelInfoArray[0][_u16ChannelInfoIndex]=((u32Data+500)/1000);
2392*53ee8cc1Swenshuai.xi _u16LockedCenterFreq=((u32Data+500)/1000); //Center Freq
2393*53ee8cc1Swenshuai.xi _u16ChannelInfoArray[1][_u16ChannelInfoIndex]=(symbolrate_reg);//Symbol Rate
2394*53ee8cc1Swenshuai.xi _u16LockedSymbolRate=symbolrate_reg;
2395*53ee8cc1Swenshuai.xi _u16ChannelInfoIndex++;
2396*53ee8cc1Swenshuai.xi *u8FindNum=_u16ChannelInfoIndex;
2397*53ee8cc1Swenshuai.xi if (CFO_reg*1000 >= 0x8000)
2398*53ee8cc1Swenshuai.xi {
2399*53ee8cc1Swenshuai.xi CFO_reg=0x10000- CFO_reg*1000;
2400*53ee8cc1Swenshuai.xi _s16CurrentCFO=-1*CFO_reg/1000;
2401*53ee8cc1Swenshuai.xi }
2402*53ee8cc1Swenshuai.xi else
2403*53ee8cc1Swenshuai.xi {
2404*53ee8cc1Swenshuai.xi _s16CurrentCFO=CFO_reg;
2405*53ee8cc1Swenshuai.xi }
2406*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","Current Locked CF:%d BW:%d CFO:%d \n ", _u16LockedCenterFreq, _u16LockedSymbolRate, _s16CurrentCFO));
2407*53ee8cc1Swenshuai.xi }
2408*53ee8cc1Swenshuai.xi else if(substate_reg==1)
2409*53ee8cc1Swenshuai.xi {
2410*53ee8cc1Swenshuai.xi if (CFO_reg*1000 >= 0x8000)
2411*53ee8cc1Swenshuai.xi {
2412*53ee8cc1Swenshuai.xi CFO_reg=0x1000- CFO_reg*1000;
2413*53ee8cc1Swenshuai.xi _s16CurrentCFO=-1*CFO_reg/1000;
2414*53ee8cc1Swenshuai.xi }
2415*53ee8cc1Swenshuai.xi else
2416*53ee8cc1Swenshuai.xi {
2417*53ee8cc1Swenshuai.xi _s16CurrentCFO=CFO_reg;
2418*53ee8cc1Swenshuai.xi }
2419*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","Pre Locked CF:%d BW:%d CFO:%d \n ", _u16LockedCenterFreq, _u16LockedSymbolRate, _s16CurrentCFO));
2420*53ee8cc1Swenshuai.xi }
2421*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","MDrv_Demod_BlindScan_WaitCurFreqFinished- u8Progress: %d u8FindNum %d\n", *u8Progress, *u8FindNum));
2422*53ee8cc1Swenshuai.xi
2423*53ee8cc1Swenshuai.xi }
2424*53ee8cc1Swenshuai.xi else
2425*53ee8cc1Swenshuai.xi {
2426*53ee8cc1Swenshuai.xi return false;
2427*53ee8cc1Swenshuai.xi }
2428*53ee8cc1Swenshuai.xi
2429*53ee8cc1Swenshuai.xi return Drv_DVBS_BlindScan_WaitCurFreqFinished_PARAM.bRet;
2430*53ee8cc1Swenshuai.xi }
2431*53ee8cc1Swenshuai.xi #endif
2432*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_BlindScan_GetTunerFreq_EX(MS_U16 * u16TunerCenterFreq,MS_U16 * u16TunerCutOffFreq)2433*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_BlindScan_GetTunerFreq_EX(MS_U16 *u16TunerCenterFreq, MS_U16 *u16TunerCutOffFreq)
2434*53ee8cc1Swenshuai.xi {
2435*53ee8cc1Swenshuai.xi DVBS_BlindScan_GetTunerFreq_PARAM Drv_DVBS_BlindScan_GetTunerFreq_PARAM;
2436*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_GetTunerFreq_PARAM.u16TunerCenterFreq=u16TunerCenterFreq;
2437*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_GetTunerFreq_PARAM.u16TunerCutOffFreq=u16TunerCutOffFreq;
2438*53ee8cc1Swenshuai.xi Drv_DVBS_BlindScan_GetTunerFreq_PARAM.bRet=false;
2439*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_BlindScan_GetTunerFreq_EX\n"));
2440*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2441*53ee8cc1Swenshuai.xi {
2442*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_BlindScan_GetTunerFreq,&Drv_DVBS_BlindScan_GetTunerFreq_PARAM);
2443*53ee8cc1Swenshuai.xi }
2444*53ee8cc1Swenshuai.xi else
2445*53ee8cc1Swenshuai.xi {
2446*53ee8cc1Swenshuai.xi return false;
2447*53ee8cc1Swenshuai.xi }
2448*53ee8cc1Swenshuai.xi
2449*53ee8cc1Swenshuai.xi return Drv_DVBS_BlindScan_GetTunerFreq_PARAM.bRet;
2450*53ee8cc1Swenshuai.xi }
2451*53ee8cc1Swenshuai.xi
2452*53ee8cc1Swenshuai.xi //------------------------------------------------------------------------------
MDrv_DMD_DVBS_DiSEqC_Init(void)2453*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_DiSEqC_Init(void)
2454*53ee8cc1Swenshuai.xi {
2455*53ee8cc1Swenshuai.xi DVBS_DiSEqC_Init_PARAM Drv_DVBS_DiSEqC_Init_PARAM;
2456*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_Init_PARAM.bRet=false;
2457*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_DiSEqC_Init\n"));
2458*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2459*53ee8cc1Swenshuai.xi {
2460*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_DiSEqC_Init,&Drv_DVBS_DiSEqC_Init_PARAM);
2461*53ee8cc1Swenshuai.xi }
2462*53ee8cc1Swenshuai.xi else
2463*53ee8cc1Swenshuai.xi {
2464*53ee8cc1Swenshuai.xi return false;
2465*53ee8cc1Swenshuai.xi }
2466*53ee8cc1Swenshuai.xi return Drv_DVBS_DiSEqC_Init_PARAM.bRet;
2467*53ee8cc1Swenshuai.xi }
2468*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_DiSEqC_SetLNBOut(MS_BOOL bLow)2469*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_DiSEqC_SetLNBOut(MS_BOOL bLow)
2470*53ee8cc1Swenshuai.xi {
2471*53ee8cc1Swenshuai.xi DVBS_DiSEqC_SetLNBOut_PARAM Drv_DVBS_DiSEqC_SetLNBOut_PARAM;
2472*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_SetLNBOut_PARAM.bLow=bLow;
2473*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_SetLNBOut_PARAM.bRet=false;
2474*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_DiSEqC_SetLNBOut\n"));
2475*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2476*53ee8cc1Swenshuai.xi {
2477*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_DiSEqC_SetLNBOut,&Drv_DVBS_DiSEqC_SetLNBOut_PARAM);
2478*53ee8cc1Swenshuai.xi }
2479*53ee8cc1Swenshuai.xi else
2480*53ee8cc1Swenshuai.xi {
2481*53ee8cc1Swenshuai.xi return false;
2482*53ee8cc1Swenshuai.xi }
2483*53ee8cc1Swenshuai.xi return Drv_DVBS_DiSEqC_SetLNBOut_PARAM.bRet;
2484*53ee8cc1Swenshuai.xi }
2485*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_DiSEqC_GetLNBOut(MS_BOOL * bLNBOutLow)2486*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_DiSEqC_GetLNBOut(MS_BOOL* bLNBOutLow)
2487*53ee8cc1Swenshuai.xi {
2488*53ee8cc1Swenshuai.xi DVBS_DiSEqC_GetLNBOut_PARAM Drv_DVBS_DiSEqC_GetLNBOut_PARAM;
2489*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_GetLNBOut_PARAM.bLNBOutLow=bLNBOutLow;
2490*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_GetLNBOut_PARAM.bRet=false;
2491*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_DiSEqC_GetLNBOut\n"));
2492*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2493*53ee8cc1Swenshuai.xi {
2494*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_DiSEqC_GetLNBOut,&Drv_DVBS_DiSEqC_GetLNBOut_PARAM);
2495*53ee8cc1Swenshuai.xi }
2496*53ee8cc1Swenshuai.xi else
2497*53ee8cc1Swenshuai.xi {
2498*53ee8cc1Swenshuai.xi return false;
2499*53ee8cc1Swenshuai.xi }
2500*53ee8cc1Swenshuai.xi return Drv_DVBS_DiSEqC_GetLNBOut_PARAM.bRet;
2501*53ee8cc1Swenshuai.xi }
2502*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_DiSEqC_Set22kOnOff(MS_BOOL b22kOn)2503*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_DiSEqC_Set22kOnOff(MS_BOOL b22kOn)
2504*53ee8cc1Swenshuai.xi {
2505*53ee8cc1Swenshuai.xi DVBS_DiSEqC_Set22kOnOff_PARAM Drv_DVBS_DiSEqC_Set22kOnOff_PARAM;
2506*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_Set22kOnOff_PARAM.b22kOn=b22kOn;
2507*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_Set22kOnOff_PARAM.bRet=false;
2508*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_DiSEqC_Set22kOnOff\n"));
2509*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2510*53ee8cc1Swenshuai.xi {
2511*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_DiSEqC_Set22kOnOff,&Drv_DVBS_DiSEqC_Set22kOnOff_PARAM);
2512*53ee8cc1Swenshuai.xi }
2513*53ee8cc1Swenshuai.xi else
2514*53ee8cc1Swenshuai.xi {
2515*53ee8cc1Swenshuai.xi return false;
2516*53ee8cc1Swenshuai.xi }
2517*53ee8cc1Swenshuai.xi return Drv_DVBS_DiSEqC_Set22kOnOff_PARAM.bRet;
2518*53ee8cc1Swenshuai.xi }
2519*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_DiSEqC_Get22kOnOff(MS_BOOL * b22kOn)2520*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_DiSEqC_Get22kOnOff(MS_BOOL* b22kOn)
2521*53ee8cc1Swenshuai.xi {
2522*53ee8cc1Swenshuai.xi DVBS_DiSEqC_Get22kOnOff_PARAM Drv_DVBS_DiSEqC_Get22kOnOff_PARAM;
2523*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_Get22kOnOff_PARAM.b22kOn=b22kOn;
2524*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_Get22kOnOff_PARAM.bRet=false;
2525*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_DiSEqC_Get22kOnOff\n"));
2526*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2527*53ee8cc1Swenshuai.xi {
2528*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_DiSEqC_Get22kOnOff,&Drv_DVBS_DiSEqC_Get22kOnOff_PARAM);
2529*53ee8cc1Swenshuai.xi }
2530*53ee8cc1Swenshuai.xi else
2531*53ee8cc1Swenshuai.xi {
2532*53ee8cc1Swenshuai.xi return false;
2533*53ee8cc1Swenshuai.xi }
2534*53ee8cc1Swenshuai.xi return Drv_DVBS_DiSEqC_Get22kOnOff_PARAM.bRet;
2535*53ee8cc1Swenshuai.xi }
2536*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_DiSEqC_SendCmd(MS_U8 * pCmd,MS_U8 u8CmdSize)2537*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_DiSEqC_SendCmd(MS_U8* pCmd,MS_U8 u8CmdSize)
2538*53ee8cc1Swenshuai.xi {
2539*53ee8cc1Swenshuai.xi DVBS_DiSEqC_SendCmd_PARAM Drv_DVBS_DiSEqC_SendCmd_PARAM;
2540*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_SendCmd_PARAM.pCmd=pCmd;
2541*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_SendCmd_PARAM.u8CmdSize=u8CmdSize;
2542*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_SendCmd_PARAM.bRet=false;
2543*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_DiSEqC_SendCmd\n"));
2544*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2545*53ee8cc1Swenshuai.xi {
2546*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_DiSEqC_SendCmd,&Drv_DVBS_DiSEqC_SendCmd_PARAM);
2547*53ee8cc1Swenshuai.xi }
2548*53ee8cc1Swenshuai.xi else
2549*53ee8cc1Swenshuai.xi {
2550*53ee8cc1Swenshuai.xi return false;
2551*53ee8cc1Swenshuai.xi }
2552*53ee8cc1Swenshuai.xi return Drv_DVBS_DiSEqC_SendCmd_PARAM.bRet;
2553*53ee8cc1Swenshuai.xi }
2554*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_DiSEqC_SetTxToneMode(MS_BOOL bTxTone22kOff)2555*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_DiSEqC_SetTxToneMode(MS_BOOL bTxTone22kOff)
2556*53ee8cc1Swenshuai.xi {
2557*53ee8cc1Swenshuai.xi DVBS_DiSEqC_SetTxToneMode_PARAM Drv_DVBS_DiSEqC_SetTxToneMode_PARAM;
2558*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_SetTxToneMode_PARAM.bTxTone22kOff=bTxTone22kOff;
2559*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_SetTxToneMode_PARAM.bRet=false;
2560*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_DiSEqC_SetTxToneMode\n"));
2561*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2562*53ee8cc1Swenshuai.xi {
2563*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_DiSEqC_SetTxToneMode,&Drv_DVBS_DiSEqC_SetTxToneMode_PARAM);
2564*53ee8cc1Swenshuai.xi }
2565*53ee8cc1Swenshuai.xi else
2566*53ee8cc1Swenshuai.xi {
2567*53ee8cc1Swenshuai.xi return false;
2568*53ee8cc1Swenshuai.xi }
2569*53ee8cc1Swenshuai.xi return Drv_DVBS_DiSEqC_SetTxToneMode_PARAM.bRet;
2570*53ee8cc1Swenshuai.xi }
2571*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_DiSEqC_SetTone(MS_BOOL bTone1)2572*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_DiSEqC_SetTone(MS_BOOL bTone1)
2573*53ee8cc1Swenshuai.xi {
2574*53ee8cc1Swenshuai.xi DVBS_DiSEqC_SetTone_PARAM Drv_DVBS_DiSEqC_SetTone_PARAM;
2575*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_SetTone_PARAM.bTone1=bTone1;
2576*53ee8cc1Swenshuai.xi Drv_DVBS_DiSEqC_SetTone_PARAM.bRet=false;
2577*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_DiSEqC_SetTone\n"));
2578*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2579*53ee8cc1Swenshuai.xi {
2580*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_DiSEqC_SetTone,&Drv_DVBS_DiSEqC_SetTone_PARAM);
2581*53ee8cc1Swenshuai.xi }
2582*53ee8cc1Swenshuai.xi else
2583*53ee8cc1Swenshuai.xi {
2584*53ee8cc1Swenshuai.xi return false;
2585*53ee8cc1Swenshuai.xi }
2586*53ee8cc1Swenshuai.xi return Drv_DVBS_DiSEqC_SetTone_PARAM.bRet;
2587*53ee8cc1Swenshuai.xi }
2588*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS_UnicableAGCCheckPower(MS_BOOL pbAGCCheckPower)2589*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_UnicableAGCCheckPower(MS_BOOL pbAGCCheckPower)
2590*53ee8cc1Swenshuai.xi {
2591*53ee8cc1Swenshuai.xi DVBS_UnicableAGCCheckPower_PARAM Drv_DVBS_UnicableAGCCheckPower_PARAM;
2592*53ee8cc1Swenshuai.xi Drv_DVBS_UnicableAGCCheckPower_PARAM.pbAGCCheckPower=pbAGCCheckPower;
2593*53ee8cc1Swenshuai.xi Drv_DVBS_UnicableAGCCheckPower_PARAM.bRet=false;
2594*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS_UnicableAGCCheckPower\n"));
2595*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2596*53ee8cc1Swenshuai.xi {
2597*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant,DMD_DVBS_DRV_CMD_UnicableAGCCheckPower,&Drv_DVBS_UnicableAGCCheckPower_PARAM);
2598*53ee8cc1Swenshuai.xi }
2599*53ee8cc1Swenshuai.xi else
2600*53ee8cc1Swenshuai.xi {
2601*53ee8cc1Swenshuai.xi return false;
2602*53ee8cc1Swenshuai.xi }
2603*53ee8cc1Swenshuai.xi return Drv_DVBS_UnicableAGCCheckPower_PARAM.bRet;
2604*53ee8cc1Swenshuai.xi }
2605*53ee8cc1Swenshuai.xi
2606*53ee8cc1Swenshuai.xi #if defined UFO_SUPPORT_VCM || defined UFO_DEMOD_DVBS_SUPPORT_DMD_INT
MDrv_DMD_DVBS2_TS_DivNum_Calculation(void)2607*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS2_TS_DivNum_Calculation(void)
2608*53ee8cc1Swenshuai.xi {
2609*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS2_TS_DivNum_Calculation\n"));
2610*53ee8cc1Swenshuai.xi
2611*53ee8cc1Swenshuai.xi MS_U32 u32SymbolRate=0;
2612*53ee8cc1Swenshuai.xi //float fSymbolRate;
2613*53ee8cc1Swenshuai.xi //MS_U8 ISSY_EN = 0;
2614*53ee8cc1Swenshuai.xi MS_U8 code_rate_idx = 0;
2615*53ee8cc1Swenshuai.xi MS_U8 pilot_flag = 0;
2616*53ee8cc1Swenshuai.xi MS_U8 fec_type_idx = 0;
2617*53ee8cc1Swenshuai.xi MS_U16 k_bch_array[2][42] =
2618*53ee8cc1Swenshuai.xi {
2619*53ee8cc1Swenshuai.xi {
2620*53ee8cc1Swenshuai.xi 16008, 21408, 25728, 32208, 38688, 43040, 48408, 51648, 53840, 57472,
2621*53ee8cc1Swenshuai.xi 58192, 14208, 18528, 28968, 32208, 34368, 35448, 35808, 37248, 37248,
2622*53ee8cc1Swenshuai.xi 38688, 40128, 41208, 41568, 43008, 44448, 44808, 45888, 46608, 47328,
2623*53ee8cc1Swenshuai.xi 47328, 48408, 50208, 50208, 55248, 0, 0, 0, 0, 0,
2624*53ee8cc1Swenshuai.xi 0, 0,
2625*53ee8cc1Swenshuai.xi },
2626*53ee8cc1Swenshuai.xi {
2627*53ee8cc1Swenshuai.xi 3072, 5232, 6312, 7032, 9552, 10632, 11712, 12432, 13152, 14232,
2628*53ee8cc1Swenshuai.xi 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2629*53ee8cc1Swenshuai.xi 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2630*53ee8cc1Swenshuai.xi 0, 0, 0, 0, 0, 3792, 4152, 4872, 7392, 8472,
2631*53ee8cc1Swenshuai.xi 9192, 11352
2632*53ee8cc1Swenshuai.xi }
2633*53ee8cc1Swenshuai.xi };
2634*53ee8cc1Swenshuai.xi MS_U16 n_ldpc_array[2] = {64800, 16200};
2635*53ee8cc1Swenshuai.xi
2636*53ee8cc1Swenshuai.xi MS_FLOAT pilot_term = 0;
2637*53ee8cc1Swenshuai.xi MS_FLOAT k_bch;
2638*53ee8cc1Swenshuai.xi MS_FLOAT n_ldpc;
2639*53ee8cc1Swenshuai.xi MS_FLOAT ts_div_num_offset = 1.5;
2640*53ee8cc1Swenshuai.xi MS_FLOAT ts_div_num_margin_ratio = 1.03;
2641*53ee8cc1Swenshuai.xi MS_FLOAT ftmp;
2642*53ee8cc1Swenshuai.xi MS_U32 u32temp;
2643*53ee8cc1Swenshuai.xi MS_U8 system_type_reg;
2644*53ee8cc1Swenshuai.xi MS_U8 code_rate_reg;
2645*53ee8cc1Swenshuai.xi MS_FLOAT fTSDivNum;
2646*53ee8cc1Swenshuai.xi MS_U8 u8Data;
2647*53ee8cc1Swenshuai.xi MS_BOOL status = TRUE;
2648*53ee8cc1Swenshuai.xi
2649*53ee8cc1Swenshuai.xi DVBS_GetTsDivNum_PARAM Drv_DVBS_GetTsDivNum_PARAM;
2650*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.u32SymbolRate=&u32SymbolRate;
2651*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.system_type_reg=&system_type_reg;
2652*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.code_rate_idx=&code_rate_idx;
2653*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.fec_type_idx=&fec_type_idx;
2654*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.pilot_flag=&pilot_flag;
2655*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.u32temp=&u32temp;
2656*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.code_rate_reg=&code_rate_reg;
2657*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.bRet=false;
2658*53ee8cc1Swenshuai.xi
2659*53ee8cc1Swenshuai.xi if(u8DemodLockFlag==1)
2660*53ee8cc1Swenshuai.xi {
2661*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant, DMD_DVBS_DRV_CMD_GetTsDivNum, &Drv_DVBS_GetTsDivNum_PARAM);
2662*53ee8cc1Swenshuai.xi status &= Drv_DVBS_GetTsDivNum_PARAM.bRet;
2663*53ee8cc1Swenshuai.xi
2664*53ee8cc1Swenshuai.xi if(!system_type_reg)//DVBS2
2665*53ee8cc1Swenshuai.xi {
2666*53ee8cc1Swenshuai.xi k_bch = k_bch_array[fec_type_idx][code_rate_idx];
2667*53ee8cc1Swenshuai.xi n_ldpc = n_ldpc_array[fec_type_idx];
2668*53ee8cc1Swenshuai.xi pilot_term = ((float) n_ldpc / modulation_order / 1440 * 36) * pilot_flag;
2669*53ee8cc1Swenshuai.xi
2670*53ee8cc1Swenshuai.xi //data rate
2671*53ee8cc1Swenshuai.xi ftmp = k_bch/((n_ldpc/modulation_order+90+pilot_term)/u32SymbolRate);
2672*53ee8cc1Swenshuai.xi
2673*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)//serial mode
2674*53ee8cc1Swenshuai.xi {
2675*53ee8cc1Swenshuai.xi fTSDivNum = 288000.0 / ftmp / 2.0 - 1;
2676*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1;// since 288/(2(fTSDivNum+1)) = 288/TS_RATE = A ==> fTSDivNum = A/2-1
2677*53ee8cc1Swenshuai.xi }
2678*53ee8cc1Swenshuai.xi else//parallel mode
2679*53ee8cc1Swenshuai.xi {
2680*53ee8cc1Swenshuai.xi fTSDivNum = 288000.0 / (ftmp/8.0) / 2.0 - 1;
2681*53ee8cc1Swenshuai.xi //fTSDivNum = (fTSDivNum-1)/2;
2682*53ee8cc1Swenshuai.xi }
2683*53ee8cc1Swenshuai.xi
2684*53ee8cc1Swenshuai.xi fTSDivNum -= ts_div_num_offset;
2685*53ee8cc1Swenshuai.xi }
2686*53ee8cc1Swenshuai.xi else
2687*53ee8cc1Swenshuai.xi {
2688*53ee8cc1Swenshuai.xi code_rate_reg = *Drv_DVBS_GetTsDivNum_PARAM.code_rate_reg;
2689*53ee8cc1Swenshuai.xi switch (code_rate_reg)
2690*53ee8cc1Swenshuai.xi {
2691*53ee8cc1Swenshuai.xi case 0x00: //CR 1/2
2692*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)
2693*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((1.0/2.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2)) /2)-ts_div_num_offset;
2694*53ee8cc1Swenshuai.xi else
2695*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((1.0/2.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2/8.0))/2)-ts_div_num_offset;
2696*53ee8cc1Swenshuai.xi
2697*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1-5;
2698*53ee8cc1Swenshuai.xi
2699*53ee8cc1Swenshuai.xi break;
2700*53ee8cc1Swenshuai.xi case 0x01: //CR 2/3
2701*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)
2702*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((2.0/3.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2)) /2)-ts_div_num_offset;
2703*53ee8cc1Swenshuai.xi else
2704*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((2.0/3.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2/8.0))/2)-ts_div_num_offset;
2705*53ee8cc1Swenshuai.xi
2706*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1-5;
2707*53ee8cc1Swenshuai.xi
2708*53ee8cc1Swenshuai.xi break;
2709*53ee8cc1Swenshuai.xi case 0x02: //CR 3/4
2710*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)
2711*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((3.0/4.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2)) /2)-ts_div_num_offset;
2712*53ee8cc1Swenshuai.xi else
2713*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((3.0/4.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2/8.0))/2)-ts_div_num_offset;
2714*53ee8cc1Swenshuai.xi
2715*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1-5;
2716*53ee8cc1Swenshuai.xi break;
2717*53ee8cc1Swenshuai.xi case 0x03: //CR 5/6
2718*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)
2719*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((5.0/6.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2)) /2)-ts_div_num_offset;
2720*53ee8cc1Swenshuai.xi else
2721*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((5.0/6.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2/8.0))/2)-ts_div_num_offset;
2722*53ee8cc1Swenshuai.xi
2723*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1-5;
2724*53ee8cc1Swenshuai.xi
2725*53ee8cc1Swenshuai.xi break;
2726*53ee8cc1Swenshuai.xi case 0x04: //CR 7/8
2727*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)
2728*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2)) /2)-ts_div_num_offset;
2729*53ee8cc1Swenshuai.xi else
2730*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2/8.0))/2)-ts_div_num_offset;
2731*53ee8cc1Swenshuai.xi
2732*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1-5;
2733*53ee8cc1Swenshuai.xi
2734*53ee8cc1Swenshuai.xi break;
2735*53ee8cc1Swenshuai.xi default:
2736*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)
2737*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2)) /2)-ts_div_num_offset;
2738*53ee8cc1Swenshuai.xi else
2739*53ee8cc1Swenshuai.xi fTSDivNum = ((288000/((7.0/8.0)*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2/8.0))/2)-ts_div_num_offset;
2740*53ee8cc1Swenshuai.xi
2741*53ee8cc1Swenshuai.xi //fTSDivNum = fTSDivNum/2-1-5;
2742*53ee8cc1Swenshuai.xi
2743*53ee8cc1Swenshuai.xi break;
2744*53ee8cc1Swenshuai.xi }
2745*53ee8cc1Swenshuai.xi }
2746*53ee8cc1Swenshuai.xi
2747*53ee8cc1Swenshuai.xi if(fTSDivNum > 0x1F)
2748*53ee8cc1Swenshuai.xi fTSDivNum = 0x1F;
2749*53ee8cc1Swenshuai.xi else if(fTSDivNum < 0x01)
2750*53ee8cc1Swenshuai.xi fTSDivNum = 0x01;
2751*53ee8cc1Swenshuai.xi
2752*53ee8cc1Swenshuai.xi u8Data = (MS_U8)fTSDivNum;
2753*53ee8cc1Swenshuai.xi
2754*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
2755*53ee8cc1Swenshuai.xi ULOGD("DEMOD", ">>>INTERN_DVBS_GetLock TsClkDivNum = 0x%x<<<\n", u8Data);
2756*53ee8cc1Swenshuai.xi #endif
2757*53ee8cc1Swenshuai.xi
2758*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103300, u8Data);
2759*53ee8cc1Swenshuai.xi
2760*53ee8cc1Swenshuai.xi //Ts Output Enable
2761*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x101eaa,0x10);
2762*53ee8cc1Swenshuai.xi }
2763*53ee8cc1Swenshuai.xi
2764*53ee8cc1Swenshuai.xi return status;
2765*53ee8cc1Swenshuai.xi }
2766*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS2_Set_Default_IS_ID(MS_U8 * u8IS_ID_table)2767*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS2_Set_Default_IS_ID(MS_U8 *u8IS_ID_table)
2768*53ee8cc1Swenshuai.xi {
2769*53ee8cc1Swenshuai.xi MS_U8 IS_ID = 0;
2770*53ee8cc1Swenshuai.xi DVBS_SetDefaultVCM_PARAM Drv_DVBS_SetDefaultVCM_PARAM;
2771*53ee8cc1Swenshuai.xi Drv_DVBS_SetDefaultVCM_PARAM.u8IS_ID = &IS_ID;
2772*53ee8cc1Swenshuai.xi Drv_DVBS_SetDefaultVCM_PARAM.u8IS_ID_table = u8IS_ID_table;
2773*53ee8cc1Swenshuai.xi Drv_DVBS_SetDefaultVCM_PARAM.ret = false;
2774*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS2_Set_Default_IS_ID\n"));
2775*53ee8cc1Swenshuai.xi
2776*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2777*53ee8cc1Swenshuai.xi {
2778*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant, DMD_DVBS_DRV_CMD_Set_Default_IS_ID, &Drv_DVBS_SetDefaultVCM_PARAM);
2779*53ee8cc1Swenshuai.xi }
2780*53ee8cc1Swenshuai.xi
2781*53ee8cc1Swenshuai.xi ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]Defalut IS_ID = %d\n",IS_ID);
2782*53ee8cc1Swenshuai.xi
2783*53ee8cc1Swenshuai.xi return Drv_DVBS_SetDefaultVCM_PARAM.ret;
2784*53ee8cc1Swenshuai.xi }
2785*53ee8cc1Swenshuai.xi
2786*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS2_Set_IS_ID(MS_U8 u8IS_ID)2787*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS2_Set_IS_ID(MS_U8 u8IS_ID)
2788*53ee8cc1Swenshuai.xi {
2789*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS2_Set_IS_ID\n"));
2790*53ee8cc1Swenshuai.xi
2791*53ee8cc1Swenshuai.xi DVBS_SetVCM_PARAM Drv_DVBS_SetVCM_PARAM;
2792*53ee8cc1Swenshuai.xi Drv_DVBS_SetVCM_PARAM.u8IS_ID=u8IS_ID;
2793*53ee8cc1Swenshuai.xi Drv_DVBS_SetVCM_PARAM.ret=false;
2794*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2795*53ee8cc1Swenshuai.xi {
2796*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant, DMD_DVBS_DRV_CMD_Set_IS_ID, &Drv_DVBS_SetVCM_PARAM);
2797*53ee8cc1Swenshuai.xi }
2798*53ee8cc1Swenshuai.xi return Drv_DVBS_SetVCM_PARAM.ret;
2799*53ee8cc1Swenshuai.xi }
2800*53ee8cc1Swenshuai.xi
2801*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS2_Get_IS_ID_INFO(MS_U8 * u8IS_ID,MS_U8 * u8IS_ID_table)2802*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS2_Get_IS_ID_INFO(MS_U8 *u8IS_ID, MS_U8 *u8IS_ID_table)
2803*53ee8cc1Swenshuai.xi {
2804*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS2_Get_IS_ID_INFO\n"));
2805*53ee8cc1Swenshuai.xi
2806*53ee8cc1Swenshuai.xi DVBS_GetVCM_PARAM Drv_DVBS_GetVCM_PARAM;
2807*53ee8cc1Swenshuai.xi Drv_DVBS_GetVCM_PARAM.u8IS_ID=u8IS_ID;
2808*53ee8cc1Swenshuai.xi Drv_DVBS_GetVCM_PARAM.u8IS_ID_table=u8IS_ID_table;
2809*53ee8cc1Swenshuai.xi Drv_DVBS_GetVCM_PARAM.ret=false;
2810*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2811*53ee8cc1Swenshuai.xi {
2812*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant, DMD_DVBS_DRV_CMD_Get_IS_ID_INFO, &Drv_DVBS_GetVCM_PARAM);
2813*53ee8cc1Swenshuai.xi }
2814*53ee8cc1Swenshuai.xi
2815*53ee8cc1Swenshuai.xi return Drv_DVBS_GetVCM_PARAM.ret;
2816*53ee8cc1Swenshuai.xi }
2817*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS2_VCM_Init(DMD_DVBS_VCM_OPT u8VCM_OPT,MS_U8 u8IS_ID,MS_U32 u32DVBS2_DJB_START_ADDR)2818*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS2_VCM_Init(DMD_DVBS_VCM_OPT u8VCM_OPT, MS_U8 u8IS_ID, MS_U32 u32DVBS2_DJB_START_ADDR)
2819*53ee8cc1Swenshuai.xi {
2820*53ee8cc1Swenshuai.xi void* pAttribte = NULL;
2821*53ee8cc1Swenshuai.xi
2822*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS2_VCM_Init\n"));
2823*53ee8cc1Swenshuai.xi
2824*53ee8cc1Swenshuai.xi DVBS_VCM_INIT_PARAM Drv_DVBS_VCM_INIT_PARAM;
2825*53ee8cc1Swenshuai.xi Drv_DVBS_VCM_INIT_PARAM.u8VCM_OPT = u8VCM_OPT;
2826*53ee8cc1Swenshuai.xi Drv_DVBS_VCM_INIT_PARAM.u8IS_ID = u8IS_ID;
2827*53ee8cc1Swenshuai.xi Drv_DVBS_VCM_INIT_PARAM.u32DVBS2_DJB_START_ADDR = u32DVBS2_DJB_START_ADDR;
2828*53ee8cc1Swenshuai.xi Drv_DVBS_VCM_INIT_PARAM.ret = false;
2829*53ee8cc1Swenshuai.xi
2830*53ee8cc1Swenshuai.xi if(u8DVBSUtopiaOpen == 0) // First time open
2831*53ee8cc1Swenshuai.xi {
2832*53ee8cc1Swenshuai.xi if(UtopiaOpen(MODULE_DVBS/*|KERNEL_MODE*/ , &ppDVBSInstant, 0, pAttribte) == UTOPIA_STATUS_SUCCESS) //kernel space
2833*53ee8cc1Swenshuai.xi //if(UtopiaOpen(MODULE_DVBS , &ppDVBSInstant, 0, pAttribte) == UTOPIA_STATUS_SUCCESS) //user space
2834*53ee8cc1Swenshuai.xi {
2835*53ee8cc1Swenshuai.xi u32DVBSopen = 1;
2836*53ee8cc1Swenshuai.xi ULOGD("DEMOD","Leo check DVBS utopia open sucessful!!\n");
2837*53ee8cc1Swenshuai.xi //return_val=true;
2838*53ee8cc1Swenshuai.xi // ULOGD("DEMOD","\r\n ======== DVBS Open Successful %x =========", (WORD)u32DVBSopen);
2839*53ee8cc1Swenshuai.xi }
2840*53ee8cc1Swenshuai.xi else
2841*53ee8cc1Swenshuai.xi {
2842*53ee8cc1Swenshuai.xi // ULOGD("DEMOD","\r\n ======== DVBS Open Fail %x =========", (WORD)u32DVBSopen);
2843*53ee8cc1Swenshuai.xi //return_val=false;
2844*53ee8cc1Swenshuai.xi ULOGD("DEMOD","DVBS utopia open fail!!\n");
2845*53ee8cc1Swenshuai.xi return false;
2846*53ee8cc1Swenshuai.xi }
2847*53ee8cc1Swenshuai.xi
2848*53ee8cc1Swenshuai.xi u8DVBSUtopiaOpen = 1;
2849*53ee8cc1Swenshuai.xi }
2850*53ee8cc1Swenshuai.xi
2851*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2852*53ee8cc1Swenshuai.xi {
2853*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant, DMD_DVBS_DRV_CMD_VCM_Init, &Drv_DVBS_VCM_INIT_PARAM);
2854*53ee8cc1Swenshuai.xi }
2855*53ee8cc1Swenshuai.xi
2856*53ee8cc1Swenshuai.xi return Drv_DVBS_VCM_INIT_PARAM.ret;
2857*53ee8cc1Swenshuai.xi }
2858*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS2_VCM_Check(void)2859*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS2_VCM_Check(void)
2860*53ee8cc1Swenshuai.xi {
2861*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS2_VCM_Check\n"));
2862*53ee8cc1Swenshuai.xi
2863*53ee8cc1Swenshuai.xi DVBS_VCM_CHECK Drv_DVBS_VCM_CHECK;
2864*53ee8cc1Swenshuai.xi Drv_DVBS_VCM_CHECK.ret = false;
2865*53ee8cc1Swenshuai.xi
2866*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2867*53ee8cc1Swenshuai.xi {
2868*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant, DMD_DVBS_DRV_CMD_VCM_Check, &Drv_DVBS_VCM_CHECK);
2869*53ee8cc1Swenshuai.xi }
2870*53ee8cc1Swenshuai.xi
2871*53ee8cc1Swenshuai.xi return Drv_DVBS_VCM_CHECK.ret;
2872*53ee8cc1Swenshuai.xi }
2873*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS2_VCM_Enabled(MS_U8 u8VCM_ENABLED)2874*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS2_VCM_Enabled(MS_U8 u8VCM_ENABLED)
2875*53ee8cc1Swenshuai.xi {
2876*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS2_VCM_Enabled\n"));
2877*53ee8cc1Swenshuai.xi DVBS_VCM_ENABLED Drv_DVBS_VCM_ENABLED;
2878*53ee8cc1Swenshuai.xi Drv_DVBS_VCM_ENABLED.u8VCM_ENABLED = u8VCM_ENABLED;
2879*53ee8cc1Swenshuai.xi Drv_DVBS_VCM_ENABLED.ret = false;
2880*53ee8cc1Swenshuai.xi
2881*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2882*53ee8cc1Swenshuai.xi {
2883*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant, DMD_DVBS_DRV_CMD_VCM_Enabled, &Drv_DVBS_VCM_ENABLED);
2884*53ee8cc1Swenshuai.xi }
2885*53ee8cc1Swenshuai.xi
2886*53ee8cc1Swenshuai.xi return Drv_DVBS_VCM_ENABLED.ret;
2887*53ee8cc1Swenshuai.xi
2888*53ee8cc1Swenshuai.xi }
2889*53ee8cc1Swenshuai.xi
MDrv_DMD_DVBS2_VCM_Change_Mode(DMD_DVBS_VCM_OPT u8VCM_OPT)2890*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS2_VCM_Change_Mode(DMD_DVBS_VCM_OPT u8VCM_OPT)
2891*53ee8cc1Swenshuai.xi {
2892*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS2_VCM_Change_Mode\n"));
2893*53ee8cc1Swenshuai.xi DVBS_VCM_MODE Drv_DVBS_VCM_MODE;
2894*53ee8cc1Swenshuai.xi Drv_DVBS_VCM_MODE.u8VCM_OPT = u8VCM_OPT;
2895*53ee8cc1Swenshuai.xi Drv_DVBS_VCM_MODE.ret = false;
2896*53ee8cc1Swenshuai.xi
2897*53ee8cc1Swenshuai.xi if(u32DVBSopen==1)
2898*53ee8cc1Swenshuai.xi {
2899*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant, DMD_DVBS_DRV_CMD_VCM_Mode, &Drv_DVBS_VCM_MODE);
2900*53ee8cc1Swenshuai.xi }
2901*53ee8cc1Swenshuai.xi
2902*53ee8cc1Swenshuai.xi return Drv_DVBS_VCM_MODE.ret;
2903*53ee8cc1Swenshuai.xi }
2904*53ee8cc1Swenshuai.xi #endif
2905*53ee8cc1Swenshuai.xi
2906*53ee8cc1Swenshuai.xi #ifdef UFO_SUPPORT_KERNEL_FLOATING
MDrv_DMD_DVBS_TS_DivNum_Calculation_Kernel(void)2907*53ee8cc1Swenshuai.xi MS_BOOL MDrv_DMD_DVBS_TS_DivNum_Calculation_Kernel(void)
2908*53ee8cc1Swenshuai.xi {
2909*53ee8cc1Swenshuai.xi DMD_DBG(ULOGD("DEMOD","[drvDMD_INTERN_DVBS.c]MDrv_DMD_DVBS2_TS_DivNum_Calculation\n"));
2910*53ee8cc1Swenshuai.xi
2911*53ee8cc1Swenshuai.xi MS_U32 u32SymbolRate=0;
2912*53ee8cc1Swenshuai.xi //float fSymbolRate;
2913*53ee8cc1Swenshuai.xi //MS_U8 ISSY_EN = 0;
2914*53ee8cc1Swenshuai.xi MS_U8 code_rate_idx = 0;
2915*53ee8cc1Swenshuai.xi MS_U8 pilot_flag = 0;
2916*53ee8cc1Swenshuai.xi MS_U8 fec_type_idx = 0;
2917*53ee8cc1Swenshuai.xi MS_U16 k_bch_array[2][42] =
2918*53ee8cc1Swenshuai.xi {
2919*53ee8cc1Swenshuai.xi {
2920*53ee8cc1Swenshuai.xi 16008, 21408, 25728, 32208, 38688, 43040, 48408, 51648, 53840, 57472,
2921*53ee8cc1Swenshuai.xi 58192, 14208, 18528, 28968, 32208, 34368, 35448, 35808, 37248, 37248,
2922*53ee8cc1Swenshuai.xi 38688, 40128, 41208, 41568, 43008, 44448, 44808, 45888, 46608, 47328,
2923*53ee8cc1Swenshuai.xi 47328, 48408, 50208, 50208, 55248, 0, 0, 0, 0, 0,
2924*53ee8cc1Swenshuai.xi 0, 0,
2925*53ee8cc1Swenshuai.xi },
2926*53ee8cc1Swenshuai.xi {
2927*53ee8cc1Swenshuai.xi 3072, 5232, 6312, 7032, 9552, 10632, 11712, 12432, 13152, 14232,
2928*53ee8cc1Swenshuai.xi 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2929*53ee8cc1Swenshuai.xi 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2930*53ee8cc1Swenshuai.xi 0, 0, 0, 0, 0, 3792, 4152, 4872, 7392, 8472,
2931*53ee8cc1Swenshuai.xi 9192, 11352
2932*53ee8cc1Swenshuai.xi }
2933*53ee8cc1Swenshuai.xi };
2934*53ee8cc1Swenshuai.xi MS_U16 n_ldpc_array[2] = {64800, 16200};
2935*53ee8cc1Swenshuai.xi
2936*53ee8cc1Swenshuai.xi MS_U8 DVBS_CR_TABLE[5] = {2,3,4,6,8}; // 1/2, 2/3, 3/4, 5/6, 7/8
2937*53ee8cc1Swenshuai.xi
2938*53ee8cc1Swenshuai.xi MS_FLOAT_ST pilot_term;
2939*53ee8cc1Swenshuai.xi MS_FLOAT_ST k_bch;
2940*53ee8cc1Swenshuai.xi MS_FLOAT_ST n_ldpc;
2941*53ee8cc1Swenshuai.xi MS_FLOAT_ST ts_div_num_offset; // 1.5
2942*53ee8cc1Swenshuai.xi
2943*53ee8cc1Swenshuai.xi ts_div_num_offset.DATA = 3;
2944*53ee8cc1Swenshuai.xi ts_div_num_offset.EXP = -1;
2945*53ee8cc1Swenshuai.xi
2946*53ee8cc1Swenshuai.xi MS_FLOAT_ST ts_div_num_margin_ratio; // 1.03
2947*53ee8cc1Swenshuai.xi
2948*53ee8cc1Swenshuai.xi ts_div_num_margin_ratio.DATA = 1105954079;
2949*53ee8cc1Swenshuai.xi ts_div_num_margin_ratio.EXP = -30;
2950*53ee8cc1Swenshuai.xi
2951*53ee8cc1Swenshuai.xi MS_FLOAT_ST ftmp;
2952*53ee8cc1Swenshuai.xi MS_FLOAT_ST temp, temp1;
2953*53ee8cc1Swenshuai.xi
2954*53ee8cc1Swenshuai.xi MS_U32 u32temp;
2955*53ee8cc1Swenshuai.xi MS_U8 system_type_reg;
2956*53ee8cc1Swenshuai.xi MS_U8 code_rate_reg;
2957*53ee8cc1Swenshuai.xi MS_FLOAT_ST fTSDivNum;
2958*53ee8cc1Swenshuai.xi MS_U8 u8Data;
2959*53ee8cc1Swenshuai.xi MS_BOOL status = TRUE;
2960*53ee8cc1Swenshuai.xi
2961*53ee8cc1Swenshuai.xi DVBS_GetTsDivNum_PARAM Drv_DVBS_GetTsDivNum_PARAM;
2962*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.u32SymbolRate=&u32SymbolRate;
2963*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.system_type_reg=&system_type_reg;
2964*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.code_rate_idx=&code_rate_idx;
2965*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.fec_type_idx=&fec_type_idx;
2966*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.pilot_flag=&pilot_flag;
2967*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.u32temp=&u32temp;
2968*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.code_rate_reg=&code_rate_reg;
2969*53ee8cc1Swenshuai.xi Drv_DVBS_GetTsDivNum_PARAM.bRet=false;
2970*53ee8cc1Swenshuai.xi
2971*53ee8cc1Swenshuai.xi if(u8DemodLockFlag==1)
2972*53ee8cc1Swenshuai.xi {
2973*53ee8cc1Swenshuai.xi UtopiaIoctl(ppDVBSInstant, DMD_DVBS_DRV_CMD_GetTsDivNum, &Drv_DVBS_GetTsDivNum_PARAM);
2974*53ee8cc1Swenshuai.xi status &= Drv_DVBS_GetTsDivNum_PARAM.bRet;
2975*53ee8cc1Swenshuai.xi
2976*53ee8cc1Swenshuai.xi if(!system_type_reg) // DVBS2
2977*53ee8cc1Swenshuai.xi {
2978*53ee8cc1Swenshuai.xi k_bch.DATA = k_bch_array[fec_type_idx][code_rate_idx];
2979*53ee8cc1Swenshuai.xi k_bch.EXP = 0;
2980*53ee8cc1Swenshuai.xi n_ldpc.DATA = n_ldpc_array[fec_type_idx];
2981*53ee8cc1Swenshuai.xi n_ldpc.EXP = 0;
2982*53ee8cc1Swenshuai.xi
2983*53ee8cc1Swenshuai.xi pilot_term.DATA = ( n_ldpc.DATA / modulation_order / 1440 * 36) * pilot_flag + 90; // pilot_term + header
2984*53ee8cc1Swenshuai.xi pilot_term.EXP = 0;
2985*53ee8cc1Swenshuai.xi
2986*53ee8cc1Swenshuai.xi //data rate
2987*53ee8cc1Swenshuai.xi //ftmp = k_bch/( (n_ldpc/modulation_order+90+pilot_term) / u32SymbolRate);
2988*53ee8cc1Swenshuai.xi
2989*53ee8cc1Swenshuai.xi temp.DATA = modulation_order;
2990*53ee8cc1Swenshuai.xi temp.EXP = 0;
2991*53ee8cc1Swenshuai.xi
2992*53ee8cc1Swenshuai.xi temp = MS_FLOAT_OP(n_ldpc, temp, divide); // temp = n_ldpc / modulation_order
2993*53ee8cc1Swenshuai.xi //ULOGD("DEMOD", ">>>n_ldpc / modulation_order = %d*2^%d<<<\n", temp.DATA, temp.EXP);
2994*53ee8cc1Swenshuai.xi
2995*53ee8cc1Swenshuai.xi temp = MS_FLOAT_OP(temp, pilot_term, add); // temp += pilot_term + header(90)
2996*53ee8cc1Swenshuai.xi //ULOGD("DEMOD", ">>>n_ldpc / modulation_order + pilot_term + header(90) = %d*2^%d<<<\n", temp.DATA, temp.EXP);
2997*53ee8cc1Swenshuai.xi
2998*53ee8cc1Swenshuai.xi ftmp.DATA = u32SymbolRate;
2999*53ee8cc1Swenshuai.xi ftmp.EXP = 0;
3000*53ee8cc1Swenshuai.xi
3001*53ee8cc1Swenshuai.xi ftmp = MS_FLOAT_OP(temp, ftmp, divide); // ftmp = temp /= u32SymbolRate = (n_ldpc/modulation_order+pilot_term+header(90)) / u32SymbolRate
3002*53ee8cc1Swenshuai.xi
3003*53ee8cc1Swenshuai.xi ftmp = MS_FLOAT_OP(k_bch, ftmp, divide); // ftmp = k_bch / ( (n_ldpc/modulation_order+pilot_term+header(90)) / u32SymbolRate)
3004*53ee8cc1Swenshuai.xi
3005*53ee8cc1Swenshuai.xi //ULOGD("DEMOD", ">>>ftmp = %d*2^%d<<<\n", ftmp.DATA, ftmp.EXP);
3006*53ee8cc1Swenshuai.xi
3007*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS)//serial mode
3008*53ee8cc1Swenshuai.xi {
3009*53ee8cc1Swenshuai.xi //fTSDivNum = 288000.0 / ftmp / 2.0 - 1;
3010*53ee8cc1Swenshuai.xi
3011*53ee8cc1Swenshuai.xi temp.DATA = 288000;
3012*53ee8cc1Swenshuai.xi temp.EXP = 0;
3013*53ee8cc1Swenshuai.xi
3014*53ee8cc1Swenshuai.xi fTSDivNum = MS_FLOAT_OP(temp, ftmp, divide); // fTSDivNum = 288000 / ftmp
3015*53ee8cc1Swenshuai.xi
3016*53ee8cc1Swenshuai.xi fTSDivNum.EXP -= 1; // fTSDivNum /= 2
3017*53ee8cc1Swenshuai.xi
3018*53ee8cc1Swenshuai.xi temp.DATA = 1;
3019*53ee8cc1Swenshuai.xi temp.EXP = 0;
3020*53ee8cc1Swenshuai.xi
3021*53ee8cc1Swenshuai.xi fTSDivNum = MS_FLOAT_OP(fTSDivNum, temp, minus); // fTSDivNum -= 1
3022*53ee8cc1Swenshuai.xi }
3023*53ee8cc1Swenshuai.xi else//parallel mode
3024*53ee8cc1Swenshuai.xi {
3025*53ee8cc1Swenshuai.xi //fTSDivNum = 288000.0 / (ftmp/8.0) / 2.0 - 1;
3026*53ee8cc1Swenshuai.xi
3027*53ee8cc1Swenshuai.xi temp.DATA = 288000;
3028*53ee8cc1Swenshuai.xi temp.EXP = 3;
3029*53ee8cc1Swenshuai.xi
3030*53ee8cc1Swenshuai.xi fTSDivNum = MS_FLOAT_OP(temp, ftmp, divide); // fTSDivNum = 288000 / (ftmp/8)
3031*53ee8cc1Swenshuai.xi
3032*53ee8cc1Swenshuai.xi fTSDivNum.EXP -= 1; // fTSDivNum /= 2
3033*53ee8cc1Swenshuai.xi
3034*53ee8cc1Swenshuai.xi temp.DATA = 1;
3035*53ee8cc1Swenshuai.xi temp.EXP = 0;
3036*53ee8cc1Swenshuai.xi
3037*53ee8cc1Swenshuai.xi fTSDivNum = MS_FLOAT_OP(fTSDivNum, temp, minus); // fTSDivNum -= 1
3038*53ee8cc1Swenshuai.xi
3039*53ee8cc1Swenshuai.xi //ULOGD("DEMOD", ">>>fTSDivNum = %d*2^%d<<<\n", fTSDivNum.DATA, fTSDivNum.EXP);
3040*53ee8cc1Swenshuai.xi }
3041*53ee8cc1Swenshuai.xi
3042*53ee8cc1Swenshuai.xi fTSDivNum = MS_FLOAT_OP(fTSDivNum, ts_div_num_offset, minus); // fTSDivNum -= ts_div_num_offset
3043*53ee8cc1Swenshuai.xi }
3044*53ee8cc1Swenshuai.xi else // DVBS
3045*53ee8cc1Swenshuai.xi {
3046*53ee8cc1Swenshuai.xi if(code_rate_reg < 5)
3047*53ee8cc1Swenshuai.xi code_rate_reg = DVBS_CR_TABLE[code_rate_reg]; // mapping code_rate_reg => CR
3048*53ee8cc1Swenshuai.xi else
3049*53ee8cc1Swenshuai.xi code_rate_reg = 8; // default set CR = 7/8
3050*53ee8cc1Swenshuai.xi
3051*53ee8cc1Swenshuai.xi temp.DATA = code_rate_reg;
3052*53ee8cc1Swenshuai.xi temp.EXP = 0;
3053*53ee8cc1Swenshuai.xi temp1.DATA = code_rate_reg-1;
3054*53ee8cc1Swenshuai.xi temp1.EXP = 0;
3055*53ee8cc1Swenshuai.xi
3056*53ee8cc1Swenshuai.xi ftmp = MS_FLOAT_OP(temp1, temp, divide); // ftmp = (CR_REG-1) / CR_REG = CR
3057*53ee8cc1Swenshuai.xi
3058*53ee8cc1Swenshuai.xi temp.DATA = 204;
3059*53ee8cc1Swenshuai.xi temp.EXP = 0;
3060*53ee8cc1Swenshuai.xi temp1.DATA = 188;
3061*53ee8cc1Swenshuai.xi temp1.EXP = 0;
3062*53ee8cc1Swenshuai.xi
3063*53ee8cc1Swenshuai.xi temp = MS_FLOAT_OP(temp1, temp, divide); // temp = 188 / 204
3064*53ee8cc1Swenshuai.xi
3065*53ee8cc1Swenshuai.xi ftmp = MS_FLOAT_OP(ftmp, temp, multiply); // ftmp = CR * (188/204)
3066*53ee8cc1Swenshuai.xi
3067*53ee8cc1Swenshuai.xi temp.DATA = u32SymbolRate*2;
3068*53ee8cc1Swenshuai.xi temp.EXP = 0;
3069*53ee8cc1Swenshuai.xi
3070*53ee8cc1Swenshuai.xi temp = MS_FLOAT_OP(temp, ts_div_num_margin_ratio, multiply); // temp = u32SymbolRate * 2 * ts_div_num_margin_ratio
3071*53ee8cc1Swenshuai.xi
3072*53ee8cc1Swenshuai.xi ftmp = MS_FLOAT_OP(ftmp, temp, multiply); // ftmp = CR * (188/204) * u32SymbolRate * 2 * ts_div_num_margin_ratio;
3073*53ee8cc1Swenshuai.xi
3074*53ee8cc1Swenshuai.xi if(sDMD_DVBS_Info.bSerialTS) // serial mode
3075*53ee8cc1Swenshuai.xi {
3076*53ee8cc1Swenshuai.xi temp.DATA = 288000;
3077*53ee8cc1Swenshuai.xi temp.EXP = 0;
3078*53ee8cc1Swenshuai.xi }
3079*53ee8cc1Swenshuai.xi else // parallel mode
3080*53ee8cc1Swenshuai.xi {
3081*53ee8cc1Swenshuai.xi temp.DATA = 288000*8;
3082*53ee8cc1Swenshuai.xi temp.EXP = 0;
3083*53ee8cc1Swenshuai.xi }
3084*53ee8cc1Swenshuai.xi
3085*53ee8cc1Swenshuai.xi fTSDivNum = MS_FLOAT_OP(temp, ftmp, divide); // fTSDivNum = (288000*(parallel mode*8) / (CR*(188.0/204.0)*u32SymbolRate*ts_div_num_margin_ratio*2));
3086*53ee8cc1Swenshuai.xi
3087*53ee8cc1Swenshuai.xi fTSDivNum.EXP -= 1;// fTSDivNum /= 2
3088*53ee8cc1Swenshuai.xi
3089*53ee8cc1Swenshuai.xi fTSDivNum = MS_FLOAT_OP(fTSDivNum, ts_div_num_offset, minus); // fTSDivNum -= ts_div_num_offset
3090*53ee8cc1Swenshuai.xi }
3091*53ee8cc1Swenshuai.xi
3092*53ee8cc1Swenshuai.xi temp.DATA = 0x1F;
3093*53ee8cc1Swenshuai.xi temp.EXP = 0;
3094*53ee8cc1Swenshuai.xi
3095*53ee8cc1Swenshuai.xi if( MS_FLOAT_OP(fTSDivNum, temp, minus).DATA > 0 ) // fTSDivNum > 0x1F
3096*53ee8cc1Swenshuai.xi {
3097*53ee8cc1Swenshuai.xi fTSDivNum.DATA = 0x1F;
3098*53ee8cc1Swenshuai.xi fTSDivNum.EXP = 0;
3099*53ee8cc1Swenshuai.xi }
3100*53ee8cc1Swenshuai.xi
3101*53ee8cc1Swenshuai.xi temp.DATA = 0x01;
3102*53ee8cc1Swenshuai.xi temp.EXP = 0;
3103*53ee8cc1Swenshuai.xi
3104*53ee8cc1Swenshuai.xi if( MS_FLOAT_OP(fTSDivNum, temp, minus).DATA < 0 ) // fTSDivNum < 0x01
3105*53ee8cc1Swenshuai.xi {
3106*53ee8cc1Swenshuai.xi fTSDivNum.DATA = 0x01;
3107*53ee8cc1Swenshuai.xi fTSDivNum.EXP = 0;
3108*53ee8cc1Swenshuai.xi }
3109*53ee8cc1Swenshuai.xi
3110*53ee8cc1Swenshuai.xi // shift bits
3111*53ee8cc1Swenshuai.xi if(fTSDivNum.EXP >= 0)
3112*53ee8cc1Swenshuai.xi u8Data = (fTSDivNum.DATA) << (fTSDivNum.EXP);
3113*53ee8cc1Swenshuai.xi else
3114*53ee8cc1Swenshuai.xi u8Data = (fTSDivNum.DATA) >> ((-1)*(fTSDivNum.EXP));
3115*53ee8cc1Swenshuai.xi
3116*53ee8cc1Swenshuai.xi #ifdef MS_DEBUG
3117*53ee8cc1Swenshuai.xi ULOGD("DEMOD", ">>>INTERN_DVBS_Kernel_Mode TsClkDivNum = 0x%x<<<\n", u8Data);
3118*53ee8cc1Swenshuai.xi #endif
3119*53ee8cc1Swenshuai.xi
3120*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x103300, u8Data);
3121*53ee8cc1Swenshuai.xi
3122*53ee8cc1Swenshuai.xi //Ts Output Enable
3123*53ee8cc1Swenshuai.xi HAL_DMD_RIU_WriteByte(0x101eaa,0x10);
3124*53ee8cc1Swenshuai.xi }
3125*53ee8cc1Swenshuai.xi
3126*53ee8cc1Swenshuai.xi return status;
3127*53ee8cc1Swenshuai.xi }
3128*53ee8cc1Swenshuai.xi #endif
3129