📄 reg0370qam.c
字号:
regsym = regsym / 65536L; /* 65536L = 2**16 */
regsym = ExtClk_Khz * regsym; /* ExtClk in kHz */
RegSymbolRate = regsym/256L; /* 256 = 2**8 */
RegSymbolRate *= 125 ; /* 125 = 1000/2**3*/
RegSymbolRate /= 512L ; /* 512 = 2**9 */
}
else if(regsym < 536870912L) /* 536870912L = 2**29 */
/* # 6.25 MBd (clock = 50 MHz) */
{
regsym = regsym * 8; /* 8 = 2**3*/
regsym = regsym / 65536L; /* 65536L = 2**16 */
regsym = ExtClk_Khz * regsym; /* ExtClk in kHz */
RegSymbolRate = regsym/256L; /* 256 = 2**8 */
RegSymbolRate *= 125 ; /* 125 = 1000/2**3*/
RegSymbolRate /= 256L ; /* 256 = 2**8 */
}
else
{
regsym = regsym * 4; /* 8 = 2**2*/
regsym = regsym / 65536L; /* 65536L = 2**16 */
regsym = ExtClk_Khz * regsym; /* ExtClk in kHz */
RegSymbolRate = regsym/256L; /* 256 = 2**8 */
RegSymbolRate *= 125 ; /* 125 = 1000/2**3*/
RegSymbolRate /= 128L ; /* 128 = 2**7 */
}
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
STTBX_Print(("%s ==> SR %u\n", identity, RegSymbolRate));
#endif
return(RegSymbolRate);
}
/*----------------------------------------------------
FUNCTION Reg0370QAM_SetSymbolRate
ACTION Sets the symbol rate
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t Reg0370QAM_SetSymbolRate(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,unsigned long _SymbolRate,S32 ExtClk)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
const char *identity = "STTUNER reg0370qam.c Reg0370QAM_SetSymbolRate()";
#endif
unsigned long ulong_tmp;
ST_ErrorCode_t Error = ST_NO_ERROR;
long ExtClk_Khz;
ExtClk_Khz=(long)ExtClk/1000;
ulong_tmp = _SymbolRate;
if(ulong_tmp < 2097152L) /* 8388608 = 2**21*/
{
ulong_tmp *= 2048; /* 2048 = 2**11 */
ulong_tmp = ulong_tmp /ExtClk_Khz;
ulong_tmp = ulong_tmp * 32768L; /* 8192 = 2**15 */
ulong_tmp /= 125L ; /* 125 = 1000/2**3*/
ulong_tmp = ulong_tmp * 8L; /* 8 = 2**3 */
}
else if(ulong_tmp < 4194304L) /* 4194304 = 2**22*/
{
ulong_tmp *= 1024 ; /* 1024 = 2**10 */
ulong_tmp = ulong_tmp /ExtClk_Khz;
ulong_tmp = ulong_tmp * 32768L; /* 8192 = 2**15 */
ulong_tmp /= 125L ; /* 125 = 1000/2**3*/
ulong_tmp = ulong_tmp * 16L; /* 16 = 2**4 */
}
else if(ulong_tmp < 8388607L) /* 8388607 = 2**23*/
{
ulong_tmp *= 512 ; /* 512 = 2**9 */
ulong_tmp = (ulong_tmp) /ExtClk_Khz;
ulong_tmp = ulong_tmp * 32768L; /* 8192 = 2**15 */
ulong_tmp /= 125L ; /* 125 = 1000/2**3*/
ulong_tmp = ulong_tmp * 32L; /* 32 = 2**5 */
}
else
{
ulong_tmp *= 256 ; /* 256 = 2**8*/
ulong_tmp = ulong_tmp /ExtClk_Khz;
ulong_tmp = ulong_tmp * 32768L; /* 8192 = 2**15 */
ulong_tmp /= 125L ; /* 125 = 1000/2**3*/
ulong_tmp = ulong_tmp * 64L; /* 64 = 2**6 */
}
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
STTBX_Print(("%s ==> SR %u (%u)\n", identity, _SymbolRate, ulong_tmp));
#endif
STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_SYMB_RATE_3,(U32)(ulong_tmp>>24));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_SYMB_RATE_2,(U32)(ulong_tmp>>16));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_SYMB_RATE_1,(U32)(ulong_tmp>>8));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_SYMB_RATE_0,(U32)(ulong_tmp));
return Error;
}
/*----------------------------------------------------
FUNCTION Reg0370QAM_SetSpectrumInversion
ACTION Sets the spectrum inversion
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t Reg0370QAM_SetSpectrumInversion(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,FLAG_370QAM _SpectrumInversion)
{
ST_ErrorCode_t Error = ST_NO_ERROR;
if(_SpectrumInversion == YES)
{
STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_INV_SPEC_MAPPING,1);
}
else
{
STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_INV_SPEC_MAPPING,0);
}
return Error;
}
/*----------------------------------------------------
FUNCTION Reg0370QAM_SetSweepRate
ACTION Sets the sweep rate
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t Reg0370QAM_SetSweepRate(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,short _FShift,S32 ExtClk)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
const char *identity = "STTUNER reg0370QAM.c Reg0370QAM_SetSweepRate()";
#endif
long long_tmp;
short FShift;
unsigned long ulong_tmp;
ST_ErrorCode_t Error = ST_NO_ERROR;
FShift = _FShift; /* in ms*/
ulong_tmp = Reg0370QAM_GetSymbolRate(DeviceMap,IOHandle, ExtClk); /* in Baud/s*/
if(ulong_tmp == 0) /*No need to check for -ve as ulong_tmp is unsigned long*/
{
return Error;/*Return proper error value*/
}
long_tmp = FShift * 262144L; /* 262144 = 2*18*/
ulong_tmp /= 1024;
long_tmp /= (long) ulong_tmp;
long_tmp /= 1000;
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
STTBX_Print(("%s ==> _FShift %d long_tmp %d %x\n", identity, _FShift, long_tmp, long_tmp));
#endif
STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_SWEEP_MSB,(U32)((long_tmp>>8) & 0x0F));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_SWEEP_LSB,(U32)(long_tmp & 0xFF));
return Error;
}
/*----------------------------------------------------
FUNCTION Reg0370QAM_SetFrequencyOffset
ACTION Sets the frequency offset
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t Reg0370QAM_SetFrequencyOffset(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle,long _CarrierOffset)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
const char *identity = "STTUNER reg0370qam.c Reg0370QAM_SetFrequencyOffset()";
#endif
long long_tmp;
long CarrierOffset;
ST_ErrorCode_t Error = ST_NO_ERROR;
CarrierOffset = _CarrierOffset ; /* in 1/000 of Fs*/
long_tmp = CarrierOffset * 26844L; /* (2**28)/10000*/
if(long_tmp < 0) long_tmp += 0x10000000 ;
long_tmp &= 0x0FFFFFFF;
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
STTBX_Print(("%s ==> _CarrierOffset %d long_tmp %d %x\n", identity, _CarrierOffset, long_tmp, long_tmp));
#endif
STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_IPHASE_3,(U32)(long_tmp>>24));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_IPHASE_2,(U32)(long_tmp>>16));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_IPHASE_1,(U32)(long_tmp>>8));
STTUNER_IOREG_SetField(DeviceMap,IOHandle,F0370QAM_IPHASE_0,(U32)long_tmp);
return Error;
}
/*----------------------------------------------------
FUNCTION Reg0370QAM_GetBlkCounter
ACTION Gets the number of blocks
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
unsigned short Reg0370QAM_GetBlkCounter(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
const char *identity = "STTUNER reg0370qam.c Reg0370QAM_GetBlkCounter()";
#endif
unsigned short Value;
Value = STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370QAM_RS_UNERR_CNT_LSB);
Value += STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370QAM_RS_UNERR_CNT_MSB)<<8;
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
STTBX_Print(("%s ==> Blk (FEC_B) %u\n", identity, Value));
#endif
return(Value);
}
/*----------------------------------------------------
FUNCTION Reg0370QAM_GetCorrBlk
ACTION Gets the number of corrected blocks
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
unsigned short Reg0370QAM_GetCorrBlk(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
const char *identity = "STTUNER reg0370qam.c Reg0370QAM_GetCorrBlk()";
#endif
unsigned short Value;
Value = STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370QAM_RS_CORR_CNT_LSB);
Value += STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370QAM_RS_CORR_CNT_MSB)<<8;
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
STTBX_Print(("%s ==> CorrBlk (FEC_B) %u\n", identity, Value));
#endif
return(Value);
}
/*----------------------------------------------------
FUNCTION Reg0370QAM_GetUncorrBlk
ACTION Gets the number of uncorrected blocks
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
unsigned short Reg0370QAM_GetUncorrBlk(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
const char *identity = "STTUNER reg0370qam.c Reg0370QAM_GetUncorrBlk()";
#endif
unsigned short Value;
Value = STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370QAM_RS_UNC_CNT_LSB);
Value += STTUNER_IOREG_GetField(DeviceMap, IOHandle,F0370QAM_RS_UNC_CNT_MSB)<<8;
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
STTBX_Print(("%s ==> UncorrBlk (FEC_B==1) %u\n", identity, Value));
#endif
return(Value);
}
/* ----------------------------------------------------------------------------
Name: Reg0370QAM_GetSTB0370QAMId()
Description:
Parameters:
Return Value:
---------------------------------------------------------------------------- */
U8 Reg0370QAM_GetSTB0370QAMId(STTUNER_IOREG_DeviceMap_t *DeviceMap, IOARCH_Handle_t IOHandle)
{
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
const char *identity = "STTUNER reg0370qam.c Reg0370QAM_GetSTB0370QAMId()";
#endif
U8 Value;
Value= STTUNER_IOREG_GetRegister(DeviceMap, IOHandle, R0370QAM_ID);/*change register name to specify QAM reg*/
#ifdef STTUNER_DEBUG_MODULE_CABDRV_REG0370QAM
STTBX_Print(("%s ==> Version %x\n", identity, Value));
#endif
return(Value);
}
/* End of reg0370qam.c */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -