📄 drv_mp3.c
字号:
if(( gu32Work.b.hh == 0xff ) || (( mp3Ctl.WR.begin_sector + gu08_i ) != gu32Work.l ))
{ // 巆検柍偟偐 LBN 楢懕 NG 側傜棴傔捈偟
#if ROM // SDC 20050205
if( ++ID3TagRetry > MP3_WR_RETRY_MAX )
{ // 儕僩儔僀廔椆
ID3TagRetry = 0;
if( play->flgs & BIT_ID3V1_END )
play->flgs |= BIT_ID3V2_END;
else play->flgs |= BIT_ID3V1_END;
}
MP3Ctrl_WR_Reset(); // Write / Read clear
play->sts = 1;
#else
#if DEBUG
lbnbuff[(play->flgs>>1)&0x01][4-ID3TagRetry] = gu32Work.l;
#endif
MP3Ctrl_ID3Retry( play );
break;
#endif
}
}
}*/
//#endif
//#if ID3SELF // SDC 20050216
/*UINT32 MP3Ctrl_CalcReadAddress( UINT08 offset )
{
UINT08 tmp;
// RA 傪師偺僙僋僞偺愭摢傊
gu32Work.l = DrvDSP_BIOS_ReadRegMP3_32( 0xCC );
tmp = (UINT16)( gu32Work.l % 1182L ); // 梋傝僙僢僩
gu32Work.l /= 1182L; // 1182 = 2364 / 2
if( tmp ) gu32Work.l++; // 梋傝偑偁傟偽僙僋僞悢亄侾
gu32Work.l += offset;
gu32Work.l *= 1182L;
if( gu32Work.l >= sEnd )
{
gu32Work.l = 0;
}
return gu32Work.l;
}*/
/*
void MP3Ctrl_ID3SelfCheck( struct _mp3play *play )
{
UINT08 block;
UINT16 off;
CNVS tmp;
// 奐巒埵抲寁嶼
if( mp3Reg.rcenb < 127 )
{
block = 127 - mp3Reg.rcenb;
off = 2047 - ( 127 - block );
}else
{
block = 0;
off = mp3Reg.rcenb - 127;
}
// DRAM 撉崬傾僪儗僗庢摼
gu32Work.l = MP3Ctrl_CalcReadAddress( 0 );
#if 0
gu32Work.l += 12L; // 12 = 24 / 2
DrvDSP_BIOS_DramAdrSet( gu32Work.l, 0x01 );
gu32Work.w.l = DrvDSP_BIOS_DramRead();
gu32Work.w.h = DrvDSP_BIOS_DramRead();
return ( msf2lbn_bcd( gu32Work.b.ll, gu32Work.b.lh, gu32Work.b.hl ) - 150L ); // 嵞惗埵抲庢摼姰椆
#endif
// TAG 敾掕
#if 1
gu32Work.l += (( off / 2 ) + ( 28 / 2 ));
DrvDSP_BIOS_DramAdrSet( gu32Work.l, 0x01 );
for( gu08_i = 0; gu08_i < 4; gu08_i += 2 )
{
tmp.us = DrvDSP_BIOS_DramRead();
cWork[gu08_i+0] = tmp.uc.hi;
cWork[gu08_i+1] = tmp.uc.lo;
}
#else
gu32Work.l += (( off / 2 ) + ( 28 / 2 ));
DrvDSP_BIOS_DramAdrSet( gu32Work.l, 0x01 );
for( gu08_i = 0; ; gu08_i += 2 )
{
tmp.us = DrvDSP_BIOS_DramRead();
cWork[0] = tmp.uc.hi;
cWork[1] = tmp.uc.lo;
}
#endif
for( gu08_i = 0; gu08_i < 4; gu08_i++ )
{
if( cWork[gu08_i]
}
// TAG 桳傝
// TAG 曐懚
// TAG 柍偟
// V2 夝愅傊
}
#endif
*/
/*#if !ROM // SDC 20050205
void MP3Ctrl_SetWriteInfo( UINT08 *fat_data, struct _mp3play *play )
{
//CNVL tmp_l;
// 奐巒僙僋僞丒廔椆僙僋僞丒僼傽僀儖挿庢摼
set_mp3Reg( fat_data );
// 奐巒埵抲僙僢僩
play->stl = mp3Reg.rcstl;
play->stb = mp3Reg.rcstb = 0;
mp3Ctl.WR.begin_sector = play->stl + 150L;
// 廔椆埵抲僙僢僩
play->enl = mp3Reg.rcenl;
gu32Work.l = mp3Reg.rcsiz & 0x7ff;
if( !gu32Work.l )
{
gu32Work.l = 0x800;
}
gu32Work.l--;
play->enb = mp3Reg.rcenb = gu32Work.l;
if( gu08_sts_UDFDISC )
{
//抐曅壔僼儔僌庢摼
#if LCD_DM
flag_flagment = fat_data[18] & B10000000; // 0 : 懕偒柍偟 / !0 : 懕偒桳傝
#else
flag_flagment = fat_data[DISC_DEFRAGMENT_FILES1] & B10000000; // 0 : 懕偒柍偟 / !0 : 懕偒桳傝
#endif
}
}
#endif
*/
//
// =-------------------------------------------------------
// 嬋嵞惗惂屼
// =-------------------------------------------------------
/*
void MP3Ctrl_PlayProc( UINT08 slot )
{
struct _mp3play *play = &mp3Ctl.PLAY[slot];
#if ROM // SDC 20050205
UINT08 fat_data[32], info;
CNVL tmp_l;
#else
UINT08 fat_data[32];
#endif
static tmp_timing5;
switch ( play->sts )
{
case 1: // 梫媮庴晅
#if ROM // SDC 20050205
if((mp3Ctl.WR.sts != 00) && ( mp3Ctl.WR.sts != 20 ) && ( mp3Ctl.WR.sts != 0xff ))
{ // WRITE摦嶌拞偼張棟傪敳偗傞
return;
}
// SDC 20050123 if(gu08_sts_PowerSave != 0)
if( gu08_sts_PowerSave == 1 ) // SDC 20050123
{ // WRITE摦嶌拞偺僷儚乕僙乕僽拞傕張棟傪敳偗傞
return;
}
#else
if((( mp3Ctl.WR.sts != 0 ) &&
( mp3Ctl.WR.sts != 20 ) &&
( mp3Ctl.WR.sts != 0xff )) ||
( gu08_sts_PowerSave == 1 )) // WRITE 摦嶌拞丄僷儚乕僙乕僽拞偼張棟傪敳偗傞
return;
if( gu08_sts_UDFDISC )
song_parts = play->song;
#endif
scc_crt = // SDC 20050121 No.xx4
play->sects = 0;
#if ID3TAG //[dyna-DM]
play->flgs &= ~BIT_WR_END;
#if !ROM // SDC 20050205
if( gu08_sts_UDFDISC ) // UDF 偼僞僌夝愅偟側偄
play->flgs |= ( BIT_ID3V1_END | BIT_ID3V2_END );
#endif
#else
play->flgs = 0x00;
#endif
#if 0
// PlayList斣崋偐傜僼傽僀儖No乮俢俼俙俵僀儞僨僋僗乯偵曄姺
song = ( play->song - 100 ) + stInfoArea.hexTotalFolder + 1;
get_FAT_data( song, fat_data );
#else
get_FAT_data( play->song, fat_data );
#endif
#if ROM // SDC 20050202
//奐巒僙僋僞乕庢摼
tmp_l.uc.ll = fat_data[22];
tmp_l.uc.lh = fat_data[21];
tmp_l.uc.hl = fat_data[20];
tmp_l.uc.hh = 0;
play->stl = tmp_l.ul;
play->stb = 0;
mp3Ctl.WR.begin_sector = tmp_l.ul + 150L;
//廔椆僙僋僞乕庢摼
tmp_l.uc.ll = fat_data[25];
tmp_l.uc.lh = fat_data[24];
tmp_l.uc.hl = fat_data[23];
tmp_l.uc.hh = 0;
play->enl = tmp_l.ul;
mp3Ctl.WR.conn_mode = 0x05;
mp3Ctl.WR.threshold = ( gl_buff_max + 1L ) - ( 1182L * gi_ThreshSects ); // WRITE嵞奐埵抲傪32僙僋僞慜偵
mp3Ctl.WR.end_sector = tmp_l.ul + 150L;
#else
// 僼傽僀儖丒僽儘僢僋忣曬僙僢僩
MP3Ctrl_SetWriteInfo( fat_data, play );
#endif
if( mp3Ctl.WR.sts == 0xff )
{
// SDC 20050121 MP3Ctrl_Write_Restart( );
gu08_GotoMsfSC = 1; // SDC 20050121
mp3Ctl.WR.sts = 2;
if( gu08_sts_PowerSave > 1 ) // SDC 20050123
mp3Ctl.WR.sts = gu08_sts_PowerSave; // 僷儚乕僙乕僽僗僥乕僞僗暅婣 //僷儚乕僙乕僽暅婣屻丄怴婯棴崬傊
}else if( mp3Ctl.WR.sts != 20 )
{
MP3Ctrl_Write_Start( );
#if ID3TAG // SDC 20050202
if( !( play->flgs & BIT_ID3V1_END )) // V1 夝愅偺帪偼
#if ID3TEST // SDC 20050216
{ // 廔椆埵抲 -127byte 偺僙僋僞偐傜廔椆僙僋僞傑偱棴傔傞
mp3Ctl.WR.begin_sector = mp3Ctl.WR.end_sector;
if( mp3Reg.rcenb < 127 )
mp3Ctl.WR.begin_sector--;
}
#else
mp3Ctl.WR.begin_sector = mp3Ctl.WR.end_sector - 1; // 廔椆僙僋僞亅侾偐傜廔椆僙僋僞傑偱棴傔傞
#endif
else if( !( play->flgs & BIT_ID3V2_END )) // V2 夝愅偺帪偼
mp3Ctl.WR.end_sector = mp3Ctl.WR.begin_sector + 2; // 奐巒僙僋僞偐傜奐巒僙僋僞亄俀傑偱棴傔傞
#endif
}
else
{
mp3Ctl.WR.wqok = mp3Ctl.WR.begin_sector;
MP3Ctrl_Write_Restart( );
}
play->sts = 2;
break;
case 2: // 棴傔崬傒
#if ROM // SDC 20050205
info = MP3Ctrl_Write_GetStatus( );
if( info == 0x01 )
{
play->sects++;
if( play->sects >= 31 )
#else
switch( MP3Ctrl_Write_GetStatus() )
{
case 0x01:
if( ++(play->sects) >= 31 )
#endif
{
#if !SAVE1TRK // SDC 20050124
if( mp3Ctl.PLAY[1 - slot].sts )
{
play->sts = 3; // 奐巒懸偪
}
else
#endif
{
play->sts = 4; // 嵞惗僷儔儊僞愝掕
}
}
#if ROM // SDC 20050205
}
if( info == 0x81 )
{
#else
break;
case 0x81:
#endif
// WRITE掆巭偟偰偟傑偭偨
#if ID3TAG // SDC 20050202
play->flgs |= BIT_WR_END;
#else
play->flgs |= 0x01; // 棴傔崬傒嵪傒僼儔僌僙僢僩
#endif
#if !SAVE1TRK // SDC 20050124
if( mp3Ctl.PLAY[1 - slot].sts )
{
play->sts = 3; // 奐巒懸偪
}
else
#endif
{
play->sts = 4; // 嵞惗僷儔儊僞愝掕
}
}
break;
#if !SAVE1TRK // SDC 20050124
case 3: // 奐巒懸偪
if( MP3Ctrl_Write_GetStatus( ) == 0x81 )
{
// WRITE掆巭偟偨
#if ID3TAG // SDC 20050202
play->flgs |= BIT_WR_END;
#else
play->flgs |= 0x01; // 棴傔崬傒嵪傒僼儔僌僙僢僩
#endif
break;
}
if( mp3Ctl.PLAY[1 - slot].sts )
{
break;
}
play->sts = 4;
// break;
#endif
// Fall Through
case 4: // 嵞惗僷儔儊僞愝掕
mp3Ctl.RD.slot = slot;
if( checkReadTop( play ) == FALSE ) // SDC 20050121 No.xx4
break; //
DrvDSP_BIOS_WriteRegMP3( 0x3C, 0x01 );
#if ROM // SDC 20050202
Common_Wait_1mS(); // RSPCLR
get_FAT_data( play->song, fat_data );
//僼傽僀儖挿庢摼
tmp_l.uc.ll = fat_data[29];
tmp_l.uc.lh = fat_data[28];
tmp_l.uc.hl = fat_data[27];
tmp_l.uc.hh = fat_data[26];
mp3Reg.rcsiz = tmp_l.ul;
mp3Ctl.RD.slot = slot;
tmp_l.ul &= 0x7ff;
if( !tmp_l.ul )
{
tmp_l.ul = 0x800;
}
tmp_l.ul--;
play->enb = tmp_l.ul;
mp3_store_fileinfo( play->stl, play->stb, play->enl, play->enb );
#endif
#if ID3TAG // SDC 20050202
if( !( play->flgs & BIT_ID3V2_END ))
{
MP3Ctrl_ID3_cehckLBN( play );
if( play->sts == 1 ) // LBN NG 棴傔捈偟
break;
}
#endif
#if ID3SELF // SDC 20050216
if( !( play->flgs & BIT_ID3V1_END ))
{ // ID3V1 TAG 帺屓夝愅
MP3Ctrl_ID3SelfCheck( play );
}
#endif
#if !ROM
if( !gu08_sts_UDFDISC )
#endif
mp3_set_sectors( );
#if ID3TAG // SDC 20050120
if( !( play->flgs & BIT_ID3V1_END ))
mp3Ctl.RD.mode = 0x0C; // ID3V1 read
else if( !( play->flgs & BIT_ID3V2_END ))
mp3Ctl.RD.mode = 0x0D; // ID3V2 read
else
mp3Ctl.RD.mode = 0x02; // MP3 read
#else
#if ROM // SDC 20050202
MP3Ctrl_Read_SetMode( 0x02 ); // READ宯 @MP3
#else
mp3Ctl.RD.mode = 0x02; // READ宯 @MP3
#endif
play->flgs |= 0x02; // SDC 20050118 No.xx1
#endif
MP3Ctrl_Read_Start( ); //Sxxx
#if !ROM // SDC 20050205
tmp_timing5 = 0; // SDC 050121
play->sts = 5;
#endif
#if ID3TAG // SDC 20050202
if( play->flgs & BIT_WR_END )
#else
if( play->flgs & 0x01 )
#endif
{
play->sts = 6; // 廔椆懸偪
#if ROM // SDC 20050205
break;
#endif
}
#if ROM // SDC 20050205
play->sts = 5;
tmp_timing5 = 0; // SDC 050121
#endif
break;
case 5: // WRITE忬懺妋擣
#if ROM // SDC 20050205
info = MP3Ctrl_Write_GetStatus( );
if( info == 0x81 )
#else
if( MP3Ctrl_Write_GetStatus() == 0x81 )
#endif
{
#if !ROM // SDC 20050205
if( !gu08_sts_UDFDISC || !flag_flagment )
{
#endif
// 棴傔崬傒廔椆
play->sts = 6;
#if ROM // SDC 20050205
break;
#else
}else
{ //師僽儘僢僋桳傝
song_parts++;
get_FAT_data( song_parts, fat_data ); //師僽儘僢僋偺忣曬傪庢摼
// 僼傽僀儖丒僽儘僢僋忣曬僙僢僩
MP3Ctrl_SetWriteInfo( fat_data, play );
{
mp3Ctl.WR.wqok = mp3Ctl.WR.begin_sector; //捛婰傪梫媮
MP3Ctrl_Write_Restart( ); //
}
}
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -