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

📄 fmtuner_drvfunction.c

📁 这是一款聚电视和收音为一体的微处理器 C++ 源代码,成果奉献,供广大的底层软件开发者学习和参考
💻 C
📖 第 1 页 / 共 3 页
字号:
        gfmTuner_u8PresetIndex=0;
        gfmTuner_u8SearchWrapAround=FALSE;
    }
    else
    {
        fmTuner_SaveCurrentFrequency(gfmTuner_u16TunerFrequency);
        if(gfmTuner_u8PresetIndex>=cFM_TUNER_PRESET_MAX)
        {
            fmTuner_CancelAstSearch();
            gfmTuner_u8PresetIndex=0;
            //gfmTuner_u8SearchWrapAround=FALSE;

        }
        else
        {
            fmTuner_InitiateSearch(fmTuner_TuningDirection_Up,gfmTuner_eSearchLevel);
            fmTuner_OsGenernalDelay(5);
            
        }
        
    }
    
}
//-----------------------------------------------------------------------------
// FUNCTION:    fmTuner_InitiateAstSearch  
//
// DESCRIPTION: 
//
// RETURN:      none
//
// NOTES:       <Function notes - pre/post state, side effects, reentrancy>
//-----------------------------------------------------------------------------
void fmTuner_InitiateAstSearch(void)
{
    fmTuner_ClearPreset();
    gfmTuner_u8PresetIndex=0;
    gfmTuner_u16TunerFrequency=cFM_TUNER_FREQUENCY_START;
    fmTuner_InitiateSearch(fmTuner_TuningDirection_Up,gfmTuner_eSearchLevel);
    fmTuner_OsGenernalDelay(5);
    gfmTuner_u8PresetFirst=FALSE;
    gfmTuner_u8AstSearchBusy=TRUE;
    
}

