📄 dosusr.c
字号:
#if (ID3Tag_OPTION==1)
//=========================================================================================
//add by XYQ 021118
//=========================================================================================
bit USR_Get_ID3Info(UCHAR selectDir,WORD fileIndex)
{
unsigned char Status;
unsigned char j,k;
ULONG fdbLogAddr;
WORD fdbOffset,i;
BYTE *fdb;
BYTE dirIndex;
BYTE filereq;
if(!fileIndex)
{
return false;
}
if ((dirIndex = USR_SetDir1(selectDir))!=0xff) //@@chchang_012203
{
filereq=USR_GetFileType(dirIndex);
if (USR_FindCountedFile(fileIndex, &fdbLogAddr, &fdbOffset, filereq))
{
fdb = &G_ucStorData[fdbOffset]; //find the currfdb addr
//get file startcluster
G_searchCluster = fdb[0x1a] | (USHORT)fdb[0x1b]<<8;
G_CurrentFile_StartCluster = G_searchCluster;
//the file length
G_DOS_FileSize = fdb[0x1c] | (ULONG)fdb[0x1d]<<8 | (ULONG)fdb[0x1e]<<16 | (ULONG)fdb[0x1f]<<24;
//====Get ID3 TAG==========
// DbgPrint("search ID3!!!\n");
//====ID3V2================
if(X_Get_ID3V2_3())
{
unsigned long ID3V2_3_FrameSize;
DbgPrint("Get ID3 V2.3!\n");
ID3V2_3_FrameSize=X_Get_ID3V2_3_Frame(ID3V2_3_SongName,SongNameNDSingerName,60);
if(ID3V2_3_FrameSize)
{
DbgPrint("get ID3V2.3 song name!-----------");
for(i=0;(i<ID3V2_3_FrameSize && i<60);i++)
{
DbgPrint("%c",SongNameNDSingerName[i]);
}
DbgPrint("\n");
}
if(ID3V2_3_FrameSize<60)
{
ID3V2_3_FrameSize=X_Get_ID3V2_3_Frame(ID3V2_3_SingerName,&SongNameNDSingerName[ID3V2_3_FrameSize],60-ID3V2_3_FrameSize);
if(ID3V2_3_FrameSize)
{
DbgPrint("get ID3V2.3 singer name!---------");
for(Status=i;(Status<i+ID3V2_3_FrameSize && Status<60);Status++)
{
DbgPrint("%c",SongNameNDSingerName[Status]);
}
DbgPrint("\n");
}
i=i+ID3V2_3_FrameSize;
}
for(j=0;j<i;j++)
{
// DbgPrint("%c",SongNameNDSingerName[j]);
}
// DbgPrint("\n");
G_SongNameNDSingerName_Length=j;
}
else
//-----------------------------------------------
// ID3V1
{
if(X_Get_ID3V1_Info(SongNameNDSingerName,60))
{
DbgPrint("Get ID3 V1.0!\n");
for(i=59;i>29;i--)//为在歌曲名和歌手名间插入'_'
{
SongNameNDSingerName[i+1]=SongNameNDSingerName[i];
}
SongNameNDSingerName[30]=0x00;
for(i=29;i>0;i--)
{
if(SongNameNDSingerName[i]!=0x00 && SongNameNDSingerName[i]!=0x20) break;
}
for(j=60;j>31;j--)
{
if(SongNameNDSingerName[j]!=0x00 && SongNameNDSingerName[j]!=0x20) break;
}
i++;
SongNameNDSingerName[i]='_';
for(i++,k=31;k<=j;k++,i++)
{
SongNameNDSingerName[i]=SongNameNDSingerName[k];
}
G_SongNameNDSingerName_Length=i;
for(Status=0;(Status<i);Status++)
{
DbgPrint("%c",SongNameNDSingerName[Status]);
}
DbgPrint("\n");
}
else
{
//-----------------------------------------------
//No ID3 infomation, Disp file name
DbgPrint("No ID3 infomation, Disp file name\n");
//get long file name
{
unsigned char ContinueSearchLFN;
DbgPrint("==start read long file name!==\n");
ContinueSearchLFN=2;
i=fdbOffset;
if (DOS_ReadSector(K_DOS_DstSram, G_CurrentLongFDB_SectorAddr, 0))
{
while(i>=32)//add by XYQ
{
i=i-32;//add by XYQ
fdb = &G_ucStorData[i]; //find the currfdb addr
ContinueSearchLFN=X_Get_LongFileName(fdb,SongNameNDSingerName,60);
if(ContinueSearchLFN!=2)
{
if(ContinueSearchLFN==1)
{
for(Status=0;(Status<26);Status++)
{
DbgPrint("%c",SongNameNDSingerName[Status]);
}
}
break;
}else{
for(Status=0;(Status<26);Status++)
{
DbgPrint("%c",SongNameNDSingerName[Status]);
}
}
}
if(ContinueSearchLFN==2 && G_OldLongFDB_SectorAddr!=0)
{
DbgPrint("search lod sector\n");
if (DOS_ReadSector(K_DOS_DstSram, G_OldLongFDB_SectorAddr, 0))
{
i=512;
while(i>=32)//add by XYQ
{
i=i-32;//add by XYQ
fdb = &G_ucStorData[i]; //find the currfdb addr
ContinueSearchLFN=X_Get_LongFileName(fdb,SongNameNDSingerName,60);
if(ContinueSearchLFN!=2)
{
if(ContinueSearchLFN==1)
{
for(Status=0;(Status<26);Status++)
{
DbgPrint("%c",SongNameNDSingerName[Status]);
}
}
break;
}else{
for(Status=0;(Status<26);Status++)
{
DbgPrint("%c",SongNameNDSingerName[Status]);
}
}
}
}
}
if(ContinueSearchLFN==0)
{
#if 1 //get short file name
if (DOS_ReadSector(K_DOS_DstSram, G_CurrentLongFDB_SectorAddr, 0))
{
unsigned char i;
fdb = &G_ucStorData[fdbOffset]; //find the currfdb addr
for(i=0;i<13;i++)
{
if(i<8)
{
SongNameNDSingerName[i]=fdb[i];
}else{
if(i==8)
{
SongNameNDSingerName[i]='.';
}else{
SongNameNDSingerName[i]=fdb[i-1];
}
}
}
}
for(Status=0;(Status<12);Status++)
{
DbgPrint("%c",SongNameNDSingerName[Status]);
}
G_SongNameNDSingerName_Length=12;
#endif
}
DbgPrint("\n==end read long file name!==\n");
}
}
}
}
}
else
{
// DbgPrint("no file\n\n");
return false;
}
}
else
{
// DbgPrint("USR_SetDir1 fail\n");
return false;
}
// File_Close(1, NULL, K_DOS_ReadFile, 0); // close file now
}
#endif
//End of ID3 Tag Supported
void USR_File_Lock(bit OnOff) USING_0
//BYTE USR_FileOpenPlay(UCHAR selectDir, UCHAR minorMode, WORD fileIndex) USING_0 //@@chchang_012203
{
ULONG fdbLogAddr;
WORD fdbOffset;
BYTE *fdb;
BYTE sts = FALSE;
//WORD fHandle;
BYTE dirIndex;
BYTE filereq;
if(G_FileCurrentIndex&& ((sts = dirIndex = USR_SetDir1(G_DSPPrimeMODE))!=0xff)) //@@chchang_012203
{
filereq=USR_GetFileType(dirIndex);
if (USR_FindCountedFile(G_FileCurrentIndex, &fdbLogAddr, &fdbOffset, filereq))
{
if(DOS_ReadSector(K_DOS_DstSram,fdbLogAddr,0))
{
fdb = &G_ucStorData[fdbOffset]; //find the currfdb addr
G_FileLock=OnOff;
if(OnOff)
fdb[0x0b]|=0x01;
else
fdb[0x0b]&=0xfe;
DOS_WriteSector(K_DOS_SrcSram,fdbLogAddr,0);
}
}
}
}
//-----------------------------------------------------------------------------
BYTE USR_SerachDeletedfdb(WORD fileCount, BYTE filereq) USING_0
{
BYTE sts = TRUE;
WORD j, k, count=0;
ULONG logAddr;
WORD searchCluster;
WORD prevCluster;
BYTE fileType,search;
#if (ID3Tag_OPTION==1)
G_OldLongFDB_SectorAddr = 0;
#endif
search=0;
searchCluster = G_DOS_CurrDirCluster;
while ((searchCluster != 0xffff) && sts)
{
prevCluster = searchCluster;
logAddr = DOS_ClusterLogAddr(searchCluster);
for (j = 0; j < G_DOS_ClusterSize && sts; j += K_DOS_SectorSize)
{
sts = DOS_ReadSector(K_DOS_DstSram, logAddr+j, 0);
#if (ID3Tag_OPTION==1)
G_CurrentLongFDB_SectorAddr=logAddr+j;
#endif
if (sts)
{
for (k = 0; k < K_DOS_SectorSize; k += 32)
{
if (G_ucDataBuffer[k] != 0x00)
{
//DbgPrint("before file open_G723=%bx\n",(BYTE)_G723);
if(!search)
{
if(G_ucDataBuffer[k]==0xe5)
{
search=1;
deletedfdbLogAddr=logAddr + j;
deletedfdbOffset = k;
};
};
fileType = USR_CheckType(&G_ucDataBuffer[k]);
if (fileType!=0)
{
if(fileType==filereq)
{
count++;
if(search)
{
movingfdbLogAddr=logAddr + j;
movingfdbOffset = k;
return TRUE;
}
};
if(count >= fileCount)
{
return FALSE;
}
}
}
else
return FALSE;
} // end for
#if (ID3Tag_OPTION==1)
G_OldLongFDB_SectorAddr = logAddr+j;
#endif
}
} // end for
searchCluster = DOS_GetNextCluster(searchCluster);
if (prevCluster == searchCluster || searchCluster == 0)//@wyeo@110502
break;
} // end while
return FALSE;
}
void USR_ClearFile(void)
{
BYTE i,*fdb;
BYTE sts = TRUE;
//WORD fHandle;
BYTE dirIndex;
BYTE filereq;
USHORT fileIndex;
fileIndex = G_USR_DirList[G_UIMODE].totalFile;
if(!fileIndex) return;
while(sts)
{
if( ((dirIndex = USR_SetDir1(G_DSPPrimeMODE))!=0xff)) //@@chchang_012203
{//WIA
filereq=USR_GetFileType(dirIndex);
if (USR_SerachDeletedfdb(fileIndex, filereq))
{//WIAA
if(DOS_ReadSector(K_DOS_DstSram,movingfdbLogAddr,0))
{//WIAAA
fdb = &G_ucStorData[movingfdbOffset]; //find the currfdb addr
for(i=0;i<32;i++)
fdbBack[i] = fdb[i];
fdb[0x00] = 0xe5;
if(movingfdbLogAddr!=deletedfdbLogAddr)
{
DOS_WriteSector(K_DOS_SrcSram,movingfdbLogAddr,0);
DOS_ReadSector(K_DOS_DstSram,deletedfdbLogAddr,0);
};
fdb = &G_ucStorData[deletedfdbOffset];
for(i=0;i<32;i++)
fdb[i]=fdbBack[i];
DOS_WriteSector(K_DOS_SrcSram,deletedfdbLogAddr,0);
//DOS_ReadSector(K_DOS_DstSram,movingfdbLogAddr,0);
//fdb = &G_ucStorData[movingfdbOffset]; //find the currfdb addr
//for(i=0;i++;i<32)
//fdbBack[i] = fdb[i];
//fdb[0x00] = 'K';
//DOS_WriteSector(K_DOS_SrcSram,movingfdbLogAddr,0);
};//WIAAA
}//WIAA
else
sts=FALSE;
}//WIA
else
sts=FALSE; //
}//WHILE
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -