📄 fmtuner_drvfunction.c
字号:
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 + -