/*----------------------------------------------------------------------------*/ 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 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 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 sys_restore_mode() { #if 1 #if 1 //CLKCON &=~(BIT(3)); //CLKCON &=~(BIT(6)); //delay_10ms(2); CLKGAT &= ~(BIT(5)); //SDCLK打开 DACCON1 &=~(BIT(6)); //DAC高阻 Delay(200); #endif sys_clock_pll(); dac_mute_control(0,1); #endif }
void sys_sleep_mode() { #if 1 usb_suspend(); //Entered Suspend mode suspend_sdmmc(); dac_mute_control(1,1); #if 1 DACCON1 |= BIT(6); //DAC高阻 CLKGAT |= BIT(5); //SDCLK关闭 //CLKCON |= (BIT(3)); //CLKCON |= (BIT(6)); //Delay(600); #endif rc_pll_delay(); //Delay(200); sysclock_div2(1); #endif }
/*----------------------------------------------------------------------------*/ void ap_handle_hotkey(u8 key) { u8 res; switch (key) { case MSG_POWER_DOWN: if(sys_pwr_flag==0){ sys_pwr_flag =1; sys_mute_flag =1; dac_mute_control(sys_mute_flag,1); //调节音量时,自动UNMUTE work_mode = IDLE_MODE; put_msg_lifo(MSG_CHANGE_WORK_MODE); } else{ sys_mute_flag =0; //dac_mute_control(sys_mute_flag,1); //调节音量时,自动UNMUTE sys_pwr_flag =0; //work_mode = IDLE_MODE; } break; case MSG_MUTE_UNMUTE: sys_mute_flag=~sys_mute_flag; //dac_mute_toggle(); dac_mute_control(sys_mute_flag,1); //调节音量时,自动UNMUTE break; #if 1 case MSG_MUSIC_PREV_FILE: //选择上一个文件进行播放 case MSG_MUSIC_FR: //启动快退 if ((disp_scenario == DISP_RTC_SCEN)&&(rtc_setting_flag!=0)) { rtc_set_cnt=30; curr_time_minus(); write_rtc(&curr_time); //write_next_alm_sec(); disp_port(MENU_RTC); } break; case MSG_MUSIC_NEXT_FILE: //选择下一个文件进行播放 case MSG_MUSIC_FF: //启动快退 if ((disp_scenario == DISP_RTC_SCEN)&&(rtc_setting_flag!=0)) { rtc_set_cnt=30; curr_time_plus(); write_rtc(&curr_time); //write_next_alm_sec(); disp_port(MENU_RTC); } break; case MSG_NEXT_WORKMODE: //set_brightness_all_on(); if(work_mode==FM_RADIO_MODE)break; if(rtc_setting_flag!=0){ rtc_coordinate++; rtc_set_cnt=30; if(rtc_coordinate>4){ rtc_coordinate = 3; rtc_setting_flag = 0x00; } break; } if(disp_scenario == DISP_NORMAL){ input_number_en = 0; //允许数字输入功能 disp_scenario = DISP_RTC_SCEN; rtc_disp_hdlr(); } else{ if(device_online==0)break; input_number_en = 1; //允许数字输入功能 disp_scenario = DISP_NORMAL; disp_port(MENU_MUSIC_MAIN); } break; case MSG_TIME_SETTING: //set_brightness_all_on(); if(disp_scenario == DISP_RTC_SCEN){ rtc_set_cnt=30; rtc_setting_flag = 0x01; rtc_coordinate = 3; } break; case MSG_USB_DISK_OUT: case MSG_SDMMC_OUT: if((RECODE_WORKING == encode_status)||(RECODE_PAUSE == encode_status)) { #ifdef AUTO_PLAY_RADIO_REC_FILE auto_play_radio_rec=0; #endif rec_device_out = 1; api_stop_encode(); if(work_mode == FM_RADIO_MODE){ main_menu = MENU_FM_MAIN;// disp_port(MENU_FM_MAIN); break; } } #ifndef LCD_BACK_LIGHT_DUMMY set_brightness_all_on(); #endif if((!device_check()) && (REC_MIC_MODE == work_mode)) { put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); break; } if(MUSIC_MODE != work_mode) break; //put_msg_lifo(MSG_DEVICE_REMOVED); disk_remove_deal_for_music(); break; #endif #if USB_DEVICE_ENABLE case MSG_USB_PC_IN: break_encode(); set_brightness_all_on(); device_check(); work_mode = USB_DEVICE_MODE; put_msg_lifo(MSG_CHANGE_WORK_MODE); break; case MSG_USB_PC_OUT: set_brightness_all_on(); break; #endif case MSG_SDMMC_IN : #ifndef LCD_BACK_LIGHT_DUMMY set_brightness_all_on(); #endif device_check(); if((RECODE_WORKING == encode_status)||(RECODE_PAUSE == encode_status)) { break; } break_encode(); disp_scenario = DISP_NORMAL; #if USB_DEVICE_ENABLE if (work_mode == USB_DEVICE_MODE) break; #endif given_device = read_info(MEM_ACTIVE_DEV); if(given_device != DEVICE_SDMMC0_REC) // given_device = DEVICE_SDMMC0_REC; //else given_device = DEVICE_SDMMC0; given_file_method = PLAY_BREAK_POINT; put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); break; case MSG_USB_DISK_IN : #ifndef LCD_BACK_LIGHT_DUMMY set_brightness_all_on(); #endif device_check(); if((RECODE_WORKING == encode_status)||(RECODE_PAUSE == encode_status)) { break; } break_encode(); disp_scenario = DISP_NORMAL; given_device = read_info(MEM_ACTIVE_DEV); if(given_device != DEVICE_UDISK_REC) // given_device = DEVICE_UDISK_REC; //else given_device = DEVICE_UDISK; given_file_method = PLAY_BREAK_POINT; put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); break; #if 0 case MSG_NEXT_WORKMODE: #if 0//def K820_LHD_820_REC_V001 if(MUSIC_MODE != work_mode) break; if(device_check()>0){ given_device = DEVICE_AUTO_NEXT; given_file_method = PLAY_BREAK_POINT; put_msg_lifo(MSG_MUSIC_SELECT_NEW_DEVICE); backup_music_point(); } else{ //flashled(3); work_mode =IDLE_MODE; put_msg_lifo(MSG_CHANGE_WORK_MODE); } break; #endif break_encode(); work_mode++; if (work_mode > MAX_WORK_MODE) work_mode = MUSIC_MODE; put_msg_lifo(MSG_CHANGE_WORK_MODE); break; #endif #if 1 case MSG_VOL_UP: if(vol_change_en==0) break; dac_mute_control(0,1); //调节音量时,自动UNMUTE main_vol_set(0, CHANGE_VOL_INC); //write_info(MEM_VOL, main_vol_set(0, CHANGE_VOL_INC)); disp_port(MENU_MAIN_VOL); break; case MSG_VOL_DOWN: if(vol_change_en==0) break; dac_mute_control(0,1); //调节音量时,自动UNMUTE main_vol_set(0, CHANGE_VOL_DEC); //write_info(MEM_VOL, main_vol_set(0, CHANGE_VOL_DEC)); disp_port(MENU_MAIN_VOL); break; #endif case MSG_0: case MSG_1: case MSG_2: case MSG_3: case MSG_4: case MSG_5: case MSG_6: case MSG_7: case MSG_8: case MSG_9: if (!input_number_en) break; if((input_number)>6553){ input_number = 0x0000; } if (input_number > 9999) input_number = 0; input_number = input_number * 10 + key; disp_port(MENU_INPUT_NUMBER); break; //2 REC FSM BEGIN case MSG_REC_KEY: //录音开始和结束 if(work_mode ==IDLE_MODE) break; if(RECODE_PLAY >= encode_status) { put_msg_lifo(MSG_REC_FIND); #ifdef AUTO_PLAY_RADIO_REC_FILE if(work_mode == FM_RADIO_MODE){ auto_play_radio_rec=1; } #endif } else { #ifdef AUTO_PLAY_RADIO_REC_FILE //auto_play_radio_rec=0; #endif put_msg_lifo(MSG_REC_STOP); } break; case MSG_MUSIC_PP: //录音暂停和继续录音 //case MSG_REC_PP: //录音暂停和继续录音 if(RECODE_WORKING == encode_status) { put_msg_lifo(MSG_REC_PAUSE); } else if(RECODE_PAUSE == encode_status) { put_msg_lifo(MSG_REC_CONTINUE); } break; case MSG_ENCODE_END: //设备写err 或 设备满 if(rec_device_out) //录音时活动设备拔出,在设备拔出那里处理,在此不做处理 { rec_device_out =0; break; } api_stop_encode(); //停止录音 put_msg_lifo(MSG_REC_PLAY); break; case MSG_ENCODE_FAT_FULL: //建文件时 api_stop_encode(); //停止录音 if((!device_check())&& (REC_MIC_MODE == work_mode)) { put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); break; } // break_encode(); disp_port(main_menu); break; ////////////////录音涉及的各种状态 case MSG_REC_FIND: // if(RECODE_PLAY >= encode_status) // { // break; // } if(get_device_online_status()==0){ disp_port(MENU_NODEVICE); break; } encode_status = RECODE_INIT; if(MUSIC_MODE == work_mode) { encode_device = device_active; //设置录音存储设备 work_mode = REC_MIC_MODE; put_msg_lifo(MSG_CHANGE_WORK_MODE); break; } else if(REC_MIC_MODE == work_mode){ given_device = encode_device; } else //if((MUSIC_MODE != work_mode)) { if (given_device == NO_DEVICE) { given_device = read_info(MEM_ACTIVE_DEV); } } // if( ((given_device & (~VIRTUAL_DEVICE)) != DEVICE_SDMMC0) && ((given_device & (~VIRTUAL_DEVICE)) != DEVICE_UDISK)) { //given_device = DEVICE_SDMMC0; } SYSTEM_CLK_DIV2(); put_msg_lifo(MSG_MUSIC_SELECT_NEW_DEVICE); break; case MSG_REC_START: //开始录音 rec_device_out = 0; rec_sys_set(0); //0:24M 1:48M init_rec_name(); device_active |= VIRTUAL_DEVICE; encode_device = device_active; //设置录音存储设备 write_file_info(0); SYSTEM_CLK_DIV2(); set_rec_channel(encode_channel); //设置录音通道 set_rec_vol(encode_vol); //设置录音音量 if(REC_MIC == encode_channel) { set_rec_track(TRACK_LEFT); } else { set_rec_track(TRACK_ALL); } /**/ CLKGAT |= MP3CLK;// | SPIURCLK; CLKCON0 |= DACCLK; if(DEVICE_SDMMC0 == (device_active & (~VIRTUAL_DEVICE))) { CLKGAT |= USBCLK; } else if(DEVICE_UDISK == (device_active & (~VIRTUAL_DEVICE))) { CLKGAT |= SDCLK; } if(1 != start_encode(IS_MP3)) //开始录音 { put_msg_lifo(MSG_ENCODE_FAT_FULL); break; } /* if(REC_MIC_MODE == work_mode) { while(!((cmd_ctl_rec(REC_NO_OPT,0)) & FRIST_ADC_PACKET)) //采数据前的处理 { } delay_10ms(50);//抛弃半秒的数据 } cmd_ctl_rec(ENABLE_REC_DATA,ENABLE_REC_BIT); */ encode_status = RECODE_WORKING; #if FM_MODULE // if(FM_RADIO_MODE != work_mode) #endif { main_menu = MENU_RECWORKING;// } disp_port(main_menu); break; case MSG_REC_STOP: //停止录音 api_stop_encode(); //停止录音 if(work_mode==REC_MIC_MODE){ put_msg_lifo(MSG_REC_PLAY); } #ifdef REC_PLAY_KEY_BREAK_POINT rec_pley_bp_flag=0; #endif break; case MSG_REC_PAUSE: //暂停录音 encode_status = RECODE_PAUSE; #if FM_MODULE if(FM_RADIO_MODE == work_mode) disp_port(MENU_FM_MAIN); else #endif { //main_menu = MENU_REC_PAUSE; disp_port(MENU_RECWORKING); } pause_encode(); break; case MSG_REC_CONTINUE: //暂停录音之后继续录音 encode_status = RECODE_WORKING; #if FM_MODULE if(FM_RADIO_MODE == work_mode) disp_port(MENU_FM_MAIN); else #endif { main_menu = MENU_RECWORKING;// disp_port(MENU_RECWORKING); } continue_encode(); break; case MSG_REC_PLAY: //播放最后的录音文件 if(work_mode ==IDLE_MODE) break; #ifdef REC_PLAY_KEY_BREAK_POINT rec_pley_bp_flag=~rec_pley_bp_flag; if(rec_pley_bp_flag){ last_play_index = given_file_number; } else{ given_file_number=last_play_index; put_msg_lifo(MSG_MUSIC_PLAY_NEW_FILE); break; } #endif encode_status = RECODE_PLAY; given_device = encode_device & (~VIRTUAL_DEVICE); if( (given_device != DEVICE_SDMMC0) && (given_device != DEVICE_UDISK)) { given_device = DEVICE_SDMMC0; } given_device |= VIRTUAL_DEVICE; if((MUSIC_MODE != work_mode)) { put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); } else { put_msg_lifo(MSG_MUSIC_SELECT_NEW_DEVICE); } break; case MSG_MUSIC_SELECT_NEW_DEVICE: //重新选择设备 res = find_device(given_device); if ((res == DEV_INIT_ERR) || (res == NO_DEFINE_DEV)) //指定的设备不在线,或初始化失败 { 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(RECODE_STOP != encode_status) { encode_status = RECODE_STOP; if(REC_MIC_MODE == work_mode) { put_msg_lifo(MSG_NEXT_WORKMODE); } } else { //put_msg_lifo(MSG_NEXT_WORKMODE); if(disp_scenario == DISP_NORMAL){ #ifdef PLAY_STATUS_LED_FUNC set_play_status_led_spark(PLED_ON); #endif disp_scenario = DISP_RTC_SCEN; rtc_disp_hdlr(); } } break; } else { if(RECODE_PLAY < encode_status) { put_msg_lifo(MSG_REC_START); } else { if(RECODE_PLAY == encode_status) //4去播刚录好的文件 { encode_status = RECODE_STOP; #if VIRTUAL_ENABLE #if 1//defined(K820_LHD_820_REC_V001) given_file_number = logic_fileTotal; #else given_file_number = encode_filenum; #endif #else given_file_number = logic_fileTotal; //given_file_number = encode_filenum + encode_fristfile -1; #endif put_msg_lifo(MSG_MUSIC_PLAY_NEW_FILE); } else { put_msg_lifo(MSG_MUSIC_SELECT_NEW_FILE); //找到可用设备 } } } break; //2 REC FSM END } }
/*----------------------------------------------------------------------------*/ 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 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 aux_main_handlr(void) { u8 key; #ifdef FORCE_AUX_GPIO_TO_GROUND_IMPROVE_CROSSTALK #ifndef UART_ENABLE #if defined(EXCHANGE_AUX_CHANNEL) P2IE_REG &=~((BIT(4)|BIT(5))); P2IE_REG |= ((BIT(6)|BIT(7))); P2IE_reg_OverWrite(); P2PD &=~((BIT(4)|BIT(5))); P2PD |= ((BIT(6)|BIT(7))); P2 &=~((BIT(6)|BIT(7))); #else P2IE_REG &=~((BIT(6)|BIT(7))); P2IE_REG |= ((BIT(4)|BIT(5))); P2IE_reg_OverWrite(); P2PD &=~((BIT(6)|BIT(7))); P2PD |= ((BIT(4)|BIT(5))); P2 &=~((BIT(4)|BIT(5))); #endif #endif #endif sys_main_vol_setting(sys_main_vol); SYS_AMP_POWER_ON(); dac_mute_control(0,1); while (1) { #if defined(EXCHANGE_AUX_CHANNEL) dac_out_select(DAC_AMUX0, 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_MUSIC_PP: case MSG_MUTE_UNMUTE: sys_mute_flag=~sys_mute_flag; dac_mute_control(sys_mute_flag,1); //调节音量时,自动UNMUTE break; case MSG_HALF_SECOND: ext_pa_delay_mute_hdlr(); //////////////////////////////////////////////////////////// //显示界面的切换 #if 1 // if(RECODE_WORKING == encode_status) // { // main_menu = MENU_RECWORKING; // } // else if(RECODE_PAUSE == encode_status) // { // main_menu = MENU_REC_PAUSE; // } // else // { // main_menu = MENU_AUX; // } if(cur_menu == main_menu) { disp_port(main_menu); } set_brightness_fade_out(); #endif set_brightness_fade_out(); if (main_menu_conter < SUB_MENU_TIME) { main_menu_conter++; } else if (cur_menu != main_menu) { cur_menu = main_menu; disp_port(cur_menu); } if(RECODE_WORKING == encode_status) { disp_port(MENU_AUX_MAIN); } break; default: ap_handle_hotkey(key); break; } } }
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); } //*/ }
bool radio_band_scan(u8 mode) { bool res; input_number_en = 0; vol_change_en=0; //adkey_activated=1; radio_scan_safeguard=3; dac_mute_control(1,1); if(mode == RADIO_SCAN_NEXT) { radio_band.wFreq=radio_band.wFreq+radio_band.bTuneStep; if (radio_band.wFreq > radio_band.wFreqUpLimit) radio_band.wFreq = radio_band.wFreqDownLimit; if(freq_reg_stop ==radio_band.wFreq ){ set_radio_freq(RADIO_CUR_FRE); return 1; } } else if (mode == RADIO_SCAN_PREV) { radio_band.wFreq=radio_band.wFreq-radio_band.bTuneStep; if (radio_band.wFreq < radio_band.wFreqDownLimit) radio_band.wFreq =radio_band.wFreqUpLimit; if(freq_reg_stop ==radio_band.wFreq ){ set_radio_freq(RADIO_CUR_FRE); return 1; } } else{ radio_band.wFreq=radio_band.wFreq+radio_band.bTuneStep; if(radio_band.wFreq > radio_band.wFreqUpLimit){ radio_band.wFreq = radio_band.wFreqDownLimit; radio_band.bTotalChannel=radio_band.bTotalChannel-1; //restore_station_from_epprom((RADIO_STATION_CURR|1)); return 1; } } disp_port(MENU_RADIO_MAIN); res = radio_get_validstation(radio_band.wFreq); //disp_port(MENU_RADIO_MAIN); if (res) //找到一个台 { #ifdef DEBUG_FM printf(" ---->KT VALID %d \r\n ",(u16)radio_band.bTotalChannel); printf(" ---->OK OK \r\n "); printf(" \r\n \r\n "); #endif #if 0 if(mode==RADIO_SCAN_ALL){ #ifdef SAVE_BAND_FREQ_INFO //mem_radio_info(RADIO_SAVE_STATION,&radio_band.wFreq,radio_band.bTotalChannel); //mem_radio_info(RADIO_SAVE_STATION_SUM,&radio_band.wFreq,0); #endif dac_mute_control(0,1); disp_port(MENU_RADIO_SCAN_STATION); delay_10ms(100); if(radio_band.bTotalChannel ==MEM_RADIO_STATION_MAX){ restore_station_from_epprom((RADIO_STATION_CURR|1)); } else{ radio_band.bTotalChannel++; } dac_mute_control(1,1); } else #endif { scan_mode = RADIO_SCAN_STOP; } #ifdef SAVE_BAND_FREQ_INFO save_radio_freq(radio_band.wFreq,radio_band.bCurBand); #endif return true; } return false; }
/*----------------------------------------------------------------------------*/ 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 usb_device(void) { u8 key; u8 connect_counter = 0; bool usb_con = 0; while (1) { #if ((USB_DEVICE_CFG & USB_MASS) == USB_MASS) UFI_massstorage(); #endif #if ((USB_DEVICE_CFG & USB_SPEAKER) == USB_SPEAKER) key_voice_en=1; dac_out_select(DAC_MUSIC, 0); #endif key = app_get_msg(); if (alm_request_cnt) { key = alm_request_msg_convert(key); } switch (key) { #if ((USB_DEVICE_CFG & USB_SPEAKER) == USB_SPEAKER) #if (MUSIC_SPECTRUM_EN == 1) case MSG_100MS: if (cur_menu == MENU_USBDEV_MAIN) { music_spec_cul(1); disp_port(MENU_100MS_REFRESH); } break; #endif /* case MSG_MUSIC_NEXT_EQ: eq_mode++; if (eq_mode > CLASSIC) { eq_mode = NORMAL; } //set_dsp_eq(eq_mode); set_eq(eq_mode); disp_port(MENU_SET_EQ); break; */ case MSG_PC_MUTE: dac_mute_control(1,1); break; case MSG_PC_UNMUTE: dac_mute_control(0,1); break; #else case MSG_VOL_UP: break; case MSG_VOL_DOWN: break; #endif #if ((USB_DEVICE_CFG & USB_HID) == USB_HID) case MSG_MUSIC_PP: //Usb_Audio_Mute_Ctl(); usb_hid_control(USB_AUDIO_PP); break; case MSG_MUSIC_NEXT_FILE: usb_hid_control(USB_AUDIO_NEXTFILE); break; case MSG_MUSIC_PREV_FILE: usb_hid_control(USB_AUDIO_PREFILE); break; #endif case MSG_USB_PC_OUT: Set_Curr_Func(SYS_MP3DECODE_USB); return; case MSG_HALF_SECOND: if (!usb_con) { connect_counter++; if(USBCON0 & BIT(6)) usb_con = 1; else if (connect_counter > 4) return; } //printf("alm_request_cnt:%u,main_menu_conter:%u\n",(u16)alm_request_cnt,(u16)main_menu_conter); if (alm_request_cnt) { alm_request_cnt++; disp_port(MENU_ALM_REQUEST); if (alm_request_cnt > 60) { alm_request_cnt = 0; Set_Curr_Func(SYS_RTC); put_msg_lifo(MSG_CHANGE_WORK_MODE); } break; } set_brightness_fade_out(); if (main_menu_conter < SUB_MENU_TIME) { main_menu_conter++; } else if (cur_menu != main_menu) { cur_menu = main_menu; disp_port(cur_menu); } break; #if RTC_ENABLE case MSG_CHANGE_WORK_MODE: if (alm_cnt) { return; } break; case MSG_REQUEST_Y: alm_request_cnt = 0; Set_Curr_Func(SYS_RTC); put_msg_lifo(MSG_CHANGE_WORK_MODE); break; case MSG_REQUEST_N: alm_request_cnt = 0; close_alarm(); main_menu_conter = SUB_MENU_TIME; break; case MSG_ALM_ON: alm_request_cnt = 1; write_next_alm_sec(); disp_port(MENU_ALM_REQUEST); break; #endif default : ap_handle_hotkey(key); break; } } }
/*----------------------------------------------------------------------------*/ 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 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 ap_handle_hotkey(u8 key) { u8 res; switch (key) { #if ECHO_ENABLE case MSG_REV_SW: echo_sw(); break; case MSG_REV_STRONG_UP: case MSG_REV_STRONG_DOWN: if(echo_strong(key)) { disp_port(MENU_REV_STRONG); } break; case MSG_REV_DEEP_UP: case MSG_REV_DEEP_DOWN: if(echo_deep(key)) { disp_port(MENU_REV_DEEP); } break; #endif case MSG_ALM_SETUP: //clr_alarm_func(); break; case MSG_SNOOZE_SETUP: set_snooze_func(); break; case MSG_MUTE_UNMUTE: sys_mute_flag =~sys_mute_flag; if(sys_mute_flag){ amp_mute(1); PT2313_Config(0,VOL_ADJ); } else{ PT2313_Config(sys_main_vol,VOL_ADJ); amp_mute(0); } break; case MSG_SLEEP_SETUP: if(work_mode != RTC_MODE){ timer_pwr_setting(); } break; case MSG_SYS_POWERON: if(work_mode==RTC_MODE){ work_mode= MUSIC_MODE; } else{ work_mode= RTC_MODE; } timer_pwr_idx=0; put_msg_lifo(MSG_CHANGE_WORK_MODE); break; case MSG_USB_DISK_OUT: case MSG_SDMMC_OUT: set_brightness_all_on(); if( (!device_check() ) && (encode_status >= RECODE_INIT )) //在录音时,活动设备拔出 { rec_device_out = 1; api_stop_encode(); if(AUX_MODE == work_mode) { main_menu = MENU_AUX; disp_port(MENU_AUX); } #if FM_MODULE else if(FM_RADIO_MODE == work_mode) { main_menu = MENU_FM_MAIN; disp_port(MENU_FM_MAIN); } #endif else { put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); //break; } } /* if((!device_check()) && (REC_MIC_MODE == work_mode)) { put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); break; } */ if(MUSIC_MODE != work_mode) break; put_msg_lifo(MSG_DEVICE_REMOVED); disk_remove_deal_for_music(); break; #if USB_DEVICE_ENABLE case MSG_USB_PC_IN: #if ECHO_ENABLE if(BUSY == echo_ptr->status) { close_echo(); } #endif break_encode(); set_brightness_all_on(); device_check(); work_mode = USB_DEVICE_MODE; put_msg_lifo(MSG_CHANGE_WORK_MODE); break; case MSG_USB_PC_OUT: set_brightness_all_on(); break; #endif case MSG_AUX_IN : break_encode(); set_brightness_all_on(); #if USB_DEVICE_ENABLE if ((AUX_MODE != work_mode) && (work_mode != USB_DEVICE_MODE)) #else if (AUX_MODE != work_mode) #endif { work_mode = AUX_MODE; put_msg_lifo(MSG_CHANGE_WORK_MODE); } break; case MSG_AUX_OUT : set_brightness_all_on(); if(work_mode != AUX_MODE)break; if((RECODE_WORKING == encode_status)||(RECODE_PAUSE == encode_status)) { break; } break_encode(); given_device = DEVICE_UDISK; given_file_method = PLAY_BREAK_POINT; put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); break; case MSG_SDMMC_IN : set_brightness_all_on(); device_check(); if((RECODE_WORKING == encode_status)||(RECODE_PAUSE == encode_status)) { break; } break_encode(); #if USB_DEVICE_ENABLE if (work_mode == USB_DEVICE_MODE) break; #endif given_device = read_info(MEM_ACTIVE_DEV); if(given_device == DEVICE_SDMMC0_REC) given_device = DEVICE_SDMMC0_REC; else given_device = DEVICE_SDMMC0; given_file_method = PLAY_BREAK_POINT; put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); break; case MSG_USB_DISK_IN : set_brightness_all_on(); device_check(); if((RECODE_WORKING == encode_status)||(RECODE_PAUSE == encode_status)) { break; } break_encode(); given_device = read_info(MEM_ACTIVE_DEV); if(given_device == DEVICE_UDISK_REC) given_device = DEVICE_UDISK_REC; else given_device = DEVICE_UDISK; given_file_method = PLAY_BREAK_POINT; put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); break; case MSG_NEXT_WORKMODE: break_encode(); if(work_mode == MUSIC_MODE){ device_check(); if(((device_active &(~VIRTUAL_DEVICE))== DEVICE_UDISK)&&(device_online&DEVICE_SDMMC0)>0){ given_device = DEVICE_SDMMC0; given_file_method = PLAY_BREAK_POINT; put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); break; } } work_mode++; if(work_mode > MAX_WORK_MODE){ work_mode = MUSIC_MODE; if(get_device_online_status()&DEVICE_UDISK){ given_device = DEVICE_UDISK; given_file_method = PLAY_BREAK_POINT; put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); } else if(get_device_online_status()&DEVICE_SDMMC0){ given_device = DEVICE_SDMMC0; given_file_method = PLAY_BREAK_POINT; put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); } else{ work_mode++; } } put_msg_lifo(MSG_CHANGE_WORK_MODE); break; case MSG_VOL_UP: if (vol_change_en==0) break; sys_main_vol++; sys_main_vol++; case MSG_VOL_DOWN: if (vol_change_en==0) break; if(sys_main_vol>0) sys_main_vol--; if(sys_main_vol>MAX_MAIN_VOL){ sys_main_vol =MAX_MAIN_VOL; } sys_mute_flag =0; PT2313_Config(sys_main_vol,VOL_ADJ); if(sys_main_vol==0){ amp_mute(1); } else{ amp_mute(0); } dac_mute_control(0,1); //调节音量时,自动UNMUTE write_info(MEM_VOL, sys_main_vol); disp_port(MENU_MAIN_VOL); break; case MSG_MUSIC_NEXT_EQ: if(work_mode == RTC_MODE) break; eq_mode++; if (eq_mode > CLASSIC) { eq_mode = NORMAL; } PT2313_Config(eq_mode,EQ_ADJ); set_eq(NORMAL); disp_port(MENU_SET_EQ); break; case MSG_100: if (!input_number_en) break; if (input_number > 999) input_number = 0; key_100_flag = 0xFF; #ifdef USE_10_PLUS_FUNC input_number = input_number+10; #else input_number = input_number+100; #endif disp_port(MENU_INPUT_NUMBER); break; case MSG_0: case MSG_1: case MSG_2: case MSG_3: case MSG_4: case MSG_5: case MSG_6: case MSG_7: case MSG_8: case MSG_9: if (!input_number_en) break; if(key_100_flag ==0xFF){ input_number += key; key_100_flag = 0xFE; } else if(key_100_flag ==0xFE){ input_number += (input_number%10)*10-(input_number%10)+key; key_100_flag = 0x00; } else { if((input_number)>6553){ input_number = 0x0000; } input_number = input_number * 10 + key; key_100_flag = 0x00; } #if 1 if (input_number > 9999) { input_number = 0; input_number = input_number *10 + key; } #endif disp_port(MENU_INPUT_NUMBER); break; ////////////////录音 case MSG_REC_KEY_AT_USB: if(RTC_MODE == work_mode){ break; } if(RECODE_PLAY >= encode_status) { rec_device_sel=DEVICE_UDISK; api_stop_encode(); put_msg_lifo(MSG_REC_FIND); } else { put_msg_lifo(MSG_REC_STOP); } break; case MSG_REC_KEY_AT_SD: if(RTC_MODE == work_mode){ break; } if(RECODE_PLAY >= encode_status) { rec_device_sel=DEVICE_SDMMC0; api_stop_encode(); put_msg_lifo(MSG_REC_FIND); } else { put_msg_lifo(MSG_REC_STOP); } break; #if 0 case MSG_REC_KEY: //录音开始和结束 if(RECODE_PLAY >= encode_status) { put_msg_lifo(MSG_REC_FIND); } else { put_msg_lifo(MSG_REC_STOP); } break; #endif case MSG_REC_PP: //录音暂停和继续录音 if(RECODE_WORKING == encode_status) { put_msg_lifo(MSG_REC_PAUSE); } else if(RECODE_PAUSE == encode_status) { put_msg_lifo(MSG_REC_CONTINUE); } break; case MSG_ENCODE_END: //设备写err 或 设备满 // deg_str("MSG_ENCODE_END \n"); if(rec_device_out) //录音时活动设备拔出,在设备拔出那里处理,在此不做处理 { rec_device_out =0; break; } api_stop_encode(); //停止录音 put_msg_lifo(MSG_REC_PLAY); break; case MSG_ENCODE_FAT_FULL: //建文件时 // deg_str("MSG_ENCODE_FAT_FULL \n"); api_stop_encode(); //停止录音 if(REC_MIC_MODE == work_mode) //录音时写设备出现问题、设备满 { put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); break; } // break_encode(); if(AUX_MODE == work_mode) { main_menu = MENU_AUX; } #if FM_MODULE else if(FM_RADIO_MODE == work_mode) { main_menu = MENU_FM_MAIN; } #endif disp_port(main_menu); break; ////////////////录音涉及的各种状态 case MSG_REC_FIND: // if(RECODE_PLAY >= encode_status) // { // break; // } #if USB_DEVICE_ENABLE if(USB_DEVICE_MODE == work_mode) { break; } #endif encode_status = RECODE_INIT; if(REC_MIC_MODE != work_mode) { work_mode = REC_MIC_MODE; put_msg_lifo(MSG_CHANGE_WORK_MODE); given_device = rec_device_sel;//read_info(MEM_ACTIVE_DEV); break; } #if 0 else //if((MUSIC_MODE != work_mode)) { if (given_device == NO_DEVICE) { given_device = read_info(MEM_ACTIVE_DEV); } } if( (( given_device & (~VIRTUAL_DEVICE )) != DEVICE_SDMMC0) && ((given_device & (~VIRTUAL_DEVICE)) != DEVICE_UDISK) ) { given_device = DEVICE_SDMMC0; } #endif given_device = rec_device_sel;//read_info(MEM_ACTIVE_DEV); sys_clk_div(2);//SYSTEM_CLK_DIV2(); put_msg_lifo(MSG_MUSIC_SELECT_NEW_DEVICE); break; case MSG_REC_START: //开始录音 rec_device_out = 0; #if 0 rec_sys_set(0); //0:24M 1:48M sys_clk_div(2);//SYSTEM_CLK_DIV2(); //24 M #else rec_sys_set(1); sys_clk_div(1);//SYSTEM_CLK_DIV1(); //48 M #endif //init_rec_name(); device_active |= VIRTUAL_DEVICE; encode_device = device_active; //设置录音存储设备 write_file_info(0); set_rec_channel(encode_channel); //设置录音通道 set_rec_vol(encode_vol); //设置录音音量 if(REC_MIC_MODE == work_mode) { kala_dac_off(); // dac_mute_control(1,1); #if KALAOK_FUNCTION dsp_set_adc_con(0); P3HD &=~(1<<6); #endif } if(REC_MIC == encode_channel) { set_rec_track(TRACK_LEFT); } else { set_rec_track(TRACK_ALL); } /**/ CLKGAT |= MP3CLK;// | SPIURCLK; // CLKCON0 |= DACCLK; // P3HD &=~(1<<6); if(DEVICE_SDMMC0 == (device_active & (~VIRTUAL_DEVICE))) { CLKGAT |= USBCLK; } else if(DEVICE_UDISK == (device_active & (~VIRTUAL_DEVICE))) { CLKGAT |= SDCLK; } #if ECHO_ENABLE if(BUSY == echo_ptr->status) { close_echo(); } #endif ///0x //my_memset(0x4000,0,0x787f-0x4000); //my_memset(0x8000,0,0x9c3f-0x8000); //混响强度 0x400c 取值范围 0-255 //混响深度 0x4015 0x4014 取值范围 0-2048 #if ECHO_ENABLE if(1 != start_encode_echo(IS_MP3)) //开始录音 #else if(1 != start_encode(IS_MP3)) //开始录音 #endif { put_msg_lifo(MSG_ENCODE_FAT_FULL); break; } #if ECHO_ENABLE ///<减弱冲击声,打开混响深度和强度 delay_10ms(20); if( REC_MIC == ( encode_channel & 0xf ) ) ///<MIC 下有混响 { set_echo(app_echo.strong, app_echo.deep); } // app_echo.strong = REC_ECHO_STRONG; echo_vol_set(REC_MIC_VOL); #endif /* if(REC_MIC_MODE == work_mode) { while(!((cmd_ctl_rec(REC_NO_OPT,0)) & FRIST_ADC_PACKET)) //采数据前的处理 { } delay_10ms(50);//抛弃半秒的数据 } cmd_ctl_rec(ENABLE_REC_DATA,ENABLE_REC_BIT); */ encode_status = RECODE_WORKING; #if 0//FM_MODULE if(FM_RADIO_MODE != work_mode) #endif { main_menu = MENU_RECWORKING;// } disp_port(main_menu); //disp_port(MENU_REC); break; case MSG_REC_STOP: //停止录音 api_stop_encode(); //停止录音 put_msg_lifo(MSG_REC_PLAY); break; case MSG_REC_PAUSE: //暂停录音 encode_status = RECODE_PAUSE; #if 0//FM_MODULE if(FM_RADIO_MODE == work_mode) disp_port(MENU_FM_MAIN); else #endif { main_menu = MENU_REC_PAUSE; disp_port(MENU_REC_PAUSE); } pause_encode(); break; case MSG_REC_CONTINUE: //暂停录音之后继续录音 encode_status = RECODE_WORKING; #if FM_MODULE if(FM_RADIO_MODE == work_mode) disp_port(MENU_FM_MAIN); else #endif { main_menu = MENU_RECWORKING;// disp_port(MENU_RECWORKING); } continue_encode(); break; case MSG_REC_PLAY: //播放最后的录音文件 encode_status = RECODE_PLAY; given_device = encode_device & (~VIRTUAL_DEVICE); if( (given_device != DEVICE_SDMMC0) && (given_device != DEVICE_UDISK)) { given_device = DEVICE_SDMMC0; } given_device |= VIRTUAL_DEVICE; if((MUSIC_MODE != work_mode)) { put_msg_lifo(MSG_MUSIC_NEW_DEVICE_IN); } else { put_msg_lifo(MSG_MUSIC_SELECT_NEW_DEVICE); } break; case MSG_MUSIC_SELECT_NEW_DEVICE: //重新选择设备 res = find_device(given_device); if ((res == DEV_INIT_ERR) || (res == NO_DEFINE_DEV)) //指定的设备不在线,或初始化失败 { 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(RECODE_STOP != encode_status) { encode_status = RECODE_STOP; if(REC_MIC_MODE == work_mode) { put_msg_lifo(MSG_NEXT_WORKMODE); } break; } else { put_msg_lifo(MSG_NEXT_WORKMODE); } break; } else { if(RECODE_PLAY < encode_status) { put_msg_lifo(MSG_REC_START); } else { if(RECODE_PLAY == encode_status) //去播刚录好的文件 { encode_status = RECODE_STOP; #if VIRTUAL_ENABLE given_file_number = encode_filenum; #else given_file_number = encode_filenum + encode_fristfile - 1; #endif put_msg_lifo(MSG_MUSIC_PLAY_NEW_FILE); } else { put_msg_lifo(MSG_MUSIC_SELECT_NEW_FILE); //找到可用设备 } } } break; } }