put filesystem stuff into o...
Stefan Schuermans authored 12 years ago
|
18) static void AppsListDump(uint8_t sectorBuf[SECTOR_SIZE], VOLINFO *vi)
19) {
20) DIRINFO di;
21) DIRENT de;
22) uint8_t filename[12];
23) FILEINFO fi;
24) uint8_t buf[64];
25) uint32_t len, i;
26)
27) // list files in root directory
28) di.scratch = sectorBuf;
29) if (DFS_OpenDir(vi, (uint8_t *)"", &di) != 0) {
30) debug_apps_printf("cannot open root directory");
31) return;
32) }
33) debug_apps_printf("files in root directory:");
34) while (DFS_GetNext(vi, &di, &de) == 0) {
35) if (de.attr == ATTR_LONG_NAME) {
36) // ignore long names
37) } else if (de.attr & ATTR_VOLUME_ID) {
38) debug_apps_printf("volume ID: %-11.11s", de.name);
39) } else if (de.attr & ATTR_DIRECTORY) {
40) debug_apps_printf("directory: %-11.11s", de.name);
41) } else {
42) debug_apps_printf("file: %-11.11s", de.name);
43) memcpy(filename, de.name, 11); // remember last filename
44) filename[11] = 0;
45) }
46) }
47)
48) // dump last file
49) if (DFS_OpenFile(vi, filename, DFS_READ, sectorBuf, &fi) != 0) {
50) debug_apps_printf("cannot open file %s", filename);
51) return;
52) }
53) debug_apps_printf("dumping file %s (max. %u bytes):", filename, sizeof(buf));
54) len = 0;
55) DFS_ReadFile(&fi, sectorBuf, buf, &len, sizeof(buf));
56) for (i = 0; i < len; ++i)
57) debug_apps_printf("%3lu: %02hX", i, buf[i]);
58) debug_apps_printf("done", filename);
59) }
60)
61) // run applications
62) void AppsRun(void) // (extern)
63) {
64) uint8_t sectorBuf[SECTOR_SIZE];
65) uint32_t partStart, partSize;
66) uint8_t partAct, partType;
67) VOLINFO vi;
68) const char *sec_clus, *fstype;
69)
70) // get start of first partition
71) partStart = DFS_GetPtnStart(0, sectorBuf, 0, &partAct, &partType, &partSize);
72) if (partStart == 0xFFFFFFFF) {
73) debug_apps_printf("cannot find first partition");
74) return;
75) }
76) debug_apps_printf("partition: start %lu size %lu", partStart, partSize);
77)
78) // get volume info
79) if (DFS_GetVolInfo(0, sectorBuf, partStart, &vi) != 0) {
80) debug_apps_printf("cannot get volume info");
81) return;
82) }
83) switch (vi.filesystem) {
84) case FAT12: sec_clus = "sector: "; fstype = "FAT12"; break;
85) case FAT16: sec_clus = "sector: "; fstype = "FAT16"; break;
86) case FAT32: sec_clus = "cluster:"; fstype = "FAT32"; break;
87) default: sec_clus = "sector: "; fstype = "unknown"; break;
88) }
89) debug_apps_printf("filesystem: %s", fstype);
90) debug_apps_printf("volume label: %-11.11s", vi.label);
91) debug_apps_printf("sector/s per cluster: %hu", vi.secperclus);
92) debug_apps_printf("reserved sector/s: %hu", vi.reservedsecs);
93) debug_apps_printf("volume total sectors: %lu", vi.numsecs);
94) debug_apps_printf("sectors per FAT: %lu", vi.secperfat);
95) debug_apps_printf("first FAT at sector: %lu", vi.fat1);
96) debug_apps_printf("root dir at %s %lu", sec_clus, vi.rootdir);
97) debug_apps_printf("root dir entries: %hu", vi.rootentries);
98) debug_apps_printf("data area commences at sector: %lu", vi.dataarea);
99) debug_apps_printf("clusters in data area: %lu", vi.numclusters);
100) debug_apps_printf("sectors per cluster: %hu", vi.secperclus);
101)
102) // list directory, dump file
103) AppsListDump(sectorBuf, &vi);
|