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

📄 csqpskdmd.c

📁 QPSK Tuner details, for conexant chipset.
💻 C
📖 第 1 页 / 共 5 页
字号:
#include "cs_typedef.h"
#include "CSHDI_typedef.h"
//sfg #include "stddefs.h"
#include "CS_OS.h"
#include "CSQpskCFG.h"
#include "cs_qpsk.h"
#include "qpskfrontend.h"
#include "CSQPSKSwitchs.h"
#include "cs_gpio.h"
#include "CS_assert.h"
#include "CSDSC10.h" //sfg
#include "string.h"
#include "allcommand.h"
#ifdef CX2414X_SUPPORT 
#include "allcommand.h"
#include "cx24143drv.h"
#endif 	   

#define DROPPED   (1) /* Signal is dropped. Idle state */
#define WAITING   (2) /* Acquisition process has started. Waiting for interrupt/timeout */
#define CONNECTED (3) /* Signal successfully acquired */

#define DMD_CONNECT_REQUEST_MSG_ID (0x0001) /* connect request message id */
#define DMD_DROP_REQUEST_MSG_ID    (0x0002) /* drop request message id */
#define DMD_CONNECT_SAME_MSG_ID   (0x0003) /* same signal No need to Relock */
#define DMD_TIMEOUT_MSG_ID         (0x0004) /* time out connecting message id */
#define DMD_STS_MSG_ID (0x0005)
// return of signal compare 
#define CMP_DISEQC_CHANGE		(0x01)	// DiSEqC change was detected
#define CMP_CHANNEL_CHANGE	(0x02)	// Channel change was detected
#define CMP_NO_CHANGE			(0x03)	// No change detected

// Bits which figure DiSEqC changes 
#define DISEQC_LNBPOWER_BIT		(0x01)
#define DISEQC_SWITCH0_12V_BIT	(0x02)
#define DISEQC_POLAR_BIT			(0x04)
#define DISEQC_LNB_FREQ_BIT		(0x10)
#define DISEQC_COMMAND_BIT		(0x20)

#define CS_LOCK_METHOD_NORMAL 0x01
#define CS_LOCK_METHOD_SATCR 0x02   


BOOL	g_bQPSKHasInitialized[MAX_TUNER_NUM] = {FALSE, FALSE};
DWORD	g_dwNIMState[MAX_TUNER_NUM];
static HCSHANDLE	g_hCSQPSKQueueID[MAX_TUNER_NUM]  = { NULL, NULL};
static HCSHANDLE	g_hCSQPSKTaskID[MAX_TUNER_NUM]  = { NULL, NULL};
static HCSHANDLE  g_hCSQPSKAcqTimer[MAX_TUNER_NUM] = { NULL, NULL}; 
/*static*/ CSQPSKSignalParameterS2 g_TQPSKChannelCopy[MAX_TUNER_NUM];
/*static*/ CSQPSKSignalParameterS2 g_TQPSKChannelCopy1[MAX_TUNER_NUM];
static BYTE ucTunerSaTCR[MAX_TUNER_NUM] = { 0xff, 0xff};
static BYTE ucTunerInputLNB[MAX_TUNER_NUM] = { 0xff, 0xff};

#if defined(ST_OS21)
static DWORD g_dwQPSKStackSize = 4096+16*1024;
#else
static DWORD g_dwQPSKStackSize = 4096;
#endif

static DWORD g_dwLNBFreq[MAX_TUNER_NUM];
static BYTE	g_b22kStatus[MAX_TUNER_NUM];
static BYTE	g_bDiSEqCStatus[MAX_TUNER_NUM];
static CSQPSK_LNB_Status g_LNBStatus[MAX_TUNER_NUM] = { LNB_OFF, LNB_OFF};
//#ifdef CX2414X_SUPPORT
extern BYTE g_bLinkICType[MAX_TUNER_NUM];
//#endif 	   
CSHDICallback CSQPSKCallbackFunction[MAX_TUNER_NUM] = { NULL, NULL};
CSHDICallback CSQPSKCallbackFunctionEx[MAX_TUNER_NUM] = { NULL, NULL};
static int g_anBPFFreq[8] = {1400, 1515, 1633, 1748, 0, 0, 0, 0};
int g_nLoopCnt[MAX_TUNER_NUM] = {0, 0};
int g_nSRThreshInKsps[MAX_TUNER_NUM] = {6000, 6000}; //default SR threshhold value is 6M
/*for STS*/
#define MAX_TRANSPOND_NUM 125
typedef struct
{
	CSQPSKSignalParameter astTranspondList[MAX_TRANSPOND_NUM];
	int nValidCount;
}T_QPSKTransPondList;

T_QPSKTransPondList g_astTranspondList[MAX_TUNER_NUM];
int g_nDivide = 1;
int g_nSTSProcess = 0;
static T_QPSKSateInfo g_astSateInfoCopy[MAX_TUNER_NUM];
static T_QPSKSateInfo g_astSateInfoCopy1[MAX_TUNER_NUM];
extern int g_nProcPer;
enum/*盲扫双本振TUNER 的高低本振*/
{
	STS_Local_Low,
	STS_Local_High
};

