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

📄 csqpskdmd.c

📁 QPSK Tuner details, for conexant chipset.
💻 C
📖 第 1 页 / 共 5 页
字号:
	g_nSTSProcess = 0;
	g_astTranspondList[bTunerIndex].nValidCount = 0;
	if ( ret != CS_OSP_SUCCESS )
	{
		CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK] Err CSSendMsg failed\n");
		CSTRACE( QPSK_DEBUG_LEVEL, "Position:file = %s,line = %d\n", __FILE__, __LINE__);
		return CSQPSK_SYSTEM_ERROR;
	}
	
	return CSQPSK_SUCCESS;
}

#ifdef LSI_PLATFORM
static void CSQPSKAcquisitionTask(void)
{
	DWORD dwMessage[4];
    	int nRet;
	QPSKCallbackMessage ptrCallBack;
	CSQPSKCHANNEL	ChannelParam;
	CSHDITunerIndex bTunerIndex = 0;
	
	ptrCallBack.bTunerIndex = bTunerIndex;
	while (TRUE)
	{
		/* Check for a message if none then block until a message arrive */
#ifdef QPSK_DEBUG
		CSTRACE( QPSK_DEBUG_LEVEL, "prepare CSReceiveMsg(void)\r\n");
#endif
		nRet = CSReceiveMsg( g_hCSQPSKQueueID[bTunerIndex], (PVOID)dwMessage, 16, 1000);
#ifdef QPSK_DEBUG
			CSTRACE( QPSK_DEBUG_LEVEL, "CSReceiveMsg(void) end\r\n");
			CSTRACE( QPSK_DEBUG_LEVEL, "CSReceiveMsg result = %d\r\n", nRet);
			CSTRACE( QPSK_DEBUG_LEVEL, "dwMessage[0] = %d,dwMessage[1] = %d\r\n", dwMessage[0], dwMessage[1]);
#endif
		if ( nRet != CS_OSP_SUCCESS )
		{
			dwMessage[0] = DMD_TIMEOUT_MSG_ID;
#ifdef QPSK_DEBUG
			CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK]receive  timeout message status = %d\r\n", g_dwNIMState[bTunerIndex]);
#endif
		}
		else
		{
#ifdef QPSK_DEBUG
			CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK]receive  other message = %d, status = %d\r\n", dwMessage[0], g_dwNIMState[bTunerIndex]);
#endif
		}
		/*del by th on 070306 because no need to set LNB index here
		if ( dwMessage[2] == CS_LOCK_METHOD_SATCR)
		{
			ucTunerInputLNB[bTunerIndex] = dwMessage[3];
		}*/
		
		switch (g_dwNIMState[bTunerIndex])
		{
			case DROPPED:
				#ifdef QPSK_DEBUG
				//CSTRACE( INFO_LEVEL, "[HDIQPSK]Current NIM Status:DROPPED\n");
				#endif
				switch (dwMessage[0])
					{
					case DMD_CONNECT_REQUEST_MSG_ID:
						CSClear(bTunerIndex);
						CSQPSKSetQPSKParameter( bTunerIndex, g_TQPSKChannelCopy[bTunerIndex] );							
						CSQPSKDiSEqCOperation(bTunerIndex);
						
						CSQPSKSetChannelParameter( bTunerIndex, &ChannelParam);
						ptrCallBack.dwFrequency = g_TQPSKChannelCopy1[bTunerIndex].dwFreqency;
						ptrCallBack.dwSymbolRate = g_TQPSKChannelCopy1[bTunerIndex].dwSymbolRate;
						nRet = CSQPSKSearchingSignal( bTunerIndex, &ChannelParam );
						#ifdef QPSK_DEBUG
						CSTRACE(QPSK_DEBUG_LEVEL, "[HDIQPSK]CSQPSKAcquisitionTask nRet = %d\r\n", nRet);
						#endif
						if( CSQPSK_SUCCESS == nRet )
						{	
							#ifdef QPSK_DEBUG
							//CSTRACE( INFO_LEVEL, "[HDIQPSK]Singal found from DROPPED NIM status.\n");
							#endif
							g_dwNIMState[bTunerIndex] = CONNECTED;
							
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_CONNECTED;
							CSQPSKCallback(bTunerIndex, &ptrCallBack);
						}
						else if( CSQPSK_FAILURE == nRet )
						{
							#ifdef QPSK_DEBUG
							//CSTRACE( INFO_LEVEL, "[HDIQPSK]Singal not found from DROPPED NIM status.\n");
							#endif
							g_dwNIMState[bTunerIndex] = WAITING;
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_SEARCHING;
							CSQPSKCallback(bTunerIndex, &ptrCallBack);
						}
 						break; 
					case DMD_STS_MSG_ID:
						/*do search the sky here*/
						CSClear(bTunerIndex);
						if (STSSearch(bTunerIndex, dwMessage [2]) == CSQPSK_SUCCESS)
						{
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_STS_COMPLETE;
						}
						else
						{
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_STS_DROPPED;
						}
						
						CSQPSKCallback(bTunerIndex, &ptrCallBack);
						g_dwNIMState[bTunerIndex] = DROPPED;
						break;
					default:
						break;
					}
				break;
					
			case WAITING:     /* Start of Waiting State */
				#ifdef QPSK_DEBUG
				//CSTRACE(INFO_LEVEL,"[HDIQPSK]Current NIM Status:WAITING.\n");
				#endif
				switch (dwMessage[0])
					{
					/*
							Modify by yuxibo 2006.02.07
							
							'g_TQPSKChannelCopy1' should NOT be updated when 'DMD_TIMEOUT_MSG_ID' 
							received, so 'CSQPSKSetQPSKParameter' should not be called when
							'DMD_TIMEOUT_MSG_ID' received. 
					*/	
					case DMD_CONNECT_REQUEST_MSG_ID:
						CSQPSKSetQPSKParameter( bTunerIndex, g_TQPSKChannelCopy[bTunerIndex] );
						// no break to continue searching						
							
					case DMD_TIMEOUT_MSG_ID:	
						CSClear(bTunerIndex);
						CSQPSKDiSEqCOperation(bTunerIndex);						
						CSQPSKSetChannelParameter( bTunerIndex, &ChannelParam);					
						ptrCallBack.dwFrequency = g_TQPSKChannelCopy1[bTunerIndex].dwFreqency;
						ptrCallBack.dwSymbolRate = g_TQPSKChannelCopy1[bTunerIndex].dwSymbolRate;
						nRet = CSQPSKSearchingSignal( bTunerIndex, &ChannelParam );
						CSTRACE(QPSK_DEBUG_LEVEL, "[HDIQPSK]CSQPSKAcquisitionTask nRet = %d\r\n", nRet);
						if( nRet == CSQPSK_SUCCESS )
						{
							g_dwNIMState[bTunerIndex] = CONNECTED;
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_CONNECTED;
							CSQPSKCallback( bTunerIndex, &ptrCallBack);
						}
						else if(nRet == CSQPSK_FAILURE)
						{
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_SEARCHING;
							CSQPSKCallback(bTunerIndex, &ptrCallBack);
						}
						break;
						
 
					case DMD_DROP_REQUEST_MSG_ID:
						g_dwNIMState[bTunerIndex] = DROPPED;
						ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_DROPPED;
						CSQPSKCallback( bTunerIndex, &ptrCallBack);
						/*
							Added by yuxibo 2006.02.07
							
							Reset 'g_TQPSKChannelCopy' and 'g_TQPSKChannelCopy1' 
							after receiving 'DMD_DROP_REQUEST_MSG_ID' message. 
						*/
						memset( g_TQPSKChannelCopy, -1, sizeof( g_TQPSKChannelCopy));
						memset( g_TQPSKChannelCopy1, -1, sizeof( g_TQPSKChannelCopy1));
				        	break;
					case DMD_CONNECT_SAME_MSG_ID:  //add by sfg  for repeat send same channel
						ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_SEARCHING;
						CSQPSKCallback(bTunerIndex, &ptrCallBack);
						break;
					case DMD_STS_MSG_ID:
						CSClear(bTunerIndex);
						if (STSSearch(bTunerIndex, dwMessage [2]) == CSQPSK_SUCCESS)
						{
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_STS_COMPLETE;
						}
						else
						{
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_STS_DROPPED;
						}
						
						CSQPSKCallback(bTunerIndex, &ptrCallBack);
						g_dwNIMState[bTunerIndex] = DROPPED;
						break;
					default:      /* ignore all other type of messages */
						break;
				}
				break;          /* End of Waiting State */

		case CONNECTED:   /* Start of Connected State */
			#ifdef QPSK_DEBUG
			//CSTRACE(INFO_LEVEL,"[HDIQPSK]Current NIM Status:CONNECTED.\n");
			#endif
			switch (dwMessage[0])
			{
				case DMD_DROP_REQUEST_MSG_ID:
					g_dwNIMState[bTunerIndex] = DROPPED;
					ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_DROPPED;
					CSQPSKCallback( bTunerIndex, &ptrCallBack);
					/*
						Added by yuxibo 2006.02.07
						
						Reset 'g_TQPSKChannelCopy' and 'g_TQPSKChannelCopy1' 
						after receiving 'DMD_DROP_REQUEST_MSG_ID' message. 
					*/
					memset( g_TQPSKChannelCopy, -1, sizeof( g_TQPSKChannelCopy));
					memset( g_TQPSKChannelCopy1, -1, sizeof( g_TQPSKChannelCopy1));
					break;

				case DMD_CONNECT_REQUEST_MSG_ID:
					CSClear(bTunerIndex);
					CSQPSKSetQPSKParameter( bTunerIndex, g_TQPSKChannelCopy[bTunerIndex] );		
					CSQPSKDiSEqCOperation(bTunerIndex);
										
					CSQPSKSetChannelParameter( bTunerIndex, &ChannelParam);				
					ptrCallBack.dwFrequency = g_TQPSKChannelCopy1[bTunerIndex].dwFreqency;
					ptrCallBack.dwSymbolRate = g_TQPSKChannelCopy1[bTunerIndex].dwSymbolRate;
					nRet = CSQPSKSearchingSignal( bTunerIndex, &ChannelParam );
					CSTRACE(QPSK_DEBUG_LEVEL, "[HDIQPSK]CSQPSKAcquisitionTask nRet = %d\r\n", nRet);
					if( nRet == CSQPSK_SUCCESS )
					{
						g_dwNIMState[bTunerIndex] = CONNECTED;
						ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_CONNECTED;
						CSQPSKCallback( bTunerIndex, &ptrCallBack);
					}	
					else if(nRet == CSQPSK_FAILURE)
					{
						g_dwNIMState[bTunerIndex] = WAITING;
						ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_SEARCHING;
						CSQPSKCallback(bTunerIndex, &ptrCallBack);
					}
					break;

				case DMD_TIMEOUT_MSG_ID:
					if (CSQPSKCheckNIMLost(bTunerIndex)== 0)
					{
						g_dwNIMState[bTunerIndex] = WAITING;
						ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_LOST;
						CSQPSKCallback(bTunerIndex, &ptrCallBack);
					}

					break;
			
				case DMD_CONNECT_SAME_MSG_ID:				
					#ifdef QPSK_DEBUG
					//CSTRACE(INFO_LEVEL,"[HDIQPSK]Same Signal No need to Lock.\n");
					#endif
					g_dwNIMState[bTunerIndex] = CONNECTED;
					ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_CONNECTED;
					CSQPSKCallback(bTunerIndex, &ptrCallBack);
					break;
				case DMD_STS_MSG_ID:
						/*do search the sky here*/
						CSClear(bTunerIndex);
						CSClear(bTunerIndex);
						if (STSSearch(bTunerIndex, dwMessage [2]) == CSQPSK_SUCCESS)
						{
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_STS_COMPLETE;
						}
						else
						{
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_STS_DROPPED;
						}
						
						CSQPSKCallback(bTunerIndex, &ptrCallBack);
						g_dwNIMState[bTunerIndex] = DROPPED;
					break;

				default:      /* ignore all other type of messages */
		            break;
			}
			break;          /* End of Connected State */

		default:          /* this is just for completeness of switch statement */
			break;
		} /* end of switch(NIMState) */
	} /* end of while(TRUE) loop */

}

#else
static void CSQPSKAcquisitionTask( CSHDITunerIndex bTunerIndex )
{
	DWORD dwMessage[4];
    	int nRet;
	QPSKCallbackMessage ptrCallBack;
	CSQPSKCHANNEL	ChannelParam;

	ptrCallBack.bTunerIndex = bTunerIndex;
	while (TRUE)
	{
		/* Check for a message if none then block until a message arrive */
#ifdef QPSK_DEBUG
		CSTRACE( QPSK_DEBUG_LEVEL, "prepare CSReceiveMsg\r\n");
#endif
	
		nRet = CSReceiveMsg( g_hCSQPSKQueueID[bTunerIndex], (PVOID)dwMessage, 16, 1000);
		if ( nRet != CS_OSP_SUCCESS )
		{
			dwMessage[0] = DMD_TIMEOUT_MSG_ID;
#ifdef QPSK_DEBUG
			//CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK]receive  timeout message status = %d\r\n", g_dwNIMState[bTunerIndex]);
#endif
		}
		else
		{
#ifdef QPSK_DEBUG
			//CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK]receive  other message = %d, status = %d\r\n", dwMessage[0], g_dwNIMState[bTunerIndex]);
#endif
		}
		/*del by th on 070306 because no need to set LNB index here
		if ( dwMessage[2] == CS_LOCK_METHOD_SATCR)
		{
			ucTunerInputLNB[bTunerIndex] = dwMessage[3];
		}*/
		
		switch (g_dwNIMState[bTunerIndex])
		{
			case DROPPED:
				#ifdef QPSK_DEBUG
				//CSTRACE( INFO_LEVEL, "[HDIQPSK]Current NIM Status:DROPPED\n");
				#endif
				switch (dwMessage[0])
					{
					case DMD_CONNECT_REQUEST_MSG_ID:
						CSClear(bTunerIndex);
						CSQPSKSetQPSKParameter( bTunerIndex, g_TQPSKChannelCopy[bTunerIndex] );/*copy ---> copy1*/							
						CSQPSKDiSEqCOperation(bTunerIndex);/*ODU operate*/
						
						CSQPSKSetChannelParameter( bTunerIndex, &ChannelParam);/*set IF value which to be lock*/
						ptrCallBack.dwFrequency = g_TQPSKChannelCopy1[bTunerIndex].dwFreqency;
						ptrCallBack.dwSymbolRate = g_TQPSKChannelCopy1[bTunerIndex].dwSymbolRate;
						nRet = CSQPSKSearchingSignal( bTunerIndex, &ChannelParam );
						CSTRACE(QPSK_DEBUG_LEVEL, "[HDIQPSK]CSQPSKAcquisitionTask nRet = %d\r\n", nRet);
						if( CSQPSK_SUCCESS == nRet )
						{	
							#ifdef QPSK_DEBUG
							//CSTRACE( INFO_LEVEL, "[HDIQPSK]Singal found from DROPPED NIM status.\n");
							#endif
							g_dwNIMState[bTunerIndex] = CONNECTED;
							
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_CONNECTED;
							CSQPSKCallback(bTunerIndex, &ptrCallBack);
						}
						else if( CSQPSK_FAILURE == nRet )
						{
							#ifdef QPSK_DEBUG
							//CSTRACE( INFO_LEVEL, "[HDIQPSK]Singal not found from DROPPED NIM status.\n");
							#endif
							g_dwNIMState[bTunerIndex] = WAITING;
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_SIGNAL_SEARCHING;
							CSQPSKCallback(bTunerIndex, &ptrCallBack);
						}
 						break; 
					case DMD_STS_MSG_ID:
						/*do search the sky here*/
						CSClear(bTunerIndex);
						if (STSSearch(bTunerIndex, dwMessage [2]) == CSQPSK_SUCCESS)
						{
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_STS_COMPLETE;
						}
						else
						{
							ptrCallBack.dwNIMEvent = QPSK_CALLBACK_STS_DROPPED;
						}
						
						CSQPSKCallback(bTunerIndex, &ptrCallBack);
						g_dwNIMState[bTunerIndex] = DROPPED;
 						break; 
					default:
						break;
					}
				break;
					
			case WAITING:     /* Start of Waiting State */
				#ifdef QPSK_DEBUG
				//CSTRACE(INFO_LEVEL,"[HDIQPSK]Current NIM Status:WAITING.\n");
				#endif
				switch (dwMessage[0])
					{
					/*
							Modify by yuxibo 2006.02.07
							
							'g_TQPSKChannelCopy1' should NOT be updated when 'DMD_TIMEOUT_MSG_ID' 
							received, so 'CSQPSKSetQPSKParameter' should not be called when

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -