提交SMOD ATSC IMX APP版本 V122
This commit is contained in:
+703
@@ -0,0 +1,703 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/08/30
|
||||
Modification ID : 902dae58eb5249e028ccc5d7f60bb66cca9b43a9
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "sony_demod_isdbc.h"
|
||||
#include "sony_demod_isdbc_monitor.h"
|
||||
|
||||
#ifdef SONY_DEMOD_SUPPORT_ISDBC_CHBOND
|
||||
#include "sony_demod_isdbc_chbond.h"
|
||||
#endif
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Function Prototypes
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Set TSMF output format, TSID(Relative TS number) and network ID
|
||||
*/
|
||||
static sony_result_t SetTSMFSetting (sony_demod_t * pDemod,
|
||||
sony_demod_isdbc_tsmf_mode_t tsmfMode,
|
||||
sony_isdbc_tsid_type_t tsidType,
|
||||
uint16_t tsid,
|
||||
uint16_t networkId);
|
||||
|
||||
/**
|
||||
@brief Configure the demodulator from Sleep to Active for ISDB-C
|
||||
*/
|
||||
static sony_result_t SLtoAIC (sony_demod_t * pDemod);
|
||||
|
||||
/**
|
||||
@brief Configure the demodulator from Active ISDB-C to Active to ISDB-C. Used
|
||||
for changing channel parameters.
|
||||
*/
|
||||
static sony_result_t AICtoAIC (sony_demod_t * pDemod);
|
||||
|
||||
/**
|
||||
@brief Configure the demodulator from Active ISDB-C to Sleep.
|
||||
*/
|
||||
static sony_result_t AICtoSL (sony_demod_t * pDemod);
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t sony_demod_isdbc_Tune (sony_demod_t * pDemod, sony_isdbc_tune_param_t * pTuneParam)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_Tune");
|
||||
|
||||
if ((!pDemod) || (!pTuneParam)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pDemod->state == SONY_DEMOD_STATE_ACTIVE) && (pDemod->system == SONY_DTV_SYSTEM_ISDBC)) {
|
||||
pDemod->bandwidth = SONY_DTV_BW_6_MHZ;
|
||||
/* Demodulator Active and set to ISDB-C mode */
|
||||
result = SetTSMFSetting(pDemod, pTuneParam->tsmfMode, pTuneParam->tsidType, pTuneParam->tsid, pTuneParam->networkId);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
result = AICtoAIC (pDemod);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
else if((pDemod->state == SONY_DEMOD_STATE_ACTIVE) && (pDemod->system != SONY_DTV_SYSTEM_ISDBC)){
|
||||
/* Demodulator Active but not ISDB-C mode */
|
||||
result = sony_demod_Sleep (pDemod);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
pDemod->system = SONY_DTV_SYSTEM_ISDBC;
|
||||
pDemod->bandwidth = SONY_DTV_BW_6_MHZ;
|
||||
|
||||
result = SetTSMFSetting(pDemod, pTuneParam->tsmfMode, pTuneParam->tsidType, pTuneParam->tsid, pTuneParam->networkId);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
result = SLtoAIC (pDemod);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
else if (pDemod->state == SONY_DEMOD_STATE_SLEEP) {
|
||||
/* Demodulator in Sleep mode */
|
||||
pDemod->system = SONY_DTV_SYSTEM_ISDBC;
|
||||
pDemod->bandwidth = SONY_DTV_BW_6_MHZ;
|
||||
|
||||
result = SetTSMFSetting(pDemod, pTuneParam->tsmfMode, pTuneParam->tsidType, pTuneParam->tsid, pTuneParam->networkId);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
result = SLtoAIC (pDemod);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
else {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Update demodulator state */
|
||||
pDemod->state = SONY_DEMOD_STATE_ACTIVE;
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_Sleep (sony_demod_t * pDemod)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_Sleep");
|
||||
|
||||
if (!pDemod) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pDemod->state != SONY_DEMOD_STATE_SLEEP) && (pDemod->state != SONY_DEMOD_STATE_ACTIVE)) {
|
||||
/* This api is accepted in Sleep and Active states only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = AICtoSL (pDemod);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_CheckTSLock (sony_demod_t * pDemod,
|
||||
sony_demod_lock_result_t * pLock)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t arLock = 0;
|
||||
uint8_t tsLock = 0;
|
||||
uint8_t unlockDetected = 0;
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_CheckTSLock");
|
||||
|
||||
if ((!pDemod) || (!pLock)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
|
||||
/* This api is accepted in Active state only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
result = sony_demod_isdbc_monitor_SyncStat (pDemod, &arLock, &tsLock, &unlockDetected);
|
||||
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (pDemod->scanMode) {
|
||||
if (unlockDetected == 1) {
|
||||
*pLock = SONY_DEMOD_LOCK_RESULT_UNLOCKED;
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
}
|
||||
|
||||
if (arLock == 0) {
|
||||
*pLock = SONY_DEMOD_LOCK_RESULT_NOTDETECT;
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
*pLock = tsLock ? SONY_DEMOD_LOCK_RESULT_LOCKED : SONY_DEMOD_LOCK_RESULT_NOTDETECT;
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Static Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
static sony_result_t SetTSMFSetting (sony_demod_t * pDemod,
|
||||
sony_demod_isdbc_tsmf_mode_t tsmfMode,
|
||||
sony_isdbc_tsid_type_t tsidType,
|
||||
uint16_t tsid,
|
||||
uint16_t networkId)
|
||||
{
|
||||
uint8_t mode = 0;
|
||||
uint8_t data[4];
|
||||
SONY_TRACE_ENTER ("SetTSMFSetting");
|
||||
|
||||
if (!pDemod) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((tsidType == SONY_ISDBC_TSID_TYPE_RELATIVE_TS_NUMBER) && (tsid > 0x0F || tsid == 0)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x49 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x49) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* TSMF mode setting
|
||||
*
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ----------------------------------------------------------------------------------
|
||||
* <SLV-T> 49h 36h [4:1] 8'h13 8'h13 OREG_TSMF_MODE[1:0],OREG_TSMF_HEADER_PID_CHG_DISABLE,OREG_TSMF_VALID_TSMF_CTRL
|
||||
*
|
||||
* OREG_TSMF_MODE[1:0] : 0:Single TS mode,1:Multiple TS mode,2:Auto-detect
|
||||
*/
|
||||
mode = ((uint8_t)tsmfMode) << 3;
|
||||
if (sony_i2c_SetRegisterBits (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x36, mode, 0x18) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (tsidType == SONY_ISDBC_TSID_TYPE_TSID) {
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ----------------------------------------------------------------------------------
|
||||
* <SLV-T> 49h 37h [4:0] 8'h10 8'h00 OREG_TSMF_RELATIVE_TS_NUM_ON,OREG_TSMF_RELATIVE_TS_NUM[3:0]
|
||||
* <SLV-T> 49h 32h [7:0] 8'h00 8'hxx OREG_TSMF_TS_ID[15:8]
|
||||
* <SLV-T> 49h 33h [7:0] 8'h00 8'hxx OREG_TSMF_TS_ID[7:0]
|
||||
* <SLV-T> 49h 34h [7:0] 8'h00 8'hxx OREG_TSMF_ORIG_NETWORK_ID[15:8]
|
||||
* <SLV-T> 49h 35h [7:0] 8'h00 8'hxx OREG_TSMF_ORIG_NETWORK_ID[7:0]
|
||||
*
|
||||
* OREG_TSMF_TS_ID[15:0] : the TS ID of the desired TS
|
||||
* OREG_TSMF_ORIG_NETWORK_ID[15:0] : the Original network ID of the desired TS
|
||||
*/
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x37, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
data[0] = (uint8_t)((tsid >> 8) & 0xFF);
|
||||
data[1] = (uint8_t)(tsid & 0xFF);
|
||||
data[2] = (uint8_t)((networkId >> 8) & 0xFF);
|
||||
data[3] = (uint8_t)(networkId & 0xFF);
|
||||
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x32, data, 4) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ----------------------------------------------------------------------------------
|
||||
* <SLV-T> 49h 37h [4:0] 8'h10 8'h1x OREG_TSMF_RELATIVE_TS_NUM_ON,OREG_TSMF_RELATIVE_TS_NUM[3:0]
|
||||
*
|
||||
* OREG_TSMF_RELATIVE_TS_NUM[3:0] : the Relative TS number(1~15) of the desired TS
|
||||
*/
|
||||
data[0] = 0x10 | (uint8_t)(tsid & 0x0F);
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x37, data[0]) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t SLtoAIC (sony_demod_t * pDemod)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("SLtoAIC");
|
||||
|
||||
if (!pDemod) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
#ifdef SONY_DEMOD_SUPPORT_ISDBC_CHBOND
|
||||
if (pDemod->chbondConfig == SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
result = sony_demod_isdbc_chbond_Enable (pDemod, 1);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if ((pDemod->isdbcChBondOutput == SONY_DEMOD_OUTPUT_ISDBC_CHBOND_TS) || (pDemod->isdbcChBondOutput == SONY_DEMOD_OUTPUT_ISDBC_CHBOND_TS_TLV_AUTO)) {
|
||||
/* Configure TS clock Mode and Frequency */
|
||||
result = sony_demod_SetTSClockModeAndFreq (pDemod, SONY_DTV_SYSTEM_ISDBC);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef SONY_DEMOD_SUPPORT_TLV
|
||||
if ((pDemod->isdbcChBondOutput == SONY_DEMOD_OUTPUT_ISDBC_CHBOND_TLV) || (pDemod->isdbcChBondOutput == SONY_DEMOD_OUTPUT_ISDBC_CHBOND_TS_TLV_AUTO)) {
|
||||
/* Configure TLV clock Mode and Frequency. */
|
||||
result = sony_demod_SetTLVClockModeAndFreq (pDemod, SONY_DTV_SYSTEM_ISDBC);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
} else
|
||||
#endif
|
||||
{
|
||||
/* Configure TS clock Mode and Frequency */
|
||||
result = sony_demod_SetTSClockModeAndFreq (pDemod, SONY_DTV_SYSTEM_ISDBC);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set SLV-X Bank : 0x00 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x00, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set demod mode */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x17, 0x09) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x00 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set TS/TLV mode */
|
||||
{
|
||||
uint8_t data = 0;
|
||||
|
||||
if ((pDemod->chbondConfig == SONY_DEMOD_CHBOND_CONFIG_ISDBC) && (pDemod->isdbcChBondOutput == SONY_DEMOD_OUTPUT_ISDBC_CHBOND_TLV)) {
|
||||
data = 0x01;
|
||||
} else {
|
||||
data = 0x00;
|
||||
}
|
||||
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA9, data) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
/* Enable demod clock */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x2C, 0x01) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* TADC setting */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x4B, 0x74) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* TADC setting */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x49, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* TADC setting */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x18, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x11 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x11) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* BBAGC TARGET level setting
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ----------------------------------------------------------------------------------
|
||||
* <SLV-T> 11h 6Ah [7:0] 8'h50 8'h48 OREG_ITB_DAGC_TRGT[7:0]
|
||||
*/
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x6A, 0x48) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x10 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x10) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (pDemod->tunerOptimize == SONY_DEMOD_TUNER_OPTIMIZE_SONYSILICON) {
|
||||
/* ASCOT setting ON
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ----------------------------------------------------------------------------------
|
||||
* <SLV-T> 10h A5h [0] 8'h01 8'h01 OREG_ITB_GDEQ_EN
|
||||
*/
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA5, 0x01) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
else {
|
||||
/* ASCOT setting OFF
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ----------------------------------------------------------------------------------
|
||||
* <SLV-T> 10h A5h [0] 8'h01 8'h00 OREG_ITB_GDEQ_EN
|
||||
*/
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA5, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x11 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x11) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
{
|
||||
/* ISDB-C 24MHz Xtal setting
|
||||
* Slave Bank Addr Bit Default Value Name
|
||||
* ---------------------------------------------------------------------------------
|
||||
* <SLV-T> 11h 33h [7:0] 8'hC8 8'h00 OCTL_IFAGC_INITWAIT[7:0]
|
||||
* <SLV-T> 11h 34h [7:0] 8'h02 8'h03 OCTL_IFAGC_MINWAIT[7:0]
|
||||
* <SLV-T> 11h 35h [7:0] 8'h32 8'h3B OCTL_IFAGC_MAXWAIT[7:0]
|
||||
*/
|
||||
const uint8_t data[3] = { 0x00, 0x03, 0x3B };
|
||||
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x33, data, sizeof (data)) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x48 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x48) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* ISDB-C 24MHz Xtal setting
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ----------------------------------------------------------------------------------
|
||||
* <SLV-T> 48h 2Ch [1] 8'h01 8'h03 OREG_SYNCLOCKUSE
|
||||
*/
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x2C, 0x03) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x00 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* TSIF setting
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ----------------------------------------------------------------------------------
|
||||
* <SLV-T> 00h CEh [0] 8'h01 8'h01 ONOPARITY
|
||||
* <SLV-T> 00h CFh [0] 8'h01 8'h01 ONOPARITY_MANUAL_ON
|
||||
*/
|
||||
{
|
||||
const uint8_t data[] = { 0x01, 0x01 };
|
||||
|
||||
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xCE, data, sizeof (data)) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x10 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x10) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
/* Set tuner and bandwidth specific settings */
|
||||
/*
|
||||
* Filter settings for Sony silicon tuners
|
||||
* slave bank addr bit default name
|
||||
* ------------------------------------------------------------------
|
||||
* <SLV-T> 10h A6h [7:0] 8'h1E OREG_ITB_COEF01[7:0]
|
||||
* <SLV-T> 10h A7h [7:0] 8'h1D OREG_ITB_COEF02[7:0]
|
||||
* <SLV-T> 10h A8h [7:0] 8'h29 OREG_ITB_COEF11[7:0]
|
||||
* <SLV-T> 10h A9h [7:0] 8'hC9 OREG_ITB_COEF12[7:0]
|
||||
* <SLV-T> 10h AAh [7:0] 8'h2A OREG_ITB_COEF21[7:0]
|
||||
* <SLV-T> 10h ABh [7:0] 8'hBA OREG_ITB_COEF22[7:0]
|
||||
* <SLV-T> 10h ACh [7:0] 8'h29 OREG_ITB_COEF31[7:0]
|
||||
* <SLV-T> 10h ADh [7:0] 8'hAD OREG_ITB_COEF32[7:0]
|
||||
* <SLV-T> 10h AEh [7:0] 8'h29 OREG_ITB_COEF41[7:0]
|
||||
* <SLV-T> 10h AFh [7:0] 8'hA4 OREG_ITB_COEF42[7:0]
|
||||
* <SLV-T> 10h B0h [7:0] 8'h29 OREG_ITB_COEF51[7:0]
|
||||
* <SLV-T> 10h B1h [7:0] 8'h9A OREG_ITB_COEF52[7:0]
|
||||
* <SLV-T> 10h B2h [7:0] 8'h28 OREG_ITB_COEF61[7:0]
|
||||
* <SLV-T> 10h B3h [7:0] 8'h9E OREG_ITB_COEF62[7:0]
|
||||
*/
|
||||
if (pDemod->tunerOptimize == SONY_DEMOD_TUNER_OPTIMIZE_SONYSILICON) {
|
||||
const uint8_t itbCoef[14] = {
|
||||
/* COEF01 COEF02 COEF11 COEF12 COEF21 COEF22 COEF31 COEF32 COEF41 COEF42 COEF51 COEF52 COEF61 COEF62 */
|
||||
0x31, 0xA8, 0x29, 0x9B, 0x27, 0x9C, 0x28, 0x9E, 0x29, 0xA4, 0x29, 0xA2, 0x29, 0xA8
|
||||
};
|
||||
|
||||
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA6, itbCoef, 14) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
/*
|
||||
* <IF freq setting>
|
||||
* slave bank addr bit default value name
|
||||
* ---------------------------------------------------------------------------------
|
||||
* <SLV-T> 10h B6h [7:0] 8'h1F user defined OREG_DNCNV_LOFRQ_T[23:16]
|
||||
* <SLV-T> 10h B7h [7:0] 8'h38 user defined OREG_DNCNV_LOFRQ_T[15:8]
|
||||
* <SLV-T> 10h B8h [7:0] 8'h32 user defined OREG_DNCNV_LOFRQ_T[7:0]
|
||||
*/
|
||||
uint8_t data[3];
|
||||
data[0] = (uint8_t) ((pDemod->iffreqConfig.configISDBC_6 >> 16) & 0xFF);
|
||||
data[1] = (uint8_t) ((pDemod->iffreqConfig.configISDBC_6 >> 8) & 0xFF);
|
||||
data[2] = (uint8_t) (pDemod->iffreqConfig.configISDBC_6 & 0xFF);
|
||||
|
||||
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xB6, data, sizeof (data)) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* IMR Filter Bandwidth setting
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ---------------------------------------------------------------------------------
|
||||
* <SLV-T> 11h A3h [4:0] 8'h00 8'h14 OREG_IMR_FORCE_CHANNEL_WIDTH,1'b0,OREG_IMR_CHANNEL_WIDTH[2:0]
|
||||
*/
|
||||
/* Set SLV-T Bank : 0x11 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x11) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA3, 0x14) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
{
|
||||
/* The settings of Symbol rate search range
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ---------------------------------------------------------------------------------
|
||||
* <SLV-T> 40h 14h [4:0] 8'h1F 8'14 OREG_QAM_ENABLE[4:0]
|
||||
* <SLV-T> 40h 1Eh [7] 8'h00 8'h80 OREG_DISCRETE_SEARCH
|
||||
* <SLV-T> 40h 26h [3:0] 8'h09 tsrate1 OREG_TRIAL_SRATE0[11:8]
|
||||
* <SLV-T> 40h 27h [7:0] 8'h9A tsrate2 OREG_TRIAL_SRATE0[7:0]
|
||||
* <SLV-T> 40h 28h [3:0] 8'h00 tsrate3 OREG_TRIAL_SRATE1[11:8]
|
||||
* <SLV-T> 40h 29h [7:0] 8'hEE tsrate4 OREG_TRIAL_SRATE1[7:0]
|
||||
*/
|
||||
|
||||
const uint8_t symRate[4] = {
|
||||
/* tsrate1 tsrate2 tsrate3 tsrate4 */
|
||||
0x07, 0x08, 0x07, 0x08
|
||||
};
|
||||
|
||||
/* Set SLV-T Bank : 0x40 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x40) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x14, 0x14) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x1E, 0x80) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x26, symRate, 4) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x00 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Disable HiZ Setting 1 (TAGC, SAGC(Hi-Z), TSVALID, TSSYNC, TSCLK) */
|
||||
if (sony_i2c_SetRegisterBits (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x80, 0x08, 0x1F) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Disable HiZ Setting 2 */
|
||||
result = sony_demod_SetTSDataPinHiZ (pDemod, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
static sony_result_t AICtoAIC(sony_demod_t * pDemod)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("AICtoAIC");
|
||||
|
||||
if (!pDemod) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Disable TS output */
|
||||
result = sony_demod_SetStreamOutput (pDemod, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
static sony_result_t AICtoSL(sony_demod_t * pDemod)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
SONY_TRACE_ENTER ("AICtoSL");
|
||||
|
||||
if (!pDemod) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Disable TS output */
|
||||
result = sony_demod_SetStreamOutput (pDemod, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x00 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Enable Hi-Z setting 1 (TAGC, SAGC, TSVALID, TSSYNC, TSCLK) */
|
||||
if (sony_i2c_SetRegisterBits (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x80, 0x1F, 0x1F) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Enable Hi-Z setting 2 */
|
||||
result = sony_demod_SetTSDataPinHiZ (pDemod, 1);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* cancel ISDB-C Demod parameter setting
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ---------------------------------------------------------------------------------
|
||||
* <SLV-T> 11h A3h [4:0] 8'h00 8'h00 OREG_IMR_FORCE_CHANNEL_WIDTH,1'b0,OREG_IMR_CHANNEL_WIDTH[2:0]
|
||||
* <SLV-T> 48h 2Ch [1] 8'h01 8'h01 OREG_SYNCLOCKUSE
|
||||
* <SLV-T> 40h 14h [4:0] 8'h1F 8'h1F OREG_QAM_ENABLE[4:0]
|
||||
* <SLV-T> 40h 1Eh [7] 8'h00 8'h00 OREG_DISCRETE_SEARCH
|
||||
*/
|
||||
/* Set SLV-T Bank : 0x11 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x11) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA3, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x48 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x48) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x2C, 0x01) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x40 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x40) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x14, 0x1F) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x1E, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set SLV-X Bank : 0x00 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x00, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* TADC setting */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x18, 0x01) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x00 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* TADC setting */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x49, 0x33) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* TADC setting */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x4B, 0x21) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Demodulator SW reset */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xFE, 0x01) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Disable demodulator clock */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x2C, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set tstlv mode to default */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xA9, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set demodulator mode to default */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x17, 0x01) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
#ifdef SONY_DEMOD_SUPPORT_ISDBC_CHBOND
|
||||
if (pDemod->chbondConfig == SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
result = sony_demod_isdbc_chbond_Enable (pDemod, 0);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
+106
@@ -0,0 +1,106 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2016/08/01
|
||||
Modification ID : b30d76210d343216ea52b88e9b450c8fd5c0359f
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_demod_isdbc.h
|
||||
|
||||
This file provides the demodulator control interface specific to ISDB-C.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef SONY_DEMOD_ISDBC_H
|
||||
#define SONY_DEMOD_ISDBC_H
|
||||
|
||||
#include "../sony_common.h"
|
||||
#include "../sony_demod.h"
|
||||
#include "sony_isdbc.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Enumerations
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief TSMF output format.
|
||||
*/
|
||||
typedef enum {
|
||||
/**
|
||||
@brief Treat the input stream as not containing multiple TS. Pass through mode.
|
||||
*/
|
||||
SONY_DEMOD_ISDBC_TSMF_MODE_SINGLE,
|
||||
/**
|
||||
@brief Treat the input stream as containing multiple TS. Output slot of the
|
||||
selected ID, other slots will be replaced to NULL.
|
||||
*/
|
||||
SONY_DEMOD_ISDBC_TSMF_MODE_MULTIPLE,
|
||||
/**
|
||||
@brief Automatically select between the single mode and multiple mode.
|
||||
After meeting the following two conditions once, output format will be change
|
||||
Multiple mdoe.
|
||||
- TSMF header synchronization is locked.
|
||||
- CRC check is OK
|
||||
*/
|
||||
SONY_DEMOD_ISDBC_TSMF_MODE_AUTO
|
||||
} sony_demod_isdbc_tsmf_mode_t;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Structs
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief The tune parameters for a ISDB-C signal
|
||||
*/
|
||||
typedef struct sony_isdbc_tune_param_t {
|
||||
uint32_t centerFreqKHz; /**< Center frequency in kHz of the ISDB-C channel */
|
||||
sony_demod_isdbc_tsmf_mode_t tsmfMode; /**< TSMF output format */
|
||||
/**
|
||||
@brief This parameter is used to tsId indicates whether TSID or relative TS number.
|
||||
If Relative TS number is selected networkId will be ignored.
|
||||
*/
|
||||
sony_isdbc_tsid_type_t tsidType;
|
||||
uint16_t tsid; /**< TSID */
|
||||
uint16_t networkId; /**< Network ID */
|
||||
} sony_isdbc_tune_param_t;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Enable acquisition on the demodulator for ISDB-C channels. Called from
|
||||
the integration layer ::sony_integ_isdbc_Tune API.
|
||||
|
||||
@param pDemod The demodulator instance
|
||||
@param pTuneParam The tune parameters.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_Tune (sony_demod_t * pDemod, sony_isdbc_tune_param_t * pTuneParam);
|
||||
|
||||
/**
|
||||
@brief Put the demodulator into ::SONY_DEMOD_STATE_SLEEP state. Can be called
|
||||
from Active, Shutdown or Sleep states. Called from the integration layer
|
||||
::sony_integ_Sleep API.
|
||||
|
||||
@param pDemod The demodulator instance
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_Sleep (sony_demod_t * pDemod);
|
||||
|
||||
/**
|
||||
@brief Check ISDB-C TS lock status.
|
||||
|
||||
@note This API is for checking lock status in tuning stage.
|
||||
After tuning (while receiving the signal),
|
||||
please use sony_demod_isdbc_monitor_SyncStat instead
|
||||
to check current lock status.
|
||||
|
||||
@param pDemod The demodulator instance
|
||||
@param pLock TS lock state
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_CheckTSLock (sony_demod_t * pDemod,
|
||||
sony_demod_lock_result_t * pLock);
|
||||
|
||||
#endif /* SONY_DEMOD_ISDBC_H */
|
||||
+794
@@ -0,0 +1,794 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2018-2019 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2019/10/04
|
||||
Modification ID : ae1245fdaf66401838902e7214d8494b0f5e5a76
|
||||
------------------------------------------------------------------------------*/
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "sony_demod_isdbc_chbond.h"
|
||||
#include "sony_demod_isdbc_monitor.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t sony_demod_isdbc_chbond_Enable (sony_demod_t * pDemod,
|
||||
uint8_t enable)
|
||||
{
|
||||
uint8_t enableStreamIn = 0;
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_Enable");
|
||||
|
||||
if (!pDemod) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Set SLV-X Bank : 0x00 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0x00, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* --------------------------------------------------------------------------------
|
||||
* <SLV-X> 00h C1h [2:0] 8'h00 8'h0x OREG_STREAMIN_EN
|
||||
*
|
||||
* Bit[0]: Stream input0 Bit[1]: Stream input1 Bit[2]: Stream input2
|
||||
* 1: Stream input enble 0:Stream input disable
|
||||
*/
|
||||
if (enable) {
|
||||
enableStreamIn = pDemod->chbondStreamIn;
|
||||
}
|
||||
/* Set Stream Input */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVX, 0xC1, enableStreamIn) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (enable) {
|
||||
uint8_t data[2] = {0x01, 0x09};
|
||||
/* Channel Bonding initial setting */
|
||||
/* slave Bank Addr Bit default Value Name
|
||||
* ----------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 17h [0] 8'h00 8'h01 OREG_SEL_FRAMEVALID
|
||||
* <SLV-T> 03h 18h [3] 8'h01 8'h09 OREG_IGNORE_STREAMTYPE
|
||||
*/
|
||||
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x17, data, 2) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
/* Bonding mode setting */
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name meaning
|
||||
* --------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h b1h [0] 8'h00 8'h0x OREG_XCHBOND_ON 0: Channel Bonding Off 1: Channel Bonding On
|
||||
*/
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xB1, enable) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* TLV output setting (CXD2878 family)
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ---------------------------------------------------------------------------------
|
||||
* <SLV-T> 01h E8h [0] 8'h00 8'h01 OTLV_WFMT_TIMER_OFF
|
||||
*/
|
||||
/* Set SLV-T Bank : 0x01 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x01) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xE8, 0x01) != SONY_RESULT_OK){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_SetTSMFConfig (sony_demod_t * pDemod,
|
||||
sony_isdbc_tsid_type_t tsidType,
|
||||
uint16_t tsid,
|
||||
uint16_t networkId)
|
||||
{
|
||||
uint8_t data[4];
|
||||
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_SetTSMFConfig");
|
||||
|
||||
if (!pDemod) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pDemod->state != SONY_DEMOD_STATE_SLEEP) && (pDemod->state != SONY_DEMOD_STATE_ACTIVE)) {
|
||||
/* This api is accepted in Sleep and Active states only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if (pDemod->chbondConfig != SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
/* For ISDB-C channel bonding only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if ((tsidType == SONY_ISDBC_TSID_TYPE_RELATIVE_TS_NUMBER) && (tsid > 0x0F || tsid == 0)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (tsidType == SONY_ISDBC_TSID_TYPE_TSID) {
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ----------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 10h [7:0] 8'h00 8'hxx OREG_TSMF_TS_ID[15:8]
|
||||
* <SLV-T> 03h 11h [7:0] 8'h00 8'hxx OREG_TSMF_TS_ID[7:0]
|
||||
* <SLV-T> 03h 12h [7:0] 8'h00 8'hxx OREG_TSMF_ORIG_NETWORK_ID[15:8]
|
||||
* <SLV-T> 03h 13h [7:0] 8'h00 8'hxx OREG_TSMF_ORIG_NETWORK_ID[7:0]
|
||||
*
|
||||
* OREG_TSMF_TS_ID[15:0] : the TS ID of the desired TS
|
||||
* OREG_TSMF_ORIG_NETWORK_ID[15:0] : the Original network ID of the desired TS
|
||||
*/
|
||||
|
||||
data[0] = (uint8_t)((tsid >> 8) & 0xFF);
|
||||
data[1] = (uint8_t)(tsid & 0xFF);
|
||||
data[2] = (uint8_t)((networkId >> 8) & 0xFF);
|
||||
data[3] = (uint8_t)(networkId & 0xFF);
|
||||
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x10, data, 4) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ----------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 3fh [4:0] 8'h00 8'h00 OREG_TSMF_RELATIVE_TS_NUM_ON0,OREG_TSMF_RELATIVE_TS_NUM0[3:0] from Ext0
|
||||
* <SLV-T> 03h 56h [4:0] 8'h00 8'h00 OREG_TSMF_RELATIVE_TS_NUM_ON1,OREG_TSMF_RELATIVE_TS_NUM1[3:0] from Ext1
|
||||
* <SLV-T> 03h 57h [4:0] 8'h00 8'h00 OREG_TSMF_RELATIVE_TS_NUM_ON2,OREG_TSMF_RELATIVE_TS_NUM2[3:0] from Ext2
|
||||
* <SLV-T> 03h 58h [4:0] 8'h00 8'h00 OREG_TSMF_RELATIVE_TS_NUM_ON3,OREG_TSMF_RELATIVE_TS_NUM3[3:0] from internal dmd
|
||||
*
|
||||
* OREG_TSMF_RELATIVE_TS_NUMx[3:0] : the Relative TS number(1~15) of the desired TS
|
||||
* OREG_TSMF_RELATIVE_TS_NUM_ONx :
|
||||
* 0: TS select by the TS ID and the original network ID,
|
||||
* 1: TS select by the relative TS number
|
||||
*/
|
||||
data[0] = data[1] = data[2] = data[3] = 0x00;
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x3F, data[0]) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x56, &data[1], 3) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* ----------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 3fh [4:0] 8'h00 8'h1x OREG_TSMF_RELATIVE_TS_NUM_ON0,OREG_TSMF_RELATIVE_TS_NUM0[3:0] from Ext0
|
||||
* <SLV-T> 03h 56h [4:0] 8'h00 8'h1x OREG_TSMF_RELATIVE_TS_NUM_ON1,OREG_TSMF_RELATIVE_TS_NUM1[3:0] from Ext1
|
||||
* <SLV-T> 03h 57h [4:0] 8'h00 8'h1x OREG_TSMF_RELATIVE_TS_NUM_ON2,OREG_TSMF_RELATIVE_TS_NUM2[3:0] from Ext2
|
||||
* <SLV-T> 03h 58h [4:0] 8'h00 8'h1x OREG_TSMF_RELATIVE_TS_NUM_ON3,OREG_TSMF_RELATIVE_TS_NUM3[3:0] from internal dmd
|
||||
*
|
||||
* OREG_TSMF_RELATIVE_TS_NUMx[3:0] : the Relative TS number(1~15) of the desired TS
|
||||
* OREG_TSMF_RELATIVE_TS_NUM_ONx :
|
||||
* 0: TS select by the TS ID and the original network ID,
|
||||
* 1: TS select by the relative TS number
|
||||
*/
|
||||
data[0] = data[1] = data[2] = data[3] = 0x10 | (uint8_t)(tsid & 0x0F);
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x3F, data[0]) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
if (pDemod->pI2c->WriteRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x56, &data[1], 3) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_SoftReset (sony_demod_t * pDemod)
|
||||
{
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_SoftReset");
|
||||
|
||||
if (!pDemod) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pDemod->state != SONY_DEMOD_STATE_ACTIVE) && (pDemod->state != SONY_DEMOD_STATE_SLEEP)) {
|
||||
/* This api is accepted in Sleep and Active states only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if (pDemod->chbondConfig != SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
/* For ISDB-C channel bonding only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x00 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x00) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* --------------------------------------------------------------------------------
|
||||
* <SLV-T> 00h FAh [0] 8'h00 8'h01 OREG_SRST_LCHBOND
|
||||
*/
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0xFA, 0x01) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_BondStat (sony_demod_t * pDemod,
|
||||
sony_demod_isdbc_chbond_state_t * pState)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_monitor_BondStat");
|
||||
|
||||
if ((!pDemod) || (!pState)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Software state check */
|
||||
if (pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
|
||||
/* This api is accepted in Active state only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if ((pDemod->system != SONY_DTV_SYSTEM_ISDBC) || (pDemod->chbondConfig != SONY_DEMOD_CHBOND_CONFIG_ISDBC)) {
|
||||
/* Not ISDB-C or channel boding is not enabled */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit Name meaning
|
||||
* -------------------------------------------------------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 20h [6] IREG_BONDOK 0: Bonding NG 1: Bonding OK
|
||||
* <SLV-T> 03h 20h [4] IREG_GROUPID_CHK 0: different values or no valid carrier 1: same values
|
||||
* <SLV-T> 03h 20h [3] IREG_STREAMTYPE_CHK 0: different values or no valid carrier 1: same values
|
||||
* <SLV-T> 03h 20h [1] IREG_NUMCARRIERS_CHK 0: different values or no valid carrier 1: same values
|
||||
* <SLV-T> 03h 20h [0] IREG_CARRSEQ_CHK 0: duplication or no valid carrier 1: no duplication
|
||||
* <SLV-T> 03h 20h [2] IREG_CAL_NUMCARRIERS_CHK 0: different values or no valid carrier 1: same values
|
||||
*/
|
||||
if (pDemod->pI2c->ReadRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x20, &data, 1) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
pState->bondOK = (data >> 6) & 0x01;
|
||||
pState->groupIDCheck = (data >> 4) & 0x01;
|
||||
pState->streamTypeCheck = (data >> 3) & 0x01;
|
||||
pState->numCarriersCheck = (data >> 1) & 0x01;
|
||||
pState->carrierSeqCheck = data & 0x01;
|
||||
pState->calcNumCarriersCheck = (data >> 2) & 0x01;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_BondStat_hold (sony_demod_t * pDemod,
|
||||
sony_demod_isdbc_chbond_state_t * pState)
|
||||
{
|
||||
uint8_t data;
|
||||
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_monitor_BondStat_hold");
|
||||
|
||||
if ((!pDemod) || (!pState)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Software state check */
|
||||
if (pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
|
||||
/* This api is accepted in Active state only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if ((pDemod->system != SONY_DTV_SYSTEM_ISDBC) && (pDemod->chbondConfig) != SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
/* Not ISDB-C and Channel Boding is not enable */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit Name meaning
|
||||
* ----------------------------------------------------------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 22h [6] IREG_BOND_NG_HLD 0: Bonding OK 1: Bonding NG
|
||||
* <SLV-T> 03h 22h [4] IREG_GROUPID_NG_HLD 0: same values 1: different values or no valid carrier
|
||||
* <SLV-T> 03h 22h [3] IREG_STREAMTYPE_NG_HLD 0: same values 1: different values or no valid carrier
|
||||
* <SLV-T> 03h 22h [1] IREG_NUMCARR_NG_HLD 0: same values 1: different values or no valid carrier
|
||||
* <SLV-T> 03h 22h [0] IREG_CARRIER_SEQ_NG_HLD 0: no duplication 1: duplication or no valid carrier
|
||||
* <SLV-T> 03h 22h [2] IREG_CAL_NUMCARRIERS_NG_HLD 0: same values 1: different values or no valid carrier
|
||||
*/
|
||||
if (pDemod->pI2c->ReadRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x22, &data, 1) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
data ^= 0x7F;
|
||||
pState->bondOK = ((data >> 6) & 0x01);
|
||||
pState->groupIDCheck = ((data >> 4) & 0x01);
|
||||
pState->streamTypeCheck = ((data >> 3) & 0x01);
|
||||
pState->numCarriersCheck = ((data >> 1) & 0x01);
|
||||
pState->carrierSeqCheck = (data & 0x01);
|
||||
pState->calcNumCarriersCheck = ((data >> 2) & 0x01);
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_ClearBondStat (sony_demod_t * pDemod)
|
||||
{
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_ClearBondStat");
|
||||
|
||||
if (!pDemod) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pDemod->chbondConfig != SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
/* For ISDB-C channel bonding only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* -----------------------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 1bh [0] 1'b0 1'b1 OREG_CLR_BONDMON
|
||||
*/
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x1B, 0x01) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_TLVConvError (sony_demod_t * pDemod,
|
||||
uint8_t * pError)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data;
|
||||
sony_demod_isdbc_chbond_state_t chbondState;
|
||||
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_monitor_TLVConvError");
|
||||
|
||||
if ((!pDemod) || (!pError)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Software state check */
|
||||
if (pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
|
||||
/* This api is accepted in Active state only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if ((pDemod->system != SONY_DTV_SYSTEM_ISDBC) && (pDemod->chbondConfig) != SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
/* Not ISDB-C and Channel Boding is not enable */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Freeze registers */
|
||||
if (SLVT_FreezeReg (pDemod) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = sony_demod_isdbc_chbond_monitor_BondStat (pDemod, &chbondState);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (!chbondState.bondOK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_HW_STATE);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name meaning
|
||||
* -------------------------------------------------------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 16h [0] 1'b1 1'bx OREG_VAR_TLV_EN 0: TS or Fixed length TLV, 1: Variable length TLV
|
||||
*/
|
||||
if (pDemod->pI2c->ReadRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x16, &data, 1) != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (!(data & 0x01)) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_HW_STATE);
|
||||
}
|
||||
/*
|
||||
* slave Bank Addr Bit Name meaning
|
||||
* -----------------------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 24h [4] IREG_TLVERR_ALL_HLD 0: No TLV error 1: TLV error
|
||||
*/
|
||||
if (pDemod->pI2c->ReadRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x24, &data, 1) != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
|
||||
*pError = (data >> 4) & 0x01;
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_ClearTLVConvError (sony_demod_t * pDemod)
|
||||
{
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_ClearTLVConvError");
|
||||
|
||||
if (!pDemod) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pDemod->chbondConfig != SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
/* For ISDB-C channel bonding only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* -----------------------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 19h [0] 1'b0 1'b1 OREG_TLVCHK_RST
|
||||
*/
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x19, 0x01) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_CarrierDelay (sony_demod_t * pDemod,
|
||||
uint32_t * pDelay)
|
||||
{
|
||||
uint8_t data[3];
|
||||
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_monitor_CarrierDelay");
|
||||
|
||||
if ((!pDemod) || (!pDelay)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Software state check */
|
||||
if (pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
|
||||
/* This api is accepted in Active state only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if ((pDemod->system != SONY_DTV_SYSTEM_ISDBC) && (pDemod->chbondConfig) != SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
/* Not ISDB-C and Channel Boding is not enable */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit Name
|
||||
* -----------------------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 1dh [7:0] IREG_MON_VALID,2'd0,IREG_FDELAY[20:16]
|
||||
* <SLV-T> 03h 1eh [7:0] IREG_FDELAY[15:8]
|
||||
* <SLV-T> 03h 1fh [7:0] IREG_FDELAY[7:0]
|
||||
*/
|
||||
if (pDemod->pI2c->ReadRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x1D, data, 3) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
if (!(data[0] & 0x80)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_HW_STATE);
|
||||
}
|
||||
|
||||
*pDelay = ((data[0] & 0x1F) << 16) | (data[1] << 8) | data[2];
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_EWSChange (sony_demod_t * pDemod,
|
||||
uint8_t * pEWSChange)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data;
|
||||
sony_demod_isdbc_chbond_state_t chbondState;
|
||||
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_monitor_EWSChange");
|
||||
|
||||
if ((!pDemod) || (!pEWSChange)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Software state check */
|
||||
if (pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
|
||||
/* This api is accepted in Active state only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if ((pDemod->system != SONY_DTV_SYSTEM_ISDBC) && (pDemod->chbondConfig) != SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
/* Not ISDB-C and Channel Boding is not enable */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Freeze registers */
|
||||
if (SLVT_FreezeReg (pDemod) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = sony_demod_isdbc_chbond_monitor_BondStat (pDemod, &chbondState);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (!chbondState.bondOK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_HW_STATE);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit Name meaning
|
||||
* -----------------------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 52h [4] IREG_EWS0 from Ext0
|
||||
* <SLV-T> 03h 52h [5] IREG_EWS1 from Ext1
|
||||
* <SLV-T> 03h 52h [6] IREG_EWS2 from Ext2
|
||||
* <SLV-T> 03h 52h [7] IREG_EWS3 from internal dmd
|
||||
* IREG_EWSX 0:Emergancy boot control is not detected. 1:Emergancy boot control is detected
|
||||
*/
|
||||
if (pDemod->pI2c->ReadRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x52, &data, 1) != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
|
||||
*pEWSChange = (data >> 4) & 0x0F;
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_ClearEWSChange (sony_demod_t * pDemod)
|
||||
{
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_ClearEWSChange");
|
||||
|
||||
if (!pDemod) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pDemod->chbondConfig != SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
/* For ISDB-C channel bonding only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* -----------------------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 53h [0] 1'b0 1'b1 OREG_CLR_EWS
|
||||
*/
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x53, 0x01) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_VersionChange (sony_demod_t * pDemod,
|
||||
uint8_t * pVersionChange)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
uint8_t data;
|
||||
sony_demod_isdbc_chbond_state_t chbondState;
|
||||
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_monitor_VersionChange");
|
||||
|
||||
if ((!pDemod) || (!pVersionChange)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Software state check */
|
||||
if (pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
|
||||
/* This api is accepted in Active state only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if ((pDemod->system != SONY_DTV_SYSTEM_ISDBC) && (pDemod->chbondConfig) != SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
/* Not ISDB-C and Channel Boding is not enable */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Freeze registers */
|
||||
if (SLVT_FreezeReg (pDemod) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = sony_demod_isdbc_chbond_monitor_BondStat (pDemod, &chbondState);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (!chbondState.bondOK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_HW_STATE);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit Name meaning
|
||||
* -----------------------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 52h [0] IREG_VERNUMCHG0 from Ext0
|
||||
* <SLV-T> 03h 52h [1] IREG_VERNUMCHG1 from Ext1
|
||||
* <SLV-T> 03h 52h [2] IREG_VERNUMCHG2 from Ext2
|
||||
* <SLV-T> 03h 52h [3] IREG_VERNUMCHG3 from internal dmd
|
||||
* IREG_VERNUMCHGx 0:TSMF version number change is not detected. 1:TSMF version number change is detected
|
||||
*/
|
||||
if (pDemod->pI2c->ReadRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x52, &data, 1) != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
|
||||
*pVersionChange = data & 0x0F;
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_ClearVersionChange (sony_demod_t * pDemod)
|
||||
{
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_ClearVersionChange");
|
||||
|
||||
if (!pDemod) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pDemod->chbondConfig != SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
/* For ISDB-C channel bonding only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/*
|
||||
* slave Bank Addr Bit default Value Name
|
||||
* -----------------------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 54h [0] 1'b0 1'b1 OREG_CLR_VERNUMCHG
|
||||
*/
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x54, 0x01) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_StreamType (sony_demod_t * pDemod,
|
||||
sony_isdbc_chbond_stream_type_t * pStreamType)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
sony_demod_isdbc_chbond_state_t chbondState;
|
||||
uint8_t data;
|
||||
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_monitor_StreamType");
|
||||
|
||||
if ((!pDemod) || (!pStreamType)){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Software state check */
|
||||
if (pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
|
||||
/* This api is accepted in Active state only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if ((pDemod->system != SONY_DTV_SYSTEM_ISDBC) && (pDemod->chbondConfig) != SONY_DEMOD_CHBOND_CONFIG_ISDBC) {
|
||||
/* Not ISDB-C and Channel Boding is not enable */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Freeze registers */
|
||||
if (SLVT_FreezeReg (pDemod) != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
result = sony_demod_isdbc_chbond_monitor_BondStat (pDemod, &chbondState);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (!chbondState.bondOK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_HW_STATE);
|
||||
}
|
||||
|
||||
/* Set SLV-T Bank : 0x03 */
|
||||
if (pDemod->pI2c->WriteOneRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x00, 0x03) != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
/* slave Bank Addr Bit Name meaning
|
||||
* ---------------------------------------------------------------------------------------------------------------------------------------
|
||||
* <SLV-T> 03h 25h [6] IREG_STREAMTYPE 0:TS output, 1:TLV output
|
||||
*/
|
||||
|
||||
if (pDemod->pI2c->ReadRegister (pDemod->pI2c, pDemod->i2cAddressSLVT, 0x25, &data, 1) != SONY_RESULT_OK) {
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_I2C);
|
||||
}
|
||||
|
||||
SLVT_UnFreezeReg (pDemod);
|
||||
|
||||
if (data & 0x40) {
|
||||
*pStreamType = SONY_ISDBC_CHBOND_STREAM_TYPE_TLV;
|
||||
} else {
|
||||
*pStreamType = SONY_ISDBC_CHBOND_STREAM_TYPE_TS_NONE;
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_TSMFHeaderExt (sony_demod_t * pDemod,
|
||||
sony_isdbc_tsmf_header_t * pTSMFHeader,
|
||||
sony_isdbc_chbond_tsmf_header_ext_t * pTSMFHeaderExt)
|
||||
{
|
||||
int i;
|
||||
SONY_TRACE_ENTER ("sony_demod_isdbc_chbond_monitor_TSMFHeaderExt");
|
||||
|
||||
if ((!pDemod) || (!pTSMFHeader) || (!pTSMFHeaderExt)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
memcpy(&pTSMFHeaderExt->aceewData[0], &pTSMFHeader->privateData[0], 26);
|
||||
for (i = 0; i < 8; i++) {
|
||||
pTSMFHeaderExt->streamType[i] = (sony_isdbc_chbond_stream_type_t)((pTSMFHeader->privateData[26] >> (7 - i)) & 0x01);
|
||||
}
|
||||
for (i = 0; i < 7; i++) {
|
||||
pTSMFHeaderExt->streamType[i + 8] = (sony_isdbc_chbond_stream_type_t)((pTSMFHeader->privateData[27] >> (7 - i)) & 0x01);
|
||||
}
|
||||
pTSMFHeaderExt->groupID = pTSMFHeader->privateData[28];
|
||||
pTSMFHeaderExt->numCarriers = pTSMFHeader->privateData[29];
|
||||
pTSMFHeaderExt->carrierSequence = pTSMFHeader->privateData[30];
|
||||
pTSMFHeaderExt->numFrames = (pTSMFHeader->privateData[31] >> 4) & 0x0F;
|
||||
pTSMFHeaderExt->framePosition = pTSMFHeader->privateData[31] & 0x0F;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
+223
@@ -0,0 +1,223 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/12/13
|
||||
Modification ID : e402a4dcb0e51a00c34b174334c082c1211eebf1
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_demod_isdbc_chbond.h
|
||||
|
||||
This file provides the demodulator control and monitor interface for ISDB-C channel bonding.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef SONY_DEMOD_ISDBC_CHBOND_H
|
||||
#define SONY_DEMOD_ISDBC_CHBOND_H
|
||||
|
||||
#include "../sony_demod.h"
|
||||
#include "sony_isdbc_chbond.h"
|
||||
#include "sony_isdbc.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Structs
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Channel bonding state.
|
||||
|
||||
@note For each members, 1 is set if each check is OK.
|
||||
*/
|
||||
typedef struct {
|
||||
uint8_t bondOK; /**< Bonding OK or not */
|
||||
uint8_t groupIDCheck; /**< Group ID values are same or not */
|
||||
uint8_t streamTypeCheck; /**< Stream type values are same or not */
|
||||
uint8_t numCarriersCheck; /**< Number of carriers values are same or not */
|
||||
uint8_t carrierSeqCheck; /**< Carrier sequence value check is OK or not */
|
||||
uint8_t calcNumCarriersCheck; /**< Number of valid input carriers are OK or not */
|
||||
} sony_demod_isdbc_chbond_state_t;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Enable/disable ISDB-C channel bonding function.
|
||||
|
||||
This API is called internally to enable/disable channel bonding.
|
||||
Note that ISDB-C channel bonding function is available on CXD2878 family only.
|
||||
|
||||
@param pDemod The demodulator instance
|
||||
@param enable Enable/disable setting.
|
||||
- 0: Disable
|
||||
- 1: Enable
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_Enable (sony_demod_t * pDemod,
|
||||
uint8_t enable);
|
||||
|
||||
/**
|
||||
@brief TSMF TS selection after channel bonding.
|
||||
|
||||
@param pDemod The demodulator instance
|
||||
@param tsidType Absolute TSID or relative TS number selection
|
||||
@param tsid TSID or relative TS number
|
||||
@param networkId Network ID. Ignored if relative TS number is selected.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_SetTSMFConfig (sony_demod_t * pDemod,
|
||||
sony_isdbc_tsid_type_t tsidType,
|
||||
uint16_t tsid,
|
||||
uint16_t networkId);
|
||||
|
||||
/**
|
||||
@brief Soft reset the ISDB-C channel bonding function.
|
||||
|
||||
@param pDemod The demod instance.
|
||||
|
||||
@return SONY_RESULT_OK if successfully reset.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_SoftReset (sony_demod_t * pDemod);
|
||||
|
||||
/**
|
||||
@brief Channel bonding status monitor (instant)
|
||||
|
||||
@param pDemod The demodulator instance
|
||||
@param pState Channel bonding state
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_BondStat (sony_demod_t * pDemod,
|
||||
sony_demod_isdbc_chbond_state_t * pState);
|
||||
|
||||
/**
|
||||
@brief Channel bonding status monitor (hold type)
|
||||
|
||||
@note This API is used to know some bonding error occurred or not in long time region.
|
||||
If a error is detected, member of sony_demod_isdbc_chbond_state_t become 0.
|
||||
::sony_demod_isdbc_chbond_ClearBondStat can be used to clear error state.
|
||||
|
||||
@param pDemod The demodulator instance
|
||||
@param pState Channel bonding state
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_BondStat_hold (sony_demod_t * pDemod,
|
||||
sony_demod_isdbc_chbond_state_t * pState);
|
||||
|
||||
/**
|
||||
@brief Clear the channel bonding status monitor (hold type).
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_ClearBondStat (sony_demod_t * pDemod);
|
||||
|
||||
/**
|
||||
@brief TLV conversion error monitor. (hold type)
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pError If 1, TLV conversion error is detected.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_TLVConvError (sony_demod_t * pDemod,
|
||||
uint8_t * pError);
|
||||
|
||||
/**
|
||||
@brief Clear the TLV conversion error monitor.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_ClearTLVConvError (sony_demod_t * pDemod);
|
||||
|
||||
/**
|
||||
@brief Carrier delay monitor.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pDelay Delay between valid input carriers. Please divide by 96 to convert us unit.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_CarrierDelay (sony_demod_t * pDemod,
|
||||
uint32_t * pDelay);
|
||||
|
||||
/**
|
||||
@brief Emergency Warning Broadcasting System(EWS) detection monitor. (hold type)
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pEWSChange EWS change detection flag.
|
||||
Bit[0] : Stream from external demod 0
|
||||
Bit[1] : Stream from external demod 1
|
||||
Bit[2] : Stream from external demod 2
|
||||
Bit[3] : Stream from internal demod
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_EWSChange (sony_demod_t * pDemod,
|
||||
uint8_t * pEWSChange);
|
||||
|
||||
/**
|
||||
@brief Clear the EWS detection flag.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_ClearEWSChange (sony_demod_t * pDemod);
|
||||
|
||||
/**
|
||||
@brief TSMF version number change monitor. (hold type)
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pVersionChange TSMF version change detection flag.
|
||||
Bit[0] : Stream from external demod 0
|
||||
Bit[1] : Stream from external demod 1
|
||||
Bit[2] : Stream from external demod 2
|
||||
Bit[3] : Stream from internal demod
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_VersionChange (sony_demod_t * pDemod,
|
||||
uint8_t * pVersionChange);
|
||||
|
||||
/**
|
||||
@brief Clear the TSMF version change detection flag.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_ClearVersionChange (sony_demod_t * pDemod);
|
||||
|
||||
/**
|
||||
@brief Stream type (TLV or TS) monitor.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pStreamType Stream type.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_StreamType (sony_demod_t * pDemod,
|
||||
sony_isdbc_chbond_stream_type_t * pStreamType);
|
||||
|
||||
/**
|
||||
@brief TSMF header extension information monitor.
|
||||
|
||||
@note This API only convert "private data" in sony_isdbc_tsmf_header_t struct.
|
||||
::sony_demod_isdbc_monitor_TSMFHeader should be called before this API
|
||||
to get sony_isdbc_tsmf_header_t data.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pTSMFHeader TSMF header information got by ::sony_demod_isdbc_monitor_TSMFHeader.
|
||||
@param pTSMFHeaderExt Converted TSMF header extension information for channel bonding case.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_chbond_monitor_TSMFHeaderExt (sony_demod_t * pDemod,
|
||||
sony_isdbc_tsmf_header_t * pTSMFHeader,
|
||||
sony_isdbc_chbond_tsmf_header_ext_t * pTSMFHeaderExt);
|
||||
|
||||
#endif /* SONY_DEMOD_ISDBC_CHBOND_H */
|
||||
+1193
File diff suppressed because it is too large
Load Diff
+234
@@ -0,0 +1,234 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/07/27
|
||||
Modification ID : ff73ffebff57618d6a5aa6e2aa9eb009b86060d1
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_demod_isdbc_monitor.h
|
||||
|
||||
This file provides the ISDB-CC demodulator monitor interface.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef SONY_DEMOD_ISDBC_MONITOR_H
|
||||
#define SONY_DEMOD_ISDBC_MONITOR_H
|
||||
|
||||
#include "../sony_demod.h"
|
||||
#include "sony_isdbc.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Acquisition state monitor.
|
||||
|
||||
@note Note that early unlock condition should be used in tuning stage ONLY
|
||||
to detect that there are no desired signal in current frequency quickly.
|
||||
After tuning, early unlock condition should NOT be used to
|
||||
know current demodulator lock status.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pARLock The demodulator lock state.
|
||||
- 0: AR not Locked,
|
||||
- 1: AR Locked,
|
||||
@param pTSLockStat Indicates the TS lock condition.
|
||||
- 0: TS not locked.
|
||||
- 1: TS locked.
|
||||
@param pUnlockDetected Indicates the early unlock condition, only valid
|
||||
when demodulator is set to ISDB-C scan mode enabled.
|
||||
- 0: No early unlock.
|
||||
- 1: Early unlock.
|
||||
|
||||
@return SONY_RESULT_OK on success and pARLock, pTSLockStat and pUnlockDetected are valid.
|
||||
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_SyncStat (sony_demod_t * pDemod,
|
||||
uint8_t * pARLock,
|
||||
uint8_t * pTSLockStat,
|
||||
uint8_t * pUnlockDetected);
|
||||
|
||||
/**
|
||||
@brief Monitor the IFAGC value. The actual dB gain is dependent on the attached tuner.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pIFAGCOut Value of IFAGC output register value. Unitless.
|
||||
|
||||
@return SONY_RESULT_OK if successful and pIFAGCOut valid.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_IFAGCOut (sony_demod_t * pDemod,
|
||||
uint32_t * pIFAGCOut);
|
||||
|
||||
/**
|
||||
@brief Monitor the constellation of the currently tuned channel.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pQAM The monitored constellation.
|
||||
|
||||
@return SONY_RESULT_OK if successful and pQAM valid.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_QAM (sony_demod_t * pDemod,
|
||||
sony_isdbc_constellation_t * pQAM);
|
||||
|
||||
/**
|
||||
@brief Monitor the symbol rate of the currently tuned channel.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pSymRate Symbol rate (Symbol/sec).
|
||||
|
||||
@return SONY_RESULT_OK if successful and pSymRate valid.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_SymbolRate (sony_demod_t * pDemod,
|
||||
uint32_t * pSymRate);
|
||||
|
||||
/**
|
||||
@brief Monitors the detected carrier offset of the currently tuned channel.
|
||||
|
||||
To get the estimated center frequency of the current channel:
|
||||
Freq_Est = Freq_Tune + pOffset;
|
||||
|
||||
This function will compensate for an inverting tuner architecture if the
|
||||
demodulator has been configured accordignly using ::SONY_DEMOD_CONFIG_SPECTRUM_INV
|
||||
config option for ::sony_demod_SetConfig.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pOffset Carrier offset value(kHz).
|
||||
|
||||
@return SONY_RESULT_OK if successful and pOffset valid.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_CarrierOffset (sony_demod_t * pDemod,
|
||||
int32_t * pOffset);
|
||||
|
||||
/**
|
||||
@brief Monitors the channel spectrum sense.
|
||||
|
||||
To ensure correct polarity detection
|
||||
please use the ::SONY_DEMOD_CONFIG_SPECTRUM_INV config option in
|
||||
::sony_demod_SetConfig to select the appropriate spectrum inversion
|
||||
for the tuner output.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pSense Indicates the spectrum sense.
|
||||
|
||||
@return SONY_RESULT_OK if successful and pSense valid.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_SpectrumSense (sony_demod_t * pDemod,
|
||||
sony_demod_terr_cable_spectrum_sense_t * pSense);
|
||||
|
||||
/**
|
||||
@brief Monitors the estimated SNR register value, clipped to a
|
||||
maximum of 50dB.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pSNR The estimated SNR value in dB x 1000.
|
||||
|
||||
@return SONY_RESULT_OK if successful and pSNR valid.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_SNR (sony_demod_t * pDemod,
|
||||
int32_t * pSNR);
|
||||
|
||||
/**
|
||||
@brief Monitor the Pre-RS BER.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pBER BER value (Pre-Reed Solomon decoder) x 1e7.
|
||||
|
||||
@return SONY_RESULT_OK if successful and pBER valid.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_PreRSBER (sony_demod_t * pDemod,
|
||||
uint32_t * pBER);
|
||||
|
||||
/**
|
||||
@brief Monitors the number RS (Reed-Solomon) errors detected by the
|
||||
RS decoder over 1 second. Also known as the code word reject count.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pPEN The number of RS errors detected over 1 second.
|
||||
|
||||
@return SONY_RESULT_OK if successful and pPEN valid.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_PacketErrorNumber (sony_demod_t * pDemod,
|
||||
uint32_t * pPEN);
|
||||
|
||||
/**
|
||||
@brief Monitor the ISDB-C PER (Packet Error Rate).
|
||||
|
||||
@param pDemod The demod instance.
|
||||
@param pPER The estimated PER x 1e6.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_PER (sony_demod_t * pDemod,
|
||||
uint32_t * pPER);
|
||||
|
||||
/**
|
||||
@brief Monitor TSMF Header lock status
|
||||
|
||||
@param pDemod The demod instance.
|
||||
@param pTSMFLock Indicates the TSMF header lock status
|
||||
- 0: TSMF header not locked.
|
||||
- 1: TSMF locked.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_TSMFLock (sony_demod_t * pDemod, uint8_t * pTSMFLock);
|
||||
|
||||
/**
|
||||
@brief Monitor the currently acquired TSMF Header information.
|
||||
|
||||
This will return SONY_RESULT_ERROR_HW_STATE if the register value is not valid.
|
||||
|
||||
@param pDemod The demod instance.
|
||||
@param pTSMFHeader TSMF Header information.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_TSMFHeader (sony_demod_t * pDemod, sony_isdbc_tsmf_header_t * pTSMFHeader);
|
||||
|
||||
/**
|
||||
@brief Monitor the version number change in TSMF header.
|
||||
|
||||
@note This API is supported in CXD2878 family only.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pVersionChange The value of EWS change detection flag.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_VersionChange (sony_demod_t * pDemod,
|
||||
uint8_t * pVersionChange);
|
||||
|
||||
/**
|
||||
@brief Clear the version number change detection flag.
|
||||
|
||||
@note This API is supported in CXD2878 family only.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_ClearVersionChange (sony_demod_t * pDemod);
|
||||
|
||||
/**
|
||||
@brief Monitor the Emergency Warning Broadcasting System(EWS) detection flag in TSMF header.
|
||||
|
||||
@note This API is supported in CXD2878 family only.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@param pEWSChange The value of EWS change detection flag.
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_monitor_EWSChange (sony_demod_t * pDemod,
|
||||
uint8_t * pEWSChange);
|
||||
|
||||
/**
|
||||
@brief Clear the Emergency Warning Broadcasting System(EWS) detection flag.
|
||||
|
||||
@note This API is supported in CXD2878 family only.
|
||||
|
||||
@param pDemod The demodulator instance.
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_demod_isdbc_ClearEWSChange (sony_demod_t * pDemod);
|
||||
|
||||
#endif /* SONY_DEMOD_ISDBC_MONITOR_H */
|
||||
+213
@@ -0,0 +1,213 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/07/05
|
||||
Modification ID : c7c68d70868a4a9fb9e0f480d8b940e8a1e8f651
|
||||
------------------------------------------------------------------------------*/
|
||||
#include "../sony_integ.h"
|
||||
#include "sony_integ_isdbc.h"
|
||||
#include "../sony_demod.h"
|
||||
#include "sony_demod_isdbc.h"
|
||||
#include "sony_demod_isdbc_monitor.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
sony_result_t sony_integ_isdbc_Tune (sony_integ_t * pInteg,
|
||||
sony_isdbc_tune_param_t * pTuneParam)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("sony_integ_isdbc_Tune");
|
||||
|
||||
if ((!pInteg) || (!pTuneParam) || (!pInteg->pDemod)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if ((pInteg->pDemod->state != SONY_DEMOD_STATE_SLEEP) && (pInteg->pDemod->state != SONY_DEMOD_STATE_ACTIVE)) {
|
||||
/* This api is accepted in Sleep and Active states only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Confirm Tune parameters */
|
||||
if (0 == pTuneParam->centerFreqKHz){
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
/* Tune the demodulator */
|
||||
result = sony_demod_isdbc_Tune (pInteg->pDemod, pTuneParam);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if ((pInteg->pTuner) && (pInteg->pTuner->TerrCableTune)) {
|
||||
/* Enable the I2C repeater */
|
||||
result = sony_demod_I2cRepeaterEnable (pInteg->pDemod, 0x01);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* Tune the RF part */
|
||||
result = pInteg->pTuner->TerrCableTune (pInteg->pTuner, pTuneParam->centerFreqKHz, SONY_DTV_SYSTEM_ISDBC, SONY_DTV_BW_6_MHZ);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* Disable the I2C repeater */
|
||||
result = sony_demod_I2cRepeaterEnable (pInteg->pDemod, 0x00);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
|
||||
/* Reset the demod to enable acquisition */
|
||||
result = sony_demod_TuneEnd (pInteg->pDemod);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* Wait for demodulator (TS) lock */
|
||||
result = sony_integ_isdbc_WaitTSLock (pInteg);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_integ_isdbc_WaitTSLock (sony_integ_t * pInteg)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
sony_demod_lock_result_t lock = SONY_DEMOD_LOCK_RESULT_NOTDETECT;
|
||||
sony_stopwatch_t timer;
|
||||
uint8_t continueWait = 1;
|
||||
uint32_t elapsed = 0;
|
||||
|
||||
SONY_TRACE_ENTER ("sony_integ_isdbc_WaitTSLock");
|
||||
|
||||
if ((!pInteg) || (!pInteg->pDemod)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pInteg->pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
|
||||
/* This api is accepted in Active state only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
/* Wait for demod lock */
|
||||
result = sony_stopwatch_start (&timer);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
result = sony_stopwatch_elapsed(&timer, &elapsed);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (elapsed >= SONY_ISDBC_WAIT_DEMOD_LOCK) {
|
||||
continueWait = 0;
|
||||
}
|
||||
|
||||
result = sony_demod_isdbc_CheckTSLock (pInteg->pDemod, &lock);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
switch (lock) {
|
||||
case SONY_DEMOD_LOCK_RESULT_LOCKED:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
|
||||
case SONY_DEMOD_LOCK_RESULT_UNLOCKED:
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_UNLOCK);
|
||||
|
||||
default:
|
||||
/* continue waiting... */
|
||||
break;
|
||||
}
|
||||
|
||||
/* Check cancellation. */
|
||||
result = sony_integ_CheckCancellation (pInteg);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
if (continueWait) {
|
||||
result = sony_stopwatch_sleep (&timer, SONY_ISDBC_WAIT_LOCK_INTERVAL);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
}
|
||||
else {
|
||||
result = SONY_RESULT_ERROR_TIMEOUT;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
sony_result_t sony_integ_isdbc_monitor_RFLevel (sony_integ_t * pInteg, int32_t * pRFLeveldB)
|
||||
{
|
||||
sony_result_t result = SONY_RESULT_OK;
|
||||
|
||||
SONY_TRACE_ENTER ("sony_integ_isdbc_monitor_RFLevel");
|
||||
|
||||
if ((!pInteg) || (!pInteg->pDemod) || (!pRFLeveldB)) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_ARG);
|
||||
}
|
||||
|
||||
if (pInteg->pDemod->state != SONY_DEMOD_STATE_ACTIVE) {
|
||||
/* This api is accepted in Active state only */
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if (pInteg->pDemod->system != SONY_DTV_SYSTEM_ISDBC) {
|
||||
/* Not ISDB-C*/
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_SW_STATE);
|
||||
}
|
||||
|
||||
if (!pInteg->pTuner) {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
}
|
||||
|
||||
if (pInteg->pTuner->rfLevelFuncTerr == SONY_TUNER_RFLEVEL_FUNC_READ && pInteg->pTuner->ReadRFLevel) {
|
||||
/* Enable the I2C repeater */
|
||||
result = sony_demod_I2cRepeaterEnable (pInteg->pDemod, 0x01);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
result = pInteg->pTuner->ReadRFLevel (pInteg->pTuner, pRFLeveldB);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
/* Disable the I2C repeater */
|
||||
result = sony_demod_I2cRepeaterEnable (pInteg->pDemod, 0x00);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
} else if (pInteg->pTuner->rfLevelFuncTerr == SONY_TUNER_RFLEVEL_FUNC_CALCFROMAGC
|
||||
&& pInteg->pTuner->CalcRFLevelFromAGC) {
|
||||
uint32_t ifAgc;
|
||||
|
||||
result = sony_demod_isdbc_monitor_IFAGCOut(pInteg->pDemod, &ifAgc);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
|
||||
result = pInteg->pTuner->CalcRFLevelFromAGC (pInteg->pTuner, ifAgc, pRFLeveldB);
|
||||
if (result != SONY_RESULT_OK) {
|
||||
SONY_TRACE_RETURN (result);
|
||||
}
|
||||
} else {
|
||||
SONY_TRACE_RETURN (SONY_RESULT_ERROR_NOSUPPORT);
|
||||
}
|
||||
|
||||
/* dBm * 100 -> dBm * 1000 */
|
||||
*pRFLeveldB *= 10;
|
||||
|
||||
SONY_TRACE_RETURN (SONY_RESULT_OK);
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/07/27
|
||||
Modification ID : ff73ffebff57618d6a5aa6e2aa9eb009b86060d1
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_integ_isdbc.h
|
||||
|
||||
This file provides the integration layer interface for ISDB-C specific
|
||||
demodulator functions.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef SONY_INTEG_ISDBC_H
|
||||
#define SONY_INTEG_ISDBC_H
|
||||
|
||||
#include "../sony_demod.h"
|
||||
#include "../sony_integ.h"
|
||||
#include "sony_demod_isdbc.h"
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Defines
|
||||
------------------------------------------------------------------------------*/
|
||||
#define SONY_ISDBC_WAIT_DEMOD_LOCK 1000 /**< 1s timeout for wait demodulator lock */
|
||||
#define SONY_ISDBC_WAIT_LOCK_INTERVAL 10 /**< 10ms interval for demodulator lock polls */
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Functions
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Performs acquisition to the channel.
|
||||
|
||||
Blocks the calling thread until the TS has locked or has timed out.
|
||||
Use ::sony_integ_Cancel to cancel the operation at any time.
|
||||
|
||||
@param pInteg The driver instance.
|
||||
@param pTuneParam The parameters required for the tune.
|
||||
|
||||
@return SONY_RESULT_OK if tuned successfully to the channel.
|
||||
*/
|
||||
sony_result_t sony_integ_isdbc_Tune (sony_integ_t * pInteg,
|
||||
sony_isdbc_tune_param_t * pTuneParam);
|
||||
|
||||
/**
|
||||
@brief Polls the demodulator waiting for TS lock over a maximum of 1s at 10ms intervals
|
||||
|
||||
@param pInteg The driver instance
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_isdbc_WaitTSLock (sony_integ_t * pInteg);
|
||||
|
||||
/**
|
||||
@brief RF level monitor function.
|
||||
|
||||
The RF Level monitor calculates an estimated RF level based on either the demodulator
|
||||
IFAGC level or tuner internal RSSI monitor. If any compensation for external hardware
|
||||
such as, LNA, attenuators is required, then the user should make adjustment in the
|
||||
corresponding function.
|
||||
|
||||
@param pInteg The driver instance
|
||||
@param pRFLeveldB The RF Level estimation in dB * 1000
|
||||
|
||||
@return SONY_RESULT_OK if successful.
|
||||
*/
|
||||
sony_result_t sony_integ_isdbc_monitor_RFLevel (sony_integ_t * pInteg, int32_t * pRFLeveldB);
|
||||
|
||||
#endif /* SONY_INTEG_ISDBC_H */
|
||||
Executable
+78
@@ -0,0 +1,78 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2016-2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/08/30
|
||||
Modification ID : 902dae58eb5249e028ccc5d7f60bb66cca9b43a9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_isdbc.h
|
||||
|
||||
This file provides ISDB-C related type definitions.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef SONY_ISDBC_H
|
||||
#define SONY_ISDBC_H
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Enumerations
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Type of TSID.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_ISDBC_TSID_TYPE_TSID, /**< TSID(16bit) */
|
||||
SONY_ISDBC_TSID_TYPE_RELATIVE_TS_NUMBER /**< Relative TS number */
|
||||
} sony_isdbc_tsid_type_t;
|
||||
|
||||
/**
|
||||
@brief ISDB-C constellation.
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_ISDBC_CONSTELLATION_RESERVED_0, /**< RESERVED */
|
||||
SONY_ISDBC_CONSTELLATION_RESERVED_1, /**< RESERVED */
|
||||
SONY_ISDBC_CONSTELLATION_64QAM, /**< 64-QAM */
|
||||
SONY_ISDBC_CONSTELLATION_RESERVED_3, /**< RESERVED */
|
||||
SONY_ISDBC_CONSTELLATION_256QAM /**< 256-QAM */
|
||||
} sony_isdbc_constellation_t;
|
||||
|
||||
/**
|
||||
@brief TSMF receive status
|
||||
*/
|
||||
typedef enum {
|
||||
SONY_ISDBC_TSMF_RECEIVE_STATUS_GOOD, /**< Receive status is good */
|
||||
SONY_ISDBC_TSMF_RECEIVE_STATUS_NORMAL, /**< Receive status is normal */
|
||||
SONY_ISDBC_TSMF_RECEIVE_STATUS_BAD, /**< Receive status is bad */
|
||||
SONY_ISDBC_TSMF_RECEIVE_STATUS_UNDEFINED /**< Receive status is undefined */
|
||||
} sony_isdbc_tsmf_receive_status_t;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Structs
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief TSMF Header information structure.
|
||||
*/
|
||||
typedef struct sony_isdbc_tsmf_header_t {
|
||||
/**
|
||||
@brief TSMF Synchronization error.
|
||||
|
||||
The following cases, Synchronization error will occur.
|
||||
- The header can not be detected after 53 slot from the previous header detected.
|
||||
- If TSID, Network ID or Relative TS number specified in sony_demod_isdbc_Tune argument does not exist.
|
||||
In this case, receiveStatusSelected will become SONY_ISDBC_TSMF_RECEIVE_STATUS_BAD.
|
||||
*/
|
||||
uint8_t syncError;
|
||||
uint8_t versionNumber; /**< Version number */
|
||||
uint8_t tsNumMode; /**< Relative TS number mode 0:Static assignment 1:Reserved */
|
||||
uint8_t frameType; /**< Frame type */
|
||||
uint8_t tsStatus[15]; /**< Status of each relative TS ID 0x01:Multiples 0x0F:Unused Others:Reserved */
|
||||
sony_isdbc_tsmf_receive_status_t receiveStatusSelected; /**< Receive status of the selected relative TS number */
|
||||
sony_isdbc_tsmf_receive_status_t receiveStatus[15]; /**< Receive status of each relative TS number */
|
||||
uint16_t tsid[15]; /**< TS ID of each relative TS number */
|
||||
uint16_t networkId[15]; /**< Network ID of each relative TS number */
|
||||
uint8_t relativeTSNumForEachSlot[52]; /**< Relative TS number of each Slot number */
|
||||
uint8_t emergency; /**< Emergency indicator 0:Emergency boot control is DISABLED 1:Emergency boot control is ENABLED */
|
||||
uint8_t privateData[85]; /**< Private data */
|
||||
} sony_isdbc_tsmf_header_t;
|
||||
|
||||
#endif /* SONY_ISDBC_H */
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
/*------------------------------------------------------------------------------
|
||||
Copyright 2018 Sony Semiconductor Solutions Corporation
|
||||
|
||||
Last Updated : 2018/08/30
|
||||
Modification ID : 902dae58eb5249e028ccc5d7f60bb66cca9b43a9
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@file sony_isdbc_chbond.h
|
||||
|
||||
This file provides ISDB-C channel bonding (J.183) related type definitions.
|
||||
*/
|
||||
/*----------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef SONY_ISDBC_CHBOND_H
|
||||
#define SONY_ISDBC_CHBOND_H
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Enumerations
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief Stream Type defined in TSMF header extension information.
|
||||
*/
|
||||
typedef enum sony_isdbc_chbond_stream_type_t {
|
||||
SONY_ISDBC_CHBOND_STREAM_TYPE_TLV, /**< TLV */
|
||||
SONY_ISDBC_CHBOND_STREAM_TYPE_TS_NONE /**< TS or no stream */
|
||||
} sony_isdbc_chbond_stream_type_t;
|
||||
|
||||
/*------------------------------------------------------------------------------
|
||||
Structs
|
||||
------------------------------------------------------------------------------*/
|
||||
/**
|
||||
@brief TSMF Header extension information structure for channel bonding case.
|
||||
*/
|
||||
typedef struct sony_isdbc_chbond_tsmf_header_ext_t {
|
||||
uint8_t aceewData[26]; /**< 204 bit ISDB-T AC carrier data including EEW information + 4'b0 */
|
||||
sony_isdbc_chbond_stream_type_t streamType[15]; /**< Stream type (TLV or TS) */
|
||||
uint8_t groupID; /**< Group ID */
|
||||
uint8_t numCarriers; /**< Number of carriers for channel bonding (2 - 255) */
|
||||
uint8_t carrierSequence; /**< Order of carrier to bond carriers correctly */
|
||||
uint8_t numFrames; /**< Number of extension frames in super frame */
|
||||
uint8_t framePosition; /**< Position of the extension frame in the super frame */
|
||||
} sony_isdbc_chbond_tsmf_header_ext_t;
|
||||
|
||||
#endif /* SONY_ISDBC_CHBOND_H */
|
||||
Reference in New Issue
Block a user