summaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb-frontends/drx39xyj/drx_driver.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb-frontends/drx39xyj/drx_driver.h')
-rw-r--r--drivers/media/dvb-frontends/drx39xyj/drx_driver.h2588
1 files changed, 2588 insertions, 0 deletions
diff --git a/drivers/media/dvb-frontends/drx39xyj/drx_driver.h b/drivers/media/dvb-frontends/drx39xyj/drx_driver.h
new file mode 100644
index 00000000000..d3bfe067658
--- /dev/null
+++ b/drivers/media/dvb-frontends/drx39xyj/drx_driver.h
@@ -0,0 +1,2588 @@
+/**
+* \file $Id: drx_driver.h,v 1.84 2010/01/14 22:47:50 dingtao Exp $
+*
+* \brief DRX driver API
+*
+* $(c) 2004-2010 Trident Microsystems, Inc. - All rights reserved.
+*
+* This software and related documentation (the 'Software') are intellectual
+* property owned by Trident and are copyright of Trident, unless specifically
+* noted otherwise.
+*
+* Any use of the Software is permitted only pursuant to the terms of the
+* license agreement, if any, which accompanies, is included with or applicable
+* to the Software ('License Agreement') or upon express written consent of
+* Trident. Any copying, reproduction or redistribution of the Software in
+* whole or in part by any means not in accordance with the License Agreement
+* or as agreed in writing by Trident is expressly prohibited.
+*
+* THE SOFTWARE IS WARRANTED, IF AT ALL, ONLY ACCORDING TO THE TERMS OF THE
+* LICENSE AGREEMENT. EXCEPT AS WARRANTED IN THE LICENSE AGREEMENT THE SOFTWARE
+* IS DELIVERED 'AS IS' AND TRIDENT HEREBY DISCLAIMS ALL WARRANTIES AND
+* CONDITIONS WITH REGARD TO THE SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+* AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIT
+* ENJOYMENT, TITLE AND NON-INFRINGEMENT OF ANY THIRD PARTY INTELLECTUAL
+* PROPERTY OR OTHER RIGHTS WHICH MAY RESULT FROM THE USE OR THE INABILITY
+* TO USE THE SOFTWARE.
+*
+* IN NO EVENT SHALL TRIDENT BE LIABLE FOR INDIRECT, INCIDENTAL, CONSEQUENTIAL,
+* PUNITIVE, SPECIAL OR OTHER DAMAGES WHATSOEVER INCLUDING WITHOUT LIMITATION,
+* DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS
+* INFORMATION, AND THE LIKE, ARISING OUT OF OR RELATING TO THE USE OF OR THE
+* INABILITY TO USE THE SOFTWARE, EVEN IF TRIDENT HAS BEEN ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGES, EXCEPT PERSONAL INJURY OR DEATH RESULTING FROM
+* TRIDENT'S NEGLIGENCE. $
+*
+*/
+#ifndef __DRXDRIVER_H__
+#define __DRXDRIVER_H__
+/*-------------------------------------------------------------------------
+INCLUDES
+-------------------------------------------------------------------------*/
+#include "bsp_types.h"
+#include "bsp_i2c.h"
+#include "bsp_tuner.h"
+#include "bsp_host.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*-------------------------------------------------------------------------
+TYPEDEFS
+-------------------------------------------------------------------------*/
+
+/*-------------------------------------------------------------------------
+DEFINES
+-------------------------------------------------------------------------*/
+
+/**************
+*
+* This section configures the DRX Data Access Protocols (DAPs).
+*
+**************/
+
+/**
+* \def DRXDAP_SINGLE_MASTER
+* \brief Enable I2C single or I2C multimaster mode on host.
+*
+* Set to 1 to enable single master mode
+* Set to 0 to enable multi master mode
+*
+* The actual DAP implementation may be restricted to only one of the modes.
+* A compiler warning or error will be generated if the DAP implementation
+* overides or cannot handle the mode defined below.
+*
+*/
+#ifndef DRXDAP_SINGLE_MASTER
+#define DRXDAP_SINGLE_MASTER 0
+#endif
+
+/**
+* \def DRXDAP_MAX_WCHUNKSIZE
+* \brief Defines maximum chunksize of an i2c write action by host.
+*
+* This indicates the maximum size of data the I2C device driver is able to
+* write at a time. This includes I2C device address and register addressing.
+*
+* This maximum size may be restricted by the actual DAP implementation.
+* A compiler warning or error will be generated if the DAP implementation
+* overides or cannot handle the chunksize defined below.
+*
+* Beware that the DAP uses DRXDAP_MAX_WCHUNKSIZE to create a temporary data
+* buffer. Do not undefine or choose too large, unless your system is able to
+* handle a stack buffer of that size.
+*
+*/
+#ifndef DRXDAP_MAX_WCHUNKSIZE
+#define DRXDAP_MAX_WCHUNKSIZE 60
+#endif
+
+/**
+* \def DRXDAP_MAX_RCHUNKSIZE
+* \brief Defines maximum chunksize of an i2c read action by host.
+*
+* This indicates the maximum size of data the I2C device driver is able to read
+* at a time. Minimum value is 2. Also, the read chunk size must be even.
+*
+* This maximum size may be restricted by the actual DAP implementation.
+* A compiler warning or error will be generated if the DAP implementation
+* overides or cannot handle the chunksize defined below.
+*
+*/
+#ifndef DRXDAP_MAX_RCHUNKSIZE
+#define DRXDAP_MAX_RCHUNKSIZE 60
+#endif
+
+/**************
+*
+* This section describes drxdriver defines.
+*
+**************/
+
+/**
+* \def DRX_UNKNOWN
+* \brief Generic UNKNOWN value for DRX enumerated types.
+*
+* Used to indicate that the parameter value is unknown or not yet initalized.
+*/
+#ifndef DRX_UNKNOWN
+#define DRX_UNKNOWN (254)
+#endif
+
+/**
+* \def DRX_AUTO
+* \brief Generic AUTO value for DRX enumerated types.
+*
+* Used to instruct the driver to automatically determine the value of the
+* parameter.
+*/
+#ifndef DRX_AUTO
+#define DRX_AUTO (255)
+#endif
+
+
+/**************
+*
+* This section describes flag definitions for the device capbilities.
+*
+**************/
+
+/**
+* \brief LNA capability flag
+*
+* Device has a Low Noise Amplifier
+*
+*/
+#define DRX_CAPABILITY_HAS_LNA (1UL << 0)
+/**
+* \brief OOB-RX capability flag
+*
+* Device has OOB-RX
+*
+*/
+#define DRX_CAPABILITY_HAS_OOBRX (1UL << 1)
+/**
+* \brief ATV capability flag
+*
+* Device has ATV
+*
+*/
+#define DRX_CAPABILITY_HAS_ATV (1UL << 2)
+/**
+* \brief DVB-T capability flag
+*
+* Device has DVB-T
+*
+*/
+#define DRX_CAPABILITY_HAS_DVBT (1UL << 3)
+/**
+* \brief ITU-B capability flag
+*
+* Device has ITU-B
+*
+*/
+#define DRX_CAPABILITY_HAS_ITUB (1UL << 4)
+/**
+* \brief Audio capability flag
+*
+* Device has Audio
+*
+*/
+#define DRX_CAPABILITY_HAS_AUD (1UL << 5)
+/**
+* \brief SAW switch capability flag
+*
+* Device has SAW switch
+*
+*/
+#define DRX_CAPABILITY_HAS_SAWSW (1UL << 6)
+/**
+* \brief GPIO1 capability flag
+*
+* Device has GPIO1
+*
+*/
+#define DRX_CAPABILITY_HAS_GPIO1 (1UL << 7)
+/**
+* \brief GPIO2 capability flag
+*
+* Device has GPIO2
+*
+*/
+#define DRX_CAPABILITY_HAS_GPIO2 (1UL << 8)
+/**
+* \brief IRQN capability flag
+*
+* Device has IRQN
+*
+*/
+#define DRX_CAPABILITY_HAS_IRQN (1UL << 9)
+/**
+* \brief 8VSB capability flag
+*
+* Device has 8VSB
+*
+*/
+#define DRX_CAPABILITY_HAS_8VSB (1UL << 10)
+/**
+* \brief SMA-TX capability flag
+*
+* Device has SMATX
+*
+*/
+#define DRX_CAPABILITY_HAS_SMATX (1UL << 11)
+/**
+* \brief SMA-RX capability flag
+*
+* Device has SMARX
+*
+*/
+#define DRX_CAPABILITY_HAS_SMARX (1UL << 12)
+/**
+* \brief ITU-A/C capability flag
+*
+* Device has ITU-A/C
+*
+*/
+#define DRX_CAPABILITY_HAS_ITUAC (1UL << 13)
+
+/*-------------------------------------------------------------------------
+MACROS
+-------------------------------------------------------------------------*/
+/* Macros to stringify the version number */
+#define DRX_VERSIONSTRING( MAJOR, MINOR, PATCH ) \
+ DRX_VERSIONSTRING_HELP(MAJOR)"." \
+ DRX_VERSIONSTRING_HELP(MINOR)"." \
+ DRX_VERSIONSTRING_HELP(PATCH)
+#define DRX_VERSIONSTRING_HELP( NUM ) #NUM
+
+/**
+* \brief Macro to create byte array elements from 16 bit integers.
+* This macro is used to create byte arrays for block writes.
+* Block writes speed up I2C traffic between host and demod.
+* The macro takes care of the required byte order in a 16 bits word.
+* x->lowbyte(x), highbyte(x)
+*/
+#define DRX_16TO8( x ) ((u8_t) (((u16_t)x) &0xFF)), \
+ ((u8_t)((((u16_t)x)>>8)&0xFF))
+
+/**
+* \brief Macro to sign extend signed 9 bit value to signed 16 bit value
+*/
+#define DRX_S9TOS16(x) ((((u16_t)x)&0x100 )?((s16_t)((u16_t)(x)|0xFF00)):(x))
+
+/**
+* \brief Macro to sign extend signed 9 bit value to signed 16 bit value
+*/
+#define DRX_S24TODRXFREQ(x) ( ( ( (u32_t) x ) & 0x00800000UL ) ? \
+ ( (DRXFrequency_t) \
+ ( ( (u32_t) x ) | 0xFF000000 ) ) : \
+ ( (DRXFrequency_t) x ) )
+
+/**
+* \brief Macro to convert 16 bit register value to a DRXFrequency_t
+*/
+#define DRX_U16TODRXFREQ(x) ( ( x & 0x8000 ) ? \
+ ( (DRXFrequency_t) \
+ ( ( (u32_t) x ) | 0xFFFF0000 ) ) : \
+ ( (DRXFrequency_t) x ) )
+
+/*-------------------------------------------------------------------------
+ENUM
+-------------------------------------------------------------------------*/
+
+/**
+* \enum DRXStandard_t
+* \brief Modulation standards.
+*/
+typedef enum {
+ DRX_STANDARD_DVBT = 0, /**< Terrestrial DVB-T. */
+ DRX_STANDARD_8VSB, /**< Terrestrial 8VSB. */
+ DRX_STANDARD_NTSC, /**< Terrestrial\Cable analog NTSC. */
+ DRX_STANDARD_PAL_SECAM_BG, /**< Terrestrial analog PAL/SECAM B/G */
+ DRX_STANDARD_PAL_SECAM_DK, /**< Terrestrial analog PAL/SECAM D/K */
+ DRX_STANDARD_PAL_SECAM_I, /**< Terrestrial analog PAL/SECAM I */
+ DRX_STANDARD_PAL_SECAM_L, /**< Terrestrial analog PAL/SECAM L
+ with negative modulation */
+ DRX_STANDARD_PAL_SECAM_LP, /**< Terrestrial analog PAL/SECAM L
+ with positive modulation */
+ DRX_STANDARD_ITU_A, /**< Cable ITU ANNEX A. */
+ DRX_STANDARD_ITU_B, /**< Cable ITU ANNEX B. */
+ DRX_STANDARD_ITU_C, /**< Cable ITU ANNEX C. */
+ DRX_STANDARD_ITU_D, /**< Cable ITU ANNEX D. */
+ DRX_STANDARD_FM, /**< Terrestrial\Cable FM radio */
+ DRX_STANDARD_DTMB, /**< Terrestrial DTMB standard (China)*/
+ DRX_STANDARD_UNKNOWN = DRX_UNKNOWN, /**< Standard unknown. */
+ DRX_STANDARD_AUTO = DRX_AUTO /**< Autodetect standard. */
+} DRXStandard_t, *pDRXStandard_t;
+
+/**
+* \enum DRXStandard_t
+* \brief Modulation sub-standards.
+*/
+typedef enum {
+ DRX_SUBSTANDARD_MAIN = 0, /**< Main subvariant of standard */
+ DRX_SUBSTANDARD_ATV_BG_SCANDINAVIA,
+ DRX_SUBSTANDARD_ATV_DK_POLAND,
+ DRX_SUBSTANDARD_ATV_DK_CHINA,
+ DRX_SUBSTANDARD_UNKNOWN = DRX_UNKNOWN, /**< Sub-standard unknown. */
+ DRX_SUBSTANDARD_AUTO = DRX_AUTO /**< Auto (default) sub-standard */
+} DRXSubstandard_t, *pDRXSubstandard_t;
+
+/**
+* \enum DRXBandwidth_t
+* \brief Channel bandwidth or channel spacing.
+*/
+typedef enum {
+ DRX_BANDWIDTH_8MHZ = 0, /**< Bandwidth 8 MHz. */
+ DRX_BANDWIDTH_7MHZ, /**< Bandwidth 7 MHz. */
+ DRX_BANDWIDTH_6MHZ, /**< Bandwidth 6 MHz. */
+ DRX_BANDWIDTH_UNKNOWN = DRX_UNKNOWN, /**< Bandwidth unknown. */
+ DRX_BANDWIDTH_AUTO = DRX_AUTO /**< Auto Set Bandwidth */
+} DRXBandwidth_t, *pDRXBandwidth_t;
+
+/**
+* \enum DRXMirror_t
+* \brief Indicate if channel spectrum is mirrored or not.
+*/
+typedef enum {
+ DRX_MIRROR_NO = 0, /**< Spectrum is not mirrored. */
+ DRX_MIRROR_YES, /**< Spectrum is mirrored. */
+ DRX_MIRROR_UNKNOWN = DRX_UNKNOWN, /**< Unknown if spectrum is mirrored. */
+ DRX_MIRROR_AUTO = DRX_AUTO /**< Autodetect if spectrum is mirrored. */
+} DRXMirror_t, *pDRXMirror_t;
+
+/**
+* \enum DRXConstellation_t
+* \brief Constellation type of the channel.
+*/
+typedef enum {
+ DRX_CONSTELLATION_BPSK = 0, /**< Modulation is BPSK. */
+ DRX_CONSTELLATION_QPSK, /**< Constellation is QPSK. */
+ DRX_CONSTELLATION_PSK8, /**< Constellation is PSK8. */
+ DRX_CONSTELLATION_QAM16, /**< Constellation is QAM16. */
+ DRX_CONSTELLATION_QAM32, /**< Constellation is QAM32. */
+ DRX_CONSTELLATION_QAM64, /**< Constellation is QAM64. */
+ DRX_CONSTELLATION_QAM128, /**< Constellation is QAM128. */
+ DRX_CONSTELLATION_QAM256, /**< Constellation is QAM256. */
+ DRX_CONSTELLATION_QAM512, /**< Constellation is QAM512. */
+ DRX_CONSTELLATION_QAM1024, /**< Constellation is QAM1024. */
+ DRX_CONSTELLATION_QPSK_NR, /**< Constellation is QPSK_NR */
+ DRX_CONSTELLATION_UNKNOWN = DRX_UNKNOWN, /**< Constellation unknown. */
+ DRX_CONSTELLATION_AUTO = DRX_AUTO /**< Autodetect constellation. */
+} DRXConstellation_t, *pDRXConstellation_t;
+
+/**
+* \enum DRXHierarchy_t
+* \brief Hierarchy of the channel.
+*/
+typedef enum {
+ DRX_HIERARCHY_NONE = 0, /**< None hierarchical channel. */
+ DRX_HIERARCHY_ALPHA1, /**< Hierarchical channel, alpha=1. */
+ DRX_HIERARCHY_ALPHA2, /**< Hierarchical channel, alpha=2. */
+ DRX_HIERARCHY_ALPHA4, /**< Hierarchical channel, alpha=4. */
+ DRX_HIERARCHY_UNKNOWN = DRX_UNKNOWN, /**< Hierarchy unknown. */
+ DRX_HIERARCHY_AUTO = DRX_AUTO /**< Autodetect hierarchy. */
+} DRXHierarchy_t, *pDRXHierarchy_t;
+
+/**
+* \enum DRXPriority_t
+* \brief Channel priority in case of hierarchical transmission.
+*/
+typedef enum {
+ DRX_PRIORITY_LOW = 0, /**< Low priority channel. */
+ DRX_PRIORITY_HIGH, /**< High priority channel. */
+ DRX_PRIORITY_UNKNOWN = DRX_UNKNOWN /**< Priority unknown. */
+} DRXPriority_t, *pDRXPriority_t;
+
+/**
+* \enum DRXCoderate_t
+* \brief Channel priority in case of hierarchical transmission.
+*/
+typedef enum {
+ DRX_CODERATE_1DIV2 = 0, /**< Code rate 1/2nd. */
+ DRX_CODERATE_2DIV3, /**< Code rate 2/3nd. */
+ DRX_CODERATE_3DIV4, /**< Code rate 3/4nd. */
+ DRX_CODERATE_5DIV6, /**< Code rate 5/6nd. */
+ DRX_CODERATE_7DIV8, /**< Code rate 7/8nd. */
+ DRX_CODERATE_UNKNOWN = DRX_UNKNOWN, /**< Code rate unknown. */
+ DRX_CODERATE_AUTO = DRX_AUTO /**< Autodetect code rate. */
+} DRXCoderate_t, *pDRXCoderate_t;
+
+/**
+* \enum DRXGuard_t
+* \brief Guard interval of a channel.
+*/
+typedef enum {
+ DRX_GUARD_1DIV32 = 0, /**< Guard interval 1/32nd. */
+ DRX_GUARD_1DIV16, /**< Guard interval 1/16th. */
+ DRX_GUARD_1DIV8, /**< Guard interval 1/8th. */
+ DRX_GUARD_1DIV4, /**< Guard interval 1/4th. */
+ DRX_GUARD_UNKNOWN = DRX_UNKNOWN, /**< Guard interval unknown. */
+ DRX_GUARD_AUTO = DRX_AUTO /**< Autodetect guard interval. */
+} DRXGuard_t, *pDRXGuard_t;
+
+/**
+* \enum DRXFftmode_t
+* \brief FFT mode.
+*/
+typedef enum {
+ DRX_FFTMODE_2K = 0, /**< 2K FFT mode. */
+ DRX_FFTMODE_4K, /**< 4K FFT mode. */
+ DRX_FFTMODE_8K, /**< 8K FFT mode. */
+ DRX_FFTMODE_UNKNOWN = DRX_UNKNOWN, /**< FFT mode unknown. */
+ DRX_FFTMODE_AUTO = DRX_AUTO /**< Autodetect FFT mode. */
+} DRXFftmode_t, *pDRXFftmode_t;
+
+/**
+* \enum DRXClassification_t
+* \brief Channel classification.
+*/
+typedef enum {
+ DRX_CLASSIFICATION_GAUSS = 0, /**< Gaussion noise. */
+ DRX_CLASSIFICATION_HVY_GAUSS, /**< Heavy Gaussion noise. */
+ DRX_CLASSIFICATION_COCHANNEL, /**< Co-channel. */
+ DRX_CLASSIFICATION_STATIC, /**< Static echo. */
+ DRX_CLASSIFICATION_MOVING, /**< Moving echo. */
+ DRX_CLASSIFICATION_ZERODB, /**< Zero dB echo. */
+ DRX_CLASSIFICATION_UNKNOWN = DRX_UNKNOWN, /**< Unknown classification */
+ DRX_CLASSIFICATION_AUTO = DRX_AUTO /**< Autodetect classification. */
+} DRXClassification_t, *pDRXClassification_t;
+
+/**
+* /enum DRXInterleaveModes_t
+* /brief Interleave modes
+*/
+typedef enum {
+ DRX_INTERLEAVEMODE_I128_J1 = 0,
+ DRX_INTERLEAVEMODE_I128_J1_V2,
+ DRX_INTERLEAVEMODE_I128_J2,
+ DRX_INTERLEAVEMODE_I64_J2,
+ DRX_INTERLEAVEMODE_I128_J3,
+ DRX_INTERLEAVEMODE_I32_J4,
+ DRX_INTERLEAVEMODE_I128_J4,
+ DRX_INTERLEAVEMODE_I16_J8,
+ DRX_INTERLEAVEMODE_I128_J5,
+ DRX_INTERLEAVEMODE_I8_J16,
+ DRX_INTERLEAVEMODE_I128_J6,
+ DRX_INTERLEAVEMODE_RESERVED_11,
+ DRX_INTERLEAVEMODE_I128_J7,
+ DRX_INTERLEAVEMODE_RESERVED_13,
+ DRX_INTERLEAVEMODE_I128_J8,
+ DRX_INTERLEAVEMODE_RESERVED_15,
+ DRX_INTERLEAVEMODE_I12_J17,
+ DRX_INTERLEAVEMODE_I5_J4,
+ DRX_INTERLEAVEMODE_B52_M240,
+ DRX_INTERLEAVEMODE_B52_M720,
+ DRX_INTERLEAVEMODE_B52_M48,
+ DRX_INTERLEAVEMODE_B52_M0,
+ DRX_INTERLEAVEMODE_UNKNOWN = DRX_UNKNOWN, /**< Unknown interleave mode */
+ DRX_INTERLEAVEMODE_AUTO = DRX_AUTO /**< Autodetect interleave mode */
+} DRXInterleaveModes_t, *pDRXInterleaveModes_t;
+
+/**
+* \enum DRXCarrier_t
+* \brief Channel Carrier Mode.
+*/
+typedef enum {
+ DRX_CARRIER_MULTI = 0, /**< Multi carrier mode */
+ DRX_CARRIER_SINGLE, /**< Single carrier mode */
+ DRX_CARRIER_UNKNOWN = DRX_UNKNOWN, /**< Carrier mode unknown. */
+ DRX_CARRIER_AUTO = DRX_AUTO /**< Autodetect carrier mode */
+} DRXCarrier_t, *pDRXCarrier_t;
+
+/**
+* \enum DRXFramemode_t
+* \brief Channel Frame Mode.
+*/
+typedef enum {
+ DRX_FRAMEMODE_420 = 0, /**< 420 with variable PN */
+ DRX_FRAMEMODE_595, /**< 595 */
+ DRX_FRAMEMODE_945, /**< 945 with variable PN */
+ DRX_FRAMEMODE_420_FIXED_PN, /**< 420 with fixed PN */
+ DRX_FRAMEMODE_945_FIXED_PN, /**< 945 with fixed PN */
+ DRX_FRAMEMODE_UNKNOWN = DRX_UNKNOWN, /**< Frame mode unknown. */
+ DRX_FRAMEMODE_AUTO = DRX_AUTO /**< Autodetect frame mode */
+} DRXFramemode_t, *pDRXFramemode_t;
+
+/**
+* \enum DRXTPSFrame_t
+* \brief Frame number in current super-frame.
+*/
+typedef enum {
+ DRX_TPS_FRAME1 = 0, /**< TPS frame 1. */
+ DRX_TPS_FRAME2, /**< TPS frame 2. */
+ DRX_TPS_FRAME3, /**< TPS frame 3. */
+ DRX_TPS_FRAME4, /**< TPS frame 4. */
+ DRX_TPS_FRAME_UNKNOWN = DRX_UNKNOWN /**< TPS frame unknown. */
+} DRXTPSFrame_t, *pDRXTPSFrame_t;
+
+/**
+* \enum DRXLDPC_t
+* \brief TPS LDPC .
+*/
+typedef enum {
+ DRX_LDPC_0_4 = 0, /**< LDPC 0.4 */
+ DRX_LDPC_0_6, /**< LDPC 0.6 */
+ DRX_LDPC_0_8, /**< LDPC 0.8 */
+ DRX_LDPC_UNKNOWN = DRX_UNKNOWN, /**< LDPC unknown. */
+ DRX_LDPC_AUTO = DRX_AUTO /**< Autodetect LDPC */
+} DRXLDPC_t, *pDRXLDPC_t;
+
+/**
+* \enum DRXPilotMode_t
+* \brief Pilot modes in DTMB.
+*/
+typedef enum {
+ DRX_PILOT_ON = 0, /**< Pilot On */
+ DRX_PILOT_OFF, /**< Pilot Off */
+ DRX_PILOT_UNKNOWN = DRX_UNKNOWN, /**< Pilot unknown. */
+ DRX_PILOT_AUTO = DRX_AUTO /**< Autodetect Pilot */
+} DRXPilotMode_t, *pDRXPilotMode_t;
+
+
+
+/**
+* \enum DRXCtrlIndex_t
+* \brief Indices of the control functions.
+*/
+typedef u32_t DRXCtrlIndex_t, *pDRXCtrlIndex_t;
+
+#ifndef DRX_CTRL_BASE
+#define DRX_CTRL_BASE ((DRXCtrlIndex_t)0)
+#endif
+
+#define DRX_CTRL_NOP ( DRX_CTRL_BASE + 0)/**< No Operation */
+#define DRX_CTRL_PROBE_DEVICE ( DRX_CTRL_BASE + 1)/**< Probe device */
+
+#define DRX_CTRL_LOAD_UCODE ( DRX_CTRL_BASE + 2)/**< Load microcode */
+#define DRX_CTRL_VERIFY_UCODE ( DRX_CTRL_BASE + 3)/**< Verify microcode */
+#define DRX_CTRL_SET_CHANNEL ( DRX_CTRL_BASE + 4)/**< Set channel */
+#define DRX_CTRL_GET_CHANNEL ( DRX_CTRL_BASE + 5)/**< Get channel */
+#define DRX_CTRL_LOCK_STATUS ( DRX_CTRL_BASE + 6)/**< Get lock status */
+#define DRX_CTRL_SIG_QUALITY ( DRX_CTRL_BASE + 7)/**< Get signal quality */
+#define DRX_CTRL_SIG_STRENGTH ( DRX_CTRL_BASE + 8)/**< Get signal strength*/
+#define DRX_CTRL_RF_POWER ( DRX_CTRL_BASE + 9)/**< Get RF power */
+#define DRX_CTRL_CONSTEL ( DRX_CTRL_BASE + 10)/**< Get constel point */
+#define DRX_CTRL_SCAN_INIT ( DRX_CTRL_BASE + 11)/**< Initialize scan */
+#define DRX_CTRL_SCAN_NEXT ( DRX_CTRL_BASE + 12)/**< Scan for next */
+#define DRX_CTRL_SCAN_STOP ( DRX_CTRL_BASE + 13)/**< Stop scan */
+#define DRX_CTRL_TPS_INFO ( DRX_CTRL_BASE + 14)/**< Get TPS info */
+#define DRX_CTRL_SET_CFG ( DRX_CTRL_BASE + 15)/**< Set configuration */
+#define DRX_CTRL_GET_CFG ( DRX_CTRL_BASE + 16)/**< Get configuration */
+#define DRX_CTRL_VERSION ( DRX_CTRL_BASE + 17)/**< Get version info */
+#define DRX_CTRL_I2C_BRIDGE ( DRX_CTRL_BASE + 18)/**< Open/close bridge */
+#define DRX_CTRL_SET_STANDARD ( DRX_CTRL_BASE + 19)/**< Set demod std */
+#define DRX_CTRL_GET_STANDARD ( DRX_CTRL_BASE + 20)/**< Get demod std */
+#define DRX_CTRL_SET_OOB ( DRX_CTRL_BASE + 21)/**< Set OOB param */
+#define DRX_CTRL_GET_OOB ( DRX_CTRL_BASE + 22)/**< Get OOB param */
+#define DRX_CTRL_AUD_SET_STANDARD (DRX_CTRL_BASE + 23)/**< Set audio param */
+#define DRX_CTRL_AUD_GET_STANDARD (DRX_CTRL_BASE + 24)/**< Get audio param */
+#define DRX_CTRL_AUD_GET_STATUS ( DRX_CTRL_BASE + 25)/**< Read RDS */
+#define DRX_CTRL_AUD_BEEP ( DRX_CTRL_BASE + 26)/**< Read RDS */
+#define DRX_CTRL_I2C_READWRITE ( DRX_CTRL_BASE + 27)/**< Read/write I2C */
+#define DRX_CTRL_PROGRAM_TUNER ( DRX_CTRL_BASE + 28)/**< Program tuner */
+
+ /* Professional */
+#define DRX_CTRL_MB_CFG ( DRX_CTRL_BASE + 29) /**< */
+#define DRX_CTRL_MB_READ ( DRX_CTRL_BASE + 30) /**< */
+#define DRX_CTRL_MB_WRITE ( DRX_CTRL_BASE + 31) /**< */
+#define DRX_CTRL_MB_CONSTEL ( DRX_CTRL_BASE + 32) /**< */
+#define DRX_CTRL_MB_MER ( DRX_CTRL_BASE + 33) /**< */
+
+ /* Misc */
+#define DRX_CTRL_UIO_CFG DRX_CTRL_SET_UIO_CFG /**< Configure UIO */
+#define DRX_CTRL_SET_UIO_CFG ( DRX_CTRL_BASE + 34) /**< Configure UIO */
+#define DRX_CTRL_GET_UIO_CFG ( DRX_CTRL_BASE + 35) /**< Configure UIO */
+#define DRX_CTRL_UIO_READ ( DRX_CTRL_BASE + 36) /**< Read from UIO */
+#define DRX_CTRL_UIO_WRITE ( DRX_CTRL_BASE + 37) /**< Write to UIO */
+#define DRX_CTRL_READ_EVENTS ( DRX_CTRL_BASE + 38) /**< Read events */
+#define DRX_CTRL_HDL_EVENTS ( DRX_CTRL_BASE + 39) /**< Handle events */
+#define DRX_CTRL_POWER_MODE ( DRX_CTRL_BASE + 40) /**< Set power mode */
+#define DRX_CTRL_LOAD_FILTER ( DRX_CTRL_BASE + 41) /**< Load chan. filter */
+#define DRX_CTRL_VALIDATE_UCODE ( DRX_CTRL_BASE + 42) /**< Validate ucode */
+#define DRX_CTRL_DUMP_REGISTERS ( DRX_CTRL_BASE + 43) /**< Dump registers */
+
+#define DRX_CTRL_MAX ( DRX_CTRL_BASE + 44) /* never to be used */
+
+/**
+* \enum DRXUCodeAction_t
+* \brief Used to indicate if firmware has to be uploaded or verified.
+*/
+
+typedef enum {
+ UCODE_UPLOAD, /**< Upload the microcode image to device */
+ UCODE_VERIFY /**< Compare microcode image with code on device */
+} DRXUCodeAction_t, *pDRXUCodeAction_t;
+
+
+/**
+* \enum DRXLockStatus_t
+* \brief Used to reflect current lock status of demodulator.
+*
+* The generic lock states have device dependent semantics.
+*/
+typedef enum{
+ DRX_NEVER_LOCK = 0, /**< Device will never lock on this signal */
+ DRX_NOT_LOCKED, /**< Device has no lock at all */
+ DRX_LOCK_STATE_1, /**< Generic lock state */
+ DRX_LOCK_STATE_2, /**< Generic lock state */
+ DRX_LOCK_STATE_3, /**< Generic lock state */
+ DRX_LOCK_STATE_4, /**< Generic lock state */
+ DRX_LOCK_STATE_5, /**< Generic lock state */
+ DRX_LOCK_STATE_6, /**< Generic lock state */
+ DRX_LOCK_STATE_7, /**< Generic lock state */
+ DRX_LOCK_STATE_8, /**< Generic lock state */
+ DRX_LOCK_STATE_9, /**< Generic lock state */
+ DRX_LOCKED /**< Device is in lock */
+} DRXLockStatus_t, *pDRXLockStatus_t;
+
+/**
+* \enum DRXUIO_t
+* \brief Used to address a User IO (UIO).
+*/
+typedef enum{
+ DRX_UIO1 ,
+ DRX_UIO2 ,
+ DRX_UIO3 ,
+ DRX_UIO4 ,
+ DRX_UIO5 ,
+ DRX_UIO6 ,
+ DRX_UIO7 ,
+ DRX_UIO8 ,
+ DRX_UIO9 ,
+ DRX_UIO10 ,
+ DRX_UIO11 ,
+ DRX_UIO12 ,
+ DRX_UIO13 ,
+ DRX_UIO14 ,
+ DRX_UIO15 ,
+ DRX_UIO16 ,
+ DRX_UIO17 ,
+ DRX_UIO18 ,
+ DRX_UIO19 ,
+ DRX_UIO20 ,
+ DRX_UIO21 ,
+ DRX_UIO22 ,
+ DRX_UIO23 ,
+ DRX_UIO24 ,
+ DRX_UIO25 ,
+ DRX_UIO26 ,
+ DRX_UIO27 ,
+ DRX_UIO28 ,
+ DRX_UIO29 ,
+ DRX_UIO30 ,
+ DRX_UIO31 ,
+ DRX_UIO32 ,
+ DRX_UIO_MAX = DRX_UIO32
+} DRXUIO_t, *pDRXUIO_t;
+
+/**
+* \enum DRXUIOMode_t
+* \brief Used to configure the modus oprandi of a UIO.
+*
+* DRX_UIO_MODE_FIRMWARE is an old uio mode.
+* It is replaced by the modes DRX_UIO_MODE_FIRMWARE0 .. DRX_UIO_MODE_FIRMWARE9.
+* To be backward compatible DRX_UIO_MODE_FIRMWARE is equivalent to
+* DRX_UIO_MODE_FIRMWARE0.
+*/
+typedef enum{
+ DRX_UIO_MODE_DISABLE = 0x01, /**< not used, pin is configured as input */
+ DRX_UIO_MODE_READWRITE = 0x02, /**< used for read/write by application */
+ DRX_UIO_MODE_FIRMWARE = 0x04, /**< controlled by firmware, function 0 */
+ DRX_UIO_MODE_FIRMWARE0 = DRX_UIO_MODE_FIRMWARE , /**< same as above */
+ DRX_UIO_MODE_FIRMWARE1 = 0x08, /**< controlled by firmware, function 1 */
+ DRX_UIO_MODE_FIRMWARE2 = 0x10, /**< controlled by firmware, function 2 */
+ DRX_UIO_MODE_FIRMWARE3 = 0x20, /**< controlled by firmware, function 3 */
+ DRX_UIO_MODE_FIRMWARE4 = 0x40, /**< controlled by firmware, function 4 */
+ DRX_UIO_MODE_FIRMWARE5 = 0x80 /**< controlled by firmware, function 5 */
+} DRXUIOMode_t, *pDRXUIOMode_t;
+
+/**
+* \enum DRXOOBDownstreamStandard_t
+* \brief Used to select OOB standard.
+*
+* Based on ANSI 55-1 and 55-2
+*/
+typedef enum {
+ DRX_OOB_MODE_A = 0, /**< ANSI 55-1 */
+ DRX_OOB_MODE_B_GRADE_A, /**< ANSI 55-2 A */
+ DRX_OOB_MODE_B_GRADE_B /**< ANSI 55-2 B */
+} DRXOOBDownstreamStandard_t, *pDRXOOBDownstreamStandard_t;
+
+
+/*-------------------------------------------------------------------------
+STRUCTS
+-------------------------------------------------------------------------*/
+
+/*============================================================================*/
+/*============================================================================*/
+/*== CTRL CFG related data structures ========================================*/
+/*============================================================================*/
+/*============================================================================*/
+
+/**
+* \enum DRXCfgType_t
+* \brief Generic configuration function identifiers.
+*/
+typedef u32_t DRXCfgType_t, *pDRXCfgType_t;
+
+#ifndef DRX_CFG_BASE
+#define DRX_CFG_BASE ((DRXCfgType_t)0)
+#endif
+
+#define DRX_CFG_MPEG_OUTPUT ( DRX_CFG_BASE + 0) /* MPEG TS output */
+#define DRX_CFG_PKTERR ( DRX_CFG_BASE + 1) /* Packet Error */
+#define DRX_CFG_SYMCLK_OFFS ( DRX_CFG_BASE + 2) /* Symbol Clk Offset */
+#define DRX_CFG_SMA ( DRX_CFG_BASE + 3) /* Smart Antenna */
+#define DRX_CFG_PINSAFE ( DRX_CFG_BASE + 4) /* Pin safe mode */
+#define DRX_CFG_SUBSTANDARD ( DRX_CFG_BASE + 5) /* substandard */
+#define DRX_CFG_AUD_VOLUME ( DRX_CFG_BASE + 6) /* volume */
+#define DRX_CFG_AUD_RDS ( DRX_CFG_BASE + 7) /* rds */
+#define DRX_CFG_AUD_AUTOSOUND ( DRX_CFG_BASE + 8) /* ASS & ASC */
+#define DRX_CFG_AUD_ASS_THRES ( DRX_CFG_BASE + 9) /* ASS Thresholds */
+#define DRX_CFG_AUD_DEVIATION ( DRX_CFG_BASE + 10) /* Deviation */
+#define DRX_CFG_AUD_PRESCALE ( DRX_CFG_BASE + 11) /* Prescale */
+#define DRX_CFG_AUD_MIXER ( DRX_CFG_BASE + 12) /* Mixer */
+#define DRX_CFG_AUD_AVSYNC ( DRX_CFG_BASE + 13) /* AVSync */
+#define DRX_CFG_AUD_CARRIER ( DRX_CFG_BASE + 14) /* Audio carriers */
+#define DRX_CFG_I2S_OUTPUT ( DRX_CFG_BASE + 15) /* I2S output */
+#define DRX_CFG_ATV_STANDARD ( DRX_CFG_BASE + 16) /* ATV standard */
+#define DRX_CFG_SQI_SPEED ( DRX_CFG_BASE + 17) /* SQI speed */
+#define DRX_CTRL_CFG_MAX ( DRX_CFG_BASE + 18) /* never to be used */
+
+#define DRX_CFG_PINS_SAFE_MODE DRX_CFG_PINSAFE
+/*============================================================================*/
+/*============================================================================*/
+/*== CTRL related data structures ============================================*/
+/*============================================================================*/
+/*============================================================================*/
+
+/**
+* \struct DRXUCodeInfo_t
+* \brief Parameters for microcode upload and verfiy.
+*
+* Used by DRX_CTRL_LOAD_UCODE and DRX_CTRL_VERIFY_UCODE
+*/
+typedef struct {
+ pu8_t mcData; /**< Pointer to microcode image. */
+ u16_t mcSize; /**< Microcode image size. */
+} DRXUCodeInfo_t, *pDRXUCodeInfo_t;
+
+/**
+* \struct DRXMcVersionRec_t
+* \brief Microcode version record
+* Version numbers are stored in BCD format, as usual:
+* o major number = bits 31-20 (first three nibbles of MSW)
+* o minor number = bits 19-16 (fourth nibble of MSW)
+* o patch number = bits 15-0 (remaining nibbles in LSW)
+*
+* The device type indicates for which the device is meant. It is based on the
+* JTAG ID, using everything except the bond ID and the metal fix.
+*
+* Special values:
+* - mcDevType == 0 => any device allowed
+* - mcBaseVersion == 0.0.0 => full microcode (mcVersion is the version)
+* - mcBaseVersion != 0.0.0 => patch microcode, the base microcode version
+* (mcVersion is the version)
+*/
+#define AUX_VER_RECORD 0x8000
+
+typedef struct {
+ u16_t auxType; /* type of aux data - 0x8000 for version record */
+ u32_t mcDevType; /* device type, based on JTAG ID */
+ u32_t mcVersion; /* version of microcode */
+ u32_t mcBaseVersion; /* in case of patch: the original microcode version */
+} DRXMcVersionRec_t, *pDRXMcVersionRec_t;
+
+/*========================================*/
+
+/**
+* \struct DRXFilterInfo_t
+* \brief Parameters for loading filter coefficients
+*
+* Used by DRX_CTRL_LOAD_FILTER
+*/
+typedef struct {
+ pu8_t dataRe; /**< pointer to coefficients for RE */
+ pu8_t dataIm; /**< pointer to coefficients for IM */
+ u16_t sizeRe; /**< size of coefficients for RE */
+ u16_t sizeIm; /**< size of coefficients for IM */
+} DRXFilterInfo_t, *pDRXFilterInfo_t;
+
+
+
+/*========================================*/
+
+/**
+* \struct DRXChannel_t
+* \brief The set of parameters describing a single channel.
+*
+* Used by DRX_CTRL_SET_CHANNEL and DRX_CTRL_GET_CHANNEL.
+* Only certain fields need to be used for a specfic standard.
+*
+*/
+typedef struct {
+ DRXFrequency_t frequency; /**< frequency in kHz */
+ DRXBandwidth_t bandwidth; /**< bandwidth */
+ DRXMirror_t mirror; /**< mirrored or not on RF */
+ DRXConstellation_t constellation; /**< constellation */
+ DRXHierarchy_t hierarchy; /**< hierarchy */
+ DRXPriority_t priority; /**< priority */
+ DRXCoderate_t coderate; /**< coderate */
+ DRXGuard_t guard; /**< guard interval */
+ DRXFftmode_t fftmode; /**< fftmode */
+ DRXClassification_t classification; /**< classification */
+ DRXSymbolrate_t symbolrate; /**< symbolrate in symbols/sec */
+ DRXInterleaveModes_t interleavemode; /**< interleaveMode QAM */
+ DRXLDPC_t ldpc; /**< ldpc */
+ DRXCarrier_t carrier; /**< carrier */
+ DRXFramemode_t framemode; /**< frame mode */
+ DRXPilotMode_t pilot; /**< pilot mode */
+} DRXChannel_t, *pDRXChannel_t;
+
+/*========================================*/
+
+/**
+* \struct DRXSigQuality_t
+* Signal quality metrics.
+*
+* Used by DRX_CTRL_SIG_QUALITY.
+*/
+typedef struct {
+ u16_t MER; /**< in steps of 0.1 dB */
+ u32_t preViterbiBER ; /**< in steps of 1/scaleFactorBER */
+ u32_t postViterbiBER ; /**< in steps of 1/scaleFactorBER */
+ u32_t scaleFactorBER; /**< scale factor for BER */
+ u16_t packetError ; /**< number of packet errors */
+ u32_t postReedSolomonBER ; /**< in steps of 1/scaleFactorBER */
+ u32_t preLdpcBER; /**< in steps of 1/scaleFactorBER */
+ u32_t averIter; /**< in steps of 0.01 */
+ u16_t indicator; /**< indicative signal quality low=0..100=high */
+}DRXSigQuality_t, *pDRXSigQuality_t;
+
+
+typedef enum {
+ DRX_SQI_SPEED_FAST = 0,
+ DRX_SQI_SPEED_MEDIUM,
+ DRX_SQI_SPEED_SLOW,
+ DRX_SQI_SPEED_UNKNOWN = DRX_UNKNOWN
+} DRXCfgSqiSpeed_t, *pDRXCfgSqiSpeed_t;
+
+/*========================================*/
+
+/**
+* \struct DRXComplex_t
+* A complex number.
+*
+* Used by DRX_CTRL_CONSTEL.
+*/
+typedef struct {
+ s16_t im; /**< Imaginary part. */
+ s16_t re; /**< Real part. */
+} DRXComplex_t, *pDRXComplex_t;
+
+
+/*========================================*/
+
+/**
+* \struct DRXFrequencyPlan_t
+* Array element of a frequency plan.
+*
+* Used by DRX_CTRL_SCAN_INIT.
+*/
+typedef struct {
+ DRXFrequency_t first; /**< First centre frequency in this band */
+ DRXFrequency_t last; /**< Last centre frequency in this band */
+ DRXFrequency_t step; /**< Stepping frequency in this band */
+ DRXBandwidth_t bandwidth; /**< Bandwidth within this frequency band */
+ u16_t chNumber; /**< First channel number in this band, or first
+ index in chNames */
+ char **chNames; /**< Optional list of channel names in this
+ band */
+} DRXFrequencyPlan_t, *pDRXFrequencyPlan_t;
+
+/*========================================*/
+
+/**
+* \struct DRXFrequencyPlanInfo_t
+* Array element of a list of frequency plans.
+*
+* Used by frequency_plan.h
+*/
+typedef struct{
+ pDRXFrequencyPlan_t freqPlan;
+ int freqPlanSize;
+ char *freqPlanName;
+}DRXFrequencyPlanInfo_t, *pDRXFrequencyPlanInfo_t;
+
+/*========================================*/
+
+/**
+* /struct DRXScanDataQam_t
+* QAM specific scanning variables
+*/
+typedef struct {
+ pu32_t symbolrate; /**< list of symbolrates to scan */
+ u16_t symbolrateSize; /**< size of symbolrate array */
+ pDRXConstellation_t constellation; /**< list of constellations */
+ u16_t constellationSize; /**< size of constellation array */
+ u16_t ifAgcThreshold; /**< thresholf for IF-AGC based
+ scanning filter */
+} DRXScanDataQam_t, *pDRXScanDataQam_t;
+
+/*========================================*/
+
+/**
+* /struct DRXScanDataAtv_t
+* ATV specific scanning variables
+*/
+typedef struct {
+ s16_t svrThreshold; /**< threshold of Sound/Video ratio in 0.1dB steps */
+} DRXScanDataAtv_t, *pDRXScanDataAtv_t;
+
+/*========================================*/
+
+/**
+* \struct DRXScanParam_t
+* Parameters for channel scan.
+*
+* Used by DRX_CTRL_SCAN_INIT.
+*/
+typedef struct {
+ pDRXFrequencyPlan_t frequencyPlan; /**< Frequency plan (array)*/
+ u16_t frequencyPlanSize; /**< Number of bands */
+ u32_t numTries; /**< Max channels tried */
+ DRXFrequency_t skip; /**< Minimum frequency step to take
+ after a channel is found */
+ void *extParams; /**< Standard specific params */
+} DRXScanParam_t, *pDRXScanParam_t;
+
+/*========================================*/
+
+/**
+* \brief Scan commands.
+* Used by scanning algorithms.
+*/
+typedef enum {
+ DRX_SCAN_COMMAND_INIT = 0, /**< Initialize scanning */
+ DRX_SCAN_COMMAND_NEXT, /**< Next scan */
+ DRX_SCAN_COMMAND_STOP /**< Stop scanning */
+}DRXScanCommand_t, *pDRXScanCommand_t;
+
+/*========================================*/
+
+/**
+* \brief Inner scan function prototype.
+*/
+typedef DRXStatus_t (*DRXScanFunc_t) (void* scanContext,
+ DRXScanCommand_t scanCommand,
+ pDRXChannel_t scanChannel,
+ pBool_t getNextChannel );
+
+/*========================================*/
+
+/**
+* \struct DRXTPSInfo_t
+* TPS information, DVB-T specific.
+*
+* Used by DRX_CTRL_TPS_INFO.
+*/
+typedef struct {
+ DRXFftmode_t fftmode; /**< Fft mode */
+ DRXGuard_t guard; /**< Guard interval */
+ DRXConstellation_t constellation; /**< Constellation */
+ DRXHierarchy_t hierarchy; /**< Hierarchy */
+ DRXCoderate_t highCoderate; /**< High code rate */
+ DRXCoderate_t lowCoderate; /**< Low cod rate */
+ DRXTPSFrame_t frame; /**< Tps frame */
+ u8_t length; /**< Length */
+ u16_t cellId; /**< Cell id */
+}DRXTPSInfo_t, *pDRXTPSInfo_t;
+
+/*========================================*/
+
+/**
+* \brief Power mode of device.
+*
+* Used by DRX_CTRL_SET_POWER_MODE.
+*/
+typedef enum {
+ DRX_POWER_UP = 0, /**< Generic , Power Up Mode */
+ DRX_POWER_MODE_1, /**< Device specific , Power Up Mode */
+ DRX_POWER_MODE_2, /**< Device specific , Power Up Mode */
+ DRX_POWER_MODE_3, /**< Device specific , Power Up Mode */
+ DRX_POWER_MODE_4, /**< Device specific , Power Up Mode */
+ DRX_POWER_MODE_5, /**< Device specific , Power Up Mode */
+ DRX_POWER_MODE_6, /**< Device specific , Power Up Mode */
+ DRX_POWER_MODE_7, /**< Device specific , Power Up Mode */
+ DRX_POWER_MODE_8, /**< Device specific , Power Up Mode */
+
+ DRX_POWER_MODE_9, /**< Device specific , Power Down Mode */
+ DRX_POWER_MODE_10, /**< Device specific , Power Down Mode */
+ DRX_POWER_MODE_11, /**< Device specific , Power Down Mode */
+ DRX_POWER_MODE_12, /**< Device specific , Power Down Mode */
+ DRX_POWER_MODE_13, /**< Device specific , Power Down Mode */
+ DRX_POWER_MODE_14, /**< Device specific , Power Down Mode */
+ DRX_POWER_MODE_15, /**< Device specific , Power Down Mode */
+ DRX_POWER_MODE_16, /**< Device specific , Power Down Mode */
+ DRX_POWER_DOWN = 255 /**< Generic , Power Down Mode */
+}DRXPowerMode_t, *pDRXPowerMode_t;
+
+/*========================================*/
+
+/**
+* \enum DRXModule_t
+* \brief Software module identification.
+*
+* Used by DRX_CTRL_VERSION.
+*/
+typedef enum {
+ DRX_MODULE_DEVICE,
+ DRX_MODULE_MICROCODE,
+ DRX_MODULE_DRIVERCORE,
+ DRX_MODULE_DEVICEDRIVER,
+ DRX_MODULE_DAP,
+ DRX_MODULE_BSP_I2C,
+ DRX_MODULE_BSP_TUNER,
+ DRX_MODULE_BSP_HOST,
+ DRX_MODULE_UNKNOWN
+} DRXModule_t, *pDRXModule_t;
+
+
+/**
+* \enum DRXVersion_t
+* \brief Version information of one software module.
+*
+* Used by DRX_CTRL_VERSION.
+*/
+typedef struct {
+ DRXModule_t moduleType; /**< Type identifier of the module */
+ char *moduleName; /**< Name or description of module */
+ u16_t vMajor; /**< Major version number */
+ u16_t vMinor; /**< Minor version number */
+ u16_t vPatch; /**< Patch version number */
+ char *vString; /**< Version as text string */
+} DRXVersion_t, *pDRXVersion_t;
+
+/**
+* \enum DRXVersionList_t
+* \brief List element of NULL terminated, linked list for version information.
+*
+* Used by DRX_CTRL_VERSION.
+*/
+typedef struct DRXVersionList_s {
+ pDRXVersion_t version; /**< Version information */
+ struct DRXVersionList_s *next; /**< Next list element */
+} DRXVersionList_t, *pDRXVersionList_t;
+
+/*========================================*/
+
+/**
+* \brief Parameters needed to confiugure a UIO.
+*
+* Used by DRX_CTRL_UIO_CFG.
+*/
+typedef struct {
+ DRXUIO_t uio; /**< UIO identifier */
+ DRXUIOMode_t mode; /**< UIO operational mode */
+} DRXUIOCfg_t, *pDRXUIOCfg_t;
+
+/*========================================*/
+
+/**
+* \brief Parameters needed to read from or write to a UIO.
+*
+* Used by DRX_CTRL_UIO_READ and DRX_CTRL_UIO_WRITE.
+*/
+typedef struct {
+ DRXUIO_t uio; /**< UIO identifier */
+ Bool_t value; /**< UIO value (TRUE=1, FALSE=0) */
+} DRXUIOData_t, *pDRXUIOData_t;
+
+/*========================================*/
+
+/**
+* \brief Parameters needed to configure OOB.
+*
+* Used by DRX_CTRL_SET_OOB.
+*/
+typedef struct {
+ DRXFrequency_t frequency; /**< Frequency in kHz */
+ DRXOOBDownstreamStandard_t standard; /**< OOB standard */
+ Bool_t spectrumInverted; /**< If TRUE, then spectrum
+ is inverted */
+} DRXOOB_t, *pDRXOOB_t;
+
+
+/*========================================*/
+
+/**
+* \brief Metrics from OOB.
+*
+* Used by DRX_CTRL_GET_OOB.
+*/
+typedef struct {
+ DRXFrequency_t frequency; /**< Frequency in Khz */
+ DRXLockStatus_t lock; /**< Lock status */
+ u32_t mer; /**< MER */
+ s32_t symbolRateOffset; /**< Symbolrate offset in ppm */
+} DRXOOBStatus_t, *pDRXOOBStatus_t;
+
+
+/*========================================*/
+
+/**
+* \brief Device dependent configuration data.
+*
+* Used by DRX_CTRL_SET_CFG and DRX_CTRL_GET_CFG.
+* A sort of nested DRX_Ctrl() functionality for device specific controls.
+*/
+typedef struct {
+ DRXCfgType_t cfgType ; /**< Function identifier */
+ void* cfgData ; /**< Function data */
+} DRXCfg_t, *pDRXCfg_t;
+
+/*========================================*/
+
+/**
+* /struct DRXMpegStartWidth_t
+* MStart width [nr MCLK cycles] for serial MPEG output.
+*/
+
+typedef enum {
+ DRX_MPEG_STR_WIDTH_1,
+ DRX_MPEG_STR_WIDTH_8
+} DRXMPEGStrWidth_t, *pDRXMPEGStrWidth_t;
+
+
+/* CTRL CFG MPEG ouput */
+/**
+* \struct DRXCfgMPEGOutput_t
+* \brief Configuartion parameters for MPEG output control.
+*
+* Used by DRX_CFG_MPEG_OUTPUT, in combination with DRX_CTRL_SET_CFG and
+* DRX_CTRL_GET_CFG.
+*/
+
+typedef struct {
+ Bool_t enableMPEGOutput; /**< If TRUE, enable MPEG output */
+ Bool_t insertRSByte; /**< If TRUE, insert RS byte */
+ Bool_t enableParallel; /**< If TRUE, parallel out otherwise
+ serial */
+ Bool_t invertDATA; /**< If TRUE, invert DATA signals */
+ Bool_t invertERR; /**< If TRUE, invert ERR signal */
+ Bool_t invertSTR; /**< If TRUE, invert STR signals */
+ Bool_t invertVAL; /**< If TRUE, invert VAL signals */
+ Bool_t invertCLK; /**< If TRUE, invert CLK signals */
+ Bool_t staticCLK; /**< If TRUE, static MPEG clockrate
+ will be used, otherwise clockrate
+ will adapt to the bitrate of the
+ TS */
+ u32_t bitrate; /**< Maximum bitrate in b/s in case
+ static clockrate is selected */
+ DRXMPEGStrWidth_t widthSTR; /**< MPEG start width */
+} DRXCfgMPEGOutput_t, *pDRXCfgMPEGOutput_t;
+
+/* CTRL CFG SMA */
+/**
+* /struct DRXCfgSMAIO_t
+* smart antenna i/o.
+*/
+typedef enum DRXCfgSMAIO_t {
+ DRX_SMA_OUTPUT = 0,
+ DRX_SMA_INPUT
+} DRXCfgSMAIO_t, *pDRXCfgSMAIO_t;
+
+/**
+* /struct DRXCfgSMA_t
+* Set smart antenna.
+*/
+typedef struct {
+ DRXCfgSMAIO_t io;
+ u16_t ctrlData;
+ Bool_t smartAntInverted;
+} DRXCfgSMA_t, *pDRXCfgSMA_t;
+
+/*========================================*/
+
+/**
+* \struct DRXI2CData_t
+* \brief Data for I2C via 2nd or 3rd or etc I2C port.
+*
+* Used by DRX_CTRL_I2C_READWRITE.
+* If portNr is equal to primairy portNr BSPI2C will be used.
+*
+*/
+typedef struct {
+ u16_t portNr; /**< I2C port number */
+ pI2CDeviceAddr_t wDevAddr; /**< Write device address */
+ u16_t wCount; /**< Size of write data in bytes */
+ pu8_t wData; /**< Pointer to write data */
+ pI2CDeviceAddr_t rDevAddr; /**< Read device address */
+ u16_t rCount; /**< Size of data to read in bytes */
+ pu8_t rData; /**< Pointer to read buffer */
+} DRXI2CData_t, *pDRXI2CData_t;
+
+/*========================================*/
+
+/**
+* \enum DRXAudStandard_t
+* \brief Audio standard identifier.
+*
+* Used by DRX_CTRL_SET_AUD.
+*/
+typedef enum {
+ DRX_AUD_STANDARD_BTSC, /**< set BTSC standard (USA) */
+ DRX_AUD_STANDARD_A2, /**< set A2-Korea FM Stereo */
+ DRX_AUD_STANDARD_EIAJ, /**< set to Japanese FM Stereo */
+ DRX_AUD_STANDARD_FM_STEREO, /**< set to FM-Stereo Radio */
+ DRX_AUD_STANDARD_M_MONO, /**< for 4.5 MHz mono detected */
+ DRX_AUD_STANDARD_D_K_MONO, /**< for 6.5 MHz mono detected */
+ DRX_AUD_STANDARD_BG_FM, /**< set BG_FM standard */
+ DRX_AUD_STANDARD_D_K1, /**< set D_K1 standard */
+ DRX_AUD_STANDARD_D_K2, /**< set D_K2 standard */
+ DRX_AUD_STANDARD_D_K3, /**< set D_K3 standard */
+ DRX_AUD_STANDARD_BG_NICAM_FM, /**< set BG_NICAM_FM standard */
+ DRX_AUD_STANDARD_L_NICAM_AM, /**< set L_NICAM_AM standard */
+ DRX_AUD_STANDARD_I_NICAM_FM, /**< set I_NICAM_FM standard */
+ DRX_AUD_STANDARD_D_K_NICAM_FM, /**< set D_K_NICAM_FM standard */
+ DRX_AUD_STANDARD_NOT_READY, /**< used to detect audio standard */
+ DRX_AUD_STANDARD_AUTO = DRX_AUTO, /**< Automatic Standard Detection */
+ DRX_AUD_STANDARD_UNKNOWN = DRX_UNKNOWN /**< used as auto and for readback */
+} DRXAudStandard_t, *pDRXAudStandard_t;
+
+/* CTRL_AUD_GET_STATUS - DRXAudStatus_t */
+/**
+* \enum DRXAudNICAMStatus_t
+* \brief Status of NICAM carrier.
+*/
+typedef enum {
+ DRX_AUD_NICAM_DETECTED = 0, /**< NICAM carrier detected */
+ DRX_AUD_NICAM_NOT_DETECTED, /**< NICAM carrier not detected */
+ DRX_AUD_NICAM_BAD /**< NICAM carrier bad quality */
+} DRXAudNICAMStatus_t, *pDRXAudNICAMStatus_t;
+
+/**
+* \struct DRXAudStatus_t
+* \brief Audio status characteristics.
+*/
+typedef struct {
+ Bool_t stereo; /**< stereo detection */
+ Bool_t carrierA; /**< carrier A detected */
+ Bool_t carrierB; /**< carrier B detected */
+ Bool_t sap; /**< sap / bilingual detection */
+ Bool_t rds; /**< RDS data array present */
+ DRXAudNICAMStatus_t nicamStatus; /**< status of NICAM carrier */
+ s8_t fmIdent; /**< FM Identification value */
+} DRXAudStatus_t, *pDRXAudStatus_t;
+
+/* CTRL_AUD_READ_RDS - DRXRDSdata_t */
+
+/**
+* \struct DRXRDSdata_t
+* \brief Raw RDS data array.
+*/
+typedef struct {
+ Bool_t valid; /**< RDS data validation */
+ u16_t data[18]; /**< data from one RDS data array */
+} DRXCfgAudRDS_t, *pDRXCfgAudRDS_t;
+
+/* DRX_CFG_AUD_VOLUME - DRXCfgAudVolume_t - set/get */
+/**
+* \enum DRXAudAVCDecayTime_t
+* \brief Automatic volume control configuration.
+*/
+typedef enum {
+ DRX_AUD_AVC_OFF, /**< Automatic volume control off */
+ DRX_AUD_AVC_DECAYTIME_8S, /**< level volume in 8 seconds */
+ DRX_AUD_AVC_DECAYTIME_4S, /**< level volume in 4 seconds */
+ DRX_AUD_AVC_DECAYTIME_2S, /**< level volume in 2 seconds */
+ DRX_AUD_AVC_DECAYTIME_20MS /**< level volume in 20 millisec */
+} DRXAudAVCMode_t, *pDRXAudAVCMode_t;
+
+/**
+* /enum DRXAudMaxAVCGain_t
+* /brief Automatic volume control max gain in audio baseband.
+*/
+typedef enum {
+ DRX_AUD_AVC_MAX_GAIN_0DB, /**< maximum AVC gain 0 dB */
+ DRX_AUD_AVC_MAX_GAIN_6DB, /**< maximum AVC gain 6 dB */
+ DRX_AUD_AVC_MAX_GAIN_12DB /**< maximum AVC gain 12 dB */
+} DRXAudAVCMaxGain_t, *pDRXAudAVCMaxGain_t;
+
+/**
+* /enum DRXAudMaxAVCAtten_t
+* /brief Automatic volume control max attenuation in audio baseband.
+*/
+typedef enum {
+ DRX_AUD_AVC_MAX_ATTEN_12DB, /**< maximum AVC attenuation 12 dB */
+ DRX_AUD_AVC_MAX_ATTEN_18DB, /**< maximum AVC attenuation 18 dB */
+ DRX_AUD_AVC_MAX_ATTEN_24DB /**< maximum AVC attenuation 24 dB */
+} DRXAudAVCMaxAtten_t, *pDRXAudAVCMaxAtten_t;
+/**
+* \struct DRXCfgAudVolume_t
+* \brief Audio volume configuration.
+*/
+typedef struct {
+ Bool_t mute; /**< mute overrides volume setting */
+ s16_t volume; /**< volume, range -114 to 12 dB */
+ DRXAudAVCMode_t avcMode; /**< AVC auto volume control mode */
+ u16_t avcRefLevel; /**< AVC reference level */
+ DRXAudAVCMaxGain_t avcMaxGain; /**< AVC max gain selection */
+ DRXAudAVCMaxAtten_t avcMaxAtten; /**< AVC max attenuation selection */
+ s16_t strengthLeft; /**< quasi-peak, left speaker */
+ s16_t strengthRight; /**< quasi-peak, right speaker */
+} DRXCfgAudVolume_t, *pDRXCfgAudVolume_t;
+
+/* DRX_CFG_I2S_OUTPUT - DRXCfgI2SOutput_t - set/get */
+/**
+* \enum DRXI2SMode_t
+* \brief I2S output mode.
+*/
+typedef enum {
+ DRX_I2S_MODE_MASTER, /**< I2S is in master mode */
+ DRX_I2S_MODE_SLAVE /**< I2S is in slave mode */
+} DRXI2SMode_t, *pDRXI2SMode_t;
+
+/**
+* \enum DRXI2SWordLength_t
+* \brief Width of I2S data.
+*/
+typedef enum {
+ DRX_I2S_WORDLENGTH_32 = 0, /**< I2S data is 32 bit wide */
+ DRX_I2S_WORDLENGTH_16 = 1 /**< I2S data is 16 bit wide */
+} DRXI2SWordLength_t, *pDRXI2SWordLength_t;
+
+/**
+* \enum DRXI2SFormat_t
+* \brief Data wordstrobe alignment for I2S.
+*/
+typedef enum {
+ DRX_I2S_FORMAT_WS_WITH_DATA, /**< I2S data and wordstrobe are aligned */
+ DRX_I2S_FORMAT_WS_ADVANCED /**< I2S data one cycle after wordstrobe */
+} DRXI2SFormat_t, *pDRXI2SFormat_t;
+
+/**
+* \enum DRXI2SPolarity_t
+* \brief Polarity of I2S data.
+*/
+typedef enum {
+ DRX_I2S_POLARITY_RIGHT, /**< wordstrobe - right high, left low */
+ DRX_I2S_POLARITY_LEFT /**< wordstrobe - right low, left high */
+} DRXI2SPolarity_t, *pDRXI2SPolarity_t;
+
+
+
+/**
+* \struct DRXCfgI2SOutput_t
+* \brief I2S output configuration.
+*/
+typedef struct {
+ Bool_t outputEnable; /**< I2S output enable */
+ u32_t frequency; /**< range from 8000-48000 Hz */
+ DRXI2SMode_t mode; /**< I2S mode, master or slave */
+ DRXI2SWordLength_t wordLength; /**< I2S wordlength, 16 or 32 bits */
+ DRXI2SPolarity_t polarity; /**< I2S wordstrobe polarity */
+ DRXI2SFormat_t format; /**< I2S wordstrobe delay to data */
+} DRXCfgI2SOutput_t, *pDRXCfgI2SOutput_t;
+
+
+/* ------------------------------expert interface-----------------------------*/
+/**
+* /enum DRXAudFMDeemphasis_t
+* setting for FM-Deemphasis in audio demodulator.
+*
+*/
+typedef enum {
+ DRX_AUD_FM_DEEMPH_50US,
+ DRX_AUD_FM_DEEMPH_75US,
+ DRX_AUD_FM_DEEMPH_OFF
+} DRXAudFMDeemphasis_t, *pDRXAudFMDeemphasis_t;
+
+/**
+* /enum DRXAudDeviation_t
+* setting for deviation mode in audio demodulator.
+*
+*/
+typedef enum {
+ DRX_AUD_DEVIATION_NORMAL,
+ DRX_AUD_DEVIATION_HIGH
+} DRXCfgAudDeviation_t, *pDRXCfgAudDeviation_t;
+
+/**
+* /enum DRXNoCarrierOption_t
+* setting for carrier, mute/noise.
+*
+*/
+typedef enum {
+ DRX_NO_CARRIER_MUTE,
+ DRX_NO_CARRIER_NOISE
+} DRXNoCarrierOption_t, *pDRXNoCarrierOption_t;
+
+
+/**
+* \enum DRXAudAutoSound_t
+* \brief Automatic Sound
+*/
+typedef enum {
+ DRX_AUD_AUTO_SOUND_OFF = 0,
+ DRX_AUD_AUTO_SOUND_SELECT_ON_CHANGE_ON,
+ DRX_AUD_AUTO_SOUND_SELECT_ON_CHANGE_OFF
+} DRXCfgAudAutoSound_t, *pDRXCfgAudAutoSound_t;
+
+/**
+* \enum DRXAudASSThres_t
+* \brief Automatic Sound Select Thresholds
+*/
+typedef struct {
+ u16_t a2; /* A2 Threshold for ASS configuration */
+ u16_t btsc; /* BTSC Threshold for ASS configuration */
+ u16_t nicam; /* Nicam Threshold for ASS configuration */
+} DRXCfgAudASSThres_t, *pDRXCfgAudASSThres_t;
+
+/**
+* \struct DRXAudCarrier_t
+* \brief Carrier detection related parameters
+*/
+typedef struct {
+ u16_t thres; /* carrier detetcion threshold for primary carrier (A) */
+ DRXNoCarrierOption_t opt; /* Mute or noise at no carrier detection (A) */
+ DRXFrequency_t shift; /* DC level of incoming signal (A) */
+ DRXFrequency_t dco; /* frequency adjustment (A) */
+} DRXAudCarrier_t, *pDRXCfgAudCarrier_t;
+
+/**
+* \struct DRXCfgAudCarriers_t
+* \brief combining carrier A & B to one struct
+*/
+typedef struct {
+ DRXAudCarrier_t a;
+ DRXAudCarrier_t b;
+} DRXCfgAudCarriers_t, *pDRXCfgAudCarriers_t;
+
+/**
+* /enum DRXAudI2SSrc_t
+* Selection of audio source
+*/
+typedef enum {
+ DRX_AUD_SRC_MONO,
+ DRX_AUD_SRC_STEREO_OR_AB,
+ DRX_AUD_SRC_STEREO_OR_A,
+ DRX_AUD_SRC_STEREO_OR_B
+} DRXAudI2SSrc_t, *pDRXAudI2SSrc_t;
+
+
+/**
+* \enum DRXAudI2SMatrix_t
+* \brief Used for selecting I2S output.
+*/
+typedef enum {
+ DRX_AUD_I2S_MATRIX_A_MONO, /**< A sound only, stereo or mono */
+ DRX_AUD_I2S_MATRIX_B_MONO, /**< B sound only, stereo or mono */
+ DRX_AUD_I2S_MATRIX_STEREO, /**< A+B sound, transparant */
+ DRX_AUD_I2S_MATRIX_MONO /**< A+B mixed to mono sum, (L+R)/2 */
+} DRXAudI2SMatrix_t, *pDRXAudI2SMatrix_t;
+
+
+/**
+* /enum DRXAudFMMatrix_t
+* setting for FM-Matrix in audio demodulator.
+*
+*/
+typedef enum {
+ DRX_AUD_FM_MATRIX_NO_MATRIX,
+ DRX_AUD_FM_MATRIX_GERMAN,
+ DRX_AUD_FM_MATRIX_KOREAN,
+ DRX_AUD_FM_MATRIX_SOUND_A,
+ DRX_AUD_FM_MATRIX_SOUND_B
+} DRXAudFMMatrix_t, *pDRXAudFMMatrix_t;
+
+/**
+* \struct DRXAudMatrices_t
+* \brief Mixer settings
+*/
+typedef struct {
+ DRXAudI2SSrc_t sourceI2S;
+ DRXAudI2SMatrix_t matrixI2S;
+ DRXAudFMMatrix_t matrixFm;
+} DRXCfgAudMixer_t, *pDRXCfgAudMixer_t;
+
+/**
+* \enum DRXI2SVidSync_t
+* \brief Audio/video synchronization, interacts with I2S mode.
+* AUTO_1 and AUTO_2 are for automatic video standard detection with preference
+* for NTSC or Monochrome, because the frequencies are too close (59.94 & 60 Hz)
+*/
+typedef enum {
+ DRX_AUD_AVSYNC_OFF, /**< audio/video synchronization is off */
+ DRX_AUD_AVSYNC_NTSC, /**< it is an NTSC system */
+ DRX_AUD_AVSYNC_MONOCHROME, /**< it is a MONOCHROME system */
+ DRX_AUD_AVSYNC_PAL_SECAM /**< it is a PAL/SECAM system */
+} DRXCfgAudAVSync_t, *pDRXCfgAudAVSync_t;
+
+/**
+* \struct DRXCfgAudPrescale_t
+* \brief Prescalers
+*/
+typedef struct {
+ u16_t fmDeviation;
+ s16_t nicamGain;
+} DRXCfgAudPrescale_t, *pDRXCfgAudPrescale_t;
+
+/**
+* \struct DRXAudBeep_t
+* \brief Beep
+*/
+typedef struct {
+ s16_t volume; /* dB */
+ u16_t frequency; /* Hz */
+ Bool_t mute;
+} DRXAudBeep_t, *pDRXAudBeep_t;
+
+
+/**
+* \enum DRXAudBtscDetect_t
+* \brief BTSC detetcion mode
+*/
+typedef enum {
+ DRX_BTSC_STEREO,
+ DRX_BTSC_MONO_AND_SAP
+} DRXAudBtscDetect_t, *pDRXAudBtscDetect_t;
+
+/**
+* \struct DRXAudData_t
+* \brief Audio data structure
+*/
+typedef struct
+{
+ /* audio storage */
+ Bool_t audioIsActive;
+ DRXAudStandard_t audioStandard;
+ DRXCfgI2SOutput_t i2sdata;
+ DRXCfgAudVolume_t volume;
+ DRXCfgAudAutoSound_t autoSound;
+ DRXCfgAudASSThres_t assThresholds;
+ DRXCfgAudCarriers_t carriers;
+ DRXCfgAudMixer_t mixer;
+ DRXCfgAudDeviation_t deviation;
+ DRXCfgAudAVSync_t avSync;
+ DRXCfgAudPrescale_t prescale;
+ DRXAudFMDeemphasis_t deemph;
+ DRXAudBtscDetect_t btscDetect;
+ /* rds */
+ u16_t rdsDataCounter;
+ Bool_t rdsDataPresent;
+} DRXAudData_t, *pDRXAudData_t;
+
+
+/**
+* \enum DRXQamLockRange_t
+* \brief QAM lock range mode
+*/
+typedef enum
+{
+ DRX_QAM_LOCKRANGE_NORMAL,
+ DRX_QAM_LOCKRANGE_EXTENDED
+}DRXQamLockRange_t, *pDRXQamLockRange_t;
+
+/*============================================================================*/
+/*============================================================================*/
+/*== Data access structures ==================================================*/
+/*============================================================================*/
+/*============================================================================*/
+
+/* Address on device */
+typedef u32_t DRXaddr_t, *pDRXaddr_t;
+
+/* Protocol specific flags */
+typedef u32_t DRXflags_t, *pDRXflags_t;
+
+/* Write block of data to device */
+typedef DRXStatus_t (*DRXWriteBlockFunc_t) (
+ pI2CDeviceAddr_t devAddr, /* address of I2C device */
+ DRXaddr_t addr, /* address of register/memory */
+ u16_t datasize, /* size of data in bytes */
+ pu8_t data, /* data to send */
+ DRXflags_t flags);
+
+/* Read block of data from device */
+typedef DRXStatus_t (*DRXReadBlockFunc_t) (
+ pI2CDeviceAddr_t devAddr, /* address of I2C device */
+ DRXaddr_t addr, /* address of register/memory */
+ u16_t datasize, /* size of data in bytes */
+ pu8_t data, /* receive buffer */
+ DRXflags_t flags);
+
+/* Write 8-bits value to device */
+typedef DRXStatus_t (*DRXWriteReg8Func_t) (
+ pI2CDeviceAddr_t devAddr, /* address of I2C device */
+ DRXaddr_t addr, /* address of register/memory */
+ u8_t data, /* data to send */
+ DRXflags_t flags);
+
+/* Read 8-bits value to device */
+typedef DRXStatus_t (*DRXReadReg8Func_t) (
+ pI2CDeviceAddr_t devAddr, /* address of I2C device */
+ DRXaddr_t addr, /* address of register/memory */
+ pu8_t data, /* receive buffer */
+ DRXflags_t flags);
+
+/* Read modify write 8-bits value to device */
+typedef DRXStatus_t (*DRXReadModifyWriteReg8Func_t) (
+ pI2CDeviceAddr_t devAddr, /* address of I2C device */
+ DRXaddr_t waddr, /* write address of register */
+ DRXaddr_t raddr, /* read address of register */
+ u8_t wdata, /* data to write */
+ pu8_t rdata); /* data to read */
+
+/* Write 16-bits value to device */
+typedef DRXStatus_t (*DRXWriteReg16Func_t) (
+ pI2CDeviceAddr_t devAddr, /* address of I2C device */
+ DRXaddr_t addr, /* address of register/memory */
+ u16_t data, /* data to send */
+ DRXflags_t flags);
+
+/* Read 16-bits value to device */
+typedef DRXStatus_t (*DRXReadReg16Func_t) (
+ pI2CDeviceAddr_t devAddr, /* address of I2C device */
+ DRXaddr_t addr, /* address of register/memory */
+ pu16_t data, /* receive buffer */
+ DRXflags_t flags);
+
+/* Read modify write 16-bits value to device */
+typedef DRXStatus_t (*DRXReadModifyWriteReg16Func_t) (
+ pI2CDeviceAddr_t devAddr, /* address of I2C device */
+ DRXaddr_t waddr, /* write address of register */
+ DRXaddr_t raddr, /* read address of register */
+ u16_t wdata, /* data to write */
+ pu16_t rdata); /* data to read */
+
+/* Write 32-bits value to device */
+typedef DRXStatus_t (*DRXWriteReg32Func_t) (
+ pI2CDeviceAddr_t devAddr, /* address of I2C device */
+ DRXaddr_t addr, /* address of register/memory */
+ u32_t data, /* data to send */
+ DRXflags_t flags);
+
+/* Read 32-bits value to device */
+typedef DRXStatus_t (*DRXReadReg32Func_t) (
+ pI2CDeviceAddr_t devAddr, /* address of I2C device */
+ DRXaddr_t addr, /* address of register/memory */
+ pu32_t data, /* receive buffer */
+ DRXflags_t flags);
+
+/* Read modify write 32-bits value to device */
+typedef DRXStatus_t (*DRXReadModifyWriteReg32Func_t) (
+ pI2CDeviceAddr_t devAddr, /* address of I2C device */
+ DRXaddr_t waddr, /* write address of register */
+ DRXaddr_t raddr, /* read address of register */
+ u32_t wdata, /* data to write */
+ pu32_t rdata); /* data to read */
+
+/**
+* \struct DRXAccessFunc_t
+* \brief Interface to an access protocol.
+*/
+typedef struct {
+ pDRXVersion_t protocolVersion;
+ DRXWriteBlockFunc_t writeBlockFunc;
+ DRXReadBlockFunc_t readBlockFunc;
+ DRXWriteReg8Func_t writeReg8Func;
+ DRXReadReg8Func_t readReg8Func;
+ DRXReadModifyWriteReg8Func_t readModifyWriteReg8Func;
+ DRXWriteReg16Func_t writeReg16Func;
+ DRXReadReg16Func_t readReg16Func;
+ DRXReadModifyWriteReg16Func_t readModifyWriteReg16Func;
+ DRXWriteReg32Func_t writeReg32Func;
+ DRXReadReg32Func_t readReg32Func;
+ DRXReadModifyWriteReg32Func_t readModifyWriteReg32Func;
+} DRXAccessFunc_t, *pDRXAccessFunc_t;
+
+/* Register address and data for register dump function */
+typedef struct {
+
+ DRXaddr_t address;
+ u32_t data;
+
+} DRXRegDump_t, *pDRXRegDump_t ;
+
+/*============================================================================*/
+/*============================================================================*/
+/*== Demod instance data structures ==========================================*/
+/*============================================================================*/
+/*============================================================================*/
+
+/**
+* \struct DRXCommonAttr_t
+* \brief Set of common attributes, shared by all DRX devices.
+*/
+typedef struct {
+ /* Microcode (firmware) attributes */
+ pu8_t microcode; /**< Pointer to microcode image. */
+ u16_t microcodeSize; /**< Size of microcode image in bytes. */
+ Bool_t verifyMicrocode; /**< Use microcode verify or not. */
+ DRXMcVersionRec_t mcversion; /**< Version record of microcode from file */
+
+ /* Clocks and tuner attributes */
+ DRXFrequency_t intermediateFreq; /**< IF,if tuner instance not used. (kHz)*/
+ DRXFrequency_t sysClockFreq; /**< Systemclock frequency. (kHz) */
+ DRXFrequency_t oscClockFreq; /**< Oscillator clock frequency. (kHz) */
+ s16_t oscClockDeviation; /**< Oscillator clock deviation. (ppm) */
+ Bool_t mirrorFreqSpect; /**< Mirror IF frequency spectrum or not.*/
+
+ /* Initial MPEG output attributes */
+ DRXCfgMPEGOutput_t mpegCfg; /**< MPEG configuration */
+
+ Bool_t isOpened; /**< if TRUE instance is already opened. */
+
+ /* Channel scan */
+ pDRXScanParam_t scanParam; /**< scan parameters */
+ u16_t scanFreqPlanIndex; /**< next index in freq plan */
+ DRXFrequency_t scanNextFrequency; /**< next freq to scan */
+ Bool_t scanReady; /**< scan ready flag */
+ u32_t scanMaxChannels; /**< number of channels in freqplan */
+ u32_t scanChannelsScanned; /**< number of channels scanned */
+ /* Channel scan - inner loop: demod related */
+ DRXScanFunc_t scanFunction; /**< function to check channel */
+ /* Channel scan - inner loop: SYSObj related */
+ void* scanContext; /**< Context Pointer of SYSObj */
+ /* Channel scan - parameters for default DTV scan function in core driver */
+ u16_t scanDemodLockTimeout; /**< millisecs to wait for lock */
+ DRXLockStatus_t scanDesiredLock; /**< lock requirement for channel found */
+ /* scanActive can be used by SetChannel to decide how to program the tuner,
+ fast or slow (but stable). Usually fast during scan. */
+ Bool_t scanActive; /**< TRUE when scan routines are active */
+
+ /* Power management */
+ DRXPowerMode_t currentPowerMode; /**< current power management mode */
+
+ /* Tuner */
+ u8_t tunerPortNr; /**< nr of I2C port to wich tuner is */
+ DRXFrequency_t tunerMinFreqRF; /**< minimum RF input frequency, in kHz */
+ DRXFrequency_t tunerMaxFreqRF; /**< maximum RF input frequency, in kHz */
+ Bool_t tunerRfAgcPol; /**< if TRUE invert RF AGC polarity */
+ Bool_t tunerIfAgcPol; /**< if TRUE invert IF AGC polarity */
+ Bool_t tunerSlowMode; /**< if TRUE invert IF AGC polarity */
+
+ DRXChannel_t currentChannel; /**< current channel parameters */
+ DRXStandard_t currentStandard; /**< current standard selection */
+ DRXStandard_t prevStandard; /**< previous standard selection */
+ DRXStandard_t diCacheStandard; /**< standard in DI cache if available */
+ Bool_t useBootloader; /**< use bootloader in open */
+ u32_t capabilities; /**< capabilities flags */
+ u32_t productId; /**< product ID inc. metal fix number */
+
+} DRXCommonAttr_t, *pDRXCommonAttr_t;
+
+
+/*
+* Generic functions for DRX devices.
+*/
+typedef struct DRXDemodInstance_s *pDRXDemodInstance_t;
+
+typedef DRXStatus_t (*DRXOpenFunc_t) (pDRXDemodInstance_t demod);
+typedef DRXStatus_t (*DRXCloseFunc_t) (pDRXDemodInstance_t demod);
+typedef DRXStatus_t (*DRXCtrlFunc_t) (pDRXDemodInstance_t demod,
+ DRXCtrlIndex_t ctrl,
+ void *ctrlData);
+
+/**
+* \struct DRXDemodFunc_t
+* \brief A stucture containing all functions of a demodulator.
+*/
+typedef struct {
+ u32_t typeId; /**< Device type identifier. */
+ DRXOpenFunc_t openFunc; /**< Pointer to Open() function. */
+ DRXCloseFunc_t closeFunc; /**< Pointer to Close() function. */
+ DRXCtrlFunc_t ctrlFunc; /**< Pointer to Ctrl() function. */
+} DRXDemodFunc_t, *pDRXDemodFunc_t;
+
+/**
+* \struct DRXDemodInstance_t
+* \brief Top structure of demodulator instance.
+*/
+typedef struct DRXDemodInstance_s {
+ /* type specific demodulator data */
+ pDRXDemodFunc_t myDemodFunct; /**< demodulator functions */
+ pDRXAccessFunc_t myAccessFunct; /**< data access protocol functions */
+ pTUNERInstance_t myTuner; /**< tuner instance,if NULL then baseband */
+ pI2CDeviceAddr_t myI2CDevAddr; /**< i2c address and device identifier */
+ pDRXCommonAttr_t myCommonAttr; /**< common DRX attributes */
+ void* myExtAttr; /**< device specific attributes */
+ /* generic demodulator data */
+} DRXDemodInstance_t;
+
+
+
+/*-------------------------------------------------------------------------
+MACROS
+Conversion from enum values to human readable form.
+-------------------------------------------------------------------------*/
+
+/* standard */
+
+#define DRX_STR_STANDARD(x) ( \
+ ( x == DRX_STANDARD_DVBT ) ? "DVB-T" : \
+ ( x == DRX_STANDARD_8VSB ) ? "8VSB" : \
+ ( x == DRX_STANDARD_NTSC ) ? "NTSC" : \
+ ( x == DRX_STANDARD_PAL_SECAM_BG ) ? "PAL/SECAM B/G" : \
+ ( x == DRX_STANDARD_PAL_SECAM_DK ) ? "PAL/SECAM D/K" : \
+ ( x == DRX_STANDARD_PAL_SECAM_I ) ? "PAL/SECAM I" : \
+ ( x == DRX_STANDARD_PAL_SECAM_L ) ? "PAL/SECAM L" : \
+ ( x == DRX_STANDARD_PAL_SECAM_LP ) ? "PAL/SECAM LP" : \
+ ( x == DRX_STANDARD_ITU_A ) ? "ITU-A" : \
+ ( x == DRX_STANDARD_ITU_B ) ? "ITU-B" : \
+ ( x == DRX_STANDARD_ITU_C ) ? "ITU-C" : \
+ ( x == DRX_STANDARD_ITU_D ) ? "ITU-D" : \
+ ( x == DRX_STANDARD_FM ) ? "FM" : \
+ ( x == DRX_STANDARD_DTMB ) ? "DTMB" : \
+ ( x == DRX_STANDARD_AUTO ) ? "Auto" : \
+ ( x == DRX_STANDARD_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+
+/* channel */
+
+#define DRX_STR_BANDWIDTH(x) ( \
+ ( x == DRX_BANDWIDTH_8MHZ ) ? "8 MHz" : \
+ ( x == DRX_BANDWIDTH_7MHZ ) ? "7 MHz" : \
+ ( x == DRX_BANDWIDTH_6MHZ ) ? "6 MHz" : \
+ ( x == DRX_BANDWIDTH_AUTO ) ? "Auto" : \
+ ( x == DRX_BANDWIDTH_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+#define DRX_STR_FFTMODE(x) ( \
+ ( x == DRX_FFTMODE_2K ) ? "2k" : \
+ ( x == DRX_FFTMODE_4K ) ? "4k" : \
+ ( x == DRX_FFTMODE_8K ) ? "8k" : \
+ ( x == DRX_FFTMODE_AUTO ) ? "Auto" : \
+ ( x == DRX_FFTMODE_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+#define DRX_STR_GUARD(x) ( \
+ ( x == DRX_GUARD_1DIV32 ) ? "1/32nd" : \
+ ( x == DRX_GUARD_1DIV16 ) ? "1/16th" : \
+ ( x == DRX_GUARD_1DIV8 ) ? "1/8th" : \
+ ( x == DRX_GUARD_1DIV4 ) ? "1/4th" : \
+ ( x == DRX_GUARD_AUTO ) ? "Auto" : \
+ ( x == DRX_GUARD_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+#define DRX_STR_CONSTELLATION(x) ( \
+ ( x == DRX_CONSTELLATION_BPSK ) ? "BPSK" : \
+ ( x == DRX_CONSTELLATION_QPSK ) ? "QPSK" : \
+ ( x == DRX_CONSTELLATION_PSK8 ) ? "PSK8" : \
+ ( x == DRX_CONSTELLATION_QAM16 ) ? "QAM16" : \
+ ( x == DRX_CONSTELLATION_QAM32 ) ? "QAM32" : \
+ ( x == DRX_CONSTELLATION_QAM64 ) ? "QAM64" : \
+ ( x == DRX_CONSTELLATION_QAM128 ) ? "QAM128" : \
+ ( x == DRX_CONSTELLATION_QAM256 ) ? "QAM256" : \
+ ( x == DRX_CONSTELLATION_QAM512 ) ? "QAM512" : \
+ ( x == DRX_CONSTELLATION_QAM1024 ) ? "QAM1024" : \
+ ( x == DRX_CONSTELLATION_QPSK_NR ) ? "QPSK_NR" : \
+ ( x == DRX_CONSTELLATION_AUTO ) ? "Auto" : \
+ ( x == DRX_CONSTELLATION_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+#define DRX_STR_CODERATE(x) ( \
+ ( x == DRX_CODERATE_1DIV2 ) ? "1/2nd" : \
+ ( x == DRX_CODERATE_2DIV3 ) ? "2/3rd" : \
+ ( x == DRX_CODERATE_3DIV4 ) ? "3/4th" : \
+ ( x == DRX_CODERATE_5DIV6 ) ? "5/6th" : \
+ ( x == DRX_CODERATE_7DIV8 ) ? "7/8th" : \
+ ( x == DRX_CODERATE_AUTO ) ? "Auto" : \
+ ( x == DRX_CODERATE_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+#define DRX_STR_HIERARCHY(x) ( \
+ ( x == DRX_HIERARCHY_NONE ) ? "None" : \
+ ( x == DRX_HIERARCHY_ALPHA1 ) ? "Alpha=1" : \
+ ( x == DRX_HIERARCHY_ALPHA2 ) ? "Alpha=2" : \
+ ( x == DRX_HIERARCHY_ALPHA4 ) ? "Alpha=4" : \
+ ( x == DRX_HIERARCHY_AUTO ) ? "Auto" : \
+ ( x == DRX_HIERARCHY_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+#define DRX_STR_PRIORITY(x) ( \
+ ( x == DRX_PRIORITY_LOW ) ? "Low" : \
+ ( x == DRX_PRIORITY_HIGH ) ? "High" : \
+ ( x == DRX_PRIORITY_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+#define DRX_STR_MIRROR(x) ( \
+ ( x == DRX_MIRROR_NO ) ? "Normal" : \
+ ( x == DRX_MIRROR_YES ) ? "Mirrored" : \
+ ( x == DRX_MIRROR_AUTO ) ? "Auto" : \
+ ( x == DRX_MIRROR_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+#define DRX_STR_CLASSIFICATION(x) ( \
+ ( x == DRX_CLASSIFICATION_GAUSS ) ? "Gaussion" : \
+ ( x == DRX_CLASSIFICATION_HVY_GAUSS ) ? "Heavy Gaussion" : \
+ ( x == DRX_CLASSIFICATION_COCHANNEL ) ? "Co-channel" : \
+ ( x == DRX_CLASSIFICATION_STATIC ) ? "Static echo" : \
+ ( x == DRX_CLASSIFICATION_MOVING ) ? "Moving echo" : \
+ ( x == DRX_CLASSIFICATION_ZERODB ) ? "Zero dB echo" : \
+ ( x == DRX_CLASSIFICATION_UNKNOWN ) ? "Unknown" : \
+ ( x == DRX_CLASSIFICATION_AUTO ) ? "Auto" : \
+ "(Invalid)" )
+
+#define DRX_STR_INTERLEAVEMODE(x) ( \
+ ( x == DRX_INTERLEAVEMODE_I128_J1 ) ? "I128_J1" : \
+ ( x == DRX_INTERLEAVEMODE_I128_J1_V2 ) ? "I128_J1_V2" : \
+ ( x == DRX_INTERLEAVEMODE_I128_J2 ) ? "I128_J2" : \
+ ( x == DRX_INTERLEAVEMODE_I64_J2 ) ? "I64_J2" : \
+ ( x == DRX_INTERLEAVEMODE_I128_J3 ) ? "I128_J3" : \
+ ( x == DRX_INTERLEAVEMODE_I32_J4 ) ? "I32_J4" : \
+ ( x == DRX_INTERLEAVEMODE_I128_J4 ) ? "I128_J4" : \
+ ( x == DRX_INTERLEAVEMODE_I16_J8 ) ? "I16_J8" : \
+ ( x == DRX_INTERLEAVEMODE_I128_J5 ) ? "I128_J5" : \
+ ( x == DRX_INTERLEAVEMODE_I8_J16 ) ? "I8_J16" : \
+ ( x == DRX_INTERLEAVEMODE_I128_J6 ) ? "I128_J6" : \
+ ( x == DRX_INTERLEAVEMODE_RESERVED_11 ) ? "Reserved 11" : \
+ ( x == DRX_INTERLEAVEMODE_I128_J7 ) ? "I128_J7" : \
+ ( x == DRX_INTERLEAVEMODE_RESERVED_13 ) ? "Reserved 13" : \
+ ( x == DRX_INTERLEAVEMODE_I128_J8 ) ? "I128_J8" : \
+ ( x == DRX_INTERLEAVEMODE_RESERVED_15 ) ? "Reserved 15" : \
+ ( x == DRX_INTERLEAVEMODE_I12_J17 ) ? "I12_J17" : \
+ ( x == DRX_INTERLEAVEMODE_I5_J4 ) ? "I5_J4" : \
+ ( x == DRX_INTERLEAVEMODE_B52_M240 ) ? "B52_M240" : \
+ ( x == DRX_INTERLEAVEMODE_B52_M720 ) ? "B52_M720" : \
+ ( x == DRX_INTERLEAVEMODE_B52_M48 ) ? "B52_M48" : \
+ ( x == DRX_INTERLEAVEMODE_B52_M0 ) ? "B52_M0" : \
+ ( x == DRX_INTERLEAVEMODE_UNKNOWN ) ? "Unknown" : \
+ ( x == DRX_INTERLEAVEMODE_AUTO ) ? "Auto" : \
+ "(Invalid)" )
+
+#define DRX_STR_LDPC(x) ( \
+ ( x == DRX_LDPC_0_4 ) ? "0.4" : \
+ ( x == DRX_LDPC_0_6 ) ? "0.6" : \
+ ( x == DRX_LDPC_0_8 ) ? "0.8" : \
+ ( x == DRX_LDPC_AUTO ) ? "Auto" : \
+ ( x == DRX_LDPC_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+
+#define DRX_STR_CARRIER(x) ( \
+ ( x == DRX_CARRIER_MULTI ) ? "Multi" : \
+ ( x == DRX_CARRIER_SINGLE ) ? "Single" : \
+ ( x == DRX_CARRIER_AUTO ) ? "Auto" : \
+ ( x == DRX_CARRIER_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+
+#define DRX_STR_FRAMEMODE(x) ( \
+ ( x == DRX_FRAMEMODE_420 ) ? "420" : \
+ ( x == DRX_FRAMEMODE_595 ) ? "595" : \
+ ( x == DRX_FRAMEMODE_945 ) ? "945" : \
+ ( x == DRX_FRAMEMODE_420_FIXED_PN ) ? "420 with fixed PN" : \
+ ( x == DRX_FRAMEMODE_945_FIXED_PN ) ? "945 with fixed PN" : \
+ ( x == DRX_FRAMEMODE_AUTO ) ? "Auto" : \
+ ( x == DRX_FRAMEMODE_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+
+#define DRX_STR_PILOT(x) ( \
+ ( x == DRX_PILOT_ON ) ? "On" : \
+ ( x == DRX_PILOT_OFF ) ? "Off" : \
+ ( x == DRX_PILOT_AUTO ) ? "Auto" : \
+ ( x == DRX_PILOT_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+/* TPS */
+
+#define DRX_STR_TPS_FRAME(x) ( \
+ ( x == DRX_TPS_FRAME1 ) ? "Frame1" : \
+ ( x == DRX_TPS_FRAME2 ) ? "Frame2" : \
+ ( x == DRX_TPS_FRAME3 ) ? "Frame3" : \
+ ( x == DRX_TPS_FRAME4 ) ? "Frame4" : \
+ ( x == DRX_TPS_FRAME_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+
+/* lock status */
+
+#define DRX_STR_LOCKSTATUS(x) ( \
+ ( x == DRX_NEVER_LOCK ) ? "Never" : \
+ ( x == DRX_NOT_LOCKED ) ? "No" : \
+ ( x == DRX_LOCKED ) ? "Locked" : \
+ ( x == DRX_LOCK_STATE_1 ) ? "Lock state 1" : \
+ ( x == DRX_LOCK_STATE_2 ) ? "Lock state 2" : \
+ ( x == DRX_LOCK_STATE_3 ) ? "Lock state 3" : \
+ ( x == DRX_LOCK_STATE_4 ) ? "Lock state 4" : \
+ ( x == DRX_LOCK_STATE_5 ) ? "Lock state 5" : \
+ ( x == DRX_LOCK_STATE_6 ) ? "Lock state 6" : \
+ ( x == DRX_LOCK_STATE_7 ) ? "Lock state 7" : \
+ ( x == DRX_LOCK_STATE_8 ) ? "Lock state 8" : \
+ ( x == DRX_LOCK_STATE_9 ) ? "Lock state 9" : \
+ "(Invalid)" )
+
+/* version information , modules */
+#define DRX_STR_MODULE(x) ( \
+ ( x == DRX_MODULE_DEVICE ) ? "Device" : \
+ ( x == DRX_MODULE_MICROCODE ) ? "Microcode" : \
+ ( x == DRX_MODULE_DRIVERCORE ) ? "CoreDriver" : \
+ ( x == DRX_MODULE_DEVICEDRIVER ) ? "DeviceDriver" : \
+ ( x == DRX_MODULE_BSP_I2C ) ? "BSP I2C" : \
+ ( x == DRX_MODULE_BSP_TUNER ) ? "BSP Tuner" : \
+ ( x == DRX_MODULE_BSP_HOST ) ? "BSP Host" : \
+ ( x == DRX_MODULE_DAP ) ? "Data Access Protocol" : \
+ ( x == DRX_MODULE_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+
+#define DRX_STR_POWER_MODE(x) ( \
+ ( x == DRX_POWER_UP ) ? "DRX_POWER_UP " : \
+ ( x == DRX_POWER_MODE_1 ) ? "DRX_POWER_MODE_1" : \
+ ( x == DRX_POWER_MODE_2 ) ? "DRX_POWER_MODE_2" : \
+ ( x == DRX_POWER_MODE_3 ) ? "DRX_POWER_MODE_3" : \
+ ( x == DRX_POWER_MODE_4 ) ? "DRX_POWER_MODE_4" : \
+ ( x == DRX_POWER_MODE_5 ) ? "DRX_POWER_MODE_5" : \
+ ( x == DRX_POWER_MODE_6 ) ? "DRX_POWER_MODE_6" : \
+ ( x == DRX_POWER_MODE_7 ) ? "DRX_POWER_MODE_7" : \
+ ( x == DRX_POWER_MODE_8 ) ? "DRX_POWER_MODE_8" : \
+ ( x == DRX_POWER_MODE_9 ) ? "DRX_POWER_MODE_9" : \
+ ( x == DRX_POWER_MODE_10 ) ? "DRX_POWER_MODE_10" : \
+ ( x == DRX_POWER_MODE_11 ) ? "DRX_POWER_MODE_11" : \
+ ( x == DRX_POWER_MODE_12 ) ? "DRX_POWER_MODE_12" : \
+ ( x == DRX_POWER_MODE_13 ) ? "DRX_POWER_MODE_13" : \
+ ( x == DRX_POWER_MODE_14 ) ? "DRX_POWER_MODE_14" : \
+ ( x == DRX_POWER_MODE_15 ) ? "DRX_POWER_MODE_15" : \
+ ( x == DRX_POWER_MODE_16 ) ? "DRX_POWER_MODE_16" : \
+ ( x == DRX_POWER_DOWN ) ? "DRX_POWER_DOWN " : \
+ "(Invalid)" )
+
+#define DRX_STR_OOB_STANDARD(x) ( \
+ ( x == DRX_OOB_MODE_A ) ? "ANSI 55-1 " : \
+ ( x == DRX_OOB_MODE_B_GRADE_A ) ? "ANSI 55-2 A" : \
+ ( x == DRX_OOB_MODE_B_GRADE_B ) ? "ANSI 55-2 B" : \
+ "(Invalid)" )
+
+#define DRX_STR_AUD_STANDARD(x) ( \
+ ( x == DRX_AUD_STANDARD_BTSC ) ? "BTSC" : \
+ ( x == DRX_AUD_STANDARD_A2 ) ? "A2" : \
+ ( x == DRX_AUD_STANDARD_EIAJ ) ? "EIAJ" : \
+ ( x == DRX_AUD_STANDARD_FM_STEREO ) ? "FM Stereo" : \
+ ( x == DRX_AUD_STANDARD_AUTO ) ? "Auto" : \
+ ( x == DRX_AUD_STANDARD_M_MONO ) ? "M-Standard Mono" : \
+ ( x == DRX_AUD_STANDARD_D_K_MONO ) ? "D/K Mono FM" : \
+ ( x == DRX_AUD_STANDARD_BG_FM ) ? "B/G-Dual Carrier FM (A2)" : \
+ ( x == DRX_AUD_STANDARD_D_K1 ) ? "D/K1-Dual Carrier FM" : \
+ ( x == DRX_AUD_STANDARD_D_K2 ) ? "D/K2-Dual Carrier FM" : \
+ ( x == DRX_AUD_STANDARD_D_K3 ) ? "D/K3-Dual Carrier FM" : \
+ ( x == DRX_AUD_STANDARD_BG_NICAM_FM ) ? "B/G-NICAM-FM" : \
+ ( x == DRX_AUD_STANDARD_L_NICAM_AM ) ? "L-NICAM-AM" : \
+ ( x == DRX_AUD_STANDARD_I_NICAM_FM ) ? "I-NICAM-FM" : \
+ ( x == DRX_AUD_STANDARD_D_K_NICAM_FM ) ? "D/K-NICAM-FM" : \
+ ( x == DRX_AUD_STANDARD_UNKNOWN ) ? "Unknown" : \
+ "(Invalid)" )
+#define DRX_STR_AUD_STEREO(x) ( \
+ ( x == TRUE ) ? "Stereo" : \
+ ( x == FALSE ) ? "Mono" : \
+ "(Invalid)" )
+
+#define DRX_STR_AUD_SAP(x) ( \
+ ( x == TRUE ) ? "Present" : \
+ ( x == FALSE ) ? "Not present" : \
+ "(Invalid)" )
+
+#define DRX_STR_AUD_CARRIER(x) ( \
+ ( x == TRUE ) ? "Present" : \
+ ( x == FALSE ) ? "Not present" : \
+ "(Invalid)" )
+
+#define DRX_STR_AUD_RDS(x) ( \
+ ( x == TRUE ) ? "Available" : \
+ ( x == FALSE ) ? "Not Available" : \
+ "(Invalid)" )
+
+#define DRX_STR_AUD_NICAM_STATUS(x) ( \
+ ( x == DRX_AUD_NICAM_DETECTED ) ? "Detected" : \
+ ( x == DRX_AUD_NICAM_NOT_DETECTED ) ? "Not detected" : \
+ ( x == DRX_AUD_NICAM_BAD ) ? "Bad" : \
+ "(Invalid)" )
+
+#define DRX_STR_RDS_VALID(x) ( \
+ ( x == TRUE ) ? "Valid" : \
+ ( x == FALSE ) ? "Not Valid" : \
+ "(Invalid)" )
+
+/*-------------------------------------------------------------------------
+Access macros
+-------------------------------------------------------------------------*/
+
+
+/**
+* \brief Create a compilable reference to the microcode attribute
+* \param d pointer to demod instance
+*
+* Used as main reference to an attribute field.
+* Used by both macro implementation and function implementation.
+* These macros are defined to avoid duplication of code in macro and function
+* definitions that handle access of demod common or extended attributes.
+*
+*/
+
+#define DRX_ATTR_MCRECORD( d ) ((d)->myCommonAttr->mcversion)
+#define DRX_ATTR_MIRRORFREQSPECT( d ) ((d)->myCommonAttr->mirrorFreqSpect)
+#define DRX_ATTR_CURRENTPOWERMODE( d )((d)->myCommonAttr->currentPowerMode)
+#define DRX_ATTR_ISOPENED( d ) ((d)->myCommonAttr->isOpened)
+#define DRX_ATTR_USEBOOTLOADER( d ) ((d)->myCommonAttr->useBootloader)
+#define DRX_ATTR_CURRENTSTANDARD( d ) ((d)->myCommonAttr->currentStandard)
+#define DRX_ATTR_PREVSTANDARD( d ) ((d)->myCommonAttr->prevStandard)
+#define DRX_ATTR_CACHESTANDARD( d ) ((d)->myCommonAttr->diCacheStandard)
+#define DRX_ATTR_CURRENTCHANNEL( d ) ((d)->myCommonAttr->currentChannel)
+#define DRX_ATTR_MICROCODE( d ) ((d)->myCommonAttr->microcode)
+#define DRX_ATTR_MICROCODESIZE( d ) ((d)->myCommonAttr->microcodeSize)
+#define DRX_ATTR_VERIFYMICROCODE( d ) ((d)->myCommonAttr->verifyMicrocode)
+#define DRX_ATTR_CAPABILITIES( d ) ((d)->myCommonAttr->capabilities)
+#define DRX_ATTR_PRODUCTID( d ) ((d)->myCommonAttr->productId)
+#define DRX_ATTR_INTERMEDIATEFREQ( d) ((d)->myCommonAttr->intermediateFreq)
+#define DRX_ATTR_SYSCLOCKFREQ( d) ((d)->myCommonAttr->sysClockFreq)
+#define DRX_ATTR_TUNERRFAGCPOL( d ) ((d)->myCommonAttr->tunerRfAgcPol)
+#define DRX_ATTR_TUNERIFAGCPOL( d) ((d)->myCommonAttr->tunerIfAgcPol)
+#define DRX_ATTR_TUNERSLOWMODE( d) ((d)->myCommonAttr->tunerSlowMode)
+#define DRX_ATTR_TUNERSPORTNR( d) ((d)->myCommonAttr->tunerPortNr)
+#define DRX_ATTR_TUNER( d ) ((d)->myTuner)
+#define DRX_ATTR_I2CADDR( d ) ((d)->myI2CDevAddr->i2cAddr)
+#define DRX_ATTR_I2CDEVID( d ) ((d)->myI2CDevAddr->i2cDevId)
+
+/**
+* \brief Actual access macro's
+* \param d pointer to demod instance
+* \param x value to set ar to get
+*
+* SET macro's must be used to set the value of an attribute.
+* GET macro's must be used to retrieve the value of an attribute.
+*
+*/
+
+/**************************/
+
+#define DRX_SET_MIRRORFREQSPECT( d, x ) \
+ do { \
+ DRX_ATTR_MIRRORFREQSPECT( d ) = (x); \
+ } while(0)
+
+#define DRX_GET_MIRRORFREQSPECT( d, x ) \
+ do { \
+ (x)=DRX_ATTR_MIRRORFREQSPECT( d ); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_CURRENTPOWERMODE( d, x ) \
+ do { \
+ DRX_ATTR_CURRENTPOWERMODE( d ) = (x); \
+ } while(0)
+
+#define DRX_GET_CURRENTPOWERMODE( d, x ) \
+ do { \
+ (x)=DRX_ATTR_CURRENTPOWERMODE( d ); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_MICROCODE( d, x ) \
+ do { \
+ DRX_ATTR_MICROCODE( d ) = (x); \
+ } while(0)
+
+#define DRX_GET_MICROCODE( d, x ) \
+ do { \
+ (x)=DRX_ATTR_MICROCODE( d ); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_MICROCODESIZE( d, x ) \
+ do { \
+ DRX_ATTR_MICROCODESIZE(d) = (x); \
+ } while(0)
+
+#define DRX_GET_MICROCODESIZE( d, x ) \
+ do { \
+ (x)=DRX_ATTR_MICROCODESIZE(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_VERIFYMICROCODE( d, x ) \
+ do { \
+ DRX_ATTR_VERIFYMICROCODE(d) = (x); \
+ } while(0)
+
+#define DRX_GET_VERIFYMICROCODE( d, x ) \
+ do { \
+ (x)=DRX_ATTR_VERIFYMICROCODE(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_MCVERTYPE( d, x ) \
+ do { \
+ DRX_ATTR_MCRECORD(d).auxType = (x); \
+ } while (0)
+
+#define DRX_GET_MCVERTYPE( d, x ) \
+ do { \
+ (x) = DRX_ATTR_MCRECORD(d).auxType; \
+ } while (0)
+
+/**************************/
+
+#define DRX_ISMCVERTYPE(x) ((x) == AUX_VER_RECORD)
+
+/**************************/
+
+#define DRX_SET_MCDEV( d, x ) \
+ do { \
+ DRX_ATTR_MCRECORD(d).mcDevType = (x); \
+ } while (0)
+
+#define DRX_GET_MCDEV( d, x ) \
+ do { \
+ (x) = DRX_ATTR_MCRECORD(d).mcDevType; \
+ } while (0)
+
+/**************************/
+
+#define DRX_SET_MCVERSION( d, x ) \
+ do { \
+ DRX_ATTR_MCRECORD(d).mcVersion = (x); \
+ } while (0)
+
+#define DRX_GET_MCVERSION( d, x ) \
+ do { \
+ (x) = DRX_ATTR_MCRECORD(d).mcVersion; \
+ } while (0)
+
+/**************************/
+#define DRX_SET_MCPATCH( d, x ) \
+ do { \
+ DRX_ATTR_MCRECORD(d).mcBaseVersion = (x); \
+ } while (0)
+
+#define DRX_GET_MCPATCH( d, x ) \
+ do { \
+ (x) = DRX_ATTR_MCRECORD(d).mcBaseVersion; \
+ } while (0)
+
+/**************************/
+
+#define DRX_SET_I2CADDR( d, x ) \
+ do { \
+ DRX_ATTR_I2CADDR(d) = (x); \
+ } while(0)
+
+#define DRX_GET_I2CADDR( d, x ) \
+ do { \
+ (x)=DRX_ATTR_I2CADDR(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_I2CDEVID( d, x ) \
+ do { \
+ DRX_ATTR_I2CDEVID(d) = (x); \
+ } while(0)
+
+#define DRX_GET_I2CDEVID( d, x ) \
+ do { \
+ (x)=DRX_ATTR_I2CDEVID(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_USEBOOTLOADER( d, x ) \
+ do { \
+ DRX_ATTR_USEBOOTLOADER(d) = (x); \
+ } while(0)
+
+#define DRX_GET_USEBOOTLOADER( d, x) \
+ do { \
+ (x)=DRX_ATTR_USEBOOTLOADER(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_CURRENTSTANDARD( d, x ) \
+ do { \
+ DRX_ATTR_CURRENTSTANDARD(d) = (x); \
+ } while(0)
+
+#define DRX_GET_CURRENTSTANDARD( d, x) \
+ do { \
+ (x)=DRX_ATTR_CURRENTSTANDARD(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_PREVSTANDARD( d, x ) \
+ do { \
+ DRX_ATTR_PREVSTANDARD(d) = (x); \
+ } while(0)
+
+#define DRX_GET_PREVSTANDARD( d, x) \
+ do { \
+ (x)=DRX_ATTR_PREVSTANDARD(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_CACHESTANDARD( d, x ) \
+ do { \
+ DRX_ATTR_CACHESTANDARD(d) = (x); \
+ } while(0)
+
+#define DRX_GET_CACHESTANDARD( d, x) \
+ do { \
+ (x)=DRX_ATTR_CACHESTANDARD(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_CURRENTCHANNEL( d, x ) \
+ do { \
+ DRX_ATTR_CURRENTCHANNEL(d) = (x); \
+ } while(0)
+
+#define DRX_GET_CURRENTCHANNEL( d, x) \
+ do { \
+ (x)=DRX_ATTR_CURRENTCHANNEL(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_ISOPENED( d, x ) \
+ do { \
+ DRX_ATTR_ISOPENED(d) = (x); \
+ } while(0)
+
+#define DRX_GET_ISOPENED( d, x) \
+ do { \
+ (x) = DRX_ATTR_ISOPENED(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_TUNER( d, x ) \
+ do { \
+ DRX_ATTR_TUNER(d) = (x); \
+ } while(0)
+
+#define DRX_GET_TUNER( d, x) \
+ do { \
+ (x) = DRX_ATTR_TUNER(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_CAPABILITIES( d, x ) \
+ do { \
+ DRX_ATTR_CAPABILITIES(d) = (x); \
+ } while(0)
+
+#define DRX_GET_CAPABILITIES( d, x) \
+ do { \
+ (x) = DRX_ATTR_CAPABILITIES(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_PRODUCTID( d, x ) \
+ do { \
+ DRX_ATTR_PRODUCTID(d) |= (x << 4); \
+ } while(0)
+
+#define DRX_GET_PRODUCTID( d, x) \
+ do { \
+ (x) = (DRX_ATTR_PRODUCTID(d) >> 4); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_MFX( d, x ) \
+ do { \
+ DRX_ATTR_PRODUCTID(d) |= (x); \
+ } while(0)
+
+#define DRX_GET_MFX( d, x) \
+ do { \
+ (x) = (DRX_ATTR_PRODUCTID(d) & 0xF); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_INTERMEDIATEFREQ( d, x ) \
+ do { \
+ DRX_ATTR_INTERMEDIATEFREQ(d) = (x); \
+ } while(0)
+
+#define DRX_GET_INTERMEDIATEFREQ( d, x) \
+ do { \
+ (x) = DRX_ATTR_INTERMEDIATEFREQ(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_SYSCLOCKFREQ( d, x ) \
+ do { \
+ DRX_ATTR_SYSCLOCKFREQ(d) = (x); \
+ } while(0)
+
+#define DRX_GET_SYSCLOCKFREQ( d, x) \
+ do { \
+ (x) = DRX_ATTR_SYSCLOCKFREQ(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_TUNERRFAGCPOL( d, x ) \
+ do { \
+ DRX_ATTR_TUNERRFAGCPOL(d) = (x); \
+ } while(0)
+
+#define DRX_GET_TUNERRFAGCPOL( d, x) \
+ do { \
+ (x) = DRX_ATTR_TUNERRFAGCPOL(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_TUNERIFAGCPOL( d, x ) \
+ do { \
+ DRX_ATTR_TUNERIFAGCPOL(d) = (x); \
+ } while(0)
+
+#define DRX_GET_TUNERIFAGCPOL( d, x) \
+ do { \
+ (x) = DRX_ATTR_TUNERIFAGCPOL(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_TUNERSLOWMODE( d, x ) \
+ do { \
+ DRX_ATTR_TUNERSLOWMODE(d) = (x); \
+ } while(0)
+
+#define DRX_GET_TUNERSLOWMODE( d, x) \
+ do { \
+ (x) = DRX_ATTR_TUNERSLOWMODE(d); \
+ } while(0)
+
+/**************************/
+
+#define DRX_SET_TUNERPORTNR( d, x ) \
+ do { \
+ DRX_ATTR_TUNERSPORTNR(d) = (x); \
+ } while(0)
+
+/**************************/
+
+/* Macros with device-specific handling are converted to CFG functions */
+
+#define DRX_ACCESSMACRO_SET( demod, value, cfgName, dataType ) \
+ do { \
+ DRXCfg_t config; \
+ dataType cfgData; \
+ config.cfgType = cfgName; \
+ config.cfgData = &cfgData; \
+ cfgData = value; \
+ DRX_Ctrl( demod, DRX_CTRL_SET_CFG, &config ); \
+ } while ( 0 )
+
+#define DRX_ACCESSMACRO_GET( demod, value, cfgName, dataType, errorValue ) \
+ do { \
+ DRXStatus_t cfgStatus; \
+ DRXCfg_t config; \
+ dataType cfgData; \
+ config.cfgType = cfgName; \
+ config.cfgData = &cfgData; \
+ cfgStatus = DRX_Ctrl( demod, DRX_CTRL_GET_CFG, &config ); \
+ if ( cfgStatus == DRX_STS_OK ) { \
+ value = cfgData; \
+ } else { \
+ value = (dataType)errorValue; \
+ } \
+ } while ( 0 )
+
+
+/* Configuration functions for usage by Access (XS) Macros */
+
+#ifndef DRX_XS_CFG_BASE
+#define DRX_XS_CFG_BASE (500)
+#endif
+
+#define DRX_XS_CFG_PRESET ( DRX_XS_CFG_BASE + 0 )
+#define DRX_XS_CFG_AUD_BTSC_DETECT ( DRX_XS_CFG_BASE + 1 )
+#define DRX_XS_CFG_QAM_LOCKRANGE ( DRX_XS_CFG_BASE + 2 )
+
+/* Access Macros with device-specific handling */
+
+#define DRX_SET_PRESET( d, x ) \
+ DRX_ACCESSMACRO_SET( (d), (x), DRX_XS_CFG_PRESET, char* )
+#define DRX_GET_PRESET( d, x ) \
+ DRX_ACCESSMACRO_GET( (d), (x), DRX_XS_CFG_PRESET, char*, "ERROR" )
+
+#define DRX_SET_AUD_BTSC_DETECT( d, x ) DRX_ACCESSMACRO_SET( (d), (x), \
+ DRX_XS_CFG_AUD_BTSC_DETECT, DRXAudBtscDetect_t )
+#define DRX_GET_AUD_BTSC_DETECT( d, x ) DRX_ACCESSMACRO_GET( (d), (x), \
+ DRX_XS_CFG_AUD_BTSC_DETECT, DRXAudBtscDetect_t, DRX_UNKNOWN )
+
+#define DRX_SET_QAM_LOCKRANGE( d, x ) DRX_ACCESSMACRO_SET( (d), (x), \
+ DRX_XS_CFG_QAM_LOCKRANGE, DRXQamLockRange_t )
+#define DRX_GET_QAM_LOCKRANGE( d, x ) DRX_ACCESSMACRO_GET( (d), (x), \
+ DRX_XS_CFG_QAM_LOCKRANGE, DRXQamLockRange_t, DRX_UNKNOWN )
+
+
+/**
+* \brief Macro to check if std is an ATV standard
+* \retval TRUE std is an ATV standard
+* \retval FALSE std is an ATV standard
+*/
+#define DRX_ISATVSTD( std ) ( ( (std) == DRX_STANDARD_PAL_SECAM_BG ) || \
+ ( (std) == DRX_STANDARD_PAL_SECAM_DK ) || \
+ ( (std) == DRX_STANDARD_PAL_SECAM_I ) || \
+ ( (std) == DRX_STANDARD_PAL_SECAM_L ) || \
+ ( (std) == DRX_STANDARD_PAL_SECAM_LP ) || \
+ ( (std) == DRX_STANDARD_NTSC ) || \
+ ( (std) == DRX_STANDARD_FM ) )
+
+/**
+* \brief Macro to check if std is an QAM standard
+* \retval TRUE std is an QAM standards
+* \retval FALSE std is an QAM standards
+*/
+#define DRX_ISQAMSTD( std ) ( ( (std) == DRX_STANDARD_ITU_A ) || \
+ ( (std) == DRX_STANDARD_ITU_B ) || \
+ ( (std) == DRX_STANDARD_ITU_C ) || \
+ ( (std) == DRX_STANDARD_ITU_D ))
+
+/**
+* \brief Macro to check if std is VSB standard
+* \retval TRUE std is VSB standard
+* \retval FALSE std is not VSB standard
+*/
+#define DRX_ISVSBSTD( std ) ( (std) == DRX_STANDARD_8VSB )
+
+/**
+* \brief Macro to check if std is DVBT standard
+* \retval TRUE std is DVBT standard
+* \retval FALSE std is not DVBT standard
+*/
+#define DRX_ISDVBTSTD( std ) ( (std) == DRX_STANDARD_DVBT )
+
+
+
+
+/*-------------------------------------------------------------------------
+Exported FUNCTIONS
+-------------------------------------------------------------------------*/
+
+DRXStatus_t DRX_Init( pDRXDemodInstance_t demods[] );
+
+DRXStatus_t DRX_Term( void );
+
+DRXStatus_t DRX_Open(pDRXDemodInstance_t demod);
+
+DRXStatus_t DRX_Close(pDRXDemodInstance_t demod);
+
+DRXStatus_t DRX_Ctrl(pDRXDemodInstance_t demod,
+ DRXCtrlIndex_t ctrl,
+ void *ctrlData);
+
+/*-------------------------------------------------------------------------
+THE END
+-------------------------------------------------------------------------*/
+#ifdef __cplusplus
+}
+#endif
+#endif /* __DRXDRIVER_H__ */