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

📄 mass_fscompat.c

📁 TELECHIPS MP3解决方案UMS实现源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	return SM_OK;
}


void	TCC730_SMC_Read_One_Page(uword drive,ubyte* buffer_start)
{
	switch(drive)
	{

		#if defined(MMC_INCLUDE)
		case DRIVE_MMC :
			TCC730_MMC_ReadOnePage(g_nCoderHandle, (void*)(buffer_start), gTempBuf);
							break;
		#else
		case DRIVE_SMC :
		#endif

		case DRIVE_NFL :	SMC_MPX_ReadOnePage( g_nCoderHandle,(long)buffer_start,gTempBuf );
							break;

	}

	//return SM_OK;
}

///////////////////////////////////////////////////////////////////////////////
//
//
//
///////////////////////////////////////////////////////////////////////////////

#define ENCODER_BUFFER_SIZE		3072

ubyte TCC730_Encoder_Init(uword	drive,long buffer_start)
{
	int nErr;
	
	switch(drive)
	{
		#if defined(MMC_INCLUDE)
		case DRIVE_MMC :	if (g_nCoderHandle > 0) (void)File_Close();

							TCC730_MMC_EncoderInit( FileInfo.Name, FileInfo.Ext, &g_nCoderHandle, buffer_start);
							DrvInfo[drive].TotalFileNum++;
							g_ActiveDrive = drive;
							break;
		#else
		case DRIVE_SMC :
		#endif

		case DRIVE_NFL :	if (g_nCoderHandle > 0) (void)File_Close();
	
							nErr = SMC_MPX_EncoderInit( drive, FileInfo.Name, FileInfo.Ext, (unsigned int*)&g_nCoderHandle, buffer_start,gTempBuf );
							if (nErr != 0)	return TCC730_SMC_ConvertErrorCode(nErr);
							DrvInfo[drive].TotalFileNum++;
							g_ActiveDrive = drive;
							break;
		
		default :			return ERR_CARD_NOT_DETECTED;
	}
	
	return SM_OK;
}

ubyte Encoder_to_SMC(uword drive, int n,uword Silence_Flag)
{

	int nErr;

	switch(drive)
	{

		#if defined(MMC_INCLUDE)
		case DRIVE_MMC :	nErr = TCC730_MMC_MoveFromEncoder( g_nCoderHandle,n,Silence_Flag );
							if (nErr != 0)	return TCC730_MMC_ConvertErrorCode(nErr);
							break;
		#else
		case DRIVE_SMC :
		#endif

		case DRIVE_NFL :	nErr = SMC_MPX_MoveFromEncoder( g_nCoderHandle,n,Silence_Flag );
							if (nErr != 0)	return TCC730_SMC_ConvertErrorCode(nErr);
							break;

		default :			return ERR_CARD_NOT_DETECTED;
	}
	
	return SM_OK;
}

ubyte TCC730_ADD_File(uword drive)
{

	#if defined(MMC_INCLUDE)
	MMC_FILE_HANDLE_INFO MMC_fhi;
	#endif

	int nTempHandle;
	nTempHandle = g_nCoderHandle;
	
	switch(drive)
	{
	
		#if defined(MMC_INCLUDE)	
		case DRIVE_MMC :	g_nCoderHandle = -1;
							if (nTempHandle > 0 && TCC730_MMC_GetOpenFileInfo(nTempHandle, &MMC_fhi) != 0)
								break;

							if ((MMC_fhi.nFlags & MMC_FILE_FLAG_CREATED) && MMC_fhi.dwFileSize == 0)
							{
								TCC730_MMC_DeleteOpenFile(nTempHandle, gTempBuf);
								MMC_ASSERT(DrvInfo[DRIVE_MMC].TotalFileNum > 0);

								if (DrvInfo[DRIVE_MMC].TotalFileNum > 0)
									DrvInfo[DRIVE_MMC].TotalFileNum--;
							}
							else
							{
								TCC730_MMC_CloseFile(nTempHandle, gTempBuf);
							}

							break;
		#else
		case DRIVE_SMC :
		#endif

		case DRIVE_NFL :	if ( SMC_FILE_GetSizeFile( g_nCoderHandle ) == 0 )
							{
									if (DrvInfo[DRIVE_NFL].TotalFileNum > 0) --DrvInfo[DRIVE_NFL].TotalFileNum;
							}
							
							SMC_MPX_EncoderClose( g_nCoderHandle,gTempBuf );
							g_nCoderHandle = -1;
							break;

		default :			return ERR_CARD_NOT_DETECTED;
	}
	
	return SM_OK;
}

