📄 csqpskdmd.c
字号:
#endif
#ifdef LGTUNERIC_SUPPORT
CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support LGTUNERIC\r\n");
#endif
#ifdef LGS002F_SUPPORT
CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support LGS002F\r\n");
#endif
#ifdef STV0399_SUPPORT
CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support STV0399\r\n");
#endif
#ifdef TDA10086F_SUPPORT
CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support TDA10086F\r\n");
#endif
#ifdef CX24116_SUPPORT
CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support CX24116\r\n");
#endif
#ifdef CT202A_SUPPORT
CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support CT202A\r\n");
#endif
#ifdef CX2430x_SUPPORT
CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support CX2430x\r\n");
#endif
if( bTunerIndex < 0 || bTunerIndex >= MAX_I2C_NUM)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err bTunerIndex = %d incorrect \r\n", bTunerIndex);
CSTRACE( ERROR_LEVEL, "Position:file = %s,line = %d\r\n", __FILE__, __LINE__);
#endif
return CSQPSK_INVALID_PARAM;
}
if ( g_bQPSKHasInitialized[bTunerIndex] == TRUE )
{
CSTRACE( ERROR_LEVEL, "[HDIQPSK] tuner has been initialized yet! \r\n");
return CSQPSK_HAS_INITIALIZED;
}
if ( nPriority<0 ||nPriority>255)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err nPriority = %d incorrect\r\n", nPriority);
CSTRACE( ERROR_LEVEL, "Position:file = %s,line = %d\r\n", __FILE__, __LINE__);
#endif
return CSQPSK_INVALID_PARAM;
}
if ( TSOutMode<0 ||TSOutMode>1)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err TSOutMode = %d incorrect \r\n", TSOutMode);
CSTRACE( ERROR_LEVEL, "Position:file = %s,line = %d\r\n", __FILE__, __LINE__);
#endif
return CSQPSK_INVALID_PARAM;
}
if ( nResetPinNum<0 ||nResetPinNum>0xff)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err nResetPinNum = %d incorrect \r\n", nResetPinNum);
CSTRACE( ERROR_LEVEL, "Position:file = %s,line = %d\r\n", __FILE__, __LINE__);
#endif
return CSQPSK_INVALID_PARAM;
}
CSQPSKPatch = NULL;
g_dwNIMState[bTunerIndex] = DROPPED;
CSQPSKCallbackFunction[bTunerIndex] = NULL;
memset( &g_TQPSKChannelCopy[bTunerIndex], -1, sizeof(CSQPSKSignalParameterS2) );
memset( &g_TQPSKChannelCopy1[bTunerIndex], -1, sizeof(CSQPSKSignalParameterS2) );
CSConfigResetPin ( bTunerIndex, nResetPinNum ) ;
ErrorCode = CSQPSKInterInitialize( bTunerIndex, TSOutMode) ;
if ( ErrorCode != CSQPSK_SUCCESS )
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err CSQPSKInterInitialize failed \r\n");
CSTRACE( ERROR_LEVEL, " Position:file = %s,line = %d\r\n", __FILE__, __LINE__);
#endif
return ErrorCode;
}
if ( g_hCSQPSKQueueID[bTunerIndex] == NULL )
{
g_hCSQPSKQueueID[bTunerIndex] = CSCreateMsgQueue ( pMsgQueueName[bTunerIndex], 32, 16, 0 );
if ( g_hCSQPSKQueueID[bTunerIndex] == NULL )
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err CSCreateMsgQueue\r\n");
CSTRACE( ERROR_LEVEL, " Position:file = %s,line = %d\r\n", __FILE__, __LINE__);
#endif
return CSQPSK_SYSTEM_ERROR;
}
}
if ( g_hCSQPSKTaskID[bTunerIndex] == NULL )
{
g_hCSQPSKTaskID[bTunerIndex] = CSCreateThread ( pTaskName[bTunerIndex], nPriority, g_dwQPSKStackSize, (ThreadEntry *)CSQPSKAcquisitionTask, (PVOID)bTunerIndex, NULL );
if ( g_hCSQPSKTaskID[bTunerIndex] == NULL )
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err CSCreateThread failed\r\n");
CSTRACE( ERROR_LEVEL, " Position:file = %s,line = %d\r\n", __FILE__, __LINE__);
#endif
return CSQPSK_SYSTEM_ERROR;
}
else
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK]CSCreateThread suceed!:0x%x\r\n",g_hCSQPSKTaskID[bTunerIndex]);
#endif
}
}
g_bQPSKHasInitialized[bTunerIndex] = TRUE;
return CSQPSK_SUCCESS;
}
/****************************************************************************
** Function DMDRegisterCallback(): Register the specified callback function
** for the bitstream manager.
**
** Inputs: callback, a pointer to the callback function being registered.
**
** Outputs: None.
**
** Returns: Nothing.
****************************************************************************/
void CSQPSKRegisterCallback( CSHDITunerIndex bTunerIndex, CSHDICallback function )
{
if( bTunerIndex < 0 || bTunerIndex >= MAX_I2C_NUM)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err bTunerIndex = %d incorrect \r\n", bTunerIndex);
CSTRACE( ERROR_LEVEL, "Position:file = %s,line = %d\n", __FILE__, __LINE__);
#endif
return ;
}
if (g_bQPSKHasInitialized[bTunerIndex] != TRUE)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK]CS_QPSK has not been initialized!!!\r\n" );
#endif
return ;
}
CSQPSKCallbackFunction[bTunerIndex] = function; /* Register function in function table */
}
void CSQPSKRegisterCallbackEx( CSHDITunerIndex bTunerIndex, CSHDICallback function )
{
if( bTunerIndex < 0 || bTunerIndex >= MAX_I2C_NUM)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err bTunerIndex = %d incorrect \n", bTunerIndex);
CSTRACE( ERROR_LEVEL, " Position:file = %s,line = %d\n", __FILE__, __LINE__);
#endif
return ;
}
CSQPSKCallbackFunctionEx[bTunerIndex] = function; /* Register function in function table */
}
/******************************************************************************
** Function DMDCallback(): Process callback to the user of demodulator
** driver.
**
** Inputs: event that causes the callback event
**
** Outputs: None.
**
** Returns: Nothing.
******************************************************************************/
static void CSQPSKCallback( CSHDITunerIndex bTunerIndex, QPSKCallbackMessage *dwDMDEvent)
{
CSHDICallback CSQPSKCallbackFunctionTemp;
CSASSERT( dwDMDEvent != NULL);
#ifdef QPSK_DEBUG
CSTRACE(QPSK_DEBUG_LEVEL,"[CSQPSKCallback]begin Freq:%d, Event:%d\r\n",dwDMDEvent->dwFrequency,dwDMDEvent->dwNIMEvent);
#endif
dwDMDEvent->bTunerIndex = bTunerIndex;
CSQPSKCallbackFunctionTemp = CSQPSKCallbackFunction[bTunerIndex];
if( NULL != CSQPSKCallbackFunctionTemp )
{
CSQPSKCallbackFunctionTemp(CSHDI_CALLBACK_QPSK, (void *)dwDMDEvent );
}
CSQPSKCallbackFunctionTemp = CSQPSKCallbackFunctionEx[bTunerIndex];
if( NULL != CSQPSKCallbackFunctionTemp)
{
CSQPSKCallbackFunctionTemp( CSHDI_CALLBACK_QPSK, (void *)dwDMDEvent );
}
#ifdef QPSK_DEBUG
CSTRACE(QPSK_DEBUG_LEVEL,"[CSQPSKCallback]end Freq:%d, Event:%d\r\n",dwDMDEvent->dwFrequency,dwDMDEvent->dwNIMEvent);
#endif
}
/*
Modify by yuxibo 2006.01.06 in Dubai
The new signal parameters are compared to [g_TQPSKChannelCopy] before,
this will cause some synchronization problem.
The actual parameters in [CSQPSKAcquisitionTask] is [g_TQPSKChannelCopy1],
so the new signal parameters should compare to [g_TQPSKChannelCopy1].
*/
int CSQPSKSignalCompareCheck( CSHDITunerIndex bTunerIndex, CSQPSKSignalParameterS2 *newSignalPtr )
{
CSASSERT( newSignalPtr != NULL);
g_bDiSEqCStatus[bTunerIndex] = 0;
if ( newSignalPtr->bLNBPower != g_TQPSKChannelCopy1[bTunerIndex].bLNBPower )
{
#ifdef QPSK_DEBUG
CSTRACE(QPSK_DEBUG_LEVEL,"[HDIQPSK][CSQPSKSignalCompareCheck]DISEQC_LNBPOWER_BIT\r\n");
#endif
g_bDiSEqCStatus[bTunerIndex] |= DISEQC_LNBPOWER_BIT;
}
if ( newSignalPtr->bSwitch0_12V != g_TQPSKChannelCopy1[bTunerIndex].bSwitch0_12V )
{
#ifdef QPSK_DEBUG
CSTRACE(QPSK_DEBUG_LEVEL,"[HDIQPSK][CSQPSKSignalCompareCheck]DISEQC_SWITCH0_12V_BIT\r\n");
#endif
g_bDiSEqCStatus[bTunerIndex] |= DISEQC_SWITCH0_12V_BIT;
}
if ( newSignalPtr->bPolar != g_TQPSKChannelCopy1[bTunerIndex].bPolar )
{
#ifdef QPSK_DEBUG
CSTRACE(QPSK_DEBUG_LEVEL,"[HDIQPSK][CSQPSKSignalCompareCheck]DISEQC_POLAR_BIT\r\n");
#endif
g_bDiSEqCStatus[bTunerIndex] |= DISEQC_POLAR_BIT;
}
if ( newSignalPtr->b22K != g_TQPSKChannelCopy1[bTunerIndex].b22K ||
newSignalPtr->bLNBType != g_TQPSKChannelCopy1[bTunerIndex].bLNBType ||
newSignalPtr->dwLNBLowFreq != g_TQPSKChannelCopy1[bTunerIndex].dwLNBLowFreq ||
newSignalPtr->dwLNBHighFreq != g_TQPSKChannelCopy1[bTunerIndex].dwLNBHighFreq ||
newSignalPtr->dwLNBMidFreq != g_TQPSKChannelCopy1[bTunerIndex].dwLNBMidFreq )
{
#ifdef QPSK_DEBUG
CSTRACE(QPSK_DEBUG_LEVEL,"[HDIQPSK][CSQPSKSignalCompareCheck]DISEQC_LNB_FREQ_BIT\r\n");
#endif
g_bDiSEqCStatus[bTunerIndex] |= DISEQC_LNB_FREQ_BIT;
}
if ( newSignalPtr->bDiSEqC10 != g_TQPSKChannelCopy1[bTunerIndex].bDiSEqC10 ||
newSignalPtr->bDiSEqC11 != g_TQPSKChannelCopy1[bTunerIndex].bDiSEqC11 ||
newSignalPtr->bToneBurst != g_TQPSKChannelCopy1[bTunerIndex].bToneBurst ||
newSignalPtr->ucSatCRLNBNo!= g_TQPSKChannelCopy1[bTunerIndex].ucSatCRLNBNo||
newSignalPtr->ucSatCRNo!= g_TQPSKChannelCopy1[bTunerIndex].ucSatCRNo||
newSignalPtr->bDiSEqCRepeat != g_TQPSKChannelCopy1[bTunerIndex].bDiSEqCRepeat ||
newSignalPtr->m_dwOption != g_TQPSKChannelCopy1[bTunerIndex].m_dwOption)
{
#ifdef QPSK_DEBUG
CSTRACE(QPSK_DEBUG_LEVEL,"[HDIQPSK][CSQPSKSignalCompareCheck]DISEQC_COMMAND_BIT\r\n");
#endif
g_bDiSEqCStatus[bTunerIndex] |= DISEQC_COMMAND_BIT;
}
if ( g_bDiSEqCStatus[bTunerIndex] != 0x00 )
{
#ifdef QPSK_DEBUG
CSTRACE(QPSK_DEBUG_LEVEL,"[HDIQPSK][CSQPSKSignalCompareCheck]CMP_DISEQC_CHANGE\r\n");
#endif
return CMP_DISEQC_CHANGE;
}
if ( newSignalPtr->dwFreqency != g_TQPSKChannelCopy1[bTunerIndex].dwFreqency ||
newSignalPtr->dwSymbolRate != g_TQPSKChannelCopy1[bTunerIndex].dwSymbolRate ||
newSignalPtr->bFECRates !=g_TQPSKChannelCopy1[bTunerIndex].bFECRates||
newSignalPtr->ucPilot !=g_TQPSKChannelCopy1[bTunerIndex].ucPilot ||
newSignalPtr->m_dwModulation!=g_TQPSKChannelCopy1[bTunerIndex].m_dwModulation ||
newSignalPtr->m_dwstandard !=g_TQPSKChannelCopy1[bTunerIndex].m_dwstandard)
{
#ifdef QPSK_DEBUG
CSTRACE(QPSK_DEBUG_LEVEL,"[HDIQPSK][CSQPSKSignalCompareCheck]CMP_CHANNEL_CHANGE\r\n");
#endif
return CMP_CHANNEL_CHANGE;
}
#ifdef QPSK_DEBUG
CSTRACE(QPSK_DEBUG_LEVEL,"[HDIQPSK][CSQPSKSignalCompareCheck]CMP_NO_CHANGE\r\n");
#endif
return CMP_NO_CHANGE;
}
/*****************************************************************************
** Function DMDSetQAMChannel(): This function sets up a structure with the
** satellite descriptor parameters. This function updates the local
** TransponderCopy structure.
**
** Inputs: Pointer to structure of type CSQPSKCHANNEL
**
** Outputs: None.
**
** Returns: Nothing.
*****************************************************************************/
void CSQPSKSetChannel(CSHDITunerIndex bTunerIndex, CSQPSKSignalParameterS2 *newSignalPtr)
{
CSASSERT( newSignalPtr != NULL);
memcpy(&g_TQPSKChannelCopy[bTunerIndex], newSignalPtr, sizeof(CSQPSKSignalParameterS2));
#ifdef QPSK_DEBUG
CSTRACE( QPSK_DEBUG_LEVEL, "[CSQPSKSetChannel]:bLNBPower=%d dwSymbolRate=%ld bPolar=0x%.2x, b22K=0x%.2x, bIQ=0x%.2x, bFec=0x%x\n\r", g_TQPSKChannelCopy[bTunerIndex].bLNBPower,g_TQPSKChannelCopy[bTunerIndex].dwSymbolRate, g_TQPSKChannelCopy[bTunerIndex].bPolar, g_TQPSKChannelCopy[bTunerIndex].b22K ,g_TQPSKChannelCopy[bTunerIndex].bIQ,g_TQPSKChannelCopy[bTunerIndex].bFECRates);
#endif
}
CSQPSK_Error_t CSQPSKDropSignal( CSHDITunerIndex bTunerIndex )
{
DWORD dwMessage[4];
int iRet;
if( bTunerIndex < 0 || bTunerIndex >= MAX_I2C_NUM)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err bTunerIndex = %d incorrect \r\n", bTunerIndex);
CSTRACE( ERROR_LEVEL, " Position:file = %s,line = %d\r\n", __FILE__, __LINE__);
#endif
return CSQPSK_FAILURE;
}
CSASSERT( g_bQPSKHasInitialized[bTunerIndex] == TRUE);
if (g_bQPSKHasInitialized[bTunerIndex] != TRUE)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK]CS_QPSK has not been initialized!!!\r\n" );
#endif
return CSQPSK_FAILURE;
}
while(CSReceiveMsg( g_hCSQPSKQueueID[bTunerIndex], (PVOID)dwMessage, 16, CSHDI_TIMEOUT_IMMEDIATE) == CS_OSP_SUCCESS)
{
;
}
CSQPSKStopLock(bTunerIndex);
switch(g_dwNIMState[bTunerIndex])
{
case WAITING:
case CONNECTED:
dwMessage[0] = DMD_DROP_REQUEST_MSG_ID;
dwMessage[1] = NULL;
dwMessage[2] = NULL;
dwMessage[3] = NULL;
iRet = CSSendMsg( g_hCSQPSKQueueID[bTunerIndex], (const PVOID)dwMessage, 16, CSHDI_TIMEOUT_INFINITY);
//tuner_printf("\n\r ======> CSQPSKDropSignal send msg iRet = %d \r\n", iRet);
break;
default:
break;
}
CSSleep(500);
return(CSQPSK_SUCCESS);
}
CSQPSK_Error_t CSQPSKConnectSignalS2( CSHDITunerIndex bTunerIndex, CSQPSKSignalParameterS2*signalPtr )
{
DWORD dwMessage[4];
int nCmpReturn;
int ret ;
if( bTunerIndex < 0 || bTunerIndex >= MAX_I2C_NUM)
{
#ifdef QPSK_DEBUG
CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err bTunerIndex = %d incorrect \r\n", bTunerIndex);
CSTRACE( ERROR_LEVEL, "Position:file = %s,line = %d\r\n", __FILE__, __LINE__);
#endif
return CSQPSK_INVALID_PARAM;
}
if (g_bQPSKHasInitialized[bTunerIndex] != TRUE)
{
#ifdef QPSK_DEBUG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -