Select one of the symbols to view example projects that use it.
 
Outline
#include <string.h>
#include <time.h>
#include <stdlib.h>
#include <sys/time.h>
#include "diskio_impl.h"
#include "ffconf.h"
#include "ff.h"
s_impls
VolToPart
ff_diskio_get_drive(BYTE *)
ff_diskio_register(BYTE, const ff_diskio_impl_t *)
ff_disk_initialize(BYTE)
ff_disk_status(BYTE)
ff_disk_read(BYTE, BYTE *, LBA_t, UINT)
ff_disk_write(BYTE, const BYTE *, LBA_t, UINT)
ff_disk_ioctl(BYTE, BYTE, void *)
get_fattime()
Files
loading (3/5)...
SourceVuESP-IDF Framework and ExamplesFatFSdiskio/diskio.c
 
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
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
/*-----------------------------------------------------------------------*/ /* Low level disk I/O module skeleton for FatFs (C)ChaN, 2016 */ /* ESP-IDF port Copyright 2016 Espressif Systems (Shanghai) PTE LTD */ /*-----------------------------------------------------------------------*/ /* If a working storage control module is available, it should be */ /* attached to the FatFs via a glue function rather than modifying it. */ /* This is an example of glue functions to attach various existing */ /* storage control modules to the FatFs module with a defined API. */ /*-----------------------------------------------------------------------*/ #include <string.h> #include <time.h> #include <stdlib.h> #include <sys/time.h> #include "diskio_impl.h" #include "ffconf.h" #include "ff.h"7 includes static ff_diskio_impl_t * s_impls[FF_VOLUMES] = { NULL }; #if FF_MULTI_PARTITION /* Multiple partition configuration */ const PARTITION VolToPart[FF_VOLUMES] = { {0, 0}, /* Logical drive 0 ==> Physical drive 0, auto detection */ #if FF_VOLUMES > 1 {1, 0}, /* Logical drive 1 ==> Physical drive 1, auto detection */ #endif #if FF_VOLUMES > 2 {2, 0}, /* Logical drive 2 ==> Physical drive 2, auto detection */ #endif #if FF_VOLUMES > 3 {3, 0}, /* Logical drive 3 ==> Physical drive 3, auto detection */ #endif #if FF_VOLUMES > 4 {4, 0}, /* Logical drive 4 ==> Physical drive 4, auto detection */ #endif #if FF_VOLUMES > 5 {5, 0}, /* Logical drive 5 ==> Physical drive 5, auto detection */ #endif #if FF_VOLUMES > 6 {6, 0}, /* Logical drive 6 ==> Physical drive 6, auto detection */ #endif #if FF_VOLUMES > 7 {7, 0}, /* Logical drive 7 ==> Physical drive 7, auto detection */ #endif #if FF_VOLUMES > 8 {8, 0}, /* Logical drive 8 ==> Physical drive 8, auto detection */ #endif #if FF_VOLUMES > 9 {9, 0}, /* Logical drive 9 ==> Physical drive 9, auto detection */ #endif }{...}; /* ... */#endif esp_err_t ff_diskio_get_drive(BYTE* out_pdrv) { BYTE i; for(i=0; i<FF_VOLUMES; i++) { if (!s_impls[i]) { *out_pdrv = i; return ESP_OK; }{...} }{...} return ESP_ERR_NOT_FOUND; }{ ... } void ff_diskio_register(BYTE pdrv, const ff_diskio_impl_t* discio_impl) { assert(pdrv < FF_VOLUMES); if (s_impls[pdrv]) { ff_diskio_impl_t* im = s_impls[pdrv]; s_impls[pdrv] = NULL; free(im); }{...} if (!discio_impl) { return; }{...} ff_diskio_impl_t * impl = (ff_diskio_impl_t *)malloc(sizeof(ff_diskio_impl_t)); assert(impl != NULL); memcpy(impl, discio_impl, sizeof(ff_diskio_impl_t)); s_impls[pdrv] = impl; }{ ... } DSTATUS ff_disk_initialize (BYTE pdrv) { return s_impls[pdrv]->init(pdrv); }{ ... } DSTATUS ff_disk_status (BYTE pdrv) { return s_impls[pdrv]->status(pdrv); }{ ... } DRESULT ff_disk_read (BYTE pdrv, BYTE* buff, LBA_t sector, UINT count) { return s_impls[pdrv]->read(pdrv, buff, sector, count); }{ ... } DRESULT ff_disk_write (BYTE pdrv, const BYTE* buff, LBA_t sector, UINT count) { return s_impls[pdrv]->write(pdrv, buff, sector, count); }{ ... } DRESULT ff_disk_ioctl (BYTE pdrv, BYTE cmd, void* buff) { return s_impls[pdrv]->ioctl(pdrv, cmd, buff); }{ ... } DWORD get_fattime(void) { time_t t = time(NULL); struct tm tmr; localtime_r(&t, &tmr); int year = tmr.tm_year < 80 ? 0 : tmr.tm_year - 80; return ((DWORD)(year) << 25) | ((DWORD)(tmr.tm_mon + 1) << 21) | ((DWORD)tmr.tm_mday << 16) | (WORD)(tmr.tm_hour << 11) | (WORD)(tmr.tm_min << 5) | (WORD)(tmr.tm_sec >> 1); }{ ... }
Details