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

📄 lnb21.c

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