summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/debug_menu.c172
1 files changed, 172 insertions, 0 deletions
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index 993b5fdde3..c386f05972 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -58,6 +58,177 @@
58#include "ata_mmc.h" 58#include "ata_mmc.h"
59#endif 59#endif
60 60
61#ifdef IRIVER_H100
62#include "uda1380.h"
63#include "pcm_playback.h"
64#include "buffer.h"
65
66#define CHUNK_SIZE 44100 /* Transfer CHUNK_SIZE bytes on
67 each DMA transfer */
68
69static unsigned char line = 0;
70static unsigned char *audio_buffer;
71static int audio_pos;
72static int audio_size;
73
74static void puts(const char *fmt, ...)
75{
76 char buf[80];
77
78 if (line > 15)
79 {
80 lcd_clear_display();
81 line = 0;
82 }
83
84 va_list ap;
85 va_start(ap, fmt);
86 vsnprintf(buf, sizeof(buf)-1, fmt, ap);
87 va_end(ap);
88
89 lcd_puts(0, line, buf);
90 lcd_update();
91
92 line++;
93}
94
95/* Very basic WAVE-file support.. Just for testing purposes.. */
96int load_wave(char *filename)
97{
98 int f, i;
99 unsigned char buf[32];
100 unsigned short *p;
101
102 puts("Loading %s..", filename);
103
104 f = open(filename, O_RDONLY);
105 if (f == -1)
106 {
107 puts("File not found");
108 return -1;
109 }
110
111 memset(buf,0,32);
112 read(f, buf, 32);
113 if (memcmp(buf, "RIFF", 4) != 0 || memcmp(buf+8, "WAVE", 4) != 0)
114 {
115 puts("Not WAVE");
116 return -1;
117 }
118 if (buf[12+8] != 1 || buf[12+9] != 0 || /* Check PCM format */
119 buf[12+10] != 2 || buf[12+11] != 0) /* Check stereo */
120 {
121 puts("Unsupported format");
122 return -1;
123 }
124
125 audio_size = filesize(f) - 0x30;
126 if (audio_size > 8*1024*1024)
127 audio_size = 8*1024*1024;
128
129 audio_buffer = mp3buf;
130
131 puts("Reading %d bytes..", audio_size);
132
133 lseek(f, 0x30, SEEK_SET); /* Skip wave header */
134
135 read(f, audio_buffer, audio_size);
136 close(f);
137
138 puts("Changing byte order..");
139 p = (unsigned short *)audio_buffer;
140 for (i=0; i<audio_size/2; i++, p++)
141 {
142 *p = SWAB16(*p);
143 }
144
145 return 0;
146}
147
148/*
149 Test routined of the UDA1380 codec
150 - Loads a WAVE file and plays it..
151 - Control play/stop, master volume and analog mixer volume
152
153*/
154
155static void test_get_more(unsigned char **ptr, long *size)
156{
157 static long last_chunk_size = 0;
158
159 audio_pos += last_chunk_size;
160
161 if(audio_pos < audio_size)
162 {
163 last_chunk_size = MIN(CHUNK_SIZE, (audio_size - audio_pos));
164 *ptr = &audio_buffer[audio_pos];
165 *size = last_chunk_size;
166 }
167}
168
169bool uda1380_test(void)
170{
171 long button;
172 int vol = 0x7f;
173 bool done = false;
174
175 lcd_setmargins(0, 0);
176 lcd_clear_display();
177 lcd_update();
178
179 if (load_wave("/sample.wav") == -1)
180 goto exit;
181
182 audio_pos = 0;
183
184 puts("uda1380_init");
185 if (uda1380_init() == -1)
186 {
187 puts("Init failed..");
188 goto exit;
189 }
190
191 puts("Playing..");
192 audio_pos = 0;
193 pcm_play_data(audio_buffer, CHUNK_SIZE,
194 test_get_more);
195
196 while(!done)
197 {
198 button = button_get_w_tmo(HZ/2);
199 switch(button)
200 {
201 case BUTTON_UP:
202 if (vol)
203 vol--;
204
205 uda1380_setvol(vol);
206 break;
207 case BUTTON_DOWN:
208 if (vol < 255)
209 vol++;
210
211 uda1380_setvol(vol);
212 break;
213 case BUTTON_OFF:
214 done = true;
215 break;
216 }
217
218 if(!pcm_is_playing())
219 done = true;
220 }
221
222 pcm_play_stop();
223 uda1380_mute(1);
224
225exit:
226 sleep(HZ >> 1); /* Sleep 1/2 second to fade out sound */
227
228 return false;
229}
230#endif
231
61/*---------------------------------------------------*/ 232/*---------------------------------------------------*/
62/* SPECIAL DEBUG STUFF */ 233/* SPECIAL DEBUG STUFF */
63/*---------------------------------------------------*/ 234/*---------------------------------------------------*/
@@ -1793,6 +1964,7 @@ bool debug_menu(void)
1793#endif 1964#endif
1794#ifdef HAVE_ADJUSTABLE_CPU_FREQ 1965#ifdef HAVE_ADJUSTABLE_CPU_FREQ
1795 { "CPU frequency", dbg_cpufreq }, 1966 { "CPU frequency", dbg_cpufreq },
1967 { "Audio test", uda1380_test },
1796#endif 1968#endif
1797#if CONFIG_CPU == SH7034 1969#if CONFIG_CPU == SH7034
1798#ifdef HAVE_LCD_BITMAP 1970#ifdef HAVE_LCD_BITMAP