void idle_mode(void) { u8 key; //deg_str("idle_mode \n"); //dac_out_select(DAC_MUSIC, 0); //clear_all_event(); dac_mute_control(1,1); #ifdef PLAY_STATUS_LED_FUNC set_play_status_led_spark(PLED_OFF); #endif KT_AMFMStandby(); usb_suspend(); flush_all_msg(); disp_port(MENU_POWER_OFF); input_number_en=0; vol_change_en=0; #ifdef DEFAULT_VOL sys_main_vol=DEFAULT_VOL; #endif delay_10ms(20); #ifdef SYS_SOFT_WARE_GOIN_STANDBY if(sys_pwr_flag==0){ put_msg_fifo(MSG_SYS_CORE_SLEEP); } #endif while (1) { key = app_get_msg(); switch (key) { #ifdef SYS_SOFT_WARE_GOIN_STANDBY case MSG_SYS_CORE_SLEEP: core_power_off(); break; #endif case MSG_CHANGE_WORK_MODE: clear_all_event(); flush_all_msg(); return; case MSG_MUSIC_NEW_DEVICE_IN: //有新设备接入 break; default: ap_handle_hotkey(key); break; } } }
/*----------------------------------------------------------------------------*/ void rtc_fun(void) { MAIN_POWER_PORT_INIT(); MAIN_POWER_PORT_DISABLE(); iic_gpio_set_low(); amp_mute(1); if(alm_on_flag){ if(sys_main_vol != alrm_vol_bakup) sys_main_vol = alrm_vol_bakup; alm_on_flag = 0; } input_number_en = 0; vol_change_en=0; key_voice_en=0; main_menu = MENU_RTC; close_alarm(); dsp_set_eq_mode(0); //系统时钟div前需关闭eq SYSTEM_CLK_DIV4(); key_table_sel(0); flush_all_msg(); set_max_vol(MAX_ANOLOG_VOL,MAX_DIGITAL_VOL);///设置最大音量 dac_out_select(DAC_MUSIC, 0); rtc_mode_setting = RTC_DISPLAY; rtc_coordinate = 0; alm_coordinate = 0; if (alm_cnt) { put_msg_lifo(MSG_ALM_ON); } else { read_rtc(&curr_time); chk_date_err(); disp_port(MENU_RTC); } MAIN_POWER_PORT_INIT(); MAIN_POWER_PORT_DISABLE(); deal_rtc(); amp_mute(1); MAIN_POWER_PORT_ENABLE(); delay_10ms(3); key_voice_en=0; main_vol_set(0, CHANGE_VOL_NO_MEM); MAIN_POWER_PORT_ENABLE(); amp_mute(1); delay_10ms(80); snooze_en =0; PT2313_Init(); delay_10ms(10); PT2313_Init(); }
/*----------------------------------------------------------------------------*/ void rec_mic_fun(void) { #ifdef UART_ENABLE deg_str("encode \n"); #endif dac_mute_control(1,1); input_number_en = 0; //vol_change_en=1; main_menu = MENU_RECWORKING; disp_port(MENU_SCAN_DISK); delay_10ms(50); SYSTEM_CLK_DIV2(); encode_channel = REC_MIC; encode_vol = 7; key_table_sel(0); flush_all_msg(); if(RECODE_INIT == encode_status) { put_msg_lifo(MSG_REC_FIND); //put_msg_lifo(MSG_REC_START); } //put_msg_lifo(MSG_REC_START); set_max_vol(MAX_ANOLOG_VOL,MAX_DIGITAL_VOL);///设置最大音量 rec_mic_main(); dac_mute_control(0,0); break_encode(); lcd_clr_flash_icon(); }
void bt_link_idle_hdlr() { if(link_idle_ind){ link_idle_timer++; if(link_idle_timer>=(2*60*15)){ #ifdef USE_POWER_KEY flush_all_msg(); Mute_Ext_PA(MUTE); main_vol(0); EA = 0; #if defined(PWR_CTRL_WKUP) wkup_pin_ctrl(0); #else power_ctl(0); #endif #endif } } else{ link_idle_timer=0; } }
void idle_mode(void) { u8 key; //deg_str("idle_mode \n"); //dac_out_select(DAC_MUSIC, 0); //clear_all_event(); KT_AMFMStandby(); usb_suspend(); flush_all_msg(); disp_port(MENU_POWER_OFF); input_number_en=0; vol_change_en=0; SYS_POWER_OFF(); LCD_BACKLIGHT_OFF(); //core_power_off(); while (1) { key = app_get_msg(); switch (key) { case MSG_POWER: work_mode = MUSIC_MODE; case MSG_CHANGE_WORK_MODE: clear_all_event(); flush_all_msg(); irkey_activated =0; sys_pwr_flag =1; return; case MSG_MUSIC_NEW_DEVICE_IN: //有新设备接入 //put_msg_lifo(MSG_CHANGE_WORK_MODE); break; default: //ap_handle_hotkey(key); break; } } }
/*----------------------------------------------------------------------------*/ void music_decode(void) { sys_printf(" ------------------------------------>music_decode "); #ifdef AC_SLAVE_ENABLE DSA_init(); #endif dev_remov_timer=0; play_mode = REPEAT_OFF; disk_toc_ok=0; dev_invalid=0; input_number_en = 1; //允许数字输入功能 vol_change_en=1; key_voice_en=1; main_menu = MENU_MUSIC_MAIN; dec_msg = get_dec_msg_ptr(); fat_ptr1.buf = win_buffer; SYSTEM_CLK_DIV1(); //sd_speed_init(0, 100); key_table_sel(0); flush_all_msg(); music_info_init(); set_max_vol(MAX_ANOLOG_VOL,MAX_DIGITAL_VOL);///设置最大音量 if(DSA_SEL_DEV==DEVICE_SDMMC0){ given_device = DEVICE_SDMMC0; } else if(DSA_SEL_DEV==DEVICE_UDISK){ given_device = DEVICE_UDISK; } //put_msg_lifo(MSG_MUSIC_SELECT_NEW_DEVICE); music_play(); //delay_10ms(3); stop_decode(); usb_suspend(); //Entered Suspend Mode key_voice_en=0; main_vol_set(0, CHANGE_VOL_NO_MEM); given_device = NO_DEVICE; }
/*----------------------------------------------------------------------------*/ void aux_fun(void) { flashled(3); // amp_abd(1); //work_mode++; //return ; input_number_en = 0; vol_change_en=1; main_menu = MENU_AUX; disp_port(MENU_AUX); amux_dsp_eq(); SYSTEM_CLK_DIV4(); encode_channel = REC_LINEIN; encode_vol = 3; key_table_sel(0); flush_all_msg(); set_max_vol(MAX_ANOLOG_VOL,MAX_DIGITAL_VOL);///设置最大音量 aux_main(); main_vol_set(0, CHANGE_VOL_NO_MEM); break_encode(); }
/*----------------------------------------------------------------------------*/ void rec_mic_fun(void) { dac_mute_control(1,1); input_number_en = 0; vol_change_en=1; main_menu = MENU_REC; disp_port(MENU_REC); SYSTEM_CLK_DIV2(); encode_channel = REC_MIC; encode_vol = 7; key_table_sel(0); flush_all_msg(); if(RECODE_INIT == encode_status) { put_msg_lifo(MSG_REC_FIND); //put_msg_lifo(MSG_REC_START); } //put_msg_lifo(MSG_REC_START); set_max_vol(MAX_ANOLOG_VOL,MAX_DIGITAL_VOL);///设置最大音量 rec_mic_main(); dac_mute_control(0,0); break_encode(); }
/*----------------------------------------------------------------------------*/ void aux_main(void) { #ifdef AUX_DETECT_FUNC if(!aux_online){ work_mode = MUSIC_MODE; return ; } #endif #ifdef UART_ENABLE deg_str("aux \n"); #endif aux_detect_protect(FALSE); set_delay_mute(DELAY_MUTE_1000MS); key_table_sel(SYS_DEFUALT_KEY_TABLE); sys_mute_flag=0; input_number_en = 0; vol_change_en=1; main_menu = MENU_AUX_MAIN; disp_port(MENU_AUX_MAIN); amux_dsp_eq(); SYSTEM_CLK_DIV2(); encode_channel = REC_LINEIN; encode_vol = 3; key_table_sel(0); flush_all_msg(); set_max_vol(MAX_ANOLOG_VOL,MAX_DIGITAL_VOL);///设置最大音量 aux_main_handlr(); ext_amp_mute(MUTE); main_vol_set(0, CHANGE_VOL_NO_MEM); sys_mute_flag=0; break_encode(); }
/*----------------------------------------------------------------------------*/ void fm_radio(void) { // printf("enter fm\n"); //P05_source_select(P05_SEL_OSC1); amux_dsp_eq(); sys_clk_div(2);//SYSTEM_CLK_DIV2(); init_fm_rev(); PT2313_Config(RADIO_CHAN,CHAN_ADJ); input_number_en = 1; vol_change_en=1; main_menu = MENU_FM_MAIN; key_table_sel(1); flush_all_msg(); enter_fm_rev(); disp_port(MENU_FM_MAIN); sys_clk_div(4);//SYSTEM_CLK_DIV4(); set_max_vol(MAX_ANOLOG_VOL,MAX_DIGITAL_VOL);///设置最大音量 dac_out_select(DAC_AMUX1, 0); encode_channel = REC_FM; #if ECHO_ENABLE encode_channel = REC_MIC ; #endif encode_vol = REC_AMUX_GAIN; fm_rev(); main_vol_set(0, CHANGE_VOL_NO_MEM); amp_mute(1); alm_on_flag =0; fm_rev_powerdown(); //P05_source_select(P05_SEL_IO); break_encode(); }
/*----------------------------------------------------------------------------*/ void rec_mic_fun(void) { REC_CHAN_PORT_INIT(); REC_CHAN_PORT_ENABLE(); set_max_vol(MAX_ANOLOG_VOL,MAX_DIGITAL_VOL);///设置最大音量 #if KALAOK_FUNCTION if(RECODE_STOP == encode_status) { dac_out_select(DAC_MUSIC | DAC_KALAOK, 0); kala_dac(); set_rec_vol(7); P3HD |=(1<<6); dsp_kalaok_channel(); vol_change_en=1; } else #endif { #if !ECHO_ENABLE ///<由于可能需要混响输出声音,此处不能静音 //if((BUSY != echo_ptr->status) ) dac_mute_control(1,1); #endif vol_change_en = 0; } input_number_en = 0; main_menu = MENU_REC; disp_port(MENU_REC); //while(1); sys_clk_div(2);//SYSTEM_CLK_DIV2(); //SYSTEM_CLK_DIV1(); #if 1 encode_channel = REC_LINEIN; encode_vol = REC_AMUX_GAIN; #else encode_channel = REC_MIC; encode_vol = REC_MIC_GAIN; #endif key_table_sel(0); flush_all_msg(); //deg_str("Rec Mode\n"); if(RECODE_INIT == encode_status) { put_msg_lifo(MSG_REC_FIND); //put_msg_lifo(MSG_REC_START); } //put_msg_lifo(MSG_REC_START); rec_mic_main(); #if KALAOK_FUNCTION if(RECODE_STOP == encode_status) { kala_dac_off(); P3HD &=~(1<<6); dsp_set_adc_con(0); } #endif dac_mute_control(0,0); REC_CHAN_PORT_DISABLE(); break_encode(); }
void main(void) { amp_mute(1); clock_in = T0CNT; //输入时钟,define in clock.h // WDT_EN(); sys_init(); //power_key_hdlr(SYS_PWR_ON); flashled(LED_ON); AMUX_P2IE_SET(AMUX0_IE&AMUX1_IE); sys_info_init(); clear_all_event(); flush_all_msg(); //work_mode=REC_MIC_MODE; ///* while (1) { switch (work_mode) { case MUSIC_MODE: music_decode(); break; #if USB_DEVICE_ENABLE case USB_DEVICE_MODE: usb_audio_massstorage(); break; #endif #if FM_MODULE case FM_RADIO_MODE: fm_radio(); break; #endif #ifndef NOT_USE_LINE_IN_FUNC case AUX_MODE: aux_fun(); break; #endif #if RTC_ENABLE case RTC_MODE: rtc_fun(); break; #endif case REC_MIC_MODE: rec_mic_fun(); break; case IDLE_MODE: #ifndef NO_IDLE_MODE_FUNC idle_mode(); #endif // power_key_hdlr(SYS_PWR_OFF); break; default: work_mode = MUSIC_MODE; break; } write_info(MEM_SYSMODE ,work_mode); } //*/ }
/*----------------------------------------------------------------------------*/ u8 device_init(void) { usb_sd_dev_toc=0; device_online = get_device_online_status(); if(playpoint_time.last_device != device_active) { write_playtime(&playpoint_time); } if (device_active & device_online) ///<当前需要活动的设备在线 { flush_all_msg(); ///<清空全部消息 stop_decode(); ///<停止解码 #if FILE_ENCRYPTION password_start(0); #endif #ifdef SYS_GPIO_SEL_FUNC if( gpio_sel_func){ return 0xff; } #endif if (device_active == BIT(USB_DISK)) { if (usb_host_emuerate_devcie(win_buffer)) ///<USB MASS STORAGE 枚举 { #ifdef SYS_GPIO_SEL_FUNC if( gpio_sel_func){ return 0xff; } #endif f_init(win_buffer, (u16)usb_otp_read, get_usb_device_pkt_size()); ///<枚举成功后 初始化文件系统参数 } else { return 0xff; ///<枚举失败 } } else if (device_active == BIT(SDMMC)) { if (init_sd()) ///<sd 卡鉴定 { #ifdef SYS_GPIO_SEL_FUNC if( gpio_sel_func){ return 0xff; } #endif f_init(win_buffer, (u16)sdmmc_otp_read, 1);//get_usb_device_pkt_size()); ///<鉴定成功后 初始化文件系统参数 } else { return 0xff; ///<鉴定失败 } } } #ifdef SYS_GPIO_SEL_FUNC if( gpio_sel_func){ return 0xff; } #endif if (!f_mount()) ///<文件系统初始化 { #ifdef SYS_GPIO_SEL_FUNC if( gpio_sel_func){ return 0xff; } #endif fs_ext_setting(file_type); #ifdef SYS_GPIO_SEL_FUNC if( gpio_sel_func){ return 0xff; } #endif set_playpoint_info(read_playpoint_info(device_active)); #ifdef SYS_GPIO_SEL_FUNC if( gpio_sel_func){ return 0xff; } #endif fs_scan_disk(); #ifdef SYS_GPIO_SEL_FUNC if( gpio_sel_func){ return 0xff; } #endif playpoint_filenum = get_scan_filenumber(); //根据对应设备的起始簇找出有断点的文件号 /**/ usb_sd_dev_toc=1; #ifdef DISABLE_USB_SD_BP_PLAY playpoint_filenum=0; #endif if(0 == playpoint_filenum) { if(given_file_number) given_file_number = 1; } if (fs_msg.fileTotal == 0) { return 0xfe; } #if ((USE_DEVICE == MEMORY_STYLE)&&(FAT_MEMORY)) check_reserve_sector(device_active); #endif return 0; } else { //无有效设备 return 0xff; } }
void main(void) { #if defined(USE_LCD_DRV_HT1621) lcd_ht1621_init(); #endif work_mode = MUSIC_MODE; //amp_mute(1); clock_in = T0CNT; //输入时钟,define in clock.h //WDT_EN(); sys_init(); AMUX_P2IE_SET(AMUX1_IE); sys_info_init(); clear_all_event(); flush_all_msg(); #ifndef LCD_BACK_LIGHT_DUMMY set_brightness_all_on(); #endif #if (DISP_VER!=0) if(ADKEY_PORT==0){ disp_port(MENU_VER); delay_10ms(80); } #endif delay_10ms(10); ///* while (1) { switch (work_mode) { case MUSIC_MODE: music_decode(); break; #if USB_DEVICE_ENABLE case USB_DEVICE_MODE: usb_audio_massstorage(); break; #endif #if FM_MODULE case FM_RADIO_MODE: radio_main_hdlr(); break; #endif #ifdef USE_BLUE_TOOTH_FUNC case BLUE_TOOTH_MODE: Blue_tooth_main(); break; #endif //case AUX_MODE: //aux_fun(); // break; #if RTC_ENABLE //case RTC_MODE: //rtc_fun(); // break; #endif case REC_MIC_MODE: rec_mic_fun(); break; case IDLE_MODE: idle_mode(); sys_mute_flag =0; dac_mute_control(0,1); //调节音量时,自动UNMUTE //set_brightness_all_on(); break; default: work_mode = MUSIC_MODE; break; } //write_info(MEM_SYSMODE ,work_mode); } //*/ }
/*----------------------------------------------------------------------------*/ static u8 start_decode(void) { cipher_judge(); mad_control(MAD_STOP, 0); decode_init(); //解码初始化,会将解码的变量及状态清零 music_type = music_format_check(decode_buffer); //检查文件格式 if (music_type == NOT_SUPPORT) //不支持的格式 { return 1; } else if (music_type == IS_MP3) //MP3 { get_music_tag(); if (!get_mp3_total_time()) return 1; } else get_music_tag(); if (dec_msg->total_time == 0) //总播放时间为0,则不进行播放,如果遇到因为添加了此判断而不能播放的文件,则可去掉此条件 { return 1; } set_eq(eq_mode); #if (BREAK_POINT_PLAY_EN == 1) if (find_break_point_file_flag) //取保存过的断点信息 { find_break_point_file_flag = load_music_point(); } #endif dsp_set_dcc_flt(14); dsp_set_ch_mode(0); dsp_set_rinv_mode(0); mad_control(MAD_INIT, 0); mad_control(MAD_PLAY, 0); play_status = MAD_PLAY; if (device_active == DEVICE_SDMMC0) { Set_Curr_Func(SYS_MP3DECODE_SD); } else if (device_active == DEVICE_UDISK) { Set_Curr_Func(SYS_MP3DECODE_USB); } if(first_init_dev){ first_init_dev =0; if(play_status !=MAD_STOP){ flush_all_msg(); stop_decode(); } } disk_toc_ok=1; DSA_clr_ID3_info(); // set_play_flash(LED_FLASH_NOR); return 0; }
/*----------------------------------------------------------------------------*/ void music_play(void) { u8 key; u8 res; while (1) { #if (FF_FR_MUSIC == 0) if (play_status == MAD_PLAY) { dac_out_select(DAC_MUSIC, 0); } #else if ((play_status == MAD_PLAY) || (play_status == MAD_FF) || (play_status == MAD_FR)) { dac_out_select(DAC_MUSIC, 0); } #endif //suspend_sdmmc(); //可减少SDMMC功耗,但会增加电源波动 key = app_get_msg(); switch (key) { case MSG_CHANGE_WORK_MODE: //backup_music_point(); break; // return; case MSG_DEVICE_REMOVED: device_check(); disk_remove_deal_for_music(); stop_decode(); dev_remov_timer=8; break; case MSG_MUSIC_NEW_DEVICE_IN: //有新设备接入 //backup_music_point(); flush_all_msg(); given_file_method = PLAY_FIRST_FILE; case MSG_MUSIC_SELECT_NEW_DEVICE: //重新选择设备 res = find_device(given_device); if ((res == DEV_INIT_ERR) || (res == NO_DEFINE_DEV)) //指定的设备不在线,或初始化失败 { disk_toc_ok=0; dev_invalid=1; //Set_Curr_Func(SYS_IDLE); //put_msg_lifo(MSG_CHANGE_WORK_MODE); break; //given_device = DEVICE_AUTO_NEXT; //自动选择下一个设备 //put_msg_lifo(MSG_MUSIC_SELECT_NEW_DEVICE); //break; } else if ((res == NO_EFFECTIVE_DEV) || (res == NO_DEV_ONLINE)) //无可播放的设备 { #if defined(NO_DEV_DEFAULT_GO_TO_AUX) //Set_Curr_Func(SYS_AUX); #elif defined(NO_DEV_DEFAULT_GO_TO_IDLE) // Set_Curr_Func(SYS_IDLE); //put_msg_fifo(MSG_NO_DEVICE); #else //Set_Curr_Func(SYS_FMREV); #endif disk_toc_ok=0; dev_invalid=1; //Set_Curr_Func(SYS_IDLE); //put_msg_lifo(MSG_CHANGE_WORK_MODE); break; } else put_msg_lifo(MSG_MUSIC_SELECT_NEW_FILE); //找到可用设备 first_init_dev =1; break; case MSG_MUSIC_SELECT_NEW_FILE: #if 0 if (device_check() == 0) //当前播放设备已经不在线,则自动选取下一个设备 { #if 1 disk_toc_ok=0; //Set_Curr_Func(SYS_IDLE); //put_msg_lifo(MSG_CHANGE_WORK_MODE); #else given_device = DEVICE_AUTO_NEXT; put_msg_lifo(MSG_MUSIC_SELECT_NEW_DEVICE); #endif break; } #endif res = fs_get_filenum(play_mode, given_file_method); #if 0 if (res == GET_DEVICE_END) //下一曲到设备的结束,查找下一个设备的第一首 { given_file_method = PLAY_FIRST_FILE; given_device = DEVICE_AUTO_NEXT; put_msg_lifo(MSG_MUSIC_SELECT_NEW_DEVICE); break; } else if (res == GET_DEVICE_HEAD) //上一曲到设备的结束,查找下一个设备的最后一首 { given_file_method = PLAY_LAST_FILE; given_device = DEVICE_AUTO_PREV; put_msg_lifo(MSG_MUSIC_SELECT_NEW_DEVICE); break; } #endif if(res == GET_DEVICE_END){ given_file_method = PLAY_FIRST_FILE; put_msg_lifo(MSG_MUSIC_STOP); break; } put_msg_lifo(MSG_MUSIC_PLAY_NEW_FILE); break; case MSG_MUSIC_PLAY_NEW_FILE: //按文件序号选择文件进行播放 flush_all_msg(); stop_decode(); cipher_ctl(0); res = fs_getfile_bynumber(0, &fat_ptr1, given_file_number); disp_port(MENU_FILENUM); if (res == 0) { if (given_file_method == PLAY_BREAK_POINT) res = start_decode(); else res = start_decode(); } if (res != 0) //播放不成功 { play_status = MAD_STOP_WAIT; play_delay_time = 0; if (given_file_method <= PLAY_BREAK_POINT) //重新找下一首 { given_file_method = PLAY_NEXT_FILE; break; } else //重新找上一首 { given_file_method = PLAY_PREV_FILE; break; } } main_menu = MENU_MUSIC_MAIN; write_file_info(); break; case MSG_DECODE_FILE_END: if ((dec_msg->play_time >= 5) || (play_status == MAD_FF) || (play_status == MAD_FR)) //当前歌曲的播放时间大于5S时,直接播放下一首 { given_file_method = PLAY_AUTO_NEXT; put_msg_lifo(MSG_MUSIC_SELECT_NEW_FILE); } else //当前歌曲播放时间小于5S,有可能是不坏歌曲,等待一段时间 { play_delay_time = 0; given_file_method = PLAY_AUTO_NEXT; play_status = MAD_STOP_WAIT; } if(play_mode == REPEAT_OFF){ if(given_file_number == fs_msg.fileTotal){ flush_all_msg(); stop_decode(); } } break; case MSG_MUSIC_PREV_FILE: //选择上一个文件进行播放 given_file_method = PLAY_PREV_FILE; put_msg_lifo(MSG_MUSIC_SELECT_NEW_FILE); break; case MSG_MUSIC_NEXT_FILE: //选择下一个文件进行播放 //delay_10ms(30); given_file_method = PLAY_NEXT_FILE; put_msg_lifo(MSG_MUSIC_SELECT_NEW_FILE); break; #if defined(DECODE_STOP_MODE_ENABLE ) case MSG_MUSIC_STOP: if(play_status !=MAD_STOP){ flush_all_msg(); stop_decode(); } break; #endif case MSG_MUSIC_PP: //暂停和播放 if (cur_menu == MENU_INPUT_NUMBER) //数字输入模式 { put_msg_lifo(MSG_PICH_SONG); break; } #if defined(DECODE_STOP_MODE_ENABLE ) if(play_status ==MAD_STOP){ device_check(); if(DSA_SEL_DEV == DEVICE_SDMMC0){ if((device_online&BIT(0))==0){ break; } } else if (DSA_SEL_DEV == DEVICE_UDISK){ if((device_online&BIT(1))==0){ break; } } given_file_method = PLAY_FIRST_FILE; put_msg_lifo(MSG_MUSIC_SELECT_NEW_FILE); play_status = MAD_PLAY; break; } #endif if (play_status == MAD_PLAY) { disp_port(MENU_PAUSE); main_menu = MENU_PAUSE; mad_control(MAD_PAUSE, 0); play_status = MAD_PAUSE; // set_play_flash(LED_FLASH_ON); } else if (play_status == MAD_PAUSE) { main_menu = MENU_MUSIC_MAIN; disp_port(MENU_MUSIC_MAIN); mad_control(MAD_PLAY, 0); play_status = MAD_PLAY; // set_play_flash(LED_FLASH_NOR); } flush_all_msg(); break; case MSG_MUSIC_NEXT_EQ: if (play_status == MAD_PAUSE) break; eq_mode++; if (eq_mode > CLASSIC) { eq_mode = NORMAL; } set_eq(eq_mode); disp_port(MENU_SET_EQ); break; case MSG_NEXT_PLAYMODE: if (play_status == MAD_PAUSE) break; play_mode++; if (play_mode > REPEAT_END) { play_mode = REPEAT_INIT; } //disp_port(MENU_SET_PLAY_MODE); break; case MSG_MUTE: //静音 break; #if (FF_FR_EN == 1) case MSG_MUSIC_FR: //启动快退 if (find_break_point_file_flag) //如果是记忆播放的歌曲,不能快退 { break; } if (play_status == MAD_PLAY) { play_status = MAD_FR; } break; case MSG_MUSIC_FF: //启动快进 if (play_status == MAD_PLAY) { play_status = MAD_FF; } break; case MSG_KEY_CHANGE: case MSG_MUSIC_FFR_DONE: //快进快退结束,恢复播放 if (play_status == MAD_FR) { set_eq(eq_mode); flush_all_msg(); #if (FF_FR_MUSIC == 0) dac_mute_control(0); #endif play_status = MAD_PLAY; } else if (play_status == MAD_FF) { set_eq(eq_mode); flush_all_msg(); #if (FF_FR_MUSIC == 0) dac_mute_control(0); #endif play_status = MAD_PLAY; } break; #endif case MSG_PICH_SONG: if (cur_menu == MENU_INPUT_NUMBER) //数字输入模式 { if ((input_number <= fs_msg.fileTotal) && (input_number != 0)) //输入数字是否有效 { given_file_number = input_number; given_file_method = PLAY_FIRST_FILE; given_device = DEVICE_AUTO_NEXT; put_msg_lifo(MSG_MUSIC_PLAY_NEW_FILE); } else disp_port(main_menu); } break; #if (MUSIC_SPECTRUM_EN == 1) case MSG_100MS: if (cur_menu == MENU_MUSIC_MAIN) { music_spec_cul(1); disp_port(MENU_100MS_REFRESH); } break; #endif case MSG_200MS: //////////////////////////////////////////////////////////// //快进快退实际的操作在这里完成 #if (FF_FR_EN == 1) if (play_status == MAD_FF) { #if (FF_FR_MUSIC == 0) //如果需要在快进快退过程中听到声音,可以不加此行 dac_mute_control(1); #endif mad_control(MAD_FF, FF_FR_STEP); mad_control(MAD_FAST_FORWARD, 0); #if (FF_FR_MUSIC == 1) dac_mute_control(0,1); #endif mad_control(MAD_PLAY, 0); } else if (play_status == MAD_FR) { #if (FF_FR_MUSIC == 0) dac_mute_control(1); //如果需要在快进快退过程中听到声音,可以不加此行 #endif mad_control(MAD_FR, FF_FR_STEP); mad_control(MAD_FAST_REVERASE, 0); #if (FF_FR_MUSIC == 1) dac_mute_control(0,1); #endif mad_control(MAD_PLAY, 0); } disp_port(MENU_HALF_SEC_REFRESH); #endif #if (DISP_DOT_LCD == 1) disp_port(MENU_200MS_REFRESH); //播放时的滚动显示 #endif break; case MSG_HALF_SECOND: ///////////////////////////////////////////////////////////// //短歌曲或损坏的歌曲在这里跳到下一首 if (play_status == MAD_STOP_WAIT) //等待一段时间再自动选择下一首 { if (play_delay_time < 4) play_delay_time++; else { put_msg_lifo(MSG_MUSIC_SELECT_NEW_FILE); } } if(dev_remov_timer>0){ dev_remov_timer--; if(dev_remov_timer==0){ Set_Curr_Func(SYS_IDLE); put_msg_lifo(MSG_CHANGE_WORK_MODE); } } //////////////////////////////////////////////////////////// //显示界面的切换 if (main_menu_conter < SUB_MENU_TIME) { main_menu_conter++; } else if (cur_menu != main_menu) { if (cur_menu == MENU_INPUT_NUMBER) //数字输入模式 { put_msg_lifo(MSG_PICH_SONG); break; } else { cur_menu = main_menu; } disp_port(cur_menu); } ///////////////////////////////////////////////////////////// //调整显示亮度 set_brightness_fade_out(); ///////////////////////////////////////////////////////////// //更新实时界面 disp_port(MENU_HALF_SEC_REFRESH); break; case MSG_NEXT_FOLDER: select_folder_file(FIND_NEXT_DIR); break; case MSG_PREV_FOLDER: select_folder_file(FIND_PREV_DIR); break; #if 0//RTC_ENABLE case MSG_ALM_ON: write_next_alm_sec(); Set_Curr_Func(SYS_RTC); put_msg_lifo(MSG_CHANGE_WORK_MODE); break; #endif default : ap_handle_hotkey(key); break; } } }
/*----------------------------------------------------------------------------*/ void fm_rev( void ) { u8 key; sys_mute_flag =0; PT2313_Config(sys_main_vol,VOL_ADJ); amp_mute(0); while (1) { #if ECHO_ENABLE dac_out_select(DAC_AMUX1 | ADD_DEC, 0); #else dac_out_select(DAC_AMUX1, 0); #endif key = app_get_msg(); switch (key) { case MSG_CHANGE_WORK_MODE: return; case MSG_MUSIC_NEW_DEVICE_IN: //有新设备接入 work_mode = MUSIC_MODE; return; case MSG_FM_SCAN_STOP: if(key_ir_detect){ key_ir_detect =0; ir_remote_set_snooze(); } break; case MSG_FM_SCAN_ALL: //play 长按自动全频搜索 key = fm_scan(0); if (key == 3) { put_msg_lifo(MSG_ALM_ON); break; } if (key == 2) return; put_msg_lifo(MSG_FM_NEXT_STATION); break; case MSG_FM_SCAN_ALL_DOWN : key = fm_scan(1); if (key == 3) { put_msg_lifo(MSG_ALM_ON); break; } if (key == 2) return; break; case MSG_FM_SCAN_ALL_UP: key =fm_scan(2); if (key == 3) { put_msg_lifo(MSG_ALM_ON); break; } if (key == 2) return; break; #if 0 case MSG_MUSIC_PP: //play 短按静音 put_msg_lifo(MSG_MUTE); break; case MSG_MUTE: break; #endif case MSG_MUSIC_FR: //搜索上一个台 flush_all_msg(); break; case MSG_MUSIC_FF: //搜索下一个台 flush_all_msg(); break; case MSG_FM_PREV_STEP: set_fre(FM_FRE_DEC); fre_channel = get_channel_via_fre(frequency - MIN_FRE); //查找该频点是否有记忆过 disp_port(MENU_FM_MAIN); write_info(MEM_FRE, frequency-MIN_FRE); write_info(MEM_CHAN, fre_channel); break; case MSG_FM_NEXT_STEP: set_fre(FM_FRE_INC); fre_channel = get_channel_via_fre(frequency - MIN_FRE); //查找该频点是否有记忆过 disp_port(MENU_FM_MAIN); write_info(MEM_FRE, frequency-MIN_FRE); write_info(MEM_CHAN, fre_channel); break; case MSG_FM_PREV_STATION: if (total_channel == 0) break; fre_channel -= 2; case MSG_FM_NEXT_STATION: if (total_channel == 0) break; fre_channel++; if ((fre_channel == 0) || (fre_channel == 0xff)) { fre_channel = total_channel; } else if (fre_channel > total_channel) { fre_channel = 1; } frequency = get_fre_via_channle(fre_channel) + MIN_FRE; //根据台号找频点 main_vol_set(0, CHANGE_VOL_NO_MEM); set_fre(FM_CUR_FRE); main_vol_set(0, SET_USE_CURRENT_VOL); disp_port(MENU_FM_CHANNEL); write_info(MEM_FRE, frequency-MIN_FRE); write_info(MEM_CHAN, fre_channel); break; case MSG_CH_SET: if (cur_menu == MENU_INPUT_NUMBER) //数字输入模式 { if (input_number <= MAX_CHANNL) //输入的是台号 { key = get_fre_via_channle(input_number); if (key != 0xff) { frequency = key + MIN_FRE; fre_channel = input_number; main_vol_set(0, CHANGE_VOL_NO_MEM); set_fre(FM_CUR_FRE); main_vol_set(0, SET_USE_CURRENT_VOL); disp_port(MENU_FM_CHANNEL); //break; } } else if ((input_number >= MIN_FRE) && (input_number <= MAX_FRE)) //输入的是频点 { frequency = input_number; fre_channel = get_channel_via_fre(frequency - MIN_FRE); main_vol_set(0, CHANGE_VOL_NO_MEM); set_fre(FM_CUR_FRE); main_vol_set(0, SET_USE_CURRENT_VOL); } } write_info(MEM_FRE, frequency-MIN_FRE); write_info(MEM_CHAN, fre_channel); disp_port(main_menu); break; case MSG_CH_SAVE: ch_save(); break; case MSG_HALF_SECOND: alarm_setting_vol_hdlr(); //bmt_hdlr(); timer_pwr_off_hdlr(); set_brightness_fade_out(); if (main_menu_conter < SUB_MENU_TIME) { main_menu_conter++; } else if (cur_menu != main_menu) { put_msg_lifo(MSG_CH_SET); //跳转至CH_SET消息处理 } if(cur_menu == main_menu) { disp_port(main_menu); } break; #if 0//RTC_ENABLE case MSG_ALM_ON: write_next_alm_sec(); work_mode = RTC_MODE; put_msg_lifo(MSG_CHANGE_WORK_MODE); break; #endif #if KALAOK_FUNCTION case MSG_KALAOK: work_mode = REC_MIC_MODE; return ; #endif default : ap_handle_hotkey(key); break; } } }
/*----------------------------------------------------------------------------*/ void main(void) { xd_u8 sys_timer=0; sys_power_up(); Mute_Ext_PA(MUTE); sys_clock_pll();//(MAIN_CLK_PLL); #ifdef PWR_CTRL_IN_IDLE_MODE #if defined(PWR_CTRL_WKUP) wkup_pin_ctrl(0); #else PWR_CTRL_GPIO_INIT(); PWR_CTRL_DIS(); #endif #endif #ifdef ALARM_USE_MULTI_SOURCE_FUNC alarm_power_on_protect=0; #endif #ifdef ADKEY_SELECT_MODE mode_switch_protect_bit=1; #endif #ifdef USE_POWER_KEY //waiting_power_key(); sys_power_up(); #endif //Disp_Con(DISP_HELLO); sys_init(); sys_info_init(); Init_Func_List(); flush_all_msg(); #if FILE_ENCRYPTION password_init(0xaa); //输入加密文件的密码 #endif #ifdef ADKEY_DEBUG AD_Debug_func(); #endif #if 0 while(1){ keyScan(); delay_10ms(1); sys_timer = get_msg(); #if 1 if(sys_timer!= 0xff){ printf("------->-get_msg %x \r\n",(u16)sys_timer); } #endif } #endif #ifdef SYS_POWER_ON_DEFAULT_IN_RADIO Set_Curr_Func(SYS_FMREV); #elif defined(SYS_POWER_ON_DEFAULT_IN_CD) Set_Curr_Func(SYS_MCU_CD); #endif if((work_mode==SYS_MP3DECODE_USB)||(work_mode==SYS_MP3DECODE_SD)){ Set_Curr_Func(SYS_FMREV); } radio_force_preset=6; #ifdef UART_ENABLE printf("------->- SYS INIT work_mode:%d \r\n",(u16)work_mode); #endif while (1) { Set_Curr_Func(work_mode); switch (work_mode) { #ifdef USE_USB_SD_DECODE_FUNC case SYS_MP3DECODE_USB: case SYS_MP3DECODE_SD: decode_play(); break; #endif #ifdef USE_CD_MCU_MASTER_FUNC case SYS_MCU_CD: #ifdef UART_ENABLE sys_printf(" SYS_MCU_CD"); #endif mcu_main_hdlr(); break; #endif #ifdef USE_RADIO_FUNC case SYS_FMREV: #ifdef AM_RADIO_FUNC case SYS_AMREV: #endif #ifdef UART_ENABLE sys_printf(" SYS_RADIO_FUNC"); #endif fm_radio(); break; #endif #ifdef USE_AUX_FUNC case SYS_AUX: #ifdef UART_ENABLE sys_printf(" SYS_AUX"); #endif aux_function(); break; #endif #ifdef USE_BLUE_TOOTH_FUNC case SYS_BLUE_TOOTH: #ifdef UART_ENABLE sys_printf(" SYS_BLUE_TOOTH"); #endif Blue_tooth_main(); break; #endif #ifdef USE_RTC_FUNC case SYS_RTC: rtc_function(); break; #endif #ifdef USE_SYS_IDEL_FUNC case SYS_IDLE: idle_mode(); #ifdef ADKEY_SELECT_MODE mode_switch_protect_bit=1; #endif sys_restore_mode(); dac_mute_control(0,1); flush_all_msg(); my_music_vol = 26; set_max_vol(MAX_ANALOG_VOL, MAX_DIGITAL_VOL); set_sys_vol(my_music_vol); break; #endif default: #ifdef USE_USB_SD_DECODE_FUNC //work_mode = SYS_MP3DECODE_USB; #else //work_mode = SYS_MCU_CD; #endif Set_Curr_Func(SYS_FMREV); break; } #ifdef USE_SYS_MODE_RECOVER if(work_mode !=SYS_IDLE){ write_info(MEM_SYSMODE,work_mode); } #endif } }
/*----------------------------------------------------------------------------*/ void usb_audio_massstorage(void) { device_check(); if (pc_connect) { input_number_en = 0; vol_change_en=1; //sd_speed_init(0, 100); main_menu = MENU_USBDEV_MAIN; disp_port(MENU_USBDEV_MAIN); usb_config(USB_DEVICE_CFG); write_protect_set(0); //不使用写保护功能,如果需要,请根据卡座写保护的状态改变配置 SYSTEM_CLK_DIV1(); init_usb_device_hardware(); #if((PLL_IN_HPRC == INPUT_OSC_SELECT) && USE_SOF_PLL) { u8 flag; flag = correct_hprc(); if(1 == flag) ///<限定时间内,校准通过,保存矫正值 { write_hprc_cnt(MEM_PLLCON0, memery_hprc_cnt); // deg_string("secuss\n"); } else if(0 == flag) ///<校准时USB线拔出 { work_mode = MUSIC_MODE; IE1 &= ~BIT(1); P3PU &= ~BIT(6); // deg_string("unsecuss\n"); return; } else if(2 == flag) ///<限定时间内,校准失效,可继续相应功能 { // work_mode = MUSIC_MODE; // IE1 &= ~BIT(1); // P3PU &= ~BIT(6); // return; } } #endif key_table_sel(0); flush_all_msg(); #if ((USB_DEVICE_CFG & USB_SPEAKER) == USB_SPEAKER) set_eq(eq_mode); #endif alm_request_cnt = 0; set_max_vol(MAX_ANOLOG_VOL,MAX_DIGITAL_VOL);///设置最大音量 usb_device(); recording_end(); dac_mute_control(0,1); ///<退出PC后,关掉DAC MUTE。 #if ((USB_DEVICE_CFG & USB_SPEAKER) == USB_SPEAKER) main_vol_set(0, CHANGE_VOL_NO_MEM); #endif IE1 &= ~BIT(1); P3PU &= ~BIT(6); } else { work_mode++; Set_Curr_Func(work_mode); } }
void idle_mode(void) { u8 key; //dac_out_select(DAC_MUSIC, 0); //clear_all_event(); #ifdef UART_ENABLE sys_printf(" SYS GO IN IDLE MODE"); #endif #ifdef PWR_CTRL_IN_IDLE_MODE #if defined(PWR_CTRL_WKUP) wkup_pin_ctrl(0); #else PWR_CTRL_GPIO_INIT(); PWR_CTRL_DIS(); #endif #endif flush_all_msg(); KT_AMFMStandby(); sys_sleep_mode(); #ifdef RTC_DISP_IN_IDLE_MODE disp_scenario = DISP_RTC_SCEN; Disp_Con(DISP_RTC); #else Disp_Con(DISP_POWER_OFF); #endif #if 0 alm_flag = 1; put_msg_lifo(INFO_ALM_BELL); #endif #ifdef ADKEY_SELECT_MODE mode_switch_protect_bit=0; #endif while (1) { key = get_msg(); //suspend_sdmmc(); #ifndef RTC_DISP_IN_IDLE_MODE if(sys_pwr_flag){ if(key!=(INFO_POWER | KEY_SHORT_UP)){ key = NO_KEY; } } #endif switch (key) { #if 0 case INFO_PLAY| KEY_SHORT_UP : alm_flag = 1; put_msg_lifo(INFO_ALM_BELL); break; #endif case INFO_POWER | KEY_SHORT_UP : if(sys_pwr_flag){ //sys_mute_flag =0; dac_mute_control(0,1); //调节音量时,自动UNMUTE sys_pwr_flag =0; //work_mode = SYS_IDLE; } break; case INFO_HALF_SECOND : #ifdef RTC_DISP_IN_IDLE_MODE #if defined(USE_BAT_MANAGEMENT) bmt_hdlr(); #endif set_brightness_fade_out(); rtc_setting_exit(); if(disp_scenario == DISP_RTC_SCEN){ if(curr_menu != DISP_RTC){ return_cnt++; if (RETURN_TIME == return_cnt){ rtc_disp_hdlr(); } break; } rtc_disp_hdlr(); break; } #ifdef USE_RTC_ALARM_FUNCTION else if(disp_scenario == DISP_ALM_SCEN){ rtc_disp_hdlr(); } #endif #endif break; case INFO_NEXT_SYS_MODE: return; #ifdef USE_RTC_ALARM_FUNCTION case INFO_ALM_BELL: sys_restore_mode(); alm_bell_mode(); //sys_sleep_mode(); #ifdef ALARM_USE_MULTI_SOURCE_FUNC if(get_cur_select_func()==SYS_MP3DECODE_USB){ if(get_device_online_status()>0){ alarm_power_on_protect =1; work_mode = SYS_MP3DECODE_USB; flush_all_msg(); put_msg_lifo(INFO_NEXT_SYS_MODE); break; } } else if(get_cur_select_func()==SYS_FMREV){ work_mode = SYS_FMREV; alarm_power_on_protect =1; flush_all_msg(); put_msg_lifo(INFO_NEXT_SYS_MODE); break; } #endif break; #endif case MSG_USB_DISK_IN : case MSG_SDMMC_IN : break; default: ap_handle_hotkey(key); break; } } }
void set_radio_freq(u8 mode) { xd_u16 freq_step =0; #ifndef LCD_BACK_LIGHT_DUMMY set_brightness_all_on(); #endif #if defined(FAST_STICK_TUNE_FUNC) if(fast_step_cnt==0){ fast_step_cnt=1; } if(radio_band.bCurBand==FM_MODE){ if(fast_step_cnt<6) freq_step = (radio_band.bTuneStep*fast_step_cnt); else if(fast_step_cnt<12) freq_step = (radio_band.bTuneStep*fast_step_cnt*5); } if(radio_band.bCurBand==MW_MODE){ if(fast_step_cnt<6) freq_step = (radio_band.bTuneStep*fast_step_cnt); else if(fast_step_cnt<12) freq_step = (radio_band.bTuneStep*fast_step_cnt*5); #ifdef MW_MODE_ADVANCED_TUNE_STEP else freq_step = (radio_band.bTuneStep*fast_step_cnt*10); #endif } else{ if(fast_step_cnt<6) freq_step = (radio_band.bTuneStep*fast_step_cnt); else if(fast_step_cnt<12) freq_step = (radio_band.bTuneStep*fast_step_cnt*10); else freq_step = (radio_band.bTuneStep*fast_step_cnt*20); } #if 0 if(fast_step_cnt>3){ am_adj_timer=2; } #endif #elif defined(MID_SPEED_STICK_TUNE_FUNC) if(fast_step_cnt==0){ fast_step_cnt=1; } if(radio_band.bCurBand==FM_MODE){ if(fast_step_cnt<8) freq_step = (radio_band.bTuneStep*fast_step_cnt); else if(fast_step_cnt<12) freq_step = (radio_band.bTuneStep*fast_step_cnt*3); } if(radio_band.bCurBand==MW_MODE){ if(fast_step_cnt<6) freq_step = (radio_band.bTuneStep*fast_step_cnt); else if(fast_step_cnt<12) freq_step = (radio_band.bTuneStep*fast_step_cnt*5); else freq_step = (radio_band.bTuneStep*fast_step_cnt*8); } else{ if(fast_step_cnt<6) freq_step = (radio_band.bTuneStep*fast_step_cnt); else if(fast_step_cnt<12) freq_step = (radio_band.bTuneStep*fast_step_cnt*5); else freq_step = (radio_band.bTuneStep*fast_step_cnt*8); } #else if(radio_band.bCurBand==FM_MODE){ freq_step = (radio_band.bTuneStep); } if(radio_band.bCurBand==MW_MODE){ freq_step = (radio_band.bTuneStep); } else{ freq_step = (radio_band.bTuneStep); } #endif if (mode == RADIO_FRE_INC) { radio_band.wFreq=radio_band.wFreq+freq_step; } else if (mode == RADIO_FRE_DEC) { radio_band.wFreq=radio_band.wFreq-freq_step; } if (radio_band.wFreq > radio_band.wFreqUpLimit) radio_band.wFreq = radio_band.wFreqUpLimit; if (radio_band.wFreq < radio_band.wFreqDownLimit) radio_band.wFreq =radio_band.wFreqDownLimit; if(radio_band.bCurBand==0){ #ifdef FM_SOFTMUTE KT_FM_SOFTMUTE(radio_band.wFreq); #else KT_FMTune(radio_band.wFreq); #endif } else{ #ifdef AM_SOFTMUTE KT_AM_SOFTMUTE(radio_band.wFreq); #else KT_AMTune(radio_band.wFreq); #endif } disp_port(MENU_RADIO_MAIN); #ifdef SAVE_BAND_FREQ_INFO save_radio_freq(radio_band.wFreq,radio_band.bCurBand); #endif flush_all_msg(); #ifdef SEMI_AUTO_SCAN_FUNC if(scan_mode!=RADIO_SCAN_STOP){ radio_all_scan_stop(); } #endif }
void main(void) { amp_mute(1); clock_in = T0CNT; //输入时钟,define in clock.h sys_init(); power_key_hdlr(SYS_PWR_ON); AMUX_P2IE_SET(AMUX0_IE&AMUX1_IE); sys_info_init(); clear_all_event(); flush_all_msg(); enter_fm_rev(); PT2313_Init(); work_mode=RTC_MODE; #ifdef IR_DEBUG IR_Debug_func(); #endif while (1) { switch (work_mode) { case MUSIC_MODE: music_decode(); break; #if USB_DEVICE_ENABLE case USB_DEVICE_MODE: usb_audio_massstorage(); break; #endif #if 1//FM_MODULE case FM_RADIO_MODE: fm_radio(); break; #endif case AUX_MODE: aux_fun(); break; #if 1//RTC_ENABLE case RTC_MODE: rtc_fun(); break; #endif case REC_MIC_MODE: rec_mic_fun(); break; case IDLE_MODE: //power_key_hdlr(SYS_PWR_OFF); break; default: work_mode = MUSIC_MODE; break; } write_info(MEM_SYSMODE ,work_mode); } //*/ }
void music_play(void) { u8 key; u8 file_end_time; #ifdef ADKEY_SELECT_MODE mode_switch_protect_bit=0; #endif while (1) { if (play_status == MUSIC_PLAY) { dac_out_select(DAC_DECODE); } //suspend_sdmmc(); key = get_msg(); #ifdef USE_USB_PROG_PLAY_MODE if(usb_play_prog_mode){ usb_prog_hdlr(key); if((key==INFO_HALF_SECOND)||(key==(INFO_MODE | KEY_SHORT_UP))||(key==(INFO_NEXT_FIL | KEY_SHORT_UP))||(key==(INFO_PREV_FIL | KEY_SHORT_UP))){ key = 0xFF; } } #endif switch (key) { case INFO_NEXT_SYS_MODE: return; case INIT_PLAY: //开始解码播放 file_end_time = 0; stop_decode(); playpoint_flag = 0; if(playpoint_filenum) { playpoint_flag = 1; given_file_number = playpoint_filenum; } #if FILE_ENCRYPTION password_start(0); #endif if (!fs_getfile_bynumber(given_file_number)) { put_msg_lifo(INFO_NEXT_FIL | KEY_SHORT_UP); break; } if (!start_decode()) { put_msg_lifo(INFO_NEXT_FIL | KEY_SHORT_UP); } #ifdef USE_USB_PROG_PLAY_MODE if(usb_prog_icon_bit){ usb_prog_play=1; } #endif break; case SEL_GIVEN_DEVICE_GIVEN_FILE: ///<获取指定设备的指定文件 get_music_file2(); break; case INFO_STOP| KEY_SHORT_UP : #ifdef USE_USB_PROG_PLAY_MODE if(usb_prog_play){ usb_prog_play=0; usb_play_prog_index =0; flush_all_msg(); stop_decode(); Disp_Con(DISP_STOP); //printf(" ---> usb_prog_icon_bit %x \r\n",(u16)usb_prog_icon_bit); play_mode =REPEAT_OFF; break; } usb_prog_mode_cls(); #endif if((get_device_online_status()==0)){ break; } Mute_Ext_PA(MUTE); disp_play_filenum_timer=6; play_mode =REPEAT_OFF; flush_all_msg(); stop_decode(); Disp_Con(DISP_STOP); break; case INFO_NEXT_FIL | KEY_SHORT_UP: #ifdef USE_FOLDER_SELECT_FUNC if(folder_select){ select_folder_file(FIND_NEXT_DIR); Disp_Con(DISP_DIR); break; } #endif disp_play_filenum_timer=10; get_music_file1(GET_NEXT_FILE); break; case INFO_PREV_FIL | KEY_SHORT_UP: #ifdef USE_FOLDER_SELECT_FUNC if(folder_select){ select_folder_file(FIND_PREV_DIR); Disp_Con(DISP_DIR); break; } #endif if(rew_play_timer>0){ rew_play_timer=0; put_msg_lifo(INIT_PLAY); } else { disp_play_filenum_timer=10; get_music_file1(GET_PREV_FILE); } break; case INFO_NEXT_FIL | KEY_HOLD: if(play_status) { ff_fr_step = FAST_FARWORD_STEP; play_status = MUSIC_FF_FR; #if (FF_FR_MUSIC) if(0 == decode_cmd) #endif { analog_vol_set(0); decode_cmd = 0xf0; } } break; case INFO_PREV_FIL | KEY_HOLD: if(music_type == 2) //wav文件不支持断点记忆,故可以快退 { playpoint_flag =0; } if(!playpoint_flag) //读取断点信息后不支持快退 { if(play_status) { ff_fr_step = -FAST_FARWORD_STEP; play_status = MUSIC_FF_FR; #if (FF_FR_MUSIC) if(0 == decode_cmd) #endif { analog_vol_set(0); decode_cmd = 0xf1; } } } break; case DECODE_MSG_DISK_ERR: #ifdef MP3_UART_ENABLE sys_printf(" DECODE_MSG_DISK_ERR"); #endif get_music_file3(); break; case DECODE_MSG_FILE_END: ////*将文件结束的消息放到半秒消息中处理,防止单曲循环遇到错误歌曲无法手动切换下一首,或遇到错误歌曲无法到上一首,每首歌曲至少播放约5S*/ if (get_music_play_time() < 5) { file_end_time = 7 - (u8)get_music_play_time(); } else { #ifdef MP3_UART_ENABLE sys_printf(" DECODE_MSG_FILE_END"); #endif get_music_file1(GET_PLAY_FILE); } break; case MSG_USB_DISK_IN : Disp_Con(DISP_SCAN_DISK); disp_scenario = DISP_NORMAL; //Add_Func_To_List(USB_DEV); given_device = BIT(USB_DISK); put_msg_lifo(SEL_GIVEN_DEVICE_GIVEN_FILE); break; case INFO_NEXTMODE: ///<下一个模式 //work_mode = SYS_IDLE; //return; stop_decode(); #ifdef NO_DEV_SHOW_NO_DEV #ifdef USE_USB_PROG_PLAY_MODE usb_prog_mode_cls(); #endif folder_select=0; folder_mode_select=0; Disp_Con(DISP_NODEVICE); #else Disp_Con(DISP_RTC); disp_scenario = DISP_RTC_SCEN; #endif break; case INFO_PLAY | KEY_SHORT_UP : #if defined(USE_TIMER_POWER_OFF_FUNC) if(timer_setting_enable){ timer_pwr_setting(); break; } #endif if((get_device_online_status()&0x03)==0){ break; } if (DISP_DWORD_NUMBER == curr_menu) { Disp_Con(DISP_NULL); put_msg_fifo(INFO_PICK_SONG | KEY_SHORT_UP); break; } if (play_status == MUSIC_PAUSE) { Mute_Ext_PA(UNMUTE); play_status = MUSIC_PLAY; Disp_Con(DISP_PLAY); mad_control(MAD_PLAY,0); if(music_type == 1) enable_decodeint(); if(music_type == 2) enable_softint(); } else if (play_status == MUSIC_PLAY) { Mute_Ext_PA(MUTE); play_status = MUSIC_PAUSE; if(music_type == 1) disable_decodeint(); Disp_Con(DISP_PAUSE); mad_control(MAD_PAUSE,0); read_usb_remain_data(); write_playtime(&playpoint_time); //暂停时记忆断点信息(EEPROM) } else if (play_status == MUSIC_STOP){ disp_play_filenum_timer=10; #ifdef USE_USB_PROG_PLAY_MODE if(usb_play_prog_mode){ if(usb_prog_tab[0]!=0){ given_file_number =usb_prog_tab[0]; } else{ usb_prog_mode_cls(); } usb_play_prog_mode=0; } #endif put_msg_lifo(INIT_PLAY); //Mute_Ext_PA(UNMUTE); } break; case INFO_PICK_SONG | KEY_SHORT_UP : given_file_number = (u16)cfilenum; cfilenum = 0; if ((given_file_number > 0) && (given_file_number <= fs_msg.fileTotal)) { put_msg_lifo(INIT_PLAY); break; } Disp_Con(DISP_ERROR); break; case INFO_HALF_SECOND : #if ((USE_DEVICE == MEMORY_STYLE)&&(FAT_MEMORY)) updata_fat_memory(); #endif #if defined(USE_BAT_MANAGEMENT) bmt_hdlr(); #endif #ifdef USE_USB_ERP_2_HDLR usb_erp_2_timer_hdlr(); #endif #if defined(USE_TIMER_POWER_OFF_FUNC) timer_pwr_off_hdlr(); #endif set_brightness_fade_out(); update_playpoint(&playpoint_time); //半秒更新断点进度,不写入存储器 #if 1//defined(USE_FOLDER_SELECT_FUNC) if(folder_select){ return_cnt++; if (RETURN_TIME == return_cnt){ return_cnt=4; folder_select=0; } else{ break; } } #endif if(adkey_detect){ adkey_detect=0; set_sys_vol(my_music_vol); } if(disp_play_filenum_timer>0)disp_play_filenum_timer--; if (file_end_time) { file_end_time--; if (file_end_time == 0) { get_music_file1(GET_PLAY_FILE); } } #if FF_FR_MUSIC ///在每一次快进完成之后,播出半秒左右的声音 if ((2 == decode_cmd)&&(play_status == MUSIC_FF_FR)) { decode_cmd = 0; set_eq(eq_mode); play_status = MUSIC_PLAY; } #else if ((decode_cmd != 0) && (decode_cmd <= 2)) { decode_cmd--; set_eq(eq_mode); if (decode_cmd == 0) ///<快进快退结束后1S,打开主音量 { play_status = MUSIC_PLAY; } } #endif #ifdef RTC_DISP_IN_IDLE_MODE if(disp_scenario == DISP_RTC_SCEN){ rtc_setting_exit(); if(curr_menu != DISP_RTC){ return_cnt++; if (RETURN_TIME == return_cnt){ rtc_disp_hdlr(); } break; } rtc_disp_hdlr(); break; } #endif #ifdef NO_DEV_SHOW_NO_DEV if((get_device_online_status()&0x03)==0){ Disp_Con(DISP_NODEVICE); break; } #endif if (DISP_PLAY == curr_menu) { rew_play_timer=1; disp_file_time(); } return_cnt++; if (RETURN_TIME == return_cnt) { #if defined(USE_TIMER_POWER_OFF_FUNC) timer_setting_enable=0; #endif if (DISP_DWORD_NUMBER == curr_menu) { Disp_Con(DISP_NULL); put_msg_fifo(INFO_PICK_SONG | KEY_SHORT_UP); } else { if (play_status== MUSIC_PAUSE){ if (curr_menu != DISP_PAUSE) Disp_Con(DISP_PAUSE); } else if(play_status== MUSIC_PLAY){ if (curr_menu != DISP_PLAY){ if(disp_play_filenum_timer==0) Disp_Con(DISP_PLAY); else Disp_Con(curr_menu); } } else if(play_status== MUSIC_STOP){ if (curr_menu != DISP_STOP) Disp_Con(DISP_STOP); } } } #if 1//( USE_RTCRAM == MEMORY_STYLE ) save_playpoint(2); //2*0.5 = 1s 1s记录一次播放进度, #endif break; case INFO_MODE | KEY_LONG: if((get_device_online_status()==0)){ break; } #if 0 #ifdef USE_USB_PROG_PLAY_MODE if(play_status == MUSIC_STOP){ usb_prog_play_init(); break; } #endif #endif folder_mode_select=~folder_mode_select; folder_select=folder_mode_select; if(folder_mode_select){ #ifdef USE_USB_PROG_PLAY_MODE usb_prog_mode_cls(); #endif Disp_Con(DISP_DIR); } else{ Disp_Con(DISP_PLAY); } break; case INFO_MODE | KEY_SHORT_UP: if((get_device_online_status()==0)){ break; } #ifdef USE_USB_PROG_PLAY_MODE if(play_status == MUSIC_STOP){ usb_prog_play_init(); break; } #endif case INFO_PLAY_MODE : //if(usb_play_prog_mode||usb_prog_icon_bit){ // break; //} play_mode++; if (play_mode > REPEAT_END) { play_mode = REPEAT_HEAD; } #ifndef NO_PLAY_MODE_STR_DISP write_info(MEM_PLAY_MODE,play_mode); Disp_Con(DISP_PLAYMODE); #endif break; case INFO_EQ_UP | KEY_SHORT_UP : eq_mode++; if (eq_mode > CLASSIC) { eq_mode = NORMAL; } write_info(MEM_EQ_MODE,eq_mode); set_eq(eq_mode); Disp_Con(DISP_EQ); break; #if 0 case INFO_MODE | KEY_LONG: if(disp_scenario == DISP_RTC_SCEN){ if(rtc_setting==0){ rtc_setting = 0x01; rtc_set = 3; rtc_set_cnt=30; } } break; #endif #if RTC_ENABLE case INFO_ALM_BELL : ///<闹钟响消息,进入闹钟循环 if (play_status) { /**/ if(music_type == 1) disable_decodeint(); mad_control(MAD_PAUSE,0); read_usb_remain_data(); } if(alm_bell_mode()) { if (play_status) { mad_control(MAD_PLAY,0); if(music_type == 1) enable_decodeint(); if(music_type == 2) enable_softint(); } return; } if (play_status) { mad_control(MAD_PLAY,0); if(music_type == 1) enable_decodeint(); if(music_type == 2) enable_softint(); } #ifdef PWR_CTRL_IN_IDLE_MODE #if defined(PWR_CTRL_WKUP) wkup_pin_ctrl(1); #else PWR_CTRL_GPIO_INIT(); PWR_CTRL_EN(); #endif #endif break; #endif default : _HOT_KEY_HDLR: if (!ap_handle_hotkey(key)) return; if ((!play_status) && (!device_check())) { if(disp_scenario == DISP_NORMAL){ stop_decode(); Disp_Con(DISP_RTC); disp_scenario = DISP_RTC_SCEN; } play_status = MUSIC_PLAY; //return; } } } }