📄 stv0299drv.c
字号:
bValue[0x20] = 0x50;
bValue[0x21] = 0x10;
bValue[0x22] = 0x00;
bValue[0x23] = 0x00;
bValue[0x24] = 0x37;
bValue[0x25] = 0xbc;
bValue[0x26] = 0x00;
bValue[0x27] = 0x00;
if(g_nASIInSelect[bTunerIndex] == 1)
bValue[ 0x28 ] = 0x01 ; // FEC Mode: QPSK, Parallel, Normal Impedance
else
bValue[ 0x28 ] = 0x00 ; // FEC Mode: QPSK, Parallel, Normal Impedance
bValue[0x29] = 0x1e;
bValue[0x2a] = 0x14;
bValue[0x2b] = 0x1f;
bValue[0x2c] = 0x09;
bValue[0x2d] = 0x0a;
bValue[0x2e] = 0x00;
bValue[0x2f] = 0x00;
bValue[0x30] = 0x00;
bValue[0x31] = 0x1f;
bValue[0x32] = 0x19;
bValue[0x33] = 0xfc;
bValue[0x34] = 0x13;
#endif
break;
case LGF001F:
bValue[ 0 ] = 0xa1 ; // Chip ID, Read Only
bValue[ 1 ] = 0x15 ; // K = 0, M = 21
bValue[ 2 ] = 0x00 ; // VCO ON, P = 0 fVCO = fXTAL*4*(M+1)/(K+1) = 352MHz
bValue[ 3 ] = 0x00 ;
bValue[ 4 ] = 0x7d ; // F22 = fVCO / 128 / F22FR = 22KHz
bValue[ 5 ] = 0x05 ; // Tuner I2C Not Connect
bValue[ 6 ] = 0xA2 ; // DAC Duty cycle modulated at fCLK / 4
bValue[ 7 ] = 0x00 ; // DAC = 0x200
bValue[ 8 ] = 0x00 ;
bValue[ 9 ] = 0x00 ; // DiSEqC FIFO
bValue[ 0x0a ] = 0x00 ; // DiSEqC staatus
bValue[ 0x0b ] = 0x00 ; // Reserved
// bValue[ 0x0c ] = 0x00 ; // 00 for IQ 01 for I,-Q
bValue[ 0x0c ] = 0xf1 ; // 00 for IQ 01 for I,-Q -by yxb 040923
bValue[ 0x0d ] = 0x81 ; // beta_agc1 = 1
bValue[ 0x0e ] = 0x44 ;
bValue[ 0x0f ] = 0x14 ;
bValue[ 0x10 ] = 0x3c ;
bValue[ 0x11 ] = 0x84 ; // must program to 0x84
bValue[ 0x12 ] = 0xf7 ;
bValue[ 0x13 ] = 0x98 ; // Derotator on or off, alpha_carrier
bValue[ 0x14 ] = 0x95 ; // Beta_carrier!!!
bValue[ 0x15 ] = 0xc9 ; // Carrier Lock Detector Threshold
bValue[ 0x16 ] = 0x1a ; // AGC1 integrator value
bValue[ 0x17 ] = 0x56 ; // Read Only
bValue[ 0x18 ] = 0x0c ; // AGC2 Integrator MSB bits read only
bValue[ 0x19 ] = 0x0b ; // AGC2 Integrator LSB bits read only
bValue[ 0x1a ] = 0x84 ; // timing frequency register
bValue[ 0x1b ] = 0x00 ; // QPSk lock status, if 80 carrier found if 88 data found
bValue[ 0x1c ] = 0x27 ; // Carrier lock detector value read only
bValue[ 0x1d ] = 0x0c ; // Error Count register MSB
bValue[ 0x1e ] = 0x0c ; // Error Count register LSB
bValue[ 0x1f ] = 0x00 ; // fs MSB [19:12]
bValue[ 0x20 ] = 0x00 ; // fs Middle SB [11:04]
bValue[ 0x21 ] = 0x00 ; // fs LSB [03:00]
bValue[ 0x22 ] = 0x00 ; // Derotator Freuencyfs MSB
bValue[ 0x23 ] = 0x00 ; // Derotator Freuencyfs LSB
bValue[ 0x24 ] = 0x00 ; // Noise Indicator (MSB)
bValue[ 0x25 ] = 0x00 ; // Noise Indicator (LSB)
bValue[ 0x26 ] = 0x1d ; // Error Rate
bValue[ 0x27 ] = 0x00 ; // Reserved
if(g_nASIInSelect[bTunerIndex] == 1)
bValue[ 0x28 ] = 0x01 ; // FEC Mode: QPSK, Parallel, Normal Impedance
else
bValue[ 0x28 ] = 0x00 ; // FEC Mode: QPSK, Parallel, Normal Impedance
bValue[ 0x29 ] = 0x28 ; // Rate = 1/2 Threshold
bValue[ 0x2a ] = 0x14 ; // Rate = 2/3 Threshold
bValue[ 0x2b ] = 0x0f ; // Rate = 3/4 Threshold
bValue[ 0x2c ] = 0x09 ; // Rate = 5/6 Threshold
bValue[ 0x2d ] = 0x05 ; // Rate = 7/8 Threshold
bValue[ 0x2e ] = 0x00 ; // Reserved
bValue[ 0x2f ] = 0x00 ; // Reserved
bValue[ 0x30 ] = 0x00 ; // Reserved
bValue[ 0x31 ] = 0x1f ; // All punctured rates Enabled
bValue[ 0x32 ] = 0x19 ; // Viterbi and Synchro Search
bValue[ 0x33 ] = 0xfc ; // RS CONTROL
bValue[ 0x34 ] = 0x93 ; // Error Control
break;
case LG_S002F:
bValue[0x00] = 0xa1;
bValue[0x01] = 0x15;
bValue[0x02] = 0x00;
bValue[0x03] = 0x00;
bValue[0x04] = 0x7d;
bValue[0x05] = 0x85;
bValue[0x06] = 0x02;
bValue[0x07] = 0x00;
bValue[0x0b] = 0x00;
bValue[0x0c] = 0xf1;
bValue[0x0d] = 0x81;
bValue[0x0e] = 0x44;
bValue[0x0f] = 0x09;
bValue[0x10] = 0x3c;
bValue[0x11] = 0x84;
bValue[0x12] = 0xda;
bValue[0x13] = 0x97;
bValue[0x14] = 0x95;
bValue[0x15] = 0xc9;
bValue[0x16] = 0x22;//19
bValue[0x17] = 0x8c;
bValue[0x18] = 0x59;
bValue[0x19] = 0xf8;
bValue[0x1a] = 0x1d;
bValue[0x1b] = 0x9b;//02
bValue[0x1c] = 0x7f;
bValue[0x1d] = 0x00;
bValue[0x1e] = 0x00;
bValue[0x1f] = 0x50;
bValue[0x20] = 0x00;
bValue[0x21] = 0x00;
bValue[0x22] = 0x00;
bValue[0x23] = 0x00;
bValue[0x24] = 0x2a;//00
bValue[0x25] = 0x48;//00
bValue[0x26] = 0x00;
bValue[0x27] = 0x00;
if(g_nASIInSelect[bTunerIndex] == 1)
bValue[ 0x28 ] = 0x01 ; // FEC Mode: QPSK, Parallel, Normal Impedance
else
bValue[ 0x28 ] = 0x00 ; // FEC Mode: QPSK, Parallel, Normal Impedance
bValue[0x29] = 0x28;
bValue[0x2a] = 0x14;
bValue[0x2b] = 0x0f;
bValue[0x2c] = 0x09;
bValue[0x2d] = 0x09;
bValue[0x2e] = 0x00;
bValue[0x2f] = 0x00;
bValue[0x30] = 0x00;
bValue[0x31] = 0x1f;
bValue[0x32] = 0x18;
bValue[0x33] = 0xfc;//fe
bValue[0x34] = 0x13;
break;
case STB6K:
#if 1
bValue[0x00] = 0xa1;
bValue[0x01] = 0x15;
bValue[0x02] = 0x00;
bValue[0x03] = 0x00;
bValue[0x04] = 0x7d;
bValue[0x05] = 0x05;
bValue[0x06] = 0x02;
bValue[0x07] = 0x00;
bValue[0x08] = 0x03;
bValue[0x09] = 0x00;
bValue[0x0a] = 0x00;
bValue[0x0b] = 0x00;
bValue[0x0c] = 0x01;
bValue[0x0d] = 0x81;
bValue[0x0e] = 0x44;
bValue[0x0f] = 0x94;
bValue[0x10] = 0x3f;
bValue[0x11] = 0x84;
//
// [July 08, 2005]Modify by yuxibo in Istanbul.
//
//bValue[0x12] = 0xda; //set bit[6..4] to '111' will cause low symborate problem
bValue[0x12] = 0xb9;
bValue[0x13] = 0x98;
bValue[0x14] = 0x89;//
bValue[0x15] = 0xce;//
bValue[0x16] = 0xe8;
bValue[0x17] = 0x00;
bValue[0x18] = 0x19;
bValue[0x19] = 0x8b;
bValue[0x1a] = 0x00;
bValue[0x1b] = 0x82;
bValue[0x1c] = 0x7f;
bValue[0x1d] = 0x00;
bValue[0x1e] = 0x00;
bValue[0x1f] = 0x06;
bValue[0x20] = 0x50;
bValue[0x21] = 0x10;
bValue[0x22] = 0x00;
bValue[0x23] = 0x00;
bValue[0x24] = 0x37;
bValue[0x25] = 0xbc;
bValue[0x26] = 0x00;
bValue[0x27] = 0x00;
if(g_nASIInSelect[bTunerIndex] == 1)
bValue[ 0x28 ] = 0x01 ; // FEC Mode: QPSK, Parallel, Normal Impedance
else
bValue[ 0x28 ] = 0x00 ; // FEC Mode: QPSK, Parallel, Normal Impedance
//
//[July 08, 2005]Modify by yuxibo in Istanbul.
//
/*
bValue[0x29] = 0x1e;
bValue[0x2a] = 0x14;
bValue[0x2b] = 0x1f;
bValue[0x2c] = 0x09;
bValue[0x2d] = 0x0a;
*/
bValue[0x29] = 0x1e;
bValue[0x2a] = 0x14;
bValue[0x2b] = 0x0f;
bValue[0x2c] = 0x05;
bValue[0x2d] = 0x05;
bValue[0x2e] = 0x00;
bValue[0x2f] = 0x00;
bValue[0x30] = 0x00;
bValue[0x31] = 0x1f;
bValue[0x32] = 0x19;
bValue[0x33] = 0xfc;
bValue[0x34] = 0x13;
#else
bValue[0x00] = 0xa1;
bValue[0x01] = 0x15;
bValue[0x02] = 0x00;
bValue[0x03] = 0x00;
bValue[0x04] = 0x7d;
bValue[0x05] = 0x05;
bValue[0x06] = 0x02;
bValue[0x07] = 0x00;
bValue[0x08] = 0x03;
bValue[0x09] = 0x00;
bValue[0x0a] = 0x00;
bValue[0x0b] = 0x00;
bValue[0x0c] = 0x01;
bValue[0x0d] = 0x81;
bValue[0x0e] = 0x44;
bValue[0x0f] = 0x94;
bValue[0x10] = 0x3f;
bValue[0x11] = 0x84;
//
// [July 08, 2005]Modify by yuxibo in Istanbul.
//
//bValue[0x12] = 0xda; //set bit[6..4] to '111' will cause low symborate problem
bValue[0x12] = 0xb9;
bValue[0x13] = 0x98;
bValue[0x14] = 0x95;
bValue[0x15] = 0xc9;
bValue[0x16] = 0xeb;
bValue[0x17] = 0x00;
bValue[0x18] = 0x19;
bValue[0x19] = 0x8b;
bValue[0x1a] = 0x00;
bValue[0x1b] = 0x82;
bValue[0x1c] = 0x7f;
bValue[0x1d] = 0x00;
bValue[0x1e] = 0x00;
bValue[0x1f] = 0x06;
bValue[0x20] = 0x50;
bValue[0x21] = 0x10;
bValue[0x22] = 0x00;
bValue[0x23] = 0x00;
bValue[0x24] = 0x37;
bValue[0x25] = 0xbc;
bValue[0x26] = 0x00;
bValue[0x27] = 0x00;
if(g_nASIInSelect[bTunerIndex] == 1)
bValue[ 0x28 ] = 0x01 ; // FEC Mode: QPSK, Parallel, Normal Impedance
else
bValue[ 0x28 ] = 0x00 ; // FEC Mode: QPSK, Parallel, Normal Impedance
//
//[July 08, 2005]Modify by yuxibo in Istanbul.
//
/*
bValue[0x29] = 0x1e;
bValue[0x2a] = 0x14;
bValue[0x2b] = 0x1f;
bValue[0x2c] = 0x09;
bValue[0x2d] = 0x0a;
*/
bValue[0x29] = 0x1e;
bValue[0x2a] = 0x14;
bValue[0x2b] = 0x0f;
bValue[0x2c] = 0x05;
bValue[0x2d] = 0x05;
bValue[0x2e] = 0x00;
bValue[0x2f] = 0x00;
bValue[0x30] = 0x00;
bValue[0x31] = 0x1f;
bValue[0x32] = 0x19;
bValue[0x33] = 0xfc;
bValue[0x34] = 0x13;
#endif
break;
}
if (TS_SERIAL == g_nTSOutputMode[bTunerIndex])
{
bValue[ 0x28 ] |= 0x02 ; // FEC Mode: QPSK, Parallel, Normal Impedance
bValue[ 0x33 ] = 0xFE ; // RS CONTROL
}
ErrorCode = STV0299WrtReg ( bTunerIndex, 0, bValue, 8 );
if( ErrorCode != CSQPSK_SUCCESS )
return ErrorCode;
ErrorCode = STV0299WrtReg ( bTunerIndex, 0x0b, &bValue[0x0b], 42);
if( ErrorCode != CSQPSK_SUCCESS )
return ErrorCode;
return CSQPSK_SUCCESS;
}
CSQPSK_Error_t STV0299GetLockStatus ( CSHDITunerIndex bTunerIndex, int *pnLockStatus )
{
BYTE bValue, bTemp;
int nStatus = ALLLOST;
int ErrorCode;
int ii;
if (g_nASIInSelect[bTunerIndex] == 1)
{
ErrorCode = CSGPIORead(g_nASIStatusPin[bTunerIndex], &bValue);
if( (ErrorCode == CS_GPIO_SUCCESS) && (bValue) )
{
*pnLockStatus = TP_LOCK;
}
else
*pnLockStatus = ALLLOST;
}
nStatus = ALLLOST;
ErrorCode = STV0299RdReg ( bTunerIndex,STV0299REG_TLIR, &bValue, 1 ) ;
if ( ErrorCode != CSQPSK_SUCCESS )
{
return ErrorCode;
}
if (bValue > 72/*48*/)
nStatus = TIMINGOK;
for(ii=0; ii<5; ii++)
{
if ( STV0299RdReg ( bTunerIndex,STV0299REG_VSTATUS, &bValue, 1 ) != CSQPSK_SUCCESS )
continue;
//sttbx_Print("^^^^VSTATUS:%02x\n",bValue);
bTemp = bValue & VSTATUS_MASK ;
if ( bTemp == ( CFOUND_FLAG | TPLOCK_FLAG ) )/*carrier lock & sync word lock*/
{
nStatus = TP_LOCK;
}
else if ( bTemp == CFOUND_FLAG )
{
nStatus = CFOUND;
break;
}
}
*pnLockStatus = nStatus;
return CSQPSK_SUCCESS;
}
CSQPSK_Error_t STV0299CheckLockStatus ( CSHDITunerIndex bTunerIndex, int *pnLockStatus )
{
int nReturn;
int nStatus;
nReturn = STV0299GetLockStatus (bTunerIndex, &nStatus);
if ( nReturn == CSQPSK_SUCCESS )
{
if (TP_LOCK == nStatus)
{
*pnLockStatus = TRUE;
}
else
{
*pnLockStatus = FALSE;
}
}
return nReturn;
}
/* +==========================================================================+ */
/* | Function: IhVC(I,Q) / (I,-Q) | */
/* | Input: IQW4L, 0: I, Q IQ Normal | */
/* | 1: I,-Q IQ Invert | */
/* | Output: N^ | */
/* | Return: 3I9&1jV> | */
/* +==========================================================================+ */
CSQPSK_Error_t STV0299SetIQ ( CSHDITunerIndex bTunerIndex, BYTE bIQStatus )
{
BYTE bValue;
int ErrorCode;
//sttbx_Print("^^^^IQ:%d\n",bIQStatus);
ErrorCode = STV0299RdReg ( bTunerIndex, STV0299REG_IOCFG, &bValue, 1 );
if ( ErrorCode != CSQPSK_SUCCESS )
return ErrorCode;
if (bIQStatus)
bValue &= ~0x01;
else
bValue |= 0x01;
return ( STV0299WrtReg ( bTunerIndex,STV0299REG_IOCFG, &bValue, 1 ) );
}
/* +==========================================================================+ */
/* | Function: IQ;%;; | */
/* | Input: N^
* | Output: N^ | */
/* | Return: 3I9&1jV> | */
/* +==========================================================================+ */
CSQPSK_Error_t STV0299SwapIQ ( CSHDITunerIndex bTunerIndex )
{
BYTE bValue;
int ErrorCode;
ErrorCode = STV0299RdReg ( bTunerIndex, STV0299REG_IOCFG, &bValue, 1 );
if ( ErrorCode != CSQPSK_SUCCESS )
return ErrorCode;
bValue ^= 0x01;
bValue &= 0x01;
return ( STV0299WrtReg ( bTunerIndex,STV0299REG_IOCFG, &bValue, 1 ) );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -