📄 searchhandle.c
字号:
/*
*******************************************************************************
* ACTOS AP
* main ap of sdk 3.0
*
* (c) Copyright, Actions Co,Ld.
* All Right Reserved
*
*******************************************************************************
*/
#pragma codeseg(CODE_1)
#include "ap_radio.h"
#include "actos.h"
extern comval_t F_comval;
extern fm_play_status_t FMStatus;
extern FMRADIO_param_t radio_param;
extern char Freqtab[10];
void ShowFreqInFM(void); //FM主界面显示
bool Search_Show(FM_direct_t Direct); //自动搜台时的显示
extern FMStatus_Tab_t d_FMStatus;
extern char SearchFreq;
extern char SetFreq;
int SearchHandle(BYTE Direct)
{
int key;
bool need_draw = TRUE;
BYTE Searchflag = 1;
while (1)
{
if (Direct != 0)
{
if (Direct == 10) //NEXT搜索处理
{
if(((FMStatus.freq+1)>210)&&(FMStatus.mode==0))FMStatus.freq=0;
else if(((FMStatus.freq+1)>140)&&(FMStatus.mode==1))FMStatus.freq=0;
else
{
FMStatus.freq+=1;
}
if(Search_Show(UP))return 0;
}
else if (Direct == 20) //LAST搜索处理
{
if(((FMStatus.freq-1)<2)&&(FMStatus.mode==0))FMStatus.freq=210;
else if(((FMStatus.freq-1)<2)&&(FMStatus.mode==1))FMStatus.freq=140;
else
{
FMStatus.freq-=1;
}
if(Search_Show(DOWN))return 0;
}
else if (Direct == 50)
{
Direct = 0;
return 0;
}
}
if (need_draw) //显示
{
ShowFreqInFM();
need_draw = FALSE;
}
key = ap_get_message();
switch (key)
{
case AP_MSG_STANDBY:
//do nothing
break;
case AP_KEY_NEXT | AP_KEY_UP: //NEXT搜索时按NEXT键,停止搜索
if (Searchflag == 1)
{
Searchflag = 0;
}
else if (Direct == 10)
{
Direct = 50;
if(FMStatus.volume)
fmSendCommand(MC_MUTE, releaseMUTE);
}
break;
case AP_KEY_PREV | AP_KEY_UP: //LAST搜索时按LAST键,停止搜索
if (Searchflag == 1)
{
Searchflag = 0;
}
else if (Direct == 20)
{
Direct = 50;
if(FMStatus.volume)
fmSendCommand(MC_MUTE, releaseMUTE);
}
break;
default: //热键处理
key = ap_handle_hotkey(key);
if (key == RESULT_REDRAW)
need_draw = TRUE;
else if (key != 0)
{
return key;
}
}
}
}
bool Search_Show(FM_direct_t Direct)
{
bool Search_Flag;
int i;
FMStatus.stereo_status = 1;
FMStatus.station = 0;
fmSendCommand(MC_MUTE, SetMUTE);
fmSendCommand(MC_SETVOLUME, FMStatus.volume);
fmSendCommand(MC_RESTORE, (int) &radio_param);
Search_Flag = fmSendCommand(MC_SEARCH, Direct);
if (Search_Flag) //搜台成功后,MUTE释放
{
fmSendCommand(MC_MUTE, releaseMUTE);
fmSendCommand(MC_GETSTATUS, (int) &FMStatus);
}
ShowFreqInFM();
for (i = 0; i < 0x3999; i++)
{
}
return Search_Flag;
}
void ShowFreqInFM(void)
{
char buf[4] =
{ "FM" };
long i;
int k, h;
char FMTab[7];
ClearScreen(NULL);
SetTextPos(128 / 2 - 6 * 3, 0);
if ((FMStatus.station_count > 0) && (FMStatus.station > 0)) //显示电台号
{
strcpy(FMTab, "[");
strcat(FMTab, "CH");
*itoa_2(FMStatus.station, buf);
strcat(FMTab, buf);
strcat(FMTab, "]");
PutS(FMTab, -1);
}
ResShowPic(RA_FM, 16, 0); //fm 标志显示
if (FMStatus.stereo_status == 0)
{
ResShowPic(RA_STERE, 128 - 30, 0); //显示立体声
}
ui_show_batt(GetBattery(), F_comval.BatteryType); //电池电量显示
strcpy(Freqtab, "<");
strcat(Freqtab, "FM");
#if 1
//strcpy(Freqtab,"FM");
//频率换算及转换成ASCII码
k = FMStatus.freq;
if(FMStatus.mode==0)
i=k/10 + 87;
else
i=k/10 + 76;
h=k%10;
if (i < 100)
*itoa_2(i, buf);
else
*itoa_3(i, buf);
strcat(Freqtab, buf);
strcat(Freqtab, ".");
*itoa_1(h, buf);
//buf[1]=' ';
//buf[1] = 0;
strcat(Freqtab, buf);
strcat(Freqtab, ">");
#else
*itoa_2(SetFreq, buf);
strcat(Freqtab, buf);
*itoa_2(SearchFreq, buf);
strcat(Freqtab, buf);
#endif
SetTextPos((128 - 6 * 8) / 2, 8);
PutS(Freqtab, -1); //显示电台频率
if (FMStatus.mode == 0)
{
k = (FMStatus.freq )*100/200;
ResShowPic(DWNARROW, 11 - 5 + k, 16); //显示箭头
ResShowPic(FQBAR, 0, 24); //显示US频率条
}
else
{
k = (FMStatus.freq )*100/200;
ResShowPic(DWNARROW, 30 - 6 + k, 16); //显示箭头
ResShowPic(FQBAR2, 0, 24); //显示JP频率条
}
UpdateScreen(NULL); //刷新
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -