📄 lnbio.c
字号:
if(LNBInstance->Config.ToneState != Config->ToneState)
{
switch (Config->ToneState)
{
case STTUNER_LNB_TONE_OFF: /* No tone */
LNB_DemodIO_SetLnb(0);
break;
case STTUNER_LNB_TONE_22KHZ: /* 22KHz tone */
LNB_DemodIO_SetLnb(1);
break;
case STTUNER_LNB_TONE_DEFAULT: /* no change */
break;
default:
return(ST_ERROR_BAD_PARAMETER);
}
LNBInstance->Config.ToneState = Config->ToneState;
}
/* Select polarization */
if (LNBInstance->Config.Polarization != Config->Polarization)
{
switch (Config->Polarization)
{
case STTUNER_PLR_VERTICAL: /* OP_2 controls -- 18V (high) */
LNB_DemodIO_SetPolarization(VERTICAL);
break;
case STTUNER_PLR_HORIZONTAL: /* OP_2 controls -- 13V (low) */
LNB_DemodIO_SetPolarization(HORIZONTAL);
break;
case STTUNER_LNB_OFF:
break;
default:
return(ST_ERROR_BAD_PARAMETER);
}
LNBInstance->Config.Polarization = Config->Polarization;
}
/* Select power status */
if (LNBInstance->Config.Status != Config->Status)
{
switch (Config->Status)
{
case LNB_STATUS_ON:
case LNB_STATUS_OFF:
LNB_DemodIO_SetPower(Config->Status);
break;
default:
return(ST_ERROR_BAD_PARAMETER);
}
LNBInstance->Config.Status = Config->Status;
}
UTIL_Delay(1000);
#endif
return(Error);
}
#ifndef STTUNER_MINIDRIVER
/* ----------------------------------------------------------------------------
Name: lnb_lnb_demodIO_ioctl()
Description:
access device specific low-level functions
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t lnb_lnb_demodIO_ioctl(LNB_Handle_t Handle, U32 Function, void *InParams, void *OutParams, STTUNER_Da_Status_t *Status)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNB_DEMODIO
const char *identity = "STTUNER lnb_demodIO.c lnb_lnb_demodIO_ioctl()";
#endif
ST_ErrorCode_t Error;
LNB_DemodIO_InstanceData_t *Instance;
STTUNER_demod_instance_t *DemodInstance;
STTUNER_InstanceDbase_t *Inst;
Instance = (LNB_DemodIO_InstanceData_t *)Handle;
Inst = STTUNER_GetDrvInst();
DemodInstance = &Inst[Instance->TopLevelHandle].Sat.Demod;
if(STTUNER_Util_CheckPtrNull(Instance) != ST_NO_ERROR)
{
#ifdef STTUNER_DEBUG_MODULE_SATDRV_LNB_DEMODIO
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 to stv0299) */
Error = STTUNER_IOARCH_ReadWrite( DemodInstance->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(DemodInstance->DeviceMap, DemodInstance->IOHandle, *(int *)InParams);
break;
case STTUNER_IOCTL_REG_OUT: /* write device register */
Error = STTUNER_IOREG_SetRegister( DemodInstance->DeviceMap,
DemodInstance->IOHandle,
((SATIOCTL_SETREG_InParams_t *)InParams)->RegIndex,
((SATIOCTL_SETREG_InParams_t *)InParams)->Value );
break;
default:
return(ST_ERROR_FEATURE_NOT_SUPPORTED);
}
return(Error);
}
#endif
#ifndef STTUNER_MINIDRIVER
/* ----------------------------------------------------------------------------
Name: lnb_lnb_demodIO_ioaccess()
Description:
we get called with the instance of
Parameters:
Return Value:
---------------------------------------------------------------------------- */
ST_ErrorCode_t lnb_lnb_demodIO_ioaccess(LNB_Handle_t Handle, IOARCH_Handle_t IOHandle,STTUNER_IOARCH_Operation_t Operation, U16 SubAddr, U8 *Data, U32 TransferSize, U32 Timeout)
{
ST_ErrorCode_t Error = ST_NO_ERROR;
return(Error);
}
#endif
/*----------------------------------------------------
FUNCTION LNB_DemodIO_SetLnb
ACTION set the Lnb
PARAMS IN Lnb -> true for LnbHigh, false for LnbLow
PARAMS OUT NONE
RETURN NONE
------------------------------------------------------*/
#ifndef STTUNER_MINIDRIVER
void LNB_DemodIO_SetLnb(STTUNER_demod_instance_t *DemodInstance, int Lnb)
{
#ifdef STTUNER_LNB_TONE_THRU_DEMOD_DISEQC_PIN
#ifdef STTUNER_BASIC
if(DemodInstance->Driver->ID == STTUNER_DEMOD_STX0288)
{
/* Low band -> no 22KHz tone */
if (Lnb == 0) STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->TEN_FieldIndex, 0x1);
/* High band -> 22KHz tone */
if (Lnb == 1) STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->TEN_FieldIndex, 0x0);
}
else
{
#endif
if (Lnb == 0) STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->TEN_FieldIndex, 0x0);
/* High band -> 22KHz tone */
if (Lnb == 1) STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->TEN_FieldIndex, 0x3);
#ifdef STTUNER_BASIC
}
#endif
#else
/* ST EVALNB_DemodIO board */
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->TEN_FieldIndex, Lnb);
#endif
}
#endif
#ifdef STTUNER_MINIDRIVER
void LNB_DemodIO_SetLnb(int Lnb)
{
U8 Data;
#ifdef STTUNER_LNB_TONE_THRU_DEMOD_DISEQC_PIN
/* FUTARQUE 299 board */
/* Low band -> no 22KHz tone */
if (Lnb == 0)
{
Data = 0x0;
STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, TEN_REG_INDEX, TEN_FIELD_INDEX, TEN_FIELD_INDEX_L, &Data, 1, FALSE);
}
/* High band -> 22KHz tone */
if (Lnb == 1)
{
Data = 0x3;
STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, TEN_REG_INDEX, TEN_FIELD_INDEX, TEN_FIELD_INDEX_L, &Data, 1, FALSE);
}
#else
/* ST EVALNB_DemodIO board */
Data = Lnb;
STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, TEN_REG_INDEX, TEN_FIELD_INDEX, TEN_FIELD_INDEX_L, &Data, 1, FALSE);
#endif
}
#endif
#ifndef STTUNER_MINIDRIVER
void LNB_DemodIO_SetTone_Demod(STTUNER_demod_instance_t *DemodInstance, int Lnb)
{
#ifdef STTUNER_BASIC
if(DemodInstance->Driver->ID == STTUNER_DEMOD_STX0288)
{
if (Lnb == 0) STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->TEN_FieldIndex, 0x1);
/* High band -> 22KHz tone */
if (Lnb == 1) STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->TEN_FieldIndex, 0x0);
}
else
{
#endif
if (Lnb == 0) STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->TEN_FieldIndex, 0x0);
/* High band -> 22KHz tone */
if (Lnb == 1) STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->TEN_FieldIndex, 0x3);
#ifdef STTUNER_BASIC
}
#endif
}
/*----------------------------------------------------
FUNCTION LNB_DemodIO_SetPolarization
ACTION set the polarization
PARAMS IN Polarization -> Polarization
PARAMS OUT NONE
RETURN NONE
------------------------------------------------------*/
void LNB_DemodIO_SetPolarization(STTUNER_demod_instance_t *DemodInstance, LNB_Polarization_t Polarization)
{
if(Polarization == VERTICAL)
{
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VEN_FieldIndex, 1);
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VSEL_FieldIndex, 0);
}
else if(Polarization == NOPOLARIZATION)
{
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VEN_FieldIndex, 0);
}
else
{
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VEN_FieldIndex, 1);
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VSEL_FieldIndex, 1);
}
}
#endif
#ifdef STTUNER_MINIDRIVER
void LNB_DemodIO_SetPolarization(LNB_Polarization_t Polarization)
{
U8 Data;
if(Polarization == VERTICAL)
{
Data = 1;
STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, VEN_REG_INDEX, VEN_FIELD_INDEX, VEN_FIELD_INDEX_L, &Data, 1, FALSE);
Data = 0;
STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, VSEL_REG_INDEX, VSEL_FIELD_INDEX, VSEL_FIELD_INDEX_L, &Data, 1, FALSE);
}
else if(Polarization == HORIZONTAL)
{
Data = 1;
STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, VEN_REG_INDEX, VEN_FIELD_INDEX, VEN_FIELD_INDEX_L, &Data, 1, FALSE);
Data = 1;
STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, VSEL_REG_INDEX, VSEL_FIELD_INDEX, VSEL_FIELD_INDEX_L, &Data, 1, FALSE);
}
else
{
Data = 0;
STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, VEN_REG_INDEX, VEN_FIELD_INDEX, VEN_FIELD_INDEX_L, &Data, 1, FALSE);
}
}
#endif
#ifndef STTUNER_MINIDRIVER
void LNB_DemodIO_SetDACPolarization(STTUNER_demod_instance_t *DemodInstance, LNB_Polarization_t Polarization)
{
if(Polarization == VERTICAL)/*set 13V*/
{
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VEN_FieldIndex, 0xCE);
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VSEL_FieldIndex, 0xA4);
}
if(Polarization == NOPOLARIZATION)/*LNB off*/
{
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VEN_FieldIndex, 0x00);
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VSEL_FieldIndex, 0x02);
}
else /*set 18V*/
{
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VEN_FieldIndex, 0x40);
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VSEL_FieldIndex, 0xA1);
}
}
#endif
#ifndef STTUNER_MINIDRIVER
/*----------------------------------------------------
FUNCTION LNB_DemodIO_GetPower
ACTION get lnb power status
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNB_DemodIO_GetPower(STTUNER_demod_instance_t *DemodInstance, LNB_Status_t *Status)
{
/* always report LNB is on (not s/c or off) */
if ( STTUNER_IOREG_GetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VEN_FieldIndex) == 1)
*Status = LNB_STATUS_ON;
else
*Status = LNB_STATUS_OFF;
return(ST_NO_ERROR);
}
#endif
#ifndef STTUNER_MINIDRIVER
/*----------------------------------------------------
FUNCTION LNB_DemodIO_SetPower
ACTION set lnb power
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNB_DemodIO_SetPower(STTUNER_demod_instance_t *DemodInstance, LNB_Status_t Status)
{
switch(Status)
{
case LNB_STATUS_ON:
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VEN_FieldIndex, 1);
break;
case LNB_STATUS_OFF:
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VEN_FieldIndex, 0);
break;
default:
return(ST_ERROR_BAD_PARAMETER);
}
return(ST_NO_ERROR);
}
#endif
#ifdef STTUNER_MINIDRIVER
/*----------------------------------------------------
FUNCTION LNB_DemodIO_SetPower
ACTION set lnb power
PARAMS IN
PARAMS OUT
RETURN
------------------------------------------------------*/
ST_ErrorCode_t LNB_DemodIO_SetPower(LNB_Status_t Status)
{
U8 Data;
switch (Status)
{
case LNB_STATUS_ON:
Data = 1;
STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, VEN_REG_INDEX, VEN_FIELD_INDEX, VEN_FIELD_INDEX_L, &Data, 1, FALSE);
break;
case LNB_STATUS_OFF:
Data = 0;
STTUNER_IODIRECT_ReadWrite(STTUNER_IO_SA_WRITE, VEN_REG_INDEX, VEN_FIELD_INDEX, VEN_FIELD_INDEX_L, &Data, 1, FALSE);
break;
default:
return(ST_ERROR_BAD_PARAMETER);
}
return(ST_NO_ERROR);
}
#endif
#ifndef STTUNER_MINIDRIVER
ST_ErrorCode_t LNB_DemodIO_Set_DACPower(STTUNER_demod_instance_t *DemodInstance, LNB_Status_t Status)
{
switch (Status)
{
case LNB_STATUS_ON:
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VEN_FieldIndex, 0x40);
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VSEL_FieldIndex, 0xA1);
break;
case LNB_STATUS_OFF:
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VEN_FieldIndex, 0x00);
STTUNER_IOREG_SetField(DemodInstance->DeviceMap, DemodInstance->IOHandle, DemodInstance->VSEL_FieldIndex, 0x02);
break;
default:
return(ST_ERROR_BAD_PARAMETER);
}
return(ST_NO_ERROR);
}
#endif
/* End of lnb_demodIO.c */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -