📄 drx_driver.h
字号:
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 + -