📄 main.c
字号:
{
//initial
if (FMStatus.mode == 0)
radio_param.param1 = FMStationTab;
else
radio_param.param1 = &FMStationTab[20];
(fm_play_status_t *) radio_param.param2 = &FMStatus;
fmSendCommand(MC_RESTORE,(int)&radio_param);
fmSendCommand(MC_SETVOLUME, 0); //reagan vol =0 for mute pa
if(!fmSendCommand(MC_OPEN,SearchLevel)) //硬件错误提示
{
ClearScreen(NULL);
ResShowMultiString(FMERROR, F_comval.langid, -1, 8);
//UpdateScreen(NULL);
strcpy(fmdataflag, " ");
ap_sleep(3);
return RESULT_MAIN;
}
fmSendCommand(MC_PLAY, 0);
fmSendCommand(MC_MUTE, SetMUTE);
//fmSendCommand(MC_SETVOLUME, FMStatus.volume);
//fmSendCommand(MC_GETSTATUS, (int) &FMStatus);
BandSwitch = FALSE;
FirstWait = TRUE;
}
if (need_draw) //屏幕重画
{
ShowFreqInFM();
need_draw = FALSE;
}
if (FirstWait) //初次进入AP等待1.5S释放MUTE(静音)
{
FirstWait = FALSE;
ap_sleep(3);
//降噪 等FM稳定后打开PA的音量
fmSendCommand(MC_SETVOLUME, FMStatus.volume);
fmSendCommand(MC_GETSTATUS, (int) &FMStatus);
if(FMStatus.volume)
fmSendCommand(MC_MUTE, releaseMUTE);
}
key = ap_get_message();
if (test == 0xff)
key = AP_KEY_MODE | AP_KEY_LONG;
switch (key)
{
case AP_MSG_STANDBY:
//do nothing
break;
case AP_MSG_RTC: //2HZ中断到来,屏幕重画,为了电池显示更新
ui_show_batt(GetBattery(), g_comval.BatteryType);
if (g_comval.EarProtect_flag)
{
FMStatus.volume = input8(0x99) & 0x3f;
FMStatus.vol_display = FMStatus.volume * g_comval.VolumeMax / 31;
}
TimeCount++;
need_draw = FALSE;
if (TimeCount >= 100)
{
need_draw = TRUE;
TimeCount = 0;
}
break;
case AP_KEY_HOLD|AP_KEY_NEXT:
{
// FMStatus.freq+=1;
result=SearchHandle(10);
}
break;
case AP_KEY_HOLD|AP_KEY_PREV:
{
// FMStatus.freq-=1;
result=SearchHandle(20);
}
break;
case AP_KEY_NEXT|AP_KEY_UP:
{
fmSendCommand(MC_STEPGRID,UP);
fmSendCommand(MC_GETSTATUS,(int)&FMStatus);
need_draw=TRUE;
}
break;
case AP_KEY_PREV|AP_KEY_UP:
{
fmSendCommand(MC_STEPGRID,DOWN);
fmSendCommand(MC_GETSTATUS,(int)&FMStatus);
need_draw=TRUE;
}
break;
case AP_KEY_MODE | AP_KEY_UP:
menu.active = active;
menu.total = 6 + 2; //'+1' for FM Record by ccm
menu.pic_inactive = (WORD *) pic_inactive;
menu.pic_active = (WORD *) pic_active;
menu.string = (WORD *) string;
//menu.string_id=0; //多语言修改
menu.string_id = F_comval.langid; //语言标志的选择
ui_auto_update = FALSE; //FALSE时,保证整屏写完再刷新
result = ui_function_menu(&menu, NULL);
ui_auto_update = TRUE; //设置恢复
need_draw = TRUE;
//if(result==RESULT_IGNORE)result=0; //del by ccm
if (result == RESULT_IGNORE) //按PLAY键和8s超时返回FM收音界面,不执行当前激活的菜单!
{
result = 0;
break;
}
if (result != 0)
return result;
active = menu.active;
if (menu.active == 0) //电台保存
{
if (fmSendCommand(MC_SAVESTATION, 0) != FALSE)
{
fmSendCommand(MC_BACKUP, (int) &radio_param);
}
}
//menu.active==2: add for FM record by ccm //电台录音
else if (menu.active == 1)
{
return RESULT_FMREC_NOSTART;
}
else if (menu.active == 2) //删除单个电台
{
if (fmSendCommand(MC_DELONE, 0) != FALSE)
{
fmSendCommand(MC_BACKUP, (int) &radio_param);
}
/*跳到下一个电台 */
fmSendCommand(MC_STEP,UP);
fmSendCommand(MC_GETSTATUS,(int)&FMStatus);
}
else if (menu.active == 3) //删除全部电台
{
fmSendCommand(MC_DELALL, 0);
fmSendCommand(MC_BACKUP, (int) &radio_param);
}
else if (menu.active == 4) //全自动搜台.
{
result = AutoSearchHandle(10);
if (result == RESULT_IGNORE)
result = 0;
if (result != 0)
return result;
if(FMStatus.volume)
fmSendCommand(MC_MUTE, releaseMUTE);
fmSendCommand(MC_SETVOLUME, FMStatus.volume);
}
else if (menu.active == 5) //选择日本频段
{
if (FMStatus.mode == 1)
{
memcpy(&FMStatusJP, &FMStatus, sizeof(FMStatus));
memcpy(&FMStatus, &FMStatusUS, sizeof(FMStatus));
BandSwitch = TRUE;
}
}
else if (menu.active == 6) //选择欧美频段
{
if (FMStatus.mode == 0)
{
memcpy(&FMStatusUS, &FMStatus, sizeof(FMStatus));
memcpy(&FMStatus, &FMStatusJP, sizeof(FMStatus));
BandSwitch = TRUE;
}
}
break;
case AP_KEY_PLAY | AP_KEY_UP: //跳到电台表的下一个
fmSendCommand(MC_STEP, UP);
fmSendCommand(MC_GETSTATUS, (int) &FMStatus);
need_draw = TRUE;
break;
case AP_KEY_VOLADD:
case AP_KEY_VOLSUB:
ClearScreen(NULL);
UpdateScreen(NULL); //刷新
ResShowPic(VOLUMEBK, 0, 0);
slider.max = g_comval.VolumeMax;
slider.min = 0;
slider.step = 1;
FMStatus.volume = FMStatus.vol_display * 31 / g_comval.VolumeMax;
slider.value = FMStatus.vol_display;
ui_auto_update = FALSE;
result = ui_slider(&slider, volume_callback); //音量滚动条显示
ui_auto_update = TRUE;
need_draw = TRUE;
m_FMPlaystatus.vol_display = FMStatus.vol_display;
FMStatus.volume = FMStatus.vol_display * 31 / g_comval.VolumeMax;
fmSendCommand(MC_GETSTATUS, (int) &FMStatus);
if (result == RESULT_IGNORE)
result = 0;
if (result != 0)
return result;
break;
default: //热键处理
key = ap_handle_hotkey(key);
if (key == RESULT_REDRAW)
need_draw = TRUE;
else if (key == RESULT_RECORD)
return RESULT_FMREC_START; //for FM record (press REC) by ccm
else if ((key != 0) || (result != 0))
{
if (key != 0)
return key;
else
return result;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -