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

📄 csdsc12.c

📁 QPSK Tuner details, for conexant chipset.
💻 C
📖 第 1 页 / 共 2 页
字号:
	#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;
	}
	
	return ( CSDSC12SendCommand ( bTunerIndex, STOP_COMMAND ) );
}

/* +==========================================================================+ */
/* | Function:	取消转动范围的限制(最东边和最西边)							  |	*/
/* | DiSEqC1.2 Command:	(E0 31 63)											  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t CSDSC12DisableLimit (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;
	}
	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;
	}
	
	return ( CSDSC12SendCommand ( bTunerIndex, REMOVE_LIMIT_COMMAND ) );
}

/* +==========================================================================+ */
/* | Function:	设置当前位置为马达转动的最东边/最西边限制					  |	*/
/* | DiSEqC1.2 Command:	(E0 31 66)											  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t CSDSC12SetLimit ( CSHDITunerIndex bTunerIndex, BYTE bDirection )
{
	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;
	}
	if( bDirection> WESTERN|| bDirection<EASTERN )
	{
		CSTRACE(ERROR_LEVEL, "[HDIQPSK][CSDSC12RotateCycles] invalid para: bDirection \r\n");
		return CSQPSK_INVALID_PARAM;
	}
	
	if ( bDirection == EASTERN )

		return ( CSDSC12SendCommand ( bTunerIndex, STORE_EAST_LIMIT_COMMAND ) );

	else

		return ( CSDSC12SendCommand ( bTunerIndex, STORE_WEST_LIMIT_COMMAND ) );

//	CSSleep( 200 );
		
	CSDSC12SendData ( bTunerIndex, STORE_POSITION_COMMAND, 0 );

}

/* +==========================================================================+ */
/* | Function:	根据第XX个卫星的偏移同步所有卫星的位置						  |	*/
/* | DiSEqC1.2 Command:	(E0 31 6F XX)										  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t CSDSC12AdjustTAB ( CSHDITunerIndex bTunerIndex, BYTE bPosition )
{
	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;
	}
	
	return ( CSDSC12SendData ( bTunerIndex, RECALCULATE_TABLE_COMMAND, bPosition ) );
}


/* +==========================================================================+ */
/* | Function:	转动到指定角度(For STAB USALS Motor)				  |	*/
/* | Input:	nAngle_10Multiply (天线方位角*10      >0 East, <0 West		  |	*/
/* | DiSEqC1.2 Command:	(E0 31 6B EX X X or E0 31 6B DX XX)					  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t CSDSC12GotoSTABPosition  ( CSHDITunerIndex bTunerIndex, int nAngle_10Multiply )
{
	BYTE pbValue[8];
	int nAngle;
	int nDotValue;
	pbValue[0] = 0xE0;
	pbValue[1] = 0x31;
	pbValue[2] = GOTO_STAB_POSITION_COMMAND;

	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;
	}
	
	if(nAngle_10Multiply == 0)
	{
		pbValue[2] = GOTO_POSITION_COMMAND;
		pbValue[3] = 0;
		return CSDSC12SendCmds (bTunerIndex, pbValue, 4);
	}
	else if (nAngle_10Multiply > 0)
	{
		//
		// [June 15, 2005]Modify by yuxibo
		//
		//pbValue[3] = 0xE0;
		//pbValue[3] = 0xD0;
		  pbValue[3] = 0xE0;/*modify by th*/
		nAngle = nAngle_10Multiply / 10;
		nDotValue = ((nAngle_10Multiply % 10) * 16 + 5) / 10 ;
	}
	else
	{
		//
		// [June 15, 2005]Modify by yuxibo
		//
		//pbValue[3] = 0xD0;
		//pbValue[3] = 0xE0;
		  pbValue[3] = 0xD0;/*modify by th*/
		nAngle = nAngle_10Multiply * (-1) / 10;
		nDotValue = ((nAngle_10Multiply*(-1) % 10) * 16 + 5) / 10 ;
	}
	pbValue[3] |= (BYTE)((nAngle >> 4) & 0x0f);
	
	pbValue[4] = (BYTE)((nAngle << 4) & 0xF0) | (nDotValue & 0x0F);
	return CSDSC12SendCmds (bTunerIndex, pbValue,5);
}

/* +==========================================================================+ */
/* | Function:	由本地经纬度和卫星位置获得天线角度
/* | Input:	sat_longitude:卫星经度;my_longitude:本地经度;my_latitude:本地纬度
/* | Output: 天线角度
/* +==========================================================================+ */
double CSDSC12GetAntennaAngle(double sat_longitude, double my_longitude, double my_latitude)
{
	double	G17, G18, G19, G20,  G23, G24_1, G24, G25, G26, G28, G29_1, G29;
	double	G30_1, G30, G31_1, G31_2, G31, G32_1, G32_2, G32, G33, G35;
	
	if(	(EV_ABS((double)sat_longitude) > 180.) ||
		(EV_ABS((double)my_longitude) > 180.) ||
		(EV_ABS((double)my_latitude) > 90.) )
	{
		return 0xFFFFFFFF;	// out of range
	}

	G17 = sat_longitude;
	G18 = my_longitude;
	G19 = my_latitude;

	G20 = EV_ABS(G17 - G18);		// G20 => 25.3

	if(G20 > 180.) G20 = G20 - 360.;	// G21

	if(EV_ABS(G20) > 65.)			// G22
		return 0xFFFFFFFF;	// out of range

	G23 = 6378. * sin(EV_PHI * G19 / 180.);	// G23 => 4509.92705
	G24_1 = 40678884. - (G23 * G23);
	G24 = sqrt(G24_1);						// G24 => 4509.92705
	G25 = G24 * sin(EV_PHI * G20 / 180.);	// G25 => 1927.352788
	G26 = sqrt((G23 * G23) + (G25 * G25));	/// G26 => 4904.501073
	G28 = 42164.2 - sqrt(40678884. - (G26 * G26));	// G26, G27
	G29_1 = (G28 * G28) + (G26 * G26);
	G29 = sqrt(G29_1);					// G29 => 38401.335289
	G30_1 = 42164.2 - G24;
	G30 = sqrt((G30_1 * G30_1) + (G23 * G23));	// G30 => 37923.392693
	G31_1 = cos(EV_PHI * G20 / 180.);		// cos(3.14 * 25.3 / 180) = cos(0.442) = 0.9999
	G31_2 = (3555639523. * (1. - G31_1));
	G31 = sqrt(G31_2);						// 18467.48162
	if(G29 == 0.)	return 0xFFFFFFFF;	// out of range
	if(G30 == 0.)	return 0xFFFFFFFF;	// out of range
	G32_1 = (G29 * G29) + (G30 * G30) - (G31 * G31);
	G32_2 = G32_1 / (2. * G29 * G30);
	G32 = acos(G32_2);				// G32 => 0.488612
	G33 = G32 * 180. / EV_PHI;		// G33 => 27.995412
	if(EV_ABS(G33) > 65.)		// G34
		return 0xFFFFFFFF;	// out of range

	//
	//	[ June 15, 2005 ] Modify by yuxibo for calculate usals degrees.
	//
	if( ((G17 < G18) && (G19 > 0.)) ||((G17 > G18) && (G19 < 0.)) )	// G35
		G35 = G33;
	else	G35 = (-1.) * G33;

	if( (G17 < -89.9) && (G18 > 89.9) ) G35 *= -1;	// G36
	if( (G17 > 89.9) && (G18 < -89.9) ) G35 *= -1;	// G37
	G35 = -G35;/*add by th 061227*/
	return G35;
}


CSQPSK_Error_t CSDSC12TurnSateWithUsals( CSHDITunerIndex bTunerIndex, double nSateLongtiude, double nBaseLongitude, double nLatitude)
{
	double dAngle;
	
	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;
	}
	
	 dAngle = CSDSC12GetAntennaAngle(nSateLongtiude, nBaseLongitude, nLatitude);
	
	if ( (dAngle > 65.) || (dAngle < -65.) || (dAngle == 0xFFFFFFFF) )	// Display "out of range"
	{
		return CSQPSK_FAILURE;
	}
	else
	{
		return CSDSC12GotoSTABPosition  ( bTunerIndex, (int)(dAngle*10) );
		//CSDSC12GotoSTABPosition  ( bTunerIndex, (int)(dAngle*10) );
	}	
}

////////


⌨️ 快捷键说明

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