📄 dosusr.c
字号:
//-----------------------------------------------------------------------------
BYTE USR_IsOurDir1Name(BYTE *name, BYTE dirIndex) USING_0
{
BYTE k;
for ( k= 0; k < 11; k++)
{
if (tolower(C_USR_Dir1Name[dirIndex][k]) != tolower(name[k]))
{
return FALSE;
}
}
return TRUE;
}
//-----------------------------------------------------------------------------
//USR_CheckType
//-----------------------------------------------------------------------------
UCHAR USR_CheckType(BYTE *fdb) USING_0
{
BYTE fileType = 0;
if ((fdb[0] != 0xe5) && (fdb[0] != 0x2e) && (fdb[11] != 0x0f))
{
/*
if ( USR_IsMp3Ext(fdb) )
{
fileType = K_USR_MP3_TYPE;
}
else if ( USR_IsAdpcmExt(fdb) )
{
fileType = K_USR_ADPCM_TYPE;
}
*/
//@@chchang012103
#if (SPCA757_OPTION==0)
if ( USR_IsMp3Ext(fdb)||USR_IsWmaExt(fdb))
#else
if ( USR_IsMp3Ext(fdb))
#endif
{
fileType = K_USR_MP3_TYPE;
}
else if ( USR_IsAdpcmExt(fdb)||USR_IsG723Ext(fdb) )
{
fileType = K_USR_ADPCM_TYPE;
}
}
return fileType;
}
BYTE USR_IsMp3Ext(BYTE *name) USING_0
{
if ( (name[8] == 'M' || name[8] == 'm') && \
(name[9] == 'P' || name[9] == 'p') && \
(name[10] == '3') )
{
#if (SPCA757_OPTION==0)
_WMA=0;
_G723=0;
#endif
return TRUE;
}
else
{
return FALSE;
}
}
#if (SPCA757_OPTION==0)
BYTE USR_IsWmaExt(BYTE *name) USING_0
{
if ( (name[8] == 'W' || name[8] == 'w') && \
(name[9] == 'M' || name[9] == 'm') && \
(name[10] == 'A' || name[10] == 'a') )
{
_WMA=TRUE;//@@chchang_012803
return TRUE;
}
else
{
_WMA=FALSE;
return FALSE;
}
}
#endif
BYTE USR_IsAdpcmExt(BYTE *name) USING_0
{
if ( (name[8] == 'W' || name[8] == 'w') && \
(name[9] == 'A' || name[9] == 'a') && \
(name[10] == 'V' || name[10] == 'v') )
{
_G723=0;
_WMA=0;
return TRUE;
}
else
{
return FALSE;
}
}
#if 1 //@@chchang_012203
BYTE USR_IsG723Ext(BYTE *name) USING_0
{
if ( (name[8] == 'A' || name[8] == 'a') && \
(name[9] == 'S' || name[9] == 's') && \
(name[10] == 'F' || name[10] == 'f') )
{
_G723=TRUE; //@@chchang_012203
_WMA=FALSE;
return TRUE;
}
else
{
_G723=FALSE;
return FALSE;
}
}
#endif
WORD USR_CalFileIndex(BYTE *name) USING_0
{
WORD index = 0;
BYTE k;
for (k = 4; k < 8; k++)
{
// not numeric character just return 0
if (name[k] < '0' || name[k] > '9')
{
return 0;
}
}
for (k = 4; k < 8; k++)
{
index = index * 10 + (name[k] - '0');
}
return index;
}
//=================
//USR_FileOpenPlay
//=================
BYTE USR_FileOpenPlay(UCHAR selectDir, WORD fileIndex) 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(fileIndex&& ((sts = 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
if((fdb[0x0b])&0x01)
G_FileLock = 1;
else
G_FileLock = 0;
//======================
//get file startcluster
//======================
G_searchCluster = fdb[0x1a] | (USHORT)fdb[0x1b]<<8;
//================
//the file length
//================
G_DOS_FileSize = fdb[0x1c] | (ULONG)fdb[0x1d]<<8 | (ULONG)fdb[0x1e]<<16 | (ULONG)fdb[0x1f]<<24;
//DbgPrint("startCluster=%x\nfile Length=%lx\n",(WORD)*pStartCluster,(ULONG)G_DOS_FileSize);
fHandle = File_Open(NULL, K_DOS_ReadFile, G_searchCluster);
if (fHandle)
{
//============================
//calculate the total sectors
//============================
G_total_sectorNUM=G_DOS_FileSize>>9; //G_DOS_SectorSize=9;
if (G_DOS_FileSize%G_DOS_SectorSize==0)
{
G_total_sectorNUM-=1;
}
sts = TRUE;
//SGJM ADD
}
else
{
File_CloseErr(1, K_DOS_ReadFile);
sts = FALSE;
// DbgPrint("File_Open fail\n");
}
}
else
{
// DbgPrint("no file\n\n");
sts=FALSE;
}
}
else
{
sts=FALSE;
}
return sts;
}
BYTE USR_SetDir1(BYTE selectDir) USING_0
//BYTE USR_SetDir1(BYTE selectDir, BYTE minorMode) USING_0 //@@chchang_012203
{
BYTE dirIndex = 0xff;
switch (selectDir)
{
/*
case KDSP_WMA_MODE:
//DbgPrint("select WMA\n");
DOS_SetCurrDir(G_USR_DirList[K_USR_WMA_DIR].startCluster); //get the current Dir cluster
dirIndex = K_USR_WMA_DIR;
break;
*/
case KDSP_DVRD_MODE:
case KDSP_DVRE_MODE:
/*
if(minorMode == KDVR_G723_5K)
{
//DbgPrint("select G723\n");
DOS_SetCurrDir(G_USR_DirList[K_USR_G723_DIR].startCluster); //get the current Dir cluster
dirIndex = K_USR_G723_DIR;
}
else
{
*/
//DbgPrint("select ADPCM\n");
DOS_SetCurrDir(G_USR_DirList[K_USR_ADPCM_DIR].startCluster); //get the current Dir cluster
dirIndex = K_USR_ADPCM_DIR;
//}
break;
case KDSP_MP3_MODE:
default:
//DbgPrint("select MP3\n");
DOS_SetCurrDir(G_USR_DirList[K_USR_MP3_DIR].startCluster); //get the current Dir cluster
dirIndex = K_USR_MP3_DIR;
break;
} // end switch
return dirIndex;
}
//-----------------------------------------------------------------------------
//USR_FindCountedFile
//-----------------------------------------------------------------------------
BYTE USR_FindCountedFile(WORD fileCount, ULONG *pFdbLogAddr, WORD *pFdbOffset, BYTE filereq) USING_0
{
BYTE sts = TRUE;
WORD j, k, count=0;
ULONG logAddr;
WORD searchCluster;
WORD prevCluster;
BYTE fileType;
#if (ID3Tag_OPTION==1)
G_OldLongFDB_SectorAddr = 0;
#endif
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)
{
fileType = USR_CheckType(&G_ucDataBuffer[k]);
//DbgPrint("before file open_G723=%bx\n",(BYTE)_G723);
if (fileType!=0)
{
if(fileType==filereq)
{
count++;
}
if(count == fileCount)
{
*pFdbLogAddr = logAddr + j + k;
*pFdbOffset = k;
return TRUE;
}
}
}
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;
}
BYTE USR_FileOpenRecord(BYTE *name) USING_0
//BYTE USR_FileOpenRecord(UCHAR minorMode, BYTE *name) USING_0 //@@chchang_012203
{//DVR
BYTE selectDir;
//WORD startcluster;
BYTE sts;
BYTE filereq;
WORD fHandle;
//struct FilePointerType CurrFile;
//set the into Dir
/*
if (minorMode == KDVR_G723_5K)
selectDir = K_USR_G723_DIR;
else
*/
//============================
//Get the current Dir cluster
//============================
selectDir = K_USR_ADPCM_DIR;
DOS_SetCurrDir(G_USR_DirList[selectDir].startCluster);
//
filereq=USR_GetFileType(selectDir); //chchang_01/10/2003
//====================
//Storage flag status
//====================
sts=(BYTE)_G723;
//printf("\ntotel file %x ",G_USR_DirList[selectDir].totalFile);
//DbgPrint("before USR_FileOpenRecord _G723=%bx\n",(BYTE)_G723);
//printf("\last %x ",G_USR_DirList[selectDir].lastFileIndex);
USR_InitFileCount(&G_USR_DirList[selectDir].totalFile,filereq);
//printf("\ntotel file %x ",G_USR_DirList[selectDir].totalFile);
//printf("\last %x ",G_USR_DirList[selectDir].lastFileIndex);
_G723=sts;
//DbgPrint("after USR_FileOpenRecord _G723=%bx\n",(BYTE)_G723);
if (G_USR_DirList[selectDir].totalFile >= K_USR_MaxFileIndex)
{
// DbgPrint("Num is MAX\n");
return FALSE;
}
G_USR_DirList[selectDir].lastFileIndex++;
//if file number over, program will initial it
if (G_USR_DirList[selectDir].lastFileIndex >= K_USR_MaxFileIndex)
{
//DbgPrint("the directory file index is full.\n");
// should check if file already exist else duplicate file name happen
G_USR_DirList[selectDir].lastFileIndex = 1;
//return FALSE;
}
//
USR_SetWaveName(name, G_USR_DirList[selectDir].lastFileIndex);
fHandle = File_Open(name, K_DOS_NewFile, 64);//102502@wyeo
if (fHandle)
{
sts = 1;
}
else
{
// DbgPrint("File Close Err\n");
// File_CloseErr(1, K_DOS_NewFile);
sts = 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -