📄 lnbh21.c
字号:
Instance = (LNBH21_InstanceData_t *)Handle;
if(STTUNER_Util_CheckPtrNull(Instance) != ST_NO_ERROR)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
STTBX_Print(("%s invalid handle\n", identity));
#endif
return(ST_ERROR_INVALID_HANDLE);
}
switch(Function){
case STTUNER_IOCTL_RAWIO: /* read/write device register (actual write) */
Error = STTUNER_IOARCH_ReadWrite( Instance->IOHandle,
((SATIOCTL_IOARCH_Params_t *)InParams)->Operation,
((SATIOCTL_IOARCH_Params_t *)InParams)->SubAddr,
((SATIOCTL_IOARCH_Params_t *)InParams)->Data,
((SATIOCTL_IOARCH_Params_t *)InParams)->TransferSize,
((SATIOCTL_IOARCH_Params_t *)InParams)->Timeout );
break;
case STTUNER_IOCTL_REG_IN: /* read device register */
*(int *)OutParams = STTUNER_IOREG_GetRegister(&Instance->DeviceMap, Instance->IOHandle, *(int *)InParams);
break;
case STTUNER_IOCTL_REG_OUT: /* write device register */
Error = STTUNER_IOREG_SetRegister( &Instance->DeviceMap,
Instance->IOHandle,
(U32) ((SATIOCTL_SETREG_InParams_t *)InParams)->RegIndex,
(U32)((SATIOCTL_SETREG_InParams_t *)InParams)->Value );
break;
case STTUNER_IOCTL_SETLNB: /* set lnb parameters through ioctl */
Error = lnb_lnbh21_ioctl_set(Handle,InParams);
break;
case STTUNER_IOCTL_GETLNB: /* get lnb parameters through ioctl */
Error = lnb_lnbh21_ioctl_get(Handle,OutParams);
break;
default:
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
STTBX_Print(("%s function %d not found\n", identity, Function));
#endif
return(ST_ERROR_FEATURE_NOT_SUPPORTED);
}
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
STTBX_Print(("%s function %d called\n", identity, Function));
#endif
Error |= Instance->DeviceMap.Error;
Instance->DeviceMap.Error = ST_NO_ERROR;
return(Error);
}
/* ----------------------------------------------------------------------------
Name: lnb_lnbh21_ioaccess()
Description:
we get called with the instance of
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t lnb_lnbh21_ioaccess(LNB_Handle_t Handle, IOARCH_Handle_t IOHandle, STTUNER_IOARCH_Operation_t Operation, U16 SubAddr, U8 *Data, U32 TransferSize, U32 Timeout)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
const char *identity = "STTUNER lnbh21.c lnb_lnbh21_ioaccess()";
#endif
ST_ErrorCode_t Error = ST_NO_ERROR;
IOARCH_Handle_t ThisIOHandle;
LNBH21_InstanceData_t *Instance;
Instance = (LNBH21_InstanceData_t *)Handle;
/* check handle */
if(STTUNER_Util_CheckPtrNull(Instance) != ST_NO_ERROR)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
STTBX_Print(("%s invalid handle\n", identity));
#endif
return(ST_ERROR_INVALID_HANDLE);
}
ThisIOHandle = Instance->IOHandle;
/* if STTUNER_IOARCH_MAX_HANDLES then passthrough function required using our device handle (address) */
if (IOHandle == STTUNER_IOARCH_MAX_HANDLES)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
STTBX_Print(("%s write passthru\n", identity));
#endif
Error = STTUNER_IOARCH_ReadWrite(ThisIOHandle, Operation, SubAddr, Data, TransferSize, Timeout);
}
else /* repeater */
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
STTBX_Print(("%s write repeater\n", identity));
#endif
Error = STTUNER_IOARCH_ReadWriteNoRep(IOHandle, Operation, 0, Data, TransferSize, Timeout);
}
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
STTBX_Print(("%s called\n", identity));
#endif
return(Error);
}
#endif
/* ------------------------------------------------------------------------- */
/* /\/\/\/\/\/\/\/\/\/\/\/\/\UTILITY Functions/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\ */
/* ------------------------------------------------------------------------- */
#ifndef STTUNER_MINIDRIVER
ST_ErrorCode_t LNBH21_UpdateLNB(LNBH21_InstanceData_t *Instance)
{
ST_ErrorCode_t Error = ST_NO_ERROR;
/* update LNB hardware */
STTUNER_IOREG_SetContigousRegisters(&Instance->DeviceMap, Instance->IOHandle, RLNBH21_REGS, (&(Instance->RegVal)) ,1);
Error |= Instance->DeviceMap.Error;
Instance->DeviceMap.Error = ST_NO_ERROR;
return(Error);
}
#endif
#ifdef STTUNER_MINIDRIVER
ST_ErrorCode_t LNBH21_UpdateLNB( )
{
ST_ErrorCode_t Error = ST_NO_ERROR;
STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_LNB_WRITE, RLNBH21_REGS, 0x00, 0x00, LNBH21_Default_Reg, 1, FALSE);
return(Error);
}
#endif
/*----------------------------------------------------
FUNCTION LNBH21_SetLnb
ACTION set the Lnb
PARAMS IN Lnb -> true for LnbHigh, false for LnbLow
PARAMS OUT NONE
RETURN NONE
------------------------------------------------------*/
#ifndef STTUNER_MINIDRIVER
void LNBH21_SetLnb(LNBH21_InstanceData_t *Instance, int Lnb)
{
/* Low band -> no 22KHz tone */
if (Lnb == STTUNER_LNB_TONE_OFF)
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_TEN, 0, &(Instance->RegVal) );
/* High band -> 22KHz tone */
if (Lnb == STTUNER_LNB_TONE_22KHZ)
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap,FLNBH21_TEN, 1, &(Instance->RegVal) );
}
#endif
#ifdef STTUNER_MINIDRIVER
void LNBH21_SetLnb(int Lnb)
{
/* Low band -> no 22KHz tone */
if (Lnb == STTUNER_LNB_TONE_OFF)
{
LNBH21_Default_Reg[0x00] &= 0xDF;
}
else if(Lnb == STTUNER_LNB_TONE_22KHZ)
{
LNBH21_Default_Reg[0x00] |= 0x20;
}
}
#endif
/*----------------------------------------------------
FUNCTION LNBH21_SetPolarization
ACTION set the polarization
PARAMS IN Polarization -> Polarization
PARAMS OUT NONE
RETURN NONE
------------------------------------------------------*/
#ifndef STTUNER_MINIDRIVER
void LNBH21_SetPolarization(LNBH21_InstanceData_t *Instance, LNB_Polarization_t Polarization)
{
if(Polarization == VERTICAL)/* Set 13V for Vertical Pol*/
{
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_EN, 1,&(Instance->RegVal) );
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_VSEL, 0,&(Instance->RegVal) );
}
else if(Polarization == HORIZONTAL)/* Set 18v for Horizontal Pol*/
{
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_EN, 1,&(Instance->RegVal) );
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_VSEL, 1,&(Instance->RegVal) );
}
else if(Polarization == NOPOLARIZATION)/* Set 18v for Horizontal Pol*/
{
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_EN, 0, &(Instance->RegVal) );
}
}
#endif
#ifdef STTUNER_MINIDRIVER
void LNBH21_SetPolarization(LNB_Polarization_t Polarization)
{
/* Low band -> no 22KHz tone */
if (Polarization == VERTICAL)
{
LNBH21_Default_Reg[0x00] &= 0xF7;
LNBH21_Default_Reg[0x00] |= 0x04;
}
else if(Polarization == HORIZONTAL)
{
LNBH21_Default_Reg[0x00] |= 0x08;
LNBH21_Default_Reg[0x00] |= 0x04;
}
else if(Polarization == NOPOLARIZATION)
{
LNBH21_Default_Reg[0x00] &= 0xFB;
}
}
#endif
/*----------------------------------------------------
FUNCTION LNBH21_SetCurrentThreshold
ACTION set the Current for LNB
PARAMS IN CurrentSelection
PARAMS OUT NONE
RETURN NONE
------------------------------------------------------*/
/*
void LNBH21_SetCurrentThreshold(STTUNER_IOREG_DeviceMap_t *DeviceMap, LNB_CurrentThresholdSelection_t CurrentThresholdSelection)
{
if(CurrentThresholdSelection == CURRENT_THRESHOLD_HIGH)*//* Set ISEL=0 to set high(500-650mA)*/
/*STTUNER_IOREG_FieldSetVal(DeviceMap, FLNB21_ISEL, 0);
if(CurrentThresholdSelection == CURRENT_THRESHOLD_LOW)*//* Set ISEL=1 to set low(400-550mA)*/
/* STTUNER_IOREG_FieldSetVal(DeviceMap, FLNB21_ISEL, 1);
}*/
#ifdef STTUNER_MINIDRIVER
void LNBH21_SetProtectionMode(LNB_ShortCircuitProtectionMode_t ShortCircuitProtectionMode)
{
if (ShortCircuitProtectionMode == LNB_PROTECTION_DYNAMIC)
{
LNBH21_Default_Reg[0x00] &= 0x7F;
}
else if(ShortCircuitProtectionMode == LNB_PROTECTION_STATIC)
{
LNBH21_Default_Reg[0x00] |= 0x80;
}
}
#endif
/*----------------------------------------------------
FUNCTION LNBH21_SetProtectionMode
ACTION set the short circuit for LNB
PARAMS IN ShortCircuitProtection
PARAMS OUT NONE
RETURN NONE
------------------------------------------------------*/
#ifndef STTUNER_MINIDRIVER
void LNBH21_SetProtectionMode(LNBH21_InstanceData_t *Instance, LNB_ShortCircuitProtectionMode_t ShortCircuitProtectionMode)
{
if(ShortCircuitProtectionMode == LNB_PROTECTION_DYNAMIC)/* dynamic short circuit protection*/
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_PCL, 0,&(Instance->RegVal) );
if(ShortCircuitProtectionMode == LNB_PROTECTION_STATIC)/* static short circuit protection*/
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_PCL, 1,&(Instance->RegVal) );
}
/*----------------------------------------------------
FUNCTION LNBH21_SetLossCompensation
ACTION compensation for coaxial cable loss
PARAMS IN CoaxCableLossCompensation
PARAMS OUT NONE
RETURN NONE
------------------------------------------------------*/
void LNBH21_SetLossCompensation(LNBH21_InstanceData_t *Instance, BOOL CoaxCableLossCompensation)
{
if(CoaxCableLossCompensation == TRUE)/* add +1 in 13/18V*/
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_LLC, 1,&(Instance->RegVal) );
if(CoaxCableLossCompensation == FALSE)/* normal 13/18V */
STTUNER_IOREG_SetFieldVal(&Instance->DeviceMap, FLNBH21_LLC, 0,&(Instance->RegVal) );
}
#endif
#ifdef STTUNER_MINIDRIVER
void LNBH21_SetLossCompensation(BOOL CoaxCableLossCompensation)
{
if (CoaxCableLossCompensation == TRUE)
{
LNBH21_Default_Reg[0x00] &= 0xEF;
}
else if(CoaxCableLossCompensation == FALSE)
{
LNBH21_Default_Reg[0x00] |= 0x10;
}
}
#endif
#ifndef STTUNER_MINIDRIVER
/*----------------------------------------------------
FUNCTION LNBH21_GetPower
ACTION get lnb power status
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNBH21_GetPower(LNB_Handle_t Handle, STTUNER_IOREG_DeviceMap_t *DeviceMap, LNB_Status_t *Status)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
const char *identity = "STTUNER lnbh21.c lnb_lnbh21_GetPower()";
#endif
U8 powerstatus;
LNBH21_InstanceData_t *Instance;
ST_ErrorCode_t Error = ST_NO_ERROR;
Instance = (LNBH21_InstanceData_t *)Handle;
if(STTUNER_Util_CheckPtrNull(Instance) != ST_NO_ERROR)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
STTBX_Print(("%s invalid handle\n", identity));
#endif
return(ST_ERROR_INVALID_HANDLE);
}
Instance->DeviceMap.Mode = IOREG_MODE_NOSUBADR; /* LNBH21 read require no subaddress*/
powerstatus = STTUNER_IOREG_GetRegister(&Instance->DeviceMap, Instance->IOHandle,(U16) RLNBH21_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 LNBH21_GetPower
ACTION get lnb power status
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNBH21_GetPower(LNB_Status_t *Status)
{
U8 powerstatus;
ST_ErrorCode_t Error = ST_NO_ERROR;
Error = STTUNER_IODIRECT_ReadWrite(STTUNER_IO_LNB_READ, RLNBH21_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 LNBH21_SetPower
ACTION set lnb power
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNBH21_SetPower(LNBH21_InstanceData_t *Instance, LNB_Status_t Status)
{
ST_ErrorCode_t Error = ST_NO_ERROR;
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNBH21
const char *identity = "STTUNER lnbh21.c LNBH21_SetPower()";
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -