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

📄 csqpskdmd.c

📁 QPSK Tuner details, for conexant chipset.
💻 C
📖 第 1 页 / 共 5 页
字号:
		CSTRACE( ERROR_LEVEL, "[HDIQPSK]CS_QPSK has not been initialized!!!\r\n" );
#endif
		return CSQPSK_FAILURE;
	}

	if( signalPtr == NULL)
	{
#ifdef QPSK_DEBUG
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err signalPtr = NULL incorrect \r\n");
		CSTRACE( ERROR_LEVEL, "Position:file = %s,line = %d\r\n", __FILE__, __LINE__);
#endif
		return CSQPSK_INVALID_PARAM;
	}
	if( (signalPtr->m_dwstandard<DVBS_STANDARD) ||(signalPtr->m_dwstandard > DVBS2_STANDARD) )
	{
		return CSQPSK_INVALID_PARAM;
	}
	if( (signalPtr->m_dwModulation < CS_QPSK) ||(signalPtr->m_dwModulation >  CS_8PSK) )
	{
		return CSQPSK_INVALID_PARAM;
	}
	if( (signalPtr->bFECRates < FEC_AUTO) || (signalPtr->bFECRates > FEC9_10) )
	{
		return CSQPSK_INVALID_PARAM;
	}
#ifdef QPSK_DEBUG	
	CSTRACE( QPSK_DEBUG_LEVEL, "\r\n[HDIQPSK][CSQPSKConnectSignalS2]: dwFreqency=%ld, dwLNBHighFreq=%ld, dwLNBLowFreq=%ld, dwLNBMidFreq=%ld,  nFreqencyOffset=%ld\r\n", signalPtr->dwFreqency, signalPtr->dwLNBHighFreq, signalPtr->dwLNBLowFreq, signalPtr->dwLNBMidFreq, signalPtr->nFreqencyOffset);
	CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK][CSQPSKConnectSignalS2]:bLNBPower=%d dwSymbolRate=%ld bPolar=0x%.2x, b22K=0x%.2x, bIQ=0x%.2x, bFec=0x%x\r\n", signalPtr->bLNBPower,signalPtr->dwSymbolRate, signalPtr->bPolar, signalPtr->b22K ,signalPtr->bIQ,signalPtr->bFECRates);
	CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK][CSQPSKConnectSignalS2]:bDiSEqC10=0x%.2x, bDiSEqC11=0x%.2x, bDiSEqCRepeat=0x%.2x\r\n", signalPtr->bDiSEqC10, signalPtr->bDiSEqC11, signalPtr->bDiSEqCRepeat);
	CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK][CSQPSKConnectSignalS2]:bLNBPower=0x%.2x, bLNBType=0x%.2x, bSwitch0_12V=0x%.2x, bToneBurst=0x%.2x\r\n", signalPtr->bLNBPower, signalPtr->bLNBType, signalPtr->bSwitch0_12V, signalPtr->bToneBurst);
#endif
	
	while(CSReceiveMsg( g_hCSQPSKQueueID[bTunerIndex], (PVOID)dwMessage, 16, CSHDI_TIMEOUT_IMMEDIATE) == CS_OSP_SUCCESS)
	{	
#ifdef QPSK_DEBUG
		CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK][CSQPSKConnectSignalS2]Message can't send to task!@@@@@@@@@@@@@@@\r\n");
#endif
		/*
		    Modify by yuxibo 2006.02.07
		    No need to reset 'g_TQPSKChannelCopy'.
		*/
		/*
		if ( dwMessage[0] == DMD_CONNECT_REQUEST_MSG_ID )
		{
			memset( &g_TQPSKChannelCopy[bTunerIndex], -1, sizeof(CSQPSKSignalParameter) );
		}
		*/
	}
	signalPtr->ucSatCRNo= 0xff;
	signalPtr->ucSatCRLNBNo= 0xff;
#ifdef QPSK_DEBUG
		CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK][CSQPSKConnectSignaS2l]ucSatCRNo=%d,signalPtr->ucSatCRLNBNo=%d\r\n",signalPtr->ucSatCRNo,signalPtr->ucSatCRLNBNo);
