GitOS
Operating system exercise
Loading...
Searching...
No Matches
fat16.h
Go to the documentation of this file.
1#pragma once
3#include <stdint.h>
4#include "fs/file.h"
8#define DEBUG_FAT16 0
10#define FAT16_SIGNATURE 0x29
11#define FAT16_FAT_ENTRY_SIZE 0x02
12#define FAT16_BAD_SECTOR 0xFF7
13#define FAT16_UNUSED 0x00
14
15typedef unsigned int FAT_ITEM_TYPE;
16#define FAT_ITEM_TYPE_DIRECTORY 0
17#define FAT_ITEM_TYPE_FILE 1
18
19// FAT Directory Entry attributes bitmask
20#define FAT_FILE_READONLY 0x01
21#define FAT_FILE_HIDDEN 0x02
22#define FAT_FILE_SYSTEM 0x04
23#define FAT_FILE_VOLUME_LABEL 0x08
24#define FAT_FILE_SUBDIRECTORY 0x10
25#define FAT_FILE_ARCHVED 0x20
26#define FAT_FILE_DEVICE 0x40
27#define FAT_FILE_RESERVED 0x80
28#define FAT_FILE_LONGNAME (FAT_FILE_READONLY | FAT_FILE_HIDDEN | FAT_FILE_SYSTEM | FAT_FILE_VOLUME_LABEL)
29
47
49{
50 uint8_t drive_number;
51 uint8_t win_nt_bit;
52 uint8_t signature;
53 uint32_t volume_id;
54 uint8_t volume_id_string[11];
55 uint8_t system_id_string[8];
56} __attribute__((packed));
57
66
68{
69 uint8_t filename[8];
70 uint8_t ext[3];
71 uint8_t attribute;
72 uint8_t reserved;
74 uint16_t creation_time;
75 uint16_t creation_date;
76 uint16_t last_access;
78 uint16_t last_mod_time;
79 uint16_t last_mod_date;
81 uint32_t filesize;
82} __attribute__((packed));
83
91
93{
94 union
95 {
96 struct fat_file* file;
98 };
99
101};
102
104{
105 struct fat_item* file;
106 uint32_t pos;
107 int cached_cluster; // Cached cluster number
108 int cached_offset_bytes; // Byte offset of cached cluster
109};
110
112{
115
116 //Used to stream data clusters
118 //Used to stream the file allocation table
120
121 // Used to situations where we stream the directory
123
124 struct disk* disk;
126};
127
129int fat16_resolve(struct disk* disk);
130void* fat16_open(void* private_fs, struct path_part* path, FILE_MODE mode);
131int fat16_read(void* private_fs, void* desc, uint32_t size, uint32_t nmemb, char* out);
132int fat16_write(void* private_fs, void* desc, uint32_t size, uint32_t nmemb, char* in);
133int fat16_seek(void* desc, uint32_t offset, FILE_SEEK_MODE seek_mode);
134int fat16_stat(void* desc, struct file_stat* stat);
135int fat16_close(void* desc);
uint32_t offset
Definition BMPFile.hpp:3
int fat16_seek(void *desc, uint32_t offset, FILE_SEEK_MODE seek_mode)
FAT16 Implementation of fseek.
Definition fat16.c:775
int fat16_read(void *private_fs, void *desc, uint32_t size, uint32_t nmemb, char *out)
FAT16 Implementation of fread.
Definition fat16.c:728
int fat16_stat(void *desc, struct file_stat *stat)
FAT16 Implementation of fstat.
Definition fat16.c:821
struct fat_directory __attribute__
int fat16_resolve(struct disk *disk)
FAT16 filesystem resolver.
Definition fat16.c:590
struct filesystem * fat16_init_filesystem()
Prepares filesystem struct for generic filesystem driver use.
Definition fat16.c:29
int fat16_close(void *desc)
FAT16 Implementation of fclose.
Definition fat16.c:856
void * fat16_open(void *private_fs, struct path_part *path, FILE_MODE mode)
FAT16 Implementation of fopen.
Definition fat16.c:694
unsigned int FAT_ITEM_TYPE
Definition fat16.h:15
int fat16_write(void *private_fs, void *desc, uint32_t size, uint32_t nmemb, char *in)
Definition fat16.c:752
uint16_t size
Definition gdt.h:0
unsigned int FILE_MODE
Definition file.h:13
unsigned int FILE_SEEK_MODE
Definition file.h:12
Definition disk_streamer.h:4
Definition disk.h:19
Definition fat16.h:49
uint8_t win_nt_bit
Definition fat16.h:51
uint8_t volume_id_string[11]
Definition fat16.h:54
uint8_t drive_number
Definition fat16.h:50
uint32_t volume_id
Definition fat16.h:53
uint8_t system_id_string[8]
Definition fat16.h:55
uint8_t signature
Definition fat16.h:52
Definition fat16.h:31
uint8_t jmp_short[3]
Definition fat16.h:32
uint8_t media_type
Definition fat16.h:40
uint32_t sectors_big
Definition fat16.h:45
uint8_t oem_identifier[8]
Definition fat16.h:33
uint16_t sectors_per_track
Definition fat16.h:42
uint8_t fat_copies
Definition fat16.h:37
uint8_t sectors_per_cluster
Definition fat16.h:35
uint16_t bytes_per_sector
Definition fat16.h:34
uint16_t reserved_sectors
Definition fat16.h:36
uint16_t number_of_heads
Definition fat16.h:43
uint16_t root_dir_entries
Definition fat16.h:38
uint32_t hidden_sectors
Definition fat16.h:44
uint16_t numeber_of_sectors
Definition fat16.h:39
uint16_t sectors_per_fat
Definition fat16.h:41
Definition fat16.h:85
int sector_pos
Definition fat16.h:88
struct fat_file * item
Definition fat16.h:86
int ending_sector_pos
Definition fat16.h:89
int total
Definition fat16.h:87
Definition fat16.h:104
struct fat_item * file
Definition fat16.h:105
int cached_cluster
Definition fat16.h:107
uint32_t pos
Definition fat16.h:106
int cached_offset_bytes
Definition fat16.h:108
Definition fat16.h:68
uint32_t filesize
Definition fat16.h:81
uint16_t high_16bits_first_cluster
Definition fat16.h:77
uint16_t low_16bits_first_cluster
Definition fat16.h:80
uint8_t filename[8]
Definition fat16.h:69
uint16_t last_mod_time
Definition fat16.h:78
uint16_t last_access
Definition fat16.h:76
uint8_t ext[3]
Definition fat16.h:70
uint16_t creation_time
Definition fat16.h:74
uint8_t creation_time_tenths_of_a_sec
Definition fat16.h:73
uint8_t reserved
Definition fat16.h:72
uint8_t attribute
Definition fat16.h:71
uint16_t creation_date
Definition fat16.h:75
uint16_t last_mod_date
Definition fat16.h:79
Definition fat16.h:59
struct fat16_header_primary primary
Definition fat16.h:60
union fat_header::fat_header_extended shared
Definition fat16.h:93
struct fat_file * file
Definition fat16.h:96
FAT_ITEM_TYPE type
Definition fat16.h:100
struct fat_directory * directory
Definition fat16.h:97
Definition fat16.h:112
uint32_t partition_offset
Definition fat16.h:125
struct fat_directory root_directory
Definition fat16.h:114
struct disk * disk
Definition fat16.h:124
struct disk_stream * cluster_read_stream
Definition fat16.h:117
struct disk_stream * fat_read_stream
Definition fat16.h:119
struct disk_stream * directory_stream
Definition fat16.h:122
struct fat_header header
Definition fat16.h:113
Definition file.h:60
Definition file.h:75
FS_STAT_FUNCTION stat
Definition file.h:80
Definition Path.hpp:12
Definition fat16.h:62
struct fat16_header_extended extended
Definition fat16.h:63