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; } } } }
void deal_rtc(void) { u8 key; #ifdef USE_RTC_YEAR_FUNCTION bool date_show_active=0; #endif #ifdef TURN_OFF_PLAY_STATUS_LED_IN_RTC_MODE set_play_flash(LED_FLASH_STOP); #endif #ifdef PWR_OFF_IN_RTC_MODE_AFTER_30_MIN #if defined(USE_TIMER_POWER_OFF_FUNC) timer_pwr_idx=3; timer_disp=30; #endif #endif while (1) { key = get_msg(); switch (key) { #if defined(K820_LHD_820_V001) case INFO_EQ_DOWN| KEY_SHORT_UP : if(rtc_set==0){ rtc_mode = RTC_SET_MODE; rtc_set=3; } else if (rtc_set==4) { rtc_set=0; rtc_mode = RTC_PLAY_MODE; } else if(rtc_set==3){ rtc_set=4; } Disp_Con(DISP_RTC); break; #endif #if defined(K686_ZhengYang_686_V001)||defined(USE_MODE_LONG_FOR_RTC_SETTING) case INFO_MODE | KEY_LONG: //4RTC闹钟设置模式 #elif defined(CUSTOM_KEY_LONG_FOR_RTC_HOTKEY) case INFO_CUS_KEY_1 | KEY_LONG: #elif defined(USE_PLAY_LONG_FOR_RTC_SETTING) case INFO_PLAY | KEY_LONG: #elif defined(USE_PREV_LONG_FOR_RTC_SETTING) case INFO_PREV_FIL | KEY_LONG: //4RTC闹钟设置模式 #elif defined(USE_PLAY_MODE_LONG_FOR_RTC_SETTING) case INFO_PLAY_MODE | KEY_LONG: //4RTC闹钟设置模式 #elif defined(MINI_DIGIT_BOX) case INFO_1|KEY_LONG: #elif defined(RTC_MODE_HOT_KEY_ENABLE) case INFO_RTC_MOD | KEY_SHORT_UP: #else case INFO_PLAY | KEY_LONG: //4RTC闹钟设置模式 #endif #if defined(RTC_SETTING_OP_TIMER_ENABLE) op_timer=0; #endif #ifdef INDEPENDENT_KEY_ADJ_TIME if (rtc_mode != ALM_UP_MODE) { if (rtc_mode==RTC_PLAY_MODE) { #ifdef USE_RTC_TIME_ONLY rtc_set=3; #else rtc_set=0; #endif rtc_mode = RTC_SET_MODE; } else if(rtc_mode==RTC_SET_MODE){ goto __TIME_ADJ_POS; } else if (rtc_mode == ALM_SET_MODE) { goto __TIME_ADJ_POS; } Disp_Con(DISP_RTC); } #elif defined(NEW_RTC_SETTING_CTRL) if (rtc_mode != ALM_UP_MODE) { if(new_rtc_setting==0){ rtc_mode=RTC_SET_MODE; rtc_set=3; } else if(new_rtc_setting==1){ rtc_mode=RTC_SET_MODE; rtc_set=0; } else if(new_rtc_setting==2){ rtc_mode=RTC_SET_MODE; rtc_set=1; } else if(new_rtc_setting==3){ rtc_mode=ALM_SET_MODE; alm_set=1; } else if(new_rtc_setting==4){ rtc_mode=ALM_SET_MODE; alm_set=0; } Disp_Con(DISP_RTC); } #else #ifdef K3031_AP_668_V001 if (rtc_mode==ALM_SET_MODE){ if(alm_set==0){ alm_set=1; break; } } #endif #if defined(K820_LHD_820_V001) break; #endif if (rtc_mode != ALM_UP_MODE) { #if defined(MINI_DIGIT_BOX) if (rtc_mode==RTC_SET_MODE) { rtc_mode = RTC_PLAY_MODE; } else{ rtc_mode=RTC_SET_MODE; } op_timer=0; #else rtc_mode++; #ifdef USE_RTC_ALARM_FUNCTION if (rtc_mode>ALM_SET_MODE) { rtc_mode = RTC_PLAY_MODE; } #else if (rtc_mode>RTC_SET_MODE) { rtc_mode = RTC_PLAY_MODE; } #endif #endif #ifdef USE_RTC_TIME_ONLY rtc_set=3; #else rtc_set=0; #endif alm_set=0; Disp_Con(DISP_RTC); } #endif break; #if defined(MINI_DIGIT_BOX) case INFO_6|KEY_LONG: if (rtc_mode != ALM_UP_MODE) { //rtc_mode++; if (rtc_mode==ALM_SET_MODE) { rtc_mode = RTC_PLAY_MODE; } else{ rtc_mode = ALM_SET_MODE; alm_set=1; } } op_timer=0; Disp_Con(DISP_RTC); break; case INFO_2|KEY_LONG: rtc_mode = ALM_SET_MODE; alm_set=0; alm_sw =~alm_sw; Disp_Con(DISP_RTC); op_timer=0; break; #endif #ifdef INDEPENDENT_KEY_ADJ_TIME #ifdef RTC_MODE_HOT_KEY_ENABLE case INFO_RTC_MOD | KEY_LONG: #else case INFO_PLAY | KEY_SHORT_UP: #endif if (rtc_mode==RTC_PLAY_MODE) { alm_set=0; rtc_mode = ALM_SET_MODE; } Disp_Con(DISP_RTC); break; #elif defined(USE_NEXT_LONG_FOR_ALM_SETTING) case INFO_NEXT_FIL | KEY_LONG: //4RTC闹钟设置模式 if (rtc_mode==RTC_PLAY_MODE) { alm_set=0; rtc_mode = ALM_SET_MODE; } Disp_Con(DISP_RTC); break; #endif #if defined(K686_ZhengYang_686_V001)||defined(USE_POWER_KEY_TO_ADJ_HOUR_AND_MIN) case INFO_POWER| KEY_SHORT_UP: #elif defined(USE_MODE_LONG_FOR_RTC_SETTING) case INFO_MODE| KEY_SHORT_UP: if(rtc_mode == RTC_PLAY_MODE){ goto _HOT_KEY_HDLR; } #elif defined(CUSTOM_KEY_LONG_FOR_RTC_HOTKEY) case INFO_CUS_KEY_1 | KEY_SHORT_UP: #elif defined(MINI_DIGIT_BOX) case INFO_1|KEY_SHORT_UP: case INFO_6|KEY_SHORT_UP: op_timer=0; #else case INFO_PLAY| KEY_SHORT_UP: #endif #if defined(RTC_SETTING_OP_TIMER_ENABLE) op_timer=0; #endif #if defined(NEW_RTC_SETTING_CTRL) if ((rtc_mode != ALM_UP_MODE)&&(rtc_mode !=RTC_PLAY_MODE)) { if(new_rtc_setting==0){ rtc_mode=RTC_SET_MODE; rtc_set++; if(rtc_set>4){ rtc_mode=RTC_PLAY_MODE; } } else if(new_rtc_setting==1){ rtc_mode=RTC_PLAY_MODE; Disp_Con(DISP_RTC_DATE); break; } else if(new_rtc_setting==2){ rtc_mode=RTC_SET_MODE; rtc_set++; if(rtc_set>2){ Disp_Con(DISP_RTC_DATE); rtc_mode=RTC_PLAY_MODE; break; } } else if(new_rtc_setting==3){ rtc_mode=ALM_SET_MODE; alm_set++; if(alm_set>2){ Disp_Con(DISP_RTC_DATE); rtc_mode=RTC_PLAY_MODE; break; } } else if(new_rtc_setting==4){ Disp_Con(DISP_RTC_DATE); rtc_mode=RTC_PLAY_MODE; alm_set=0; break; } Disp_Con(DISP_RTC); } #else #if defined(K820_LHD_820_V001) break; #endif __TIME_ADJ_POS: if (rtc_mode == RTC_SET_MODE) { rtc_set++; if (rtc_set>4) { #ifdef USE_RTC_TIME_ONLY rtc_set=3; #else rtc_set=0; #endif #ifdef RTC_SETTING_NO_CYC rtc_mode = RTC_PLAY_MODE; #endif } Disp_Con(DISP_RTC); } else if (rtc_mode == ALM_SET_MODE) { #ifdef K3031_AP_668_V001 if(alm_set==0)break; #endif alm_set++; #if defined(ALARM_SEL_SOURCE) if (alm_set>3) #elif defined(ALARM_ADJ_VOL) if (alm_set>3) #else if (alm_set>2) #endif { #ifdef K3031_AP_668_V001 alm_set=1; #else alm_set=0; #endif #ifdef RTC_SETTING_NO_CYC rtc_mode = RTC_PLAY_MODE; #endif } Disp_Con(DISP_RTC); } #endif break; #ifdef ADJ_TIME_USE_VOL_KEY case INFO_VOL_PLUS: #ifdef RTC_ADJ_VOL if (rtc_mode==RTC_PLAY_MODE) goto _HOT_KEY_HDLR; #endif break; case INFO_VOL_PLUS | KEY_SHORT_UP: case INFO_VOL_PLUS | KEY_HOLD : //4RTC 设置模式下的时间选择(增加) #else case INFO_NEXT_FIL | KEY_SHORT_UP: case INFO_NEXT_FIL | KEY_HOLD: #endif #ifdef USE_NEXT_PREV_KEY_HOLD_FUNC_SKIP if(key==(INFO_NEXT_FIL | KEY_HOLD)) break; #endif #if defined(MINI_DIGIT_BOX)||defined(RTC_SETTING_OP_TIMER_ENABLE) op_timer=0; #endif if (rtc_mode==RTC_SET_MODE) { curr_date_plus(); set_date_sec(); fond_alm_clk(); Disp_Con(DISP_RTC); } else if (rtc_mode==ALM_SET_MODE) { #ifdef ALARM_SEL_SOURCE if (alm_set==3){ alm_source++; if(alm_source>ALM_SOUR_FM){ alm_source=ALM_SOUR_USB; } Disp_Con(DISP_RTC); break; } #elif defined(ALARM_ADJ_VOL) if(alm_set==3){ my_music_vol++; clear_super_mute_lock(); if (my_music_vol > MAX_VOL) { my_music_vol = MAX_VOL; } } #endif alm_time_plus(); set_alm_sec(); Disp_Con(DISP_RTC); } else { #ifdef RTC_ADJ_VOL goto _HOT_KEY_HDLR; #endif #ifdef NEW_RTC_SETTING_CTRL new_rtc_setting++; if(new_rtc_setting>4){ new_rtc_setting=0; } if(new_rtc_setting==0){ Disp_Con(DISP_RTC); } else{ Disp_Con(DISP_RTC_DATE); } #else #ifdef USE_RTC_YEAR_FUNCTION date_show_active = 1; Disp_Con(DISP_RTC_DATE); #endif #endif } break; #ifdef ADJ_TIME_USE_VOL_KEY case INFO_VOL_MINUS: #ifdef RTC_ADJ_VOL if (rtc_mode==RTC_PLAY_MODE) goto _HOT_KEY_HDLR; #endif break; case INFO_VOL_MINUS| KEY_SHORT_UP: case INFO_VOL_MINUS | KEY_HOLD : //4RTC 设置模式下的时间选择(减少) #else case INFO_PREV_FIL | KEY_SHORT_UP: case INFO_PREV_FIL | KEY_HOLD: #endif #ifdef USE_NEXT_PREV_KEY_HOLD_FUNC_SKIP if(key==(INFO_PREV_FIL | KEY_HOLD)) break; #endif #if defined(MINI_DIGIT_BOX)||defined(RTC_SETTING_OP_TIMER_ENABLE) op_timer=0; #endif if (rtc_mode==RTC_SET_MODE) { curr_date_minus(); set_date_sec(); fond_alm_clk(); Disp_Con(DISP_RTC); } else if (rtc_mode==ALM_SET_MODE) { #ifdef ALARM_SEL_SOURCE if (alm_set==3){ if(alm_source--==ALM_SOUR_USB){ alm_source=ALM_SOUR_FM; } Disp_Con(DISP_RTC); break; } #elif defined(ALARM_ADJ_VOL) if(alm_set==3){ if (my_music_vol) my_music_vol--; clear_super_mute_lock(); if(my_music_vol == MIN_VOL){ Mute_Ext_PA(MUTE); } } #endif alm_time_minus(); set_alm_sec(); Disp_Con(DISP_RTC); } else { #ifdef NEW_RTC_SETTING_CTRL new_rtc_setting--; if(new_rtc_setting>4){ new_rtc_setting=4; } if(new_rtc_setting==0){ Disp_Con(DISP_RTC); } else{ Disp_Con(DISP_RTC_DATE); } #else #ifdef USE_RTC_YEAR_FUNCTION date_show_active = 1; Disp_Con(DISP_RTC_DATE); #endif #endif } break; #if defined(MINI_DIGIT_BOX) #if defined(USE_SNOOZE_FUNC) case INFO_7|KEY_SHORT_UP: if (alm_flag>0) //4闹钟响后默认增加一天秒数 { set_snooze_func(); close_alm_bell(); Disp_Con(DISP_RTC); } break; #endif #endif case INFO_EQ_UP | KEY_SHORT_UP: //4清除闹钟 if (alm_flag) //4闹钟响后默认增加一天秒数 { #if defined(USE_SNOOZE_FUNC) set_snooze_func(); #endif close_alm_bell(); Disp_Con(DISP_RTC); } break; case INFO_HALF_SECOND : #if ((USE_DEVICE == MEMORY_STYLE)&&(FAT_MEMORY)) updata_fat_memory(); #endif #if defined(AD_MEASURE_TEMP_FUNC) adc_diode_temp_measure_hdlr(); #endif #ifdef DISP_BACKLIGHT_AUTO_SAVE_POWER Disp_BL_time_out(); #endif #if defined(USE_SNOOZE_FUNC) snooze_hdlr(); #endif #if defined(USE_TIMER_POWER_OFF_FUNC) timer_pwr_off_hdlr(); #endif #ifdef USE_MICPHONE_GPIO_DETECTION if(get_mic_online_status()){ Disp_Con(DISP_MIC); break; } #endif if ((DISP_ALM_UP == curr_menu) || (alm_flag>0)) { if (alm_flag>=60) { close_alm_bell(); return_cnt = (RETURN_TIME); #ifdef RTC_ALRM_MEM_LAST_WORK_MODE Set_Curr_Func(last_work_mode); return; #endif } else if (alm_flag) { rtc_mode = ALM_UP_MODE; alm_flag++; //key_voice_disable = 1; Mute_Ext_PA(UNMUTE); set_max_vol(MAX_ANALOG_VOL, MAX_DIGITAL_VOL); //设置RTC模式的音量上限 dac_out_select(DAC_DECODE); sys_clock_pll(); my_main_vol(my_music_vol); write_dsp(-3, 10, 0x10); #ifdef ALM_UP_DISP_TIME Disp_Con(DISP_RTC_POINT); #else Disp_Con(DISP_ALM_UP); #endif #ifdef ALM_ON_FLASH_SCR alm_flash_flag=~alm_flash_flag; if(alm_flash_flag){ Disp_Con(DISP_PWR_OFF); } #endif #if defined(USE_BAT_MANAGEMENT) bmt_hdlr(); #endif //delay_10ms(10); break; } } if ((rtc_mode==RTC_PLAY_MODE)||(rtc_mode==ALM_UP_MODE)) //4除闹钟模式外一直更新now_time { get_curr_date(); chk_date_err(); //Disp_Con(DISP_RTC); } #if defined(MINI_DIGIT_BOX)||defined(RTC_SETTING_OP_TIMER_ENABLE) rtc_setting_key_hdlr(); #endif if (return_cnt < (RETURN_TIME)) { return_cnt++; } if ((RETURN_TIME) == return_cnt) { if ((DISP_RTC != curr_menu) || (0 != rtc_mode)) { rtc_set = 0; alm_set = 0; rtc_mode = 0; #if defined(NEW_RTC_SETTING_CTRL) new_rtc_setting=0; #endif get_curr_date(); Disp_Con(DISP_RTC); } #ifdef USE_RTC_YEAR_FUNCTION date_show_active=0; #endif } #ifdef RTC_ADJ_VOL if(DISP_VOL == curr_menu){ } else #endif #ifdef USE_RTC_YEAR_FUNCTION if(!date_show_active) #elif defined(NEW_RTC_SETTING_CTRL) if((rtc_mode == RTC_PLAY_MODE)&&(new_rtc_setting>0)){ break; } #endif { Disp_Con(DISP_RTC_POINT); } #if defined(USE_BAT_MANAGEMENT) bmt_hdlr(); #endif break; default : _HOT_KEY_HDLR: if (!ap_handle_hotkey(key)) { close_alm_bell(); return; } } } }
/*----------------------------------------------------------------------------*/ 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 deal_aux( void ) { u8 key; aux_channel_crosstalk_improve(DAC_AMUX0); delay_10ms(60); Mute_Ext_PA(UNMUTE); while (1) { dac_out_select(DAC_AMUX0); //suspend_sdmmc(); key = get_msg(); if(dac_cnt > 20) { dac_sw(0); } switch (key) { case INFO_NEXT_SYS_MODE: return; case INFO_HALF_SECOND : #if ((USE_DEVICE == MEMORY_STYLE)&&(FAT_MEMORY)) updata_fat_memory(); #endif #if defined(USE_BAT_MANAGEMENT) bmt_hdlr(); #endif #if defined(USE_TIMER_POWER_OFF_FUNC) timer_pwr_off_hdlr(); #endif #ifdef USE_ERP_2_HDLR aux_erp_2_timer_hdlr(); #endif if(adkey_detect){ adkey_detect=0; set_sys_vol(my_music_vol); } set_brightness_fade_out(); if (return_cnt < RETURN_TIME) { return_cnt++; } if (RETURN_TIME == return_cnt) { if (DISP_DWORD_NUMBER == curr_menu) { cfilenum = 0; } if (DISP_AUX != curr_menu) Disp_Con(DISP_AUX); } break; #if RTC_ENABLE case INFO_ALM_BELL : ///<闹钟响消息,进入闹钟循环 dac_out_select(DAC_DECODE); alm_bell_mode(); #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 : if (!ap_handle_hotkey(key)) return; } } }