blob: dbd647330fc8a4767ac9041e34d933379295fe58 [file] [log] [blame]
Daniel Stenberge4286472004-01-08 13:09:45 +00001/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 Itai Shaked
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.
Daniel Stenberge4286472004-01-08 13:09:45 +000016 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 **************************************************************************/
21#include "plugin.h"
Jens Arnoldb021f782005-02-11 19:48:52 +000022#include "playergfx.h"
Daniel Stenberge4286472004-01-08 13:09:45 +000023
Jens Arnolda36b1d42006-01-15 18:20:18 +000024PLUGIN_HEADER
25
Daniel Stenberge4286472004-01-08 13:09:45 +000026#ifdef HAVE_LCD_BITMAP
Jens Arnold93867302005-06-30 21:07:00 +000027#define MYLCD(fn) rb->lcd_ ## fn
Jens Arnold4a037df2006-09-21 20:28:06 +000028#define GFX_X (LCD_WIDTH/2-1)
29#define GFX_Y (LCD_HEIGHT/2-1)
30#if LCD_WIDTH != LCD_HEIGHT
31#define GFX_WIDTH GFX_X
32#define GFX_HEIGHT GFX_Y
Jens Arnoldb021f782005-02-11 19:48:52 +000033#else
Jens Arnold4a037df2006-09-21 20:28:06 +000034#define GFX_WIDTH GFX_X
35#define GFX_HEIGHT (4*GFX_Y/5)
36#endif
37#else
Jens Arnold93867302005-06-30 21:07:00 +000038#define MYLCD(fn) pgfx_ ## fn
Jens Arnold4a037df2006-09-21 20:28:06 +000039#define GFX_X 9
40#define GFX_Y 6
41#define GFX_WIDTH 9
42#define GFX_HEIGHT 6
Jens Arnoldb021f782005-02-11 19:48:52 +000043#endif
Daniel Stenberge4286472004-01-08 13:09:45 +000044
Jens Arnolde35a6582004-10-18 21:45:00 +000045/* variable button definitions */
46#if CONFIG_KEYPAD == RECORDER_PAD
47#define MOSAIQUE_QUIT BUTTON_OFF
48#define MOSAIQUE_SPEED BUTTON_F1
49#define MOSAIQUE_RESTART BUTTON_PLAY
50
Dave Chapmand64e6262007-01-14 13:48:09 +000051#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
52#define MOSAIQUE_QUIT BUTTON_OFF
53#define MOSAIQUE_SPEED BUTTON_F1
54#define MOSAIQUE_RESTART BUTTON_SELECT
55
Jens Arnoldb021f782005-02-11 19:48:52 +000056#elif CONFIG_KEYPAD == PLAYER_PAD
57#define MOSAIQUE_QUIT BUTTON_STOP
58#define MOSAIQUE_SPEED BUTTON_MENU
59#define MOSAIQUE_RESTART BUTTON_PLAY
60
Jens Arnolde35a6582004-10-18 21:45:00 +000061#elif CONFIG_KEYPAD == ONDIO_PAD
62#define MOSAIQUE_QUIT BUTTON_OFF
Jens Arnoldb021f782005-02-11 19:48:52 +000063#define MOSAIQUE_SPEED BUTTON_MENU
64#define MOSAIQUE_RESTART BUTTON_RIGHT
Jens Arnolde35a6582004-10-18 21:45:00 +000065
Daniel Stenberg01377e22005-06-29 12:47:24 +000066#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
67 (CONFIG_KEYPAD == IRIVER_H300_PAD)
Daniel Stenberg6700ad82005-02-04 12:41:09 +000068#define MOSAIQUE_QUIT BUTTON_OFF
69#define MOSAIQUE_SPEED BUTTON_MODE
70#define MOSAIQUE_RESTART BUTTON_ON
Dave Chapman54d44c82005-12-14 01:31:37 +000071
Kevin Ferrare0e027bd2006-06-30 16:43:47 +000072#define MOSAIQUE_RC_QUIT BUTTON_RC_STOP
73
Dave Chapmanfb4e3842006-02-24 20:54:09 +000074#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
Jens Arnoldb7013222007-07-27 09:57:27 +000075 (CONFIG_KEYPAD == IPOD_3G_PAD) || \
76 (CONFIG_KEYPAD == IPOD_1G2G_PAD)
Dave Chapman54d44c82005-12-14 01:31:37 +000077#define MOSAIQUE_QUIT BUTTON_MENU
78#define MOSAIQUE_SPEED BUTTON_SELECT
79#define MOSAIQUE_RESTART BUTTON_PLAY
Dave Chapmand83e9292006-01-12 00:35:50 +000080
81#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
82#define MOSAIQUE_QUIT BUTTON_PLAY
83#define MOSAIQUE_SPEED BUTTON_MODE
84#define MOSAIQUE_RESTART BUTTON_SELECT
85
Jens Arnold85a226d2007-03-16 23:02:39 +000086#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
Daniel Stenbergcedba882006-01-18 11:09:06 +000087#define MOSAIQUE_QUIT BUTTON_POWER
Linus Nielsen Feltzing568ac3e2006-02-24 15:06:25 +000088#define MOSAIQUE_SPEED BUTTON_SELECT
Daniel Stenbergcedba882006-01-18 11:09:06 +000089#define MOSAIQUE_RESTART BUTTON_PLAY
90
Marcoen Hirschberg338e2bb2006-02-24 15:42:52 +000091#elif CONFIG_KEYPAD == GIGABEAT_PAD
Marcoen Hirschberga7168fe2007-05-19 23:38:09 +000092#define MOSAIQUE_QUIT BUTTON_POWER
93#define MOSAIQUE_SPEED BUTTON_A
Marcoen Hirschberg338e2bb2006-02-24 15:42:52 +000094#define MOSAIQUE_RESTART BUTTON_SELECT
95
Marianne Arnold12ddb8e2007-09-20 10:49:48 +000096#elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \
97(CONFIG_KEYPAD == SANSA_C200_PAD)
Barry Wardell24f4a2a2006-10-26 13:38:09 +000098#define MOSAIQUE_QUIT BUTTON_POWER
99#define MOSAIQUE_SPEED BUTTON_DOWN
100#define MOSAIQUE_RESTART BUTTON_SELECT
101
Daniel Stenberg1e88be52006-08-03 20:17:25 +0000102#elif CONFIG_KEYPAD == IRIVER_H10_PAD
103#define MOSAIQUE_QUIT BUTTON_POWER
104#define MOSAIQUE_SPEED BUTTON_FF
105#define MOSAIQUE_RESTART BUTTON_PLAY
106
Jonathan Gordon56ddddc2007-10-23 15:40:51 +0000107#elif CONFIG_KEYPAD == MROBE500_PAD
108#define MOSAIQUE_QUIT BUTTON_POWER
109#define MOSAIQUE_SPEED BUTTON_RC_FF
110#define MOSAIQUE_RESTART BUTTON_RC_PLAY
111
Will Robertson8215b342008-02-17 12:23:02 +0000112#elif CONFIG_KEYPAD == GIGABEAT_S_PAD
113#define MOSAIQUE_QUIT BUTTON_BACK
114#define MOSAIQUE_SPEED BUTTON_SELECT
115#define MOSAIQUE_RESTART BUTTON_MENU
116
Robert Kuklad6c8b572008-03-01 22:55:09 +0000117#elif CONFIG_KEYPAD == MROBE100_PAD
118#define MOSAIQUE_QUIT BUTTON_POWER
119#define MOSAIQUE_SPEED BUTTON_DISPLAY
120#define MOSAIQUE_RESTART BUTTON_SELECT
121
Jens Arnold29361ab2008-03-22 10:24:28 +0000122#elif CONFIG_KEYPAD == IAUDIO_M3_PAD
123#define MOSAIQUE_QUIT BUTTON_RC_REC
124#define MOSAIQUE_SPEED BUTTON_RC_MENU
125#define MOSAIQUE_RESTART BUTTON_RC_PLAY
126
Rob Purchase554d7ed2008-03-22 22:03:34 +0000127#elif CONFIG_KEYPAD == COWOND2_PAD
128#define MOSAIQUE_QUIT BUTTON_POWER
Rob Purchase554d7ed2008-03-22 22:03:34 +0000129
Robert Kuklad6c8b572008-03-01 22:55:09 +0000130#else
131#error No keymap defined!
Jens Arnolde35a6582004-10-18 21:45:00 +0000132#endif
Daniel Stenberge4286472004-01-08 13:09:45 +0000133
Rob Purchase297e0502008-04-27 15:30:19 +0000134#ifdef HAVE_TOUCHPAD
135#ifndef MOSAIQUE_QUIT
136#define MOSAIQUE_QUIT BUTTON_TOPLEFT
137#endif
138#ifndef MOSAIQUE_SPEED
139#define MOSAIQUE_SPEED BUTTON_MIDRIGHT
140#endif
141#ifndef MOSAIQUE_RESTART
142#define MOSAIQUE_RESTART BUTTON_CENTER
143#endif
144#endif
145
Steve Bavin65265772008-05-13 09:57:56 +0000146enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter)
Daniel Stenberge4286472004-01-08 13:09:45 +0000147{
148 int button;
149 int timer = 10;
150 int x=0;
151 int y=0;
152 int sx = 3;
153 int sy = 3;
Steve Bavin65265772008-05-13 09:57:56 +0000154 const struct plugin_api* rb = api;
Daniel Stenberge4286472004-01-08 13:09:45 +0000155 (void)parameter;
156
Jens Arnold93867302005-06-30 21:07:00 +0000157#ifdef HAVE_LCD_CHARCELLS
Jens Arnoldb021f782005-02-11 19:48:52 +0000158 if (!pgfx_init(rb, 4, 2))
159 {
Jens Arnold4d6374c2007-03-16 21:56:08 +0000160 rb->splash(HZ*2, "Old LCD :(");
Jens Arnoldb021f782005-02-11 19:48:52 +0000161 return PLUGIN_OK;
162 }
163 pgfx_display(3, 0);
Jens Arnoldb021f782005-02-11 19:48:52 +0000164#endif
Jens Arnold93867302005-06-30 21:07:00 +0000165 MYLCD(clear_display)();
166 MYLCD(set_drawmode)(DRMODE_COMPLEMENT);
Daniel Stenberge4286472004-01-08 13:09:45 +0000167 while (1) {
168
169 x+=sx;
Jens Arnold4a037df2006-09-21 20:28:06 +0000170 if (x>GFX_WIDTH)
Daniel Stenberge4286472004-01-08 13:09:45 +0000171 {
Jens Arnold4a037df2006-09-21 20:28:06 +0000172 x = 2*GFX_WIDTH-x;
Daniel Stenberge4286472004-01-08 13:09:45 +0000173 sx=-sx;
174 }
175
176 if (x<0)
177 {
178 x = -x;
179 sx = -sx;
180 }
181
182 y+=sy;
Jens Arnold4a037df2006-09-21 20:28:06 +0000183 if (y>GFX_HEIGHT)
Daniel Stenberge4286472004-01-08 13:09:45 +0000184 {
Jens Arnold4a037df2006-09-21 20:28:06 +0000185 y = 2*GFX_HEIGHT-y;
Daniel Stenberge4286472004-01-08 13:09:45 +0000186 sy=-sy;
187 }
188
189 if (y<0)
190 {
191 y = -y;
192 sy = -sy;
193 }
Jens Arnoldb021f782005-02-11 19:48:52 +0000194
Jens Arnold4a037df2006-09-21 20:28:06 +0000195 MYLCD(fillrect)(GFX_X-x, GFX_Y-y, 2*x+1, 1);
196 MYLCD(fillrect)(GFX_X-x, GFX_Y+y, 2*x+1, 1);
197 MYLCD(fillrect)(GFX_X-x, GFX_Y-y+1, 1, 2*y-1);
198 MYLCD(fillrect)(GFX_X+x, GFX_Y-y+1, 1, 2*y-1);
Jens Arnold93867302005-06-30 21:07:00 +0000199 MYLCD(update)();
Jens Arnoldb021f782005-02-11 19:48:52 +0000200
Daniel Stenberge4286472004-01-08 13:09:45 +0000201 rb->sleep(HZ/timer);
202
203 button = rb->button_get(false);
Jens Arnolde35a6582004-10-18 21:45:00 +0000204 switch (button)
Daniel Stenberge4286472004-01-08 13:09:45 +0000205 {
Kevin Ferrare0e027bd2006-06-30 16:43:47 +0000206#ifdef MOSAIQUE_RC_QUIT
207 case MOSAIQUE_RC_QUIT:
208#endif
Jens Arnolde35a6582004-10-18 21:45:00 +0000209 case MOSAIQUE_QUIT:
Jens Arnold93867302005-06-30 21:07:00 +0000210 MYLCD(set_drawmode)(DRMODE_SOLID);
211#ifdef HAVE_LCD_CHARCELLS
Jens Arnoldb021f782005-02-11 19:48:52 +0000212 pgfx_release();
Jens Arnolde35a6582004-10-18 21:45:00 +0000213#endif
Jens Arnoldb021f782005-02-11 19:48:52 +0000214 return PLUGIN_OK;
215
216 case MOSAIQUE_SPEED:
Jens Arnolde35a6582004-10-18 21:45:00 +0000217 timer = timer+5;
218 if (timer>20)
219 timer=5;
220 break;
221
222 case MOSAIQUE_RESTART:
Daniel Stenberge4286472004-01-08 13:09:45 +0000223
Jens Arnold4a037df2006-09-21 20:28:06 +0000224 sx = rb->rand() % (GFX_HEIGHT/2) + 1;
225 sy = rb->rand() % (GFX_HEIGHT/2) + 1;
Jens Arnolde35a6582004-10-18 21:45:00 +0000226 x=0;
227 y=0;
Jens Arnold93867302005-06-30 21:07:00 +0000228 MYLCD(clear_display)();
Jens Arnolde35a6582004-10-18 21:45:00 +0000229 break;
230
231
232 default:
233 if (rb->default_event_handler(button) == SYS_USB_CONNECTED)
Jens Arnoldb021f782005-02-11 19:48:52 +0000234 {
Jens Arnold93867302005-06-30 21:07:00 +0000235 MYLCD(set_drawmode)(DRMODE_SOLID);
236#ifdef HAVE_LCD_CHARCELLS
Jens Arnoldb021f782005-02-11 19:48:52 +0000237 pgfx_release();
238#endif
Jens Arnolde35a6582004-10-18 21:45:00 +0000239 return PLUGIN_USB_CONNECTED;
Jens Arnoldb021f782005-02-11 19:48:52 +0000240 }
Jens Arnolde35a6582004-10-18 21:45:00 +0000241 break;
242 }
Daniel Stenberge4286472004-01-08 13:09:45 +0000243 }
244}
245
Rob Purchase297e0502008-04-27 15:30:19 +0000246