148 lines
4.0 KiB
C
148 lines
4.0 KiB
C
|
#ifndef VIRTUAL_DISK_H
|
||
|
#define VIRTUAL_DISK_H
|
||
|
|
||
|
#include "system/includes.h"
|
||
|
|
||
|
|
||
|
#define VIR_FILE_TYPE_MP3 1
|
||
|
#define VIR_FILE_TYPE_WAV 2
|
||
|
|
||
|
extern const struct device_operations virfat_flash_dev_ops;
|
||
|
|
||
|
typedef enum {
|
||
|
FS_FAT12 = 0x01,
|
||
|
FS_FAT16 = 0x02,
|
||
|
FS_FAT32 = 0x04,
|
||
|
FS_EXFAT = 0x14,
|
||
|
} FS_TYPE;
|
||
|
|
||
|
|
||
|
typedef struct _virfat_flash_t {
|
||
|
u32 fatbase;
|
||
|
// u32 fatbase2;
|
||
|
u16 fatsize;
|
||
|
u32 dirbase;
|
||
|
u32 database;
|
||
|
u32 clustSize;
|
||
|
u32 max_clust;
|
||
|
u32 capacity;
|
||
|
u8 csize;
|
||
|
FS_TYPE fs_type;
|
||
|
char re_devname[24];
|
||
|
} virfat_flash_t;
|
||
|
|
||
|
typedef struct _dir_entry {
|
||
|
u8 name[12];
|
||
|
u32 fileSize;
|
||
|
} dir_entry_t;
|
||
|
|
||
|
|
||
|
#if 0
|
||
|
extern void virfat_flash_rand_file_size();
|
||
|
extern void virtual_disk_reduce_file_size(tu8 file_num);
|
||
|
extern void virtual_disk_remove_files(tu8 file_type);
|
||
|
extern void virtual_disk_reduce_file_size(tu8 file_num);
|
||
|
extern u8 virfat_flash_init(void *buf_512, void (*fun_read_file)(u32, u32, u8 *, u32));
|
||
|
#endif
|
||
|
|
||
|
#define MIN_FAT16 4086 /* Minimum number of clusters for FAT16 */
|
||
|
#define MIN_FAT32 65526 /* Minimum number of clusters for FAT32 */
|
||
|
|
||
|
#define AM_RDO 0x01 /* Read only */
|
||
|
#define AM_HID 0x02 /* Hidden */
|
||
|
#define AM_SYS 0x04 /* System */
|
||
|
#define AM_VOL 0x08 /* Volume label */
|
||
|
#define AM_LFN 0x0F /* LFN entry */
|
||
|
#define AM_DIR 0x10 /* Directory */
|
||
|
#define AM_ARC 0x20 /* Archive */
|
||
|
#define AM_FCH 0x80 /* exFAT下,文件簇连续标志 */
|
||
|
#define AM_FRG 0x40 /* exFAT下,文件簇BITMAP 有碎片 */
|
||
|
#define AM_LFN0_START 0x1
|
||
|
#define AM_LFN0_LEN 10
|
||
|
#define AM_LFN1_START 0xE
|
||
|
#define AM_LFN1_LEN 12
|
||
|
#define AM_LFN2_START 0x1C
|
||
|
#define AM_LFN2_LEN 4
|
||
|
#define AM_LFN_LEN 26
|
||
|
|
||
|
#define AM_EX_DIR_STRETCHED 0x08
|
||
|
|
||
|
#define BS_jmpBoot 0
|
||
|
#define BS_OEMName 3
|
||
|
#define BPB_BytsPerSec_l 11
|
||
|
#define BPB_BytsPerSec_h 12
|
||
|
#define BPB_SecPerClus 13
|
||
|
#define BPB_RsvdSecCnt 14
|
||
|
#define BPB_NumFATs 16
|
||
|
#define BPB_RootEntCnt 17
|
||
|
#define BPB_TotSec16 19
|
||
|
#define BPB_Media 21
|
||
|
#define BPB_FATSz16 22
|
||
|
#define BPB_SecPerTrk 24
|
||
|
#define BPB_NumHeads 26
|
||
|
#define BPB_HiddSec 28
|
||
|
#define BPB_TotSec32 32
|
||
|
#define BS_55AA 510
|
||
|
|
||
|
#define BS_DrvNum 36
|
||
|
#define BS_BootSig 38
|
||
|
#define BS_VolID 39
|
||
|
#define BS_VolLab 43
|
||
|
#define BS_FilSysType 54
|
||
|
|
||
|
#define BPB_FATSz32 36
|
||
|
#define BPB_ExtFlags 40
|
||
|
#define BPB_FSVer 42
|
||
|
#define BPB_RootClus 44
|
||
|
#define BPB_FSInfo 48
|
||
|
#define BPB_BkBootSec 50
|
||
|
#define BS_DrvNum32 64
|
||
|
#define BS_BootSig32 66
|
||
|
#define BS_VolID32 67
|
||
|
#define BS_VolLab32 71
|
||
|
#define BS_FilSysType32 82
|
||
|
#define BS_FileSysTypeexFAT 5
|
||
|
#define BPB_FatOffset 80
|
||
|
#define BPB_FatLength 84
|
||
|
#define BPB_ClusterHeapOffset 88
|
||
|
#define BPB_ClusterCount 92
|
||
|
#define BPB_FirstClusterOfRootDirectory 96
|
||
|
#define BPB_VolumeFlags 106
|
||
|
#define BPB_BytesPerSectorShift 108
|
||
|
#define BPB_SectorsPerClusterShift 109
|
||
|
#define BPB_NumberOfFats 110
|
||
|
#define MBR_Table 446
|
||
|
#define FSI_LeadSig 0 /* FSI: Leading signature (4) */
|
||
|
#define FSI_StrucSig 484 /* FSI: Structure signature (4) */
|
||
|
#define FSI_Free_Count 488 /* FSI: Number of free clusters (4) */
|
||
|
#define FSI_Nxt_Free 492 /* FSI: Last allocated cluster (4) */
|
||
|
|
||
|
///for FAT12/FAT16/FAT32
|
||
|
#define DIR_Name 0 /* Short file name (11) */
|
||
|
#define DIR_Attr 11 /* Attribute (1) */
|
||
|
#define DIR_NTres 12 /* NT flag (1) */
|
||
|
#define DIR_CrtTimeTenth 13 /* Created time sub-second (1) */
|
||
|
#define DIR_CrtTime 14 /* Created time (2) */
|
||
|
#define DIR_CrtDate 16 /* Created date (2) */
|
||
|
#define DIR_LstAccDate 18 /* Last accessed date (2) */
|
||
|
#define DIR_FstClusHI 20 /* Higher 16-bit of first cluster (2) */
|
||
|
#define DIR_WrtTime 22 /* Modified time (2) */
|
||
|
#define DIR_WrtDate 24 /* Modified date (2) */
|
||
|
#define DIR_FstClusLO 26
|
||
|
#define DIR_FileSize 28
|
||
|
#define LDIR_Attr 11 /* LFN attribute (1) */
|
||
|
#define LDIR_Type 12 /* LFN type (1) */
|
||
|
#define LDIR_Chksum 13 /* Sum of corresponding SFN entry */
|
||
|
////for exFAT
|
||
|
#define DIR_FileChainFlags 1
|
||
|
#define DIR_NameLen 3
|
||
|
#define DIR_AttrexFAT 4
|
||
|
#define DIR_FileSizeexFAT 8
|
||
|
#define DIR_FstClustexFAT 20
|
||
|
#define DIR_FileSize2exFAT 24
|
||
|
|
||
|
|
||
|
|
||
|
#endif
|
||
|
|