⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csqpskdmd.c

📁 QPSK Tuner details, for conexant chipset.
💻 C
📖 第 1 页 / 共 5 页
字号:
	#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 + -