/*****************************************************************************
* Module    : UI
* File      : ui_mic.c
* Author    : Hanny
* Function  : 录音任务用户自定义UI设计，处理按键功能映射与显示
*****************************************************************************/
#ifndef CONFIG_C

//录音任务显示处理
#if IS_LEDSEG_7PIN_DISPLAY
#pragma location="TASK_MIC_SEG"
void task_mic_display(void)
{
    ledseg_ocx_event();
    switch (ledseg_ocx.disp_status) {
    case LEDSEG_OCX_NULL:
        ledseg_disp(MENU_MIC);
        break;
    default:
        ledseg_ocx_display();
        break;
    }
}

//录音中任务显示处理
#pragma location="TASK_RECORD_SEG"
void tasksub_record_display(void)
{
    //ledseg_ocx_event();
    if (ledseg_ocx.show_time && ocx_show_cnt >= ledseg_ocx.show_time) {
        ledseg_ocx.status = LEDSEG_OCX_NULL;
    }
    if (ledseg_ocx.status != ledseg_ocx.disp_status) {
        ledseg_ocx.disp_status = ledseg_ocx.status;
    }

    switch (ledseg_ocx.disp_status) {
    case LEDSEG_OCX_NULL:
        ledseg_disp(MENU_RECORDING);
        break;
    default:
        ledseg_ocx_display();
        break;
    }
}

#elif IS_LCD_DISPLAY
#pragma location="TASK_MIC_SEG"
void task_mic_display(void)
{
    u8 hour, min, sec;
    if (sys_ctl.bat_val != sys_ctl.disp_bat_val) {
        sys_ctl.disp_bat_val = sys_ctl.bat_val;
        t_rec.updata_flag = 1;             //设置更新标志
    }
    if (!t_rec.updata_flag) {
        return;
    }
    t_rec.updata_flag = 0;
/*
    // 清除"请稍候"字样
    line_clear();
    line_update(2);
    line_update(4);
*/
    // 画麦克风大图标
    draw_img(RES_RECORD_REC0_BMP, 45, 2);

    line_clear();
    //显示播放状态
    if (t_rec.rec_sta == REC_STA_STOP) {
        disp_draw(RES_ICON_STOP_BMP, 0, 0);
    }else if (t_rec.rec_sta == REC_STA_PAUSE) {
        disp_draw(RES_STATUS1_BMP, 0, 0);
    }else if (t_rec.rec_sta == REC_STA_RECORD) {
        disp_draw(RES_ICON_REC_BMP, 0, 0);
    }

    //显示时间
    hour = t_rec.rec_time / 3600;
    min = (t_rec.rec_time / 60) % 60;
    sec = t_rec.rec_time % 60;
    disp_medium_time(hour, min, sec, 45, 0);
    if (sys_ctl.bat_val >= 1) {
        disp_draw(RES_ICON_BAT0_BMP + sys_ctl.bat_val - 1, 108, 0);
    }
    line_update(0);
}

#pragma location="TASK_RECORD_SEG"
void tasksub_record_display(void)
{
    u8 hour, min, sec;
    if (sys_ctl.bat_val != sys_ctl.disp_bat_val) {
        sys_ctl.disp_bat_val = sys_ctl.bat_val;
        t_rec.updata_flag = 1;             //设置更新标志
    }
    if (!t_rec.updata_flag) {
        if(ocx_show_cnt < 5) {
            return;
        }
    }
    t_rec.updata_flag = 0;

    line_clear();
    //显示播放状态
    if(ocx_show_cnt >= 5)
    {
        t_rec.disp_sta = ~t_rec.disp_sta;
        ocx_show_cnt = 0;
    }
    if(!t_rec.disp_sta)
    {
        disp_draw(RES_ICON_REC_BMP, 0, 0);
    }

    //显示时间
    hour = t_rec.rec_time / 3600;
    min = (t_rec.rec_time / 60) % 60;
    sec = t_rec.rec_time % 60;
    disp_medium_time(hour, min, sec, 45, 0);
    if (sys_ctl.bat_val >= 1) {
        disp_draw(RES_ICON_BAT0_BMP + sys_ctl.bat_val - 1, 108, 0);
    }
    line_update(0);
}

#else
#pragma location="TASK_MIC_SEG"
void task_mic_display(void)
{
}
#pragma location="TASK_RECORD_SEG"
void tasksub_record_display(void)
{
}
#endif

