📄 csqpskdmd.c
字号:
#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 + -