#endif
	nCmpReturn = CSQPSKSignalCompareCheck( bTunerIndex, signalPtr );
	if ( ( nCmpReturn == CMP_NO_CHANGE ) && ( g_dwNIMState[bTunerIndex] != DROPPED ) )
	{			
			dwMessage[0] = DMD_CONNECT_SAME_MSG_ID;
			dwMessage[1] = nCmpReturn;
			dwMessage[2] = CS_LOCK_METHOD_NORMAL;
			dwMessage[3] = NULL;
	}
	else 
	{			
			CSQPSKStopLock( bTunerIndex );			
			/* 
				Deleted by yuxibo 2006.02.07
				It is no need to modify the status of 'g_dwState'.
			*/			
			/* g_dwNIMState[bTunerIndex] = DROPPED; */
			dwMessage[0] = DMD_CONNECT_REQUEST_MSG_ID;
			dwMessage[1] = nCmpReturn;
			dwMessage[2] = CS_LOCK_METHOD_NORMAL;
			dwMessage[3] = NULL;
	}

	/* 'CSQPSKSetChannel' should be called everytime */
	CSQPSKSetChannel( bTunerIndex, signalPtr );
	
#ifdef QPSK_DEBUG
		CSTRACE( QPSK_DEBUG_LEVEL, "dwMessage[0] = %d,dwMessage[1] = %d\r\n", dwMessage[0], dwMessage[1]);
#endif
	ret = CSSendMsg( g_hCSQPSKQueueID[bTunerIndex], (const PVOID)dwMessage, 16, CSHDI_TIMEOUT_INFINITY);
#ifdef QPSK_DEBUG
		CSTRACE( QPSK_DEBUG_LEVEL, "\n\r=====> CSQPSKConnectSignalS2 CSSendMsg result = %d\r\n", ret );
#endif
	if ( ret != CS_OSP_SUCCESS )
	{
#ifdef QPSK_DEBUG
		CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK] Err CSSendMsg failed\r\n");
		CSTRACE( QPSK_DEBUG_LEVEL, "Position:file = %s,line = %d\n", __FILE__, __LINE__);
#endif
		return CSQPSK_SYSTEM_ERROR;
	}
	
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CSQPSKSaTCRConnectSignal( CSHDITunerIndex bTunerIndex, CSQPSKSaTCRSignalParameter *signalPtr)
{	
	DWORD dwMessage[4];	
	int	nCmpReturn;
	int 	ret ;
	CSQPSKSignalParameterS2 stSaTCRSignalParam;

	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
		CSTRACE( ERROR_LEVEL, "[HDIQPSK]CS_QPSK has not been initialized!!!\n" );
#endif
		return CSQPSK_FAILURE;
	}

#ifdef QPSK_DEBUG	
	CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK][CSQPSKConnectSignal]: dwFreqency=%ld, dwLNBHighFreq=%ld, dwLNBLowFreq=%ld, dwLNBMidFreq=%ld,  nFreqencyOffset=%ld\n", signalPtr->dwFreqency, signalPtr->dwLNBHighFreq, signalPtr->dwLNBLowFreq, signalPtr->dwLNBMidFreq, signalPtr->nFreqencyOffset);
	CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK][CSQPSKConnectSignal]:dwSymbolRate=%ld bPolar=0x%.2x, b22K=0x%.2x, bIQ=0x%.2x, bFec=0x%x\n",  signalPtr->dwSymbolRate, signalPtr->bPolar, signalPtr->b22K ,signalPtr->bIQ,signalPtr->bFECRates);
	CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK][CSQPSKConnectSignal]:bDiSEqC10=0x%.2x, bDiSEqC11=0x%.2x, bDiSEqCRepeat=0x%.2x \n", signalPtr->bDiSEqC10, signalPtr->bDiSEqC11, signalPtr->bDiSEqCRepeat);
	CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK][CSQPSKConnectSignal]:bLNBPower=0x%.2x, bLNBType=0x%.2x, bSwitch0_12V=0x%.2x, bToneBurst=0x%.2x\n", signalPtr->bLNBPower, signalPtr->bLNBType, signalPtr->bSwitch0_12V, signalPtr->bToneBurst);
#endif
	
	while(CSReceiveMsg( g_hCSQPSKQueueID[bTunerIndex], (PVOID)dwMessage, 16, CSHDI_TIMEOUT_IMMEDIATE) == CS_OSP_SUCCESS)
	{	
#ifdef QPSK_DEBUG
		CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK][CSQPSKConnectSignal]Message can't send to task!@@@@@@@@@@@@@@@\n");