//-----------------------------------------------------------------------------
// FUNCTION:    fmTuner_CheckSearch
//
// DESCRIPTION: 
//
// RETURN:      none
//
// NOTES:       <Function notes - pre/post state, side effects, reentrancy>
//-----------------------------------------------------------------------------
static int GetAbs(U8 k1,U8 k2)
{
    if(k1>k2)
    {
        return    (k1-k2); 
    }
    else
    {
        return    (k2-k1);
    }
}
static U8 FalseStopDetect=0;
void fmTuner_CheckSearch(void)
{
    U32 BandLimit;
    U8  IFCounter;
    
    static U8 Level1=0;
    static U8 Level2=0; 
    //check if tuner search has stopped
    
    if(gfmTuner_I2C_BufferRead[0]&0x80)
    {
        //check if bandlimit reached
        BandLimit=0;
        //if(gfmTuner_I2C_BufferRead[0]&0x40)
        if(gfmTuner_eSearchDirection==fmTuner_TuningDirection_Up)
        {
            if(gfmTuner_u16TunerFrequency>=fmTuner_GetMaxFrequency())
            {
                BandLimit=TRUE;
                gfmTuner_u16TunerFrequency=fmTuner_GetMinimumFrequency();
            }    
                
                                              
        }
        else
        {
            if(gfmTuner_u16TunerFrequency<=fmTuner_GetMinimumFrequency())
            {
                BandLimit=TRUE;
                gfmTuner_u16TunerFrequency= fmTuner_GetMaxFrequency();
            }        
                
        }
        if(BandLimit==TRUE)
        {
                        
            //Wrap around for the second time
            if(gfmTuner_u8SearchWrapAround==TRUE)
            {
                //check only search
                if(!gfmTuner_u8AstSearchBusy)
                {   //888888
                    //cancel search,tune to current frequency
                    fmTuner_CancelSearch();
                    gfmTuner_u8SearchWrapAround=FALSE;
                     
                }
                 
                     
            }//end of wrap around for second time
            else
            {   
                
                    //Wrap around for the first time
                    gfmTuner_u8SearchWrapAround=TRUE;
                
                    //check Automatic search and store
                    if(gfmTuner_u8AstSearchBusy)
                    {
                    
                        //cancel search and tune to current frequency, later ,Ast search will also be cancelled
                        gfmTuner_u8SearchBusy=FALSE;
                    
                    }
                    else
                    {
                        //when in search mode only,start a new search again
                        fmTuner_InitiateSearch(gfmTuner_eSearchDirection,gfmTuner_eSearchLevel);
                        fmTuner_OsGenernalDelay(5);
    
                    }
                    
            }////end of wrap around for first time                                               
        }//end of wrap around  
        else
        {
            switch(FalseStopDetect)
            {
                case 0:
                    Level1=(U8)((gfmTuner_I2C_BufferRead[3]&0xf0)>>4);
                    IFCounter=(U8)(gfmTuner_I2C_BufferRead[2]&0x7f);
                    if((Level1>=5)&&(IFCounter>0x31)&&(IFCounter<0x3e))
                    {
                        
                            if(gfmTuner_eHighLowInjection==fmTuner_HighLowInjection_Low)
                            {
                                gfmTuner_eHighLowInjection=fmTuner_HighLowInjection_High;
                            }
                            else
                            {
                                gfmTuner_eHighLowInjection=fmTuner_HighLowInjection_Low ;
                            }
                            fmTuner_TuneToFrequecy(gfmTuner_u16TunerFrequency);
                            fmTuner_OsGenernalDelay(5);

                            FalseStopDetect++;
                    }
                    else
                    {
                        //search again
                        fmDisplay_RadioFrequency(gfmTuner_u16TunerFrequency);
                        fmTuner_InitiateSearch(gfmTuner_eSearchDirection,gfmTuner_eSearchLevel);
                        fmTuner_OsGenernalDelay(5);    
                    }
                break;
                case 1:
                     Level2=(U8)((gfmTuner_I2C_BufferRead[3]&0xf0)>>4);
                     IFCounter=(U8)(gfmTuner_I2C_BufferRead[2]&0x7f);
                     if((GetAbs(Level1,Level2)<2)&&(IFCounter>0x31)&&(IFCounter<0x3e))
                     {
                         
                         //888888
                         // a valid station is found
                         if(gfmTuner_u8AstSearchBusy)
                         {
                                //save current frequency
                                gfmTuner_u8SearchBusy=FALSE;

                         }
                         else
                         {
                              //8888
                              //cancel search and tune to current frequency
                              fmTuner_CancelSearch();
                              gfmTuner_u8SearchWrapAround=FALSE;
                              fmTuner_PresetDetect();
                              
                              
                         }
                            		                    
		               }
                     else
                     {
                         ////false stop
                         fmTuner_InitiateSearch(gfmTuner_eSearchDirection,gfmTuner_eSearchLevel);
                         fmTuner_OsGenernalDelay(5);  
                     }
                     FalseStopDetect=0; 
                
                break;
                default:
                break;
            }    
                     
        }
            
    }//end of if(gfmTuner_I2C_BufferRead[0]&0x80)            
}            
//-----------------------------------------------------------------------------
// FUNCTION:    fmTuner_TerminateImediately  
//
// DESCRIPTION: 
//
// RETURN:      none
//
// NOTES:       <Function notes - pre/post state, side effects, reentrancy>
//-----------------------------------------------------------------------------
void fmTuner_TerminateImediately(void)
{
    if(gfmTuner_eSearchDirection==fmTuner_TuningDirection_Up)
    {
        if(gfmTuner_u16TunerFrequency>=fmTuner_GetMaxFrequency())
        {
            gfmTuner_u16TunerFrequency=fmTuner_GetMaxFrequency();
        }    
                
                                              
    }
    else
    {
        if(gfmTuner_u16TunerFrequency<=fmTuner_GetMinimumFrequency())
        {
            gfmTuner_u16TunerFrequency=fmTuner_GetMinimumFrequency();
        }        
                
    }
    fmTuner_TuneToFrequecy(gfmTuner_u16TunerFrequency);
    fmTuner_OsGenernalDelay(5);	
    fmDisplay_RadioFrequency(gfmTuner_u16TunerFrequency);
    gfmTuner_u8InTune=TRUE;
    gfmTuner_u8AstSearchBusy=FALSE;
    gfmTuner_u8SearchBusy=FALSE;
    FalseStopDetect=0;
    gfmTuner_u8SearchWrapAround=FALSE;
    if(gfmTuner_u8AstSearchBusy==TRUE)
    {
        gfmTuner_u8PresetIndex=0;
    }
}            

