/*************************************************************************** * __________ __ ___. * Open \______ \ ____ ____ | | _\_ |__ _______ ___ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ * \/ \/ \/ \/ \/ * $Id$ * * Copyright (C) 2004 Björn Stenberg * * All files in this archive are subject to the GNU General Public License. * See the file COPYING in the source tree root for full license agreement. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ****************************************************************************/ #include "plugin.h" /* This plugin is designed to measure your battery performance in real-time. It will create a big file, read it every ~90 seconds and log the battery level in /battery.log When battery level goes below 5% the plugin exits, to avoid writing to disk in very low battery situations. Note that this test will run for 10-15 hours or more and is very boring to watch. */ static struct plugin_api* rb; void* buffer; int buffersize; int init(void) { int f; buffer = rb->plugin_get_mp3_buffer(&buffersize); /* create a big dummy file */ f = rb->creat("/battery.dummy", 0); if (f<0) { rb->splash(HZ, true, "Can't create /battery.dummy"); return -1; } rb->write(f, buffer, buffersize); rb->close(f); return 0; } void loop(void) { while (true) { struct tm* t; char buf[80]; int f; int batt = rb->battery_level(); /* stop measuring when <5% battery left */ if ((batt > 0) && (batt < 5)) break; /* log current time */ f = rb->open("/battery.log", O_WRONLY | O_APPEND | O_CREAT); if (f<0) { rb->splash(HZ, true, "Failed creating /battery.log"); break; } t = rb->get_time(); rb->snprintf(buf, sizeof buf, "%02d:%02d:%02d Battery %d%%\n", t->tm_hour, t->tm_min, t->tm_sec, batt); rb->write(f, buf, rb->strlen(buf)); rb->close(f); rb->splash(0, true, buf); /* simulate 128kbit/s (16kbyte/s) playback duration */ rb->sleep(HZ * (buffersize / 16384) - HZ*10); /* simulate filling the mp3 buffer */ f = rb->open("/battery.dummy", O_RDONLY); if (f<0) { rb->splash(HZ, true, "Failed opening /battery.dummy"); break; } rb->read(f, buffer, buffersize); rb->close(f); } } enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { TEST_PLUGIN_API(api); (void)parameter; rb = api; if (init() < 0) return PLUGIN_OK; loop(); return PLUGIN_OK; }