xref: /utopia/UTPA2-700.0.x/mxlib/include/drvDMD_ATSC.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1 //<MStar Software>
2 //******************************************************************************
3 // MStar Software
4 // Copyright (c) 2010 - 2012 MStar Semiconductor, Inc. All rights reserved.
5 // All software, firmware and related documentation herein ("MStar Software") are
6 // intellectual property of MStar Semiconductor, Inc. ("MStar") and protected by
7 // law, including, but not limited to, copyright law and international treaties.
8 // Any use, modification, reproduction, retransmission, or republication of all
9 // or part of MStar Software is expressly prohibited, unless prior written
10 // permission has been granted by MStar.
11 //
12 // By accessing, browsing and/or using MStar Software, you acknowledge that you
13 // have read, understood, and agree, to be bound by below terms ("Terms") and to
14 // comply with all applicable laws and regulations:
15 //
16 // 1. MStar shall retain any and all right, ownership and interest to MStar
17 //    Software and any modification/derivatives thereof.
18 //    No right, ownership, or interest to MStar Software and any
19 //    modification/derivatives thereof is transferred to you under Terms.
20 //
21 // 2. You understand that MStar Software might include, incorporate or be
22 //    supplied together with third party`s software and the use of MStar
23 //    Software may require additional licenses from third parties.
24 //    Therefore, you hereby agree it is your sole responsibility to separately
25 //    obtain any and all third party right and license necessary for your use of
26 //    such third party`s software.
27 //
28 // 3. MStar Software and any modification/derivatives thereof shall be deemed as
29 //    MStar`s confidential information and you agree to keep MStar`s
30 //    confidential information in strictest confidence and not disclose to any
31 //    third party.
32 //
33 // 4. MStar Software is provided on an "AS IS" basis without warranties of any
34 //    kind. Any warranties are hereby expressly disclaimed by MStar, including
35 //    without limitation, any warranties of merchantability, non-infringement of
36 //    intellectual property rights, fitness for a particular purpose, error free
37 //    and in conformity with any international standard.  You agree to waive any
38 //    claim against MStar for any loss, damage, cost or expense that you may
39 //    incur related to your use of MStar Software.
40 //    In no event shall MStar be liable for any direct, indirect, incidental or
41 //    consequential damages, including without limitation, lost of profit or
42 //    revenues, lost or damage of data, and unauthorized system use.
43 //    You agree that this Section 4 shall still apply without being affected
44 //    even if MStar Software has been modified by MStar in accordance with your
45 //    request or instruction for your use, except otherwise agreed by both
46 //    parties in writing.
47 //
48 // 5. If requested, MStar may from time to time provide technical supports or
49 //    services in relation with MStar Software to you for your use of
50 //    MStar Software in conjunction with your or your customer`s product
51 //    ("Services").
52 //    You understand and agree that, except otherwise agreed by both parties in
53 //    writing, Services are provided on an "AS IS" basis and the warranty
54 //    disclaimer set forth in Section 4 above shall apply.
55 //
56 // 6. Nothing contained herein shall be construed as by implication, estoppels
57 //    or otherwise:
58 //    (a) conferring any license or right to use MStar name, trademark, service
59 //        mark, symbol or any other identification;
60 //    (b) obligating MStar or any of its affiliates to furnish any person,
61 //        including without limitation, you and your customers, any assistance
62 //        of any kind whatsoever, or any information; or
63 //    (c) conferring any license or right under any intellectual property right.
64 //
65 // 7. These terms shall be governed by and construed in accordance with the laws
66 //    of Taiwan, R.O.C., excluding its conflict of law rules.
67 //    Any and all dispute arising out hereof or related hereto shall be finally
68 //    settled by arbitration referred to the Chinese Arbitration Association,
69 //    Taipei in accordance with the ROC Arbitration Law and the Arbitration
70 //    Rules of the Association by three (3) arbitrators appointed in accordance
71 //    with the said Rules.
72 //    The place of arbitration shall be in Taipei, Taiwan and the language shall
73 //    be English.
74 //    The arbitration award shall be final and binding to both parties.
75 //
76 //******************************************************************************
77 //<MStar Software>
78 ////////////////////////////////////////////////////////////////////////////////
79 //
80 // Copyright (c) 2008-2009 MStar Semiconductor, Inc.
81 // All rights reserved.
82 //
83 // Unless otherwise stipulated in writing, any and all information contained
84 // herein regardless in any format shall remain the sole proprietary of
85 // MStar Semiconductor Inc. and be kept in strict confidence
86 // ("MStar Confidential Information") by the recipient.
87 // Any unauthorized act including without limitation unauthorized disclosure,
88 // copying, use, reproduction, sale, distribution, modification, disassembling,
89 // reverse engineering and compiling of the contents of MStar Confidential
90 // Information is unlawful and strictly prohibited. MStar hereby reserves the
91 // rights to any and all damages, losses, costs and expenses resulting therefrom.
92 //
93 ////////////////////////////////////////////////////////////////////////////////
94 
95 ///////////////////////////////////////////////////////////////////////////////////////////////////
96 ///
97 /// @file   drvDMD_ATSC.h
98 /// @brief  ATSC Driver Interface
99 /// @author MStar Semiconductor Inc.
100 ///////////////////////////////////////////////////////////////////////////////////////////////////
101 
102 #ifndef _DRV_ATSC_H_
103 #define _DRV_ATSC_H_
104 
105 //-------------------------------------------------------------------------------------------------
106 //  Driver Compiler Options
107 //-------------------------------------------------------------------------------------------------
108 #if !defined UTPA2
109 #define DMD_ATSC_UTOPIA_EN                  1
110 #define DMD_ATSC_UTOPIA2_EN                 0
111 #else
112 #define DMD_ATSC_UTOPIA_EN                  0
113 #define DMD_ATSC_UTOPIA2_EN                 1
114 #endif
115 
116 #define DMD_ATSC_STR_EN                     1
117 #define DMD_ATSC_MULTI_THREAD_SAFE          0
118 #define DMD_ATSC_MULTI_DMD_EN               1
119 
120 //-------------------------------------------------------------------------------------------------
121 //  Include Files
122 //-------------------------------------------------------------------------------------------------
123 
124 #include "MsTypes.h"
125 #if DMD_ATSC_UTOPIA_EN || DMD_ATSC_UTOPIA2_EN
126 #ifndef MSIF_TAG
127 #include "MsVersion.h"
128 #endif
129 #include "MsCommon.h"
130 #endif
131 #if DMD_ATSC_UTOPIA2_EN || DMD_ATSC_STR_EN
132 #include "utopia.h"
133 #endif
134 
135 //-------------------------------------------------------------------------------------------------
136 //  Driver Capability
137 //-------------------------------------------------------------------------------------------------
138 
139 
140 //-------------------------------------------------------------------------------------------------
141 //  Macro and Define
142 //-------------------------------------------------------------------------------------------------
143 
144 #ifndef DLL_PUBLIC
145 #define DLL_PUBLIC
146 #endif
147 
148 #if DMD_ATSC_MULTI_DMD_EN
149 #define DMD_ATSC_MAX_DEMOD_NUM          2
150 #else
151 #define DMD_ATSC_MAX_DEMOD_NUM          1
152 #endif
153 
154 #if DMD_ATSC_UTOPIA_EN || DMD_ATSC_UTOPIA2_EN
155 #define MSIF_DMD_ATSC_LIB_CODE          {'D','M','D','_','A','T', 'S','C','_'} //Lib code
156 #define MSIF_DMD_ATSC_LIBVER            {'0','0'}                              //LIB version
157 #define MSIF_DMD_ATSC_BUILDNUM          {'0','0' }                             //Build Number
158 #define MSIF_DMD_ATSC_CHANGELIST        {'0','0','0','0','0','0','0','0'}      //P4 ChangeList Number
159 
160 #define DMD_ATSC_VER                    /* Character String for DRV/API version             */  \
161     MSIF_TAG,                           /* 'MSIF'                                           */  \
162     MSIF_CLASS,                         /* '00'                                             */  \
163     MSIF_CUS,                           /* 0x0000                                           */  \
164     MSIF_MOD,                           /* 0x0000                                           */  \
165     MSIF_CHIP,                                                                                  \
166     MSIF_CPU,                                                                                   \
167     MSIF_DMD_ATSC_LIB_CODE,             /* IP__                                             */  \
168     MSIF_DMD_ATSC_LIBVER,               /* 0.0 ~ Z.Z                                        */  \
169     MSIF_DMD_ATSC_BUILDNUM,             /* 00 ~ 99                                          */  \
170     MSIF_DMD_ATSC_CHANGELIST,           /* CL#                                              */  \
171     MSIF_OS
172 #endif // #if DMD_ATSC_UTOPIA_EN || DMD_ATSC_UTOPIA2_EN
173 
174 #ifndef BIT_
175 #define BIT_(n)                                 (1 << (n))
176 #endif
177 
178 #define DMD_ATSC_LOCK_VSB_PRE_LOCK              BIT_(0)
179 #define DMD_ATSC_LOCK_VSB_FSYNC_LOCK            BIT_(1)
180 #define DMD_ATSC_LOCK_VSB_CE_LOCK               BIT_(2)
181 #define DMD_ATSC_LOCK_VSB_FEC_LOCK              BIT_(3)
182 
183 #define DMD_ATSC_LOCK_QAM_AGC_LOCK              BIT_(8)
184 #define DMD_ATSC_LOCK_QAM_PRE_LOCK              BIT_(9)
185 #define DMD_ATSC_LOCK_QAM_MAIN_LOCK             BIT_(10)
186 
187 //-------------------------------------------------------------------------------------------------
188 //  Type and Structure
189 //-------------------------------------------------------------------------------------------------
190 
191 typedef enum
192 {
193     DMD_ATSC_HAL_CMD_Exit = 0,
194     DMD_ATSC_HAL_CMD_InitClk,
195     DMD_ATSC_HAL_CMD_Download,
196     DMD_ATSC_HAL_CMD_FWVERSION,
197     DMD_ATSC_HAL_CMD_SoftReset,
198     DMD_ATSC_HAL_CMD_SetVsbMode,
199     DMD_ATSC_HAL_CMD_Set64QamMode,
200     DMD_ATSC_HAL_CMD_Set256QamMode,
201     DMD_ATSC_HAL_CMD_SetModeClean,
202     DMD_ATSC_HAL_CMD_Set_QAM_SR,
203     DMD_ATSC_HAL_CMD_Active,
204     DMD_ATSC_HAL_CMD_Check8VSB64_256QAM,
205     DMD_ATSC_HAL_CMD_AGCLock,
206     DMD_ATSC_HAL_CMD_Vsb_PreLock,
207     DMD_ATSC_HAL_CMD_Vsb_FSync_Lock,
208     DMD_ATSC_HAL_CMD_Vsb_CE_Lock,
209     DMD_ATSC_HAL_CMD_Vsb_FEC_Lock,
210     DMD_ATSC_HAL_CMD_QAM_PreLock,
211     DMD_ATSC_HAL_CMD_QAM_Main_Lock,
212     DMD_ATSC_HAL_CMD_ReadIFAGC,
213     DMD_ATSC_HAL_CMD_CheckSignalCondition,
214     DMD_ATSC_HAL_CMD_ReadSNRPercentage,
215     DMD_ATSC_HAL_CMD_GET_QAM_SNR,
216     DMD_ATSC_HAL_CMD_ReadPKTERR,
217     DMD_ATSC_HAL_CMD_GetPreViterbiBer,
218     DMD_ATSC_HAL_CMD_GetPostViterbiBer,
219     DMD_ATSC_HAL_CMD_ReadFrequencyOffset,
220     DMD_ATSC_HAL_CMD_TS_INTERFACE_CONFIG,
221     DMD_ATSC_HAL_CMD_IIC_Bypass_Mode,
222     DMD_ATSC_HAL_CMD_SSPI_TO_GPIO,
223     DMD_ATSC_HAL_CMD_GPIO_GET_LEVEL,
224     DMD_ATSC_HAL_CMD_GPIO_SET_LEVEL,
225     DMD_ATSC_HAL_CMD_GPIO_OUT_ENABLE,
226     DMD_ATSC_HAL_CMD_DoIQSwap,
227     DMD_ATSC_HAL_CMD_GET_REG,
228     DMD_ATSC_HAL_CMD_SET_REG,
229     CMD_ATSC_HAL_CMD_GET_QAM_SNR
230 } DMD_ATSC_HAL_COMMAND;
231 
232 #ifdef UTPA2
233 typedef struct DLL_PACKED
234 {
235     MS_U8  Mode;
236     MS_S16 FF;
237     MS_S16 Rate;
238 } DMD_ATSC_CFO_DATA;
239 
240 typedef struct DLL_PACKED
241 {
242     MS_U32 BitErr;
243     MS_U16 Error_window;
244     MS_U32 Win_unit;
245 } DMD_ATSC_BER_DATA;
246 
247 typedef struct DLL_PACKED
248 {
249     MS_U16 noisepower;
250     MS_U32 sym_num;
251 } DMD_ATSC_SNR_DATA;
252 #endif
253 
254 typedef struct DLL_PACKED
255 {
256     MS_U8 u8Pin;
257     union
258     {
259         MS_BOOL bLevel;
260         MS_BOOL bIsOut;
261     };
262 } DMD_ATSC_GPIO_PIN_DATA;
263 
264 typedef struct DLL_PACKED
265 {
266     MS_U16 u16Addr;
267     MS_U8  u8Data;
268 } DMD_ATSC_REG_DATA;
269 
270 typedef enum
271 {
272     DMD_ATSC_DBGLV_NONE,    // disable all the debug message
273     DMD_ATSC_DBGLV_INFO,    // information
274     DMD_ATSC_DBGLV_NOTICE,  // normal but significant condition
275     DMD_ATSC_DBGLV_WARNING, // warning conditions
276     DMD_ATSC_DBGLV_ERR,     // error conditions
277     DMD_ATSC_DBGLV_CRIT,    // critical conditions
278     DMD_ATSC_DBGLV_ALERT,   // action must be taken immediately
279     DMD_ATSC_DBGLV_EMERG,   // system is unusable
280     DMD_ATSC_DBGLV_DEBUG    // debug-level messages
281 } DMD_ATSC_DbgLv;
282 
283 typedef enum
284 {
285     DMD_ATSC_DEMOD_ATSC_VSB,
286     DMD_ATSC_DEMOD_ATSC_64QAM,
287     DMD_ATSC_DEMOD_ATSC_256QAM,
288     DMD_ATSC_DEMOD_ATSC_16QAM,
289     DMD_ATSC_DEMOD_ATSC_32QAM,
290     DMD_ATSC_DEMOD_ATSC_128QAM,
291     DMD_ATSC_DEMOD_MAX,
292     DMD_ATSC_DEMOD_NULL = DMD_ATSC_DEMOD_MAX
293 } DMD_ATSC_DEMOD_TYPE;
294 
295 typedef enum
296 {
297     DMD_ATSC_SIGNAL_NO                   = 0,    /* little or no input power detected    */
298     DMD_ATSC_SIGNAL_WEAK                 = 1,    /* some power detected.                 */
299     DMD_ATSC_SIGNAL_MODERATE             = 2,
300     DMD_ATSC_SIGNAL_STRONG               = 4,
301     DMD_ATSC_SIGNAL_VERY_STRONG          = 8
302 } DMD_ATSC_SIGNAL_CONDITION;
303 
304 typedef enum
305 {
306     DMD_ATSC_GETLOCK,
307     DMD_ATSC_GETLOCK_VSB_AGCLOCK,
308     DMD_ATSC_GETLOCK_VSB_PRELOCK, // pilot lock
309     DMD_ATSC_GETLOCK_VSB_FSYNCLOCK,
310     DMD_ATSC_GETLOCK_VSB_CELOCK,
311     DMD_ATSC_GETLOCK_VSB_FECLOCK,
312     DMD_ATSC_GETLOCK_QAM_AGCLOCK,
313     DMD_ATSC_GETLOCK_QAM_PRELOCK, // TR lock
314     DMD_ATSC_GETLOCK_QAM_MAINLOCK
315 } DMD_ATSC_GETLOCK_TYPE;
316 
317 typedef enum
318 {
319     DMD_ATSC_LOCK,
320     DMD_ATSC_CHECKING,
321     DMD_ATSC_CHECKEND,
322     DMD_ATSC_UNLOCK,
323     DMD_ATSC_NULL
324 } DMD_ATSC_LOCK_STATUS;
325 
326 typedef enum
327 {
328     I_PAD,
329     Q_PAD,
330 } DMD_ATSC_SEL_IQPAD;
331 
332 typedef enum
333 {
334     QAM_64,
335     QAM_256,
336 } DMD_ATSC_QAM_TYPE;
337 
338 typedef struct DLL_PACKED
339 {
340     MS_U8   QAM_type;
341     MS_U16  symbol_rate;
342 }DMD_J83B_Info;
343 
344 typedef enum _eDMD_SEL
345 {
346     DMD0 = 0,
347     DMD1,
348     HK,
349 }eDMD_SEL;
350 
351 /// For demod init
352 typedef struct DLL_PACKED
353 {
354     // Timeout time
355     MS_U16 u16VSBAGCLockCheckTime;//50
356     MS_U16 u16VSBPreLockCheckTime;//300
357     MS_U16 u16VSBFSyncLockCheckTime;//1200
358     MS_U16 u16VSBFECLockCheckTime;//5000
359 
360     MS_U16 u16QAMAGCLockCheckTime;//50
361     MS_U16 u16QAMPreLockCheckTime;//1000
362     MS_U16 u16QAMMainLockCheckTime;//3000
363 
364     // register init
365     MS_U8 *u8DMD_ATSC_DSPRegInitExt; // TODO use system variable type
366     MS_U8 u8DMD_ATSC_DSPRegInitSize;
367     MS_U8 *u8DMD_ATSC_InitExt; // TODO use system variable type
368 
369     //By Tuners:
370     MS_U16  u16IF_KHZ;//By Tuners
371     MS_BOOL bIQSwap;//0
372     MS_U16  u16AGC_REFERENCE;//0
373     MS_BOOL bTunerGainInvert;//0
374     MS_BOOL bIsQPad;//0 //Don't beed used anymore
375 
376     //By IC:
377     MS_U8   u8IS_DUAL;//0
378     MS_BOOL bIsExtDemod;//0
379 
380     //By TS (Only for MCP or ext demod):
381     MS_U8 u1TsConfigByte_SerialMode : 1;
382     MS_U8 u1TsConfigByte_DataSwap   : 1;
383     MS_U8 u1TsConfigByte_ClockInv   : 1;
384     MS_U8 u5TsConfigByte_DivNum     : 5;
385 
386     //By SYS I2C (Only for MCP or ext demod):
387     MS_U8 u8I2CSlaveAddr;
388     MS_U8 u8I2CSlaveBus;
389     MS_BOOL (*I2C_WriteBytes)(MS_U16 u16BusNumSlaveID, MS_U8 u8addrcount, MS_U8* pu8addr, MS_U16 u16size, MS_U8* pu8data);
390     MS_BOOL (*I2C_ReadBytes)(MS_U16 u16BusNumSlaveID, MS_U8 u8AddrNum, MS_U8* paddr, MS_U16 u16size, MS_U8* pu8data);
391 
392     //By SYS MSPI (Only for MCP or ext demod):
393     MS_BOOL bIsUseSspiLoadCode;
394     MS_BOOL bIsSspiUseTsPin;
395 
396     #if !DMD_ATSC_UTOPIA_EN && !DMD_ATSC_UTOPIA2_EN
397     MS_U32  (*GetSystemTimeMS)(void);       // Get sys time (unit: ms)
398     void    (*DelayMS)(MS_U32 ms);          // Delay time (unit: ms)
399     MS_BOOL (*CreateMutex)(MS_BOOL enable); // Create&Delete mutex
400     void    (*LockDMD)(MS_BOOL enable);     // Enter&Leave mutex
401     #endif
402 } DMD_ATSC_InitData;
403 
404 typedef struct DLL_PACKED
405 {
406     MS_VIRT virtDMDBaseAddr;
407 
408     MS_BOOL bInit;
409     MS_BOOL bDownloaded;
410 
411     #if DMD_ATSC_STR_EN
412     MS_BOOL             bIsDTV;
413     EN_POWER_MODE       eLastState;
414     #endif
415     DMD_ATSC_DEMOD_TYPE eLastType;
416     MS_U16              u16SymRate;
417 
418     MS_BOOL bIsQPad;
419 
420     MS_BOOL (*HAL_DMD_ATSC_IOCTL_CMD)(DMD_ATSC_HAL_COMMAND eCmd, void *pPara);
421 } DMD_ATSC_PriData;
422 
423 typedef struct DLL_PACKED
424 {
425     MS_U8  u8Version;
426     MS_U32 u32ATSCScanTimeStart;
427     MS_U32 u32ATSCFECLockTime;
428     MS_U32 u32ATSCLockStatus;
429 } DMD_ATSC_Info;
430 
431 typedef struct DLL_PACKED
432 {
433     DMD_ATSC_InitData  sDMD_ATSC_InitData;
434     DMD_ATSC_PriData   sDMD_ATSC_PriData;
435     DMD_ATSC_Info      sDMD_ATSC_Info;
436 } DMD_ATSC_ResData;
437 
438 //-------------------------------------------------------------------------------------------------
439 //  Function and Variable
440 //-------------------------------------------------------------------------------------------------
441 
442 #ifdef __cplusplus
443 extern "C"
444 {
445 #endif
446 
447 #ifndef MSOS_TYPE_LINUX_KERNEL
448 
449 //-------------------------------------------------------------------------------------------------
450 /// Set detailed level of ATSC driver debug message
451 /// u8DbgLevel : debug level for Parallel Flash driver\n
452 /// AVD_DBGLV_NONE,    ///< disable all the debug message\n
453 /// AVD_DBGLV_INFO,    ///< information\n
454 /// AVD_DBGLV_NOTICE,  ///< normal but significant condition\n
455 /// AVD_DBGLV_WARNING, ///< warning conditions\n
456 /// AVD_DBGLV_ERR,     ///< error conditions\n
457 /// AVD_DBGLV_CRIT,    ///< critical conditions\n
458 /// AVD_DBGLV_ALERT,   ///< action must be taken immediately\n
459 /// AVD_DBGLV_EMERG,   ///< system is unusable\n
460 /// AVD_DBGLV_DEBUG,   ///< debug-level messages\n
461 /// @return TRUE : succeed
462 /// @return FALSE : failed to set the debug level
463 //-------------------------------------------------------------------------------------------------
464 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_SetDbgLevel(DMD_ATSC_DbgLv u8DbgLevel);
465 //-------------------------------------------------------------------------------------------------
466 /// Get the information of ATSC driver\n
467 /// @return the pointer to the driver information
468 //-------------------------------------------------------------------------------------------------
469 DLL_PUBLIC extern DMD_ATSC_Info* MDrv_DMD_ATSC_GetInfo(void);
470 //-------------------------------------------------------------------------------------------------
471 /// Get ATSC driver version
472 /// when get ok, return the pointer to the driver version
473 //-------------------------------------------------------------------------------------------------
474 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_GetLibVer(const MSIF_Version **ppVersion);
475 
476 ////////////////////////////////////////////////////////////////////////////////
477 /// Should be called once when power on init (no use)
478 ////////////////////////////////////////////////////////////////////////////////
479 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_Initial_Hal_Interface(void);
480 
481 ////////////////////////////////////////////////////////////////////////////////
482 ///                            SINGLE DEMOD API                              ///
483 ////////////////////////////////////////////////////////////////////////////////
484 
485 ////////////////////////////////////////////////////////////////////////////////
486 /// Should be called every time when enter DTV input source
487 ////////////////////////////////////////////////////////////////////////////////
488 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_Init(DMD_ATSC_InitData *pDMD_ATSC_InitData, MS_U32 u32InitDataLen);
489 ////////////////////////////////////////////////////////////////////////////////
490 /// Should be called every time when exit DTV input source
491 ////////////////////////////////////////////////////////////////////////////////
492 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_Exit(void);
493 ////////////////////////////////////////////////////////////////////////////////
494 /// Get Initial Data
495 ////////////////////////////////////////////////////////////////////////////////
496 DLL_PUBLIC extern MS_U32 MDrv_DMD_ATSC_GetConfig(DMD_ATSC_InitData *psDMD_ATSC_InitData);
497 ////////////////////////////////////////////////////////////////////////////////
498 /// Set demod mode and enable demod
499 ////////////////////////////////////////////////////////////////////////////////
500 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_SetConfig(DMD_ATSC_DEMOD_TYPE eType, MS_BOOL bEnable);
501 ////////////////////////////////////////////////////////////////////////////////
502 /// Reset FW state machine (no use)
503 ////////////////////////////////////////////////////////////////////////////////
504 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_SetReset(void);
505 ////////////////////////////////////////////////////////////////////////////////
506 /// Set demod mode and enable demod (only for J83B)
507 ////////////////////////////////////////////////////////////////////////////////
508 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_Set_QAM_SR(DMD_ATSC_DEMOD_TYPE eType, MS_U16 symbol_rate);
509 ////////////////////////////////////////////////////////////////////////////////
510 /// Active demod (not use)
511 ////////////////////////////////////////////////////////////////////////////////
512 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_SetActive(MS_BOOL bEnable);
513 ////////////////////////////////////////////////////////////////////////////////
514 /// Set demod power state for STR
515 ////////////////////////////////////////////////////////////////////////////////
516 #if DMD_ATSC_STR_EN
517 DLL_PUBLIC extern MS_U32 MDrv_DMD_ATSC_SetPowerState(EN_POWER_MODE u16PowerState);
518 #endif
519 ////////////////////////////////////////////////////////////////////////////////
520 /// Get demod lock status
521 ////////////////////////////////////////////////////////////////////////////////
522 DLL_PUBLIC extern DMD_ATSC_LOCK_STATUS MDrv_DMD_ATSC_GetLock(DMD_ATSC_GETLOCK_TYPE eType);
523 ////////////////////////////////////////////////////////////////////////////////
524 /// Get demod modulation mode
525 ////////////////////////////////////////////////////////////////////////////////
526 DLL_PUBLIC extern DMD_ATSC_DEMOD_TYPE MDrv_DMD_ATSC_GetModulationMode(void);
527 ////////////////////////////////////////////////////////////////////////////////
528 /// Get demod signal strength (IF AGC gain)
529 ////////////////////////////////////////////////////////////////////////////////
530 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_GetSignalStrength(MS_U16 *u16Strength);
531 ////////////////////////////////////////////////////////////////////////////////
532 /// Get demod signal quality (NO SIGNAL, WEAK, MODERATE, STRONG and VERY_STRONG)
533 ////////////////////////////////////////////////////////////////////////////////
534 DLL_PUBLIC extern DMD_ATSC_SIGNAL_CONDITION MDrv_DMD_ATSC_GetSignalQuality(void);
535 ////////////////////////////////////////////////////////////////////////////////
536 /// Get demod SNR percentage (MAX SNR 40dB)
537 ////////////////////////////////////////////////////////////////////////////////
538 DLL_PUBLIC extern MS_U8 MDrv_DMD_ATSC_GetSNRPercentage(void);
539 ////////////////////////////////////////////////////////////////////////////////
540 /// Get demod SNR (only for J.83ABC)
541 ////////////////////////////////////////////////////////////////////////////////
542 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_GET_QAM_SNR(float *f_snr);
543 ////////////////////////////////////////////////////////////////////////////////
544 /// Get demod packet error number
545 ////////////////////////////////////////////////////////////////////////////////
546 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_Read_uCPKT_ERR(MS_U16 *u16PacketErr);
547 ////////////////////////////////////////////////////////////////////////////////
548 /// Get demod pre Viterbi BER
549 ////////////////////////////////////////////////////////////////////////////////
550 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_GetPreViterbiBer(float *ber);
551 ////////////////////////////////////////////////////////////////////////////////
552 /// Get demod post Viterbi BER
553 ////////////////////////////////////////////////////////////////////////////////
554 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_GetPostViterbiBer(float *ber);
555 ////////////////////////////////////////////////////////////////////////////////
556 /// Get demod frequency offset
557 ////////////////////////////////////////////////////////////////////////////////
558 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_ReadFrequencyOffset(MS_S16 *cfo);
559 ////////////////////////////////////////////////////////////////////////////////
560 /// Set TS output mode (only for external demod)
561 ////////////////////////////////////////////////////////////////////////////////
562 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_SetSerialControl(MS_U8 u8TsConfigData);
563 ////////////////////////////////////////////////////////////////////////////////
564 /// Enable I2C bypass mode (only for external demod)
565 ////////////////////////////////////////////////////////////////////////////////
566 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_IIC_BYPASS_MODE(MS_BOOL bEnable);
567 ////////////////////////////////////////////////////////////////////////////////
568 /// Switch pin to SSPI or GPIO (only for external demod)
569 ////////////////////////////////////////////////////////////////////////////////
570 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_SWITCH_SSPI_GPIO(MS_BOOL bEnable);
571 ////////////////////////////////////////////////////////////////////////////////
572 /// Get GPIO pin high or low (only for external demod)
573 ////////////////////////////////////////////////////////////////////////////////
574 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_GPIO_GET_LEVEL(MS_U8 u8Pin, MS_BOOL *bLevel);
575 ////////////////////////////////////////////////////////////////////////////////
576 /// Set GPIO pin high or low (only for external demod)
577 ////////////////////////////////////////////////////////////////////////////////
578 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_GPIO_SET_LEVEL(MS_U8 u8Pin, MS_BOOL bLevel);
579 ////////////////////////////////////////////////////////////////////////////////
580 /// Set GPIO pin output or input (only for external demod)
581 ////////////////////////////////////////////////////////////////////////////////
582 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_GPIO_OUT_ENABLE(MS_U8 u8Pin, MS_BOOL bEnableOut);
583 ////////////////////////////////////////////////////////////////////////////////
584 /// Swap ADC input (usually for external demod)
585 ////////////////////////////////////////////////////////////////////////////////
586 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_DoIQSwap(MS_BOOL bIsQPad);
587 
588 ////////////////////////////////////////////////////////////////////////////////
589 /// To get ATSC's register  value, only for special purpose.\n
590 /// u16Addr       : the address of ATSC's register\n
591 /// pu8Data       : the value to be gotten\n
592 ////////////////////////////////////////////////////////////////////////////////
593 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_GetReg(MS_U16 u16Addr, MS_U8 *pu8Data);
594 ////////////////////////////////////////////////////////////////////////////////
595 /// To set ATSC's register value, only for special purpose.\n
596 /// u16Addr       : the address of ATSC's register\n
597 /// u8Value       : the value to be set\n
598 ////////////////////////////////////////////////////////////////////////////////
599 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_SetReg(MS_U16 u16Addr, MS_U8 u8Data);
600 
601 ////////////////////////////////////////////////////////////////////////////////
602 ///                      BACKWARD COMPATIBLE API                             ///
603 ////////////////////////////////////////////////////////////////////////////////
604 
605 #ifndef UTPA2
606 ////////////////////////////////////////////////////////////////////////////////
607 /// SEL DEMOD (no use)
608 ////////////////////////////////////////////////////////////////////////////////
609 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_SEL_DMD(eDMD_SEL eDMD_NUM);
610 ////////////////////////////////////////////////////////////////////////////////
611 /// Load FW (no use)
612 ////////////////////////////////////////////////////////////////////////////////
613 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_LoadFW(eDMD_SEL DMD_NUM);
614 ////////////////////////////////////////////////////////////////////////////////
615 /// Set VSB mode (no use)
616 ////////////////////////////////////////////////////////////////////////////////
617 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_SetVsbMode(void);
618 ////////////////////////////////////////////////////////////////////////////////
619 /// Set 256QAM mode (no use)
620 ////////////////////////////////////////////////////////////////////////////////
621 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_Set256QamMode(void);
622 ////////////////////////////////////////////////////////////////////////////////
623 /// Set 64QAM mode (no use)
624 ////////////////////////////////////////////////////////////////////////////////
625 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_Set64QamMode(void);
626 #endif
627 
628 ////////////////////////////////////////////////////////////////////////////////
629 ///                            MULTI DEMOD API                               ///
630 ////////////////////////////////////////////////////////////////////////////////
631 
632 ////////////////////////////////////////////////////////////////////////////////
633 /// Should be called every time when enter DTV input source
634 ////////////////////////////////////////////////////////////////////////////////
635 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_Init(MS_U8 id, DMD_ATSC_InitData *pDMD_ATSC_InitData, MS_U32 u32InitDataLen);
636 ////////////////////////////////////////////////////////////////////////////////
637 /// Should be called every time when exit DTV input source
638 ////////////////////////////////////////////////////////////////////////////////
639 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_Exit(MS_U8 id);
640 ////////////////////////////////////////////////////////////////////////////////
641 /// Get Initial Data
642 ////////////////////////////////////////////////////////////////////////////////
643 DLL_PUBLIC extern MS_U32 MDrv_DMD_ATSC_MD_GetConfig(MS_U8 id, DMD_ATSC_InitData *psDMD_ATSC_InitData);
644 ////////////////////////////////////////////////////////////////////////////////
645 /// Set demod mode and enable demod
646 ////////////////////////////////////////////////////////////////////////////////
647 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_SetConfig(MS_U8 id, DMD_ATSC_DEMOD_TYPE eType, MS_BOOL bEnable);
648 ////////////////////////////////////////////////////////////////////////////////
649 /// Reset FW state machine (no use)
650 ////////////////////////////////////////////////////////////////////////////////
651 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_SetReset(MS_U8 id);
652 ////////////////////////////////////////////////////////////////////////////////
653 /// Set demod mode and enable demod (only for J83B)
654 ////////////////////////////////////////////////////////////////////////////////
655 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_Set_QAM_SR(MS_U8 id, DMD_ATSC_DEMOD_TYPE eType, MS_U16 symbol_rate);
656 ////////////////////////////////////////////////////////////////////////////////
657 /// Active demod (not use)
658 ////////////////////////////////////////////////////////////////////////////////
659 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_SetActive(MS_U8 id, MS_BOOL bEnable);
660 ////////////////////////////////////////////////////////////////////////////////
661 /// Set demod power state for STR
662 ////////////////////////////////////////////////////////////////////////////////
663 #if DMD_ATSC_STR_EN
664 DLL_PUBLIC extern MS_U32 MDrv_DMD_ATSC_MD_SetPowerState(MS_U8 id, EN_POWER_MODE u16PowerState);
665 #endif
666 ////////////////////////////////////////////////////////////////////////////////
667 /// Get demod lock status
668 ////////////////////////////////////////////////////////////////////////////////
669 DLL_PUBLIC extern DMD_ATSC_LOCK_STATUS MDrv_DMD_ATSC_MD_GetLock(MS_U8 id, DMD_ATSC_GETLOCK_TYPE eType);
670 ////////////////////////////////////////////////////////////////////////////////
671 /// Get demod modulation mode
672 ////////////////////////////////////////////////////////////////////////////////
673 DLL_PUBLIC extern DMD_ATSC_DEMOD_TYPE MDrv_DMD_ATSC_MD_GetModulationMode(MS_U8 id);
674 ////////////////////////////////////////////////////////////////////////////////
675 /// Get demod signal strength (IF AGC gain)
676 ////////////////////////////////////////////////////////////////////////////////
677 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_GetSignalStrength(MS_U8 id, MS_U16 *u16Strength);
678 ////////////////////////////////////////////////////////////////////////////////
679 /// Get demod signal quality (NO SIGNAL, WEAK, MODERATE, STRONG and VERY_STRONG)
680 ////////////////////////////////////////////////////////////////////////////////
681 DLL_PUBLIC extern DMD_ATSC_SIGNAL_CONDITION MDrv_DMD_ATSC_MD_GetSignalQuality(MS_U8 id);
682 ////////////////////////////////////////////////////////////////////////////////
683 /// Get demod SNR percentage (MAX SNR 40dB)
684 ////////////////////////////////////////////////////////////////////////////////
685 DLL_PUBLIC extern MS_U8 MDrv_DMD_ATSC_MD_GetSNRPercentage(MS_U8 id);
686 ////////////////////////////////////////////////////////////////////////////////
687 /// Get demod SNR (only for J.83ABC)
688 ////////////////////////////////////////////////////////////////////////////////
689 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_GET_QAM_SNR(MS_U8 id, float *f_snr);
690 ////////////////////////////////////////////////////////////////////////////////
691 /// Get demod packet error number
692 ////////////////////////////////////////////////////////////////////////////////
693 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_Read_uCPKT_ERR(MS_U8 id, MS_U16 *u16PacketErr);
694 ////////////////////////////////////////////////////////////////////////////////
695 /// Get demod pre Viterbi BER
696 ////////////////////////////////////////////////////////////////////////////////
697 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_GetPreViterbiBer(MS_U8 id, float *ber);
698 ////////////////////////////////////////////////////////////////////////////////
699 /// Get demod post Viterbi BER
700 ////////////////////////////////////////////////////////////////////////////////
701 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_GetPostViterbiBer(MS_U8 id, float *ber);
702 ////////////////////////////////////////////////////////////////////////////////
703 /// Get demod frequency offset
704 ////////////////////////////////////////////////////////////////////////////////
705 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_ReadFrequencyOffset(MS_U8 id, MS_S16 *cfo);
706 ////////////////////////////////////////////////////////////////////////////////
707 /// Set TS output mode (only for external demod)
708 ////////////////////////////////////////////////////////////////////////////////
709 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_SetSerialControl(MS_U8 id, MS_U8 u8TsConfigData);
710 ////////////////////////////////////////////////////////////////////////////////
711 /// Enable I2C bypass mode (only for external demod)
712 ////////////////////////////////////////////////////////////////////////////////
713 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_IIC_BYPASS_MODE(MS_U8 id, MS_BOOL bEnable);
714 ////////////////////////////////////////////////////////////////////////////////
715 /// Switch pin to SSPI or GPIO (only for external demod)
716 ////////////////////////////////////////////////////////////////////////////////
717 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_SWITCH_SSPI_GPIO(MS_U8 id, MS_BOOL bEnable);
718 ////////////////////////////////////////////////////////////////////////////////
719 /// Get GPIO pin high or low (only for external demod)
720 ////////////////////////////////////////////////////////////////////////////////
721 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_GPIO_GET_LEVEL(MS_U8 id, MS_U8 u8Pin, MS_BOOL *bLevel);
722 ////////////////////////////////////////////////////////////////////////////////
723 /// Set GPIO pin high or low (only for external demod)
724 ////////////////////////////////////////////////////////////////////////////////
725 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_GPIO_SET_LEVEL(MS_U8 id, MS_U8 u8Pin, MS_BOOL bLevel);
726 ////////////////////////////////////////////////////////////////////////////////
727 /// Set GPIO pin output or input (only for external demod)
728 ////////////////////////////////////////////////////////////////////////////////
729 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_GPIO_OUT_ENABLE(MS_U8 id, MS_U8 u8Pin, MS_BOOL bEnableOut);
730 ////////////////////////////////////////////////////////////////////////////////
731 /// Swap ADC input (usually for external demod)
732 ////////////////////////////////////////////////////////////////////////////////
733 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_DoIQSwap(MS_U8 id, MS_BOOL bIsQPad);
734 
735 ////////////////////////////////////////////////////////////////////////////////
736 /// To get ATSC's register  value, only for special purpose.\n
737 /// u16Addr       : the address of ATSC's register\n
738 /// pu8Data       : the value to be gotten\n
739 ////////////////////////////////////////////////////////////////////////////////
740 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_GetReg(MS_U8 id, MS_U16 u16Addr, MS_U8 *pu8Data);
741 ////////////////////////////////////////////////////////////////////////////////
742 /// To set ATSC's register value, only for special purpose.\n
743 /// u16Addr       : the address of ATSC's register\n
744 /// u8Value       : the value to be set\n
745 ////////////////////////////////////////////////////////////////////////////////
746 DLL_PUBLIC extern MS_BOOL MDrv_DMD_ATSC_MD_SetReg(MS_U8 id, MS_U16 u16Addr, MS_U8 u8Data);
747 
748 #endif // #ifndef MSOS_TYPE_LINUX_KERNEL
749 
750 #ifdef UTPA2
751 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_SetDbgLevel(DMD_ATSC_DbgLv u8DbgLevel);
752 DLL_PUBLIC extern DMD_ATSC_Info* _MDrv_DMD_ATSC_GetInfo(void);
753 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_GetLibVer(const MSIF_Version **ppVersion);
754 
755 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_Init(MS_U8 id, DMD_ATSC_InitData *pDMD_ATSC_InitData, MS_U32 u32InitDataLen);
756 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_Exit(MS_U8 id);
757 DLL_PUBLIC extern MS_U32 _MDrv_DMD_ATSC_MD_GetConfig(MS_U8 id, DMD_ATSC_InitData *psDMD_ATSC_InitData);
758 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_SetConfig(MS_U8 id, DMD_ATSC_DEMOD_TYPE eType, MS_BOOL bEnable);
759 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_SetReset(MS_U8 id);
760 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_Set_QAM_SR(MS_U8 id, DMD_ATSC_DEMOD_TYPE eType, MS_U16 symbol_rate);
761 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_SetActive(MS_U8 id, MS_BOOL bEnable);
762 #if DMD_ATSC_STR_EN
763 DLL_PUBLIC extern MS_U32 _MDrv_DMD_ATSC_MD_SetPowerState(MS_U8 id, EN_POWER_MODE u16PowerState);
764 #endif
765 DLL_PUBLIC extern DMD_ATSC_LOCK_STATUS _MDrv_DMD_ATSC_MD_GetLock(MS_U8 id, DMD_ATSC_GETLOCK_TYPE eType);
766 DLL_PUBLIC extern DMD_ATSC_DEMOD_TYPE _MDrv_DMD_ATSC_MD_GetModulationMode(MS_U8 id);
767 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_GetSignalStrength(MS_U8 id, MS_U16 *u16Strength);
768 DLL_PUBLIC extern DMD_ATSC_SIGNAL_CONDITION _MDrv_DMD_ATSC_MD_GetSignalQuality(MS_U8 id);
769 DLL_PUBLIC extern MS_U8 _MDrv_DMD_ATSC_MD_GetSNRPercentage(MS_U8 id);
770 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_GET_QAM_SNR(MS_U8 id, DMD_ATSC_SNR_DATA *f_snr);
771 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_Read_uCPKT_ERR(MS_U8 id, MS_U16 *u16PacketErr);
772 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_GetPreViterbiBer(MS_U8 id, DMD_ATSC_BER_DATA *ber);
773 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_GetPostViterbiBer(MS_U8 id, DMD_ATSC_BER_DATA *ber);
774 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_ReadFrequencyOffset(MS_U8 id, DMD_ATSC_CFO_DATA *cfo);
775 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_SetSerialControl(MS_U8 id, MS_U8 u8TsConfigData);
776 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_IIC_BYPASS_MODE(MS_U8 id, MS_BOOL bEnable);
777 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_SWITCH_SSPI_GPIO(MS_U8 id, MS_BOOL bEnable);
778 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_GPIO_GET_LEVEL(MS_U8 id, MS_U8 u8Pin, MS_BOOL *bLevel);
779 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_GPIO_SET_LEVEL(MS_U8 id, MS_U8 u8Pin, MS_BOOL bLevel);
780 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_GPIO_OUT_ENABLE(MS_U8 id, MS_U8 u8Pin, MS_BOOL bEnableOut);
781 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_DoIQSwap(MS_U8 id, MS_BOOL bIsQPad);
782 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_GetReg(MS_U8 id, MS_U16 u16Addr, MS_U8 *pu8Data);
783 DLL_PUBLIC extern MS_BOOL _MDrv_DMD_ATSC_MD_SetReg(MS_U8 id, MS_U16 u16Addr, MS_U8 u8Data);
784 #endif // #ifdef UTPA2
785 
786 #ifdef __cplusplus
787 }
788 #endif
789 
790 #endif // _DRV_ATSC_H_
791