ct202.c
来自「QPSK Tuner details, for conexant chipset」· C语言 代码 · 共 2,621 行 · 第 1/5 页
C
2,621 行
else
{
/*g_nLockStatus = 0;
*pnLockStatus = FALSE;*/
if ((GetAQCFail(bTunerIndex) == TRUE) /*|| g_nReSyncCnt > 10*/)/*加上会使搜索湖北卫视变慢*/
{
g_nReSyncCnt = 0;
ReSync(bTunerIndex);////start a new sync process
}
g_nReSyncCnt ++;
CSSleep(3);///50
}
}
g_nLockStatus = 0;
*pnLockStatus = FALSE;
CT202AManualReSync(bTunerIndex);
return CSQPSK_SUCCESS;
#endif
#if 0
nReturn1 = CT_NIM_CheckLock(&pu16LockStatus, bTunerIndex);
//////////printf("nReturn1 === %d\r\n",nReturn1);
//////////printf("pu16LockStatus === %d\r\n",pu16LockStatus);
if ( nReturn1 == DRV_OK )
{
//printf("111111111111");
if(pu16LockStatus == TRUE)
{
//printf("22222222222");
#ifdef CT202ADEBUG
////////printf("t1t1ttttttt11111");
#endif
//nReturn = CSQPSK_SUCCESS;
*pnLockStatus = TRUE;
//printf("*pnLockStatus == LOCK!!!!");
return CSQPSK_SUCCESS;
}
else
{
//////////printf("333333333");
#ifdef CT202ADEBUG
////////printf("t12222222222");
#endif
//printf("*pnLockStatus == NOT LOCK!!!!");
*pnLockStatus = FALSE;
return CSQPSK_SUCCESS;
}
}
else
{
//////////printf("44444444");
#ifdef CT202ADEBUG
////////printf("t3333333333333");
#endif
//printf("*pnLockStatus == CT_NIM_CheckLock NOT OK!!!!");
*pnLockStatus = FALSE;
return CSQPSK_FAILURE;
}
//return nReturn;
#endif
}
#endif
CSQPSK_Error_t CT202ALockChannel(CSHDITunerIndex bTunerIndex, CSQPSKCHANNEL *pCHPara)
{
BYTE ucBuffer;
BYTE szSymRate[3];
DWORD dwTemp;
int lock_flag = 0;
CT_NIM_Channel CtChannel;
int nTimes,i;
if (pCHPara->m_CHANNEL.m_DMD.m_dwChannelSymbolRate< 990|| pCHPara->m_CHANNEL.m_DMD.m_dwChannelSymbolRate > 45450)
{
return CSQPSK_INVALID_PARAM;
}
CtChannel.u16SymbRate = pCHPara->m_CHANNEL.m_DMD.m_dwChannelSymbolRate;
CtChannel.u32Freq = pCHPara->m_CHANNEL.m_dwChannelFrequency;
CT_NIM_SetChannel(CtChannel, bTunerIndex);
if (pCHPara->m_CHANNEL.m_DMD.m_dwChannelSymbolRate < 10000)
{
nTimes = 4;
}
else
{
nTimes = 1;
}
for (i = 0; i < nTimes;i++)
{
CT202ACheckLockStatus (bTunerIndex, &lock_flag);
if (TRUE != lock_flag)
{
continue;
}
else
{
return CSQPSK_SUCCESS;
}
}
return CSQPSK_FAILURE;
}
CSQPSK_Error_t CT202AGetStrength(CSHDITunerIndex bTunerIndex, int *pnSignalStrength)
{
if (DRV_OK == CT_NIM_GetStrength(pnSignalStrength,bTunerIndex))
{
return CSQPSK_SUCCESS;
}
else
{
return CSQPSK_FAILURE;
}
}
CSQPSK_Error_t CT202AGetQuality(CSHDITunerIndex bTunerIndex, int *pnSignalQuality)
{
int nLockStatus;
#if 0
CT202ACheckLockStatus (bTunerIndex, &nLockStatus);
printf("nLockStatus == %d",nLockStatus);
if (1 != nLockStatus)/*add by th on 070104*/
{
*pnSignalQuality = 0;
return CSQPSK_SUCCESS;
}
#endif
if (1 != g_nLockStatus)
{
*pnSignalQuality = 0;
return CSQPSK_SUCCESS;
}
if (DRV_OK == CT_NIM_GetQuality(pnSignalQuality,bTunerIndex))
{
return CSQPSK_SUCCESS;
}
else
{
*pnSignalQuality = 0;
return CSQPSK_FAILURE;
}
}
CSQPSK_Error_t CT202AF22KSwitch ( CSHDITunerIndex bTunerIndex, CSHDISwitch nF22KCtrl )
{
if ( nF22KCtrl == CSHDI_ON)
{
if (TRUE == SetTone(CSHDI_ON,bTunerIndex))
{
return CSQPSK_SUCCESS;
}
return CSQPSK_FAILURE;
}
else
{
if (TRUE == SetTone(CSHDI_OFF,bTunerIndex))
{
return CSQPSK_SUCCESS;
}
return CSQPSK_FAILURE;
}
return CSQPSK_FAILURE;
}
CSQPSK_Error_t CT202ASetStandby ( CSHDITunerIndex bTunerIndex, int nStandby )
{
return CSQPSK_SUCCESS;
}
CSQPSK_Error_t CT202ASetClockPolarity ( CSHDITunerIndex bTunerIndex, T_ClockPolarity clockPol)
{
u8 reg;
bool8 status;
status = PASS;
if (LOW_TO_HIGH == clockPol)
{
status = GetReg(g_CTK202A[bTunerIndex],TS_CONTROL_REG_1, ®, 0x01);
reg &= 0xfb;
status = SetReg(g_CTK202A[bTunerIndex],TS_CONTROL_REG_1, ®, 0x01);
if (PASS == status)
{
return CSQPSK_SUCCESS;
}
else
{
return CSQPSK_FAILURE;
}
}
else
{
status = GetReg(g_CTK202A[bTunerIndex],TS_CONTROL_REG_1, ®, 0x01);
reg |= 0x04;
status = SetReg(g_CTK202A[bTunerIndex],TS_CONTROL_REG_1, ®, 0x01);
if (PASS == status)
{
return CSQPSK_SUCCESS;
}
else
{
return CSQPSK_FAILURE;
}
}
return CSQPSK_FAILURE;
}
CSQPSK_Error_t CT202AGetSignalBer ( CSHDITunerIndex bTunerIndex, DWORD *pdwBer )
{
WORD pwBer;
if (1 != g_nLockStatus)
{
*pdwBer = 10000000;
return CSQPSK_SUCCESS;
}/*add by th on 070110*/
if (PASS == GetCNR(&pwBer,bTunerIndex))
{
*pdwBer = pwBer;
return CSQPSK_SUCCESS;
}
return CSQPSK_FAILURE;
}
/*static*/ CSQPSK_Error_t CT202ATBCommand ( CSHDITunerIndex bTunerIndex, BYTE bTBSwitch )
{
#if 1
BYTE bValue;
int ErrorCode;
CT_DiSEqC_PARAMETER stDiSEqCMsg;
bValue = 0;
#ifdef CT202ADEBUG
////////printf("enter CT202ATBCommand mode!!!!");
#endif
if ( bTBSwitch == 0 )
{
stDiSEqCMsg.au8Msg[0] = 0xff;
stDiSEqCMsg.u16MsgLen = 1;
stDiSEqCMsg.u8Satellite = 1;
if (DRV_OK == CT_NIM_WriteDiSEqC_ToneBurst(&stDiSEqCMsg, bTunerIndex))
{
return CSQPSK_SUCCESS;
}
else
{
////////printf("CT_NIM_WriteDiSEqC failed!!!!!!!!!!!!!!!!");
}
}
else if (bTBSwitch == 1)
{
stDiSEqCMsg.au8Msg[0] = 0x00;
stDiSEqCMsg.u16MsgLen = 1;
stDiSEqCMsg.u8Satellite = 0 ;
if (DRV_OK == CT_NIM_WriteDiSEqC_ToneBurst(&stDiSEqCMsg, bTunerIndex))
{
return CSQPSK_SUCCESS;
}
else
{
////////printf("CT_NIM_WriteDiSEqC failed!!!!!!!!!!!!!!!!");
}
}
#endif
}
CSQPSK_Error_t CT202ASendDiSEqC12Command (CSHDITunerIndex bTunerIndex, PBYTE pbValue, int nCommandNum)
{
BYTE bValue;
int ii;
CT_DiSEqC_PARAMETER stDiSEqCMsg;
#ifdef CT202ADEBUG
////////printf("enter CT202ASendDiSEqC12Command!!!!!!!!!!!");
#endif
//CSTRACE(ERROR_LEVEL, "[HDIQPSK]CT202ASendDiSEqC12Command ");
for ( ii = 0; ii < nCommandNum; ii++ )
{
//CSTRACE(ERROR_LEVEL, "[0x%x] ", pbValue[ii]);
stDiSEqCMsg.au8Msg[ii] = pbValue[ii];
}
//CSTRACE(ERROR_LEVEL, "\r\n");
stDiSEqCMsg.u16MsgLen = nCommandNum;
stDiSEqCMsg.u8Satellite = 0;
CT_NIM_WriteDiSEqC(&stDiSEqCMsg,bTunerIndex);
//CSSleep(250);/*不延时的话会导致在锁频的时候发连续的DiSEqC命令,前面的命令被后面的命令冲掉*/
CSQPSKSleep(bTunerIndex, TIME_DELAY_BETWEEN_COMMAND);
return CSQPSK_SUCCESS;
}
CSQPSK_Error_t CT202ADiSEqCReset(CSHDITunerIndex bTunerIndex)
{
BYTE ucResetCommand [3];
//printf("CT202ADiSEqCReset!!!!");
ucResetCommand [0] = 0xe0;
ucResetCommand [1] = 0x10;
ucResetCommand [2] = 0x00;
CT202ASendDiSEqC12Command (bTunerIndex, ucResetCommand, 3);
}
CSQPSK_Error_t CT202ASendOptionCommand(CSHDITunerIndex bTunerIndex, BYTE ucOptionSwitch)
{
int nOptionSwitch;
BYTE aucDiseqcCommand[4];
CSTRACE( INFO_LEVEL, "\n[HDI][CS_QPSK][CT202ASendOptionCommand]:\n ucOptionSwitch= %d",ucOptionSwitch);
if (ucOptionSwitch == 1)
{
aucDiseqcCommand[0] = 0xE0;
aucDiseqcCommand[1] = 0x15;
aucDiseqcCommand[2] = 0x23;
}
else if (ucOptionSwitch == 2)
{
aucDiseqcCommand[0] = 0xE0;
aucDiseqcCommand[1] = 0x15;
aucDiseqcCommand[2] = 0x27;
}
if (nOptionSwitch != 0)
{
CT202ASendDiSEqC12Command(bTunerIndex, aucDiseqcCommand, 3);
//CSQPSKSleep(bTunerIndex, 100);
CSQPSKSleep(bTunerIndex, TIME_DELAY_BETWEEN_COMMAND);
}
}
CSQPSK_Error_t CT202ASendDiSEqC10Command (CSHDITunerIndex bTunerIndex, BYTE bSwitchType, BYTE bCommittedByte, BYTE bToneBurstSel, BYTE bRepeat)
{
CT_DiSEqC_PARAMETER stDiSEqCMsg;
BYTE bRepeatTimes;
BYTE pbValue[4];
BYTE bToneburst;
BYTE bValue;
int ii;
//printf("CT202ASendDiSEqC10Command enter!!!!\r\n");
//printf("bCommittedByte == %2x\r\n", bCommittedByte);
bRepeatTimes = bRepeat;
pbValue[0] = 0xE0;
pbValue[1] = 0x10;
pbValue[2] = 0x38;
pbValue[3] = bCommittedByte;
//bToneburst = (bCommittedByte >> 2) & 0x01;
/*
if (1 == bSwitchType)
{
pbValue[2] = 0x39;
}*/
//CSTRACE(ERROR_LEVEL, "[HDIQPSK]CT202ASendDiSEqC10Command ");
while ( TRUE )
{
for ( ii = 0; ii < 4; ii++ )
{
//CSTRACE(ERROR_LEVEL, "[0x%x] ", pbValue[ii]);
stDiSEqCMsg.au8Msg[ii] = pbValue[ii];
}
//CSTRACE(ERROR_LEVEL, "\r\n");
stDiSEqCMsg.u16MsgLen = 4;
stDiSEqCMsg.u8Satellite = 0;
CT_NIM_WriteDiSEqC(&stDiSEqCMsg,bTunerIndex);
if (bRepeatTimes == 0)
{
CSQPSKSleep(bTunerIndex, TIME_DELAY_BETWEEN_COMMAND);
break;
}
else
{
CSQPSKSleep(bTunerIndex, TIME_DELAY_BETWEEN_COMMAND);
pbValue[0] = 0xE1;/*repeat trans*/
bRepeatTimes--;
}
}
#if 0
/*前面发的1.0 的命令可能受这个函数中RESET 的影响,解决方法待定*/
if ( CT202ATBCommand ( bTunerIndex, bToneBurstSel -1) != CSQPSK_SUCCESS )
{
return CSQPSK_FAILURE;
}
#endif
return CSQPSK_SUCCESS;
}
CSQPSK_Error_t CT202ASendDiSEqC11Command (CSHDITunerIndex bTunerIndex, BYTE bCommittedByte, BYTE bUnCommittedByte, BYTE bRepeat)
{
BYTE bPreF22KStatus;
BYTE bRepeatTimes;
BYTE pbCommittedCommand[4];
BYTE pbUnCommittedCommand[4];
BYTE bToneburst;
BYTE bValue;
int ii;
CT_DiSEqC_PARAMETER stDiSEqCMsg;
bRepeatTimes = bRepeat;
/*
pbCommittedCommand[0] = 0xE0;
pbCommittedCommand[1] = 0x10;
pbCommittedCommand[2] = 0x38;
pbCommittedCommand[3] = bCommittedByte;
bToneburst = (bCommittedByte >> 2) & 0x01;
*/
pbUnCommittedCommand[0] = 0xE0;
pbUnCommittedCommand[1] = 0x10;
pbUnCommittedCommand[2] = 0x39;
pbUnCommittedCommand[3] = bUnCommittedByte;
//CSTRACE(ERROR_LEVEL, "[HDIQPSK]CT202ASendDiSEqC11Command begin\r\n");
while ( TRUE )
{
//CSTRACE(ERROR_LEVEL, "[HDIQPSK]CT202ASendDiSEqC11Command ");
/*
for ( ii = 0; ii < 4; ii++ )
{
//CSTRACE(ERROR_LEVEL, "[0x%x] ", pbCommittedCommand[ii]);
stDiSEqCMsg.au8Msg[ii] = pbCommittedCommand[ii];
}
//CSTRACE(ERROR_LEVEL, "\r\n");
stDiSEqCMsg.u16MsgLen = 4;
stDiSEqCMsg.u8Satellite = 0;
CT_NIM_WriteDiSEqC(&stDiSEqCMsg,bTunerIndex);
if ((bRepeatTimes == 0) && (bRepeat >0))
{
CSSleep(TIME_DELAY_BETWEEN_COMMAND);
break;
}
CSSleep(TIME_DELAY_BETWEEN_COMMAND);
*/
//CSTRACE(ERROR_LEVEL, "[HDIQPSK]CT202ASendDiSEqC11Command 1 ");
for ( ii = 0; ii < 4; ii++ )
{
//CSTRACE(ERROR_LEVEL, "[0x%x] ", pbUnCommittedCommand[ii]);
stDiSEqCMsg.au8Msg[ii] = pbUnCommittedCommand[ii];
}
//CSTRACE(ERROR_LEVEL, "\r\n");
stDiSEqCMsg.u16MsgLen = 4;
stDiSEqCMsg.u8Satellite = 0;
CT_NIM_WriteDiSEqC(&stDiSEqCMsg,bTunerIndex);
if (bRepeatTimes == 0)
{
CSQPSKSleep(bTunerIndex, TIME_DELAY_BETWEEN_COMMAND);
break;
}
else
{
//pbCommittedCommand[0] = 0xE1;
pbUnCommittedCommand[0] = 0xE1;
CSQPSKSleep(bTunerIndex, TIME_DELAY_BETWEEN_COMMAND);
bRepeatTimes--;
}
}
/*
//CSTRACE(ERROR_LEVEL, "[HDIQPSK] CT202ASendDiSEqC11Command CT202ATBCommand\r\n");
if ( CT202ATBCommand ( bTunerIndex, bToneburst ) != CSQPSK_SUCCESS )
{
return CSQPSK_FAILURE;
}*/
return CSQPSK_SUCCESS;
}
CSQPSK_Error_t CT202AToneBurstCommandOnly (CSHDITunerIndex bTunerIndex, BYTE bToneBurstSel)
{
BYTE bValue;
BYTE bPreF22KStatus;
CT202ADiSEqCReset(bTunerIndex);/*add bu th on070110 for MultiSwitch*/
if (bToneBurstSel == 0)
return CSQPSK_SUCCESS;
//CSTRACE(ERROR_LEVEL, "[HDIQPSK]CT202AToneBurstCommandOnly\r\n");
if (CT202ATBCommand(bTunerIndex, bToneBurstSel-1) != CSQPSK_SUCCESS)
{
return CSQPSK_FAILURE;
}
return CSQPSK_SUCCESS;
}
#if 0
bool8 GetCNE(u8 *u8decimal, u8 *u8point)
{
bool8 result = PASS;
u16 window_length[]={0x10000, 0x4000, 0x1000, 0x400};
//int cnr=0;
int i, count = 0;
#if 0
u8 Locksta;
GetLockStat(&Locksta);
////////printf("RCVL AGCL CEL SRL STL CRL VTL FSL\n");
for(i=0; i<8; i++)
{
////////printf(" %hx ", (Locksta >> i) & 0x01);
}
////////printf("\n");
#endif
//for(i=0;i<4;++i)
//{
//result = SetCNRmon(window_length[i]);
//result
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?