//-----------------------------------------------------------------------------
// FUNCTION:    fmTuner_CancelSearch
//
// DESCRIPTION: 
//
// RETURN:      none
//
// NOTES:       <Function notes - pre/post state, side effects, reentrancy>
//-----------------------------------------------------------------------------
void fmTuner_CancelSearch(void)
{
    fmTuner_TuneToFrequecy(gfmTuner_u16TunerFrequency);
    fmTuner_OsGenernalDelay(5);	
    fmDisplay_RadioFrequency(gfmTuner_u16TunerFrequency); 
    gfmTuner_u8SearchBusy=FALSE;
    gfmTuner_u8InTune=TRUE;
}
//-----------------------------------------------------------------------------
// FUNCTION:    fmTuner_InitiateSearch
//
// DESCRIPTION: 
//
// RETURN:      none
//
// NOTES:       <Function notes - pre/post state, side effects, reentrancy>
//-----------------------------------------------------------------------------
void fmTuner_InitiateSearch(fmTuner_TuningDirection_e keDirection,fmTuner_SearchLevel_e kLevel)
{
    U32 temp;
    if(keDirection==fmTuner_TuningDirection_Up)
    {
    	gfmTuner_u16TunerFrequency=(U16)(gfmTuner_u16TunerFrequency+fmTuner_GetStepSize());
    	//if(fmTuner_GetMaxFrequency()<=gfmTuner_u16TunerFrequency)
        //{
    	//    gfmTuner_u16TunerFrequency=fmTuner_GetMinimumFrequency();
        //}
    	gfmTuner_eHighLowInjection=fmTuner_HighLowInjection_Low;
    }
    else if(keDirection==fmTuner_TuningDirection_Down)
    {
    	gfmTuner_u16TunerFrequency=(U16)(gfmTuner_u16TunerFrequency-fmTuner_GetStepSize());
    	//if(fmTuner_GetMinimumFrequency()>=gfmTuner_u16TunerFrequency)
        //{
    	//   gfmTuner_u16TunerFrequency=fmTuner_GetMaxFrequency();
        //}
    	gfmTuner_eHighLowInjection=fmTuner_HighLowInjection_High;
    }
    gfmTuner_eSearchDirection=keDirection;
    //clear stereo decteting status
    gfmTuner_eMonoStereo=fmTuner_MonoStereo_Stereo;
    gfmTuner_eStereoStatus=fmTuner_MonoStereo_Mono;
    fmDisplay_RadioStereo(cFM_DISPLAY_RADIOHUANG_MONO);
    FetchCommandData();
    
    temp=GetPllFromFrequency(gfmTuner_u16TunerFrequency);
    gfmTuner_I2C_BufferSend[TUNER_BYTE1]=(U8)((temp>>8)&0x000000FF);
    gfmTuner_I2C_BufferSend[TUNER_BYTE2]=(U8)(temp&0x000000FF);
    gfmTuner_I2C_BufferSend[TUNER_MUTE_LOCATION]|=TUNER_MUTE_MASK;
    //gfmTuner_I2C_BufferSend[TUNER_SEARCH_MODE_LOCATION]|=TUNER_SEARCH_MODE;
    
    if(keDirection==fmTuner_TuningDirection_Up)
    {
        gfmTuner_I2C_BufferSend[TUNER_SEARCH_UP_DOWN_LOCATION]|=TUNER_SEARCH_UP_DOWN;
    }
    if(kLevel==fmTuner_SearchLevel_1)
    {
        gfmTuner_I2C_BufferSend[TUNER_LEVEL_LOCATION]|=TUNER_SSL0;
    }  
    else if(kLevel==fmTuner_SearchLevel_2)
    {
        gfmTuner_I2C_BufferSend[TUNER_LEVEL_LOCATION]|=TUNER_SSL1;
    }    
    else if(kLevel==fmTuner_SearchLevel_3)
    {
        gfmTuner_I2C_BufferSend[TUNER_LEVEL_LOCATION]|=TUNER_SSL0;
        gfmTuner_I2C_BufferSend[TUNER_LEVEL_LOCATION]|=TUNER_SSL1;
    }

    fmTuner_SendSequentialByte(gfmTuner_I2C_BufferSend,cIIC_LENGTH_FIVE);
    fmTuner_OsGenernalDelay(5);
    gfmTuner_u8SearchBusy=TRUE;
    }
//-----------------------------------------------------------------------------
// FUNCTION:    fmTuner_ValidateTunedFrequency
//
// DESCRIPTION: 
//
// RETURN:      none
//
// NOTES:       <Function notes - pre/post state, side effects, reentrancy>
//-----------------------------------------------------------------------------
U32  fmTuner_ValidateTunedFrequency(U32 kFrequency)
{
    if(fmTuner_GetMaxFrequency()<kFrequency)
    {
    	kFrequency=fmTuner_GetMaxFrequency();
    }
    if(fmTuner_GetMinimumFrequency()>kFrequency)
    {
    	kFrequency=fmTuner_GetMinimumFrequency();
    }
    return kFrequency;
    
}
//-----------------------------------------------------------------------------
// FUNCTION:    fmTuner_GetMaxFrequency
//
// DESCRIPTION: 
//
// RETURN:      none
//
// NOTES:       <Function notes - pre/post state, side effects, reentrancy>
//-----------------------------------------------------------------------------
U16 fmTuner_GetMaxFrequency(void)
{
    return cFM_TUNER_FREQUENCY_END;
}

//-----------------------------------------------------------------------------
// FUNCTION:    fmTuner_GetMinimumFrequency
//
// DESCRIPTION: 
//
// RETURN:      none

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -