?? file_sys.h
字號(hào):
/* CH376芯片 文件系統(tǒng)層 V1.0 */
/* 提供文件系統(tǒng)常用子程序,提供命令打包 */
/* 不使用的子程序可以注釋掉,從而節(jié)約單片機(jī)的程序ROM空間和數(shù)據(jù)RAM空間 */
/* 這里的子程序是通過括號(hào)中的變量傳遞參數(shù),如果參數(shù)較多,為了節(jié)約RAM,也可以參考CH375子程序庫改成通過同一全局變量/聯(lián)合結(jié)構(gòu)CH376_CMD_DATA傳遞 */
/* name 參數(shù)是指短文件名, 可以包括根目錄符, 但不含有路徑分隔符, 總長(zhǎng)度不超過1+8+1+3+1字節(jié) */
/* PathName 參數(shù)是指全路徑的短文件名, 包括根目錄符、多級(jí)子目錄及路徑分隔符、文件名/目錄名 */
/* LongName 參數(shù)是指長(zhǎng)文件名, 以UNICODE小端順序編碼, 以兩個(gè)0字節(jié)結(jié)束, 使用長(zhǎng)文件名子程序必須先定義全局緩沖區(qū)GlobalBuf, 長(zhǎng)度不小于64字節(jié), 可以與其它子程序共用 */
/* 定義 NO_DEFAULT_CH376_INT 用于禁止默認(rèn)的Wait376Interrupt子程序,禁止后,應(yīng)用程序必須自行定義一個(gè)同名子程序 */
/* 定義 DEF_INT_TIMEOUT 用于設(shè)置默認(rèn)的Wait376Interrupt子程序中的等待中斷的超時(shí)時(shí)間/循環(huán)計(jì)數(shù)值, 0則不檢查超時(shí)而一直等待 */
/* 定義 EN_DIR_CREATE 用于提供新建多級(jí)子目錄的子程序,默認(rèn)是不提供 */
/* 定義 EN_DISK_QUERY 用于提供磁盤容量查詢和剩余空間查詢的子程序,默認(rèn)是不提供 */
/* 定義 EN_SECTOR_ACCESS 用于提供以扇區(qū)為單位讀寫文件的子程序,默認(rèn)是不提供 */
/* 定義 EN_LONG_NAME 用于提供支持長(zhǎng)文件名的子程序,默認(rèn)是不提供 */
#ifndef __CH376_FS_H__
#define __CH376_FS_H__
#include "HAL.H"
#define STRUCT_OFFSET( s, m ) ( (UINT8)( & ((s *)0) -> m ) ) /* 定義獲取結(jié)構(gòu)成員相對(duì)偏移地址的宏 */
#ifdef EN_LONG_NAME
#ifndef LONG_NAME_BUF_LEN
#define LONG_NAME_BUF_LEN ( LONG_NAME_PER_DIR * 20 ) /* 自行定義的長(zhǎng)文件名緩沖區(qū)長(zhǎng)度,最小值為L(zhǎng)ONG_NAME_PER_DIR*1 */
#endif
#endif
UINT8 CH376ReadBlock( PUINT8 buf ); /* 從當(dāng)前主機(jī)端點(diǎn)的接收緩沖區(qū)讀取數(shù)據(jù)塊,返回長(zhǎng)度 */
UINT8 CH376WriteReqBlock( PUINT8 buf ); /* 向內(nèi)部指定緩沖區(qū)寫入請(qǐng)求的數(shù)據(jù)塊,返回長(zhǎng)度 */
void CH376WriteHostBlock( PUINT8 buf, UINT8 len ); /* 向USB主機(jī)端點(diǎn)的發(fā)送緩沖區(qū)寫入數(shù)據(jù)塊 */
void CH376WriteOfsBlock( PUINT8 buf, UINT8 ofs, UINT8 len ); /* 向內(nèi)部緩沖區(qū)指定偏移地址寫入數(shù)據(jù)塊 */
void CH376SetFileName( PUINT8 name ); /* 設(shè)置將要操作的文件的文件名 */
UINT32 CH376Read32bitDat( void ); /* 從CH376芯片讀取32位的數(shù)據(jù)并結(jié)束命令 */
UINT8 CH376ReadVar8( UINT8 var ); /* 讀CH376芯片內(nèi)部的8位變量 */
void CH376WriteVar8( UINT8 var, UINT8 dat ); /* 寫CH376芯片內(nèi)部的8位變量 */
UINT32 CH376ReadVar32( UINT8 var ); /* 讀CH376芯片內(nèi)部的32位變量 */
void CH376WriteVar32( UINT8 var, UINT32 dat ); /* 寫CH376芯片內(nèi)部的32位變量 */
void CH376EndDirInfo( void ); /* 在調(diào)用CH376DirInfoRead獲取FAT_DIR_INFO結(jié)構(gòu)之后應(yīng)該通知CH376結(jié)束 */
UINT32 CH376GetFileSize( void ); /* 讀取當(dāng)前文件長(zhǎng)度 */
UINT8 CH376GetDiskStatus( void ); /* 獲取磁盤和文件系統(tǒng)的工作狀態(tài) */
UINT8 CH376GetIntStatus( void ); /* 獲取中斷狀態(tài)并取消中斷請(qǐng)求 */
#ifndef NO_DEFAULT_CH376_INT
UINT8 Wait376Interrupt( void ); /* 等待CH376中斷(INT#低電平),返回中斷狀態(tài)碼, 超時(shí)則返回ERR_USB_UNKNOWN */
#endif
UINT8 CH376SendCmdWaitInt( UINT8 mCmd ); /* 發(fā)出命令碼后,等待中斷 */
UINT8 CH376SendCmdDatWaitInt( UINT8 mCmd, UINT8 mDat ); /* 發(fā)出命令碼和一字節(jié)數(shù)據(jù)后,等待中斷 */
UINT8 CH376DiskReqSense( void ); /* 檢查USB存儲(chǔ)器錯(cuò)誤 */
UINT8 CH376DiskConnect( void ); /* 檢查U盤是否連接,不支持SD卡 */
UINT8 CH376DiskMount( void ); /* 初始化磁盤并測(cè)試磁盤是否就緒 */
UINT8 CH376FileOpen( PUINT8 name ); /* 在根目錄或者當(dāng)前目錄下打開文件或者目錄(文件夾) */
UINT8 CH376FileCreate( PUINT8 name ); /* 在根目錄或者當(dāng)前目錄下新建文件,如果文件已經(jīng)存在那么先刪除 */
UINT8 CH376DirCreate( PUINT8 name ); /* 在根目錄下新建目錄(文件夾)并打開,如果目錄已經(jīng)存在那么直接打開 */
UINT8 CH376SeparatePath( PUINT8 path ); /* 從路徑中分離出最后一級(jí)文件名或者目錄(文件夾)名,返回最后一級(jí)文件名或者目錄名的字節(jié)偏移 */
UINT8 CH376FileOpenDir( PUINT8 PathName, UINT8 StopName ); /* 打開多級(jí)目錄下的文件或者目錄的上級(jí)目錄,支持多級(jí)目錄路徑,支持路徑分隔符,路徑長(zhǎng)度不超過255個(gè)字符 */
/* StopName 指向最后一級(jí)文件名或者目錄名 */
UINT8 CH376FileOpenPath( PUINT8 PathName ); /* 打開多級(jí)目錄下的文件或者目錄(文件夾),支持多級(jí)目錄路徑,支持路徑分隔符,路徑長(zhǎng)度不超過255個(gè)字符 */
UINT8 CH376FileCreatePath( PUINT8 PathName ); /* 新建多級(jí)目錄下的文件,支持多級(jí)目錄路徑,支持路徑分隔符,路徑長(zhǎng)度不超過255個(gè)字符 */
#ifdef EN_DIR_CREATE
UINT8 CH376DirCreatePath( PUINT8 PathName ); /* 新建多級(jí)目錄下的目錄(文件夾)并打開,支持多級(jí)目錄路徑,支持路徑分隔符,路徑長(zhǎng)度不超過255個(gè)字符 */
#endif
UINT8 CH376FileErase( PUINT8 PathName ); /* 刪除文件,如果已經(jīng)打開則直接刪除,否則對(duì)于文件會(huì)先打開再刪除,支持多級(jí)目錄路徑 */
UINT8 CH376FileClose( UINT8 UpdateSz ); /* 關(guān)閉當(dāng)前已經(jīng)打開的文件或者目錄(文件夾) */
UINT8 CH376DirInfoRead( void ); /* 讀取當(dāng)前文件的目錄信息 */
UINT8 CH376DirInfoSave( void ); /* 保存文件的目錄信息 */
UINT8 CH376ByteLocate( UINT32 offset ); /* 以字節(jié)為單位移動(dòng)當(dāng)前文件指針 */
UINT8 CH376ByteRead( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ); /* 以字節(jié)為單位從當(dāng)前位置讀取數(shù)據(jù)塊 */
UINT8 CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ); /* 以字節(jié)為單位向當(dāng)前位置寫入數(shù)據(jù)塊 */
#ifdef EN_DISK_QUERY
UINT8 CH376DiskCapacity( PUINT32 DiskCap ); /* 查詢磁盤物理容量,扇區(qū)數(shù) */
UINT8 CH376DiskQuery( PUINT32 DiskFre ); /* 查詢磁盤剩余空間信息,扇區(qū)數(shù) */
#endif
UINT8 CH376SecLocate( UINT32 offset ); /* 以扇區(qū)為單位移動(dòng)當(dāng)前文件指針 */
#ifdef EN_SECTOR_ACCESS
UINT8 CH376DiskReadSec( PUINT8 buf, UINT32 iLbaStart, UINT8 iSectorCount ); /* 從U盤讀取多個(gè)扇區(qū)的數(shù)據(jù)塊到緩沖區(qū),不支持SD卡 */
UINT8 CH376DiskWriteSec( PUINT8 buf, UINT32 iLbaStart, UINT8 iSectorCount ); /* 將緩沖區(qū)中的多個(gè)扇區(qū)的數(shù)據(jù)塊寫入U(xiǎn)盤,不支持SD卡 */
UINT8 CH376SecRead( PUINT8 buf, UINT8 ReqCount, PUINT8 RealCount ); /* 以扇區(qū)為單位從當(dāng)前位置讀取數(shù)據(jù)塊,不支持SD卡 */
UINT8 CH376SecWrite( PUINT8 buf, UINT8 ReqCount, PUINT8 RealCount ); /* 以扇區(qū)為單位在當(dāng)前位置寫入數(shù)據(jù)塊,不支持SD卡 */
#endif
#ifdef EN_LONG_NAME
UINT8 CH376LongNameWrite( PUINT8 buf, UINT16 ReqCount ); /* 長(zhǎng)文件名專用的字節(jié)寫子程序 */
UINT8 CH376CheckNameSum( PUINT8 DirName ); /* 計(jì)算長(zhǎng)文件名的短文件名檢驗(yàn)和,輸入為無小數(shù)點(diǎn)分隔符的固定11字節(jié)格式 */
UINT8 CH376LocateInUpDir( PUINT8 PathName ); /* 在上級(jí)目錄(文件夾)中移動(dòng)文件指針到當(dāng)前文件目錄信息所在的扇區(qū) */
/* 另外,順便將當(dāng)前文件目錄信息所在的扇區(qū)的前一個(gè)扇區(qū)的LBA地址寫入CH376內(nèi)部VAR_FAT_DIR_LBA變量(為了方便收集長(zhǎng)文件名時(shí)向前搜索,否則要多移動(dòng)一次) */
/* 使用了全局緩沖區(qū)GlobalBuf的前12個(gè)字節(jié) */
UINT8 CH376GetLongName( PUINT8 PathName, PUINT8 LongName ); /* 由短文件名或者目錄(文件夾)名獲得相應(yīng)的長(zhǎng)文件名 */
/* 需要輸入短文件名的完整路徑PathName,需要提供緩沖區(qū)接收長(zhǎng)文件名LongName(以UNICODE小端編碼,以雙0結(jié)束) */
/* 使用了全局緩沖區(qū)GlobalBuf的前34個(gè)字節(jié),sizeof(GlobalBuf)>=sizeof(FAT_DIR_INFO)+2 */
UINT8 CH376CreateLongName( PUINT8 PathName, PUINT8 LongName ); /* 新建具有長(zhǎng)文件名的文件,關(guān)閉文件后返回,LongName輸入路徑必須在RAM中 */
/* 需要輸入短文件名的完整路徑PathName(請(qǐng)事先參考FAT規(guī)范由長(zhǎng)文件名自行產(chǎn)生),需要輸入以UNICODE小端編碼的以雙0結(jié)束的長(zhǎng)文件名LongName */
/* 使用了全局緩沖區(qū)GlobalBuf的前64個(gè)字節(jié),sizeof(GlobalBuf)>=sizeof(FAT_DIR_INFO)*2 */
#endif
#endif
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -