xref: /utopia/UTPA2-700.0.x/mxlib/include/drvVIF.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi //<MStar Software>
2*53ee8cc1Swenshuai.xi //******************************************************************************
3*53ee8cc1Swenshuai.xi // MStar Software
4*53ee8cc1Swenshuai.xi // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5*53ee8cc1Swenshuai.xi // All software, firmware and related documentation herein ("MStar Software") are
6*53ee8cc1Swenshuai.xi // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7*53ee8cc1Swenshuai.xi // law, including, but not limited to, copyright law and international treaties.
8*53ee8cc1Swenshuai.xi // Any use, modification, reproduction, retransmission, or republication of all
9*53ee8cc1Swenshuai.xi // or part of MStar Software is expressly prohibited, unless prior written
10*53ee8cc1Swenshuai.xi // permission has been granted by MStar.
11*53ee8cc1Swenshuai.xi //
12*53ee8cc1Swenshuai.xi // By accessing, browsing and/or using MStar Software, you acknowledge that you
13*53ee8cc1Swenshuai.xi // have read, understood, and agree, to be bound by below terms ("Terms") and to
14*53ee8cc1Swenshuai.xi // comply with all applicable laws and regulations:
15*53ee8cc1Swenshuai.xi //
16*53ee8cc1Swenshuai.xi // 1. MStar shall retain any and all right, ownership and interest to MStar
17*53ee8cc1Swenshuai.xi //    Software and any modification/derivatives thereof.
18*53ee8cc1Swenshuai.xi //    No right, ownership, or interest to MStar Software and any
19*53ee8cc1Swenshuai.xi //    modification/derivatives thereof is transferred to you under Terms.
20*53ee8cc1Swenshuai.xi //
21*53ee8cc1Swenshuai.xi // 2. You understand that MStar Software might include, incorporate or be
22*53ee8cc1Swenshuai.xi //    supplied together with third party`s software and the use of MStar
23*53ee8cc1Swenshuai.xi //    Software may require additional licenses from third parties.
24*53ee8cc1Swenshuai.xi //    Therefore, you hereby agree it is your sole responsibility to separately
25*53ee8cc1Swenshuai.xi //    obtain any and all third party right and license necessary for your use of
26*53ee8cc1Swenshuai.xi //    such third party`s software.
27*53ee8cc1Swenshuai.xi //
28*53ee8cc1Swenshuai.xi // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29*53ee8cc1Swenshuai.xi //    MStar`s confidential information and you agree to keep MStar`s
30*53ee8cc1Swenshuai.xi //    confidential information in strictest confidence and not disclose to any
31*53ee8cc1Swenshuai.xi //    third party.
32*53ee8cc1Swenshuai.xi //
33*53ee8cc1Swenshuai.xi // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34*53ee8cc1Swenshuai.xi //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35*53ee8cc1Swenshuai.xi //    without limitation, any warranties of merchantability, non-infringement of
36*53ee8cc1Swenshuai.xi //    intellectual property rights, fitness for a particular purpose, error free
37*53ee8cc1Swenshuai.xi //    and in conformity with any international standard.  You agree to waive any
38*53ee8cc1Swenshuai.xi //    claim against MStar for any loss, damage, cost or expense that you may
39*53ee8cc1Swenshuai.xi //    incur related to your use of MStar Software.
40*53ee8cc1Swenshuai.xi //    In no event shall MStar be liable for any direct, indirect, incidental or
41*53ee8cc1Swenshuai.xi //    consequential damages, including without limitation, lost of profit or
42*53ee8cc1Swenshuai.xi //    revenues, lost or damage of data, and unauthorized system use.
43*53ee8cc1Swenshuai.xi //    You agree that this Section 4 shall still apply without being affected
44*53ee8cc1Swenshuai.xi //    even if MStar Software has been modified by MStar in accordance with your
45*53ee8cc1Swenshuai.xi //    request or instruction for your use, except otherwise agreed by both
46*53ee8cc1Swenshuai.xi //    parties in writing.
47*53ee8cc1Swenshuai.xi //
48*53ee8cc1Swenshuai.xi // 5. If requested, MStar may from time to time provide technical supports or
49*53ee8cc1Swenshuai.xi //    services in relation with MStar Software to you for your use of
50*53ee8cc1Swenshuai.xi //    MStar Software in conjunction with your or your customer`s product
51*53ee8cc1Swenshuai.xi //    ("Services").
52*53ee8cc1Swenshuai.xi //    You understand and agree that, except otherwise agreed by both parties in
53*53ee8cc1Swenshuai.xi //    writing, Services are provided on an "AS IS" basis and the warranty
54*53ee8cc1Swenshuai.xi //    disclaimer set forth in Section 4 above shall apply.
55*53ee8cc1Swenshuai.xi //
56*53ee8cc1Swenshuai.xi // 6. Nothing contained herein shall be construed as by implication, estoppels
57*53ee8cc1Swenshuai.xi //    or otherwise:
58*53ee8cc1Swenshuai.xi //    (a) conferring any license or right to use MStar name, trademark, service
59*53ee8cc1Swenshuai.xi //        mark, symbol or any other identification;
60*53ee8cc1Swenshuai.xi //    (b) obligating MStar or any of its affiliates to furnish any person,
61*53ee8cc1Swenshuai.xi //        including without limitation, you and your customers, any assistance
62*53ee8cc1Swenshuai.xi //        of any kind whatsoever, or any information; or
63*53ee8cc1Swenshuai.xi //    (c) conferring any license or right under any intellectual property right.
64*53ee8cc1Swenshuai.xi //
65*53ee8cc1Swenshuai.xi // 7. These terms shall be governed by and construed in accordance with the laws
66*53ee8cc1Swenshuai.xi //    of Taiwan, R.O.C., excluding its conflict of law rules.
67*53ee8cc1Swenshuai.xi //    Any and all dispute arising out hereof or related hereto shall be finally
68*53ee8cc1Swenshuai.xi //    settled by arbitration referred to the Chinese Arbitration Association,
69*53ee8cc1Swenshuai.xi //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70*53ee8cc1Swenshuai.xi //    Rules of the Association by three (3) arbitrators appointed in accordance
71*53ee8cc1Swenshuai.xi //    with the said Rules.
72*53ee8cc1Swenshuai.xi //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73*53ee8cc1Swenshuai.xi //    be English.
74*53ee8cc1Swenshuai.xi //    The arbitration award shall be final and binding to both parties.
75*53ee8cc1Swenshuai.xi //
76*53ee8cc1Swenshuai.xi //******************************************************************************
77*53ee8cc1Swenshuai.xi //<MStar Software>
78*53ee8cc1Swenshuai.xi ////////////////////////////////////////////////////////////////////////////////
79*53ee8cc1Swenshuai.xi //
80*53ee8cc1Swenshuai.xi // Copyright (c) 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   drvVIF.h
98*53ee8cc1Swenshuai.xi /// @brief  MStar VIF Utopia interface
99*53ee8cc1Swenshuai.xi /// @author MStar Semiconductor Inc.
100*53ee8cc1Swenshuai.xi /// @version 1.0
101*53ee8cc1Swenshuai.xi ///////////////////////////////////////////////////////////////////////////////////////////////////
102*53ee8cc1Swenshuai.xi 
103*53ee8cc1Swenshuai.xi /*! \defgroup VIF VIF interface
104*53ee8cc1Swenshuai.xi     \ingroup  VIF
105*53ee8cc1Swenshuai.xi 
106*53ee8cc1Swenshuai.xi     \brief
107*53ee8cc1Swenshuai.xi 
108*53ee8cc1Swenshuai.xi     VIF, in other words, is ATV demodulator. VIF is composed of analog and digital parts.
109*53ee8cc1Swenshuai.xi     Analog part includes Programmable Gain Amplifier(PGA), mixer and LPF.
110*53ee8cc1Swenshuai.xi     After ADC sampling, low IF signal is digitally processed.
111*53ee8cc1Swenshuai.xi     First, low IF signal is down-converted to baseband.
112*53ee8cc1Swenshuai.xi     Second, baseband filter pass video content and reject audio carrier.
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi     <b>Features</b>
115*53ee8cc1Swenshuai.xi 
116*53ee8cc1Swenshuai.xi     - PGA provides 25~35dB gain (depending on chips), 1dB gain per step.
117*53ee8cc1Swenshuai.xi     - Mixer down-converts video IF frequency (38.9MHz) to low IF frequency (9.548MHz)
118*53ee8cc1Swenshuai.xi     - There are separate internal control lines to provide 10 gain steps for PGA1 and 15 gain steps for PGA2.
119*53ee8cc1Swenshuai.xi       Each gain step is 1 dB increment. The minimum PGA1 gain is 6dB and the minimum PGA2 gain is 0dB.
120*53ee8cc1Swenshuai.xi     - Gain adjustment
121*53ee8cc1Swenshuai.xi       RF signal strong -> weak: Once tuner gain reaches maximum, PGA gain start increasing.
122*53ee8cc1Swenshuai.xi       RF signal weak -> strong: Decreasing tuner gain first and then decreasing PGA gain for maintaining tuner voltage operating above GAIN_DISTRINUTION_THR. Once PGA gain is minimum, tuner gain start decreasing until minimum.
123*53ee8cc1Swenshuai.xi 
124*53ee8cc1Swenshuai.xi     <b> VIF Block Diagram: </b> \n
125*53ee8cc1Swenshuai.xi     \image html drvVIF_pic01.png
126*53ee8cc1Swenshuai.xi     \image html drvVIF_pic02.png
127*53ee8cc1Swenshuai.xi     \image html drvVIF_pic03.png
128*53ee8cc1Swenshuai.xi 
129*53ee8cc1Swenshuai.xi     <b> Operation Code Flow: </b> \n
130*53ee8cc1Swenshuai.xi     -# Prepare VIF setting for each operation
131*53ee8cc1Swenshuai.xi     -# Set and start VIF in command handle
132*53ee8cc1Swenshuai.xi     -# Get Tuner IF output signal
133*53ee8cc1Swenshuai.xi     -# Set setting
134*53ee8cc1Swenshuai.xi     -# Monitor VIF status (FOE, Lock status...etc)
135*53ee8cc1Swenshuai.xi     -# VIF done by polling
136*53ee8cc1Swenshuai.xi 
137*53ee8cc1Swenshuai.xi     \defgroup VIF VIF modules
138*53ee8cc1Swenshuai.xi     \ingroup  VIF
139*53ee8cc1Swenshuai.xi     \defgroup VIF_Basic VIF Basic
140*53ee8cc1Swenshuai.xi     \ingroup  VIF
141*53ee8cc1Swenshuai.xi     \defgroup VIF_Task VIF Task
142*53ee8cc1Swenshuai.xi     \ingroup  VIF
143*53ee8cc1Swenshuai.xi */
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi 
146*53ee8cc1Swenshuai.xi #ifndef _DRVVIF_H_
147*53ee8cc1Swenshuai.xi #define _DRVVIF_H_
148*53ee8cc1Swenshuai.xi 
149*53ee8cc1Swenshuai.xi #ifdef __cplusplus
150*53ee8cc1Swenshuai.xi extern "C"
151*53ee8cc1Swenshuai.xi {
152*53ee8cc1Swenshuai.xi #endif
153*53ee8cc1Swenshuai.xi 
154*53ee8cc1Swenshuai.xi #include "MsCommon.h"
155*53ee8cc1Swenshuai.xi #include "MsIRQ.h"
156*53ee8cc1Swenshuai.xi #include "MsOS.h"
157*53ee8cc1Swenshuai.xi #include "MsTypes.h"
158*53ee8cc1Swenshuai.xi #if 0 // move to drvvif.c
159*53ee8cc1Swenshuai.xi //****************************************************************************
160*53ee8cc1Swenshuai.xi // VIF lib Changelist
161*53ee8cc1Swenshuai.xi //****************************************************************************
162*53ee8cc1Swenshuai.xi #define MSIF_VIF_LIB_CODE     {'V','I','F','_'}
163*53ee8cc1Swenshuai.xi #define MSIF_VIF_LIBVER       {'1','7'}
164*53ee8cc1Swenshuai.xi #define MSIF_VIF_BUILDNUM     {'0','5'}
165*53ee8cc1Swenshuai.xi #define MSIF_VIF_CHANGELIST   {'0','0','6','1','8','0','0','4'}
166*53ee8cc1Swenshuai.xi #define MSIF_VIF_DASH          {'_'}
167*53ee8cc1Swenshuai.xi #define MSIF_VIF_DATE          {'1','3','0','8','1','4'}   // yymmdd
168*53ee8cc1Swenshuai.xi 
169*53ee8cc1Swenshuai.xi #define VIF_DRV_VERSION                 /* Character String for DRV/API version             */  \
170*53ee8cc1Swenshuai.xi     MSIF_TAG,                           /* 'MSIF'                                           */  \
171*53ee8cc1Swenshuai.xi     MSIF_CLASS,                         /* '00'                                             */  \
172*53ee8cc1Swenshuai.xi     MSIF_CUS,                           /* 0x0000                                           */  \
173*53ee8cc1Swenshuai.xi     MSIF_MOD,                           /* 0x0000                                           */  \
174*53ee8cc1Swenshuai.xi     MSIF_CHIP,                                                                                  \
175*53ee8cc1Swenshuai.xi     MSIF_CPU,                                                                                   \
176*53ee8cc1Swenshuai.xi     MSIF_VIF_LIB_CODE,                  /* IP__                                             */  \
177*53ee8cc1Swenshuai.xi     MSIF_VIF_LIBVER,                    /* 0.0 ~ Z.Z                                        */  \
178*53ee8cc1Swenshuai.xi     MSIF_VIF_BUILDNUM,                  /* 00 ~ 99                                          */  \
179*53ee8cc1Swenshuai.xi     MSIF_VIF_CHANGELIST,                /* CL#                                              */  \
180*53ee8cc1Swenshuai.xi     MSIF_OS
181*53ee8cc1Swenshuai.xi #endif
182*53ee8cc1Swenshuai.xi //****************************************************************************
183*53ee8cc1Swenshuai.xi // Public attributes.
184*53ee8cc1Swenshuai.xi //****************************************************************************
185*53ee8cc1Swenshuai.xi 
186*53ee8cc1Swenshuai.xi #ifdef _DRVVIF_C_
187*53ee8cc1Swenshuai.xi #define INTERFACE
188*53ee8cc1Swenshuai.xi #else
189*53ee8cc1Swenshuai.xi #define INTERFACE extern
190*53ee8cc1Swenshuai.xi #endif
191*53ee8cc1Swenshuai.xi 
192*53ee8cc1Swenshuai.xi #ifndef BOOL
193*53ee8cc1Swenshuai.xi #define BOOL MS_BOOL
194*53ee8cc1Swenshuai.xi #endif
195*53ee8cc1Swenshuai.xi #ifndef BYTE
196*53ee8cc1Swenshuai.xi #define BYTE MS_U8
197*53ee8cc1Swenshuai.xi #endif
198*53ee8cc1Swenshuai.xi #ifndef WORD
199*53ee8cc1Swenshuai.xi #define WORD MS_U16
200*53ee8cc1Swenshuai.xi #endif
201*53ee8cc1Swenshuai.xi #ifndef DWORD
202*53ee8cc1Swenshuai.xi #define DWORD MS_U32
203*53ee8cc1Swenshuai.xi #endif
204*53ee8cc1Swenshuai.xi #ifndef U8
205*53ee8cc1Swenshuai.xi #define U8 MS_U8
206*53ee8cc1Swenshuai.xi #endif
207*53ee8cc1Swenshuai.xi #ifndef U16
208*53ee8cc1Swenshuai.xi #define U16 MS_U16
209*53ee8cc1Swenshuai.xi #endif
210*53ee8cc1Swenshuai.xi #ifndef U32
211*53ee8cc1Swenshuai.xi #define U32 MS_U32
212*53ee8cc1Swenshuai.xi #endif
213*53ee8cc1Swenshuai.xi #ifndef VIRT
214*53ee8cc1Swenshuai.xi #define VIRT MS_VIRT
215*53ee8cc1Swenshuai.xi #endif
216*53ee8cc1Swenshuai.xi 
217*53ee8cc1Swenshuai.xi typedef enum
218*53ee8cc1Swenshuai.xi {
219*53ee8cc1Swenshuai.xi     afcBELOW_MINUS_187p5KHz = 0x07,
220*53ee8cc1Swenshuai.xi     afcMINUS_162p5KHz = 0x06,
221*53ee8cc1Swenshuai.xi     afcMINUS_137p5KHz = 0x05,
222*53ee8cc1Swenshuai.xi     afcMINUS_112p5KHz = 0x04,
223*53ee8cc1Swenshuai.xi     afcMINUS_87p5KHz = 0x03,
224*53ee8cc1Swenshuai.xi     afcMINUS_62p5KHz = 0x02,
225*53ee8cc1Swenshuai.xi     afcMINUS_37p5KHz = 0x01,
226*53ee8cc1Swenshuai.xi     afcMINUS_12p5KHz = 0x00,
227*53ee8cc1Swenshuai.xi     afcPLUS_12p5KHz = 0x0F,
228*53ee8cc1Swenshuai.xi     afcPLUS_37p5KHz = 0x0E,
229*53ee8cc1Swenshuai.xi     afcPLUS_62p5KHz = 0x0D,
230*53ee8cc1Swenshuai.xi     afcPLUS_87p5KHz = 0x0C,
231*53ee8cc1Swenshuai.xi     afcPLUS_112p5KHz = 0x0B,
232*53ee8cc1Swenshuai.xi     afcPLUS_137p5KHz = 0x0A,
233*53ee8cc1Swenshuai.xi     afcPLUS_162p5KHz = 0x09,
234*53ee8cc1Swenshuai.xi     afcABOVE_PLUS_187p5KHz = 0x08   //<NHK_070630_eAFC>
235*53ee8cc1Swenshuai.xi } eAFC;
236*53ee8cc1Swenshuai.xi 
237*53ee8cc1Swenshuai.xi 
238*53ee8cc1Swenshuai.xi typedef enum
239*53ee8cc1Swenshuai.xi {
240*53ee8cc1Swenshuai.xi     E_AFC_BELOW_MINUS_187p5KHz      = 0x07,
241*53ee8cc1Swenshuai.xi     E_AFC_MINUS_162p5KHz            = 0x06,
242*53ee8cc1Swenshuai.xi     E_AFC_MINUS_137p5KHz            = 0x05,
243*53ee8cc1Swenshuai.xi     E_AFC_MINUS_112p5KHz            = 0x04,
244*53ee8cc1Swenshuai.xi     E_AFC_MINUS_87p5KHz             = 0x03,
245*53ee8cc1Swenshuai.xi     E_AFC_MINUS_62p5KHz             = 0x02,
246*53ee8cc1Swenshuai.xi     E_AFC_MINUS_37p5KHz             = 0x01,
247*53ee8cc1Swenshuai.xi     E_AFC_MINUS_12p5KHz             = 0x00,
248*53ee8cc1Swenshuai.xi     E_AFC_PLUS_12p5KHz              = 0x0F,
249*53ee8cc1Swenshuai.xi     E_AFC_PLUS_37p5KHz              = 0x0E,
250*53ee8cc1Swenshuai.xi     E_AFC_PLUS_62p5KHz              = 0x0D,
251*53ee8cc1Swenshuai.xi     E_AFC_PLUS_87p5KHz              = 0x0C,
252*53ee8cc1Swenshuai.xi     E_AFC_PLUS_112p5KHz             = 0x0B,
253*53ee8cc1Swenshuai.xi     E_AFC_PLUS_137p5KHz             = 0x0A,
254*53ee8cc1Swenshuai.xi     E_AFC_PLUS_162p5KHz             = 0x09,
255*53ee8cc1Swenshuai.xi     E_AFC_ABOVE_PLUS_187p5KHz       = 0x08,
256*53ee8cc1Swenshuai.xi     E_AFC_OUT_OF_AFCWIN             = 0x10,
257*53ee8cc1Swenshuai.xi } AFC;
258*53ee8cc1Swenshuai.xi 
259*53ee8cc1Swenshuai.xi typedef enum
260*53ee8cc1Swenshuai.xi {
261*53ee8cc1Swenshuai.xi     VIF_IF_FREQ_INVALID,
262*53ee8cc1Swenshuai.xi     VIF_IF_FREQ_B,              // 38.90 MHz
263*53ee8cc1Swenshuai.xi     VIF_IF_FREQ_G,              // 38.90 MHz
264*53ee8cc1Swenshuai.xi     VIF_IF_FREQ_I,              // 38.90 MHz
265*53ee8cc1Swenshuai.xi     VIF_IF_FREQ_DK,             // 38.90 MHz
266*53ee8cc1Swenshuai.xi     VIF_IF_FREQ_L,              // 38.90 MHz
267*53ee8cc1Swenshuai.xi     VIF_IF_FREQ_L_PRIME,        // 33.90 MHz
268*53ee8cc1Swenshuai.xi     VIF_IF_FREQ_MN,             // 45.75 MHz
269*53ee8cc1Swenshuai.xi     VIF_IF_FREQ_J,              // 58.75 MHz
270*53ee8cc1Swenshuai.xi     VIF_IF_FREQ_PAL_38,         // 38.00 MHz
271*53ee8cc1Swenshuai.xi     VIF_IF_FREQ_MAX_IF_FREQ,
272*53ee8cc1Swenshuai.xi     VIF_IF_DIGITAL_MODE
273*53ee8cc1Swenshuai.xi } VIF_IF_FREQ;
274*53ee8cc1Swenshuai.xi 
275*53ee8cc1Swenshuai.xi typedef enum
276*53ee8cc1Swenshuai.xi {
277*53ee8cc1Swenshuai.xi     VIF_SOUND_B,                    // B_STEREO_A2
278*53ee8cc1Swenshuai.xi     VIF_SOUND_B_NICAM,      // B_MONO_NICAM
279*53ee8cc1Swenshuai.xi     VIF_SOUND_GH,                 //GH_STEREO_A2
280*53ee8cc1Swenshuai.xi     VIF_SOUND_GH_NICAM,   // GH_MONO_NICAM
281*53ee8cc1Swenshuai.xi     VIF_SOUND_I,
282*53ee8cc1Swenshuai.xi     VIF_SOUND_DK1,              // DK1_STEREO_A2
283*53ee8cc1Swenshuai.xi     VIF_SOUND_DK2,              // DK2_STEREO_A2
284*53ee8cc1Swenshuai.xi     VIF_SOUND_DK3,              // DK3_STEREO_A2
285*53ee8cc1Swenshuai.xi     VIF_SOUND_DK_NICAM,  // DK_MONO_NICAM
286*53ee8cc1Swenshuai.xi     VIF_SOUND_L,
287*53ee8cc1Swenshuai.xi     VIF_SOUND_LL,
288*53ee8cc1Swenshuai.xi     VIF_SOUND_MN,
289*53ee8cc1Swenshuai.xi     VIF_SOUND_NUMS
290*53ee8cc1Swenshuai.xi }VIFSoundSystem;
291*53ee8cc1Swenshuai.xi 
292*53ee8cc1Swenshuai.xi typedef enum
293*53ee8cc1Swenshuai.xi {
294*53ee8cc1Swenshuai.xi     IF_FREQ_3395, // SECAM-L'
295*53ee8cc1Swenshuai.xi     IF_FREQ_3800, // PAL
296*53ee8cc1Swenshuai.xi     IF_FREQ_3890, // PAL
297*53ee8cc1Swenshuai.xi     IF_FREQ_3950, // only for PAL-I
298*53ee8cc1Swenshuai.xi     IF_FREQ_4575, // NTSC-M/N
299*53ee8cc1Swenshuai.xi     IF_FREQ_5875, // NTSC-M/N
300*53ee8cc1Swenshuai.xi     IF_FREQ_NUMS
301*53ee8cc1Swenshuai.xi }IfFrequencyType;
302*53ee8cc1Swenshuai.xi 
303*53ee8cc1Swenshuai.xi typedef enum
304*53ee8cc1Swenshuai.xi {
305*53ee8cc1Swenshuai.xi     FREQ_VHF_L,
306*53ee8cc1Swenshuai.xi     FREQ_VHF_H,
307*53ee8cc1Swenshuai.xi     FREQ_UHF,
308*53ee8cc1Swenshuai.xi     FREQ_RANGE_NUMS
309*53ee8cc1Swenshuai.xi }FrequencyBand;
310*53ee8cc1Swenshuai.xi 
311*53ee8cc1Swenshuai.xi typedef struct DLL_PACKED _VIFInitialIn
312*53ee8cc1Swenshuai.xi {
313*53ee8cc1Swenshuai.xi     BYTE VifTop;
314*53ee8cc1Swenshuai.xi     BYTE VifIfBaseFreq;
315*53ee8cc1Swenshuai.xi     BYTE VifTunerStepSize;
316*53ee8cc1Swenshuai.xi     BYTE VifSawArch;
317*53ee8cc1Swenshuai.xi     WORD VifVgaMaximum;
318*53ee8cc1Swenshuai.xi     WORD VifVgaMinimum;
319*53ee8cc1Swenshuai.xi     WORD GainDistributionThr;
320*53ee8cc1Swenshuai.xi     BYTE VifAgcVgaBase;
321*53ee8cc1Swenshuai.xi     BYTE VifAgcVgaOffs;
322*53ee8cc1Swenshuai.xi     BYTE VifAgcRefNegative;
323*53ee8cc1Swenshuai.xi     BYTE VifAgcRefPositive;
324*53ee8cc1Swenshuai.xi     BYTE VifDagc1Ref;
325*53ee8cc1Swenshuai.xi     BYTE VifDagc2Ref;
326*53ee8cc1Swenshuai.xi     WORD VifDagc1GainOv;
327*53ee8cc1Swenshuai.xi     WORD VifDagc2GainOv;
328*53ee8cc1Swenshuai.xi     BYTE VifCrKf1;
329*53ee8cc1Swenshuai.xi     BYTE VifCrKp1;
330*53ee8cc1Swenshuai.xi     BYTE VifCrKi1;
331*53ee8cc1Swenshuai.xi     BYTE VifCrKp2;
332*53ee8cc1Swenshuai.xi     BYTE VifCrKi2;
333*53ee8cc1Swenshuai.xi     BYTE VifCrKp;
334*53ee8cc1Swenshuai.xi     BYTE VifCrKi;
335*53ee8cc1Swenshuai.xi     WORD VifCrLockThr;
336*53ee8cc1Swenshuai.xi     WORD VifCrThr;
337*53ee8cc1Swenshuai.xi     DWORD VifCrLockNum;
338*53ee8cc1Swenshuai.xi     DWORD VifCrUnlockNum;
339*53ee8cc1Swenshuai.xi     WORD VifCrPdErrMax;
340*53ee8cc1Swenshuai.xi     BOOL VifCrLockLeakySel;
341*53ee8cc1Swenshuai.xi     BOOL VifCrPdX2;
342*53ee8cc1Swenshuai.xi     BOOL VifCrLpfSel;
343*53ee8cc1Swenshuai.xi     BOOL VifCrPdModeSel;
344*53ee8cc1Swenshuai.xi     BOOL VifCrKpKiAdjust;
345*53ee8cc1Swenshuai.xi     BYTE VifCrKpKiAdjustGear;
346*53ee8cc1Swenshuai.xi     BYTE VifCrKpKiAdjustThr1;
347*53ee8cc1Swenshuai.xi     BYTE VifCrKpKiAdjustThr2;
348*53ee8cc1Swenshuai.xi     BYTE VifCrKpKiAdjustThr3;
349*53ee8cc1Swenshuai.xi     BOOL VifDynamicTopAdjust;
350*53ee8cc1Swenshuai.xi     BYTE VifDynamicTopMin;
351*53ee8cc1Swenshuai.xi     BOOL VifAmHumDetection;
352*53ee8cc1Swenshuai.xi     BOOL VifClampgainClampSel;
353*53ee8cc1Swenshuai.xi     BYTE VifClampgainSyncbottRef;
354*53ee8cc1Swenshuai.xi     BYTE VifClampgainSyncheightRef;
355*53ee8cc1Swenshuai.xi     BYTE VifClampgainKc;
356*53ee8cc1Swenshuai.xi     BYTE VifClampgainKg;
357*53ee8cc1Swenshuai.xi     BOOL VifClampgainClampOren;
358*53ee8cc1Swenshuai.xi     BOOL VifClampgainGainOren;
359*53ee8cc1Swenshuai.xi     WORD VifClampgainClampOvNegative;
360*53ee8cc1Swenshuai.xi     WORD VifClampgainGainOvNegative;
361*53ee8cc1Swenshuai.xi     WORD VifClampgainClampOvPositive;
362*53ee8cc1Swenshuai.xi     WORD VifClampgainGainOvPositive;
363*53ee8cc1Swenshuai.xi     BYTE VifClampgainClampMin;
364*53ee8cc1Swenshuai.xi     BYTE VifClampgainClampMax;
365*53ee8cc1Swenshuai.xi     BYTE VifClampgainGainMin;
366*53ee8cc1Swenshuai.xi     BYTE VifClampgainGainMax;
367*53ee8cc1Swenshuai.xi     WORD VifClampgainPorchCnt;
368*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterB_VHF_L;
369*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterB_VHF_L;
370*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterB_VHF_L;
371*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterGH_VHF_L;
372*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterGH_VHF_L;
373*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterGH_VHF_L;
374*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterDK_VHF_L;
375*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterDK_VHF_L;
376*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterDK_VHF_L;
377*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterI_VHF_L;
378*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterI_VHF_L;
379*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterI_VHF_L;
380*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterL_VHF_L;
381*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterL_VHF_L;
382*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterL_VHF_L;
383*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterLL_VHF_L;
384*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterLL_VHF_L;
385*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterLL_VHF_L;
386*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterMN_VHF_L;
387*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterMN_VHF_L;
388*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterMN_VHF_L;
389*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterB_VHF_H;
390*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterB_VHF_H;
391*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterB_VHF_H;
392*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterGH_VHF_H;
393*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterGH_VHF_H;
394*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterGH_VHF_H;
395*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterDK_VHF_H;
396*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterDK_VHF_H;
397*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterDK_VHF_H;
398*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterI_VHF_H;
399*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterI_VHF_H;
400*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterI_VHF_H;
401*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterL_VHF_H;
402*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterL_VHF_H;
403*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterL_VHF_H;
404*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterLL_VHF_H;
405*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterLL_VHF_H;
406*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterLL_VHF_H;
407*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterMN_VHF_H;
408*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterMN_VHF_H;
409*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterMN_VHF_H;
410*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterB_UHF;
411*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterB_UHF;
412*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterB_UHF;
413*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterGH_UHF;
414*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterGH_UHF;
415*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterGH_UHF;
416*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterDK_UHF;
417*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterDK_UHF;
418*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterDK_UHF;
419*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterI_UHF;
420*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterI_UHF;
421*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterI_UHF;
422*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterL_UHF;
423*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterL_UHF;
424*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterL_UHF;
425*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterLL_UHF;
426*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterLL_UHF;
427*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterLL_UHF;
428*53ee8cc1Swenshuai.xi     BYTE VifPeakingFilterMN_UHF;
429*53ee8cc1Swenshuai.xi     BYTE VifYcDelayFilterMN_UHF;
430*53ee8cc1Swenshuai.xi     BYTE VifGroupDelayFilterMN_UHF;
431*53ee8cc1Swenshuai.xi     BYTE ChinaDescramblerBox;
432*53ee8cc1Swenshuai.xi     BYTE VifDelayReduce;
433*53ee8cc1Swenshuai.xi     BOOL VifOverModulation;
434*53ee8cc1Swenshuai.xi     BOOL VifOverModulationDetect;
435*53ee8cc1Swenshuai.xi     BOOL VifACIDetect;
436*53ee8cc1Swenshuai.xi     BOOL VifSeriousACIDetect;
437*53ee8cc1Swenshuai.xi     BYTE VifACIAGCREF;
438*53ee8cc1Swenshuai.xi     BYTE VifADCOverflowAGCREF;
439*53ee8cc1Swenshuai.xi     BYTE VifChanelScanAGCREF;
440*53ee8cc1Swenshuai.xi     BYTE VifACIDetTHR1;
441*53ee8cc1Swenshuai.xi     BYTE VifACIDetTHR2;
442*53ee8cc1Swenshuai.xi     BYTE VifACIDetTHR3;
443*53ee8cc1Swenshuai.xi     BYTE VifACIDetTHR4;
444*53ee8cc1Swenshuai.xi     BYTE VifFreqBand;
445*53ee8cc1Swenshuai.xi     WORD VifSos21FilterC0;
446*53ee8cc1Swenshuai.xi     WORD VifSos21FilterC1;
447*53ee8cc1Swenshuai.xi     WORD VifSos21FilterC2;
448*53ee8cc1Swenshuai.xi     WORD VifSos21FilterC3;
449*53ee8cc1Swenshuai.xi     WORD VifSos21FilterC4;
450*53ee8cc1Swenshuai.xi     WORD VifSos22FilterC0;
451*53ee8cc1Swenshuai.xi     WORD VifSos22FilterC1;
452*53ee8cc1Swenshuai.xi     WORD VifSos22FilterC2;
453*53ee8cc1Swenshuai.xi     WORD VifSos22FilterC3;
454*53ee8cc1Swenshuai.xi     WORD VifSos22FilterC4;
455*53ee8cc1Swenshuai.xi     WORD VifSos31FilterC0;
456*53ee8cc1Swenshuai.xi     WORD VifSos31FilterC1;
457*53ee8cc1Swenshuai.xi     WORD VifSos31FilterC2;
458*53ee8cc1Swenshuai.xi     WORD VifSos31FilterC3;
459*53ee8cc1Swenshuai.xi     WORD VifSos31FilterC4;
460*53ee8cc1Swenshuai.xi     WORD VifSos32FilterC0;
461*53ee8cc1Swenshuai.xi     WORD VifSos32FilterC1;
462*53ee8cc1Swenshuai.xi     WORD VifSos32FilterC2;
463*53ee8cc1Swenshuai.xi     WORD VifSos32FilterC3;
464*53ee8cc1Swenshuai.xi     WORD VifSos32FilterC4;
465*53ee8cc1Swenshuai.xi     BYTE VifTunerType;
466*53ee8cc1Swenshuai.xi     DWORD VifCrRate_B;
467*53ee8cc1Swenshuai.xi     BOOL VifCrInvert_B;
468*53ee8cc1Swenshuai.xi     DWORD VifCrRate_GH;
469*53ee8cc1Swenshuai.xi     BOOL VifCrInvert_GH;
470*53ee8cc1Swenshuai.xi     DWORD VifCrRate_DK;
471*53ee8cc1Swenshuai.xi     BOOL VifCrInvert_DK;
472*53ee8cc1Swenshuai.xi     DWORD VifCrRate_I;
473*53ee8cc1Swenshuai.xi     BOOL VifCrInvert_I;
474*53ee8cc1Swenshuai.xi     DWORD VifCrRate_L;
475*53ee8cc1Swenshuai.xi     BOOL VifCrInvert_L;
476*53ee8cc1Swenshuai.xi     DWORD VifCrRate_LL;
477*53ee8cc1Swenshuai.xi     BOOL VifCrInvert_LL;
478*53ee8cc1Swenshuai.xi     DWORD VifCrRate_MN;
479*53ee8cc1Swenshuai.xi     BOOL VifCrInvert_MN;
480*53ee8cc1Swenshuai.xi     BYTE VifReserve;
481*53ee8cc1Swenshuai.xi }VIFInitialIn;
482*53ee8cc1Swenshuai.xi 
483*53ee8cc1Swenshuai.xi typedef enum
484*53ee8cc1Swenshuai.xi {
485*53ee8cc1Swenshuai.xi     VIF_PARA_USER_FILTER,                                          // VIFUserFilter
486*53ee8cc1Swenshuai.xi     VIF_PARA_TOP,                                                         // DWORD
487*53ee8cc1Swenshuai.xi     VIF_PARA_LEAKY_SEL,                                             // DWORD
488*53ee8cc1Swenshuai.xi     VIF_PARA_K_SEL,                                                     // DWORD
489*53ee8cc1Swenshuai.xi     VIF_PARA_GET_VERSION,                                       // U8[30] return
490*53ee8cc1Swenshuai.xi     VIF_PARA_SET_BYPASS_PEAKING_SOS21,          // DWORD
491*53ee8cc1Swenshuai.xi     VIF_PARA_GET_PGA2_LEVEL,                                   // BYTE return
492*53ee8cc1Swenshuai.xi     VIF_PARA_GET_IF,			// WORD return
493*53ee8cc1Swenshuai.xi     VIF_PARA_GET_K_SEL,			// BYTE return
494*53ee8cc1Swenshuai.xi     VIF_PARA_SET_HW_KPKI,       // DWORD
495*53ee8cc1Swenshuai.xi     VIF_PARA_SET_TAGC_ODMODE,    // DWORD
496*53ee8cc1Swenshuai.xi     VIF_PARA_SET_NOTCH_A1A2,    // VIFNotchA1A2: please set user notch after setting sound system to overwrite default values
497*53ee8cc1Swenshuai.xi     VIF_PARA_SET_SOS_1112,        // VIFSOS1112: please set user SOS after setting sound system to overwrite default values
498*53ee8cc1Swenshuai.xi     VIF_PARA_GET_PD_INV,    // BYTE return
499*53ee8cc1Swenshuai.xi     VIF_PARA_SET_PD_INV,    // DWORD
500*53ee8cc1Swenshuai.xi     VIF_PARA_GET_VGA, //WORD return
501*53ee8cc1Swenshuai.xi     VIF_PARA_SET_CLAMPGAIN_GAIN_OV_POS,    // DWORD
502*53ee8cc1Swenshuai.xi     VIF_PARA_SET_CLAMPGAIN_GAIN_OV_NEG,    // DWORD
503*53ee8cc1Swenshuai.xi     VIF_PARA_SET_AGC_K, //DWORD;     B3[0]: enable user steady agc_k, B2[2~0]: user steady agc_value, B1[0]: enable user non steady agc_k, B0[2~0]: user non steady agc_value
504*53ee8cc1Swenshuai.xi     VIF_PARA_SET_AGC_REF, //DWORD
505*53ee8cc1Swenshuai.xi     VIF_PARA_SET_IF_RATE_FM,  //DWORD
506*53ee8cc1Swenshuai.xi     VIF_PARA_SET_CR_RATE_FM, //DWORD
507*53ee8cc1Swenshuai.xi     VIF_PARA_SET_DESCRAMBLERBOX_DELAY, //DWORD
508*53ee8cc1Swenshuai.xi     VIF_PARA_SET_SSC_ENABLE, //DWORD
509*53ee8cc1Swenshuai.xi     VIF_PARA_SET_DISABLE_ADAGC,
510*53ee8cc1Swenshuai.xi     VIF_PARA_SET_ENABLE_SOS33,
511*53ee8cc1Swenshuai.xi     VIF_PARA_GROUP_NUMS
512*53ee8cc1Swenshuai.xi }VIF_PARA_GROUP;
513*53ee8cc1Swenshuai.xi 
514*53ee8cc1Swenshuai.xi 
515*53ee8cc1Swenshuai.xi typedef enum
516*53ee8cc1Swenshuai.xi {
517*53ee8cc1Swenshuai.xi     PK_START=1,
518*53ee8cc1Swenshuai.xi     PK_B_VHF_L=PK_START,  //PeakingFilterB_VHF_L,
519*53ee8cc1Swenshuai.xi     PK_GH_VHF_L, //PeakingFilterGH_VHF_L,
520*53ee8cc1Swenshuai.xi     PK_DK_VHF_L, //PeakingFilterDK_VHF_L,
521*53ee8cc1Swenshuai.xi     PK_I_VHF_L,  //PeakingFilterI_VHF_L,
522*53ee8cc1Swenshuai.xi     PK_L_VHF_L,  //PeakingFilterL_VHF_L,
523*53ee8cc1Swenshuai.xi     PK_LL_VHF_L, //PeakingFilterLL_VHF_L,
524*53ee8cc1Swenshuai.xi     PK_MN_VHF_L, //PeakingFilterMN_VHF_L,
525*53ee8cc1Swenshuai.xi     PK_B_VHF_H,  //PeakingFilterB_VHF_H,
526*53ee8cc1Swenshuai.xi     PK_GH_VHF_H, //PeakingFilterGH_VHF_H,
527*53ee8cc1Swenshuai.xi     PK_DK_VHF_H, //PeakingFilterDK_VHF_H,
528*53ee8cc1Swenshuai.xi     PK_I_VHF_H,  //PeakingFilterI_VHF_H,
529*53ee8cc1Swenshuai.xi     PK_L_VHF_H,  //PeakingFilterL_VHF_H,
530*53ee8cc1Swenshuai.xi     PK_LL_VHF_H, //PeakingFilterLL_VHF_H,
531*53ee8cc1Swenshuai.xi     PK_MN_VHF_H, //PeakingFilterMN_VHF_H,
532*53ee8cc1Swenshuai.xi     PK_B_UHF,  //PeakingFilterB_UHF,
533*53ee8cc1Swenshuai.xi     PK_GH_UHF, //PeakingFilterGH_UHF,
534*53ee8cc1Swenshuai.xi     PK_DK_UHF, //PeakingFilterDK_UHF,
535*53ee8cc1Swenshuai.xi     PK_I_UHF,  //PeakingFilterI_UHF,
536*53ee8cc1Swenshuai.xi     PK_L_UHF,  //PeakingFilterL_UHF,
537*53ee8cc1Swenshuai.xi     PK_LL_UHF, //PeakingFilterLL_UHF,
538*53ee8cc1Swenshuai.xi     PK_MN_UHF, //PeakingFilterMN_UHF,
539*53ee8cc1Swenshuai.xi     PK_END=PK_MN_UHF,
540*53ee8cc1Swenshuai.xi 
541*53ee8cc1Swenshuai.xi     YC_START,
542*53ee8cc1Swenshuai.xi     YC_B_VHF_L=YC_START,  //YcDelayFilterB_VHF_L,
543*53ee8cc1Swenshuai.xi     YC_GH_VHF_L, //YcDelayFilterGH_VHF_L,
544*53ee8cc1Swenshuai.xi     YC_DK_VHF_L, //YcDelayFilterDK_VHF_L,
545*53ee8cc1Swenshuai.xi     YC_I_VHF_L,  //YcDelayFilterI_VHF_L,
546*53ee8cc1Swenshuai.xi     YC_L_VHF_L,  //YcDelayFilterL_VHF_L,
547*53ee8cc1Swenshuai.xi     YC_LL_VHF_L, //YcDelayFilterLL_VHF_L,
548*53ee8cc1Swenshuai.xi     YC_MN_VHF_L, //YcDelayFilterMN_VHF_L,
549*53ee8cc1Swenshuai.xi     YC_B_VHF_H,  //YcDelayFilterB_VHF_H,
550*53ee8cc1Swenshuai.xi     YC_GH_VHF_H, //YcDelayFilterGH_VHF_H,
551*53ee8cc1Swenshuai.xi     YC_DK_VHF_H, //YcDelayFilterDK_VHF_H,
552*53ee8cc1Swenshuai.xi     YC_I_VHF_H,  //YcDelayFilterI_VHF_H,
553*53ee8cc1Swenshuai.xi     YC_L_VHF_H,  //YcDelayFilterL_VHF_H,
554*53ee8cc1Swenshuai.xi     YC_LL_VHF_H, //YcDelayFilterLL_VHF_H,
555*53ee8cc1Swenshuai.xi     YC_MN_VHF_H, //YcDelayFilterMN_VHF_H,
556*53ee8cc1Swenshuai.xi     YC_B_UHF,  //YcDelayFilterB_UHF,
557*53ee8cc1Swenshuai.xi     YC_GH_UHF, //YcDelayFilterGH_UHF,
558*53ee8cc1Swenshuai.xi     YC_DK_UHF, //YcDelayFilterDK_UHF,
559*53ee8cc1Swenshuai.xi     YC_I_UHF,  //YcDelayFilterI_UHF,
560*53ee8cc1Swenshuai.xi     YC_L_UHF,  //YcDelayFilterL_UHF,
561*53ee8cc1Swenshuai.xi     YC_LL_UHF, //YcDelayFilterLL_UHF,
562*53ee8cc1Swenshuai.xi     YC_MN_UHF, //YcDelayFilterMN_UHF,
563*53ee8cc1Swenshuai.xi     YC_END=YC_MN_UHF,
564*53ee8cc1Swenshuai.xi 
565*53ee8cc1Swenshuai.xi     GP_START,
566*53ee8cc1Swenshuai.xi     GP_B_VHF_L=GP_START,  //GroupDelayFilterB_VHF_L,
567*53ee8cc1Swenshuai.xi     GP_GH_VHF_L, //GroupDelayFilterGH_VHF_L,
568*53ee8cc1Swenshuai.xi     GP_DK_VHF_L, //GroupDelayFilterDK_VHF_L,
569*53ee8cc1Swenshuai.xi     GP_I_VHF_L,  //GroupDelayFilterI_VHF_L,
570*53ee8cc1Swenshuai.xi     GP_L_VHF_L,  //GroupDelayFilterL_VHF_L,
571*53ee8cc1Swenshuai.xi     GP_LL_VHF_L, //GroupDelayFilterLL_VHF_L,
572*53ee8cc1Swenshuai.xi     GP_MN_VHF_L, //GroupDelayFilterMN_VHF_L,
573*53ee8cc1Swenshuai.xi     GP_B_VHF_H,  //GroupDelayFilterB_VHF_H,
574*53ee8cc1Swenshuai.xi     GP_GH_VHF_H, //GroupDelayFilterGH_VHF_H,
575*53ee8cc1Swenshuai.xi     GP_DK_VHF_H, //GroupDelayFilterDK_VHF_H,
576*53ee8cc1Swenshuai.xi     GP_I_VHF_H,  //GroupDelayFilterI_VHF_H,
577*53ee8cc1Swenshuai.xi     GP_L_VHF_H,  //GroupDelayFilterL_VHF_H,
578*53ee8cc1Swenshuai.xi     GP_LL_VHF_H, //GroupDelayFilterLL_VHF_H,
579*53ee8cc1Swenshuai.xi     GP_MN_VHF_H, //GroupDelayFilterMN_VHF_H,
580*53ee8cc1Swenshuai.xi     GP_B_UHF,  //GroupDelayFilterB_UHF,
581*53ee8cc1Swenshuai.xi     GP_GH_UHF, //GroupDelayFilterGH_UHF,
582*53ee8cc1Swenshuai.xi     GP_DK_UHF, //GroupDelayFilterDK_UHF,
583*53ee8cc1Swenshuai.xi     GP_I_UHF,  //GroupDelayFilterI_UHF,
584*53ee8cc1Swenshuai.xi     GP_L_UHF,  //GroupDelayFilterL_UHF,
585*53ee8cc1Swenshuai.xi     GP_LL_UHF, //GroupDelayFilterLL_UHF,
586*53ee8cc1Swenshuai.xi     GP_MN_UHF, //GroupDelayFilterMN_UHF,
587*53ee8cc1Swenshuai.xi     GP_END=GP_MN_UHF,
588*53ee8cc1Swenshuai.xi 
589*53ee8cc1Swenshuai.xi     VIF_USER_FILTER_SELECT_NUMS
590*53ee8cc1Swenshuai.xi }VIF_USER_FILTER_SELECT;
591*53ee8cc1Swenshuai.xi 
592*53ee8cc1Swenshuai.xi typedef struct DLL_PACKED _VIFUserFilter
593*53ee8cc1Swenshuai.xi {
594*53ee8cc1Swenshuai.xi     WORD VifSos21FilterC0;
595*53ee8cc1Swenshuai.xi     WORD VifSos21FilterC1;
596*53ee8cc1Swenshuai.xi     WORD VifSos21FilterC2;
597*53ee8cc1Swenshuai.xi     WORD VifSos21FilterC3;
598*53ee8cc1Swenshuai.xi     WORD VifSos21FilterC4;
599*53ee8cc1Swenshuai.xi     WORD VifSos22FilterC0;
600*53ee8cc1Swenshuai.xi     WORD VifSos22FilterC1;
601*53ee8cc1Swenshuai.xi     WORD VifSos22FilterC2;
602*53ee8cc1Swenshuai.xi     WORD VifSos22FilterC3;
603*53ee8cc1Swenshuai.xi     WORD VifSos22FilterC4;
604*53ee8cc1Swenshuai.xi     WORD VifSos31FilterC0;
605*53ee8cc1Swenshuai.xi     WORD VifSos31FilterC1;
606*53ee8cc1Swenshuai.xi     WORD VifSos31FilterC2;
607*53ee8cc1Swenshuai.xi     WORD VifSos31FilterC3;
608*53ee8cc1Swenshuai.xi     WORD VifSos31FilterC4;
609*53ee8cc1Swenshuai.xi     WORD VifSos32FilterC0;
610*53ee8cc1Swenshuai.xi     WORD VifSos32FilterC1;
611*53ee8cc1Swenshuai.xi     WORD VifSos32FilterC2;
612*53ee8cc1Swenshuai.xi     WORD VifSos32FilterC3;
613*53ee8cc1Swenshuai.xi     WORD VifSos32FilterC4;
614*53ee8cc1Swenshuai.xi     //WORD VifSos33FilterC0;
615*53ee8cc1Swenshuai.xi     //WORD VifSos33FilterC1;
616*53ee8cc1Swenshuai.xi     //WORD VifSos33FilterC2;
617*53ee8cc1Swenshuai.xi     //WORD VifSos33FilterC3;
618*53ee8cc1Swenshuai.xi     //WORD VifSos33FilterC4;
619*53ee8cc1Swenshuai.xi     BYTE VifUserPeakingFilterSelect;
620*53ee8cc1Swenshuai.xi     BYTE VifUserYcDelayFilterSelect;
621*53ee8cc1Swenshuai.xi     BYTE VifUserGroupDelayFilterSelect;
622*53ee8cc1Swenshuai.xi }VIFUserFilter;
623*53ee8cc1Swenshuai.xi 
624*53ee8cc1Swenshuai.xi typedef struct DLL_PACKED _VIFNotchA1A2
625*53ee8cc1Swenshuai.xi {
626*53ee8cc1Swenshuai.xi     WORD Vif_N_A1_C0;
627*53ee8cc1Swenshuai.xi     WORD Vif_N_A1_C1;
628*53ee8cc1Swenshuai.xi     WORD Vif_N_A1_C2;
629*53ee8cc1Swenshuai.xi     WORD Vif_N_A2_C0;
630*53ee8cc1Swenshuai.xi     WORD Vif_N_A2_C1;
631*53ee8cc1Swenshuai.xi     WORD Vif_N_A2_C2;
632*53ee8cc1Swenshuai.xi }VIFNotchA1A2;
633*53ee8cc1Swenshuai.xi 
634*53ee8cc1Swenshuai.xi typedef struct DLL_PACKED _VIFSOS1112
635*53ee8cc1Swenshuai.xi {
636*53ee8cc1Swenshuai.xi     WORD Vif_SOS_11_C0;
637*53ee8cc1Swenshuai.xi     WORD Vif_SOS_11_C1;
638*53ee8cc1Swenshuai.xi     WORD Vif_SOS_11_C2;
639*53ee8cc1Swenshuai.xi     WORD Vif_SOS_11_C3;
640*53ee8cc1Swenshuai.xi     WORD Vif_SOS_11_C4;
641*53ee8cc1Swenshuai.xi     WORD Vif_SOS_12_C0;
642*53ee8cc1Swenshuai.xi     WORD Vif_SOS_12_C1;
643*53ee8cc1Swenshuai.xi     WORD Vif_SOS_12_C2;
644*53ee8cc1Swenshuai.xi     WORD Vif_SOS_12_C3;
645*53ee8cc1Swenshuai.xi     WORD Vif_SOS_12_C4;
646*53ee8cc1Swenshuai.xi }VIFSOS1112;
647*53ee8cc1Swenshuai.xi 
648*53ee8cc1Swenshuai.xi typedef struct DLL_PACKED _VIFSOS33
649*53ee8cc1Swenshuai.xi {
650*53ee8cc1Swenshuai.xi     WORD Vif_SOS_33_C0;
651*53ee8cc1Swenshuai.xi     WORD Vif_SOS_33_C1;
652*53ee8cc1Swenshuai.xi     WORD Vif_SOS_33_C2;
653*53ee8cc1Swenshuai.xi     WORD Vif_SOS_33_C3;
654*53ee8cc1Swenshuai.xi     WORD Vif_SOS_33_C4;
655*53ee8cc1Swenshuai.xi }VIFSOS33;
656*53ee8cc1Swenshuai.xi 
657*53ee8cc1Swenshuai.xi //****************************************************************************
658*53ee8cc1Swenshuai.xi // Public functions.
659*53ee8cc1Swenshuai.xi //****************************************************************************
660*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
661*53ee8cc1Swenshuai.xi /// Check VIF version
662*53ee8cc1Swenshuai.xi /// @ingroup VIF_BASIC
663*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
664*53ee8cc1Swenshuai.xi /// @return FALSE : fail
665*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
666*53ee8cc1Swenshuai.xi INTERFACE void DRV_VIF_Version(void);
667*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
668*53ee8cc1Swenshuai.xi /// VIF Set Clock
669*53ee8cc1Swenshuai.xi /// @ingroup VIF_BASIC
670*53ee8cc1Swenshuai.xi /// @param  bEnable   \b IN: 0:means enable
671*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
672*53ee8cc1Swenshuai.xi /// @return FALSE : fail
673*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
674*53ee8cc1Swenshuai.xi INTERFACE void DRV_VIF_SetClock(BOOL bEnable);
675*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
676*53ee8cc1Swenshuai.xi /// Initialize VIF setting (any register access should be after this function)
677*53ee8cc1Swenshuai.xi /// @ingroup VIF_BASIC
678*53ee8cc1Swenshuai.xi /// @param  pVIF_InitData     \b IN: init data
679*53ee8cc1Swenshuai.xi /// @param  u32InitDataLen  \b IN: init data size
680*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
681*53ee8cc1Swenshuai.xi /// @return FALSE : fail
682*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
683*53ee8cc1Swenshuai.xi INTERFACE void DRV_VIF_Init(VIFInitialIn * pVIF_InitData, DWORD u32InitDataLen);
684*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
685*53ee8cc1Swenshuai.xi /// VIF Software Reset
686*53ee8cc1Swenshuai.xi /// @ingroup VIF_Basic
687*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
688*53ee8cc1Swenshuai.xi /// @return FALSE : fail
689*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
690*53ee8cc1Swenshuai.xi INTERFACE void DRV_VIF_Reset(void);
691*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
692*53ee8cc1Swenshuai.xi /// VIF Software Exit
693*53ee8cc1Swenshuai.xi /// @ingroup VIF_Basic
694*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
695*53ee8cc1Swenshuai.xi /// @return FALSE : fail
696*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
697*53ee8cc1Swenshuai.xi INTERFACE void DRV_VIF_Exit(void);
698*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
699*53ee8cc1Swenshuai.xi /// VIF Handler (monitor all VIF functions)
700*53ee8cc1Swenshuai.xi /// @ingroup VIF_Basic
701*53ee8cc1Swenshuai.xi /// @param  bAutoScan     \b IN: init data
702*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
703*53ee8cc1Swenshuai.xi /// @return FALSE : fail
704*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
705*53ee8cc1Swenshuai.xi INTERFACE void DRV_VIF_Handler(BOOL bAutoScan);
706*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
707*53ee8cc1Swenshuai.xi /// VIF Set Sound System
708*53ee8cc1Swenshuai.xi /// @ingroup VIF_Basic
709*53ee8cc1Swenshuai.xi /// @param  ucSoundSystem     \b IN: VIFSoundSystems
710*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
711*53ee8cc1Swenshuai.xi /// @return FALSE : fail
712*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
713*53ee8cc1Swenshuai.xi INTERFACE void DRV_VIF_SetSoundSystem(VIFSoundSystem ucSoundSystem);
714*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
715*53ee8cc1Swenshuai.xi /// VIF Set IF Frequnecy
716*53ee8cc1Swenshuai.xi /// @ingroup VIF_Basic
717*53ee8cc1Swenshuai.xi /// @param  u16IfFreq     \b IN: IF Frequency
718*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
719*53ee8cc1Swenshuai.xi /// @return FALSE : fail
720*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
721*53ee8cc1Swenshuai.xi INTERFACE void DRV_VIF_SetIfFreq(IfFrequencyType u16IfFreq);
722*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
723*53ee8cc1Swenshuai.xi /// VIF Read CR FOE
724*53ee8cc1Swenshuai.xi /// @ingroup VIF_Basic
725*53ee8cc1Swenshuai.xi /// @return TRUE : CR_FOE
726*53ee8cc1Swenshuai.xi /// @return FALSE : 0, fail
727*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
728*53ee8cc1Swenshuai.xi INTERFACE U8 DRV_VIF_Read_CR_FOE(void);
729*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
730*53ee8cc1Swenshuai.xi /// VIF Read CR Lock Status
731*53ee8cc1Swenshuai.xi /// @ingroup VIF_Basic
732*53ee8cc1Swenshuai.xi /// @return TRUE : CR_LOCK_STATUS
733*53ee8cc1Swenshuai.xi /// @return FALSE : 0, fail
734*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
735*53ee8cc1Swenshuai.xi INTERFACE U8 DRV_VIF_Read_CR_LOCK_STATUS(void);
736*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
737*53ee8cc1Swenshuai.xi /// VIF Bypass DBB Audio Filter (A_DAGC_SEL)
738*53ee8cc1Swenshuai.xi /// @ingroup VIF_Task
739*53ee8cc1Swenshuai.xi /// @param  bEnable     \b IN: bEnable
740*53ee8cc1Swenshuai.xi /// @return TRUE : 1, input from a_lpf_up
741*53ee8cc1Swenshuai.xi /// @return FALSE : 0, input from a_sos
742*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
743*53ee8cc1Swenshuai.xi INTERFACE void DRV_VIF_BypassDBBAudioFilter(BOOL bEnable);
744*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
745*53ee8cc1Swenshuai.xi /// VIF Set Frquency Band
746*53ee8cc1Swenshuai.xi /// @ingroup VIF_Basic
747*53ee8cc1Swenshuai.xi /// @param  u8FreqBand     \b IN: frequency band
748*53ee8cc1Swenshuai.xi /// @return TRUE : VifFreqBand
749*53ee8cc1Swenshuai.xi /// @return FALSE : 0
750*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
751*53ee8cc1Swenshuai.xi INTERFACE void DRV_VIF_SetFreqBand(FrequencyBand u8FreqBand);
752*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
753*53ee8cc1Swenshuai.xi /// VIF Get Input Level Indicator
754*53ee8cc1Swenshuai.xi /// @ingroup VIF_Task
755*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
756*53ee8cc1Swenshuai.xi /// @return FALSE :  fail
757*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
758*53ee8cc1Swenshuai.xi INTERFACE BOOL DRV_VIF_GetInputLevelIndicator(void);
759*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
760*53ee8cc1Swenshuai.xi /// VIF Set Parameters
761*53ee8cc1Swenshuai.xi /// @ingroup VIF_Task
762*53ee8cc1Swenshuai.xi /// @param  paraGroup     \b IN: Parameters Group
763*53ee8cc1Swenshuai.xi /// @param  pVIF_Para     \b IN: Parameters
764*53ee8cc1Swenshuai.xi /// @param  u32DataLen     \b IN: Data Length
765*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
766*53ee8cc1Swenshuai.xi /// @return FALSE :  fail
767*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
768*53ee8cc1Swenshuai.xi INTERFACE BOOL DRV_VIF_SetParameter(VIF_PARA_GROUP paraGroup, void * pVIF_Para, DWORD u32DataLen);
769*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
770*53ee8cc1Swenshuai.xi /// VIF Set Shift Clock
771*53ee8cc1Swenshuai.xi /// @ingroup VIF_Task
772*53ee8cc1Swenshuai.xi /// @param  VifShiftClk     \b IN: 0 (42MHz, 140MHz), 1(44.4MHz, 148MHz), 2(43.2MHz, 142MHz)
773*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
774*53ee8cc1Swenshuai.xi /// @return FALSE :  fail
775*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
776*53ee8cc1Swenshuai.xi INTERFACE void DRV_VIF_ShiftClk(BYTE VifShiftClk);
777*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
778*53ee8cc1Swenshuai.xi /// VIF Set Power State
779*53ee8cc1Swenshuai.xi /// @ingroup VIF_Task
780*53ee8cc1Swenshuai.xi /// @param  u16PowerState     \b IN: Power State
781*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
782*53ee8cc1Swenshuai.xi /// @return FALSE :  fail
783*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
784*53ee8cc1Swenshuai.xi INTERFACE MS_U32 MDrv_VIF_SetPowerState(EN_POWER_MODE u16PowerState);
785*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
786*53ee8cc1Swenshuai.xi /// VIF Write Byte
787*53ee8cc1Swenshuai.xi /// @ingroup VIF_Basic
788*53ee8cc1Swenshuai.xi /// @param  u32Reg     \b IN: Register address
789*53ee8cc1Swenshuai.xi /// @param  u8Val     \b IN: Value
790*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
791*53ee8cc1Swenshuai.xi /// @return FALSE :  fail
792*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
793*53ee8cc1Swenshuai.xi INTERFACE void DRV_VIF_WriteByte(U32 u32Reg, U8 u8Val );
794*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
795*53ee8cc1Swenshuai.xi /// VIF Read Byte
796*53ee8cc1Swenshuai.xi /// @ingroup VIF_Basic
797*53ee8cc1Swenshuai.xi /// @param  u32Reg     \b IN: Register address
798*53ee8cc1Swenshuai.xi /// @return TRUE : succeed
799*53ee8cc1Swenshuai.xi /// @return FALSE :  fail
800*53ee8cc1Swenshuai.xi //-------------------------------------------------------------------------------------------------
801*53ee8cc1Swenshuai.xi INTERFACE U8 DRV_VIF_ReadByte(U32 u32Reg );
802*53ee8cc1Swenshuai.xi #undef INTERFACE
803*53ee8cc1Swenshuai.xi 
804*53ee8cc1Swenshuai.xi #ifdef __cplusplus
805*53ee8cc1Swenshuai.xi }
806*53ee8cc1Swenshuai.xi #endif
807*53ee8cc1Swenshuai.xi 
808*53ee8cc1Swenshuai.xi #endif //_DRVVIF_H_
809