📄 song_task.lst
字号:
C51 COMPILER V6.20c SONG_TASK 07/10/2002 15:17:41 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE SONG_TASK
OBJECT MODULE PLACED IN ..\obj\song_task.obj
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE ..\src\song\song_task.c BROWSE INCDIR(..\src\system;..\..\..\lib) DEFINE(KE
-IL) DEBUG OBJECTEXTEND PRINT(.\song_task.lst) OBJECT(..\obj\song_task.obj)
stmt level source
1 /*C**************************************************************************
2 * $RCSfile: song_task.c,v $
3 *----------------------------------------------------------------------------
4 * Copyright (c) 2002 Atmel.
5 *----------------------------------------------------------------------------
6 * RELEASE: $Name: DEMO_FAT_1_2_5 $
7 * REVISION: $Revision: 1.11 $
8 * FILE_CVSID: $Id: song_task.c,v 1.11 2002/06/06 15:28:30 ffosse Exp $
9 *----------------------------------------------------------------------------
10 * PURPOSE:
11 * This file contains the song task and attached routines
12 *
13 * NOTES:
14 * Global Variables:
15 * - gl_key_press: bit in bdata space
16 * - gl_key: byte in idata space
17 *****************************************************************************/
18
19 /*_____ I N C L U D E S ____________________________________________________*/
20
21 #include "config.h" /* system configuration */
22 #include "..\..\..\..\lib_demob\board.h" /* board definition */
23 #include "..\display\disp.h" /* display definition */
24 #include "..\file\file.h" /* file definition */
25 #include "..\mode\mode_task.h" /* mode task definition */
26 #include "..\display\disp_task.h" /* display definition */
27 #include "..\clock\clock.h" /* clock definition */
28 #include "..\mem\mem_task.h" /* memory task definition */
29 #include "..\..\..\..\lib\aud\aud_drv.h" /* audio driver definition */
30 #include "..\..\..\..\lib\mp3\mp3_drv.h" /* mp3 driver definition */
31 #include "song_drv.h" /* song driver definition */
32 #include "song_task.h" /* song task definition */
33
34
35
36 /*_____ M A C R O S ________________________________________________________*/
37
38
39 /*_____ D E F I N I T I O N ________________________________________________*/
40
41 extern bdata bit gl_key_press; /* TRUE when a key is decoded */
42 extern idata Byte gl_key; /* value of the key pressed */
43 extern bdata bit gl_mem_failure; /* memory hardware failure */
44 extern data Byte gl_wa_tick; /* workaround tick counter */
45
46 static Byte song_state; /* task state */
47 static bit song_loop; /* auto replay */
48
49
50 /*_____ D E C L A R A T I O N ______________________________________________*/
51
52
53 /*F**************************************************************************
54 * NAME: song_task_init
C51 COMPILER V6.20c SONG_TASK 07/10/2002 15:17:41 PAGE 2
55 *----------------------------------------------------------------------------
56 * PARAMS:
57 *
58 * return:
59 *----------------------------------------------------------------------------
60 * PURPOSE:
61 * Song playing task initialization
62 *----------------------------------------------------------------------------
63 * EXAMPLE:
64 *----------------------------------------------------------------------------
65 * NOTE:
66 *----------------------------------------------------------------------------
67 * REQUIREMENTS:
68 *****************************************************************************/
69 void song_task_init (void)
70 {
71 1 song_loop = FALSE; /* no loop playing */
72 1 song_snd_init(); /* init sound control */
73 1 song_state = SONG_START;
74 1 }
75
76
77 /*F**************************************************************************
78 * NAME: song_task
79 *----------------------------------------------------------------------------
80 * PARAMS:
81 *
82 * return:
83 *----------------------------------------------------------------------------
84 * PURPOSE:
85 * Song playing task
86 *----------------------------------------------------------------------------
87 * EXAMPLE:
88 *----------------------------------------------------------------------------
89 * NOTE:
90 * STATES:
91 * SONG_START start song task
92 * SONG_INSTALL installation state
93 * SONG_IDLE idle state of this task
94 * SONG_INIT initialization of MP3 & others
95 * SONG_PLAY song under playing
96 * SONG_PLL wait pll locked
97 * SONG_PAUSE song playing halted
98 * SONG_NEW previous or next song handler
99 * SONG_STOP stop playing
100 * SONG_NO_SONG no song in memory
101 * SONG_ERROR MP3 macrocell returned an error
102 *----------------------------------------------------------------------------
103 * REQUIREMENTS:
104 *****************************************************************************/
105 void song_task (void)
106 {
107 1 switch (song_state)
108 1 {
109 2 case SONG_START:
110 2 {
111 3 print_mode_song(); /* select song icon */
112 3 print_state_blank(); /* select blank icon */
113 3 print_screen(SONG_SCREEN); /* display song screen */
114 3 print_sound_level(); /* display volume level */
115 3 print_repeat(song_loop);
116 3 song_state = SONG_INSTALL;
C51 COMPILER V6.20c SONG_TASK 07/10/2002 15:17:41 PAGE 3
117 3 break;
118 3 }
119 2
120 2
121 2 case SONG_INSTALL:
122 2 {
123 3 if (mem_status() != MEM_BUSY) /* wait end of memory install */
124 3 {
125 4 if (mem_status() == MEM_READY)
126 4 { /* disk formated */
127 5 /* this may be changed to retrieve last saved position */
128 5 if (File_entry_root(FILE_MP3 | FILE_DIR) == OK) /* goto root directory */
129 5 {
130 6 print_file_name(); /* display file name */
131 6 song_state = SONG_IDLE;
132 6 }
133 5 else
134 5 { /* root is empty of song & diretory */
135 6 song_state = SONG_NO_SONG;
136 6 }
137 5 }
138 4 else
139 4 { /* disk not formated */
140 5 print_state_error(); /* error icon when not formated */
141 5 if (gl_key_press) /* a key is pressed? */
142 5 {
143 6 switch (gl_key)
144 6 {
145 7 case KEY_MEM:
146 7 mem_select_next(); /* select next memory */
147 7 song_state = SONG_START;
148 7 break;
149 7
150 7 case KEY_MODE:
151 7 mode_set_init(); /* exit from song task */
152 7 song_state = SONG_START;
153 7 break;
154 7
155 7 case KEY_LOCK:
156 7 print_kbd_lock(); /* print keyboard status */
157 7 break;
158 7 }
159 6 gl_key_press = FALSE; /* ack key usage */
160 6 }
161 5 else
162 5 { /* check card presence */
163 6 if (mem_check_card() == KO)
164 6 {
165 7 mem_select_next();
166 7 song_state = SONG_START; /* card has been unplugged */
167 7 }
168 6 }
169 5 }
170 4 }
171 3 else
172 3 {
173 4 if (gl_key_press) /* stop key is pressed? */
174 4 {
175 5 if (gl_key == KEY_MODE)
176 5 {
177 6 mode_set_init(); /* exit from song task */
178 6 song_state = SONG_START;
C51 COMPILER V6.20c SONG_TASK 07/10/2002 15:17:41 PAGE 4
179 6 }
180 5 gl_key_press = FALSE; /* ack key usage */
181 5 }
182 4 }
183 3 break;
184 3 }
185 2
186 2
187 2 case SONG_IDLE: /* no file openned */
188 2 {
189 3 if (gl_key_press) /* a key is pressed? */
190 3 {
191 4 switch (gl_key)
192 4 {
193 5 case KEY_PLAY:
194 5 if (File_type() == FILE_DIR)
195 5 {
196 6 file_entry_dir(FILE_MP3 | FILE_DIR); /* goto sub-directory */
197 6 print_file_name(); /* display directory name */
198 6 }
199 5 else
200 5 { /* file_type is MP3 */
201 6 song_state = SONG_INIT;
202 6 }
203 5 break;
204 5
205 5 case KEY_NEXT:
206 5 file_seek_next(FILE_MP3 | FILE_DIR, TRUE); /* select next song with loop */
207 5 print_file_name(); /* display file name */
208 5 break;
209 5
210 5 case KEY_PREV:
211 5 file_seek_prev(FILE_MP3 | FILE_DIR); /* select previous song */
212 5 print_file_name(); /* display file name */
213 5 break;
214 5
215 5 case KEY_INC:
216 5 song_snd_inc(); /* increment selected control */
217 5 print_sound_level(); /* display new level */
218 5 break;
219 5
220 5 case KEY_DEC:
221 5 song_snd_dec(); /* decrement selected control */
222 5 print_sound_level(); /* display new level */
223 5 break;
224 5
225 5 case KEY_SOUND:
226 5 song_snd_select(); /* select next sound control */
227 5 print_sound(); /* display selected sound icon */
228 5 print_sound_level(); /* display new level */
229 5 break;
230 5
231 5 case KEY_PARENT:
232 5 File_exit_dir(FILE_MP3 | FILE_DIR); /* goto parent directory */
233 5 print_file_name(); /* display first file name */
234 5 break;
235 5
236 5 case KEY_MODE:
237 5 mode_set_init(); /* exit from song task */
238 5 disp_name_stop();
239 5 song_state = SONG_START;
240 5 break;
C51 COMPILER V6.20c SONG_TASK 07/10/2002 15:17:41 PAGE 5
241 5
242 5 case KEY_MEM:
243 5 mem_select_next(); /* select next memory */
244 5 disp_name_stop();
245 5 song_state = SONG_START;
246 5 break;
247 5
248 5 case KEY_LOCK:
249 5 print_kbd_lock(); /* print keyboard status */
250 5 break;
251 5
252 5 default:
253 5 break;
254 5 }
255 4 gl_key_press = FALSE; /* ack key usage */
256 4 }
257 3 else
258 3 { /* check card presence */
259 4 if (mem_check_card() == KO)
260 4 {
261 5 disp_name_stop();
262 5 mem_select_next();
263 5 song_state = SONG_START; /* card has been unplugged */
264 5 }
265 4 }
266 3 break;
267 3 }
268 2
269 2
270 2 case SONG_INIT:
271 2 {
272 3 disp_clock_reset(); /* reset clock timer */
273 3 if (Fopen(READ) == OK)
274 3 {
275 4 if (song_init() != SONG_NO_ERR) /* init song playing */
276 4 {
277 5 song_stop(); /* stop playing song */
278 5 Fclose();
279 5 if (file_seek_next(FILE_MP3, song_loop)) /* select next song */
280 5 {
281 6 song_state = SONG_NEW;
282 6 gl_key_press = FALSE; /* no key usage */
283 6 }
284 5 else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -