mirror of https://github.com/ventoy/Ventoy
64 lines
3.3 KiB
C
64 lines
3.3 KiB
C
#ifndef __FAT_MISC_H__
|
|
#define __FAT_MISC_H__
|
|
|
|
#include "fat_defs.h"
|
|
#include "fat_opts.h"
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Defines
|
|
//-----------------------------------------------------------------------------
|
|
#define MAX_LONGFILENAME_ENTRIES 20
|
|
#define MAX_LFN_ENTRY_LENGTH 13
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Macros
|
|
//-----------------------------------------------------------------------------
|
|
#define GET_32BIT_WORD(buffer, location) ( ((uint32)buffer[location+3]<<24) + ((uint32)buffer[location+2]<<16) + ((uint32)buffer[location+1]<<8) + (uint32)buffer[location+0] )
|
|
#define GET_16BIT_WORD(buffer, location) ( ((uint16)buffer[location+1]<<8) + (uint16)buffer[location+0] )
|
|
|
|
#define SET_32BIT_WORD(buffer, location, value) { buffer[location+0] = (uint8)((value)&0xFF); \
|
|
buffer[location+1] = (uint8)((value>>8)&0xFF); \
|
|
buffer[location+2] = (uint8)((value>>16)&0xFF); \
|
|
buffer[location+3] = (uint8)((value>>24)&0xFF); }
|
|
|
|
#define SET_16BIT_WORD(buffer, location, value) { buffer[location+0] = (uint8)((value)&0xFF); \
|
|
buffer[location+1] = (uint8)((value>>8)&0xFF); }
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Structures
|
|
//-----------------------------------------------------------------------------
|
|
struct lfn_cache
|
|
{
|
|
#if FATFS_INC_LFN_SUPPORT
|
|
// Long File Name Structure (max 260 LFN length)
|
|
uint8 String[MAX_LONGFILENAME_ENTRIES][MAX_LFN_ENTRY_LENGTH];
|
|
uint8 Null;
|
|
#endif
|
|
uint8 no_of_strings;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Prototypes
|
|
//-----------------------------------------------------------------------------
|
|
void fatfs_lfn_cache_init(struct lfn_cache *lfn, int wipeTable);
|
|
void fatfs_lfn_cache_entry(struct lfn_cache *lfn, uint8 *entryBuffer);
|
|
char* fatfs_lfn_cache_get(struct lfn_cache *lfn);
|
|
int fatfs_entry_lfn_text(struct fat_dir_entry *entry);
|
|
int fatfs_entry_lfn_invalid(struct fat_dir_entry *entry);
|
|
int fatfs_entry_lfn_exists(struct lfn_cache *lfn, struct fat_dir_entry *entry);
|
|
int fatfs_entry_sfn_only(struct fat_dir_entry *entry);
|
|
int fatfs_entry_is_dir(struct fat_dir_entry *entry);
|
|
int fatfs_entry_is_file(struct fat_dir_entry *entry);
|
|
int fatfs_lfn_entries_required(char *filename);
|
|
void fatfs_filename_to_lfn(char *filename, uint8 *buffer, int entry, uint8 sfnChk);
|
|
void fatfs_sfn_create_entry(char *shortfilename, uint32 size, uint32 startCluster, struct fat_dir_entry *entry, int dir);
|
|
int fatfs_lfn_create_sfn(char *sfn_output, char *filename);
|
|
int fatfs_lfn_generate_tail(char *sfn_output, char *sfn_input, uint32 tailNum);
|
|
void fatfs_convert_from_fat_time(uint16 fat_time, int *hours, int *minutes, int *seconds);
|
|
void fatfs_convert_from_fat_date(uint16 fat_date, int *day, int *month, int *year);
|
|
uint16 fatfs_convert_to_fat_time(int hours, int minutes, int seconds);
|
|
uint16 fatfs_convert_to_fat_date(int day, int month, int year);
|
|
void fatfs_print_sector(uint32 sector, uint8 *data);
|
|
|
|
#endif
|