📄 mass_fscompat.c
字号:
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 + -