diff options
author | Max Christian Pohle | 2015-07-27 15:12:22 +0200 |
---|---|---|
committer | Max Christian Pohle | 2015-07-27 15:12:22 +0200 |
commit | 2df2697107d7873232c31a25a6947711b0903edb (patch) | |
tree | ff7247e9e970c69f3d3385950b19db9997a511b8 /src/main.c | |
download | alarmclock-2df2697107d7873232c31a25a6947711b0903edb.tar.bz2 alarmclock-2df2697107d7873232c31a25a6947711b0903edb.zip |
latest running version from march 2011, not having been in repo before,
dcf77 working, mp3 playback and two display types are supported
Diffstat (limited to 'src/main.c')
-rwxr-xr-x | src/main.c | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/src/main.c b/src/main.c new file mode 100755 index 0000000..2acae0a --- /dev/null +++ b/src/main.c | |||
@@ -0,0 +1,277 @@ | |||
1 | #include <avr/io.h> | ||
2 | #include <util/delay.h> | ||
3 | |||
4 | // shared routines... | ||
5 | #include "inc/stdout.h" | ||
6 | |||
7 | // uart-driven... | ||
8 | /// #include "inc/uart/uart.h" | ||
9 | |||
10 | // interrupt-driven... | ||
11 | #include "inc/int/dcf77/clock.h" | ||
12 | |||
13 | // spi-driven... | ||
14 | #include "inc/spi/spi.h" | ||
15 | #include "inc/spi/dev/display_dogm.h" | ||
16 | #include "inc/spi/dev/audio_vs1011.h" | ||
17 | |||
18 | /// #include "inc/spi/dev/petit/pff.h" | ||
19 | /// #include "inc/spi/dev/petit/diskio.h" | ||
20 | |||
21 | /* | ||
22 | static void showtime() | ||
23 | { | ||
24 | const char* dow[] = {"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"}; | ||
25 | |||
26 | display_dogm_exec(CMD_DISPLAY_POS + 0); | ||
27 | stdout_put_uint(display_dogm_putc, t_current.h); | ||
28 | display_dogm_putc(':'); | ||
29 | stdout_put_uint(display_dogm_putc, t_current.m); | ||
30 | display_dogm_putc(':'); | ||
31 | stdout_put_uint(display_dogm_putc, t_current.s); | ||
32 | |||
33 | display_dogm_exec(CMD_DISPLAY_POS + 16); | ||
34 | if(t_current.wd > 0 && t_current.wd < 6) | ||
35 | stdout_put_string(display_dogm_putc, dow[t_current.wd]); | ||
36 | else | ||
37 | stdout_put_string(display_dogm_putc, "dow:n/a"); | ||
38 | } | ||
39 | */ | ||
40 | |||
41 | /* | ||
42 | void notify_error(FRESULT res) | ||
43 | { | ||
44 | switch(res) | ||
45 | { | ||
46 | case FR_OK: | ||
47 | stdout_put_string(display_dogm_putc, "FR_OK\n"); | ||
48 | break; | ||
49 | case FR_DISK_ERR: | ||
50 | stdout_put_string(display_dogm_putc, "FR_DISK_ERR\n"); | ||
51 | break; | ||
52 | case FR_NOT_READY: | ||
53 | stdout_put_string(display_dogm_putc, "FR_NOT_READY\n"); | ||
54 | break; | ||
55 | case FR_NO_FILE: | ||
56 | stdout_put_string(display_dogm_putc, "FR_NO_FILE\n"); | ||
57 | break; | ||
58 | case FR_NO_PATH: | ||
59 | stdout_put_string(display_dogm_putc, "FR_NO_PATH\n"); | ||
60 | break; | ||
61 | case FR_NOT_OPENED: | ||
62 | stdout_put_string(display_dogm_putc, "FR_NOT_OPENED\n"); | ||
63 | break; | ||
64 | case FR_NOT_ENABLED: | ||
65 | stdout_put_string(display_dogm_putc, "FR_NOT_ENABLED\n"); | ||
66 | break; | ||
67 | case FR_NO_FILESYSTEM: | ||
68 | stdout_put_string(display_dogm_putc, "FR_NO_FILESYSTEM\n"); | ||
69 | break; | ||
70 | default: | ||
71 | stdout_put_string(display_dogm_putc, "FR_UNKNOWN\n"); | ||
72 | break; | ||
73 | } | ||
74 | |||
75 | _delay_ms(1000); | ||
76 | display_dogm_exec(CMD_DISPLAY_CLEAR); | ||
77 | } | ||
78 | */ | ||
79 | |||
80 | int main() | ||
81 | { | ||
82 | /// uart_init(); | ||
83 | spi_init(); | ||
84 | /// display_dogm_init(); | ||
85 | /// stdout_put_string(display_dogm_putc, "Display initialized!"); | ||
86 | /// DDRD = (1<<PD4) | (1<<PD5); | ||
87 | /// PORTD |= (1<<PD4) | (1<<PD5); | ||
88 | |||
89 | |||
90 | timer_init(); | ||
91 | sei(); | ||
92 | |||
93 | display_dogm_init(); | ||
94 | stdout_put_string(display_dogm_putc, "Display ready!"); | ||
95 | _delay_ms(1000); | ||
96 | |||
97 | char s = 99; | ||
98 | for(;;) | ||
99 | { | ||
100 | s = t_current.s; | ||
101 | //showtime(); | ||
102 | display_dogm_exec(CMD_DISPLAY_POS + 0); | ||
103 | |||
104 | unsigned char q; | ||
105 | for(q=28; q>=12; q--) | ||
106 | { | ||
107 | if(dcf77[q].bit == 1) | ||
108 | display_dogm_putc('1'); | ||
109 | else | ||
110 | display_dogm_putc('0'); | ||
111 | } | ||
112 | |||
113 | display_dogm_exec(CMD_DISPLAY_POS + 16); | ||
114 | for(q=DCF_HOURP; q>=DCF_HOUR-1; q--) | ||
115 | { | ||
116 | if(dcf77[q].bit == 1) | ||
117 | display_dogm_putc('1'); | ||
118 | else | ||
119 | display_dogm_putc('0'); | ||
120 | } | ||
121 | |||
122 | display_dogm_putc(' '); | ||
123 | stdout_put_uint(display_dogm_putc, lastinterval); | ||
124 | display_dogm_putc(' '); | ||
125 | stdout_put_uint(display_dogm_putc, dcf77_bit); | ||
126 | |||
127 | |||
128 | display_dogm_exec(CMD_DISPLAY_POS + 32); | ||
129 | //stdout_put_uint(display_dogm_putc, t_current.ms); | ||
130 | stdout_put_uint(display_dogm_putc, t_current.h); | ||
131 | display_dogm_putc(':'); | ||
132 | stdout_put_uint(display_dogm_putc, t_current.m); | ||
133 | display_dogm_putc(':'); | ||
134 | stdout_put_uint(display_dogm_putc, t_current.s); | ||
135 | |||
136 | display_dogm_putc(' '); | ||
137 | stdout_put_uint(display_dogm_putc, t_current.dd); | ||
138 | display_dogm_putc(':'); | ||
139 | stdout_put_uint(display_dogm_putc, t_current.mm); | ||
140 | display_dogm_putc(':'); | ||
141 | stdout_put_uint(display_dogm_putc, t_current.yy); | ||
142 | _delay_ms(100); | ||
143 | } | ||
144 | |||
145 | /* | ||
146 | |||
147 | display_dogm_exec(CMD_DISPLAY_POS + 0); | ||
148 | stdout_put_string(display_dogm_putc, "test: vs-init..."); | ||
149 | /// audio_vs1011_init(); | ||
150 | _delay_ms(1000); | ||
151 | |||
152 | display_dogm_exec(CMD_DISPLAY_POS + 16); | ||
153 | stdout_put_string(display_dogm_putc, "test: volume..."); | ||
154 | /// audio_vs1011_test_volume(); | ||
155 | _delay_ms(1000); | ||
156 | |||
157 | display_dogm_exec(CMD_DISPLAY_POS + 32); | ||
158 | stdout_put_string(display_dogm_putc, "test: sine..."); | ||
159 | /// audio_vs1011_test_sine(); | ||
160 | _delay_ms(1000); | ||
161 | */ | ||
162 | /* | ||
163 | FATFS fs; // File system object | ||
164 | |||
165 | char t = 0; | ||
166 | for(;;) | ||
167 | { | ||
168 | if(t) | ||
169 | { | ||
170 | PORTD |= ((1<<PD4) | (1<<PD5)); | ||
171 | t = 0; | ||
172 | } | ||
173 | else | ||
174 | { | ||
175 | PORTD &= ~((1<<PD4) | (1<<PD5)); | ||
176 | t = 1; | ||
177 | } | ||
178 | |||
179 | |||
180 | display_dogm_init(); | ||
181 | display_dogm_exec(CMD_DISPLAY_CLEAR); | ||
182 | /// showtime(); | ||
183 | _delay_ms(500); | ||
184 | |||
185 | BYTE dres = FR_OK; | ||
186 | FRESULT res = FR_OK; | ||
187 | if((dres = disk_initialize()) == FR_OK) | ||
188 | { | ||
189 | if((res = pf_mount(&fs)) == FR_OK) | ||
190 | { | ||
191 | if((res = pf_open("newtest.txt")) == FR_OK) | ||
192 | { | ||
193 | WORD s1; | ||
194 | const char bufsize = 32; | ||
195 | //pf_read(&c, 1, &s1); | ||
196 | do | ||
197 | { | ||
198 | char c[bufsize]; | ||
199 | res = pf_read(&c, bufsize, &s1); | ||
200 | |||
201 | DESELECT(); | ||
202 | int i; | ||
203 | for(i=0; i<=31; i++) | ||
204 | { display_dogm_putc(c[i]); } | ||
205 | SELECT(); | ||
206 | / * | ||
207 | if(res == FR_OK) | ||
208 | { | ||
209 | display_dogm_putc(c); | ||
210 | _delay_ms(500); | ||
211 | } | ||
212 | else | ||
213 | { | ||
214 | stdout_put_string(display_dogm_putc, "pf_read: failed.\n"); | ||
215 | _delay_ms(1000); | ||
216 | break; | ||
217 | } | ||
218 | */ | ||
219 | /* | ||
220 | } while (s1 == bufsize); | ||
221 | _delay_ms(1000); display_dogm_exec(CMD_DISPLAY_CLEAR); | ||
222 | } else { notify_error(res); } // << pf_open | ||
223 | } else { notify_error(res); } // << pf_mount | ||
224 | } else { notify_error(res); } // << disk_init | ||
225 | } | ||
226 | */ | ||
227 | |||
228 | } | ||
229 | |||
230 | |||
231 | /// DIR dir; // Directory object | ||
232 | /// FILINFO fno; // File information | ||
233 | /// stdout_put_string(uart_putc, "[debug]\tuart initialized.\n"); | ||
234 | /// stdout_put_string(uart_putc, "[debug]\tspi initialized.\n"); | ||
235 | //audio_vs1011_init(); | ||
236 | /// stdout_put_string(uart_putc, "[debug]\tvs1011 initialized.\n"); | ||
237 | /// stdout_put_string(display_dogm_putc, "playing test.mp3"); | ||
238 | /// stdout_put_string(uart_putc, "[debug]\tdogm initialized.\n"); | ||
239 | /// stdout_put_string(display_dogm_putc, "ich teste das display"); | ||
240 | /// _delay_ms(100); | ||
241 | /// stdout_put_string(display_dogm_putc, "es funktioniert!"); | ||
242 | /// _delay_ms(100); | ||
243 | /// stdout_put_string(display_dogm_putc, "init timer..."); | ||
244 | /// stdout_put_string(uart_putc, "[debug]\tvs1011 initialized.\n"); | ||
245 | |||
246 | /* | ||
247 | /// stdout_put_string(uart_putc, "[debug]\tSPI clock: SPICLK_FAST\n"); | ||
248 | do | ||
249 | { | ||
250 | res = pf_read(0, 320, &s1); | ||
251 | if(res != FR_OK) | ||
252 | { notify_error(res); } | ||
253 | } while (s1 == 320); | ||
254 | spi_setspeed(SPICLK_DEFAULT); | ||
255 | /// stdout_put_string(uart_putc, "[debug]\tSPI clock: SPICLK_DEFAULT\n"); | ||
256 | */ | ||
257 | |||
258 | |||
259 | /* | ||
260 | stdout_put_string(uart_putc, "<sine>\t\n"); | ||
261 | for(i=0; i<5; i++) | ||
262 | audio_vs1011_test_sine(); | ||
263 | stdout_put_string(uart_putc, "</sine>\n"); | ||
264 | */ | ||
265 | |||
266 | /* | ||
267 | |||
268 | for(i=0; i<5; i++) | ||
269 | audio_vs1011_test_eeprom(); | ||
270 | |||
271 | display_dogm_exec(CMD_DISPLAY_CLEAR); | ||
272 | display_dogm_exec(CMD_DISPLAY_POS + 0); | ||
273 | stdout_put_string(display_dogm_putc, "[volume test]"); | ||
274 | for(i=0; i<5; i++) | ||
275 | audio_vs1011_test_volume(); | ||
276 | |||
277 | */ | ||