📄 chp_dl_media_from_host.c
字号:
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 + -