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

📄 fat_top.c

📁 用at91sam7s64+ucos写的mp3播放程序
💻 C
字号:
/*
************************************************************************
Module:  	   fat_top.c                                     
Description:   In order to facilitates,file system packet routine
			    
History:                                                      
			   1.0    2006.1.6     Chanjl Create the Module
			   

copyright   (C)  Wuxi Intech Technology Co, .Ltd., 2005
************************************************************************
*/
#include "fat.h" 
#include "fat_h.h"

/*F**************************************************************************
* NAME: fat_save_file_info
*----------------------------------------------------------------------------
* PARAMS:  None
* return:
*          OK :  Success
*          KO :  Fail
*----------------------------------------------------------------------------
* PURPOSE:
*    Save Current Directory information to fat_fsave.
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
void fat_save_file_info(byte selMode)
{
#if COMPILE_FILE_SAVE_INFO == TRUE
	if(fat_fsave_read_handle)
	{
		return;
	}

	if(selMode == SEARCH_FILE)	
	{
		if((fat_global_id & FILE_DIR) != FILE_DIR)
		{
			fat_fsave[fat_fsave_index].index = fat_dir_list_index;
			fat_fsave[fat_fsave_index].file = 1;
		}
	}
	else if(selMode == GOTO_PARENT)
	{
		if(fat_fsave_index > 0)
		{
			fat_fsave_index--;
		}
	}
	else if(selMode == GOTO_CHILD)
	{
		fat_fsave[fat_fsave_index].index = fat_dir_list_index;
		fat_fsave[fat_fsave_index].file = 0;
		fat_fsave_index++;
	}
#else 
   selMode = selMode;
#endif //COMPILE_FILE_SAVE_INFO
}

#if COMPILE_FILE_SAVE_INFO == TRUE
/*F**************************************************************************
* NAME: fat_search_file
*----------------------------------------------------------------------------
* PARAMS:
*    index : index of the search file
* return:
*          OK :  Success
*          KO :  Fail
*----------------------------------------------------------------------------
* PURPOSE:
*    search file in current directory
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
byte fat_search_file(word index)
{
	Byte min;
  
  	if ((dir_is_root == FALSE)&&((fat_global_id & FILE_DIR) == FILE_DIR))
     	min = 2;
  	else
     	min = 0;

  	if(index < min)
  	return KO;	

	fat_dir_list_index = index;
	fat_scan_dir(FALSE);     

	fat_save_file_info(SEARCH_FILE);

    if (fat_dir_seek(((Uint32)fat_dir_all_count) * DIR_SIZE) == OK)
    { /* go to previous file */
      	fat_get_dir_entry(&fat_cache.current);/* update current file info */
      	return OK;
    }
    else
      	return KO;      
}

/*F**************************************************************************
* NAME: fat_search_save_file
*----------------------------------------------------------------------------
* PARAMS:  None
* return:
*          OK :  Success
*          KO :  Fail
*----------------------------------------------------------------------------
* PURPOSE:
*    Search the appointed file in memory
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE:
*----------------------------------------------------------------------------
* REQUIREMENTS:
*****************************************************************************/
byte fat_search_save_file(void)
{
	byte i;
	fat_fsave_read_handle = 1;
	for(i=0;i<MAX_SUBDIR_DEPTH;i++)
	{
		if(fat_fsave[i].file == 0)
		{//is dir
			if(fat_get_dir(FILE_DIR) ==  KO)
			{
				fat_fsave_read_handle = 0;
				return KO;
			}
					
			if(fat_search_file(fat_fsave[i].index) == KO)
			{
				fat_fsave_read_handle = 0;
				return KO;
			}

			if(fat_goto_subdir() == KO)
			{
				fat_fsave_read_handle = 0;
				return KO;				
			}
		
		}
		else
		{
			if(fat_get_dir(fat_fsave_type) ==  KO)
			{
				fat_fsave_read_handle = 0;
				return KO;
			}
					
			if(fat_search_file(fat_fsave[i].index) == KO)
			{
				fat_fsave_read_handle = 0;
				return KO;
			}
			fat_fsave_read_handle = 0;
			return OK;
		}
	}
	fat_fsave_read_handle = 0;
	return KO;
}
#endif //COMPILE_FILE_SAVE_INFO

INT8U Media_u8ReadOpen(INT32U addr)
{
   if(gl_u8CurMediaType == CUR_MEDIA_FLASH)
   {
      mSysSeltFlash();
      return disk_read_open(addr);
   }
   else if(gl_u8CurMediaType == CUR_MEDIA_SDMMC)
   {
      Media32_OpenAddr = addr;
   }
}

INT8U Media_u8ReadSector(void)
{
   if(gl_u8CurMediaType == CUR_MEDIA_FLASH)
   {
       mSysSeltFlash();
      return disk_read_sector(1);
   }
   else if(gl_u8CurMediaType == CUR_MEDIA_SDMMC)
   {
#if (SD_MMC_CARD_EXIST == TRUE)&&(COMPILE_SD_MMC_SINGLE_READ == TRUE)
       mSysSeltSDMMCCard();
      if(bMediaToDspFlag == 0)
	  {
         CardMediaReadSingle(Media32_OpenAddr,0);
	  }
	  else
	  {
	     bMediaToDspFlag = 0;
         CardMediaReadSingle(Media32_OpenAddr,2);
	  }
	  Media32_OpenAddr++;
#endif //#if SD_MMC_CARD_EXIST == TRUE
   }
   return TRUE;
}


INT8U Media_u8ReadClose(void)
{
   if(gl_u8CurMediaType == CUR_MEDIA_FLASH)
   {
       mSysSeltFlash();
      return  disk_read_close();
   }
   else if(gl_u8CurMediaType == CUR_MEDIA_SDMMC)
   {
#if SD_MMC_CARD_EXIST == TRUE
       mSysSeltSDMMCCard();
#endif
   }
   return TRUE;
}

#ifndef DISK_COMPILE_READ_ONLY
INT8U Media_u8WriteOpen(INT32U addr,INT32U count)
{
   if(gl_u8CurMediaType == CUR_MEDIA_FLASH)
   {
      mSysSeltFlash();
      return  disk_write_open(addr,count);
   }
   else if(gl_u8CurMediaType == CUR_MEDIA_SDMMC)
   {
#if SD_MMC_CARD_EXIST == TRUE
       mSysSeltSDMMCCard();
      Media32_OpenAddr = addr;
#endif
   }
   return TRUE;
}

INT8U Media_u8WriteSector(INT8U u8Selt)
{
   if(gl_u8CurMediaType == CUR_MEDIA_FLASH)
   {
       mSysSeltFlash();
      return disk_write_sector(u8Selt);
   }
   else if(gl_u8CurMediaType == CUR_MEDIA_SDMMC)
   {
#if (SD_MMC_CARD_EXIST == TRUE)&&(COMPILE_SD_MMC_SINGLE_WRITE == TRUE)
      mSysSeltSDMMCCard();
	  if(u8Selt == 2)
	  {
         cmd24_WriteSingleBlock_cb(Media32_OpenAddr,0);
	  }
	  else
	  {
         CardMediaWriteSingle(Media32_OpenAddr,0);
	  }
      Media32_OpenAddr++;
#endif
   }
}

/*
INT8U Media_u8WriteSectorCB(void)
{
   if(gl_u8CurMediaType == CUR_MEDIA_FLASH)
   {
       mSysSeltFlash();
      return disk_write_sector(2);
   }
   else if(gl_u8CurMediaType == CUR_MEDIA_SDMMC)
   {
#if (SD_MMC_CARD_EXIST == TRUE)&&(COMPILE_SD_MMC_SINGLE_WRITE == TRUE)
      mSysSeltSDMMCCard();
      CardMediaWriteSingle(Media32_OpenAddr,0);
      Media32_OpenAddr++;
#endif
   }
}
*/

INT8U Media_u8WriteClose(void)
{
   if(gl_u8CurMediaType == CUR_MEDIA_FLASH)
   {
       mSysSeltFlash();
      return disk_write_close();
   }
   else if(gl_u8CurMediaType == CUR_MEDIA_SDMMC)
   {
#if SD_MMC_CARD_EXIST == TRUE
       mSysSeltSDMMCCard();
#endif
   }
}

/*
INT8U Media_u8Init(void)
{
   if(gl_u8CurMediaType == CUR_MEDIA_FLASH)
   {
       disk_init();
   }
   else if(gl_u8CurMediaType == CUR_MEDIA_SDMMC)
   {

   }
}
*/

INT8U Media_u8Close(void)
{
   if(gl_u8CurMediaType == CUR_MEDIA_FLASH)
   {
      mSysSeltFlash();
//      return disk_close();
	  disk_close();
	  return TRUE;
   }
   else if(gl_u8CurMediaType == CUR_MEDIA_SDMMC)
   {
#if SD_MMC_CARD_EXIST == TRUE
       mSysSeltSDMMCCard();
#endif
   }
   return TRUE;
}

#if COMPILE_FAT_FORMAT == TRUE
INT8U Media_u8Format(void)
{
   if(gl_u8CurMediaType == CUR_MEDIA_FLASH)
   {
      mSysSeltFlash();
      return disk_format();
   }
   else if(gl_u8CurMediaType == CUR_MEDIA_SDMMC)
   {
#if SD_MMC_CARD_EXIST == TRUE
      mSysSeltSDMMCCard();
#endif
   }
   return TRUE;
}
#endif //COMPILE_FAT_FORMAT

#endif //DISK_COMPILE_READ_ONLY

⌨️ 快捷键说明

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