51 #include "../../version/ver_fat_sl.h"
52 #if VER_FAT_SL_MAJOR != 5 || VER_FAT_SL_MINOR != 2
53 #error Incompatible FAT_SL version number!
56 #if F_FS_THREAD_AWARE == 1
64 #if F_FILE_CHANGED_EVENT
65 F_FILE_CHANGED_EVENTFUNC f_filechangedevent;
100 static unsigned char _f_writebootrecord (
F_PHY * phy )
102 unsigned char jump_code[] =
106 unsigned char oem_name[] =
"MSDOS5.0";
107 unsigned char executable_marker[] =
111 unsigned char * ptr = (
unsigned char *)
gl_sector;
116 unsigned char _n = 0;
127 for ( a = 0 ; a < rs ; a++ )
164 ptr =
_setchar( jump_code,
sizeof( jump_code ), ptr );
165 ptr =
_setchar( oem_name,
sizeof( oem_name ) - 1, ptr );
210 ptr =
_setchar( (
const unsigned char *)
"NO NAME ", 11, ptr );
215 ptr =
_setchar( (
const unsigned char *)
"FAT12 ", 8, ptr );
219 ptr =
_setchar( (
const unsigned char *)
"FAT16 ", 8, ptr );
223 ptr =
_setchar( (
const unsigned char *)
"FAT32 ", 8, ptr );
231 ptr =
_setchar( executable_marker,
sizeof( executable_marker ), ptr );
257 static unsigned char _f_buildsectors (
F_PHY * phy )
288 unsigned long maxcluster;
329 static unsigned char _f_prepareformat (
F_PHY * phy,
unsigned char fattype )
392 unsigned long fatsec;
400 unsigned long _n = (
unsigned long)( 128 * secpercl + nfat );
402 fatsec += ( _n - 1 );
411 unsigned long _n = (
unsigned long)( 256 * secpercl + nfat );
413 fatsec += ( _n - 1 );
421 unsigned long _n = (
unsigned long)( 1024 * secpercl + 3 * nfat );
424 fatsec += ( _n - 1 );
454 static unsigned char _f_postformat (
F_PHY * phy,
unsigned char fattype )
459 _f_buildsectors( phy );
465 gl_volume.
fatsector = (
unsigned long)( -1 );
468 unsigned char * ptr = (
unsigned char *)
gl_sector;
503 for ( a = 0 ; a < gl_volume.
root.
num ; a++ )
512 return _f_writebootrecord( phy );
552 ret = _f_prepareformat( &phy, fattype );
558 return _f_postformat( &phy, fattype );
575 static unsigned char _f_readbootrecord (
void )
578 unsigned char * ptr = (
unsigned char *)
gl_sector;
579 unsigned long maxcluster, _n;
580 unsigned long first_sector = 0;
592 if ( ( ptr[0x1fe] != 0x55 ) || ( ptr[0x1ff] != 0xaa ) )
597 if ( ( ptr[0] != 0xeb ) && ( ptr[0] != 0xe9 ) )
599 first_sector =
_f_getlong( &ptr[0x08 + 0x1be] );
607 if ( ( ptr[0x1fe] != 0x55 ) || ( ptr[0x1ff] != 0xaa ) )
612 if ( ( ptr[0] != 0xeb ) && ( ptr[0] != 0xe9 ) )
640 if ( _n < first_sector )
721 switch ( gl_volume.
state )
741 gl_volume.
actsector = (
unsigned long)( -1 );
742 gl_volume.
fatsector = (
unsigned long)( -1 );
746 gl_volume.
cwd[0] = 0;
758 if ( !_f_readbootrecord() )
791 unsigned long clustersize;
803 for ( a = 2 ; a < gl_volume.
maxcluster + 2 ; a++ )
828 for ( a = 0 ; ( clustersize & 1 ) == 0 ; a++ )
934 #if F_FS_THREAD_AWARE == 1
938 if( fs_lock_semaphore == NULL )
941 if( fs_lock_semaphore == NULL )
951 mdrv = initfunc( 0 );
959 #if F_FILE_CHANGED_EVENT
960 f_filechangedevent = 0;
unsigned char fsr_delete(void)
unsigned char fs_init(void)
unsigned long sector_per_FAT
unsigned char sector_per_cluster
unsigned long max_sectors
unsigned char fn_initvolume(F_DRIVERINIT initfunc)
unsigned long serial_number
unsigned char * _setlong(unsigned long, unsigned char *)
unsigned char sector_per_cluster
unsigned long sector_per_FAT32
unsigned char fsr_init(void)
unsigned long _f_getlong(void *)
unsigned long lastalloccluster
char gl_sector[F_SECTOR_SIZE]
unsigned char * _setcharzero(int, unsigned char *)
unsigned char _f_writeglsector(unsigned long sector)
unsigned short _f_getword(void *)
unsigned char fn_getfreespace(F_SPACE *pspace)
F_DRIVER *(* F_DRIVERINIT)(unsigned long driver_param)
unsigned long number_of_sectors
#define psp_memset(d, c, l)
unsigned char fn_hardformat(unsigned char fattype)
unsigned char * _setchar(const unsigned char *, int, unsigned char *)
unsigned char _f_getvolume(void)
unsigned char media_descriptor
unsigned char number_of_FATs
unsigned char * _setword(unsigned short, unsigned char *)
unsigned char fs_delete(void)
unsigned char _f_readglsector(unsigned long sector)
unsigned long rootcluster
#define F_CLUSTER_RESERVED
unsigned char _f_getclustervalue(unsigned long cluster, unsigned long *pvalue)
unsigned char fn_getserial(unsigned long *serial)
unsigned char fn_delvolume(void)
unsigned short number_of_heads
unsigned char _f_checkstatus(void)
#define xSemaphoreCreateMutex()
unsigned short sector_per_track