-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrootfs.h
More file actions
156 lines (126 loc) · 4.29 KB
/
rootfs.h
File metadata and controls
156 lines (126 loc) · 4.29 KB
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
151
152
153
154
155
156
/**
* @file rootfs.h Корневая ФС.
*/
#ifndef ROOTFS_H_
#define ROOTFS_H_
#include "errors/errors.h"
#include "fatfs/diskio.h"
#include "fatfs/ff.h"
#include <stddef.h>
//! Тип функции инициализации диска.
typedef DSTATUS (*rootfs_disk_initialize_t)(void* disk);
//! Тип функции получения состояния диска.
typedef DSTATUS (*rootfs_disk_status_t)(void* disk);
//! Тип функции чтения диска.
typedef DRESULT (*rootfs_disk_read_t)(void* disk, BYTE* buff, DWORD sector, UINT count);
//! Тип функции записи диска.
typedef DRESULT (*rootfs_disk_write_t)(void* disk, const BYTE* buff, DWORD sector, UINT count);
//! Тип функции управления диском.
typedef DRESULT (*rootfs_disk_ioctl_t)(void* disk, BYTE cmd, void* buff);
//! Тип функции сброса состояния диска.
typedef DSTATUS (*rootfs_disk_reset_t)(void* disk);
//! Тип структуры ФС диска.
typedef struct _DiskFS {
void* disk; //!< Пользовательские данные.
FATFS* fatfs; //!< Объект файловой системы.
rootfs_disk_initialize_t disk_initialize; //!< Инициализация диска.
rootfs_disk_status_t disk_status; //!< Получение состояния диска.
rootfs_disk_read_t disk_read; //!< Чтение диска.
#if _USE_WRITE
rootfs_disk_write_t disk_write; //!< Запись диска.
#endif
#if _USE_IOCTL
rootfs_disk_ioctl_t disk_ioctl; //!< Управление диском.
#endif
rootfs_disk_reset_t disk_reset; //!< Сброс диска.
size_t retries; //!< Число повторений чтения диска.
size_t reinits; //!< Число переинициализаций диска после исчерпания повторных попыток.
} diskfs_t;
/**
* Инициализирует корневую ФС.
* @param disks Диски.
* @param count Число дисков.
* @return Код ошибки.
*/
extern err_t rootfs_init(diskfs_t* disks, size_t count);
/**
* Монтирует ФС диска.
* @param pdrv Номер диска.
* @return Код ошибки.
*/
extern err_t rootfs_mount(BYTE pdrv);
/**
* Отмонтирует ФС диска.
* @param pdrv Номер диска.
* @return Код ошибки.
*/
extern err_t rootfs_umount(BYTE pdrv);
/**
* Инициализирует диск.
* @param pdrv Номер диска.
* @return Статус.
*/
extern DSTATUS rootfs_disk_initialize(BYTE pdrv);
/**
* Получает статус диска.
* @param pdrv Номер диска.
* @return Статус.
*/
extern DSTATUS rootfs_disk_status(BYTE pdrv);
/**
* Читает сектор диска.
* @param pdrv Номер диска.
* @param buff Буфер.
* @param sector Сектор.
* @param count Число секторов.
* @return Результат.
*/
extern DRESULT rootfs_disk_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count);
#if _USE_WRITE
/**
* Записывает сектор диска.
* @param pdrv Номер диска.
* @param buff Буфер.
* @param sector Сектор.
* @param count Число секторов.
* @return Результат.
*/
extern DRESULT rootfs_disk_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count);
#endif // _USE_WRITE
#if _USE_IOCTL
/**
* Управляет диском.
* @param pdrv Номер диска.
* @param cmd Команда.
* @param buff Буфер.
* @return Результат.
*/
extern DRESULT rootfs_disk_ioctl(BYTE pdrv, BYTE cmd, void* buff);
#endif // _USE_IOCTL
#ifdef USE_ROOTFS_FATFS_DISKIO
DSTATUS disk_initialize(BYTE pdrv)
{
return rootfs_disk_initialize(pdrv);
}
DSTATUS disk_status(BYTE pdrv)
{
return rootfs_disk_status(pdrv);
}
DRESULT disk_read(BYTE pdrv, BYTE* buff, DWORD sector, UINT count)
{
return rootfs_disk_read(pdrv, buff, sector, count);
}
#if _USE_WRITE
DRESULT disk_write(BYTE pdrv, const BYTE* buff, DWORD sector, UINT count)
{
return rootfs_disk_write(pdrv, buff, sector, count);
}
#endif // _USE_WRITE
#if _USE_IOCTL
DRESULT disk_ioctl(BYTE pdrv, BYTE cmd, void* buff)
{
return rootfs_disk_ioctl(pdrv, cmd, buff);
}
#endif // _USE_IOCTL
#endif // USE_ROOTFS_FATFS_DISKIO
#endif /* ROOTFS_H_ */