📄 drv_mp3.c
字号:
case 0x82: // EMPTY
// Next LBN傪撉傓
#if ROM // SDC 20050203
gu32Work.l = DrvDSP_BIOS_ReadRegMP3_32(0xF0);
if( gu32Work.l )
{
// Next LBN偑侽偱側偐偭偨傜丄偦偙傪埵抲弌偟
last_atime = gu32Work.l + 150L - 6L;
if( total_try++ < 64 )
{ // 嵟戝2048僙僋僞傑偱儕僩儔僀偡傞
mp3Ctl.WR.wqok = last_atime;
#else
if(( gu32Work.l = DrvDSP_BIOS_ReadRegMP3_32( 0x0F0 )) && ( total_try++ < 64 ))
{
{
mp3Ctl.WR.wqok = gu32Work.l + 150L - 6L;
#endif
DrvMP3_ReadFAT_engin_00();
// mp3Ctl.WR.nSect = 32;
// MP3Ctrl_Write_Restart( );
// gu08_sts_ReadFAT = 2; //->loop
break;
}
}
// Fall Through
default:
MP3Ctrl_Write_Stop( ); // 擮偺偨傔,WRITE掆巭
gu08_sccd_ReadFAT = 0xff; //BAD END
}
}
break;
}
}
*/ //ad
/*
// -ROM
void DrvMP3_ReadFAT_engin_00()
{
mp3Ctl.WR.nSect = 32;
MP3Ctrl_Write_Restart( );
gu08_sccd_ReadFAT = 2; //->loop
}
//YTC009 20050111
//-ROM YTC006 20050106
void DrvMP3_ReadFAT_set_InfoArea()
{
DrvDSP_BIOS_WriteRegMP3_32(0x44,gl_dram_send - 0x00010000); // RCSEND愝掕
#if ROM // SDC 20050202
mp3Ctl.WR.conn_mode = 0x05; // SYNC愙懕儌乕僪慖戰
MP3Ctrl_Write_SetMode( 0x02 ); // WRITE宯 @CDROM
MP3Ctrl_Read_SetMode( 0x0A ); // READ宯 @FAT
MP3Ctrl_Write_Reset( );
MP3Ctrl_Read_Reset( );
#else
mp3Ctl.WR.mode = 0x02; // WRITE宯 @CDROM
mp3Ctl.RD.mode = 0x0A; // READ宯 @FAT
MP3Ctrl_WR_Reset(); // Write / Read clear
#endif
DrvDSP_BIOS_WriteRegMP3_32(0x48,gl_dram_send - 0x0000FFFF); // RCIEND愝掕
DrvDSP_BIOS_WriteRegMP3_32(0x4C,gl_dram_send); // RCISTT愝掕
// mp3Reg.rcrmd |= 0x80; // 俽倁俢桪愭 //YTC006 20050107
// DrvDSP_BIOS_WriteRegMP3( 0x30, mp3Reg.rcrmd );
// Common_Wait_1mS();
}
*/
/*
#if 1 // SDC 050107
void ReadDiscDispCtrl( void )
{
if( gu08_flg_IntrTimer03 > (10 / 2 - 1) ) // 10ms time out
{
gu08_flg_IntrTimer03 = 0;
if( !( gu08_timer_Blink-- ) )
{
gu08_timer_Blink = BC_BLINK_TIME;
gu08_flg_Blink ^= 0x01;
if( gu08_flg_Blink )
{
DrvLCD_ReadDisc_On();
} else {
DrvLCD_ReadDisc_Off();
}
}
//B0004 DrvKEY_ScanSlideSW( SW_LID );
DrvKEY_ScanSlideSW( ); //B0004
}
}
#endif // SDC 050107
*/
//
// 俥俙俿忣曬偺専徹
//
// 僨傿儗僋僩儕忣曬偵巕僨傿儗僋僩儕忣曬傪愝掕偡傞
// dram[i][17:18]丗桳岠僨傿儗僋僩儕俶倧
//
/* //ad
void fat_examine( void )
{
//20041220 nUDF懳墳 乮値亖側傫偪傖偭偰偺棯乯
// 僙僌儊儞僩僞僀僾側傜偱偼偺張棟丅俢俷俿 俵俿倃斉偼暿搑峫椂
// *.MP3僼傽僀儖傪帩偨側偄僼僅儖僟乕傪娫堷偔堊偺張棟丅
// nUDF梡偺ODEN僼傽乕儉偵崌傢偣偰丄INFO AREA偺嶲徠応強傪曄峏丅
UINT08 fat_data0[32];
UINT16 file_no, mp3_files;
SINT16 i,j;
#if ROM // SDC 20050205
UINT16 play_dir_num;
#endif
// CNVS tmp;
// 嵞惗懳徾Dir悢庢摼
#if ROM // SDC 20050205
play_dir_num = 0;
for (i = 1; i <= stInfoArea.hexTotalFolder; i++)
{
// Dir忣曬偐傜MP3 Files庢摼
get_FAT_data(i, fat_data0); //偦偺僼僅儖僟乕偺拞偺俵俹俁僼傽僀儖悢傪尒傞
#if LCD_DM //[dyna-DM]
gu32Work.b.ll = fat_data0[18]; //nUDF懳墳 偦偺僼僅儖僟乕撪偺俵俹俁僼傽僀儖悢
gu32Work.b.lh = fat_data0[17]; //
#else
gu32Work.b.ll = fat_data0[ DIR_DEFRAGMENT_FILES1 ];
gu32Work.b.lh = fat_data0[ DIR_DEFRAGMENT_FILES0 ];
#endif
mp3_files = gu32Work.w.l;
// MP3File桳傝Dir悢傪僇僂儞僩
if (mp3_files)
{ //!=00 桳岠側俵俹俁僼傽僀儖偁傝
play_dir_num++;
}
// ReadDiscDispCtrl(); // SDC 050107
if( UserCtrl_IsOpen() == TRUE ) return; // SDC 050107
}
stInfoArea.hexTotalPlayFolder = play_dir_num;
// ^偙傟偑憤桳岠俵俹俁僼僅儖僟悢
// 偙偺帪揰偱俴俠俢偵昞帵偟偨偄側偁丅
// 懱姶忋丄俥俙俿儕乕僪偑偐側傝憗偔側傞丅
#else // ROM
stInfoArea.hexTotalPlayFolder = 0;
for (i = 1; i <= stInfoArea.hexTotalFolder; i++)
{
// Dir忣曬偐傜MP3 Files庢摼
get_FAT_data(i, fat_data0); //偦偺僼僅儖僟乕偺拞偺俵俹俁僼傽僀儖悢傪尒傞
#if LCD_DM
if( fat_data0[18] | fat_data0[17] )
#else
if( fat_data0[DIR_DEFRAGMENT_FILES1] | fat_data0[DIR_DEFRAGMENT_FILES0] )
#endif // end of LCD_DM
{ //!=00 桳岠側俵俹俁僼傽僀儖偁傝
stInfoArea.hexTotalPlayFolder++;
}
// ReadDiscDispCtrl(); // SDC 050107
if( UserCtrl_IsOpen() == TRUE ) return; // SDC 050107
}
#endif // end of ROM
// 嵞惗懳徾Dir斣崋曐懚
//桳岠俢俬俼斣崋傪INFO AREA偵彂偒崬傫偱偄偔丅
//DIR+/-憖嶌帪偵嬻DIR傪巜偟帵偡偙偲偺柍偄傛偆偵丅
file_no = stInfoArea.hexTotalFolder + 1; // 嵟弶偺File忣曬埵抲
for(i = 0; i < stInfoArea.hexTotalPlayFolder; i++)
{
// File忣曬偐傜Dir Number庢摼
get_FAT_data(file_no, fat_data0);
#if LCD_DM //[dyna-DM]
gu32Work.b.ll = fat_data0[31]; //偙偺僼傽僀儖偑強懏偡傞俢俬俼斣崋
gu32Work.b.lh = fat_data0[30]; //
#else
gu32Work.b.ll = fat_data0[ FILE_DIR_NUMBER1 ];
gu32Work.b.lh = fat_data0[ FILE_DIR_NUMBER0 ];
#endif
#if ROM // SDC 20050205
play_dir_num = gu32Work.w.l;
#endif
// FAT忣曬愭摢偐傜弴偵Dir Number曐懚 //20041219梫拲堄揰丅
//忋偱媮傔偨俢俬俼乮桳岠俢俬俼乯斣崋傪彂偒崬傓
//丅丅丅倀俬憌偱俢俬俼亄亅偟偨傜丄偙偙偺忣曬傪尒傟偽丄桳岠俢俬俼斣崋傪摼傜傟傞丅
#if LCD_DM //[dyna-DM]
get_FAT_data(i, fat_data0); //i偼僼僅儖僟斣崋
fat_data0[16] = gu32Work.b.ll; //僼傽僀儖柤偺応強傪捵偟偰偟傑偆丅->DOT_MTX帪偵拲堄
fat_data0[15] = gu32Work.b.lh; //曐懚応強曄峏偟傑偡丅
put_FAT_data(i, fat_data0);
#else
PlayList_SetEntry(PLAY_LIST_SIZE + i, gu32Work.w.l);
#endif
// Dir忣曬偐傜MP3 Files庢摼
//忋偱媮傔偨乮桳岠乯俢俬俼偑帩偮俵俹俁僼傽僀儖悢傪媮傔傞丅
#if ROM // SDC 20050205
get_FAT_data(play_dir_num, fat_data0);
#else
get_FAT_data( gu32Work.w.l, fat_data0);
#endif
#if LCD_DM //[dyna-DM]
gu32Work.b.ll = fat_data0[18]; //
gu32Work.b.lh = fat_data0[17]; //nUDF懳墳 俢俬俼撪 俵俹俁僼傽僀儖悢
#else
gu32Work.b.ll = fat_data0[ DIR_DEFRAGMENT_FILES1 ];
gu32Work.b.lh = fat_data0[ DIR_DEFRAGMENT_FILES0 ];
#endif
mp3_files = gu32Work.w.l;
// File忣曬偵index曐懚
//僼傽僀儖偺忣曬偵丄帺俢俬俼偺僼傽僀儖悢傪僐僺乕偟偰偍偔丅乮倀俬懁偑曋棙偵巊偆乯
//nUDF懳墳偺堊丄彂偒崬傫偱偍偔応強傪曄偊傞丅
//[dyna-DM] 仸仾僼傽僀儖悢偺僐僺乕偱偼側偄偱偡丅
//偙偺帪揰偱FAT(Disc,Dir)忣曬愭摢偐傜File忣曬弴偺強懏Dir斣崋傪曐懚偟偰偄傑偡丅
//伀偺張棟偱偙偺Dir斣崋専嶕梡偵File忣曬慡晹偵Dir扨埵偱1偐傜斣崋(index)傪偮偗偰偄傑偡丅
gu32Work.w.l = i + 1;
for(j = 0; j < mp3_files; j++)
{
#if LCD_DM //[dyna-DM]
get_FAT_data(file_no, fat_data0);
fat_data0[14] = gu32Work.b.ll; //僼傽僀儖柤偺応強傪捵偟偰偟傑偆丅->DOT_MTX帪偵拲堄
fat_data0[13] = gu32Work.b.lh; //僼傽僀儖柤偺応強傪捵偟偰偟傑偆丅->DOT_MTX帪偵拲堄
put_FAT_data(file_no++, fat_data0);
#else
PlayList_SetEntry( PLAY_LIST_SIZE + file_no++, gu32Work.w.l );
#endif
// ReadDiscDispCtrl(); // SDC 050107
if( UserCtrl_IsOpen() == TRUE ) return; // SDC 050107
}
}
}
*/
//
// FAT 忣曬傪庢摼
//
// 枅夞丄DRAM傪嶲徠偡傞偺偱偼側偔丄僉儍僢僔儏摦嶌傪峴偆 仼偟偰偄側偄偺偱僉儍僢僔儏嶍彍 SDC 20050205
//
/*
void get_FAT_data( SINT16 n, UINT08 * bufp )
{
// SINT16 i;
CNVS tmp; // SDC 20050123
DrvDSP_BIOS_DramAdrSet( gl_dram_send - ( UINT32 ) ( n << 4 ), 0x02 ); // 俢俼俙俵捈撉丒捈彂傾僪儗僗巜掕
for ( gu08_i = 0 ; gu08_i < 32 ; gu08_i += 2 )
{
tmp.us = DrvDSP_BIOS_DramRead();
#if ROM // SDC 20050205
fat_cache[ 0 ].data[ gu08_i ] = gu32Work.b.lh;
fat_cache[ 0 ].data[ gu08_i + 1 ] = gu32Work.b.ll;
}
fat_cache[0].nIndex = n;
memcpy( bufp, fat_cache[0].data, 32 ); // 僐僺乕偟側偄偱僉儍僢僔儏埵抲曉偡偩偗偱椙偄偐
#else
bufp[gu08_i] = tmp.uc.hi;
bufp[gu08_i+1] = tmp.uc.lo;
}
#endif
return;
}
*/
//
// FAT 忣曬傪峏怴
//
/*
void put_FAT_data( SINT16 n, UINT08 * bufp )
{
// SINT16 i; //YTC A2x 20050307 枹巊梡俼俙俵
CNVS tmp;
#if ROM // SDC 20050205
memcpy( fat_cache[0].data, bufp, 32 );
#endif
DrvDSP_BIOS_DramAdrSet( gl_dram_send - ( UINT32 ) ( n << 4 ), 0x02 ); // 俢俼俙俵捈撉丒捈彂傾僪儗僗巜掕
for ( gu08_i = 0 ; gu08_i < 32 ; gu08_i += 2 )
{
#if ROM // SDC 20050205
gu32Work.b.lh = fat_cache[0].data[ gu08_i ];
gu32Work.b.ll = fat_cache[0].data[ gu08_i + 1 ];
DrvDSP_BIOS_DramWrite( gu32Work.w.l );
}
fat_cache[0].nIndex = n;
#else
tmp.uc.hi = bufp[gu08_i];
tmp.uc.lo = bufp[gu08_i+1];
DrvDSP_BIOS_DramWrite( tmp.us );
}
#endif
return;
}
*/
/*
#if ID3TAG // SDC 20050202
void MP3Ctrl_StartSet( void )
{
mp3Ctl.WR.wqok =
gu32_val_TargetFrame = mp3Ctl.WR.begin_sector - 2;
gu08_GotoMsfSC = 1;
mp3Ctl.WR.sts = 2;
}
#endif
*/
// SDC 20050124#define MP3_WR_RETRY_MAX (3) //YTC004 20050103
//#define MP3_WR_RETRY_MAX (1) //YTC004 20050103 // SDC 20050124
//#if !ROM // SDC 20050205
/*void MP3Ctrl_checkWriteStop( void )
{
if( !mp3Ctl.WR.end_sector )
{
if( mp3Ctl.WR.nSect <= 0 )
{
#if ROM // SDC 20050205
// MP3Ctrl_WriteProc_finish(); //
#else
MP3Ctrl_Write_Stop();
#endif
}
}
else
{
if( mp3Ctl.WR.wqok > mp3Ctl.WR.end_sector )
{
#if ROM // SDC 20050205
// MP3Ctrl_WriteProc_finish(); //
#else
MP3Ctrl_Write_Stop();
#endif
}
}
}
*/
/*
#if ID3TAG
void MP3Ctrl_ID3Retry( struct _mp3play *play )
{
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;
}
#endif // end of ID3TAG
#endif // end of ROM
*/
//20041218 POWER_SAVE 懳墳
// =-------------------------------------------------------
// WRITE 懁惂屼
// =-------------------------------------------------------
/*
void MP3Ctrl_WriteProc( void )
{
UINT08 ctmp_rsacf;
static UINT08 u08_MP3_wr_retry; //YTC004 20050103
static UINT32 u32_last_BAD_Frame; //YTC004 20050103
if( mp3Ctl.WR.sts && gi_timer_mp3 )
{ // 僞僀儅摦嶌拞偼偡偖偵栠傞
return;
}
switch ( mp3Ctl.WR.sts )
{
case 0: // 弶婜忬懺
gi_timer_mp3 = 0; // 擮偺偨傔丄僞僀儅僋儕傾 偁傝摼側偄偲偍傕偆偺偩偑丒丒丒丅忋偱偼偠偄偰偄傞偟丅
break;
case 1: // 儕僙僢僩嵪傒
#if ID3TAG // SDC 20050202
u08_MP3_wr_retry=//0; //YTC004 20050103
u32_last_BAD_Frame=0; //YTC004 20050103 侽傪棴傔崬傓偙偲偼偁傝偊側偄偺偱
MP3Ctrl_StartSet();
#else
mp3Ctl.WR.wqok = //SDC 20050116
// gu32_val_TargetFrame = mp3Ctl.WR.begin_sector - 1;
gu32_val_TargetFrame = mp3Ctl.WR.begin_sector - 2; // YTC00B 20050114
gu08_GotoMsfSC =1; //
u08_MP3_wr_retry=//0; //YTC004 20050103
u32_last_BAD_Frame=0; //YTC004 20050103 侽傪棴傔崬傓偙偲偼偁傝偊側偄偺偱
mp3Ctl.WR.sts = 2;
#endif
break;
case 2: // 弶夞埵抲弌偟拞
#if !ROM // SDC 20050205
case 12: // 埵抲弌偟拞
#endif
switch(gu08_GotoMsfSC)
{
case 0:
gi_timer_mp3 = 3; //2ms*3
#if ROM // SDC 20050205
mp3Ctl.WR.sts = 3;
#else
mp3Ctl.WR.sts++;
#endif
break;
case 0x0A:
#if ROM // SDC 20050205
if(MP3Ctrl_WriteProc_WqokSkip(4) != 0)
{
break; //->SKIP偟偨傜丄偙偺嬋偺廔傢傝傪墇偊偨丒棴傔崬傒廔椆
}
mp3Ctl.WR.sts = 2; //->偪傚偭偲幪偰偰儕僩儔僀
break;
#else
MP3Ctrl_WriteProc_WqokSkip( 4 );
#endif
}
break;
case 3:
if( gu08_sts_Subq_valid )
{
DrvDSP_BIOS_WriteRegMP3( 0x00, 0x80 | mp3Ctl.WR.mode ); // Write Start
gi_timer_mp3 = 1; //2ms*1
mp3Ctl.WR.sts = 4;
}
break;
case 4: // 奐巒懸偪
#if !ROM
case 6: // 幚峴拞乮儊僀儞張棟乯
case 14:
#endif
if( gu08_sts_Subq_valid )
{
gi_timer_mp3 = 2; //2ms*2
#if ROM // SDC 20050205
mp3Ctl.WR.sts = 5;
#else
mp3Ctl.WR.sts++;
#endif
}
break;
case 5: // 奐巒妋擣
if( !( DrvDSP_BIOS_ReadRegMP3( 0xC2 ) & 0x40 ) )
{ //彂偒崬傒巒傑偭偰偄側偄偺偼偍偐偟偄丅
DrvDSP_BIOS_WriteRegMP3( 0x00, 0x42 ); // write stop / w add clr / CD-ROM data mode // SDC 050117
gu08_GotoMsfSC =1; //崅懍両
mp3Ctl.WR.sts = 2; // 埵抲弌偟偐傜巒傔傞
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -