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

📄 searchhandle.c

📁 5807收音机模块用于炬力平台
💻 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 + -