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

📄 main.c

📁 5807收音机模块用于炬力平台
💻 C
📖 第 1 页 / 共 2 页
字号:
        {
            //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 + -