ESP8266 ILI9341 display support code with printf sources, wire-frame viewer and custom fonts  1.0
ESP8266ILI9341DisplayProject
fatfs_sup.c
Go to the documentation of this file.
1 
30 #include "user_config.h"
31 #include "fatfs.sup/fatfs.h"
32 
33 #ifdef AVR
34 #include <stdlib.h>
35 #endif
36 
37 #include "printf/mathio.h"
38 
39 #include "lib/time.h"
40 
41 
43 FATFS Fatfs[_VOLUMES]; /* File system object for each logical drive */
44 
45 #if _MULTI_PARTITION != 0
46 const PARTITION Drives[] =
48 {
49  {
50  0,0
51  }
52  ,
53  {
54  0,1
55  }
56 };
57 #endif
58 
59 #if FATFS_DEBUG > 0
60 static const char *err_msg[] =
64 {
65  "OK",
66  "DISK_ERR",
67  "INT_ERR",
68  "NOT_READY",
69  "NO_FILE",
70  "NO_PATH",
71  "INVALID_NAME",
72  "DENIED",
73  "EXIST",
74  "INVALID_OBJECT",
75  "WRITE_PROTECTED",
76  "INVALID_DRIVE",
77  "NOT_ENABLED",
78  "NO_FILE_SYSTEM",
79  "MKFS_ABORTED",
80  "TIMEOUT",
81  "LOCKED",
82  "NOT_ENOUGH_CORE",
83  "TOO_MANY_OPEN_FILES",
84  "INVALID_PARAMETER",
85  NULL
86 };
87 #endif
88 
89 
105 
106 
112 MEMSPACE
114 {
115  uint32_t fat;
116 /* Pack date and time into a uint32_t variable */
117  fat = ((uint32_t)(t->tm_year - 80) << 25)
118  | (((uint32_t)t->tm_mon+1) << 21)
119  | (((uint32_t)t->tm_mday) << 16)
120  | ((uint32_t)t->tm_hour << 11)
121  | ((uint32_t)t->tm_min << 5)
122  | ((uint32_t)t->tm_sec >> 1);
123  return(fat);
124 }
129 MEMSPACE
131 {
132  time_t t;
133 /* Get GMT time */
134  time(&t);
135  return( tm_to_fat(localtime(&t)));
136 }
137 
143 
144 MEMSPACE
145 void put_rc (int rc)
146 {
147 #if FATFS_DEBUG > 0
148  char *ptr;
149  if(rc > 19)
150  ptr = "INVALID ERROR MESSAGE";
151  else
152  ptr = (char *) err_msg[(int)rc];
153  printf("rc=%u FR_%s\n", rc, ptr);
154 #else
155  printf("rc=%u\n", rc);
156 #endif
157 }
158 
159 
162 
165 
168 
169 
178 
179 
192 
193 MEMSPACE
195 char* path /* Pointer to the working buffer with start path */
196 )
197 {
198  DIR dirs;
199  FRESULT fr;
200  int i;
201  FILINFO info;
202 
203  fr = f_opendir(&dirs, path);
204  if (fr == FR_OK) {
205  while (((fr = f_readdir(&dirs, &info)) == FR_OK) && info.fname[0]) {
206  if (info.fattrib & AM_DIR) {
207  AccDirs++;
208  i = strlen(path);
209  path[i] = '/'; strcpy(path+i+1, info.fname);
210  fr = fatfs_scan_files(path);
211  path[i] = 0;
212  if (fr != FR_OK) break;
213  } else {
214 // xprintf(PSTR("%s/%s\n"), path, info.fname);
215  AccFiles++;
216  AccSize += info.fsize;
217  }
218 #ifdef ESP8266
219  optimistic_yield(1000);
220  wdt_reset();
221 #endif
222  }
223  }
224 
225  return fr;
226 }
227 
231 MEMSPACE
232 char *fatfs_fstype(int type)
233 {
234  char *ptr;
235  switch(type)
236  {
237  case FS_FAT12:
238  ptr = "FAT12";
239  break;
240  case FS_FAT16:
241  ptr = "FAT16";
242  break;
243  case FS_FAT32:
244  ptr = "FAT32";
245  break;
246  case FS_EXFAT:
247  ptr = "EXFAT";
248  break;
249  default:
250  ptr = "UNKNOWN";
251  break;
252  }
253  return(ptr);
254 }
255 
267 MEMSPACE
268 void fatfs_status(char *ptr)
269 {
270  long p2;
271  int res;
272  FATFS *fs;
273  char label[24+2];
274  DWORD vsn; // volume serial number
275 
276  while(*ptr == ' ' || *ptr == '\t')
277  ++ptr;
278  printf("fatfs status:%s\n",ptr);
279  res = f_getfree(ptr, (DWORD*)&p2, &fs);
280  if (res)
281  {
282  put_rc(res);
283  return;
284  }
285  printf("FAT type = %s\n", fatfs_fstype(fs->fs_type));
286  printf("Bytes/Cluster = %lu\n", (DWORD)fs->csize * 512);
287  printf("Number of FATs = %u\n", fs->n_fats);
288  printf("Root DIR entries = %u\n", fs->n_rootdir);
289  printf("Sectors/FAT = %lu\n", fs->fsize);
290  printf("Number of clusters = %lu\n", fs->n_fatent - 2);
291  printf("FAT start (lba) = %lu\n", fs->fatbase);
292  printf("DIR start (lba,clustor) = %lu\n", fs->dirbase);
293  printf("Data start (lba) = %lu\n", fs->database);
294 
295 #if _USE_LABEL
296  res = f_getlabel(ptr, label, (DWORD*)&vsn);
297  if (res)
298  {
299  put_rc(res);
300  return;
301  }
302  printf("Volume name = %s\n", label[0] ? label : "<blank>");
303  printf("Volume S/N = %04X-%04X\n", (WORD)((DWORD)vsn >> 16), (WORD)(vsn & 0xFFFF));
304 #endif
305 
306  AccSize = AccFiles = AccDirs = 0;
307  res = fatfs_scan_files(ptr);
308  if (res)
309  {
310  put_rc(res);
311  return;
312  }
313  printf("%u files, %lu bytes.\n%u folders.\n"
314  "%lu KB total disk space.\n%lu KB available.\n",
316  (fs->n_fatent - 2) * fs->csize / 2, p2 * fs->csize / 2
317  );
318 
319 }
320 
321 
333 
334 MEMSPACE
336 {
337  char attrs[6];
338  if(info->fname[0] == 0)
339  {
340  printf("fatfs_filinfo_list: empty\n");
341  return;
342  }
343  attrs[0] = (info->fattrib & AM_DIR) ? 'D' : '-';
344  attrs[1] = (info->fattrib & AM_RDO) ? 'R' : '-';
345  attrs[2] = (info->fattrib & AM_HID) ? 'H' : '-';
346  attrs[3] = (info->fattrib & AM_SYS) ? 'S' : '-';
347  attrs[4] = (info->fattrib & AM_ARC) ? 'A' : '-';
348  attrs[5] = 0;
349  printf("%s %u/%02u/%02u %02u:%02u %9lu %s",
350  attrs,
351  (info->fdate >> 9) + 1980, (info->fdate >> 5) & 15, info->fdate & 31,
352  (info->ftime >> 11), (info->ftime >> 5) & 63,
353  info->fsize, info->fname);
354  printf("\n");
355 }
WORD AccDirs
Definition: fatfs_sup.c:164
unsigned short WORD
Definition: integer.h:26
MEMSPACE DWORD get_fattime(void)
Read time and convert to FAT32 time.
Definition: fatfs_sup.c:130
DWORD n_fatent
Definition: ff.h:125
int tm_min
Definition: time.h:44
#define FS_EXFAT
Definition: ff.h:352
MEMSPACE size_t WEAK_ATR strlen(const char *str)
String Length.
Definition: stringsup.c:146
DWORD database
Definition: ff.h:130
Master include file for project Includes all project includes and defines here.
WORD fdate
Definition: ff.h:205
Common Linux/POSIX time functions.
Definition: ff.h:203
int tm_mday
Definition: time.h:46
Definition: ff.h:92
MEMSPACE FRESULT f_readdir(DIR *dp, FILINFO *fno)
Definition: ff.c:4260
static struct ip_info info
Definition: network.c:55
int tm_year
Definition: time.h:48
WORD ftime
Definition: ff.h:206
unsigned int uint32_t
Definition: send.c:19
MEMSPACE FRESULT f_getfree(const TCHAR *path, DWORD *nclst, FATFS **fatfs)
Definition: ff.c:4387
MEMSPACE char * fatfs_fstype(int type)
return a string with the file system type
Definition: fatfs_sup.c:232
#define _VOLUMES
Definition: ffconf.h:161
MEMSPACE time_t time(time_t *t)
Return second from epoch - POSIX function.
Definition: time.c:843
BYTE fs_type
Definition: ff.h:93
MEMSPACE FRESULT f_opendir(DIR *dp, const TCHAR *path)
Definition: ff.c:4155
void optimistic_yield(uint32_t interval_us)
Definition: user_task.c:102
MEMSPACE void fatfs_status(char *ptr)
Compute space used, number of directories and files contained used by a drive.
Definition: fatfs_sup.c:268
Definition: ff.h:184
unsigned long DWORD
Definition: integer.h:31
MEMSPACE WEAK_ATR char * strcpy(char *dest, const char *src)
copy a string
Definition: stringsup.c:161
uint32_t time_t
type of EPOCH result.
Definition: time.h:35
int tm_mon
Definition: time.h:47
MEMSPACE void put_rc(int rc)
display FatFs return code as ascii string
Definition: fatfs_sup.c:145
#define AM_SYS
Definition: ff.h:357
#define NULL
Definition: cpu.h:55
BYTE n_fats
Definition: ff.h:95
MEMSPACE tm_t * localtime(time_t *tp)
Convert POSIX epoch time_t *tp into POSIX tm_t *result.
Definition: time.c:522
#define FS_FAT16
Definition: ff.h:350
DWORD fatbase
Definition: ff.h:128
FRESULT
Definition: ff.h:220
Math IO functions, and verious conversion code with floating point support.
FSIZE_t fsize
Definition: ff.h:204
TCHAR fname[_MAX_LFN+1]
Definition: ff.h:210
MEMSPACE void fatfs_filinfo_list(FILINFO *info)
Display FILINFO structure in a readable format.
Definition: fatfs_sup.c:335
#define FS_FAT32
Definition: ff.h:351
POSIX struct tm.
Definition: time.h:41
WORD AccFiles
Total number or Files and Directories.
Definition: fatfs_sup.c:164
BYTE fattrib
Definition: ff.h:207
#define MEMSPACE
Definition: cpu.h:25
MEMSPACE void wdt_reset(void)
reset watchdog
Definition: system.c:190
#define AM_RDO
Definition: ff.h:355
#define AM_ARC
Definition: ff.h:359
MEMSPACE int printf(const char *format,...)
DWORD AccSize
Total file space used.
Definition: fatfs_sup.c:161
WORD n_rootdir
Definition: ff.h:99
int tm_sec
Definition: time.h:43
Definition: ff.h:221
int tm_hour
Definition: time.h:45
MEMSPACE int fatfs_scan_files(char *path)
Use were FILINFO structure can be share in many functions See: fatfs_alloc_filinfo(), fatfs_scan_files() and fatfs_ls()
Definition: fatfs_sup.c:194
MEMSPACE uint32_t tm_to_fat(tm_t *t)
FAT time structer reference.
Definition: fatfs_sup.c:113
#define AM_HID
Definition: ff.h:356
#define AM_DIR
Definition: ff.h:358
FATFS Fatfs[_VOLUMES]
FatFs Drive Volumes.
Definition: fatfs_sup.c:43
DWORD fsize
Definition: ff.h:126
#define FS_FAT12
Definition: ff.h:349
DWORD dirbase
Definition: ff.h:129
MEMSPACE FRESULT f_getlabel(const TCHAR *path, TCHAR *label, DWORD *vsn)
Definition: ff.c:4915
WORD csize
Definition: ff.h:100