blob: 443e9eb18b415ff663c8db5f936769828fd04936 [file] [log] [blame]
Jens Arnold4376abb2007-01-22 23:29:39 +00001/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2007 Jens Arnold
11 *
Daniel Stenberg2acc0ac2008-06-28 18:10:04 +000012 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation; either version 2
15 * of the License, or (at your option) any later version.
Jens Arnold4376abb2007-01-22 23:29:39 +000016 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22#include "plugin.h"
Björn Stenbergc6b3d382008-11-20 11:27:31 +000023#include "lib/helper.h"
Jens Arnold4376abb2007-01-22 23:29:39 +000024
25PLUGIN_HEADER
26
Jens Arnold73ef83f2007-05-22 20:49:22 +000027#define TESTBASEDIR "/__TEST__"
28#define TEST_FILE TESTBASEDIR "/test_disk.tmp"
29#define FRND_SEED 0x78C3 /* arbirary */
Jens Arnold4376abb2007-01-22 23:29:39 +000030
Frank Gevaerts19d1cac2008-10-31 21:25:04 +000031#if (CONFIG_STORAGE & STORAGE_MMC)
Jens Arnold4376abb2007-01-22 23:29:39 +000032#define TEST_SIZE (20*1024*1024)
33#else
34#define TEST_SIZE (300*1024*1024)
35#endif
Jens Arnold73ef83f2007-05-22 20:49:22 +000036#define TEST_TIME 10 /* in seconds */
Jens Arnold4376abb2007-01-22 23:29:39 +000037
Jens Arnold4376abb2007-01-22 23:29:39 +000038static unsigned char* audiobuf;
Jens Arnold73ef83f2007-05-22 20:49:22 +000039static ssize_t audiobuflen;
Jens Arnold4376abb2007-01-22 23:29:39 +000040
41static unsigned short frnd_buffer;
42static int line = 0;
43static int max_line = 0;
Jens Arnold73ef83f2007-05-22 20:49:22 +000044static int log_fd;
45static char logfilename[MAX_PATH];
46static const char testbasedir[] = TESTBASEDIR;
Jens Arnold4376abb2007-01-22 23:29:39 +000047
48static void mem_fill_frnd(unsigned char *addr, int len)
49{
50 unsigned char *end = addr + len;
51 unsigned random = frnd_buffer;
52
53 while (addr < end)
54 {
55 random = 75 * random + 74;
56 *addr++ = random >> 8;
57 }
58 frnd_buffer = random;
59}
60
61static bool mem_cmp_frnd(unsigned char *addr, int len)
62{
63 unsigned char *end = addr + len;
64 unsigned random = frnd_buffer;
65
66 while (addr < end)
67 {
68 random = 75 * random + 74;
69 if (*addr++ != ((random >> 8) & 0xff))
70 return false;
71 }
72 frnd_buffer = random;
73 return true;
74}
75
Jens Arnold73ef83f2007-05-22 20:49:22 +000076static bool log_init(void)
Jens Arnold4376abb2007-01-22 23:29:39 +000077{
78 int h;
79
80 rb->lcd_getstringsize("A", NULL, &h);
81 max_line = LCD_HEIGHT / h;
82 line = 0;
83 rb->lcd_clear_display();
84 rb->lcd_update();
Jens Arnold73ef83f2007-05-22 20:49:22 +000085
86 rb->create_numbered_filename(logfilename, "/", "test_disk_log_", ".txt",
87 2 IF_CNFN_NUM_(, NULL));
Thomas Martitz0a1d7c22010-05-06 17:35:13 +000088 log_fd = rb->open(logfilename, O_RDWR|O_CREAT|O_TRUNC, 0666);
Jens Arnold73ef83f2007-05-22 20:49:22 +000089 return log_fd >= 0;
Jens Arnold4376abb2007-01-22 23:29:39 +000090}
91
Jens Arnold73ef83f2007-05-22 20:49:22 +000092static void log_text(char *text, bool advance)
Jens Arnold4376abb2007-01-22 23:29:39 +000093{
94 rb->lcd_puts(0, line, text);
95 rb->lcd_update();
96 if (advance)
Jens Arnold73ef83f2007-05-22 20:49:22 +000097 {
Jens Arnold4376abb2007-01-22 23:29:39 +000098 if (++line >= max_line)
99 line = 0;
Jens Arnold73ef83f2007-05-22 20:49:22 +0000100 rb->fdprintf(log_fd, "%s\n", text);
101 }
102}
103
104static void log_close(void)
105{
106 rb->close(log_fd);
Jens Arnold4376abb2007-01-22 23:29:39 +0000107}
108
109static bool test_fs(void)
110{
111 unsigned char text_buf[32];
Jens Arnold73ef83f2007-05-22 20:49:22 +0000112 int total, current, align;
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000113 int fd, ret;
Jens Arnold4376abb2007-01-22 23:29:39 +0000114
Jens Arnold4376abb2007-01-22 23:29:39 +0000115 log_init();
Jens Arnold73ef83f2007-05-22 20:49:22 +0000116 log_text("test_disk WRITE&VERIFY", true);
Jens Arnold5fee03c2007-08-05 20:41:49 +0000117#ifndef SIMULATOR
Jens Arnold73ef83f2007-05-22 20:49:22 +0000118 rb->snprintf(text_buf, sizeof(text_buf), "CPU clock: %ld Hz",
119 *rb->cpu_frequency);
120 log_text(text_buf, true);
Jens Arnold5fee03c2007-08-05 20:41:49 +0000121#endif
Jens Arnold73ef83f2007-05-22 20:49:22 +0000122 log_text("----------------------", true);
123 rb->snprintf(text_buf, sizeof text_buf, "Data size: %dKB", (TEST_SIZE>>10));
124 log_text(text_buf, true);
Jens Arnold4376abb2007-01-22 23:29:39 +0000125
Thomas Martitzc61e89c2010-05-06 17:35:04 +0000126 fd = rb->creat(TEST_FILE, 0666);
Jens Arnold4376abb2007-01-22 23:29:39 +0000127 if (fd < 0)
128 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000129 rb->splashf(HZ, "creat() failed: %d", fd);
Jens Arnold4376abb2007-01-22 23:29:39 +0000130 goto error;
131 }
132
133 frnd_buffer = FRND_SEED;
134 total = TEST_SIZE;
135 while (total > 0)
136 {
Jens Arnold9a742232010-05-02 19:38:23 +0000137 align = rb->rand() & 0xf;
138 current = rb->rand() % (audiobuflen - align);
Jens Arnold4376abb2007-01-22 23:29:39 +0000139 current = MIN(current, total);
Jens Arnold4376abb2007-01-22 23:29:39 +0000140 rb->snprintf(text_buf, sizeof text_buf, "Wrt %dKB, %dKB left",
141 current >> 10, total >> 10);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000142 log_text(text_buf, false);
Jens Arnold4376abb2007-01-22 23:29:39 +0000143
Jens Arnold73ef83f2007-05-22 20:49:22 +0000144 mem_fill_frnd(audiobuf + align, current);
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000145 ret = rb->write(fd, audiobuf + align, current);
146 if (current != ret)
Jens Arnold4376abb2007-01-22 23:29:39 +0000147 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000148 rb->splashf(0, "write() failed: %d/%d", ret, current);
Jens Arnold4376abb2007-01-22 23:29:39 +0000149 rb->close(fd);
150 goto error;
151 }
152 total -= current;
153 }
154 rb->close(fd);
155
156 fd = rb->open(TEST_FILE, O_RDONLY);
157 if (fd < 0)
158 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000159 rb->splashf(0, "open() failed: %d", ret);
Jens Arnold4376abb2007-01-22 23:29:39 +0000160 goto error;
161 }
162
163 frnd_buffer = FRND_SEED;
164 total = TEST_SIZE;
165 while (total > 0)
166 {
Jens Arnold9a742232010-05-02 19:38:23 +0000167 align = rb->rand() & 0xf;
168 current = rb->rand() % (audiobuflen - align);
Jens Arnold4376abb2007-01-22 23:29:39 +0000169 current = MIN(current, total);
Jens Arnold4376abb2007-01-22 23:29:39 +0000170 rb->snprintf(text_buf, sizeof text_buf, "Cmp %dKB, %dKB left",
171 current >> 10, total >> 10);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000172 log_text(text_buf, false);
Jens Arnold4376abb2007-01-22 23:29:39 +0000173
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000174 ret = rb->read(fd, audiobuf + align, current);
175 if (current != ret)
Jens Arnold4376abb2007-01-22 23:29:39 +0000176 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000177 rb->splashf(0, "read() failed: %d/%d", ret, current);
Jens Arnold4376abb2007-01-22 23:29:39 +0000178 rb->close(fd);
179 goto error;
180 }
Jens Arnold73ef83f2007-05-22 20:49:22 +0000181 if (!mem_cmp_frnd(audiobuf + align, current))
Jens Arnold4376abb2007-01-22 23:29:39 +0000182 {
Jens Arnold73ef83f2007-05-22 20:49:22 +0000183 log_text(text_buf, true);
184 log_text("Compare error.", true);
Jens Arnold4376abb2007-01-22 23:29:39 +0000185 rb->close(fd);
186 goto error;
187 }
188 total -= current;
189 }
190 rb->close(fd);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000191 log_text(text_buf, true);
192 log_text("Test passed.", true);
Jens Arnold4376abb2007-01-22 23:29:39 +0000193
194error:
Jens Arnold73ef83f2007-05-22 20:49:22 +0000195 log_close();
Jens Arnold4376abb2007-01-22 23:29:39 +0000196 rb->remove(TEST_FILE);
197 rb->button_clear_queue();
198 rb->button_get(true);
199
200 return false;
201}
202
Jens Arnold73ef83f2007-05-22 20:49:22 +0000203static bool file_speed(int chunksize, bool align)
Jens Arnold4376abb2007-01-22 23:29:39 +0000204{
Jens Arnold73ef83f2007-05-22 20:49:22 +0000205 unsigned char text_buf[64];
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000206 int fd, ret;
Jens Arnold73ef83f2007-05-22 20:49:22 +0000207 long filesize = 0;
208 long size, time;
209
210 if (chunksize >= audiobuflen)
211 return false;
Jens Arnold4376abb2007-01-22 23:29:39 +0000212
Jens Arnold73ef83f2007-05-22 20:49:22 +0000213 log_text("--------------------", true);
Jens Arnold4376abb2007-01-22 23:29:39 +0000214
Jens Arnold73ef83f2007-05-22 20:49:22 +0000215 /* File creation write speed */
Thomas Martitzc61e89c2010-05-06 17:35:04 +0000216 fd = rb->creat(TEST_FILE, 0666);
Jens Arnold4376abb2007-01-22 23:29:39 +0000217 if (fd < 0)
218 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000219 rb->splashf(HZ, "creat() failed: %d", fd);
Jens Arnold4376abb2007-01-22 23:29:39 +0000220 goto error;
221 }
222 time = *rb->current_tick;
Jens Arnold73ef83f2007-05-22 20:49:22 +0000223 while (TIME_BEFORE(*rb->current_tick, time + TEST_TIME*HZ))
Jens Arnold4376abb2007-01-22 23:29:39 +0000224 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000225 ret = rb->write(fd, audiobuf + (align ? 0 : 1), chunksize);
226 if (chunksize != ret)
Jens Arnold73ef83f2007-05-22 20:49:22 +0000227 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000228 rb->splashf(HZ, "write() failed: %d/%d", ret, chunksize);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000229 rb->close(fd);
230 goto error;
231 }
232 filesize += chunksize;
Jens Arnold4376abb2007-01-22 23:29:39 +0000233 }
234 time = *rb->current_tick - time;
Jens Arnold4376abb2007-01-22 23:29:39 +0000235 rb->close(fd);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000236 rb->snprintf(text_buf, sizeof text_buf, "Create (%d,%c): %ld KB/s",
Jens Arnold3a746112008-02-26 18:31:59 +0000237 chunksize, align ? 'A' : 'U', (25 * (filesize>>8) / time) );
Jens Arnold73ef83f2007-05-22 20:49:22 +0000238 log_text(text_buf, true);
Jens Arnold4376abb2007-01-22 23:29:39 +0000239
Jens Arnold73ef83f2007-05-22 20:49:22 +0000240 /* Existing file write speed */
Jens Arnold4376abb2007-01-22 23:29:39 +0000241 fd = rb->open(TEST_FILE, O_WRONLY);
242 if (fd < 0)
243 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000244 rb->splashf(0, "open() failed: %d", fd);
Jens Arnold4376abb2007-01-22 23:29:39 +0000245 goto error;
246 }
247 time = *rb->current_tick;
Jens Arnold73ef83f2007-05-22 20:49:22 +0000248 for (size = filesize; size > 0; size -= chunksize)
Jens Arnold4376abb2007-01-22 23:29:39 +0000249 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000250 ret = rb->write(fd, audiobuf + (align ? 0 : 1), chunksize);
251 if (chunksize != ret)
Jens Arnold73ef83f2007-05-22 20:49:22 +0000252 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000253 rb->splashf(0, "write() failed: %d/%d", ret, chunksize);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000254 rb->close(fd);
255 goto error;
256 }
Jens Arnold4376abb2007-01-22 23:29:39 +0000257 }
258 time = *rb->current_tick - time;
Jens Arnold4376abb2007-01-22 23:29:39 +0000259 rb->close(fd);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000260 rb->snprintf(text_buf, sizeof text_buf, "Write (%d,%c): %ld KB/s",
Jens Arnold3a746112008-02-26 18:31:59 +0000261 chunksize, align ? 'A' : 'U', (25 * (filesize>>8) / time) );
Jens Arnold73ef83f2007-05-22 20:49:22 +0000262 log_text(text_buf, true);
Jens Arnold4376abb2007-01-22 23:29:39 +0000263
Jens Arnold73ef83f2007-05-22 20:49:22 +0000264 /* File read speed */
Jens Arnold4376abb2007-01-22 23:29:39 +0000265 fd = rb->open(TEST_FILE, O_RDONLY);
266 if (fd < 0)
267 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000268 rb->splashf(0, "open() failed: %d", fd);
Jens Arnold4376abb2007-01-22 23:29:39 +0000269 goto error;
270 }
271 time = *rb->current_tick;
Jens Arnold73ef83f2007-05-22 20:49:22 +0000272 for (size = filesize; size > 0; size -= chunksize)
Jens Arnold4376abb2007-01-22 23:29:39 +0000273 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000274 ret = rb->read(fd, audiobuf + (align ? 0 : 1), chunksize);
275 if (chunksize != ret)
Jens Arnold73ef83f2007-05-22 20:49:22 +0000276 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000277 rb->splashf(0, "read() failed: %d/%d", ret, chunksize);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000278 rb->close(fd);
279 goto error;
280 }
Jens Arnold4376abb2007-01-22 23:29:39 +0000281 }
282 time = *rb->current_tick - time;
Jens Arnold4376abb2007-01-22 23:29:39 +0000283 rb->close(fd);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000284 rb->snprintf(text_buf, sizeof text_buf, "Read (%d,%c): %ld KB/s",
Jens Arnold3a746112008-02-26 18:31:59 +0000285 chunksize, align ? 'A' : 'U', (25 * (filesize>>8) / time) );
Jens Arnold73ef83f2007-05-22 20:49:22 +0000286 log_text(text_buf, true);
Jens Arnold4376abb2007-01-22 23:29:39 +0000287 rb->remove(TEST_FILE);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000288 return true;
289
290 error:
291 rb->remove(TEST_FILE);
292 return false;
293}
294
295static bool test_speed(void)
296{
297 unsigned char text_buf[64];
298 DIR *dir = NULL;
299 struct dirent *entry = NULL;
300 int fd, last_file;
301 int i, n;
302 long time;
303
304 rb->memset(audiobuf, 'T', audiobuflen);
305 log_init();
306 log_text("test_disk SPEED TEST", true);
Jens Arnold5fee03c2007-08-05 20:41:49 +0000307#ifndef SIMULATOR
Jens Arnold73ef83f2007-05-22 20:49:22 +0000308 rb->snprintf(text_buf, sizeof(text_buf), "CPU clock: %ld Hz",
309 *rb->cpu_frequency);
310 log_text(text_buf, true);
Jens Arnold5fee03c2007-08-05 20:41:49 +0000311#endif
Jens Arnold73ef83f2007-05-22 20:49:22 +0000312 log_text("--------------------", true);
313
314 /* File creation speed */
315 time = *rb->current_tick + TEST_TIME*HZ;
316 for (i = 0; TIME_BEFORE(*rb->current_tick, time); i++)
317 {
318 rb->snprintf(text_buf, sizeof(text_buf), TESTBASEDIR "/%08x.tmp", i);
Thomas Martitzc61e89c2010-05-06 17:35:04 +0000319 fd = rb->creat(text_buf, 0666);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000320 if (fd < 0)
321 {
322 last_file = i;
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000323 rb->splashf(HZ, "creat() failed: %d", fd);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000324 goto error;
325 }
326 rb->close(fd);
327 }
328 last_file = i;
329 rb->snprintf(text_buf, sizeof(text_buf), "Create: %d files/s",
330 last_file / TEST_TIME);
331 log_text(text_buf, true);
332
333 /* File open speed */
334 time = *rb->current_tick + TEST_TIME*HZ;
335 for (n = 0, i = 0; TIME_BEFORE(*rb->current_tick, time); n++, i++)
336 {
337 if (i >= last_file)
338 i = 0;
339 rb->snprintf(text_buf, sizeof(text_buf), TESTBASEDIR "/%08x.tmp", i);
340 fd = rb->open(text_buf, O_RDONLY);
341 if (fd < 0)
342 {
Rafaël Carré518d3fc2010-06-15 08:55:28 +0000343 rb->splashf(HZ, "open() failed: %d", fd);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000344 goto error;
345 }
346 rb->close(fd);
347 }
348 rb->snprintf(text_buf, sizeof(text_buf), "Open: %d files/s", n / TEST_TIME);
349 log_text(text_buf, true);
350
351 /* Directory scan speed */
352 time = *rb->current_tick + TEST_TIME*HZ;
353 for (n = 0; TIME_BEFORE(*rb->current_tick, time); n++)
354 {
355 if (entry == NULL)
356 {
357 if (dir != NULL)
358 rb->closedir(dir);
359 dir = rb->opendir(testbasedir);
360 if (dir == NULL)
361 {
362 rb->splash(HZ, "opendir() failed.");
363 goto error;
364 }
365 }
366 entry = rb->readdir(dir);
367 }
368 rb->closedir(dir);
369 rb->snprintf(text_buf, sizeof(text_buf), "Dirscan: %d files/s", n / TEST_TIME);
370 log_text(text_buf, true);
371
372 /* File delete speed */
373 time = *rb->current_tick;
374 for (i = 0; i < last_file; i++)
375 {
376 rb->snprintf(text_buf, sizeof(text_buf), TESTBASEDIR "/%08x.tmp", i);
377 rb->remove(text_buf);
378 }
379 rb->snprintf(text_buf, sizeof(text_buf), "Delete: %ld files/s",
380 last_file * HZ / (*rb->current_tick - time));
381 log_text(text_buf, true);
382
383 if (file_speed(512, true)
384 && file_speed(512, false)
385 && file_speed(4096, true)
386 && file_speed(4096, false)
387 && file_speed(1048576, true))
388 file_speed(1048576, false);
389
390 log_text("DONE", false);
391 log_close();
Jens Arnold4376abb2007-01-22 23:29:39 +0000392 rb->button_clear_queue();
393 rb->button_get(true);
Jens Arnold73ef83f2007-05-22 20:49:22 +0000394 return false;
Jens Arnold4376abb2007-01-22 23:29:39 +0000395
Jens Arnold73ef83f2007-05-22 20:49:22 +0000396 error:
397 for (i = 0; i < last_file; i++)
398 {
399 rb->snprintf(text_buf, sizeof(text_buf), TESTBASEDIR "/%08x.tmp", i);
400 rb->remove(text_buf);
401 }
402 log_text("DONE", false);
403 log_close();
404 rb->button_clear_queue();
405 rb->button_get(true);
Jens Arnold4376abb2007-01-22 23:29:39 +0000406 return false;
407}
408
409
410/* this is the plugin entry point */
Andrew Mahone23d98122009-01-16 10:34:40 +0000411enum plugin_status plugin_start(const void* parameter)
Jens Arnold4376abb2007-01-22 23:29:39 +0000412{
Jonathan Gordonaf9f4052009-06-16 04:25:21 +0000413 MENUITEM_STRINGLIST(menu, "Test Disk Menu", NULL,
414 "Disk speed", "Write & verify");
415 int selected=0;
416 bool quit = false;
Jens Arnold73ef83f2007-05-22 20:49:22 +0000417 int align;
418 DIR *dir;
Jens Arnold4376abb2007-01-22 23:29:39 +0000419
420 (void)parameter;
Jens Arnold73ef83f2007-05-22 20:49:22 +0000421
422 if ((dir = rb->opendir(testbasedir)) == NULL)
423 {
424 if (rb->mkdir(testbasedir) < 0)
425 {
426 rb->splash(HZ*2, "Can't create test directory.");
427 return PLUGIN_ERROR;
428 }
429 }
430 else
431 {
432 rb->closedir(dir);
433 }
434
435 audiobuf = rb->plugin_get_audio_buffer((size_t *)&audiobuflen);
436 /* align start and length to 32 bit */
437 align = (-(int)audiobuf) & 3;
438 audiobuf += align;
439 audiobuflen = (audiobuflen - align) & ~3;
440
Jens Arnold4376abb2007-01-22 23:29:39 +0000441 rb->srand(*rb->current_tick);
442
Peter D'Hoyecb53e3c2007-08-15 12:42:09 +0000443 /* Turn off backlight timeout */
Andrew Mahone23d98122009-01-16 10:34:40 +0000444 backlight_force_on(); /* backlight control in lib/helper.c */
Jens Arnold4376abb2007-01-22 23:29:39 +0000445
Jonathan Gordonaf9f4052009-06-16 04:25:21 +0000446 while(!quit)
447 {
448 switch(rb->do_menu(&menu, &selected, NULL, false))
449 {
450 case 0:
451 test_speed();
452 break;
453 case 1:
454 test_fs();
455 break;
456 default:
457 quit = true;
458 break;
459 }
460 }
Jens Arnold4376abb2007-01-22 23:29:39 +0000461
Peter D'Hoyecb53e3c2007-08-15 12:42:09 +0000462 /* Turn on backlight timeout (revert to settings) */
Andrew Mahone23d98122009-01-16 10:34:40 +0000463 backlight_use_settings(); /* backlight control in lib/helper.c */
Jens Arnold73ef83f2007-05-22 20:49:22 +0000464
465 rb->rmdir(testbasedir);
Jens Arnold4376abb2007-01-22 23:29:39 +0000466
467 return PLUGIN_OK;
468}