📄 radio.c
字号:
Radio.WorkMode=RADIO_WORK_ASPSBREAK;
}
else
{
Radio.WorkMode=RADIO_WORK_SEEKREQ;
}
}
break;
case S_AD_AS:
case S_RM_AS:
M_RadioNewKey;
if((Radio.WorkMode&0xF0)==RADIO_WORK_SEEKMODE)
{
Radio.WorkMode=RADIO_WORK_SEEKBREAK;
}
else if((Radio.WorkMode&0xF0)==RADIO_WORK_ASPSMODE)
{
Radio.WorkMode=RADIO_WORK_ASPSBREAK;
}
else
{
Radio.WorkMode=RADIO_WORK_PSREQ;
}
break;
case L_AD_AS:
case L_RM_AS:
M_RadioNewKey;
if((Radio.WorkMode&0xF0)==RADIO_WORK_SEEKMODE)
{
Radio.WorkMode=RADIO_WORK_SEEKBREAK;
}
else if((Radio.WorkMode&0xF0)==RADIO_WORK_ASPSMODE)
{
Radio.WorkMode=RADIO_WORK_ASPSBREAK;
}
else
{
Radio.WorkMode=RADIO_WORK_ASREQ;
}
break;
case S_AD_BAND:
case S_RM_BAND:
M_RadioNewKey;
if((Radio.WorkMode&0xF0)==RADIO_WORK_SEEKMODE)
{
Radio.WorkMode=RADIO_WORK_SEEKBREAK;
}
else if((Radio.WorkMode&0xF0)==RADIO_WORK_ASPSMODE)
{
Radio.WorkMode=RADIO_WORK_ASPSBREAK;
}
Radio.CurrentBand=MaxMinChangeProtect(Radio.CurrentBand,1, 4, 0, 0);
Radio.ReqFreq=Radio.Band[Radio.CurrentBand].BandFreq;
Radio.F_ForceSetBuff=1;
RadioMute(SOFTON);
RadioSetFreq(Radio.ReqFreq);
RadioMute(SOFTOFF);
Radio.F_TunerDispReq=1;
break;
case S_AD_LOC:
M_RadioNewKey;
Radio.F_LocDx=~Radio.F_LocDx;
Radio.F_ForceSetBuff=1;
RadioMute(SOFTON);
RadioSetFreq(Radio.ReqFreq);
RadioMute(SOFTOFF);
F_DISP_LOC=Radio.F_LocDx;
Radio.F_TunerDispReq=1;
break;
case L_AD_DISP://scan
M_RadioNewKey;
if(AFTAShowTimer>1)AFTAShowTimer=1;
//if(AudioWorkMode!=AUDIO_MODE_IDLE)break;
if(RADIO_IN_SEEK)
{
Radio.WorkMode=RADIO_WORK_SEEKBREAK;
}
else if(RADIO_IN_AS||RADIO_IN_PS)
{
Radio.WorkMode=RADIO_WORK_ASPSBREAK;
}
if(Radio.F_Scan)
{
Radio.F_Scan=0;
}
else
{
Radio.Direction=1;
Radio.F_Scan=1;
Radio.ScanBackupFreq=Radio.Freq;
Radio.WorkMode=RADIO_WORK_SEEKREQ;
}
break;
}
}
/*********************************************
Function: RadioDisplay
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:38:29
*********************************************/
void RadioDisplay(void)
{
unsigned int i;
unsigned char j;
if(System.DispMode.Next==DISPMODE_RADIO)
{
Radio.F_TunerDispReq=1;
}
if(System.DispMode.Last==DISPMODE_RADIO)
{
DisplayClear(CLEARNUM9);
F_DISP_P=0;
F_DISP_ST=0;
}
// display others
if(System.DispMode.Current!=DISPMODE_RADIO)return;
if(F_HalfSecondOut)
{
ShowVolBar();
if(F_SpecOK)
{
F_SpecOK=0;
ShowSpectrum();
}
RadioTunerRead();
if (F_TunerStereo)
F_DISP_ST=1;
else
F_DISP_ST=0;
}
if(!Radio.F_TunerDispReq)return;
Radio.F_TunerDispReq=0;
if(RADIO_IN_SEARCH&&Radio.WorkMode!=RADIO_WORK_SCANWAIT)
{
if(RADIO_IN_AS)
{
//PrintLine2(" Auto Store");
DispNum[0]=' ';
DispNum[1]='S';
DispNum[2]='T';
DispNum[3]='O';
DispNum[4]='R';
DispNum[5]='E';
DispNum[6]=' ';
DispNum[7]=' ';
DisplayRefresh();
}
else if(Radio.F_Scan)
{
DispNum[0]=' ';
DispNum[1]=' ';
DispNum[2]='S';
DispNum[3]='C';
DispNum[4]='A';
DispNum[5]='N';
DispNum[6]=' ';
DispNum[7]=' ';
DisplayRefresh();
}
else
{
/*if(RDS.F_PISeek)
PrintLine2(" PI Seek");
else if(RDS.F_TAEnable)
PrintLine2(" TA Seek");
else
PrintLine2(" Auto Seek");*/
DispNum[0]=' ';
DispNum[1]=' ';
DispNum[2]='S';
DispNum[3]='E';
DispNum[4]='E';
DispNum[5]='K';
DispNum[6]=' ';
DispNum[7]=' ';
DisplayRefresh();
}
DispNum[8]=' ';
F_DISP_P=0;
return;
}
if(Radio.Band[Radio.CurrentBand].CurrentMem==0)
{
DispNum[8]=' ';
}
else
{
DispNum[8]=Radio.Band[Radio.CurrentBand].CurrentMem;
}
if(FreqInFM(Radio.Freq))
{
if(FreqInWBFM(Radio.Freq))
{
DispNum[0]='W';
DispNum[1]='B';
DispNum[2]='1';
DispNum[3]='6';
i=Radio.Freq;
j=i%10;
DispNum[7]=j;
i=i/10;
j=i%10;
DispNum[6]=j;
i=i/10;
j=i%10;
DispNum[5]=j;
i=i/10;
j=i%10;
DispNum[4]=j;
F_DISP_P=0;
}
else
{
DispNum[0]='F';
DispNum[1]='M';
DispNum[2]=Radio.CurrentBand+1;
i=Radio.Freq;
j=i%10;
if(Radio.Area==AREA_USA ||Radio.Area==AREA_LATIN)
DispNum[7]=' ';
else
DispNum[7]=j;
i=i/10;
j=i%10;
DispNum[6]=j;
i=i/10;
j=i%10;
DispNum[5]=j;
i=i/10;
j=i%10;
DispNum[4]=j;
i=i/10;
j=i%10;
if(j==0)
DispNum[3]=' ';
else
DispNum[3]=j;
F_DISP_P=1;
}
DisplayRefresh();
}
else
{
if(FreqInLWAM(Radio.Freq))
{
DispNum[0]='L';
DispNum[1]='W';
DispNum[2]=' ';
DispNum[3]=' ';
}
else
{
DispNum[0]='M';
DispNum[1]='W';
DispNum[2]=' ';
DispNum[3]=' ';
}
i=Radio.Freq;
j=i%10;
DispNum[7]=j;
i=i/10;
j=i%10;
DispNum[6]=j;
i=i/10;
j=i%10;
DispNum[5]=j;
i=i/10;
j=i%10;
if(j==0)
DispNum[4] = ' ';
else
DispNum[4]=j+48;
DisplayRefresh();
F_DISP_P=0;
}
}
/*********************************************
Function: RadioSeek
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:38:27
*********************************************/
void RadioSeek(void)
{
switch(Radio.SeekMode)
{
case RADIO_SEEK_IDLE:
break;
case RADIO_SEEK_INIT:
Radio.SeekMode=RADIO_SEEK_CHANGE_FRE;
case RADIO_SEEK_CHANGE_FRE:
RadioSetFreq(Radio.ReqFreq);
if(FreqInFM(Radio.Freq))
{
//Wait10us(60);//wait for SMeter stable
Wait10us(200);
if(GetSMeter()>DB10)
{
RadioWaitTimer=4;//wait for SSTOP in FM
Radio.SeekMode=RADIO_SEEK_WAIT;
#ifdef DEBUG_MODE
DebugShow("Radio.Freq=",Radio.Freq," Smeter is GOOD!");
#endif
}
else
{
Radio.SeekMode=RADIO_SEEK_IDLE;
}
}
else
{
RadioWaitTimer=6;
Radio.SeekMode=RADIO_SEEK_AMFSU_WAIT;
}
break;
case RADIO_SEEK_AMFSU_WAIT:
if(RadioWaitTimer>0)break;
if(GetSMeter()>30)
{
RadioWaitTimer=12;//wait for SSTOP in AM
Radio.SeekMode=RADIO_SEEK_WAIT;
#ifdef DEBUG_MODE
DebugShow("Radio.Freq=",Radio.Freq," Smeter is GOOD!");
#endif
}
else
{
Radio.SeekMode=RADIO_SEEK_IDLE;
}
break;
case RADIO_SEEK_WAIT:
if(RadioWaitTimer>0)break;
/*if(FreqInFM(Radio.Freq))
{
if (CheckIFC(50,1000))
Radio.F_GoodStation=1;
}
else*/
{
if (CheckIFC(50,1000))
{
Radio.F_GoodStation=1;
#ifdef DEBUG_MODE
DebugShow("Radio.Freq=",Radio.Freq," IFC is good!");
#endif
}
}
Radio.SeekMode=RADIO_SEEK_IDLE;
break;
case RADIO_SEEK_CHECK:
break;
case RADIO_SEEK_GOOD_STATION:
break;
case RADIO_SEEK_BAD_STATION:
break;
}
}
/*********************************************
Function: RadioWork
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:38:25
*********************************************/
void RadioWork(void)
{
unsigned char i,j;
switch(Radio.WorkMode)
{
case RADIO_WORK_IDLE:
if(System.DispMode.Current!=DISPMODE_RADIO)
break;
if(F_HalfSecondOut)
{
Radio.Smeter=GetSMeter();
/*AniBuff[23]=Radio.Smeter/100+'0';
i=Radio.Smeter%100;
AniBuff[24]=i/10+'0';
AniBuff[25]=i%10+'0';
Radio.F_TunerDispReq=1;*/
}
break;
case RADIO_WORK_SEEKREQ:
//Radio.Band[Radio.CurrentBand].CurrentMem=0;
Radio.F_TunerDispReq=1;
Radio.WorkMode=RADIO_WORK_SEEKWAIT;
Radio.BackupFreq=Radio.Freq;
SeekOn();
RadioMute(SOFTON);
Radio.SeekMode=RADIO_SEEK_IDLE;
//break;//!!!!!!!!
case RADIO_WORK_SEEKWAIT:
if(Radio.SeekMode!=RADIO_SEEK_IDLE)break;
if(Radio.F_GoodStation)
{
Radio.F_GoodStation=0;
if((FreqInFM(Radio.Freq)&&!FreqInJapanFM(Radio.Freq)&&!FreqInWBFM(Radio.Freq))&&(RDS.F_AFEnable||RDS.F_TAEnable||RDS.F_PTYEnable||RDS.F_PISeek))
{
if(FreqInNormalFM(Radio.Freq))
{
if(Radio.Freq%10==0)
{
Radio.WorkMode=RADIO_WORK_SEEKWAITRDS;
RadioWorkTimer10ms=25;
}
else
Radio.WorkMode=RADIO_WORK_SEEKNEXT;
}
else
Radio.WorkMode=RADIO_WORK_SEEKNEXT;
}
else
Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
break;
}
case RADIO_WORK_SEEKNEXT:
Radio.ReqFreq=RadioFreqCal(Radio.SeekStep);
Radio.SeekMode=RADIO_SEEK_INIT;
Radio.WorkMode=RADIO_WORK_SEEKWAIT;
if(!Radio.F_Scan)
{
if((Radio.BackupFreq==Radio.ReqFreq)
||(Radio.BackupFreq==Radio.ReqFreq+5 && Radio.Direction==1)
||(Radio.BackupFreq==Radio.ReqFreq-5 && Radio.Direction==-1))
{
Radio.SeekMode=RADIO_SEEK_IDLE;
Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
RadioSetFreq(Radio.BackupFreq);
if(RDS.F_PTYEnable)
{
F_NoPTY=1;
PTYSelectTimer=50;
System.DispMode.Requst=DISPMODE_RDS;
RDSDispMode=RDSDISP_PTYSELECT;
}
}
}
else
{
if((Radio.ScanBackupFreq==Radio.ReqFreq)
||(Radio.ScanBackupFreq==Radio.ReqFreq+5 && Radio.Direction==1)
||(Radio.ScanBackupFreq==Radio.ReqFreq-5 && Radio.Direction==-1))
{
Radio.SeekMode=RADIO_SEEK_IDLE;
Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
RadioSetFreq(Radio.ScanBackupFreq);
if(RDS.F_PTYEnable)
{
F_NoPTY=1;
PTYSelectTimer=50;
System.DispMode.Requst=DISPMODE_RDS;
RDSDispMode=RDSDISP_PTYSELECT;
}
Radio.F_Scan=0;
}
}
//Radio.F_TunerDispReq=1;
break;
case RADIO_WORK_SEEKWAITRDS:
if(RDS.F_RDSStation)
{
Radio.WorkMode=RADIO_WORK_SEEKWAITPI;
RadioWorkTimer10ms=100;
//Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
#ifdef DEBUG_MODE
DebugShow("Radio.Freq=",Radio.Freq," Wait RDS OK!");
#endif
break;
}
if(RadioWorkTimer10ms==0)
{
Radio.WorkMode=RADIO_WORK_SEEKNEXT;
/*#ifdef DEBUG_MODE
DebugShow("Radio.Freq=",Radio.Freq," Wait RDS not OK!");
#endif*/
}
break;
case RADIO_WORK_SEEKWAITPI:
if(RDS.F_GetNewPI)
{
#ifdef DEBUG_MODE
DebugShow("Radio.Freq=",Radio.Freq," Wait PI OK!");
#endif
if(RDS.F_TAEnable)
{
Radio.WorkMode=RADIO_WORK_SEEKWAITTP;
RadioWorkTimer10ms=9;
}
else if(RDS.F_PTYEnable)
{
Radio.WorkMode=RADIO_WORK_SEEKWAITPTY;
PTYSelectTimer=100;
RadioWorkTimer10ms=9;
}
else if(RDS.F_PISeek)
{
if(((RDS.PI==RDS.PIBackup&&RDS.F_REGEnable)
||((RDS.PI&0x00FF)==(RDS.PIBackup&0x00FF)&&!RDS.F_REGEnable))
&& RDS.PI!=0)
{
Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
RDS.F_PISeek=0;
}
else
{
Radio.WorkMode=RADIO_WORK_SEEKNEXT;
}
}
else
Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
break;
}
if(RadioWorkTimer10ms==0)
{
Radio.WorkMode=RADIO_WORK_SEEKNEXT;
/*#ifdef DEBUG_MODE
DebugShow("Radio.Freq=",Radio.Freq," Wait PI not OK!");
#endif*/
}
break;
case RADIO_WORK_SEEKWAITTP:
if(RDS.F_GetNewTP&&RDS.TP)
{
Radio.WorkMode=RADIO_WORK_SEEKOKWAIT;
#ifdef DEBUG_MODE
DebugShow("Radio.Freq=",Radio.Freq," Wait TP OK!");
#endif
break;
}
if(RadioWorkTimer10ms==0)
{
Radio.WorkMode=RADIO_WORK_SEEKNEXT;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -