80d3768a2de2810020e378d20dd3effdf3623556
Stefan Schuermans header fix

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/ */
Stefan Schuermans initial commit after making...

Stefan Schuermans authored 12 years ago

5) 
6) #include <avr/interrupt.h>
7) #include <avr/wdt.h>
Stefan Schuermans added dosfs code to read FA...

Stefan Schuermans authored 12 years ago

8) #include <string.h>
Stefan Schuermans initial commit after making...

Stefan Schuermans authored 12 years ago

9) 
10) #include "arp.h"
11) #include "bus.h"
12) #include "cf.h"
13) #include "debug.h"
Stefan Schuermans added dosfs code to read FA...

Stefan Schuermans authored 12 years ago

14) #include "dosfs.h"
Stefan Schuermans initial commit after making...

Stefan Schuermans authored 12 years ago

15) #include "eeprom.h"
16) #include "http.h"
17) #include "random.h"
18) #include "rtl8019.h"
19) #include "status.h"
Stefan Schuermans converted CF processing to...

Stefan Schuermans authored 12 years ago

20) #include "tasks.h"
Stefan Schuermans initial commit after making...

Stefan Schuermans authored 12 years ago

21) #include "tcp.h"
22) #include "timing.h"
23) #include "uart.h"
24) 
Stefan Schuermans converted CF processing to...

Stefan Schuermans authored 12 years ago

25) // try to work with CF card
26) static void mainWorkCf(void)
27) {
Stefan Schuermans added dosfs code to read FA...

Stefan Schuermans authored 12 years ago

28)   unsigned long sectors;
29)   uint8_t sectorBuf[SECTOR_SIZE];
30)   uint32_t partStart, partSize;
31)   uint8_t partAct, partType;
32)   VOLINFO vi;
33)   const char *sec_clus, *fstype;
34)   DIRINFO di;
35)   DIRENT de;
36)   uint8_t filename[12];
37)   FILEINFO fi;
38)   uint8_t buf[16];
39)   uint32_t len, i;
Stefan Schuermans converted CF processing to...

Stefan Schuermans authored 12 years ago

40) 
41)   // reset card
42)   if (CfReset() != 0)
43)     return;
44) 
45)   // identify card
46)   if (CfIdentify(&sectors) != 0)
47)     return;
48) 
Stefan Schuermans added dosfs code to read FA...

Stefan Schuermans authored 12 years ago

49)   // get start of first partition
50)   partStart = DFS_GetPtnStart(0, sectorBuf, 0, &partAct, &partType, &partSize);
51)   if (partStart == 0xFFFFFFFF) {
52)     debug_printf("cannot find first partition");
53)     return;
54)   }
55)   debug_printf("partition: start %lu size %lu", partStart, partSize);
56) 
57)   // get volume info
58)   if (DFS_GetVolInfo(0, sectorBuf, partStart, &vi) != 0) {
59)     debug_printf("cannot get volume info");
60)     return;
61)   }
62)   switch (vi.filesystem) {
63)     case FAT12: sec_clus = "sector: "; fstype = "FAT12";   break;
64)     case FAT16: sec_clus = "sector: "; fstype = "FAT16";   break;
65)     case FAT32: sec_clus = "cluster:"; fstype = "FAT32";   break;
66)     default:    sec_clus = "sector: "; fstype = "unknown"; break;
67)   }
68)   debug_printf("filesystem:                    %s", fstype);
69)   debug_printf("volume label:                  %-11.11s", vi.label);
70)   debug_printf("sector/s per cluster:          %hu", vi.secperclus);
71)   debug_printf("reserved sector/s:             %hu", vi.reservedsecs);
72)   debug_printf("volume total sectors:          %lu", vi.numsecs);
73)   debug_printf("sectors per FAT:               %lu", vi.secperfat);
74)   debug_printf("first FAT at sector:           %lu", vi.fat1);
75)   debug_printf("root dir at %s           %lu", sec_clus, vi.rootdir);
76)   debug_printf("root dir entries:              %hu", vi.rootentries);
77)   debug_printf("data area commences at sector: %lu", vi.dataarea);
78)   debug_printf("clusters in data area:         %lu", vi.numclusters);
79)   debug_printf("sectors per cluster:           %hu", vi.secperclus);
80) 
81)   // list files in root directory
82)   di.scratch = sectorBuf;
83)   if (DFS_OpenDir(&vi, (uint8_t *)"", &di) != 0) {
84)     debug_printf("cannot open root directory");
85)     return;
86)   }
87)   debug_printf("files in root directory:");
88)   while (DFS_GetNext(&vi, &di, &de) == 0) {
89)     if (de.attr == ATTR_LONG_NAME) {
90)       // ignore long names
91)     } else if (de.attr & ATTR_VOLUME_ID) {
92)       debug_printf("volume ID: %-11.11s", de.name);
93)     } else if (de.attr & ATTR_DIRECTORY) {
94)       debug_printf("directory: %-11.11s", de.name);
95)     } else {
96)       debug_printf("file: %-11.11s", de.name);
97)       memcpy(filename, de.name, 11); // remember last filename
98)       filename[11] = 0;
Stefan Schuermans converted CF processing to...

Stefan Schuermans authored 12 years ago

99)     }
Stefan Schuermans added dosfs code to read FA...

Stefan Schuermans authored 12 years ago

100)   }
101) 
102)   // dump last file
103)   if (DFS_OpenFile(&vi, filename, DFS_READ, sectorBuf, &fi) != 0) {
104)     debug_printf("cannot open file %s", filename);
105)     return;
106)   }
107)   debug_printf("dumping file %s:", filename);
108)   while (fi.pointer < fi.filelen) {
109)     len = 0;
110)     DFS_ReadFile(&fi, sectorBuf, buf, &len, sizeof(buf));
111)     for (i = 0; i < len; ++i)
112)       debug_printf_nolf(" %02X", buf[i]);
113)     debug_printf("");
114)   }
115)   debug_printf("done", filename);
Stefan Schuermans converted CF processing to...

Stefan Schuermans authored 12 years ago

116) }
117) 
118) // wait for CF card and work with it
119) static void mainWaitCf(void)
120) {
121)   // wait for new card
122)   while (!CfIsPresent())
123)     Tasks();
124) 
125)   // work with card
126)   mainWorkCf();
127) 
128)   // wait for failing card to be removed
129)   while (CfIsPresent())
130)     Tasks();
131) }
132) 
Stefan Schuermans initial commit after making...

Stefan Schuermans authored 12 years ago

133) // main code entry point
134) int main(void)
135) {
136)   wdt_reset();
137) #ifdef DEBUG
138)   wdt_disable();
139) #else
140)   wdt_enable(WDTO_60MS);
141) #endif
142)   wdt_reset();
143) 
144)   // initialize uart to be able to use stdio
145)   UartInit();
146) 
147)   debug_printf("");
148)   debug_printf("flaneth");
149) 
150)   debug_init_printf("init");
151) 
152)   // initialize low level modules
153)   BusInit();
154) 
155)   // initialize middle level modules
156)   CfInit();
157)   RtlInit();
158)   StatusInit();
159)   TimingInit();
160) 
161)   // initialize high level modules
162)   ArpInit();
163)   HttpInit();
164)   TcpInit();
165) 
166)   // use entropy collected during initialization
167)   RandomTask();
168) 
169)   debug_init_printf("config");
170) 
171)   // get configuration from EEPROM
172)   EepromGetConfig();
173) 
174)   // enable interrupts
175)   sei();
176) 
177)   debug_init_printf("start");
178) 
179)   // main loop
Stefan Schuermans converted CF processing to...

Stefan Schuermans authored 12 years ago

180)   while (1)
181)     mainWaitCf();
Stefan Schuermans initial commit after making...

Stefan Schuermans authored 12 years ago

182) 
183)   return 0;
184) }