⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nx58_dec.c

📁 MP4 CODE IS GOOD ,NX5858 SKYLARK
💻 C
📖 第 1 页 / 共 4 页
字号:

	if(USB_ON) {
		usb_on_cnt++;

		if(usb_on_cnt > 200){

			if(USB_CON_MODE == 0) {
				FuncInMode = USB_STATE;
				decode_state = MODE_EXIT_STATE;
				return 1;//goto DecodingEnd;
			}
		}
	}
	else{
		write_XDATA(GP0_OUTPUT_CONTROL, 0x3F);
		USB_CON_MODE = 0;
		usb_on_cnt = 0;
	}

	return 0;
}

void DecodingEnd_Message(void){



	{
		UINT32 sector_cur_tmp;

		sector_cur_tmp = pFileIO->sector_cur;

		set_sector_range(pFileIO);

		FILE_INFO.DecodingSectorCnt -= (sector_cur_tmp - pFileIO->sector_cur); 

	}

	if((FuncInMode != POWER_OFF_STATE) && (sub_mode_in_play == DEC_NAV)) {
		while(display_update){
			if(PBmode == NO_ACT)
				display_update = dnavigation_display(display_update);
			else
				display_update = displayPlaylistNavigation(display_update);
		}
	}
	else if((FuncInMode != POWER_OFF_STATE) && (sub_mode_in_play == DEC_MENU)) {
		while(display_update)
			dmenu_display();
	}



	setVolume(0);

	Flash_Ready();

	Dma_B0_PERI2RAM_Close();
	Dma_B0_RAM2PERI_Close();

	if(FuncInMode == PLAYLIST_STATE)
	{//playlist marking
		xdata _subdir_navi *NAV_SubDirInfo = ((_subdir_navi volatile xdata *)(NAV_SUBDIR_BUFF+0x10000));
	
		playlist_add_pos = NAV_Display.cur - NAV_SubDirInfo[NAV_CUR_DIR.depth].total_subdir;
		playlist_entry_pos = getDirShortEntry( playlist_add_pos, USED_DIR, &NAV_CUR_DIR, 0);
		playlist_add_pos = DirIO.sector_cur;
	}

	if(FILE_INFO.HEADER.stereo)
		Vol_stereo_set(0x7f);
	else
		Vol_mono_set(0x7f);

	Mp3_Mute_On();
	if(decode_state != FF_REW_STATE) {
		#ifdef TLV320B
			AIC_mute();
		#else
//			Codec_Close();
		#endif
	}

	Decoder_Encoder_Stop();
	Mp3_Mute_On();
	Mp3_Reset();

}

void SLEEP_Message(void){

	if(sleepoff_time_count > SLEEP_OFF_TIME[time_sleep_off]) {
		FuncInMode = POWER_OFF_STATE;
		Reserve_Code(CHANGE_IDLE_MODE);
	}

}

void EL_LIGHT_Message(void){

	if(el_time){ 

		if(BACKLIGHT_TIME[el_time] < backlight_time_count){
			LcdDisplayOn(LCD_DISPLAY_OFF);		//DISPLAY OFF

			#ifdef G5_BOARD
			BACKLIGHT_OFF;
			#endif

			#if defined L320x240
			if(FILE_INFO.HEADER.BitRate > 192)
				Set_System_Clk(SC48M);
			else
				Set_System_Clk(SC24M);
			#endif
		}

	}

}

void RTC_Message(void){
#ifdef ENABLE_TIME_MENU
	data LongChar rtc_cur;

	rtc_cur.c[3] = read_XDATA(RTC_COUNTER_VAL0);
	rtc_cur.c[3] = read_XDATA(RTC_COUNTER_VAL0);

	if(pre_rtc_value != rtc_cur.c[3]) {
		/* ALARM & FM Booking Check Function*/
		if(ALARM_INFO.tm_onoff || FM_BOOKING_INFO.tm_onoff){
			rtc_cur.c[2] = read_XDATA(RTC_COUNTER_VAL1);
			rtc_cur.c[2] = read_XDATA(RTC_COUNTER_VAL1);
			rtc_cur.c[1] = read_XDATA(RTC_COUNTER_VAL2);
			rtc_cur.c[1] = read_XDATA(RTC_COUNTER_VAL2);
			rtc_cur.c[0] = read_XDATA(RTC_COUNTER_VAL3);
			rtc_cur.c[0] = read_XDATA(RTC_COUNTER_VAL3);

			if(ALARM_INFO.tm_onoff && FM_BOOKING_INFO.tm_onoff){
				if(rtc_cur.l >= WAKEUP_TOTAL_RTC){
					if(FM_BOOKING_INFO.tm_total_rtc < ALARM_INFO.tm_total_rtc){
						//First FM booking rec
						FuncInMode = FM_BOOKING_STATE;
						Reserve_Code(CHANGE_IDLE_MODE);
					}else{
						//First Alarm
						FuncInMode = ALARM_STATE;
						Reserve_Code(CHANGE_IDLE_MODE);
					}
				}
			}else if(ALARM_INFO.tm_onoff && (rtc_cur.l >= WAKEUP_TOTAL_RTC)){
				if(rtc_cur.l >= WAKEUP_TOTAL_RTC){
					FuncInMode = ALARM_STATE;
					Reserve_Code(CHANGE_IDLE_MODE);
				}
			}else if(FM_BOOKING_INFO.tm_onoff){
				if(rtc_cur.l >= WAKEUP_TOTAL_RTC){
					FuncInMode = FM_BOOKING_STATE;
					Reserve_Code(CHANGE_IDLE_MODE);
				}
			}
		}
		/* EL Check Function */
		if(el_time){ 

			if((BACKLIGHT_TIME[el_time] + 1) > backlight_time_count){
				backlight_time_count++;
			}

		}

		/* SLEEP Check Function */
		if(time_sleep_off){
			sleepoff_time_count++;

			SLEEP_Message();
		}
#ifdef LYRIC_FUNC

		if((Is_LRC_file == LYRIC_YES_DIS_YES) && vbr_bitrate){

			vbr_liyric_time++;

			if(init_lyric){
				init_lyric = 0;
				vbr_liyric_time -= 1;
			}

		}
#endif
	}

	pre_rtc_value = rtc_cur.c[3];

#else
	data UINT8	cur_rtc_value;

	cur_rtc_value = read_XDATA(RTC_COUNTER_VAL0);
	cur_rtc_value = read_XDATA(RTC_COUNTER_VAL0);

	if(pre_rtc_value != cur_rtc_value) {

		/* EL Check Function */
		if(el_time){ 

			if((BACKLIGHT_TIME[el_time] + 1) > backlight_time_count){
				backlight_time_count++;
			}

		}

		/* SLEEP Check Function */
		if(time_sleep_off){
			sleepoff_time_count++;

			SLEEP_Message();
		}
#ifdef LYRIC_FUNC

		if((Is_LRC_file == LYRIC_YES_DIS_YES) && vbr_bitrate){

			vbr_liyric_time++;

			if(init_lyric){
				init_lyric = 0;
				vbr_liyric_time -= 1;
			}

		}
#endif
	}

	pre_rtc_value = cur_rtc_value;
#endif
}


#ifdef NETSYNC_INCLUDE

void Netsync_Resume_Init(void){

	xdata _fileio nFileIO;
	xdata _fileio *npFileIO = &nFileIO;
	xdata UINT8 *DMA_SECTOR_BUFF0 = ((unsigned char volatile xdata *)(BUFFER0+0x10000));

	npFileIO->cluster = netsync_start_clus;

	set_sector_range(npFileIO);

	B0_Size(512);

	LRead_SectorCloseEcc(DMA0, npFileIO->sector_cur, DATA_REMAP);

	NED_CheckDrm(&gNEDInfo, DMA_SECTOR_BUFF0);

	if( 1 == gNEDInfo.CONT.DrmFlag && 0 == gNEDInfo.nErrCode )
		B0_Reset();

	B0_Size(512);

}

#endif

UINT8 MP3_Decoding(void)
{ 


#ifdef FADE_IN_FUNC
	audio_fad = 1;
#endif

	bat_check_cnt = 0;
	previous_bat_value = 0x0f;
	key_check = 0;

#ifdef MEDIASYNC_INCLUDE
	bIsLyricst = 0;
	if(Is_LRC_file == LYRIC_YES_DIS_YES)
		fnMediaSyncDecInitLyric(1, 1, 4, 16);
#endif

#ifdef LYRIC_FUNC
	fnMediaSyncInitLyric();
#endif

#ifdef XSYNC_INCLUDE

	if(file_type == FILE_MTX)
	{
		// 16byte key...
		// 父距 16byte 焊促 累阑 版快俊绰 唱赣瘤绰 0肺 檬扁拳...
		fnXSyncDecInitialize();
	}		
#endif


#ifdef NETSYNC_INCLUDE

	if(	netsync_resume == 1 && netsync_start_clus != 0 ){

		netsync_resume = 0;

		Netsync_Resume_Init();

	}

#endif

	FILE_INFO.DecTime = 0;

	AB_REPEAT.mode = 0;
	AB_REPEAT.start_cluster = 0;
	AB_REPEAT.end_cluster = 0;

	file_total_sector = (File_Size+511)>>9;

	#if defined L320x240
	bar_temp = (File_Size>>9)/190;
	#elif defined L128x128
	bar_temp = (File_Size>>9)/79;
	#elif defined L96x64
	bar_temp = (File_Size>>9)/42;
	#elif defined MONO_LCD
	bar_temp = (File_Size>>9)/80;
	#endif
	cur_bar_pos = pre_bar_pos = FILE_INFO.DecodingSectorCnt/bar_temp;
	#if defined L320x240
	if(sub_mode_in_play == DEC_DEC) {
		d_DisplayBar(cur_bar_pos);
	}
	#else
	if((sub_mode_in_play == DEC_DEC) && (Is_LRC_file != LYRIC_YES_DIS_YES)) {
		d_DisplayBar(cur_bar_pos);
	}
	#endif

//DecodingStart:

	pre_DecodingSectorCnt = 0;
	pre_DecodingSectorCnt1 = 0;

	IMAGE_INFO.Info.bc.b1 = 0;

	current_key = KEY_NONE;

	if(ff_rew_course == SEQ_FAST_REW) {

		ET0 = 0;

		REW_Search(0, 20);

		ET0 = 1;

	}

	set_sector_range(pFileIO);

	Mp3_Reset();

	vol_step_up = 0;

	setVolume(vol_step_up);

/***********************************************************************/
	Volume_Setting(0x7f);
/***********************************************************************/
	Mp3_Mute_Off();//START provide MCLK

	#ifdef CLASS_D_AMP

	if(codec_ctrl){

		codec_ctrl = 0;

		write_XDATA(AUDIO_CODEC_INTERFACE_CONTROL, 0x01);//0xFA10

		write_XDATA(AUDIO_PLL_CONTROL, 0x04);		//Audio pll control

		uDelay(0x7000);					// Wait until AUDIO PLL STABLE
		write_XDATA(CLASSD_SOUND_CONTROL, 0x43);    //POWER UP DAMP POWER FET
	   	write_XDATA(CLASSD_RAMPFUNC_CONTROL, 0xC8); //RAMP UP SETTING

		write_XDATA(CLASSD_SYSTEM_CONTROL, 0x0B);  	//POWER UP
		uDelay(0x7fff);					// Wait until
		uDelay(0x7fff);					// Wait until
		uDelay(0x7fff);					// Wait until
		uDelay(0x7fff);					// Wait until PWM 0% 0 -> 50%
		uDelay(0x7fff);					// Wait until
		uDelay(0x7fff);					// Wait until

		if(FILE_INFO.HEADER.SamplingFreq>=32000) write_XDATA(CLASSD_SYSTEM_CONTROL, 0x38);
		else if(FILE_INFO.HEADER.SamplingFreq>=16000) write_XDATA(CLASSD_SYSTEM_CONTROL, 0x39);
		else write_XDATA(CLASSD_SYSTEM_CONTROL, 0x3A);
	
		write_XDATA(CLASSD_SOUND_CONTROL, 0x43);
	   	write_XDATA(CLASSD_RAMPFUNC_CONTROL, 0x30);
		write_XDATA(CLASSD_RAMP_ENDPOINT, 0x73);	
		write_XDATA(CLASSD_OUTBUF_CONTROL, 0xCF);
		write_XDATA(CLASSD_RESERVED, 0x00);
		write_XDATA(CLASSD_POWERDOWN_INIT, 0x00);
		write_XDATA(CLASSD_FAULT_INIT, 0x00);

	}
	else{

		if(FILE_INFO.HEADER.SamplingFreq>=32000) write_XDATA(CLASSD_SYSTEM_CONTROL, 0x38);
		else if(FILE_INFO.HEADER.SamplingFreq>=16000) write_XDATA(CLASSD_SYSTEM_CONTROL, 0x39);
		else write_XDATA(CLASSD_SYSTEM_CONTROL, 0x3A);

	}
	#else
	//Add Up register in NX5858
	//------------------------------------------------------------------------
		write_XDATA(SYS_PIN_CONTROL,0x10);//0xFF05 I2S Mode Enable
		write_XDATA(AUDIO_PLL_CONTROL, 0x00);//0xFF15
	//------------------------------------------------------------------------
		write_XDATA(AUDIO_CODEC_INTERFACE_CONTROL, 0x2A);//0xFA10

		if(codec_ctrl){
			codec_ctrl = 0;
			Codec_DEC_Initial2();
			Codec_Reg_Set(WM_ADC_DAC_CONTROL, 0x80);
		}

	#endif

	MP3_Decoder_Start();

	EqulizerBand_Set();

	EQ_mode_set(eq_mode);//WM8750 EQ

#ifdef BEEP_FUNC
	if(beep_count) {
		Play_Beep(beep_count);
		beep_count = 0;
	}
#endif

	check_eq_start = 1;
	check_eq_end = 0;
	eqtime = 0;
	eq_graph_enable = 0;

	B0_Size(512);

	Change_PlaySpeed(play_speed);

	pre_HEADER_SamplingFreq = FILE_INFO.HEADER.SamplingFreq;

#ifdef LYRIC_FUNC

	Vbr_Lyric_Init();

#endif

	while(!getIsEOF(pFileIO->cluster)) {

		if(decode_state == DECODE_STATE){
#ifdef DEC_TEST
			xdata UINT8 file_process = 0;

			do{

				 file_process = File_Control_Message(file_process);
		
			}while(file_process < 4);


			if(file_process == 5)//	END OF FILE
				break;

			Other_process = 1;

#else
			File_Control_Message();

#endif

		}

		if(vol_mask_init){
			Volume_Mask_Message();//For Volume Mask
		}

		#ifdef FADE_IN_FUNC
			FAD_IN_Message();
		#endif

		if(Other_process) {		
					
			if(sub_mode_in_play == DEC_DEC) {
				DEC_Message();
			}
			else if(sub_mode_in_play == DEC_MENU) {
				Menu_Message();
			}
			else if(sub_mode_in_play == DEC_NAV) {
				NAV_Message();
			}
			else if(sub_mode_in_play == DEC_TRAN) {
				TRAN_Message();
			}

			AB_Repeat_Message();

			if(sub_mode_in_play != DEC_DEC){

				if(sub_mode_in_play == DEC_TRAN2)
					sub_mode_in_play = DEC_DEC;

			}

			if(Intro_Message())
				goto DecodingEnd;

			RTC_Message();

			EL_LIGHT_Message();

		}//end of if(Other_process)
		#if defined L320x240
		if((sub_mode_in_play == DEC_DEC) && (decode_state != MODE_EXIT_STATE) && (LcdOnOff_Status == LCD_DISPLAY_ON)){
			if(check_eq_end){
				check_eq_end = 0;
				EQ_Display();
			}
		}
		#elif defined L128x128
		if(((Is_LRC_file != LYRIC_YES_DIS_YES) && sub_mode_in_play == DEC_DEC) && (decode_state != MODE_EXIT_STATE)){
			if(check_eq_end){
				check_eq_end = 0;
				EQ_Display();
			}
		}
		#endif

		if(sub_mode_in_play == DEC_MENU || sub_mode_in_play == DEC_NAV) {
			if(check_10SEC_end){
				check_10SEC_end = 0;
				sub_mode_in_play = DEC_TRAN;
			}
		}
		
		if(USB_Message())
			goto DecodingEnd;


		if (key_check == 1) {
			goto DecodingEnd;
		}


		if(sub_mode_in_play != DEC_MENU){
			if(	pre_HEADER_SamplingFreq != FILE_INFO.HEADER.SamplingFreq){
				Change_PlaySpeed(play_speed);
			}
		}

		if(read_XDATA(AUDIO_CODEC_STATUS)&0x04)
			check_MP3_header();//Don't use this function!!!

		pre_HEADER_SamplingFreq = FILE_INFO.HEADER.SamplingFreq;

		if(Battery_Message())
			goto DecodingEnd;

	}//end while(!getIsEOF(FILE_INFO.DecodingCluster))


	setVolume(0);

/*
	if(AB_REPEAT.mode == 1) {
		AB_REPEAT.mode = 2;

		if(sub_mode_in_play == DEC_DEC && Is_LRC_file != LYRIC_YES_DIS_YES)
			Lcd_AB(AB_ICON);
		FILE_INFO.DecodingSectorCnt = AB_REPEAT.data_cnt ;

		if(Is_LRC_file != LYRIC_YES_DIS_YES)
			Lcd_Time(playtime_mode, 1);

		AB_REPEAT.end_cluster = pre_cluster;
		FILE_INFO.DecodingCluster = AB_REPEAT.start_cluster;
		DeEndSector = DeSector + BootSector.BPB_SecPerClus;

		Dma_To_Flash_Close();
		Dma_To_Mp3_Close();

		Decoder_Encoder_Stop();

		goto DecodingStart;
	}
*/

	decode_state = FF_REW_STATE;

	Repeat_Message(0);

DecodingEnd:

	DecodingEnd_Message();

	return(decode_state);
}

#ifdef LYRIC_FUNC
void LyricTestFunction(void)
{
	if(Is_LRC_file == LYRIC_YES_DIS_YES){

		if(!bLyricst_fire){
			getLyricString(0);
		}else{
			LyricDisplay();
		}

	}
}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -