⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dosusr.c

📁 凌阳MP3 spSPCA755yuanma
💻 C
📖 第 1 页 / 共 4 页
字号:
//-----------------------------------------------------------------------------
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 + -