whycyhl
2022-05-05 683c912f9ac1935a7b109fb402bb276dba450f6b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/* 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