You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
288 lines
12 KiB
288 lines
12 KiB
/*****************************************************************************
|
|
Copyright 2012-2020, AltoBeam all rights reserved.
|
|
|
|
File Name: atbm888x.h
|
|
******************************************************************************/
|
|
#ifndef ATBM888X_H
|
|
#define ATBM888X_H
|
|
|
|
#include "drv_frontend.h"
|
|
|
|
/* Common data type redefine for atbm888x.h/c */
|
|
typedef unsigned char uint8;
|
|
typedef unsigned short uint16;
|
|
typedef unsigned int uint32;
|
|
|
|
|
|
#define ATMB_DBG_OUTPUT 1
|
|
typedef struct st64_data {
|
|
uint32 ui32_low, ui32_high;
|
|
} ATBM64Data;
|
|
|
|
|
|
/**********************************************************************************************************************************
|
|
* struct mpeg_ts_mode_t
|
|
* @ui8TSTransferType: TS stream transfer type, can be set to parallel(8 bit data bus) or serial(1 bit data bus) mode
|
|
* @ui8OutputEdge: demod will output TS data on this edge of TS stream clock
|
|
* @ui8TSSPIMSBSelection: demod will output TS data MSB on Pin0 or Pin7
|
|
* @ui8TSSSIOutputSelection: demod will output TS data on Pin0 or Pin7
|
|
* @ui8SPIClockConstantOutput: TS stream clock can be set outputting all the time or only during TS data valid (188
|
|
* bytes)
|
|
* *********************************************************************************************************************************/
|
|
/*****************ui8TSTransferType Option Value***************************/
|
|
#define TS_PARALLEL_MODE 1
|
|
#define TS_SERIAL_MODE 0
|
|
/**********************ui8OutputEdge Option Value***************************/
|
|
#define TS_OUTPUT_FALLING_EDGE 1
|
|
#define TS_OUTPUT_RISING_EDGE 0
|
|
/**********************ui8TSSPIMSBSelection Option Value******************/
|
|
#define TS_SPI_MSB_ON_DATA_BIT7 1
|
|
#define TS_SPI_MSB_ON_DATA_BIT0 0
|
|
/**********************ui8TSSSIOutputSelection Option Value***************/
|
|
#define TS_SSI_OUTPUT_ON_DATA_BIT7 1
|
|
#define TS_SSI_OUTPUT_ON_DATA_BIT0 0
|
|
/**********************ui8SPIClockConstantOutput Option Value*************/
|
|
#define TS_CLOCK_CONST_OUTPUT 1
|
|
#define TS_CLOCK_VALID_OUTPUT 0
|
|
typedef struct mpeg_ts_mode_t {
|
|
uint8 ui8TSTransferType;
|
|
uint8 ui8OutputEdge;
|
|
uint8 ui8TSSPIMSBSelection;
|
|
uint8 ui8TSSSIOutputSelection;
|
|
uint8 ui8SPIClockConstantOutput;
|
|
} MPEG_TS_mode_t;
|
|
|
|
/**********************************************************************************************************************************
|
|
* struct dvbc_params_t
|
|
* i32SymbolRate: typically use 6875K
|
|
* ui8_input_mode : for DVBC parameter config,fixed DVBC_IF_INPUT.
|
|
* *********************************************************************************************************************************/
|
|
/**********************ui8_input_mode Option Value****************************/
|
|
#define DVBC_IF_INPUT 0
|
|
#define DVBC_IQ_INPUT 1
|
|
typedef struct dvbc_params_t {
|
|
uint8 ui8_input_mode;
|
|
int i32SymbolRate;
|
|
} DVBC_Params_t;
|
|
|
|
/**********************************************************************************************************************************
|
|
* struct tuner_config_t
|
|
* @ui8IQmode: demod needs to know if IQ is swapped or not on hardware board
|
|
* @ui8_dtmb_bandwith_mhz:Typically 8MHz
|
|
* @ui32_if_frequency: tuner IF frequency output in KHz. Most Tuners' 5000KHz(5MHz)
|
|
* *********************************************************************************************************************************/
|
|
/**********************ui8IQmode Option Value*******************************/
|
|
#define SWAP_IQ 0
|
|
#define NO_SWAP_IQ 1
|
|
typedef struct tuner_config_t {
|
|
uint8 ui8IQmode;
|
|
uint8 ui8_dtmb_bandwith_mhz;
|
|
uint32 ui32_if_frequency;
|
|
} tuner_config_t;
|
|
|
|
/**********************************************************************************************************************************
|
|
* struct custom_config_t
|
|
* @ui8_crystal_or_oscillator: demod can use crystal or oscillator
|
|
* @ui8_dtmb_dvbc_mode:select receiving mode DTMB or DVB-C for ATBM888X
|
|
* @stTunerConfig: struct of tuner configuration
|
|
* @st_ts_mode: struct of TS mode
|
|
* @ui_32_sample_clk_frequency: crystal or oscillator frequency on hardware board for demod
|
|
* @st_dvbc_params: DVB-C parameters
|
|
* *********************************************************************************************************************************/
|
|
/**********************ui8_crystal_or_oscillator Option Value*****************/
|
|
#define CRYSTAL 0
|
|
#define OSCILLATOR 1
|
|
/**********************ui8_dtmb_dvbc_mode Option Value************************/
|
|
#define ATBM_DTMB_MODE 1
|
|
#define ATBM_DVBC_MODE 0
|
|
typedef struct custom_config_t {
|
|
uint8 ui8_crystal_or_oscillator;
|
|
uint8 ui8_dtmb_dvbc_mode;
|
|
tuner_config_t stTunerConfig;
|
|
MPEG_TS_mode_t st_ts_mode;
|
|
uint32 ui_32_sample_clk_frequency;
|
|
DVBC_Params_t st_dvbc_params;
|
|
} custom_config_t;
|
|
|
|
typedef enum _ATBM_I2CREADWRITE_STATUS {
|
|
ATBM_I2CREADWRITE_OK = 0,
|
|
ATBM_I2CREADWRITE_ERROR
|
|
} ATBM_I2CREADWRITE_STATUS;
|
|
|
|
|
|
typedef enum _DTMB_QAM_INDEX {
|
|
DTMB_QAM_UNKNOWN = 0,
|
|
DTMB_QAM_4QAM_NR,
|
|
DTMB_QAM_4QAM,
|
|
DTMB_QAM_16QAM,
|
|
DTMB_QAM_32QAM,
|
|
DTMB_QAM_64QAM
|
|
} DTMB_QAM_INDEX;
|
|
|
|
// Code rate
|
|
typedef enum _DTMB_CODE_RATE {
|
|
DTMB_CODE_RATE_UNKNOWN = 0,
|
|
DTMB_CODE_RATE_0_DOT_4,
|
|
DTMB_CODE_RATE_0_DOT_6,
|
|
DTMB_CODE_RATE_0_DOT_8
|
|
} DTMB_CODE_RATE;
|
|
|
|
// Time interleaving
|
|
typedef enum _DTMB_TIME_INTERLEAVE {
|
|
DTMB_TIME_INTERLEAVER_UNKNOWN = 0,
|
|
DTMB_TIME_INTERLEAVER_240,
|
|
DTMB_TIME_INTERLEAVER_720
|
|
} DTMB_TIME_INTERLEAVE;
|
|
|
|
// Single carrier or Multi-Carrier
|
|
typedef enum _DTMB_CARRIER_MODE {
|
|
DTMB_CARRIER_UNKNOWN = 0,
|
|
DTMB_SINGLE_CARRIER,
|
|
DTMB_MULTI_CARRIER
|
|
} DTMB_CARRIER_MODE;
|
|
|
|
typedef enum _DTMB_GUARD_INTERVAL {
|
|
GI_UNKNOWN = 0,
|
|
GI_420,
|
|
GI_595,
|
|
GI_945
|
|
} DTMB_GUARD_INTERVAL;
|
|
|
|
typedef enum _DTMB_GUARD_INTERVAL_PN {
|
|
GI_PN_UNKNOWN = 0,
|
|
GI_PN_CONSTANT,
|
|
GI_PN_VARIABLE
|
|
} DTMB_GUARD_INTERVAL_PN;
|
|
|
|
typedef struct stru_dtmb_signal_params {
|
|
DTMB_CARRIER_MODE dtmb_carrier_mode;
|
|
DTMB_QAM_INDEX dtmb_qam_index;
|
|
DTMB_CODE_RATE dtmb_code_rate;
|
|
DTMB_TIME_INTERLEAVE dtmb_time_interleave;
|
|
DTMB_GUARD_INTERVAL dtmb_guard_interval;
|
|
DTMB_GUARD_INTERVAL_PN dtmb_guard_interval_pn;
|
|
} DTMB_SIGNAL_PARAMS;
|
|
|
|
|
|
/********DTMB and DVB-C common API functions******************************/
|
|
int ATBMPowerOnInit(void);
|
|
uint8 ATBMChipID(void);
|
|
void ATBMI2CByPassOn(void);
|
|
void ATBMI2CByPassOff(void);
|
|
int ATBMLockedFlag(void);
|
|
int ATBMChannelLockCheck(void);
|
|
int ATBMChannelLockCheckForManual(void);
|
|
void ATBMHoldDSP(void);
|
|
void ATBMStartDSP(void);
|
|
void ATBMStandby(void);
|
|
void ATBMStandbyWakeUp(void);
|
|
void ATBMSuspend(void);
|
|
|
|
/****DTMB API Functions***************************************************/
|
|
void ATBMSetDTMBMode(void);
|
|
int ATBMSignalStrength(void);
|
|
int ATBMSignalNoiseRatio(void);
|
|
int ATBMSignalQuality(void);
|
|
uint32 ATBMFrameErrorRatio(void);
|
|
uint32 ATBMPreBCHBlockErrorRatio(void);
|
|
uint32 ATBMBER_Calc(uint32 *i32pBerExponent);
|
|
int ATBM_PPM_Test(void);
|
|
int ATBMCarrierOffset(void);
|
|
int ATBMGetDTMBBitRate(void);
|
|
void ATBMSetDTMBIQ(unsigned char u8IQState); /* Set IQ state */
|
|
void ATBM888xAutoSwapDTMBIQOn(void);
|
|
void ATBM888xAutoSwapDTMBIQOff(void);
|
|
|
|
/****DVBC API Macro define************************************************/
|
|
#define ATBM_DEBUG_DVBC 0 /* default no debug output */
|
|
#define DVBC_SAMPLE_RATE_ADDR 0x210
|
|
#define DVBC_SAMPLE_RATE_RECIP_ADDR 0x214
|
|
#define DVBC_OUTPUT_SHIFT_ADDR 0x128
|
|
#define DVBC_DECIMATION_FACTOR_ADDR 0x124
|
|
#define DVBC_SLOW_CONTROL_TC_ADDR 0x3BC
|
|
#define DVBC_CARRIER_LOCK_ACQUIRE_TIMEOUT_ADDR 0x348
|
|
#define DVBC_PL_CARRIER_FREQUENCY_RANGE_ADDR 0x38C
|
|
#define DVBC_PL_CARRIER_STEP_FREQUENCY_ADDR 0x388
|
|
#define DVBC_COARSE_FREQUENCY_OFFSET_ADDR 0x118
|
|
#define DVBC_SEARCH_STEP_ADDR 0x3B0
|
|
#define DVBC_SEARCH_RANGE_ADDR 0x3B4
|
|
#define DVBC_BITSYNC_DETECT_TIMEOUT_ADDR 0x364
|
|
#define DVBC_AUTO_EQU_SEARCH_ADDR 0x3CC
|
|
/****DVB-C API Functions*************************************************/
|
|
void ATBMSetDVBCMode(void); // this function may be changed later
|
|
int ATBMDVBCSNR(void);
|
|
uint32 ATBMDVBCBER(int *i32pBerExponent);
|
|
uint32 ATBMDVBCUncorrectablePER(int *i32pPktsExponent);
|
|
uint8 ATBMDVBCGetQAM(void);
|
|
uint32 ATBMDVBCSignalStrength(void);
|
|
uint32 ATBMDVBCGetSymbolRate(void);
|
|
int ATBMDVBCCarrierOffset(void);
|
|
|
|
/*************DVB-C internal functions************************/
|
|
void ATBMDVBCInit(custom_config_t stCustomConfig);
|
|
void ATBMDVBCSetSymbolRate(uint32 ui32OSCFreq, uint32 ui32SymbolRateK);
|
|
void ATBMDVBCSetCarrier(uint32 ui32OSCFreq, uint32 ui32SymbolRateK);
|
|
void ATBMDVBCSetQAM(void);
|
|
|
|
/******************Demodulator Internal functions***********************/
|
|
void ATBMInit(void);
|
|
void ATBMConfig(custom_config_t stCustomConfig);
|
|
void ATBMSetTSMode(MPEG_TS_mode_t st_ts_mode); /* Default SPI , it can be configured to Serial mode */
|
|
int ATBMSetOSC(tuner_config_t stTunerConfig, uint32 ui_32_sample_clk_frequency);
|
|
uint8 ATBMGetTPS(void);
|
|
void ATBMDebugRegister(void);
|
|
uint8 ATBMCheckDemodStatus(void);
|
|
int ATBMReset(uint8 ui8CryOrOsc);
|
|
uint8 ATBMCheckPLLStatus(void);
|
|
/****DTMB I2C interface functions****************************************/
|
|
void ATBMWriteRegArray(uint8 *ui8ARegTable, int i32TableLen);
|
|
void ATBMDebugRegArray(uint8 *ui8ARegTable, int i32TableLen);
|
|
ATBM_I2CREADWRITE_STATUS ATBMRead(uint8 ui8BaseAddr, uint8 ui8RegisterAddr, uint8 *ui8pValue);
|
|
ATBM_I2CREADWRITE_STATUS ATBMWrite(uint8 ui8BaseAddr, uint8 ui8RegisterAddr, uint8 ui8Data);
|
|
/****DVB-C I2C interface functions***************************************/
|
|
ATBM_I2CREADWRITE_STATUS ATBMTransRead(uint8 ui8BaseAddr, uint8 ui8RegisterAddr, uint8 *ui8pValue);
|
|
ATBM_I2CREADWRITE_STATUS ATBMTransWrite(uint8 ui8BaseAddr, uint8 ui8RegisterAddr, uint8 ui8Data);
|
|
ATBM_I2CREADWRITE_STATUS ATBMDVBCWrite(uint32 ui32AAddress, uint32 ui32Data);
|
|
ATBM_I2CREADWRITE_STATUS ATBMDVBCRead(uint32 ui32AAddress, uint32 *ui32pValue);
|
|
|
|
/****General interface functions*****************************************/
|
|
uint32 ATBMPreBCHBlockErrorRatio(void);
|
|
void ATBM_GPO_I2CINT_Output(uint8 ui8Level);
|
|
void ATBM_GPO_PWM1_Output(uint8 ui8Level);
|
|
void ATBM_GPO_TestIO23_Output(uint8 ui8Level);
|
|
void ATBM_TestIO23_Indicate_TS_Lock(void);
|
|
void ATBM_TestIO23_Indicate_FEC_No_Error(void);
|
|
void ATBM_GPO_TestIO20_Output(uint8 ui8Level);
|
|
void ATBM_TestIO20_Indicate_FEC_Error(void);
|
|
void ATBM_TestIO20_Indicate_TS_Unlock(void);
|
|
void ATBMErrorOnDurationMillisecond(int i32MS);
|
|
void ATBMLockOffDurationMillisecond(int i32MS);
|
|
|
|
|
|
// API of Getting DTMB signal parameters
|
|
DTMB_GUARD_INTERVAL ATBM_GetGuardInterval(void);
|
|
DTMB_GUARD_INTERVAL_PN ATBM_GetGuardIntervalPN(void);
|
|
DTMB_QAM_INDEX ATBM_GetQamIndex(void);
|
|
DTMB_CODE_RATE ATBM_GetCodeRate(void);
|
|
DTMB_TIME_INTERLEAVE ATBM_GetInterleavingMode(void);
|
|
DTMB_CARRIER_MODE ATBM_GetCarrierMode(void);
|
|
void ATBMGetSignalParameters(DTMB_SIGNAL_PARAMS *singal_params);
|
|
|
|
|
|
/****extern interface functions******************************************/
|
|
extern void Delayms(int i32MS);
|
|
extern void DemodHardwareReset(void);
|
|
extern ATBM_I2CREADWRITE_STATUS I2CWrite(uint8 ui8I2CSlaveAddr, uint8 *ui8pData, int i32Length);
|
|
extern ATBM_I2CREADWRITE_STATUS I2CRead(uint8 ui8I2CSlaveAddr, uint8 *ui8pData, int i32Length);
|
|
extern ATBM_I2CREADWRITE_STATUS I2CReadOneStep(uint8 ui8I2CSlaveAddr, uint16 addr_length, uint8 *addr_dat,
|
|
uint16 data_length, uint8 *reg_dat);
|
|
extern ATBM_I2CREADWRITE_STATUS I2CWriteWithRestart(uint8 ui8I2CSlaveAddr, uint8 addr_length, uint8 *addr_dat,
|
|
uint8 data_length, uint8 *reg_dat);
|
|
|
|
int ATBMMutexIni(void);
|
|
void ATBMMutexLock(void);
|
|
void ATBMMutexUnlock(void);
|
|
int RegistI2cFunc(drv_fe_ctrl_func *ctrlFunc);
|
|
int SetI2cProp(int i2cChannel, int i2cAddr);
|
|
|
|
#endif |