📄 lnb21.c
字号:
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNB21_ISEL, 1, &(Instance->RegVal) );
}
}
#endif
#ifdef STTUNER_MINIDRIVER
void LNB21_SetCurrentThreshold(LNB_CurrentThresholdSelection_t CurrentThresholdSelection)
{
if (CurrentThresholdSelection == CURRENT_THRESHOLD_HIGH)
{
LNB21_Default_Reg[0x00] &= 0xBF;
}
else if(CurrentThresholdSelection == CURRENT_THRESHOLD_LOW)
{
LNB21_Default_Reg[0x00] |= 0x40;
}
}
void LNB21_SetProtectionMode(LNB_ShortCircuitProtectionMode_t ShortCircuitProtectionMode)
{
if (ShortCircuitProtectionMode == LNB_PROTECTION_DYNAMIC)
{
LNB21_Default_Reg[0x00] &= 0x7F;
}
else if(ShortCircuitProtectionMode == LNB_PROTECTION_STATIC)
{
LNB21_Default_Reg[0x00] |= 0x80;
}
}
#endif
/*----------------------------------------------------
FUNCTION LNB21_SetProtectionMode
ACTION set the short circuit for LNB
PARAMS IN ShortCircuitProtection
PARAMS OUT NONE
RETURN NONE
------------------------------------------------------*/
#ifndef STTUNER_MINIDRIVER
void LNB21_SetProtectionMode(LNB21_InstanceData_t *Instance, LNB_ShortCircuitProtectionMode_t ShortCircuitProtectionMode)
{
if(ShortCircuitProtectionMode == LNB_PROTECTION_DYNAMIC)/* dynamic short circuit protection*/
{
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNB21_PCL, 0,&(Instance->RegVal) );
}
if(ShortCircuitProtectionMode == LNB_PROTECTION_STATIC)/* static short circuit protection*/
{
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNB21_PCL, 1,&(Instance->RegVal) );
}
}
/*----------------------------------------------------
FUNCTION LNB21_SetLossCompensation
ACTION compensation for coaxial cable loss
PARAMS IN CoaxCableLossCompensation
PARAMS OUT NONE
RETURN NONE
------------------------------------------------------*/
void LNB21_SetLossCompensation(LNB21_InstanceData_t *Instance,BOOL CoaxCableLossCompensation)
{
if(CoaxCableLossCompensation == TRUE)/* add +1 in 13/18V*/
{
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNB21_LLC, 1,&(Instance->RegVal) );
}
if(CoaxCableLossCompensation == FALSE)/* normal 13/18V */
{
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNB21_LLC, 0,&(Instance->RegVal) );
}
}
#endif
#ifdef STTUNER_MINIDRIVER
void LNB21_SetLossCompensation(BOOL CoaxCableLossCompensation)
{
if (CoaxCableLossCompensation == TRUE)
{
LNB21_Default_Reg[0x00] &= 0xEF;
}
else if(CoaxCableLossCompensation == FALSE)
{
LNB21_Default_Reg[0x00] |= 0x10;
}
}
#endif
#ifndef STTUNER_MINIDRIVER
/*----------------------------------------------------
FUNCTION LNB21_GetPower
ACTION get lnb power status
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNB21_GetPower(LNB_Handle_t Handle, STTUNER_IOREG_DeviceMap_t *DeviceMap, LNB_Status_t *Status)
{
U8 powerstatus;
LNB21_InstanceData_t *Instance;
ST_ErrorCode_t Error = ST_NO_ERROR;
Instance = (LNB21_InstanceData_t *)Handle;
if(STTUNER_Util_CheckPtrNull(Instance) != ST_NO_ERROR)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNB21
STTBX_Print(("%s invalid handle\n", identity));
#endif
return(ST_ERROR_INVALID_HANDLE);
}
Instance->DeviceMap.Mode = IOREG_MODE_NOSUBADR; /* LNB21 read require no subaddress*/
powerstatus = STTUNER_IOREG_GetRegister(&Instance->DeviceMap, Instance->IOHandle, (U16)RLNB21_REGS);
if((powerstatus & 0x04) == 0x04)
*Status = LNB_STATUS_ON;
else
*Status = LNB_STATUS_OFF;
Error |= Instance->DeviceMap.Error;
Instance->DeviceMap.Error = ST_NO_ERROR;
return(Error);
}
#endif
#ifdef STTUNER_MINIDRIVER
/*----------------------------------------------------
FUNCTION LNB21_GetPower
ACTION get lnb power status
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNB21_GetPower(LNB_Status_t *Status)
{
U8 powerstatus;
ST_ErrorCode_t Error = ST_NO_ERROR;
Error = STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_LNB_READ, RLNB21_REGS, 0x00, 0x00, &powerstatus, 1, FALSE);
if((powerstatus & 0x04) == 0x04)
*Status = LNB_STATUS_ON;
else
*Status = LNB_STATUS_OFF;
return(Error);
}
#endif
#ifndef STTUNER_MINIDRIVER
/*----------------------------------------------------
FUNCTION LNB21_SetPower
ACTION set lnb power
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNB21_SetPower(LNB21_InstanceData_t *Instance, LNB_Status_t Status)
{
ST_ErrorCode_t Error = ST_NO_ERROR;
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNB21
const char *identity = "STTUNER lnb21.c LNB21_SetPower()";
#endif
switch (Status)
{
case LNB_STATUS_ON:
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNB21_EN, 1, &(Instance->RegVal) );
break;
case LNB_STATUS_OFF:
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNB21_EN, 0,&(Instance->RegVal) );
break;
default:
break;
}
Error |= Instance->DeviceMap.Error;
Instance->DeviceMap.Error = ST_NO_ERROR;
return(Error);
}
#endif
#ifdef STTUNER_MINIDRIVER
/*----------------------------------------------------
FUNCTION LNB21_SetPower
ACTION set lnb power
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNB21_SetPower(LNB_Status_t Status)
{
U8 powerstatus;
ST_ErrorCode_t Error = ST_NO_ERROR;
switch (Status)
{
case LNB_STATUS_ON:
case LNB_STATUS_OFF:/* always remain LNB ON, to get uninterrupted LNB power supply*/
Error = STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_LNB_READ, RLNB21_REGS, 0x00, 0x00, &powerstatus, 1, FALSE);
powerstatus |= 0x04;
Error |= STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_LNB_WRITE, RLNB21_REGS, 0x00, 0x00, &powerstatus, 1, FALSE);
break;
default:
break;
}
return(Error);
}
#endif
#ifndef STTUNER_MINIDRIVER
/*----------------------------------------------------
FUNCTION LNB21_GetStatus
ACTION Get LNb status -> ShortCircuit(OLF), Over Temperature(OTF)
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNB21_GetStatus(LNB_Handle_t Handle, STTUNER_IOREG_DeviceMap_t *DeviceMap, LNB_Status_t *Status)
{
U8 olf_otf; /* short circuit and over temp. reporting*/
LNB21_InstanceData_t *Instance;
ST_ErrorCode_t Error = ST_NO_ERROR;
Instance = (LNB21_InstanceData_t *)Handle;
if(STTUNER_Util_CheckPtrNull(Instance) != ST_NO_ERROR)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNB21
STTBX_Print(("%s invalid handle\n", identity));
#endif
return(ST_ERROR_INVALID_HANDLE);
}
Instance->DeviceMap.Mode = IOREG_MODE_NOSUBADR; /* LNB21 read require no subaddress*/
olf_otf = STTUNER_IOREG_GetRegister(&Instance->DeviceMap, Instance->IOHandle, (U16)RLNB21_REGS);
if((olf_otf & 0x01)== 0x01)
(*Status) = LNB_STATUS_SHORT_CIRCUIT;
if((olf_otf & 0x02) == 0x02)
(*Status) = LNB_STATUS_OVER_TEMPERATURE;
if((olf_otf & 0x03) == 0x03)
(*Status) = LNB_STATUS_SHORTCIRCUIT_OVERTEMPERATURE;
Error |= Instance->DeviceMap.Error;
Instance->DeviceMap.Error = ST_NO_ERROR;
return(Error);
}
#endif
#ifdef STTUNER_MINIDRIVER
/*----------------------------------------------------
FUNCTION LNB21_GetStatus
ACTION Get LNb status -> ShortCircuit(OLF), Over Temperature(OTF)
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNB21_GetStatus(LNB_Status_t *Status)
{
U8 olf_otf; /* short circuit and over temp. reporting*/
ST_ErrorCode_t Error = ST_NO_ERROR;
Error = STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_LNB_READ, RLNB21_REGS, 0x00, 0x00, &olf_otf, 1, FALSE);
if((olf_otf & 0x01)== 0x01)
(*Status) = LNB_STATUS_SHORT_CIRCUIT;
if((olf_otf & 0x02) == 0x02)
(*Status) = LNB_STATUS_OVER_TEMPERATURE;
if((olf_otf & 0x03) == 0x03)
(*Status) = LNB_STATUS_SHORTCIRCUIT_OVERTEMPERATURE;
return(Error);
}
#endif
#ifndef STTUNER_MINIDRIVER
/*----------------------------------------------------
FUNCTION LNB21_Reg_Install
ACTION
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNB21_Reg_Install(STTUNER_IOREG_DeviceMap_t *DeviceMap)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNB21
const char *identity = "STTUNER lnb21.c LNB21_Reg_Install()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
if (Error != ST_NO_ERROR)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNB21
STTBX_Print(("%s fail error=%d\n", identity, Error));
#endif
}
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNB21
STTBX_Print(("%s installed ok\n", identity));
#endif
}
return (Error);
}
#endif
#ifndef STTUNER_MINIDRIVER
ST_ErrorCode_t lnb_lnb21_overloadcheck(LNB_Handle_t Handle, BOOL *IsOverTemp, BOOL *IsCurrentOvrLoad)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNB21
const char *identity = "STTUNER lnb21.c lnb_lnb21_overloadcheck()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
LNB21_InstanceData_t *Instance;
Instance = (LNB21_InstanceData_t *)Handle;
Instance->DeviceMap.Mode = IOREG_MODE_NOSUBADR;/* LNB21 read require no subaddress*/
if(STTUNER_Util_CheckPtrNull(Instance) != ST_NO_ERROR)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNB21
STTBX_Print(("%s invalid handle\n", identity));
#endif
return(ST_ERROR_INVALID_HANDLE);
}
/* Read OLF value */
*IsCurrentOvrLoad = STTUNER_IOREG_GetField (&Instance->DeviceMap, Instance->IOHandle, FLNB21_OLF);
/* Read OTF value */
*IsOverTemp = STTUNER_IOREG_GetField (&Instance->DeviceMap, Instance->IOHandle, FLNB21_OTF);
Error |= Instance->DeviceMap.Error;
Instance->DeviceMap.Error = ST_NO_ERROR;
return(Error);
}
#endif
#ifdef STTUNER_MINIDRIVER
ST_ErrorCode_t lnb_lnb21_overloadcheck(BOOL *IsOverTemp, BOOL *IsCurrentOvrLoad)
{
ST_ErrorCode_t Error = ST_NO_ERROR;
/* Read OLF value */
Error = STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_LNB_READ, RLNB21_REGS, 0x00, 0x00, (U8 *)IsCurrentOvrLoad, 1, FALSE);
*IsCurrentOvrLoad &= 0x01;
/* Read OTF value */
Error = STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_LNB_READ, RLNB21_REGS, 0x00, 0x00, (U8 *)IsOverTemp, 1, FALSE);
*IsOverTemp = (*IsOverTemp & 0x02)>>1;
return(Error);
}
#endif
/* End of lnb21.c */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -