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

📄 nx58_dec.c

📁 MP4 CODE IS GOOD ,NX5858 SKYLARK
💻 C
📖 第 1 页 / 共 4 页
字号:
//#################################################
// NX5858 MP3 Demo program
// Contents         : MP3 Decoding Function 
// Hardware model 	: NX5858 Demo Board
// Main CPU      	: STANDARD 8032
// Compiler   		: Keil uVision2 
//
// Copyrigt 		: NEXIA Device. INC
// Date    			: 2005. 8.20
// Last modifier 	: 2005.  . 
// File name		: NX58_dec.c
//#################################################

#include "dec_extern.h"

#define DEC_TEST

#ifdef CLASS_D_AMP
code unsigned char nx5858_vol_value[31] = {
	0x7F, 0x58, 0x54, 0x50, 0x4C, 0x49, 0x46, 0x43, 0x40, 0x3D, 0x3A,
	0x37, 0x34, 0x31, 0x2E, 0x2B, 0x28, 0x25, 0x23, 0x21, 0x1F, 
	0x1D, 0x1B, 0x19, 0x17, 0x15, 0x14, 0x13, 0x12, 0x11, 0x10, 
};
#endif

xdata UINT8 vol_mask_init = 1;
xdata UINT32 pre_DecodingSectorCnt;
xdata UINT32 pre_DecodingSectorCnt1;
#ifdef FADE_IN_FUNC
xdata UINT8 audio_fad;
#endif

xdata UINT8 eq_graph_enable;

/************************************************/
xdata UINT8 key_check;	//
xdata _fileio *pFileIO = &FILE_INFO.FileIO;//NAV 
#ifndef G5_BOARD
xdata UINT8 current_bat_value, previous_bat_value;
#else
xdata UINT8 previous_bat_value;
#endif

xdata UINT8 Other_process;
xdata UINT32 pre_cluster;
xdata UINT8	vol_step_up;
xdata UINT8 pre_rtc_value;
xdata UINT8 bat_check_cnt;
xdata UINT8 pre_HEADER_SamplingFreq;

#ifdef FIVE_KEY_VER
idata bit vol_change=0;
#endif

#ifdef LYRIC_FUNC
xdata UINT8 init_lyric;
#endif


void LyricTestFunction(void);


#ifdef LYRIC_FUNC
void Vbr_Lyric_Init(void){			

	if((Is_LRC_file == LYRIC_YES_DIS_YES) && vbr_bitrate){
		xdata UINT16 kkk;

		kkk = (((FILE_INFO.DecodingSectorCnt*12)/125)/vbr_bitrate);
		vbr_liyric_time = ((FILE_INFO.DecodingSectorCnt*4)/vbr_bitrate) + kkk;

		init_lyric = 1;

	}

}
#endif

#ifdef FADE_IN_FUNC
void FAD_IN_Message(void){

	if(audio_fad) {
		audio_fad = 0;
		in_volume_value = 0x7f;
		if(FILE_INFO.HEADER.stereo)
			want_volume_value = 0x10;
		else
			want_volume_value = 0x10;
		#ifdef CLASS_D_AMP
			fade_in = 0;
		#else
			fade_in = 1;
		#endif
	}

}
#endif

void setVolume(UINT8 vol_value)
{
	#ifdef CLASS_D_AMP
	Volume_Setting(nx5858_vol_value[vol_value]);
	#else
	Codec_OUT1_Volume_Control(vol_value);
	#endif

}

void Dec_Get_Next_Cluster()
{
	xdata _fileio *pFileIO = &FILE_INFO.FileIO;

	pFileIO->cluster = get_next_cluster(FAT0, pFileIO->cluster);
	pFileIO->sector_cur = getFirstSectorofCluster(pFileIO->cluster);	

	if(file_total_sector < FILE_INFO.DecodingSectorCnt+BootSector.BPB_SecPerClus)
		pFileIO->sector_end = pFileIO->sector_cur + (file_total_sector - FILE_INFO.DecodingSectorCnt);
	else
		pFileIO->sector_end = pFileIO->sector_cur + BootSector.BPB_SecPerClus;
}

void Dec_Lcd_Init()
{

	if(Is_LRC_file != LYRIC_YES_DIS_YES){
		#if defined L128x128 || defined L320x240
			LcdDisplayImage(IMG_MP3_BG);
			LoadBackGroundColor(IMG_MP3_BG_BACKGROUND);
		#endif
	}
	else {
		#if defined L128x128 || defined L320x240
			LcdDisplayImage(IMG_LYRIC_BG);
			LoadBackGroundColor(IMG_LYRIC_BG_BACKGROUND);
		#endif
	}

	#if defined L128x128 || defined L320x240

		UI_DISPLAY(UI_VOLUME, volume_value);

		#ifdef FIVE_KEY_VER
		LcdDisplayImage(IMG_VOLUME);
		#endif
		
		UI_DISPLAY(UI_AB, AB_REPEAT.mode);
		UI_DISPLAY(UI_BATTERY, Check_BAT());

	#endif

	if(Is_LRC_file != LYRIC_YES_DIS_YES){

		#if defined L320x240

			UI_DISPLAY(UI_TRACK, DONTCARE);
			UI_DISPLAY(UI_BITRATE, DONTCARE);

			if(decode_state == DECODE_STATE){
				UI_DISPLAY(UI_PLAYMODE,ICON_PLAY);
			}else{
				UI_DISPLAY(UI_PLAYMODE,ICON_PAUSE);
			}

			UI_DISPLAY(UI_DEC_TIME, 0);

			UI_DISPLAY(UI_FILETYPE, file_type);//mp3
			UI_DISPLAY(UI_EQ, eq_mode);
			UI_DISPLAY(UI_REPEAT,repeat_mode);
		#elif defined L128x128
			if(eq_graph_enable){
				LcdDisplayImage(IMG_EQ_GRAPH_RIGHT);
			}
			else{
				LcdDisplayImage(IMG_BPS_TRACK_RIGHT);
				UI_DISPLAY(UI_TRACK, DONTCARE);
				UI_DISPLAY(UI_BITRATE, DONTCARE);
			}

			if(decode_state == DECODE_STATE){
				UI_DISPLAY(UI_PLAYMODE,ICON_PLAY);
			}else{
				UI_DISPLAY(UI_PLAYMODE,ICON_PAUSE);
			}

			UI_DISPLAY(UI_DEC_TIME, 0);

			UI_DISPLAY(UI_FILETYPE, file_type);//mp3
			UI_DISPLAY(UI_EQ, eq_mode);
			UI_DISPLAY(UI_REPEAT,repeat_mode);
		#elif defined L96x64
			LcdDisplayImage(IMG_MP3_BACK_PAPER, 0, 0, 96, 64);
			LoadBackGroundColor(IMG_MP3_BACKGROUND);
			LCD_UI_Init();
		#elif defined MONO_LCD
			UI_DISPLAY(UI_TRACK, DONTCARE);
			UI_DISPLAY(UI_BITRATE, DONTCARE);

			UI_DISPLAY(UI_VOLUME, volume_value);
			UI_DISPLAY(UI_PLAYMODE,ICON_PLAY);	
			UI_DISPLAY(UI_FILETYPE, file_type);//mp3

		#endif

		if(sub_mode_in_play == DEC_DEC) {
			#if defined L128x128 || defined L320x240
				UI_DISPLAY(UI_FILETYPE, file_type);//MP3
			#elif defined L96x64
				UI_DISPLAY(UI_FILETYPE, file_type);
			#endif
		}
	#if defined L128x128
	#elif defined L96x64
		UI_DISPLAY(UI_PLAYSPEED, play_speed);

		if(AB_REPEAT.mode)	// if AB_REPEAT.mode != 0
			UI_DISPLAY(UI_AB, AB_REPEAT.mode-1);
		else
			UI_DISPLAY(UI_REPEAT,repeat_mode);
	#endif
	
#if defined L320x240
	Lcd_Dis_Dir(44, IMAGE_BUFF1, F_WHITE);
#elif defined L128x128
	Lcd_Dis_Dir(21, IMAGE_BUFF1, F_WHITE);
#elif defined L96x96
		Lcd_Dis_Dir(21, IMAGE_BUFF1, F_BLACK); 
#elif defined L96x64
#elif defined MONO_LCD
		LcdDisplayImage(IMG_PMODE_MUSIC);
		Lcd_Dis_Dir(2, IMAGE_BUFF1, F_WHITE);
#endif		

	}
	else {
		#if defined L320x240
			UI_DISPLAY(UI_TRACK, DONTCARE);
			UI_DISPLAY(UI_BITRATE, DONTCARE);

			if(decode_state == DECODE_STATE){
				UI_DISPLAY(UI_PLAYMODE,ICON_PLAY);
			}else{
				UI_DISPLAY(UI_PLAYMODE,ICON_PAUSE);
			}

			UI_DISPLAY(UI_DEC_TIME, 0);

			UI_DISPLAY(UI_FILETYPE, file_type);//mp3
			UI_DISPLAY(UI_EQ, eq_mode);
			UI_DISPLAY(UI_REPEAT,repeat_mode);


		#endif
	}

}

