summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/vu_meter.c113
-rw-r--r--docs/CREDITS2
2 files changed, 115 insertions, 0 deletions
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
new file mode 100644
index 0000000000..e7e8d33ad8
--- /dev/null
+++ b/apps/plugins/vu_meter.c
@@ -0,0 +1,113 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ *
+ * Copyright (C) 2003 Lee Pilgrim
+ *
+ * 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.
+ *
+ **************************************************************************/
+#ifndef SIMULATOR /* The simulator dosen't have a MAS */
+#include "plugin.h"
+
+#ifdef HAVE_LCD_BITMAP
+
+static struct plugin_api* rb;
+
+enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
+{
+ TEST_PLUGIN_API(api);
+ (void) parameter;
+ rb = api;
+
+ /*
+ I hope to make (left/right)_needle_top_y change some day (because it looks
+ like it is stretching) so that is why it is a int and not a #define.
+ */
+ #define LEFT_NEEDLE_BOTTOM_X 28
+ #define LEFT_NEEDLE_BOTTOM_Y 53
+ int left_needle_top_x;
+ int left_needle_top_y = 18;
+
+ #define RIGHT_NEEDLE_BOTTOM_X 84
+ #define RIGHT_NEEDLE_BOTTOM_Y 53
+ int right_needle_top_x;
+ int right_needle_top_y = 18;
+
+ while (!PLUGIN_OK)
+ {
+ /* These are to define how far the tip of the needles can go to the
+ left and right. The names are a bit confusing. The LEFT/RIGHT tells
+ which needle it is for, and the L/R at the end tells which side
+ of the needle. */
+ #define MAX_LEFT_L 2
+ #define MAX_LEFT_R 55
+ #define MAX_RIGHT_L 57
+ #define MAX_RIGHT_R 111
+
+ #define MAX_PEAK 0x8FFF
+
+ left_needle_top_x =
+ (rb->mas_codec_readreg(0xC) *
+ (MAX_LEFT_R - MAX_LEFT_L) / MAX_PEAK) + MAX_LEFT_L;
+
+ right_needle_top_x =
+ (rb->mas_codec_readreg(0xD) *
+ (MAX_RIGHT_R - MAX_RIGHT_L) / MAX_PEAK) + MAX_RIGHT_L;
+
+ /* Time to draw all of the display stuff!
+ Could I move some of these out of the loop so they don't have to
+ be re-drawn everytime, but still be displayed, or would that
+ improve performance any at all? */
+ rb->lcd_clear_display();
+
+ rb->lcd_drawline(LEFT_NEEDLE_BOTTOM_X, LEFT_NEEDLE_BOTTOM_Y,
+ left_needle_top_x, left_needle_top_y);
+ rb->lcd_drawline(RIGHT_NEEDLE_BOTTOM_X, RIGHT_NEEDLE_BOTTOM_Y,
+ right_needle_top_x, right_needle_top_y);
+
+ rb->lcd_setfont(FONT_SYSFIXED);
+ rb->lcd_putsxy(30, 1, "VU Meter");
+
+ /* The first is the line under "VU Meter" and the second is under
+ the needles. */
+ rb->lcd_drawline(30, 9, 77, 9);
+ rb->lcd_drawline(1, 53, 112, 53);
+
+ /* These are the needle "covers" - we're going for that
+ "old fasioned" look */
+
+ /* The left needle cover - organized from the top line to the bottom */
+ rb->lcd_drawline(27, 48, 29, 48);
+ rb->lcd_drawline(25, 49, 31, 49);
+ rb->lcd_drawline(23, 50, 33, 50);
+ rb->lcd_drawline(22, 51, 34, 51);
+ rb->lcd_drawline(22, 52, 34, 52);
+
+ /* The right needle cover - organized from the top line to
+ the bottom */
+ rb->lcd_drawline(83, 48, 85, 48);
+ rb->lcd_drawline(81, 49, 87, 49);
+ rb->lcd_drawline(79, 50, 89, 50);
+ rb->lcd_drawline(78, 51, 90, 51);
+ rb->lcd_drawline(78, 52, 90, 52);
+
+ rb->lcd_update();
+
+ switch (rb->button_get(false))
+ {
+ case BUTTON_OFF:
+ return false;
+ }
+ }
+}
+#endif /* HAVE_LCD_BITMAP */
+#endif /* #ifndef SIMULATOR */
diff --git a/docs/CREDITS b/docs/CREDITS
index 8d69d714c4..59bd29f1d1 100644
--- a/docs/CREDITS
+++ b/docs/CREDITS
@@ -78,3 +78,5 @@ Pierre Delore
Huw Smith
Garrett Derner
Barry McIntosh
+Leslie Donaldson
+Lee Pilgrim