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

📄 csdsc12.c

📁 QPSK Tuner details, for conexant chipset.
💻 C
📖 第 1 页 / 共 2 页
字号:
/*************************************************************************

* DiSEqC12.C                                                            *

* Copyright ? Shenzhen Coship Electronics Co.,LTD.  2002.3             *

* All rights reserved.                                                  *

*                                                                       *

* Author: Zhou Cheng                                                     *

* Date:  2002/3/10                                                      *

* Compiler:					                                            *

*                                                                       *

* Description:	DiSEqC1.2 命令										    *

* Notes:                                                                *

* Update:   2002/3/10  Zhou Cheng										*

* Update:   2002/3/13  Zhou Cheng										*

*************************************************************************/

/* +==========================================================================+ */
/* |     				DiSEqC1.2 使用说明及注意事项						  | */
/* +==========================================================================+ */
/* +==========================================================================+ */
/* | 1.	为简洁起见,本文件只收录了与DiSEqC1.2有关的部分						  | */	
/* | 2.	发送DiSEqC1.2命令之前必须给LNB供电, 发送完之后恢复LNB供电状态		  | */	
/* | 3.	发送DiSEqC1.2命令之前必须保存22K状态, 发送完之后恢复				  | */	
/* | 4.	设定马达转动最东/最西端限制的步骤:									  | */	
/* |	1).	取消马达转动范围限制:						 					  | */	
/* |	2).	向东或向西转动:	东转:										      | */
/* |						西转:											  | */	
/* |	3).	转到合适位置后停止马达转动:										  | */	
/* |    4).	保存当前位置为最东/最西边限制: 东: 								  | */	
/* |									   西:								  | */	
/* +==========================================================================+ */
#include "cs_typedef.h"
#include "CSHDI_typedef.h"
#include "CSQpskCFG.h"
#include "cs_qpsk.h"
#include "cs_frnpublic.h"
#include "AllCommand.h"
#include "CSDSC12.h"
#include "math.h"
#include "cs_assert.h"
/* +==========================================================================+ */
/* |     					  DiSEqC1.2 代码部分							  | */
/* +==========================================================================+ */

#define EV_ABS(X) ((X)<0 ? (-(X)) : (X) )
#define EV_PHI			3.141592654

// DiSEqC1.2 命令
#define STOP_COMMAND				0x60
#define REMOVE_LIMIT_COMMAND		0x63
#define STORE_EAST_LIMIT_COMMAND	0x66
#define STORE_WEST_LIMIT_COMMAND	0x67
#define GOTO_EAST_COMMAND			0x68
#define GOTO_WEST_COMMAND			0x69
#define STORE_POSITION_COMMAND		0x6A
#define GOTO_POSITION_COMMAND		0x6B
#define GOTO_STAB_POSITION_COMMAND 	0x6E
#define RECALCULATE_TABLE_COMMAND	0x6F

extern BOOL	g_bQPSKHasInitialized[MAX_TUNER_NUM];
/* +==========================================================================+ */
/* | Function:	转动XX秒钟													  |	*/
/* | DiSEqC1.2 Command:	(E0 31 68 XX) (XX从 01 到 7F)						  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t CSDSC12RotateTimes(CSHDITunerIndex bTunerIndex, BYTE bDirection,BYTE bTime)
{
	BYTE bData;

	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][CSDSC12RotateTimes] invalid para: bDirection \r\n");
		return CSQPSK_INVALID_PARAM;
	}
	
	bData = bTime & 0x7f;

	if(bDirection == EASTERN)

		return ( CSDSC12SendData(bTunerIndex, GOTO_EAST_COMMAND, bData) );

	else

		return ( CSDSC12SendData(bTunerIndex, GOTO_WEST_COMMAND, bData) );
}


/* +==========================================================================+ */
/* | Function:	转动 XX	x 4马达转动周期(XX越大,步径越大)					  |	*/
/* | DiSEqC1.2 Command:	(E0 31 68 (100-XX)) (XX从 01 到 80)					  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t CSDSC12RotateCycles (CSHDITunerIndex bTunerIndex, BYTE bDirection,BYTE bCycles )
{
	BYTE bData;

	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;
	}
	
	bData = bCycles & 0x7f;

	bData = 0x100 - bData;

	if ( bDirection == EASTERN )

		return ( CSDSC12SendData ( bTunerIndex, GOTO_EAST_COMMAND, bData ) );

	else

		return ( CSDSC12SendData ( bTunerIndex, GOTO_WEST_COMMAND, bData ) );
}

/* +==========================================================================+ */
/* | Function:	将当前位置保存为第XX个卫星位置								  | */
/* | DiSEqC1.2 Command:	(E0 31 6A XX) (XX从01开始)							  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t CSDSC12StorePosition ( 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, STORE_POSITION_COMMAND, bPosition ) );
}

/* +==========================================================================+ */
/* | Function:	转到第XX个位置												  |	*/
/* | DiSEqC1.2 Command:	(E0 31 6B XX) (XX从01开始, 00是转到刻度为0的位置)	  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t CSDSC12GotoPosition ( 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, GOTO_POSITION_COMMAND, bPosition ) );
}

/* +==========================================================================+ */
/* | Function:	转到刻度为0的位置											  |	*/
/* | DiSEqC1.2 Command:	(E0 31 6B 00)										  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t CSDSC12ResetPosition ( 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 ( CSDSC12SendData ( bTunerIndex, GOTO_POSITION_COMMAND, 0 ) );
}

/* +==========================================================================+ */
/* | Function:	电机转动直到最东边(最西边)限制位置或接收到STOP命令才停止转动  |	*/
/* | DiSEqC1.2 Command:	(E0 31 68 00)										  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t CSDSC12RotateWithoutStop ( 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][CSDSC12RotateWithoutStop] invalid para: bDirection \r\n");
		return CSQPSK_INVALID_PARAM;
	}
	
	if ( bDirection == EASTERN )

		return ( CSDSC12SendData(bTunerIndex, GOTO_EAST_COMMAND, 0) );

	else

		return ( CSDSC12SendData(bTunerIndex, GOTO_WEST_COMMAND, 0) );
}

/* +==========================================================================+ */
/* | Function:	停止电机转动												  |	*/		
/* | DiSEqC1.2 Command:	(E0 31 60)											  |	*/
/* +==========================================================================+ */
CSQPSK_Error_t CSDSC12RotateStop (CSHDITunerIndex bTunerIndex)		
{
	if( bTunerIndex < 0 || bTunerIndex >= MAX_I2C_NUM)
	{

⌨️ 快捷键说明

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