UINT8 EL_Off_Check(void){


	if(el_time) {

		#ifdef G5_BOARD
		if ((BACKLIGHT_TIME[el_time] < backlight_time_count) || (LcdOnOff_Status == LCD_DISPLAY_OFF))
		#else
		if(BACKLIGHT_TIME[el_time] < backlight_time_count)
		#endif	
		{
			backlight_time_count = 0;
			current_key = KEY_NONE;
			LcdDisplayOn(LCD_DISPLAY_ON);	//DISPLAY ON

			#ifdef G5_BOARD
			BACKLIGHT_ON;
			#endif

			#if defined L320x240
				Set_System_Clk(SC96M);
			#endif
			return 0;
		}
		else
			backlight_time_count = 0;
	}


}

void Repeat_Message(UINT8 force){

	switch(repeat_mode) {

		case 0:// normal
		 	ff_rew_course = SEQ_NEXT_DSC;
			break;
	
		case 1:	// repeat one
			if(force)
			 	ff_rew_course = SEQ_NEXT_DSC;
			else
				ff_rew_course = CURRENT;
			break;
	
		case 2:	// repeat in folder
			ff_rew_course =	SEQ_NEXT_FOLDER;
			break;
	
		case 3:	// all folder repeat
		 	ff_rew_course = SEQ_NEXT_DSC;
			break;
	
		case 4:// random repeat in folder
			ff_rew_course = RND_IN_ONE;
			break;
	
		#ifdef G5_BOARD
		case 5:// intro in all folder
		 	ff_rew_course = SEQ_NEXT_DSC;
			break;
		#else
		case 5:// random repeat in all folder
			ff_rew_course = RND_IN_TOT;
			break;
	
		case 6:// intro in all folder
		 	ff_rew_course = SEQ_NEXT_DSC;
			break;
		#endif
	}
}


UINT8 check_decode_key()
{
	xdata _subdir_navi *SubDirInfo = ((_subdir_navi volatile xdata *)(SUBDIR_BUFF+0x10000));
	xdata _subdir_navi *NAV_SubDirInfo = ((_subdir_navi volatile xdata *)(NAV_SUBDIR_BUFF+0x10000));


	if(KEY.bc.bPUSH) {

		KEY.bc.bPUSH = 0;
	
		EL_Off_Check();

		if(AB_REPEAT.mode != 0) {
			switch(current_key) {
			case KEY_VOLUP:
			case KEY_VOLDN:
			case KEY_REC://A_B repeat
			case KEY_PLAY:
			case KEY_LPLAY:
			case KEY_FF:
			case KEY_REW:
			case KEY_LMODE:
			case KEY_MODE: break;
			default:
				KEY.bc.bPUSH = 0;
				return 0;
				break;
			}
		}

		#ifdef G5_BOARD
		if(repeat_mode == 5)
		#else
		if(repeat_mode == 6)
		#endif
		{
			switch(current_key) {
			case KEY_FF:
			case KEY_REW:
			case KEY_LFF:
			case KEY_LREW:

			#if defined FIVE_KEY_VER
            		case KEY_ESC:
			#endif

				repeat_mode = 0;
				UI_DISPLAY(UI_REPEAT,repeat_mode);
				KEY.bc.bPUSH = 0;
				return 0;
				break;
			}
		}


		if(decode_state == PAUSE_STATE){
			switch(current_key) {
#ifndef IDLE_STOP_MODE
			case KEY_FF:
			case KEY_REW:
#endif

			#if defined FIVE_KEY_VER
            		case KEY_ESC:
			#endif

			case KEY_LFF:
			case KEY_LREW:
			case KEY_REC://A_B repeat
				KEY.bc.bPUSH = 0;
				return 0;
				break;
			}
		}

		switch(current_key) {
			
		#if defined FIVE_KEY_VER
        	case KEY_ESC:
	             	vol_change=~vol_change;
			if (!vol_change)
				LcdDisplayImage(IMG_VOLUME);
			else
	 			UI_DISPLAY(UI_VOLUME, volume_value);
	             	break;
		#endif

		case KEY_REW:
			#if defined FIVE_KEY_VER
             		if(!vol_change){
			#endif

#ifdef IDLE_STOP_MODE
			if(decode_state == PAUSE_STATE){

				sub_mode_in_play = DEC_DEC;
				FuncInMode = PAUSE_STATE;
				decode_state = MODE_EXIT_STATE;
				ff_rew_course = CURRENT;	// 泅犁邦栏肺...
				return 1;
			}
#endif

			#ifndef G5_BOARD
			if(FILE_INFO.DecodingSectorCnt/FILE_INFO.HEADER.BufcntInSec > 3){ 
				 ff_rew_course = CURRENT;
			}
			else{
				switch(repeat_mode) {
					case 0://"N" Normal
					case 1://"1" repeat one
					case 3://"A" All folder repeat
				 		ff_rew_course = SEQ_REW;
						break;
	
					case 2://"F" folder repeat //弃歹 郴俊辑父 ..
						ff_rew_course = SEQ_PREV_FILE;
						break;
				
					case 4://"S.F" random folder repeat
							ff_rew_course = RND_IN_ONE;
						break;
				
					case 5://"S.A" all folder repeat
							ff_rew_course = RND_IN_TOT;
						break;
				}
			}
			#else
    			ff_rew_course = SEQ_REW;
			#endif
			
			decode_state = FF_REW_STATE;
			KEY.bc.bPUSH = 0;
			return 1;

			#if defined FIVE_KEY_VER
	             	}
	             	else
			{
					if(volume_value <= 1){
						volume_value = 0;
						Mp3_Mute_On();
					}
					else{
						volume_value --;
					}
		
					setVolume(volume_value);
		
					display_update = 3;
					UI_DISPLAY(UI_VOLUME, volume_value);
	             	}
            		break;
			#endif

		case KEY_FF:
			#if defined FIVE_KEY_VER
             		if(!vol_change){
			#endif

#ifdef IDLE_STOP_MODE
			if(decode_state == PAUSE_STATE){

				sub_mode_in_play = DEC_DEC;
				FuncInMode = PAUSE_STATE;
				decode_state = MODE_EXIT_STATE;
				ff_rew_course = CURRENT;	// 泅犁邦栏肺...
				return 1;
			}
#endif

			decode_state = FF_REW_STATE;
			#ifndef G5_BOARD
			Repeat_Message(1);
			#else
      			ff_rew_course = SEQ_NEXT_DSC; 
			#endif

			KEY.bc.bPUSH = 0;
			return 1;

			#if defined FIVE_KEY_VER
	             	}
	             	else
			{
					volume_value ++;
		
					if(volume_value > VOL_MAX_VALUE)
						volume_value = VOL_MAX_VALUE;
					else if(volume_value == 1)
						Mp3_Mute_Off();
		
					setVolume(volume_value);
		
					display_update = 3;
					UI_DISPLAY(UI_VOLUME, volume_value);
	             	}
			break;
			#endif

		#ifndef FIVE_KEY_VER
		case KEY_LVOLUP:
		case KEY_VOLUP:
			volume_value ++;

			if(volume_value > VOL_MAX_VALUE)
				volume_value = VOL_MAX_VALUE;
			else if(volume_value == 1)
				Mp3_Mute_Off();

			setVolume(volume_value);

			display_update = 3;
			UI_DISPLAY(UI_VOLUME, volume_value);
			break;

		case KEY_LVOLDN:
		case KEY_VOLDN:

			if(volume_value <= 1){
				volume_value = 0;
				Mp3_Mute_On();
			}
			else{
				volume_value --;
			}

			setVolume(volume_value);

			display_update = 3;
			UI_DISPLAY(UI_VOLUME, volume_value);
			break;
		#endif

		case KEY_REC:

			if (AB_REPEAT.mode == 0){
				AB_REPEAT.mode = 1;
			}
			else if (AB_REPEAT.mode == 1){		
				AB_REPEAT.mode = 2;
				AB_REPEAT.end_cluster = FILE_INFO.FileIO.cluster;
			}
			else if (AB_REPEAT.mode == 2){
				AB_REPEAT.mode = 0;
			}
 			#ifndef L320x240
			if(Is_LRC_file != LYRIC_YES_DIS_YES){
			#endif
				#if defined L128x128 || defined L320x240
					UI_DISPLAY(UI_AB, AB_REPEAT.mode);
				#elif defined L96x64
					UI_DISPLAY(UI_REPEAT,repeat_mode);
				#endif
			#ifndef L320x240
			}
 			#endif
			break;

		case KEY_LFF:
			#if defined FIVE_KEY_VER
             		if(!vol_change){
			#endif

			Mp3_Mute_On();
			Dma_B0_PERI2RAM_Close();
			Dma_B0_RAM2PERI_Close();

			if(Is_LRC_file != LYRIC_YES_DIS_YES){
				UI_DISPLAY(UI_PLAYMODE, ICON_FF);
				scrolltitle(SCROLL_PAGE1, 0, BG_COLOR, F_WHITE);
				scrolltitle(SCROLL_PAGE2, 1, BG_COLOR, F_WHITE);
			}
			while(KEY.bc.bFF) {

				if(FF_Search( 20)){
					ff_rew_course = SEQ_FAST_NEXT;
					decode_state = FF_REW_STATE;
					return 1;
				}
				#ifndef L320x240
				if(Is_LRC_file != LYRIC_YES_DIS_YES){
				#endif
					if(UI_DISPLAY(UI_DEC_TIME, 1));
					else {
						#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;

⌨️ 快捷键说明

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