//录音任务消息处理
#pragma location="TASK_MIC_SEG"
void task_mic_deal_msg(u8 msg)
{
    switch(msg) {
    case KU_PLAY:
    //case KU_PLAY_POWER:
        if (device_is_online(DEVICE_SDMMC) || device_is_online(DEVICE_UDISK)) {
            tasksub_mic_record();
            goto record_replay;  // 注意这个goto语句！！目的是为了跳过case KU_MENU的语句！！

    case KU_MENU:   // 放在这里能更好的体现代码的复用性
    case KU_PLAY_POWER:
            if (t_rec.rec_sta == REC_STA_PAUSE) {
                t_rec.play_flag = 1;            //结束录音，播放刚刚录下的文件
                t_rec.rec_sta = REC_STA_STOP;
            }

record_replay:
            if(t_rec.play_flag) {
#if THEME_SELECT==THEME_LCD_DEFAULT
                lcd_buf = lcd_buf1;
#endif

#if (RECORD_FILE_NAME == SHORT_NAME)
                filename[FILE_NAME_FLAG] |= FB_GBK;     //filename没有重新读，短文件名要置位GBK标志
#endif
#if MUSIC_LRC_EN
                t_msc.lrc_flag = 0;     // 消除歌词显示对播放录音时的显示影响
#endif
                tasksub_mic_recplay();//播放刚刚录下的文件
                fat_fs.limit_clust = 0;
                memset(&t_rec,0,sizeof(t_rec));
                t_rec.rec_sta = REC_STA_STOP;
                mic_init(SEL_RECMIC);  //选择MIC录音
                wav_load_code(0x60);

                t_rec.updata_flag = 1;             //设置更新标志,界面跳转到录音界面
                // 清除录音文件名及时间显示
                line_clear();
                line_update(2);
                line_update(4);
#if THEME_SELECT==THEME_LCD_DEFAULT
                lcd_buf = lcd_buf2;
#endif
            }
        } else {
            show_no_device();
        }
        break;
        //调用公共消息函数
    default:
        deal_msg(msg);
        break;
    }
}
//正在录音中任务消息处理
#pragma location="TASK_RECORD_SEG"
void tasksub_record_deal_msg(u8 msg)
{
    switch(msg) {
#if IS_LCD_DISPLAY
        //暂停录音
    case KU_PLAY:
        task_record_pause();
        break;

        //停止录音
    case KU_MENU:
    case KU_PLAY_POWER:
        t_rec.play_flag = 1;
        task_record_stop();
        break;
#elif
        //暂停录音
    case KU_PLAY:
    case KU_PLAY_POWER:
        task_record_pause();
        break;

        //停止录音
    case KU_MENU:
    case KU_HSF:
        t_rec.play_flag = 1;
        task_record_stop();
        break;
#endif
    case QSYSTEM_1S:
        t_rec.rec_time++;           //录音计时
#if IS_LCD_DISPLAY
        t_rec.updata_flag = 1;      // 设置更新标志
        deal_msg(msg);              // 调用公用消息函数，处理背光问题
#endif
        if (t_rec.sync_cnt++ < REC_SYNC_CNT) {
            break;
        }

        t_rec.sync_cnt = 0;                     //同步
        if (!wav_sync_file(wav_en_header_buf)) {
            //printf("file sync Fail!\n");
            mic_adc_stop();
        }
        break;
        //调用公共消息函数
    default:
        deal_msg(msg);
        break;
    }
}

//录音播放任务消息处理
#pragma location="TASK_MUSIC_SEG"
void tasksub_mic_recplay_deal_msg(u8 msg)
{
    switch(msg) {
    case KU_PLAY:
        if (music_start_pause()) {
            t_msc.pause = 0;        // 继续播放
        } else {
            t_msc.pause = 1;        // 暂停播放
        }
        t_msc.disp_status_flag = 1; //更新显示状态

        break;

    case K_VOL_UP:
#if !IS_LCD_DISPLAY     // lcd方案的show_volume函数集成了音量设置功能
        user_set_volume(user_volume_inc(sys_ctl.volume));
#endif
        show_volume();
#if IS_LCD_DISPLAY
        t_msc.disp_flag = 1;                     //更新显示
#endif
#if HARD_IR_EN || SOFT_IR_EN
        if(sys_ctl.volume) {
            sys_unmute();
        }
#endif
        break;

    case K_VOL_DOWN:
#if !IS_LCD_DISPLAY
        user_set_volume(user_volume_dec(sys_ctl.volume));
#endif
        show_volume();
#if IS_LCD_DISPLAY
        t_msc.disp_flag = 1;                     //更新显示
#endif
#if HARD_IR_EN || SOFT_IR_EN
        if(sys_ctl.volume) {
            sys_unmute();
        }
#endif
        break;
    case KU_MENU:
    case KU_PLAY_POWER:
        music_stop();   // 直接退出录音播放模式
        break;
    case KL_PLAY_POWER:
        task_ctl.work_sta = TASK_EXIT;
        break;
        //调用公共消息函数
    default:
        deal_msg(msg);
    }
}
#endif
