⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 drx_driver.h

📁 用于DRX3973或DRX39系列的芯片的控制
💻 H
📖 第 1 页 / 共 3 页
字号:
         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;


/*============================================================================*/
/*============================================================================*/
/*== Demod instance data structures ==========================================*/
/*============================================================================*/
/*============================================================================*/

typedef struct DRXDemodInstance_s *pDRXDemodInstance_t;

/**
* \struct DRXCommonAttr_t
* \brief Set of common attributes, shared by all DRX devices.
*/
typedef struct {
   /* Microcode (firmware) attributes */
   pu8_t          microcode;             /**< Pointer to array containing microcode. */
   u16_t          microcodeSize;         /**< Size of the microcode array in bytes. */
   Bool_t         verifyMicrocode;       /**< Use microcode verify or not.*/

   /* Clocks and tuner attributes */
   DRXFrequency_t intermediateFreq;      /**< IF, in case no tuner instance is 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 the IF frequency spectrum or not. */

   /* Initial MPEG output attributes */
   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      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 */
   u16_t           scanDemodLockTimeout; /**< millisecs to wait for demod 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 */

} DRXCommonAttr_t, *pDRXCommonAttr_t;


/*
* Generic functions for DRX devices.
*/
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_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_UNKNOWN        )  ? "Unknown"          : \
                                            "(Invalid)"  )
#define DRX_STR_FFTMODE(x) ( \
   ( x == DRX_FFTMODE_2K               )  ? "2k"               : \
   ( 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_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)" )
/* 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        )  ?  "Drivercore"            : \
   ( 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_DOWN               )  ?  "DRX_POWER_DOWN  " : \
                                             "(Invalid)" )

#define DRX_STR_OOB_DIRECTION(x) ( \
   ( x == DRX_OOB_DOWNSTREAM           )  ?  "Downstream" : \
   ( x == DRX_OOB_UPSTREAM             )  ?  "Upstream  " : \
                                             "(Invalid)" )

#define DRX_STR_OOB_STANDARD(x) ( \
   ( x == DRX_STANDARD_OOB_A           )  ?  "ANSI 55-2 A  " : \
   ( x == DRX_STANDARD_OOB_B           )  ?  "ANSI 55-2 B  " : \
   ( x == DRX_STANDARD_OOB_C           )  ?  "ANSI 55-2 C  " : \
   ( x == DRX_STANDARD_OOB_STD         )  ?  "ANSI 55-1 std" : \
   ( x == DRX_STANDARD_OOB_EXT         )  ?  "ANSI 55-2 ext" : \
                                             "(Invalid)" )

#define DRX_STR_OOB_BITRATE(x) ( \
   ( x == DRX_BITRATE_256KBS           )  ?  "256  Kbs" : \
   ( x == DRX_BITRATE_1544KBS          )  ?  "1544 Kbs" : \
   ( x == DRX_BITRATE_2048KBS          )  ?  "2048 Kbs" : \
   ( x == DRX_BITRATE_3088KBS          )  ?  "3088 Kbs" : \
                                             "(Invalid)" )

/*-------------------------------------------------------------------------
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__ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -