亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? fatfs_cmds.c[2010-03-16-09-02-44].sfb

?? STM32_fatfs_shell_SDHC.rar
?? SFB
字號:
/*	 
 *	commands.c
 *	the genie shell command part for ucosII
 *	under skyeye
 *
 *	Bugs report:	 ganganwen@163.com
 *	Last modified:	 2005-04-25 
 *  changed by: wenjia
 */

#include	"config.h"



FIL myfile_fat;
char mybuffer_fat[0x200];

char CurDir_fat[400]="";		//show current dir
//char CurDir_fat[400]="0:";		//show current dir   先用于DataFlash中查看,以后補充
char TargetVal_fat[400] = "";  
//TargetVal數組第一功能功能:用于組合當前目錄與輸入數據如 
//CurDir_fat = "\mydir"   cat 1.txt 時組合成cat \mydir\1.txt
//第二功能:保留CurDir目錄,因為如果cd參數第一個字符為\時就從&CurDir_fat[0] 
//開始復制,但若輸入目錄出錯則將原來的CurDir目錄還原。

UCHAR DirExist_fat(const char *DirName);
void RewindRoot_fat(void);


void CreateTargetVal_fat(const char *arg);

void shellClose(void)
{
	shellEnable=FALSE;
	f_chdrive(0); //打開DATAFLASH
	_log_Fat("close shell function!!");
}
//判斷目錄名是否存在
//1:目錄存在  0:目錄不存在
UCHAR DirExist_fat(const char *DirName)
{
    DIR dirp;
    if (FR_OK == f_opendir(&dirp,DirName))
    {
        return 1;
    } 
    else 
    {
		_error_Fat("unable to open dir: %s\r\n",DirName);
        return 0;
    }
} 
//--------------------------------------------
void _write_file_Fat(const char *name, const char *txt) 
{
  UINT x;
  
  /* create file */
  if (FR_OK == f_open(&myfile_fat,name,FA_CREATE_NEW|FA_WRITE)) 
  {
    /* write to file */
    if (FR_OK != f_write(&myfile_fat,txt,(UINT)strlen(txt),&x)) 
    {
      _error_Fat("Not all bytes written , the written data len is %d bytes.\r\n",x);
    }
    /* close file */
    f_close(&myfile_fat);
	_log_Fat("\r\n");
  }
  else 
  {
    _error_Fat("Unable to create file %s\r\n",name);
  }
}


void _dump_file_Fat(const char *name) 
{
  UINT x;

  /* open file */
  if (FR_OK == f_open(&myfile_fat,name,FA_READ)) 
  {
    /* read until EOF has been reached */
    do 
    {     
      if(FR_OK == f_read(&myfile_fat,mybuffer_fat,sizeof(mybuffer_fat), &x)) 
      {
        mybuffer_fat[x]=0;
        _log_Fat(mybuffer_fat);
      }
    } while (x);
    /* close file */
    f_close(&myfile_fat);
	_log_Fat("\r\n");
  }
  else 
  {
    _error_Fat("Unable to open file %s.\r\n",name);
  }
}



void _show_directory_Fat(const char* path)
{
    FILINFO finfo;
    DIR dirs;
    int i;

    _log_Fat("ls %s\r\n",path);
    if (f_opendir(&dirs, path) == FR_OK) 
    {
        i = strlen(path);
        while ((f_readdir(&dirs, &finfo) == FR_OK) && finfo.fname[0]) 
        {
//            _log_Fat(" %s %s Attributes: %s%s%s%s ", &finfo.fname[0],
            _log_Fat(" %s %s \tAttr: %s%s%s%s ", &finfo.fname[0],
                          (finfo.fattrib & AM_DIR) ? "\t(Dir)" : "   ",
                          (finfo.fattrib & AM_ARC) ? "A" : "-",
                          (finfo.fattrib & AM_RDO) ? "R" : "-",
                          (finfo.fattrib & AM_HID)    ? "H" : "-",
                          (finfo.fattrib & AM_SYS)    ? "S" : "-"
                          );
            if(finfo.fattrib & AM_DIR)
            {
               // _log_Fat("Size: %lu\r\n",0);
            }
            else
            {
                if(finfo.fsize<1024) // < 1KB
                    _log_Fat("  %lu bytes",finfo.fsize);
                else if(finfo.fsize<1024*1024)  // < 1Mb
                    _log_Fat("  %.2f KB",(finfo.fsize/1024.0));
                else //
                    _log_Fat("  %.2f MB",(finfo.fsize/1024.0/1024.0));
            } 
            _log_Fat("\r\n");
                        
#if 0   // 遞歸調用,遍歷文件夾                       
            if (finfo.fattrib & AM_DIR) 
            {
                sprintf(&path[i], "/%s", &finfo.fname[0]);
                scan_files(path);
                path[i] = 0;                
            } 
            else
            {
                printf("%s/%s\r\n", path, &finfo.fname[0]);
            }
#endif            
        }
    }
}



void _show_free_Fat() 
{
    FATFS *fs;
    DWORD clust;
    
    // Get free clusters
    if (f_getfree("1:", &clust, &fs)== FR_OK) 
    {
    // Get free space
        _log_Fat("\r\n%lu KB total disk space.\r\n"
                 "%lu KB available on the disk.\r\n",
                 (DWORD)(fs->max_clust - 2) * fs->csize / 2,
                 clust * fs->csize / 2);        
    }
    else 
    {
        _error_Fat("\r\nInvalid drive specified\r\n");
    }
}


long ShowFunc_Fat(int argc,char **argv)
{

    _log_Fat("\r\n=========  TargetVal_fat =  ");
	_log_Fat(TargetVal_fat);
	_log_Fat("========\r\n");
    return 0;
}



long pwdFunc_Fat(int argc,char **argv)
{
	if (argc != 0)
	{
		_error_Fat("PWD is single arg\r\n");
		return 1;
	}
	_log_Fat(CurDir_fat);
	_log_Fat("\r\n");
	return 0;
}
//功能:設置成根目錄
void RewindRoot_fat(void)
{
    CurDir_fat[0] = '\0';
    CurDir_fat[1] = '\0';
}


//更改當前目錄命令
long cdFunc_Fat(int argc,char **argv)
{
	UCHAR DirCurPos = 0;
    UCHAR CmdLen    = 0;
	UCHAR TmpVal    = 0;
    UCHAR IsRoot    = 0;
    UCHAR IsBackup  = 0;
    UCHAR BackupLen = 0;
	DirCurPos = strlen(CurDir_fat);   //取得當前目錄的字符長度
    if (argc < 1)
	{
		_error_Fat("please input command as:cd directoryname ");
        _error_Fat("\r\n cd \\ change to root\r\n cd .. \r\n cd \\MyDir\\Dir1\r\n");
		_error_Fat("\r\n");
		return 1;
	}
	if (strcmp(argv[0], "..") == 0)  //回到上一級
	{
		if (1 == DirCurPos)         //設定長度為1的為根目錄
		{
			_error_Fat("This is root dir\r\n");
			return 1;
		} 
		else 
		{
			TmpVal = DirCurPos;   //取得當前目錄的長度并從最后開始查找
		   //從最后開始查找將該級目錄清除 
           //例:\my\dir1  從1開始找到r最后找到\dir的\清除
            while (TmpVal--) 
		   {
			   if (CurDir_fat[TmpVal] == '/')   //是否找到上一級目錄
			   {
				   if (TmpVal == 0)         //根目錄
				   {
					   RewindRoot_fat();
				   } else {
				      CurDir_fat[TmpVal] = '\0';   //將最后的\換成結束符
				   }
                   _log_Fat("\r\n CurDir_fat Len = %d\r\n", strlen(CurDir_fat));
				   break;    //退出循環
               } else {
                   CurDir_fat[TmpVal] = '\0';  //清除字符
               }
		   }
		}
    } 
    else if (strcmp(argv[0], "/") == 0)	
    {   //
		RewindRoot_fat();   //回到根目錄
        _log_Fat("回到根目錄  argc = %d\r\n",argc);
	}
	else 
	{
	    if (strcmp(CurDir_fat, "/") == 0)   //比較方法用于比較是否是當前目錄
		{
            IsRoot = 1;
            if ('/' == argv[0][0])   //如果當輸入參數是帶\開始的,如cd \dir\dir1
            {
                DirCurPos = 0;   
            }
            _log_Fat("\r\ncd start at root! DirCurPos = %d\r\n", DirCurPos);
		} 
		else 
		{
            if ('/' == argv[0][0])   //如果當輸入參數是帶\開始的,如cd \dir\dir1
            {
                //因為當前目錄不是根目錄,所以為了防止出錯保留原目錄
                IsBackup  = 1;
                BackupLen = DirCurPos + 1;
                strncpy(&TargetVal_fat[0], &CurDir_fat[0], BackupLen);
                DirCurPos = 0;     //從頭開始復制命令
            } 
            else 
            {
		        CurDir_fat[DirCurPos] = '/';
			    DirCurPos++;
            }
		}
        CmdLen    = strlen(argv[0]);
        strncpy(&CurDir_fat[DirCurPos], argv[0], CmdLen + 1);  //確保字符是以'\0'結束請看FS_STRNCPY源碼
//        _log_Fat("\r\nafter strncpy() CurDir_fat= %s  DirCurPos = %d CmdLen = %d\r\n", CurDir_fat, DirCurPos, CmdLen);
        if (DirExist_fat(CurDir_fat) == 0)  //目錄不存在
        {
			_log_Fat(argv[0]);
            _log_Fat("  Dir is not exist!\r\n" );
            if (1 == IsRoot)   //是否是根目錄
            {
                RewindRoot_fat();               
            } 
            else 
            {
                if (1 == IsBackup)
                {
                    strncpy(&CurDir_fat[0], &TargetVal_fat[0], BackupLen);
                } 
                else 
                {
                    CurDir_fat[DirCurPos - 1] = '\0';   //將加入的目錄清除
                }
            }
        } 
        else 
        {
//            _log_Fat("Open %s Exist!\r\n", CurDir_fat);  //目錄存在
        }
	}
    _log_Fat("\r\nCurDir = %s \r\n", CurDir_fat);
	return 0;
}

long lsFunc_Fat(int argc,char **argv)
{			

	if(argc == 0)
    {
        _show_directory_Fat(CurDir_fat);
    } 
    else 
    {
        _show_directory_Fat(argv[0]);
    }
	return 0;
}
		

long rmFunc_Fat(int argc,char **argv)
{

	if(argc != 1)
	{
		_error_Fat("please input command as:rm filename");
		_error_Fat("\r\n\r\n");
		return 1;
	}
    CreateTargetVal_fat(argv[0]);
    if(FR_OK == f_unlink(TargetVal_fat))
	{
		_log_Fat("remove ");
		_log_Fat(argv[0]);
		_log_Fat(" successful\r\n\r\n");
	}
	else
	{
		_error_Fat("remove failure!\r\n\r\n");
	}
	return 0;
}

long writeFunc_Fat(int argc,char **argv)
{
	if(argc != 2)
	{
		_error_Fat("please input command as:create filename data");
		_error_Fat("\r\n\r\n");
		return 1;
	}
    CreateTargetVal_fat(argv[0]);

    _write_file_Fat(TargetVal_fat, argv[1]);

	return 0;
}


//用于將arg參數構造成CurDir + arg = TargetParam
void CreateTargetVal_fat(const char *arg)
{
    UCHAR CurDirLen = 0;

    CurDirLen = strlen(CurDir_fat);
    if ('/' == arg[0])
    {
        strncpy(&TargetVal_fat[0], arg, strlen(arg) + 1);
    } 
    else 
    {
        if (1 == CurDirLen)  //判斷是否當前目錄
        {
            strncpy(&TargetVal_fat[CurDirLen], arg, strlen(arg) + 1);
        } 
        else 
        {
            strncpy(TargetVal_fat, CurDir_fat, CurDirLen + 1);
            TargetVal_fat[CurDirLen++] = '/';
            _log_Fat("\r\n %s\r\n", TargetVal_fat);
            strncpy(&TargetVal_fat[CurDirLen], arg, strlen(arg) + 1);
        }
    }
    _log_Fat("\r\nTargetVal = %s\r\n", TargetVal_fat);
}

long catFunc_Fat(int argc,char **argv)
{
    if(argc != 1)
	{
		_error_Fat("please input command as:cat filename");
		_error_Fat("\r\n\r\n");
		return 1;
	}
    CreateTargetVal_fat(argv[0]);
    _dump_file_Fat(TargetVal_fat);
	return 0;
}



long mkdirFunc_Fat(int argc,char **argv)
{
	if(argc != 1)
	{
		_error_Fat("please input command as:mkdir filename");
		_error_Fat("\r\n\r\n");
		return 1;
	}
    CreateTargetVal_fat(argv[0]);

    if(FR_OK == f_mkdir(TargetVal_fat))
	{
		_log_Fat("make directory ");
		_log_Fat(argv[0]);
		_log_Fat(" successful\r\n\r\n");
	}
	else
	{
		_error_Fat("mkdir failure! please check disk full or unformated\r\n");
	}
	return 0;
}



long freeFunc_Fat(int argc,char **argv)
{
	_show_free_Fat();
	_log_Fat("\r\n");
	return 0;
}

FATFS mySDHandle;

long RegisterFunc_Fat(int argc,char **argv)
{
	f_mount(0,&mySDHandle);
	
	_log_Fat("f_mount(0,&mySDHandle)\r\n");
	return 0;
}




?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产精品精华液2区45| 在线免费观看日本一区| 天天影视网天天综合色在线播放| 国产精品的网站| 中文字幕在线免费不卡| 欧美激情一区二区三区在线| 日本一二三不卡| 亚洲欧美怡红院| 亚洲国产成人91porn| 亚洲成av人在线观看| 日本大胆欧美人术艺术动态| 青椒成人免费视频| 国内精品第一页| 99久久777色| 在线观看av不卡| 欧美一区二区在线视频| 欧美变态tickling挠脚心| 精品国产精品一区二区夜夜嗨| 久久色在线观看| 国产精品久久久久久久久图文区 | 精品免费国产一区二区三区四区| 精品日韩在线观看| 国产精品免费网站在线观看| ...av二区三区久久精品| 一区二区三区在线高清| 日韩av电影天堂| 丁香婷婷综合激情五月色| 日本伦理一区二区| 日韩视频一区二区三区在线播放| 国产日韩av一区| 夜夜嗨av一区二区三区| 精品午夜久久福利影院 | 日本一区二区三区四区| 亚洲欧美在线视频观看| 亚洲123区在线观看| 国产自产高清不卡| 在线观看日产精品| 久久影视一区二区| 亚洲小说欧美激情另类| 国产精品18久久久久久久久| 欧美午夜精品久久久久久超碰 | 精品日产卡一卡二卡麻豆| 国产精品久久久久久久浪潮网站| 天天影视色香欲综合网老头| 成人午夜短视频| 日韩一级黄色大片| 亚洲综合在线电影| 国产高清不卡二三区| 欧美人狂配大交3d怪物一区| 中文字幕在线不卡一区| 激情综合网av| 欧美日韩免费在线视频| 国产精品久久99| 国产成人在线电影| 日韩三级伦理片妻子的秘密按摩| 亚洲精品ww久久久久久p站| 激情综合色播激情啊| 欧美日韩一级黄| 亚洲天堂福利av| 不卡的电影网站| 中文一区二区完整视频在线观看| 捆绑调教一区二区三区| 欧美一区二区三区视频| 亚洲精品日日夜夜| 国产99久久久国产精品潘金 | 国产精品一区二区黑丝| 日韩一区二区三区av| 亚洲成va人在线观看| 欧美羞羞免费网站| 亚洲欧美日韩系列| 99久久精品国产毛片| 日本一区二区三区在线不卡| 国产在线精品免费| 久久亚洲精精品中文字幕早川悠里| 日韩av一二三| 日韩精品影音先锋| 久久99精品久久只有精品| 欧美电视剧免费全集观看| 日韩精品成人一区二区在线| 欧美一区在线视频| 久久99热国产| 国产亚洲一区二区三区四区| 国产精品一区在线观看乱码| 欧美激情艳妇裸体舞| 成人精品电影在线观看| 亚洲私人影院在线观看| 在线观看三级视频欧美| 偷拍一区二区三区| 日韩欧美在线123| 韩国一区二区视频| 中文文精品字幕一区二区| 99这里只有精品| 亚洲黄色av一区| 欧美一区二区三区系列电影| 韩国在线一区二区| 国产精品久久久久久久浪潮网站| 9i看片成人免费高清| 亚洲成人高清在线| 精品国产乱码久久久久久1区2区 | 99国产精品久| 亚洲综合清纯丝袜自拍| 91精品国产综合久久精品图片 | 国产精品女主播av| 色综合久久九月婷婷色综合| 亚洲6080在线| 国产无遮挡一区二区三区毛片日本| 丁香天五香天堂综合| 午夜免费久久看| 国产午夜精品在线观看| 在线中文字幕一区| 国内精品写真在线观看| 综合久久久久久| 日韩三级视频在线观看| 99re免费视频精品全部| 日本欧洲一区二区| 国产精品成人免费精品自在线观看| 欧美视频三区在线播放| 中文字幕一区二区三区四区不卡| 中文字幕中文字幕在线一区| 精品福利在线导航| 成人在线综合网| 午夜电影一区二区| 国产精品久久影院| 日韩女优电影在线观看| 色综合久久88色综合天天6| 日本中文一区二区三区| 椎名由奈av一区二区三区| 欧美电视剧在线看免费| 欧洲人成人精品| 成人av片在线观看| 久久电影网电视剧免费观看| 亚洲一区二区在线免费看| 国产欧美中文在线| 欧美一卡二卡在线观看| 在线看不卡av| 不卡在线观看av| 国产一区在线不卡| 免费美女久久99| 亚洲成人动漫在线免费观看| 亚洲精品视频在线观看免费| 国产精品污污网站在线观看| 久久综合九色综合久久久精品综合| 欧美亚洲一区三区| 91丨porny丨国产入口| 国产高清亚洲一区| 国产成人综合在线| 国产在线精品不卡| 国产在线国偷精品免费看| 麻豆传媒一区二区三区| 丝袜美腿亚洲综合| 亚洲超碰精品一区二区| 亚洲一区二区视频在线| 亚洲精品国产视频| 亚洲精品日韩一| 亚洲美腿欧美偷拍| 一区二区三区欧美亚洲| 亚洲素人一区二区| 一区二区三区丝袜| 亚洲美女淫视频| 亚洲va欧美va天堂v国产综合| 一区二区高清免费观看影视大全 | 亚洲午夜在线电影| 亚洲777理论| 日韩高清在线一区| 蜜臀av一级做a爰片久久| 五月天久久比比资源色| 日本免费在线视频不卡一不卡二| 奇米影视在线99精品| 久久精品国产999大香线蕉| 久久99精品久久久久久| 麻豆成人久久精品二区三区红| 972aa.com艺术欧美| 成人h动漫精品一区二| 欧美午夜精品一区二区三区| 精品国产免费人成电影在线观看四季| 精品国产免费一区二区三区四区 | 中文子幕无线码一区tr| 国产日韩精品一区二区浪潮av| 国产精品人妖ts系列视频| 欧美激情一区二区在线| 一区二区免费在线播放| 蜜桃视频在线一区| 成人午夜精品在线| 精品视频一区二区不卡| 欧美一区二区三区男人的天堂| 精品国产成人在线影院| 国产精品美女视频| 亚洲综合男人的天堂| 精品一区二区三区免费视频| 韩国一区二区视频| 国产欧美视频一区二区| 久久久噜噜噜久久中文字幕色伊伊| 91高清视频在线| 欧美一区二区三区在线| 国产精品污网站| 三级精品在线观看| 国产成人精品三级| 7777精品伊人久久久大香线蕉完整版 | 国产一二三精品| 欧美体内she精高潮|