#endif
		/*
		    Modify by yuxibo 2006.02.07
		    No need to reset 'g_TQPSKChannelCopy'.
		*/
		/*
		if ( dwMessage[0] == DMD_CONNECT_REQUEST_MSG_ID )
		{
			memset( &g_TQPSKChannelCopy[bTunerIndex], -1, sizeof(CSQPSKSignalParameter) );
		}
		*/
	}
	stSaTCRSignalParam.bSwitch0_12V = signalPtr->bSwitch0_12V;
	stSaTCRSignalParam.bPolar = signalPtr->bPolar;
	stSaTCRSignalParam.b22K = signalPtr->b22K;
	stSaTCRSignalParam.bLNBPower = signalPtr->bLNBPower;
	stSaTCRSignalParam.bLNBType = signalPtr->bLNBType;
	stSaTCRSignalParam.dwLNBLowFreq = signalPtr->dwLNBLowFreq;
	stSaTCRSignalParam.dwLNBMidFreq = signalPtr->dwLNBMidFreq;
	stSaTCRSignalParam.dwLNBHighFreq = signalPtr->dwLNBHighFreq;
	stSaTCRSignalParam.bDiSEqC10 = signalPtr->bDiSEqC10;
	stSaTCRSignalParam.bDiSEqC11 = signalPtr->bDiSEqC11;
	stSaTCRSignalParam.bToneBurst = signalPtr->bToneBurst;
	stSaTCRSignalParam.bDiSEqCRepeat = signalPtr->bDiSEqCRepeat;
	
	stSaTCRSignalParam.dwFreqency = signalPtr->dwFreqency;
	stSaTCRSignalParam.nFreqencyOffset = signalPtr->nFreqencyOffset;
	stSaTCRSignalParam.dwSymbolRate = signalPtr->dwSymbolRate;
	stSaTCRSignalParam.bIQ = signalPtr->bIQ;
	stSaTCRSignalParam.bFECRates=signalPtr->bFECRates;
	
	stSaTCRSignalParam.ucPilot=0;
	
	stSaTCRSignalParam.ucSatCRNo= signalPtr->ucSaTCRNum;
	stSaTCRSignalParam.ucSatCRLNBNo= signalPtr->ucLNBNum;
	stSaTCRSignalParam.m_dwModulation=CS_QPSK;
	stSaTCRSignalParam.m_dwOption=OPTION_NONE;
	stSaTCRSignalParam.m_dwstandard=DVBS_STANDARD;
	
	if ((stSaTCRSignalParam.ucSatCRLNBNo == 0xff) || (stSaTCRSignalParam.ucSatCRNo == 0xff))
	{
		stSaTCRSignalParam.ucSatCRLNBNo = 0xff;
		stSaTCRSignalParam.ucSatCRNo = 0xff;
	}
	else
	{
		stSaTCRSignalParam.bLNBPower = LNB_AUTO;
	}
	
	nCmpReturn = CSQPSKSignalCompareCheck( bTunerIndex, &stSaTCRSignalParam);
	if ( ( nCmpReturn == CMP_NO_CHANGE ) && ( g_dwNIMState[bTunerIndex] != DROPPED ) )
	{			
			dwMessage[0] = DMD_CONNECT_SAME_MSG_ID;
			dwMessage[1] = nCmpReturn;
			dwMessage[2] = CS_LOCK_METHOD_NORMAL;
			dwMessage[3] = NULL;
	}
	else 
	{			
			CSQPSKStopLock( bTunerIndex );			
			/* 
				Deleted by yuxibo 2006.02.07
				It is no need to modify the status of 'g_dwState'.
			*/			
			/* g_dwNIMState[bTunerIndex] = DROPPED; */
			dwMessage[0] = DMD_CONNECT_REQUEST_MSG_ID;
			dwMessage[1] = nCmpReturn;
			dwMessage[2] = CS_LOCK_METHOD_NORMAL;
			dwMessage[3] = NULL;
	}

	/* 'CSQPSKSetChannel' should be called everytime */
	CSQPSKSetChannel( bTunerIndex, &stSaTCRSignalParam);
	
	ret = CSSendMsg( g_hCSQPSKQueueID[bTunerIndex], (const PVOID)dwMessage, 16, CSHDI_TIMEOUT_INFINITY);
	if ( ret != CS_OSP_SUCCESS )
	{
#ifdef QPSK_DEBUG
		CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK] Err CSSendMsg failed\n");
		CSTRACE( QPSK_DEBUG_LEVEL, "Position:file = %s,line = %d\n", __FILE__, __LINE__);
#endif
		return CSQPSK_SYSTEM_ERROR;
	}
	
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CSQPSKConnectSignal( CSHDITunerIndex bTunerIndex, CSQPSKSignalParameter *signalPtr )
{	
	DWORD dwMessage[4];	
	int	nCmpReturn;
	int 	ret ;	
	CSQPSKSignalParameterS2 stSaTCRSignalParam;

	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
		CSTRACE( ERROR_LEVEL, "[HDIQPSK]CS_QPSK has not been initialized!!!\r\n" );
#endif
		return CSQPSK_FAILURE;
	}

#if 0	  
	CSTRACE( ERROR_LEVEL, "\r\n[HDIQPSK][CSQPSKConnectSignal]: dwFreqency=%ld, dwLNBHighFreq=%ld, dwLNBLowFreq=%ld, dwLNBMidFreq=%ld,  nFreqencyOffset=%ld\r\n", signalPtr->dwFreqency, signalPtr->dwLNBHighFreq, signalPtr->dwLNBLowFreq, signalPtr->dwLNBMidFreq, signalPtr->nFreqencyOffset);
	CSTRACE( ERROR_LEVEL, "[HDIQPSK][CSQPSKConnectSignal]:dwSymbolRate=%ld bPolar=0x%.2x, b22K=0x%.2x, bIQ=0x%.2x, bFec=0x%x\r\n",  signalPtr->dwSymbolRate, signalPtr->bPolar, signalPtr->b22K ,signalPtr->bIQ,signalPtr->bFECRates);
	CSTRACE( ERROR_LEVEL, "[HDIQPSK][CSQPSKConnectSignal]:bDiSEqC10=0x%.2x, bDiSEqC11=0x%.2x, bDiSEqCRepeat=0x%.2x \r\n", signalPtr->bDiSEqC10, signalPtr->bDiSEqC11, signalPtr->bDiSEqCRepeat);
	CSTRACE( ERROR_LEVEL, "[HDIQPSK][CSQPSKConnectSignal]:bLNBPower=0x%.2x, bLNBType=0x%.2x, bSwitch0_12V=0x%.2x, bToneBurst=0x%.2x\r\n", signalPtr->bLNBPower, signalPtr->bLNBType, signalPtr->bSwitch0_12V, signalPtr->bToneBurst);
#endif
	if( signalPtr == NULL)
	{
#ifdef QPSK_DEBUG
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err signalPtr = NULL incorrect \r\n");
		CSTRACE( ERROR_LEVEL, "Position:file = %s,line = %d\r\n", __FILE__, __LINE__);
#endif
		return CSQPSK_INVALID_PARAM;
	}
	
	while(CSReceiveMsg( g_hCSQPSKQueueID[bTunerIndex], (PVOID)dwMessage, 16, CSHDI_TIMEOUT_IMMEDIATE) == CS_OSP_SUCCESS)
	{	
#ifdef QPSK_DEBUG
		CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK][CSQPSKConnectSignal]Message can't send to task!@@@@@@@@@@@@@@@\r\n");
