/*----------------------------------------------------------------------------*/ void timer0isr(void) { static xd_u8 counter0, counter1; PSW = 0x08; DPCON = 0x0; T0CON &= ~BIT(7); //clear pending #ifdef LCD_GPIO_DRV seg_lcd_disp_scan(); #else //disp_scan(); #endif adc_scan(); counter0++; usb_polling(); #ifdef JOG_STICK_FUNC JogDetect(); #endif if ((counter0 % 5) == 0) //10ms { dec_delay_counter(); //#if SDMMC_CMD_MODE // sd_online_check(); //#if SDMMC_CLK_MODE sdmmc_online_chk(1); //#elif SDMMC_GPIO_MODE //sdmmc_detect(); //#endif keyScan(); } // if ((counter0 % 50) == 0) // { // put_msg_fifo(MSG_100MS); // } if ((counter0 % 100) == 0) { ad_mod_sel_hdlr(); put_msg_fifo(MSG_200MS); counter0 = 0; } counter1++; if ((counter1 % 250) == 0) { put_msg_fifo(MSG_HALF_SECOND); counter1 = 0; } #if 0//RTC_ENABLE if (IRTCON & BIT(7)) { alm_cnt = 1; last_work_mode = work_mode; put_msg_lifo(MSG_ALM_ON); } #endif }
/*----------------------------------------------------------------------------*/ void timer0isr(void) { static u8 counter0, counter1; PSW = 0x08; DPCON = 0x0; T0CON &= ~BIT(7); //clear pending disp_scan(); adc_scan(); counter0++; usb_polling(); JogDetect(); if ((counter0 % 5) == 0) //10ms { dec_delay_counter(); //#if SDMMC_CMD_MODE // sd_online_check(); #if SDMMC_CLK_MODE sdmmc_online_chk(1); #elif SDMMC_GPIO_MODE sdmmc_detect(); #endif keyScan(); //disp_dled(); } // if ((counter0 % 50) == 0) // { // put_msg_fifo(MSG_100MS); // } if((counter0 % 100) == 0) { //aux_check(); put_msg_fifo(MSG_200MS); counter0 = 0; } counter1++; if ((counter1 % 250) == 0) { put_msg_fifo(MSG_HALF_SECOND); counter1 = 0; } #if RTC_ENABLE if (IRTCON & BIT(7)) { alm_cnt = 1; last_work_mode = work_mode; put_msg_lifo(MSG_ALM_ON); } #endif }
void bluetooth_rev_msg_hdlr(void) { u8 rev_cmd=0,cmd_idx=0; if(bt_frame_rev_finished){ bt_frame_rev_finished = 0; rev_cmd = bluetooth_cmd_parse(); #ifdef BLUETOOTH_UART_DRV_DEBUG my_printf(" ---------> %x \r\n",(u16)rev_cmd); #endif if(rev_cmd!= 0xFF){ for(cmd_idx = 0;cmd_idx < (sizeof(bt_rev_msg)/2);cmd_idx++){ if(bt_rev_msg[cmd_idx].bt_cmd == rev_cmd){ #ifdef BLUETOOTH_UART_DRV_DEBUG my_printf("rev msg %x \r\n",(u16)cmd_idx); #endif put_msg_fifo(bt_rev_msg[cmd_idx].sys_msg); } } } } }
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 timer_pwr_off_hdlr() { if(timer_pwr_idx>0){ timer_pwr_cnt++; //if(timer_pwr_cnt>=(timer_tab[timer_pwr_idx]/*2*60*/)){ if(timer_pwr_cnt>=(timer_tab[timer_pwr_idx]*2*60)){ timer_pwr_idx =0; timer_pwr_cnt =0; set_brightness_all_on(); work_mode = IDLE_MODE; put_msg_fifo(MSG_SYS_POWERON); } } }
/*----------------------------------------------------------------------------*/ void timer1isr(void) { static u8 ms_cnt, counter; _push_(DPCON); _push_(DP1L); _push_(DP1H); DPCON = 0x0; T1CON &= ~(BIT(7)); disp_scan(); #ifdef USE_USB_SD_DECODE_FUNC udisk_disconnect_check(); usb_diskin_detect(); #endif #ifdef JOG_STICK_FUNC JogDetect(); #endif counter++; if (counter == 5) { counter = 0; if(dac_cnt < 21){ dac_cnt++; } adc_scan(); #ifdef USE_LINE_IN_DETECT_FUNC aux_check(); #endif keyScan(); dec_delay_counter(); #ifdef USE_USB_SD_DECODE_FUNC #ifndef NO_SD_DECODE_FUNC #if SDMMC_CMD_MODE sd_online_check(); #elif SDMMC_CLK_MODE sdmmc_online_chk(); #elif SDMMC_GPIO_MODE sdmmc_detect(); #endif #endif #endif ms_cnt++; #ifdef USE_CD_MCU_MASTER_FUNC if(ms_cnt%10==0){ mcu_master_cmd_tick=1; } if(ms_cnt%6==0){ mcu_master_tranceive_tick=1; } #endif if(ms_cnt%25==0){ if((work_mode == SYS_BLUE_TOOTH )||(work_mode == SYS_AUX)){ put_msg_fifo(INFO_250_MS); } } if (ms_cnt == 50) { ms_cnt = 0; put_msg_fifo(INFO_HALF_SECOND); LDO_IN_Volt=ldoin_voltage(); #ifdef USE_RTC_ALARM_FUNCTION check_alm(); #endif #ifdef SYS_GPIO_SEL_FUNC gpio_sel_func_mode(); #endif #ifdef ADKEY_SELECT_MODE ad_mod_sel_hdlr(); #endif } adc_start(); } _pop_(DP1H); _pop_(DP1L); _pop_(DPCON); }
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; } } } }