int g_nQPSKHamaroTaskPriority = 0;/*动态设置CNX 任务的优先级*/
int  (*g_pSTSChannelScan)(int  bTunerIndex, CSQPSKSignalParameter *pTranspondList, int nMaxLength, T_QPSKSateInfo stSateInfo, int *pnActLength, int nBenZhen);
int (*g_GetSTSProc)(void);

int (*CSQPSKPatch)(CSHDITunerIndex bTunerIndex);
#ifdef LSI_PLATFORM
static void CSQPSKAcquisitionTask(void);
#else
static void CSQPSKAcquisitionTask( CSHDITunerIndex bTunerIndex ) ;
#endif
void CSQPSKSetChannelParameter( CSHDITunerIndex bTunerIndex, CSQPSKCHANNEL *ptrChannelParam);
DWORD CSQPSKSaTCRGetTunerFreq( CSHDITunerIndex enmTunerIndex);
CSQPSK_Error_t CSSaTCRConvertFreq( CSHDITunerIndex enmTunerIndex, CSQPSKSignalParameter stFreqParam, int nInputLNBIndex);
CSQPSK_Error_t CSQPSKDiSEqCOperation( CSHDITunerIndex bTunerIndex); //sfg

#define CSQPSK_VERSION "CS_QPSK-T-01.05.16" 

//#define QPSK_DEBUG

int CSQPSKGetVersion( PCHAR pchVer, int nSize )
{
     CHAR pchTmp[256]=CSQPSK_VERSION; 
     int nActLen;
     int nRetLen;
 
     //sprintf(pchTmp,"%s", CSQPSK_VERSION);
     nActLen = strlen( pchTmp ) + 1;
 
     if ( pchVer == NULL )
     {
          nRetLen = nActLen;
     }
     else
     {
          if ( nSize < 0 )
          {  
               nRetLen = 0;
          }
          else if ( nSize > nActLen )
          {
               nRetLen = nActLen;
          }
          else
          {   
               nRetLen = nSize;
          }
 
          strncpy( pchVer, pchTmp, nRetLen );
     }
 
     return nRetLen;
}

void Add_SetPriority(int nPriority)/*动态设置CNX 任务的优先级*/
{
	g_nQPSKHamaroTaskPriority = nPriority;
}

CSQPSK_Error_t CSQPSKQuerySignalQuality( CSHDITunerIndex bTunerIndex, int *pnSignalQuality )
{
	
	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 CSQPSK_INVALID_PARAM;
	}
	
	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;
	}
	
	CSASSERT( pnSignalQuality != NULL);
	if( pnSignalQuality== NULL )
	{
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] pnSignalQuality is NULL\r\n");
		return CSQPSK_INVALID_PARAM;
	}
	
	return (CSQPSKGetSignalQuality(bTunerIndex,pnSignalQuality)) ;
}

CSQPSK_Error_t CSQPSKQuerySignalStrength( CSHDITunerIndex bTunerIndex, int *pnSignalStrength )
{
	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 CSQPSK_INVALID_PARAM;
	}

	if (g_bQPSKHasInitialized[bTunerIndex] != TRUE)
	{
#ifdef QPSK_DEBUG
		CSTRACE( ERROR_LEVEL, "[HDIQPSK]CS_QPSK has not been initialized!!!\r\n" );
#endif
		return CSQPSK_FAILURE;
	}

	if (pnSignalStrength == NULL)
	{
#ifdef QPSK_DEBUG
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err pnSignalStrength = NULL incorrect \r\n");
		CSTRACE( ERROR_LEVEL, "Position:file = %s,line = %d\n", __FILE__, __LINE__);
#endif
		return CSQPSK_INVALID_PARAM;
	}
	
	/*CSASSERT( pnSignalStrength != NULL);
	CSASSERT( g_bQPSKHasInitialized[bTunerIndex] == TRUE);*/
	
	return (CSQPSKGetSignalStrength(bTunerIndex,pnSignalStrength));
}

CSQPSK_Error_t CSQPSKQueryErrorRate(CSHDITunerIndex bTunerIndex, DWORD *pdwErrorRate)
{
	
	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 CSQPSK_INVALID_PARAM;
	}

	if (g_bQPSKHasInitialized[bTunerIndex] != TRUE)
	{
#ifdef QPSK_DEBUG
		CSTRACE( ERROR_LEVEL, "[HDIQPSK]CS_QPSK has not been initialized!!!\r\n" );
#endif
		return CSQPSK_FAILURE;
	}

	if (pdwErrorRate == NULL)
	{
#ifdef QPSK_DEBUG
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err pdwErrorRate = NULL incorrect \r\n");
		CSTRACE( ERROR_LEVEL, "Position:file = %s,line = %d\n", __FILE__, __LINE__);
#endif
		return CSQPSK_INVALID_PARAM;
	}
	/*CSASSERT( pdwErrorRate != NULL);
	CSASSERT( g_bQPSKHasInitialized[bTunerIndex] == TRUE);*/
	return (CSQPSKSignalBER(bTunerIndex,pdwErrorRate)) ;
}