#endif
		/*
		    Modify by yuxibo 2006.02.07
		    No need to reset 'g_TQPSKChannelCopy'.
		*/
		/*
		if ( dwMessage[0] == DMD_CONNECT_REQUEST_MSG_ID )
		{
			memset( &g_TQPSKChannelCopy[bTunerIndex], -1, sizeof(CSQPSKSignalParameter) );
		}
		*/
	}

	stSaTCRSignalParam.bSwitch0_12V = signalPtr->bSwitch0_12V;
	stSaTCRSignalParam.bPolar = signalPtr->bPolar;
	stSaTCRSignalParam.b22K = signalPtr->b22K;
	stSaTCRSignalParam.bLNBPower = signalPtr->bLNBPower;
	stSaTCRSignalParam.bLNBType = signalPtr->bLNBType;
	stSaTCRSignalParam.dwLNBLowFreq = signalPtr->dwLNBLowFreq;
	stSaTCRSignalParam.dwLNBMidFreq = signalPtr->dwLNBMidFreq;
	stSaTCRSignalParam.dwLNBHighFreq = signalPtr->dwLNBHighFreq;
	stSaTCRSignalParam.bDiSEqC10 = signalPtr->bDiSEqC10;
	stSaTCRSignalParam.bDiSEqC11 = signalPtr->bDiSEqC11;
	stSaTCRSignalParam.bToneBurst = signalPtr->bToneBurst;
	stSaTCRSignalParam.bDiSEqCRepeat = 0;//;signalPtr->bDiSEqCRepeat;
	
	stSaTCRSignalParam.dwFreqency = signalPtr->dwFreqency;
	stSaTCRSignalParam.nFreqencyOffset = signalPtr->nFreqencyOffset;
	stSaTCRSignalParam.dwSymbolRate = signalPtr->dwSymbolRate;
	stSaTCRSignalParam.bIQ = signalPtr->bIQ;
	stSaTCRSignalParam.bFECRates=signalPtr->bFECRates;
	
	stSaTCRSignalParam.ucPilot=0;
	stSaTCRSignalParam.ucSatCRNo= 0xff;
	stSaTCRSignalParam.ucSatCRLNBNo= 0xff;
	stSaTCRSignalParam.m_dwModulation=CS_QPSK;
	stSaTCRSignalParam.m_dwOption=OPTION_NONE;
	stSaTCRSignalParam.m_dwstandard=DVBS_STANDARD;
	
	nCmpReturn = CSQPSKSignalCompareCheck( bTunerIndex, &stSaTCRSignalParam );
	if ( ( nCmpReturn == CMP_NO_CHANGE ) && ( g_dwNIMState[bTunerIndex] != DROPPED ) )
	{			
			dwMessage[0] = DMD_CONNECT_SAME_MSG_ID;
			dwMessage[1] = nCmpReturn;
			dwMessage[2] = CS_LOCK_METHOD_NORMAL;
			dwMessage[3] = NULL;
	}
	else 
	{			
			CSQPSKStopLock( bTunerIndex );			
			/* 
				Deleted by yuxibo 2006.02.07
				It is no need to modify the status of 'g_dwState'.
			*/			
			/* g_dwNIMState[bTunerIndex] = DROPPED; */
			dwMessage[0] = DMD_CONNECT_REQUEST_MSG_ID;
			dwMessage[1] = nCmpReturn;
			dwMessage[2] = CS_LOCK_METHOD_NORMAL;
			dwMessage[3] = NULL;
	}

	/* 'CSQPSKSetChannel' should be called everytime */
	CSQPSKSetChannel( bTunerIndex, &stSaTCRSignalParam );
	
	ret = CSSendMsg( g_hCSQPSKQueueID[bTunerIndex], (const PVOID)dwMessage, 16, CSHDI_TIMEOUT_INFINITY);
	if ( ret != CS_OSP_SUCCESS )
	{
#ifdef QPSK_DEBUG
		CSTRACE( QPSK_DEBUG_LEVEL, "[HDIQPSK] Err CSSendMsg failed\n");
		CSTRACE( QPSK_DEBUG_LEVEL, "Position:file = %s,line = %d\n", __FILE__, __LINE__);
#endif
		return CSQPSK_SYSTEM_ERROR;
	}
	
	return CSQPSK_SUCCESS;
}

CSQPSK_Error_t CSQPSKSTS(CSHDITunerIndex bTunerIndex, T_QPSKSateInfo stSateInfo)
{
	DWORD dwMessage[4];	
	int	nCmpReturn;
	int 	ret ;	

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

	CSTRACE(ERROR_LEVEL, "[HDIQPSK]CSQPSKSTS\r\n");
	
	if( bTunerIndex < 0 || bTunerIndex >= MAX_I2C_NUM)
	{
		CSTRACE( ERROR_LEVEL, "[HDIQPSK] Err bTunerIndex = %d incorrect \n", bTunerIndex);
		CSTRACE( ERROR_LEVEL, "	Position:file = %s,line = %d\n", __FILE__, __LINE__);
		return CSQPSK_FAILURE;
	}
	
	CSASSERT( g_bQPSKHasInitialized[bTunerIndex] == TRUE);
	
	while(CSReceiveMsg( g_hCSQPSKQueueID[bTunerIndex], (PVOID)dwMessage, 16, CSHDI_TIMEOUT_IMMEDIATE) == CS_OSP_SUCCESS)
	{	
		
	}
	
	CSQPSKStopLock( bTunerIndex );			
	/* 
		Deleted by yuxibo 2006.02.07
		It is no need to modify the status of 'g_dwState'.
	*/			
	/* g_dwNIMState[bTunerIndex] = DROPPED; */

	dwMessage[0] = DMD_STS_MSG_ID;
	dwMessage[1] = NULL;
	dwMessage[2] = CS_LOCK_METHOD_NORMAL;
	dwMessage[3] = NULL;

	/* 'CSQPSKSetChannel' should be called everytime */
	g_astSateInfoCopy[bTunerIndex] = stSateInfo;
	//memset(&g_astSateInfoCopy[bTunerIndex], &stSateInfo, sizeof(stSateInfo));
	
	ret = CSSendMsg( g_hCSQPSKQueueID[bTunerIndex], (const PVOID)dwMessage, 16, CSHDI_TIMEOUT_INFINITY);

⌨️ 快捷键说明

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