⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lnbio.c

📁 st7710的tuner标准驱动
💻 C
📖 第 1 页 / 共 3 页
字号:
   
    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 + -