ubyte TCC730_EncodeFileNum(uword drive, uword *nEncodeFile)
{
	int nFileNum;
	int nErr;
	
	switch(drive)
	{
		#if defined(MMC_INCLUDE)
		case DRIVE_MMC :	TCC730_MMC_GetEncodeFileNum( &nFileNum );
							g_ActiveDrive = drive;
							break;
		#else
		case DRIVE_SMC :
		#endif

		case DRIVE_NFL :	nErr = SMC_MPX_GetEncodeFileNum( drive,&nFileNum,gTempBuf );
							if (nErr != 0)	return TCC730_SMC_ConvertErrorCode(nErr);
							g_ActiveDrive = drive;
							break;

		default :			return ERR_CARD_NOT_DETECTED;
	}

	*nEncodeFile = nFileNum;

	return SM_OK;
}

///////////////////////////////////////////////////////////////////////////////
//
//
//
///////////////////////////////////////////////////////////////////////////////

#if defined(MMC_INCLUDE)
static void __loc_MMC_FormatCallback(unsigned long dwTotalWork, unsigned long dwProgWork)
{
	unsigned long dwPercent;

	if (dwTotalWork == 0)
		dwPercent = 0;
	else
		dwPercent = dwProgWork * 100 / dwTotalWork;

	if (g_FormatCallback)
		g_FormatCallback((ubyte)(dwPercent & 0xff));
}
#endif

ubyte FORMAT_SMC_CARD(uword drive, ubyte mode, TCC73_LCD_Display_Handler Display_Function)
{
	
	int nErr;
	int nLevel;

	#if defined(FORMAT_SPEEDUP)
	unsigned int  wDataSave;

	wDataSave	= PLL0DATA;			// Format Speed Up
	PLL0DATA	= (2443 - 2) << 2;	// 80MHz
	PLL0CON  = 5;
	while ( !(PLL0CON&0x02) ) {;};	// Wait until PLLO lock detect signal		
	#endif		

	switch(drive)
	{
		#if defined(MMC_INCLUDE)
		case DRIVE_MMC :	nLevel = (mode == LOWLEVEL_FORMAT) ? MMC_LOW_FORMAT : MMC_FAST_FORMAT;
							g_FormatCallback = Display_Function;

							nErr = TCC730_MMC_Format( nLevel, 0, __loc_MMC_FormatCallback, gTempBuf);
							if (nErr != 0) nErr = TCC730_MMC_ConvertErrorCode(nErr);
							else nErr = SM_OK;
							g_FormatCallback = NULL;
							break;
		#else
		case DRIVE_SMC :
		#endif

		case DRIVE_NFL :	nLevel = (mode == LOWLEVEL_FORMAT) ? SMC_LOW_FORMAT : SMC_FAST_FORMAT;
							
							nErr = SMC_MPX_Format( drive,nLevel,gTempBuf );
							if (nErr != 0) nErr = TCC730_SMC_ConvertErrorCode(nErr);
							else nErr = SM_OK;
							break;
							
		default :			return ERR_CARD_NOT_DETECTED;
	}

	#if defined(FORMAT_SPEEDUP)
	PLL0DATA = wDataSave;
	PLL0CON  = 5;
	while ( !(PLL0CON&0x02) ) {;};	// Wait until PLLO lock detect signal		
	#endif

	TCC730_UpdateInfo(drive);

	return nErr;
}

ubyte Update_UsedBlockNum(uword	drive)
{
	#if defined(MMC_INCLUDE)
	if ( drive != DRIVE_MMC )	SMC_FS_EraseUnUsedBlockForSMCMedia( drive,gTempBuf );
	#else
	SMC_FS_EraseUnUsedBlockForSMCMedia( drive,gTempBuf );
	#endif
	
	return SM_OK;
}

ubyte Remove_file(uword drive, uword f_index)
{
	int nError;

	switch(drive)
	{
		#if defined(MMC_INCLUDE)
		case DRIVE_MMC :	nError = TCC730_MMC_DeleteFileByIndex(f_index, gTempBuf);
							if (nError != 0) nError = TCC730_MMC_ConvertErrorCode(nError);
							break;
		#else
		case DRIVE_SMC :
		#endif					

		case DRIVE_NFL :	nError = SMC_MPX_DeleteFileByIndex( drive,f_index,gTempBuf );
							if (nError != 0) nError = TCC730_SMC_ConvertErrorCode(nError);
							break;

		default :			nError = ERR_CARD_NOT_DETECTED;
	}

	return nError;
}

void TCC730_SetChipEnable(ubyte ChipEn_Mode)
{
	UNREFERENCED_PARAMETER(ChipEn_Mode);
}

ubyte CopyFAT2toFAT1(uword drive)
{
	UNREFERENCED_PARAMETER(drive);
	return SM_OK;
}

ubyte Erase_UnusedBlock(uword drive)
{
	UNREFERENCED_PARAMETER(drive);
	return SM_OK;
}

ubyte TCC730_ReadParameter(ubyte page)
{
	unsigned int nHandle;

	if ( SMC_FILE_OpenFileByCode( DRIVE_NFL,"\\CONFIG.SYS",OPEN_R,&nHandle,gTempBuf2 ) ) return SMC_ERR_HANDLE_EXHAUST;

	SMC_FILE_SeekFile( nHandle,SEEK_BEGIN,(long)page*512,gTempBuf2 );
	
	if ( SMC_FILE_ReadFile( nHandle,gTempBuf,512 ) != 512 )
	{
		SMC_FILE_CloseFile( nHandle,gTempBuf2 );
		return SMC_ERR_HANDLE_EXHAUST;
	}

	SMC_FILE_CloseFile( nHandle,gTempBuf2 );
	return SM_OK;
}

ubyte TCC730_SaveParameter(ubyte page)
{
	
	long		 dwSectorSize;
	unsigned int nHandle;

	// If Config File is already exist than open File but else Create File
	if ( SMC_FILE_OpenFileByCode( DRIVE_NFL,"\\CONFIG.SYS",OPEN_W,&nHandle,gTempBuf2 ) )
	{
		if ( SMC_FILE_CreateFileByCode( DRIVE_NFL,"\\CONFIG.SYS",&nHandle,gTempBuf2 ) )
		{
			 return SMC_ERR_HANDLE_EXHAUST;
		}
	}		 

	dwSectorSize = SMC_FILE_GetSizeFile( nHandle );
	dwSectorSize >>= 9;

	if (dwSectorSize < page)
	{
		SMC_FILE_SeekFile( nHandle,SEEK_BEGIN,(long)dwSectorSize*512,gTempBuf2 );
		TCC730_ZeroMemory(gTempBuf2, 512);

		while( dwSectorSize < page)
		{
			SMC_FILE_WriteFile( nHandle,gTempBuf2,512 );
			dwSectorSize++;
		}
	}
	else
	{
		SMC_FILE_SeekFile( nHandle,SEEK_BEGIN,(long)page*512,gTempBuf2 );
	}

	SMC_FILE_WriteFile( nHandle,gTempBuf,512 );

	SMC_FILE_CloseFile( nHandle,gTempBuf2 );
	
	return SM_OK;

}

///////////////////////////////////////////////////////////////////////////////
//
//	UNICODE related
//
///////////////////////////////////////////////////////////////////////////////

#if defined(UNICODE_INCLUDE)
uword  TCC730_FS_CheckFontFileExist(void)
{
	if ( SMC_DRV_GetIsUnicodeFont( gTempBuf ) )	return FALSE;
	
	return TRUE;
}

uword  TCC730_FS_OpenUnicodeFontBitMapFile(void)
{		
	return SM_OK;
}

uword  TCC730_FS_GetUnicodeFontBitMap(long new_code,ubyte *str,uword size)
{

	if ( SMC_DRV_LoadUnicodeFont( new_code,str,size ) ) return ERR_FONT_BLOCK_CHAIN;
	
	return SM_OK;
}

uword  TCC730_FS_CloseUnicodeFontBitMapFile(void)
{	
	return SM_OK;
}

#endif

uword TCC730_FS_GetLFNInfo(uword drive, uword index,ubyte *str,uword *size)
{
	int nError;

	switch(drive)
	{
		#if defined(MMC_INCLUDE)
		case DRIVE_MMC :	nError = TCC730_MMC_GetLongFileNameByIndex( (int)index, (unsigned short*)str, (int*)size, gTempBuf2 );
							if (nError != 0) nError = TCC730_MMC_ConvertErrorCode(nError);
							break;
		#else
		case DRIVE_SMC :
		#endif					

		case DRIVE_NFL :	nError = SMC_MPX_GetLongFileNameByIndex( drive, index, str, size, gTempBuf2 );
							if (nError != 0) nError = TCC730_SMC_ConvertErrorCode(nError);
							break;
	
		default :			nError = ERR_CARD_NOT_DETECTED;
	}

	return nError;
}



///////////////////////////////////////////////////////////////////////////////
//
//
//
///////////////////////////////////////////////////////////////////////////////

#if defined(MMC_INCLUDE)
int TCC730_MMC_ConvertErrorCode(int nMMCErrCode)
{
	int i;

	if (nMMCErrCode == 0)
		return 0;

	for (i = 0; MMCErrCodeMap[i].nMediaErr != 0 && MMCErrCodeMap[i].nMediaErr != nMMCErrCode; i++)
		;

	return MMCErrCodeMap[i].nFileSysErr;
}
#endif


int TCC730_SMC_ConvertErrorCode(int nSMCErrCode)
{

	int i;
	int	ErrCode;

	if ( nSMCErrCode == 0 )	return 0;
		
	i=0;
	while(1)
	{
		ErrCode = SMCErrCodeMap[i].nMediaErr;
		
		if ( ErrCode == 0 ) return 0;
		
		if ( ErrCode == nSMCErrCode )
		{
			return SMCErrCodeMap[i].nFileSysErr;
		}
		
		++i;
	}		
			
	return 0;
}

///////////////////////////////////////////////////////////////////////////////
//
//	Added from v1.34
//
///////////////////////////////////////////////////////////////////////////////

unsigned TCC730_FS_Get_Entry_Count(unsigned drive)
{
	unsigned nCount;

	switch(drive)
	{
		#if defined(MMC_INCLUDE)
		case DRIVE_MMC :
							nCount = TCC730_MMC_GetEntryCount(gTempBuf);
							break;
		#else
		case DRIVE_SMC :
		#endif

		case DRIVE_NFL :	
							nCount = SMC_FS_GetEntryCount(drive,gTempBuf);
							break;

		default :			nCount = 0;
	}

	return nCount;
}

unsigned TCC730_Read_RootEntry(unsigned drive, unsigned index, unsigned char* buffer)
{
	int nError;

	switch(drive)
	{
		#if defined(MMC_INCLUDE)
		case DRIVE_MMC :
							nError = TCC730_MMC_ReadEntrySector(index, buffer);
							if (nError != 0)
								nError = TCC730_MMC_ConvertErrorCode(nError);
							break;

		#else
		case DRIVE_SMC :
		#endif
	
		case DRIVE_NFL :
							nError = SMC_FS_ReadEntrySector(drive, index, buffer, gTempBuf2);
							if (nError != 0)
								nError = TCC730_SMC_ConvertErrorCode(nError);
							break;

		default :			return ERR_CARD_NOT_DETECTED;
	}

	return nError;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -