📄 csdsc12.c
字号:
/*************************************************************************
* 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 + -