293b9416c751315e13c511e472d03d4a385334af
Stefan Schuermans put filesystem stuff into o...

Stefan Schuermans authored 12 years ago

1) /* flaneth - flash and ethernet
2)    Copyright (C) 2007-2012 Stefan Schuermans <stefan@schuermans.info>
3)    Copyleft: GNU public license V2 - http://www.gnu.org/copyleft/gpl.html
4)    a BlinkenArea project - http://www.blinkenarea.org/ */
5) 
6) #include <string.h>
7) 
Stefan Schuermans support for reading MAC/IP...

Stefan Schuermans authored 12 years ago

8) #include "app_cfg.h"
Stefan Schuermans put filesystem stuff into o...

Stefan Schuermans authored 12 years ago

9) #include "apps.h"
10) #include "debug.h"
11) #include "dosfs.h"
12) 
Stefan Schuermans support for reading MAC/IP...

Stefan Schuermans authored 12 years ago

13) /**
14)  * @brief list directory and dump file
15)  * @param[in] sectorBuf scratch buffer to store a sector
16)  * @param[in] vi volume information structure
17)  */
Stefan Schuermans 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);
Stefan Schuermans support for reading MAC/IP...

Stefan Schuermans authored 12 years ago

104) 
105)   // run one-short applications
106)   AppCfgRun(sectorBuf, &vi);