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