CSQPSK_Error_t CSQPSKCheckNIMLock(CSHDITunerIndex bTunerIndex, int *pnLockStatus)
{
	
	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 CSQPSK_INVALID_PARAM;
	}

	if (g_bQPSKHasInitialized[bTunerIndex] != TRUE)
	{
#ifdef QPSK_DEBUG
		CSTRACE( ERROR_LEVEL, "[HDIQPSK]CS_QPSK has not been initialized!!!\r\n" );
#endif
		return CSQPSK_FAILURE;
	}

	if (pnLockStatus == NULL)
	{
#ifdef QPSK_DEBUG
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err pnLockStatus = NULL incorrect \r\n");
		CSTRACE( ERROR_LEVEL, "	Position:file = %s,line = %d\n", __FILE__, __LINE__);
#endif
		return CSQPSK_INVALID_PARAM;
	}
	/*CSASSERT( g_bQPSKHasInitialized[bTunerIndex] == TRUE);
	CSASSERT( pnLockStatus != NULL);*/
	
	return (CSQPSKGetCheckLockStatus(bTunerIndex, pnLockStatus)) ;
}

int CSQPSKCheckNIMLost( CSHDITunerIndex bTunerIndex )
{
	int ii, nLostTimes = 0;
	int nLockStatus;
	
	for(ii = 0; ii < 5; ii++)
	{
		if((CSQPSKGetCheckLockStatus(bTunerIndex,&nLockStatus) == CSQPSK_SUCCESS) && (nLockStatus == FALSE))
		{
			nLostTimes++ ;
		}
		CSSleep(10);
	}

	if (nLostTimes > 2)
	{
		return 0;
	}
	else
	{
		return 1;
	}
	
}

int CSQPSKQueryFrequencyOffset ( CSHDITunerIndex bTunerIndex )
{
	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 CSQPSK_INVALID_PARAM;
	}

	if (g_bQPSKHasInitialized[bTunerIndex] != TRUE)
	{
#ifdef QPSK_DEBUG
		CSTRACE( ERROR_LEVEL, "[HDIQPSK]CS_QPSK has not been initialized!!!\r\n" );
#endif
		return CSQPSK_FAILURE;
	}

	/*CSASSERT( g_bQPSKHasInitialized[bTunerIndex] == TRUE);*/
	return CSGetFrequencyOffset(bTunerIndex) ;
}

void CSQPSKSetQPSKParameter(CSHDITunerIndex bTunerIndex, CSQPSKSignalParameterS2 pCSCHANNEL)
{
	memcpy(&g_TQPSKChannelCopy1[bTunerIndex], &pCSCHANNEL, sizeof(CSQPSKSignalParameterS2));
#ifdef QPSK_DEBUG
	CSTRACE( QPSK_DEBUG_LEVEL, "[CSQPSKSetQPSKParameter]: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
}

void CSQPSKQuitSearching (CSHDITunerIndex bTunerIndex, int flag)
{
	CSQPSKFEQuitSearching(bTunerIndex,flag) ;
}

/****************************************************************************
** Function QPSKInitialize(): This function detects and initializes the NIM 
** interface and return the type of interface detected.
**
** Inputs:  None 
**  
** Outputs: None
**
** Returns: The type of interface detected 
**            DMD_NIMTYPE_PARALLEL  - Parallel interface detected
**            DMD_NIMTYPE_QPSK      - QPSK NIM interface detected
**            DMD_NIMTYPE_QPSK       - QPSK NIM interface detected
****************************************************************************/
CSQPSK_Error_t CSQPSKInitialize( CSHDITunerIndex bTunerIndex, int nPriority, CSHDITsMode TSOutMode, int nResetPinNum )
{	
	CSQPSK_Error_t ErrorCode;
	char pMsgQueueName[2][16]={"QPSKQUEUE0","QPSKQUEUE1"};
	char pTaskName[2][16]={"QPSKTask0","QPSKTask1"};
	
	#ifdef STV0288_SUPPORT
	CSTRACE(ERROR_LEVEL, "[HDIQPSK] QPSK lib support  STV0288\r\n");
	#endif
	#ifdef ZL10313_SUPPORT
	CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support  ZL10313\r\n");
	#endif
	#ifdef ZL10039_SUPPORT
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support  ZL10039\r\n");
	#endif
	#ifdef STV0299_SUPPORT
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support  STV0299\r\n");
	#endif
	#ifdef STB6000_SUPPORT
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support  STB6000\r\n");
	#endif
	#ifdef IX2450_SUPPORT
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support  IX2450\r\n");
	#endif
	#ifdef IX2360_SUPPORT
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support  IX2360\r\n");
	#endif
	#ifdef IX2273_SUPPORT
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] QPSK lib support  IX2273\r\n");

⌨️ 快捷键说明

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