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

📄 chp_dl_media_from_host.c

📁 C625 host控制源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
	dl_media_iou_int_disable();
	dl_media_callback.cmd_callback = NULL;
	ret = dl_media_send_cmd(DL_MEDIA_CMD_MP3_STOP, NULL);
	if (ret != DL_MEDIA_RET_SUCCESS) 
		return ret;
	ret =dl_media_iou_read_frame((UINT8*)&dl_media_frame);
	FATAL_ERROR_TO_RESET(ret);
	while(dl_media_frame.type == IOU_FRAME_OFFSET_SIZE)
	{
		dl_media_host_data.offset = dl_media_frame.value[2]<<16 | dl_media_frame.value[1];
		if (dl_media_frame.value[0] == 0)
			dl_media_host_data.offsize = dl_media_host_data.offset;
		else if (dl_media_frame.value[0] == 1)
			dl_media_host_data.offsize += dl_media_host_data.offset;
		else if (dl_media_frame.value[0] == 2)
			dl_media_host_data.offsize = dl_media_host_data.size - dl_media_host_data.offset;
		p_buffer = dl_media_host_data.p_buffer + dl_media_host_data.offsize;
		dl_media_host_data.wsize = (dl_media_frame.size_hi << 16) | dl_media_frame.size_low;
		if (dl_media_host_data.wsize != 0)
	{
		#ifndef CHP_BIG_ENDIAN
			ret = dl_media_iou_write_data(p_buffer, dl_media_host_data.wsize);
		#else
			ret = dl_media_iou_write_data_for_big_endian(p_buffer, dl_media_host_data.wsize);
		#endif
			
			dl_media_host_data.offsize += dl_media_host_data.wsize;
		}
		ret =dl_media_iou_read_frame((UINT8*)&dl_media_frame);		
	FATAL_ERROR_TO_RESET(ret);
	}
	if (dl_media_frame.type == IOU_FRAME_ARM_RSP)
	{
		if (dl_media_frame.rsp == RSP_MP3_PLAY_OVER||
			dl_media_frame.rsp == RSP_SUCCESS)
			return DL_MEDIA_RET_SUCCESS;
		else
			return DL_MEDIA_RET_FAIL;
	}
	return DL_MEDIA_RET_FAIL;
}

DL_MEDIA_RET_T dl_media_host_kara_play(void *p_buffer, UINT32 length)
{
	DL_MEDIA_RET_T ret;	
	UINT8 *p_mp3 = 	NULL;
	UINT8 *p_temp = p_buffer;
	UINT32 lengthofhead=0,lengthoflyric=0,lengthofmidi=0,lengthofmp3=0;
	UINT8 i=0;
	MEDIA_MUSIC_INFO_T  midi_info;
	

	
//	sys_printf("    dl_media_host_kara_play-- mini-KTV Test\n");
	
	p_temp+=4;
	for(i=0; i<4; i++)
	{
		lengthofhead += ((UINT32)p_temp[i]) << (i*8);
	}
	//sys_printf("\nlengthofhead =0x%x\n", lengthofhead);

       p_temp = p_temp +4 + lengthofhead +4;
		for(i=0; i<4; i++)
		{
		lengthoflyric += ((UINT32)p_temp[i]) << (i*8);
		}
	//sys_printf("\nlengthoflyric =0x%x\n", lengthoflyric);
	   
	p_temp = p_temp + 4 + lengthoflyric +4;	 
		for(i=0; i<4; i++)
		{
		lengthofmidi += ((UINT32)p_temp[i]) << (i*8);
	}
	sys_printf("\nlengthofmidi =0x%x\n", lengthofmidi);
	
       p_mp3 = p_temp + 4 + lengthofmidi+4+4;
       p_temp = p_temp + 4 + lengthofmidi +4;
		for(i=0; i<4; i++)
		{
		lengthofmp3 += ((UINT32)p_temp[i]) << (i*8);
		}
//	sys_printf("\nlengthofmp3 =0x%x\n", lengthofmp3);
	KTV_Play_Flag = 1;
	KTV_Over_Check =0;
	//play mp3
	ret=dl_media_host_mp3_play(p_mp3, lengthofmp3);
	
       //play midi
       midi_info.music_buf = p_buffer;
       midi_info.size = lengthofmidi;
       dl_media_midi_init();
	ret=dl_media_midi_play(&midi_info, dl_media_midi_callback,1, NULL);
	//sys_printf("\ndl_media_midi_play ret =%d\n", ret);
	//dl_media_midi_play(&midi_info, NULL, NULL);


	//play lyric
	dl_media_lyric_init(p_buffer);	
	{
		/*add code to start a timer to play lyric infomation*/
		/*the follow code is just demo to print the lyric infomation to Hyper Terminal */
	#if 0
		while(1){
			p_mmd_lyric_info->lyric_timer_tick_cnt = 3* p_mmd_lyric_info->tempo;
			p_mmd_lyric_info->old_time_cnt += p_mmd_lyric_info->lyric_timer_tick_cnt;
			if(dl_media_lyric_update()==DL_LYRIC_OVER)
				break;
		}
	#endif
	}	
	
	//dl_media_line_in_open();
	return ret;
}

DL_MEDIA_RET_T dl_media_host_kara_pause(void)
{
	DL_MEDIA_RET_T ret;
//	sys_printf("    dl_media_host_kara_pause-- mini-KTV Test\n");
	//dl_media_line_in_close();
	ret = dl_media_host_mp3_pause();
	ret = dl_media_midi_pause();
	return ret;
}

DL_MEDIA_RET_T dl_media_host_kara_resume(void)
{
	DL_MEDIA_RET_T ret;
//	sys_printf("    dl_media_host_kara_resume-- mini-KTV Test\n");

	ret = dl_media_host_mp3_resume();
	ret = dl_media_midi_resume();
	//dl_media_line_in_open();
	return ret;
}

DL_MEDIA_RET_T dl_media_host_kara_stop(void)
{
	DL_MEDIA_RET_T ret;
	//dl_media_line_in_close();
	ret = dl_media_host_mp3_stop();
	ret = dl_media_midi_stop();
	KTV_Play_Flag = 0;
	KTV_Over_Check =0;
	return ret;
}

#ifdef MPEG4_MODULE_ENABLE
static DL_MEDIA_MPG4_MUSIC_T   music_type  = MPG4_NO_MUSIC;
DL_MEDIA_RET_T dl_media_host_mp4_play(void *p_buffer, UINT32 length)
{
	DL_MEDIA_RET_T ret;	
	UINT8 *p_temp = p_buffer;
	UINT32 lengthofhead=0,lengthofmidi=0,lengthofadpcm=0,lengthofmjp=0;
	UINT8 i=0;
	MEDIA_MUSIC_INFO_T  midi_info;
	UINT8 *pMidi = NULL;
	UINT8 *pAdpcm = NULL;	
	UINT8 *pMjp = NULL;
	UINT8 midistr[4] = {0x4d, 0x4d, 0x64, 0x64};
	UINT8 adpstr[4] = {0x43, 0x41, 0x44, 0x50};
       music_type  = MPG4_NO_MUSIC;
	
//	sys_printf("    dl_media_host_mp4_play-- mp4 Test\n");

	p_temp+=4;	
	//lengthofhead = *(UINT32*)p_temp;	
		for(i=0; i<4; i++)
		{
			lengthofhead +=p_temp[i]<<(i*8);
		}
//	sys_printf("=====lengthofhead = 0x%x\n",lengthofhead);
       p_temp = p_temp +4 + lengthofhead ;
	   music_type = MPG4_NO_MUSIC;
	if (!dl_media_memcmp(p_temp, midistr, sizeof(midistr)))
	{
		p_temp += 4;
		//lengthofmidi = *(UINT32*)p_temp;
		for(i=0; i<4; i++)
		{
			lengthofmidi +=p_temp[i]<<(i*8);
		}		
		p_temp += 4;
		if (lengthofmidi != 0)
		{
			music_type = MPG4_MIDI_AS_MUSIC;
			pMidi = p_temp;			
		}		
		p_temp+=lengthofmidi;
	}
	if (!dl_media_memcmp(p_temp, adpstr, sizeof(adpstr)))
	{
		p_temp += 4;
		//lengthofadpcm = *(UINT32*)p_temp;
		for(i=0; i<4; i++)
		{
			lengthofadpcm += ((UINT32)p_temp[i]) << (i*8);
		}		
	//	 sys_printf("=====lengthofadpcm = 0x%x\n",lengthofadpcm);
		p_temp += 4;
		if (lengthofadpcm != 0)
		{
		     if(music_type == MPG4_NO_MUSIC)
			music_type = MPG4_ADPCM_AS_MUSIC;
			pAdpcm = p_temp;			
		}				
		p_temp+=lengthofadpcm;
	}      
	
       p_temp+=4;
	//lengthofmjp = *(UINT32*)p_temp;
		for(i=0; i<4; i++)
		{
		lengthofmjp +=  ((UINT32)p_temp[i]) << (i*8);
		}		
//	sys_printf("=====lengthofmjp = 0x%x\n",lengthofmjp);
       pMjp = p_temp + 4 ;       

	//play music
	sys_printf("=====music_type = 0x%x\n",music_type);
	switch (music_type)
	{
		case MPG4_NO_MUSIC:
			break;
		case MPG4_MIDI_AS_MUSIC:
			midi_info.size = lengthofmidi;
			midi_info.music_buf = pMidi;
			ret = dl_media_midi_init();
			ret = dl_media_midi_play(&midi_info, dl_media_midi_callback,1, NULL);
			//sys_printf("\ndl_media_midi_play ret = %d\n", ret);
			break;
		case MPG4_ADPCM_AS_MUSIC:
			midi_info.size = lengthofadpcm;
			midi_info.music_buf = pAdpcm;
			ret = dl_media_adp_init();
			sys_printf("=====dl_media_adp_init = 0x%x\n",ret);
			ret = dl_media_adp_play(&midi_info,dl_media_midi_callback,1, NULL);
			//sys_printf("\ndl_media_adp_play ret = %d\n", ret);
			break;
		default:
			break;
	}
	mp4_mjp_flag = 1; 
       //play mjp
       ret = dl_media_host_mjp_display_start(pMjp,lengthofmjp);
	
	return ret;
}

DL_MEDIA_RET_T dl_media_host_mp4_stop(void)
{
	DL_MEDIA_RET_T ret = DL_MEDIA_RET_SUCCESS;
//	sys_printf("    dl_media_host_mp4_stop-- mp4 Test\n");
	switch (music_type)
	{
		case MPG4_NO_MUSIC:
			break;
		case MPG4_MIDI_AS_MUSIC:
			ret = dl_media_midi_stop();
			break;
		case MPG4_ADPCM_AS_MUSIC:
			ret = dl_media_adp_stop();
			break;
		default:
			ret = DL_MEDIA_RET_FAIL;
			break;
	}
	if(ret) return ret;
	mp4_mjp_flag = 0; 
	ret = dl_media_host_mjp_display_end();
	return ret;
}

#endif

DL_MEDIA_RET_T dl_media_host_sd_read(UINT16 ftype, UINT16 fid, void *p_buffer, UINT32 *p_length)
{
	DL_MEDIA_RET_T ret;
	DL_MEDIA_SD_PARA_T sd_para;
	UINT16 sd_para_buffer[2];
	UINT16 sd_para_len = 0;
	
	dl_media_iou_int_disable();
	sd_para.Sd_File_Type = ftype;
	sd_para.Sd_File_ID = fid;
	dl_media_sd_para(sd_para_buffer, &sd_para_len, &sd_para, 1, 1, 0);
	ret = dl_media_send_cmd(DL_MEDIA_CMD_SD_READ, sd_para_buffer);
	sys_printf("dl_media_send_cmd ret=0x%x\n",ret);
	if (ret != DL_MEDIA_RET_SUCCESS)
		return ret;
	dl_media_delay(1);
	ret = dl_media_host_get_data(p_buffer, p_length);
	dl_media_iou_int_restore();
	return ret;
}


DL_MEDIA_RET_T dl_media_folder_get_filetype(UINT16 *foldername, UINT8 len,UINT16* filetype)
{
	DL_MEDIA_RET_T ret=DL_MEDIA_RET_SUCCESS;
	UINT16 num , *p_data,start_index=0;
	UINT16   rootfolder[20*10+2]={0};
	UINT8 folderlen;
	UINT8 eachlen;
	UINT16 JPG_DEF[3]={'J','P','G'};
	UINT16 MJP_DEF[3]={'M','J','P'};
	UINT16 MP3_DEF[3]={'M','P','3'};
	UINT16 MMD_DEF[3]={'M','M','D'};
	
	*filetype = 0xffff;
	folderlen = len;
	if(folderlen> MEDIA_MAX_NAME_SIZE) folderlen = MEDIA_MAX_NAME_SIZE;

	if(folderlen == 3)   //default folder
	{
		if(!dl_media_strcmp_without_uplower(JPG_DEF,foldername,folderlen))
		{
			*filetype = FILE_TYPE_JPG;
			return ret;
		}
		else if(!dl_media_strcmp_without_uplower(MJP_DEF,foldername,folderlen))
		{
			*filetype = FILE_TYPE_MJP;
			return ret;
		}
		else if(!dl_media_strcmp_without_uplower(MP3_DEF,foldername,folderlen))
		{
			*filetype = FILE_TYPE_MP3;
			return ret;
		}
		else if(!dl_media_strcmp_without_uplower(MMD_DEF,foldername,folderlen))
		{
			*filetype = FILE_TYPE_MMD;
			return ret;
		}
	}	

	do
	{
		ret = dl_media_sd_list(FILE_TYPE_ROOT, start_index, 10, rootfolder);
	if (ret) return ret;
	p_data = rootfolder + 2;
	
	for (num = 0; num < *(rootfolder + 1); num++)
	{
		eachlen = dl_media_ustrlen(p_data+3);
		if(eachlen>MEDIA_MAX_NAME_SIZE) eachlen=MEDIA_MAX_NAME_SIZE;

			if((folderlen == eachlen)&&(*(p_data+14)==1))
		{
			if(!dl_media_strcmp_without_uplower(p_data+3,foldername,folderlen))
			{
				*filetype = *(p_data+1);
					return DL_MEDIA_RET_SUCCESS;
			}
		}
		p_data += sizeof(DL_MEDIA_RSP_COM_LIST_T)/2;
	}	
		start_index=*(p_data-sizeof(DL_MEDIA_RSP_COM_LIST_T)/2)+1;
	}while(*(rootfolder + 1)==10);
	return DL_MEDIA_RET_FAIL;
}

DL_MEDIA_RET_T dl_media_host_sd_write_by_foldername(void *p_buffer, UINT32 length, UINT8 *fname,UINT8 *extname, UINT16* foldername)
{
	DL_MEDIA_RET_T ret;
	DL_MEDIA_SD_SDWRITE_T   sdwrite;
	UINT8 len,i;
	UINT8 createfoldername[8];

	
	len = dl_media_ustrlen(foldername);
	if(dl_media_folder_get_filetype(foldername,len,&sdwrite.file_type)) 
		return DL_MEDIA_RET_FAIL;
	if(sdwrite.file_type == 0xffff)  //the folder not exist
	{
		dl_media_memset(createfoldername,0,8);
		for(i=0;i<8;i++)
		{
			createfoldername[i] =(UINT8) *(((UINT16*)fname) + i);
		}
		if(dl_media_sd_mkdir((DL_MEDIA_SD_MKDIR_T*)createfoldername))
			return DL_MEDIA_RET_FAIL;
		if(dl_media_folder_get_filetype(foldername,len,&sdwrite.file_type))
			return DL_MEDIA_RET_FAIL;
	}
	
	ret = dl_media_chip_patch(PATCH_FSAPP);
	if(ret) return ret;
	
	dl_media_memset((UINT8*)sdwrite.file_name,0,MEDIA_MAX_NAME_SIZE*2);
	dl_media_memset((UINT8*)sdwrite.ext_name,0,MEDIA_MAX_EXT_NAME_SIZE*2);
	len = dl_media_ustrlen((WCHAR*)fname);
	if(len>MEDIA_MAX_NAME_SIZE) len = MEDIA_MAX_NAME_SIZE;
	dl_media_memcpy((UINT8*)sdwrite.file_name,fname,len*2);
	dl_media_memcpy((UINT8*)sdwrite.ext_name,extname,MEDIA_MAX_EXT_NAME_SIZE*2);	
//	dl_media_get_time(&sdwrite.date_time);
	dl_media_iou_int_disable();
	ret = dl_media_send_cmd(DL_MEDIA_CMD_SD_WRITE, (void*)&sdwrite);
	if (ret != DL_MEDIA_RET_SUCCESS)
		return ret;
	dl_media_delay(1);
	ret = dl_media_host_send_data(p_buffer, length);	
	return ret;
}

DL_MEDIA_RET_T dl_media_host_sd_write(void *p_buffer, UINT32 length, UINT16 *fname, UINT16 ftype)
{
	DL_MEDIA_RET_T ret;
	DL_MEDIA_SD_SDWRITE_T   sdwrite;
	
	sdwrite.file_type = ftype;
#ifdef MPEG4_MODULE_ENABLE	
	if(sdwrite.file_type)
	{
//		UINT16  TEMP[100];
		ret = dl_media_mpg4_get_filetype();
			if(ret) return ret;	
		sdwrite.file_type = 	mpg4_info.filetype;		
	}
#endif	

      	ret = dl_media_chip_patch(PATCH_FSAPP);
	if(ret) return ret;

	dl_media_memcpy((UINT8*)sdwrite.file_name,fname,16);
	switch (ftype)
	{
	case FILE_TYPE_JPG:
		sdwrite.ext_name[0] = 0x4a;
		sdwrite.ext_name[1] = 0x50;
		sdwrite.ext_name[2] = 0x47;
		break;
	case FILE_TYPE_MJP:
		sdwrite.ext_name[0] = 0x4d;
		sdwrite.ext_name[1] = 0x4a;
		sdwrite.ext_name[2] = 0x50;
		break;
	case FILE_TYPE_MP3:
		sdwrite.ext_name[0] = 0x4d;
		sdwrite.ext_name[1] = 0x50;
		sdwrite.ext_name[2] = 0x33;
		break;
	case FILE_TYPE_MMD:
		sdwrite.ext_name[0] = 0x4d;
		sdwrite.ext_name[1] = 0x4d;
		sdwrite.ext_name[2] = 0x44;
		break;
#ifdef MPEG4_MODULE_ENABLE		
	case FILE_TYPE_MPG4:
		sdwrite.ext_name[0] = 0x4d;
		sdwrite.ext_name[1] = 0x50;
		sdwrite.ext_name[2] = 0x34;
		break;
#endif		
	default:
		break;
	}	

⌨️ 快捷键说明

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