/* CH376оƬ Îļþϵͳ²ã V1.0 */
|
/* ÌṩÎļþϵͳ³£ÓÃ×Ó³ÌÐò,ÌṩÃüÁî´ò°ü */
|
/* ²»Ê¹ÓõÄ×Ó³ÌÐò¿ÉÒÔ×¢Ê͵ô,´Ó¶ø½ÚÔ¼µ¥Æ¬»úµÄ³ÌÐòROM¿Õ¼äºÍÊý¾ÝRAM¿Õ¼ä */
|
/* ÕâÀïµÄ×Ó³ÌÐòÊÇͨ¹ýÀ¨ºÅÖеıäÁ¿´«µÝ²ÎÊý,Èç¹û²ÎÊý½Ï¶à,ΪÁ˽ÚÔ¼RAM,Ò²¿ÉÒԲο¼CH375×Ó³ÌÐò¿â¸Ä³Éͨ¹ýͬһȫ¾Ö±äÁ¿/ÁªºÏ½á¹¹CH376_CMD_DATA´«µÝ */
|
|
/* name ²ÎÊýÊÇÖ¸¶ÌÎļþÃû, ¿ÉÒÔ°üÀ¨¸ùĿ¼·û, µ«²»º¬Óз¾¶·Ö¸ô·û, ×ܳ¤¶È²»³¬¹ý1+8+1+3+1×Ö½Ú */
|
/* PathName ²ÎÊýÊÇָȫ·¾¶µÄ¶ÌÎļþÃû, °üÀ¨¸ùĿ¼·û¡¢¶à¼¶×ÓĿ¼¼°Â·¾¶·Ö¸ô·û¡¢ÎļþÃû/Ŀ¼Ãû */
|
/* LongName ²ÎÊýÊÇÖ¸³¤ÎļþÃû, ÒÔUNICODEС¶Ë˳Ðò±àÂë, ÒÔÁ½¸ö0×Ö½Ú½áÊø, ʹÓó¤ÎļþÃû×Ó³ÌÐò±ØÐëÏȶ¨ÒåÈ«¾Ö»º³åÇøGlobalBuf, ³¤¶È²»Ð¡ÓÚ64×Ö½Ú, ¿ÉÒÔÓëÆäËü×Ó³ÌÐò¹²Óà */
|
|
/* ¶¨Òå NO_DEFAULT_CH376_INT ÓÃÓÚ½ûֹĬÈϵÄWait376Interrupt×Ó³ÌÐò,½ûÖ¹ºó,Ó¦ÓóÌÐò±ØÐë×ÔÐж¨ÒåÒ»¸öͬÃû×Ó³ÌÐò */
|
/* ¶¨Òå DEF_INT_TIMEOUT ÓÃÓÚÉèÖÃĬÈϵÄWait376Interrupt×Ó³ÌÐòÖеĵȴýÖжϵij¬Ê±Ê±¼ä/Ñ»·¼ÆÊýÖµ, 0Ôò²»¼ì²é³¬Ê±¶øÒ»Ö±µÈ´ý */
|
/* ¶¨Òå EN_DIR_CREATE ÓÃÓÚÌṩн¨¶à¼¶×ÓĿ¼µÄ×Ó³ÌÐò,ĬÈÏÊDz»Ìṩ */
|
/* ¶¨Òå EN_DISK_QUERY ÓÃÓÚÌṩ´ÅÅÌÈÝÁ¿²éѯºÍÊ£Óà¿Õ¼ä²éѯµÄ×Ó³ÌÐò,ĬÈÏÊDz»Ìṩ */
|
/* ¶¨Òå EN_SECTOR_ACCESS ÓÃÓÚÌṩÒÔÉÈÇøÎªµ¥Î»¶ÁдÎļþµÄ×Ó³ÌÐò,ĬÈÏÊDz»Ìṩ */
|
/* ¶¨Òå EN_LONG_NAME ÓÃÓÚÌṩ֧³Ö³¤ÎļþÃûµÄ×Ó³ÌÐò,ĬÈÏÊDz»Ìṩ */
|
|
#ifndef __CH376_FS_H__
|
#define __CH376_FS_H__
|
|
#include "CH376inc.h"
|
|
#define STRUCT_OFFSET( s, m ) ( (UINT8)( & ((s *)0) -> m ) ) /* ¶¨Òå»ñÈ¡½á¹¹³ÉÔ±Ïà¶ÔÆ«ÒÆµØÖ·µÄºê */
|
#define EN_LONG_NAME 1
|
|
#ifdef EN_LONG_NAME
|
#ifndef LONG_NAME_BUF_LEN
|
#define LONG_NAME_BUF_LEN 64 //( LONG_NAME_PER_DIR * 20 ) /* ×ÔÐж¨ÒåµÄ³¤ÎļþÃû»º³åÇø³¤¶È,×îСֵΪLONG_NAME_PER_DIR*1 */
|
#endif
|
#endif
|
|
//#define GlobalBuf buf[LONG_NAME_BUF_LEN] /* ³¤ÎļþÃû×Ó³ÌÐòÐèÒªÌṩȫ¾Ö»º³åÇø,³¤¶È²»Ð¡ÓÚ64×Ö½Ú */
|
|
UINT8 CH376ReadBlock( PUINT8 buf ); /* ´Óµ±Ç°Ö÷»ú¶ËµãµÄ½ÓÊÕ»º³åÇø¶ÁÈ¡Êý¾Ý¿é,·µ»Ø³¤¶È */
|
|
UINT8 CH376WriteReqBlock( PUINT8 buf ); /* ÏòÄÚ²¿Ö¸¶¨»º³åÇøÐ´ÈëÇëÇóµÄÊý¾Ý¿é,·µ»Ø³¤¶È */
|
|
void CH376WriteHostBlock( PUINT8 buf, UINT8 len ); /* ÏòUSBÖ÷»ú¶ËµãµÄ·¢ËÍ»º³åÇøÐ´ÈëÊý¾Ý¿é */
|
|
void CH376WriteOfsBlock( PUINT8 buf, UINT8 ofs, UINT8 len ); /* ÏòÄÚ²¿»º³åÇøÖ¸¶¨Æ«ÒƵØÖ·Ð´ÈëÊý¾Ý¿é */
|
|
void CH376SetFileName( PUINT8 name ); /* ÉèÖý«Òª²Ù×÷µÄÎļþµÄÎļþÃû */
|
|
UINT32 CH376Read32bitDat( void ); /* ´ÓCH376оƬ¶ÁÈ¡32λµÄÊý¾Ý²¢½áÊøÃüÁî */
|
|
UINT8 CH376ReadVar8( UINT8 var ); /* ¶ÁCH376оƬÄÚ²¿µÄ8λ±äÁ¿ */
|
|
void CH376WriteVar8( UINT8 var, UINT8 dat ); /* дCH376оƬÄÚ²¿µÄ8λ±äÁ¿ */
|
|
UINT32 CH376ReadVar32( UINT8 var ); /* ¶ÁCH376оƬÄÚ²¿µÄ32λ±äÁ¿ */
|
|
void CH376WriteVar32( UINT8 var, UINT32 dat ); /* дCH376оƬÄÚ²¿µÄ32λ±äÁ¿ */
|
|
void CH376EndDirInfo( void ); /* ÔÚµ÷ÓÃCH376DirInfoRead»ñÈ¡FAT_DIR_INFO½á¹¹Ö®ºóÓ¦¸Ã֪ͨCH376½áÊø */
|
|
UINT32 CH376GetFileSize( void ); /* ¶ÁÈ¡µ±Ç°Îļþ³¤¶È */
|
|
UINT8 CH376GetDiskStatus( void ); /* »ñÈ¡´ÅÅ̺ÍÎļþϵͳµÄ¹¤×÷״̬ */
|
|
UINT8 CH376GetIntStatus( void ); /* »ñÈ¡ÖжÏ״̬²¢È¡ÏûÖжÏÇëÇó */
|
|
|
UINT8 Wait376Interrupt( void ); /* µÈ´ýCH376ÖжÏ(INT#µÍµçƽ)£¬·µ»ØÖжÏ״̬Âë, ³¬Ê±Ôò·µ»ØERR_USB_UNKNOWN */
|
|
|
UINT8 CH376SendCmdWaitInt( UINT8 mCmd ); /* ·¢³öÃüÁîÂëºó,µÈ´ýÖÐ¶Ï */
|
|
UINT8 CH376SendCmdDatWaitInt( UINT8 mCmd, UINT8 mDat ); /* ·¢³öÃüÁîÂëºÍÒ»×Ö½ÚÊý¾Ýºó,µÈ´ýÖÐ¶Ï */
|
|
UINT8 CH376DiskReqSense( void ); /* ¼ì²éUSB´æ´¢Æ÷´íÎó */
|
|
UINT8 CH376DiskConnect( void ); /* ¼ì²éUÅÌÊÇ·ñÁ¬½Ó,²»Ö§³ÖSD¿¨ */
|
|
UINT8 CH376DiskMount( void ); /* ³õʼ»¯´ÅÅ̲¢²âÊÔ´ÅÅÌÊÇ·ñ¾ÍÐ÷ */
|
|
UINT8 CH376FileOpen( PUINT8 name ); /* ÔÚ¸ùĿ¼»òÕßµ±Ç°Ä¿Â¼Ï´ò¿ªÎļþ»òÕßĿ¼(Îļþ¼Ð) */
|
|
UINT8 CH376FileCreate( PUINT8 name ); /* ÔÚ¸ùĿ¼»òÕßµ±Ç°Ä¿Â¼ÏÂн¨Îļþ,Èç¹ûÎļþÒѾ´æÔÚÄÇôÏÈɾ³ý */
|
|
UINT8 CH376DirCreate( PUINT8 name ); /* ÔÚ¸ùĿ¼ÏÂн¨Ä¿Â¼(Îļþ¼Ð)²¢´ò¿ª,Èç¹ûĿ¼ÒѾ´æÔÚÄÇôֱ½Ó´ò¿ª */
|
|
UINT8 CH376SeparatePath( PUINT8 path ); /* ´Ó·¾¶ÖзÖÀë³ö×îºóÒ»¼¶ÎļþÃû»òÕßĿ¼(Îļþ¼Ð)Ãû,·µ»Ø×îºóÒ»¼¶ÎļþÃû»òÕßĿ¼ÃûµÄ×Ö½ÚÆ«ÒÆ */
|
|
UINT8 CH376FileOpenDir( PUINT8 PathName, UINT8 StopName ); /* ´ò¿ª¶à¼¶Ä¿Â¼ÏµÄÎļþ»òÕßĿ¼µÄÉϼ¶Ä¿Â¼,Ö§³Ö¶à¼¶Ä¿Â¼Â·¾¶,Ö§³Ö·¾¶·Ö¸ô·û,·¾¶³¤¶È²»³¬¹ý255¸ö×Ö·û */
|
/* StopName Ö¸Ïò×îºóÒ»¼¶ÎļþÃû»òÕßĿ¼Ãû */
|
|
UINT8 CH376FileOpenPath( PUINT8 PathName ); /* ´ò¿ª¶à¼¶Ä¿Â¼ÏµÄÎļþ»òÕßĿ¼(Îļþ¼Ð),Ö§³Ö¶à¼¶Ä¿Â¼Â·¾¶,Ö§³Ö·¾¶·Ö¸ô·û,·¾¶³¤¶È²»³¬¹ý255¸ö×Ö·û */
|
|
UINT8 CH376FileCreatePath( PUINT8 PathName ); /* н¨¶à¼¶Ä¿Â¼ÏµÄÎļþ,Ö§³Ö¶à¼¶Ä¿Â¼Â·¾¶,Ö§³Ö·¾¶·Ö¸ô·û,·¾¶³¤¶È²»³¬¹ý255¸ö×Ö·û */
|
|
#ifdef EN_DIR_CREATE
|
UINT8 CH376DirCreatePath( PUINT8 PathName ); /* н¨¶à¼¶Ä¿Â¼ÏµÄĿ¼(Îļþ¼Ð)²¢´ò¿ª,Ö§³Ö¶à¼¶Ä¿Â¼Â·¾¶,Ö§³Ö·¾¶·Ö¸ô·û,·¾¶³¤¶È²»³¬¹ý255¸ö×Ö·û */
|
#endif
|
|
UINT8 CH376FileErase( PUINT8 PathName ); /* ɾ³ýÎļþ,Èç¹ûÒѾ´ò¿ªÔòÖ±½Óɾ³ý,·ñÔò¶ÔÓÚÎļþ»áÏÈ´ò¿ªÔÙɾ³ý,Ö§³Ö¶à¼¶Ä¿Â¼Â·¾¶ */
|
|
UINT8 CH376FileClose( UINT8 UpdateSz ); /* ¹Ø±Õµ±Ç°ÒѾ´ò¿ªµÄÎļþ»òÕßĿ¼(Îļþ¼Ð) */
|
|
UINT8 CH376DirInfoRead( void ); /* ¶ÁÈ¡µ±Ç°ÎļþµÄĿ¼ÐÅÏ¢ */
|
|
UINT8 CH376DirInfoSave( void ); /* ±£´æÎļþµÄĿ¼ÐÅÏ¢ */
|
|
UINT8 CH376ByteLocate( UINT32 offset ); /* ÒÔ×Ö½ÚΪµ¥Î»Òƶ¯µ±Ç°ÎļþÖ¸Õë */
|
|
UINT8 CH376ByteRead( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ); /* ÒÔ×Ö½ÚΪµ¥Î»´Óµ±Ç°Î»ÖöÁÈ¡Êý¾Ý¿é */
|
|
UINT8 CH376ByteWrite( PUINT8 buf, UINT16 ReqCount, PUINT16 RealCount ); /* ÒÔ×Ö½ÚΪµ¥Î»Ïòµ±Ç°Î»ÖÃдÈëÊý¾Ý¿é */
|
|
|
|
UINT8 CH376DiskCapacity( PUINT32 DiskCap ); /* ²éѯ´ÅÅÌÎïÀíÈÝÁ¿,ÉÈÇøÊý */
|
|
UINT8 CH376DiskQuery( PUINT32 DiskFre ); /* ²éѯ´ÅÅÌÊ£Óà¿Õ¼äÐÅÏ¢,ÉÈÇøÊý */
|
|
|
|
UINT8 CH376SecLocate( UINT32 offset ); /* ÒÔÉÈÇøÎªµ¥Î»Òƶ¯µ±Ç°ÎļþÖ¸Õë */
|
|
#ifdef EN_SECTOR_ACCESS
|
|
UINT8 CH376DiskReadSec( PUINT8 buf, UINT32 iLbaStart, UINT8 iSectorCount ); /* ´ÓUÅ̶ÁÈ¡¶à¸öÉÈÇøµÄÊý¾Ý¿éµ½»º³åÇø,²»Ö§³ÖSD¿¨ */
|
|
UINT8 CH376DiskWriteSec( PUINT8 buf, UINT32 iLbaStart, UINT8 iSectorCount ); /* ½«»º³åÇøÖеĶà¸öÉÈÇøµÄÊý¾Ý¿éдÈëUÅÌ,²»Ö§³ÖSD¿¨ */
|
|
UINT8 CH376SecRead( PUINT8 buf, UINT8 ReqCount, PUINT8 RealCount ); /* ÒÔÉÈÇøÎªµ¥Î»´Óµ±Ç°Î»ÖöÁÈ¡Êý¾Ý¿é,²»Ö§³ÖSD¿¨ */
|
|
UINT8 CH376SecWrite( PUINT8 buf, UINT8 ReqCount, PUINT8 RealCount ); /* ÒÔÉÈÇøÎªµ¥Î»ÔÚµ±Ç°Î»ÖÃдÈëÊý¾Ý¿é,²»Ö§³ÖSD¿¨ */
|
|
#endif
|
|
#ifdef EN_LONG_NAME
|
|
UINT8 CH376LongNameWrite( PUINT8 buf, UINT16 ReqCount ); /* ³¤ÎļþÃûרÓõÄ×Ö½Úд×Ó³ÌÐò */
|
|
UINT8 CH376CheckNameSum( PUINT8 DirName ); /* ¼ÆË㳤ÎļþÃûµÄ¶ÌÎļþÃû¼ìÑéºÍ,ÊäÈëΪÎÞСÊýµã·Ö¸ô·ûµÄ¹Ì¶¨11×Ö½Ú¸ñʽ */
|
|
UINT8 CH376LocateInUpDir( PUINT8 PathName ); /* ÔÚÉϼ¶Ä¿Â¼(Îļþ¼Ð)ÖÐÒÆ¶¯ÎļþÖ¸Õëµ½µ±Ç°ÎļþĿ¼ÐÅÏ¢ËùÔÚµÄÉÈÇø */
|
/* ÁíÍâ,˳±ã½«µ±Ç°ÎļþĿ¼ÐÅÏ¢ËùÔÚµÄÉÈÇøµÄǰһ¸öÉÈÇøµÄLBAµØÖ·Ð´ÈëCH376ÄÚ²¿VAR_FAT_DIR_LBA±äÁ¿(ΪÁË·½±ãÊÕ¼¯³¤ÎļþÃûʱÏòǰËÑË÷,·ñÔòÒª¶àÒÆ¶¯Ò»´Î) */
|
/* ʹÓÃÁËÈ«¾Ö»º³åÇøGlobalBufµÄǰ12¸ö×Ö½Ú */
|
|
UINT8 CH376GetLongName( PUINT8 PathName, PUINT8 LongName ); /* ÓɶÌÎļþÃû»òÕßĿ¼(Îļþ¼Ð)Ãû»ñµÃÏàÓ¦µÄ³¤ÎļþÃû */
|
/* ÐèÒªÊäÈë¶ÌÎļþÃûµÄÍêÕû·¾¶PathName,ÐèÒªÌṩ»º³åÇø½ÓÊÕ³¤ÎļþÃûLongName(ÒÔUNICODEС¶Ë±àÂë,ÒÔË«0½áÊø) */
|
/* ʹÓÃÁËÈ«¾Ö»º³åÇøGlobalBufµÄǰ34¸ö×Ö½Ú,sizeof(GlobalBuf)>=sizeof(FAT_DIR_INFO)+2 */
|
|
UINT8 CH376CreateLongName( PUINT8 PathName, PUINT8 LongName ); /* н¨¾ßÓг¤ÎļþÃûµÄÎļþ,¹Ø±ÕÎļþºó·µ»Ø,LongNameÊäÈë·¾¶±ØÐëÔÚRAMÖÐ */
|
/* ÐèÒªÊäÈë¶ÌÎļþÃûµÄÍêÕû·¾¶PathName(ÇëÊÂÏȲο¼FAT¹æ·¶Óɳ¤ÎļþÃû×ÔÐвúÉú),ÐèÒªÊäÈëÒÔUNICODEС¶Ë±àÂëµÄÒÔË«0½áÊøµÄ³¤ÎļþÃûLongName */
|
/* ʹÓÃÁËÈ«¾Ö»º³åÇøGlobalBufµÄǰ64¸ö×Ö½Ú,sizeof(GlobalBuf)>=sizeof(FAT_DIR_INFO)*2 */
|
|
#endif
|
|
#endif
|