1 /***************************************************************************
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
10 * Copyright (C) 2006 Jens Arnold
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
18 ****************************************************************************/
22 #if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) && !defined(SIMULATOR)
26 #if (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == ONDIO_PAD) \
27 || (CONFIG_KEYPAD == IRIVER_H100_PAD)
28 #define SCANRATE_DONE BUTTON_OFF
29 #define SCANRATE_FASTINC BUTTON_UP
30 #define SCANRATE_FASTDEC BUTTON_DOWN
31 #define SCANRATE_INC BUTTON_RIGHT
32 #define SCANRATE_DEC BUTTON_LEFT
34 #elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
35 #define SCANRATE_DONE BUTTON_POWER
36 #define SCANRATE_FASTINC BUTTON_UP
37 #define SCANRATE_FASTDEC BUTTON_DOWN
38 #define SCANRATE_INC BUTTON_RIGHT
39 #define SCANRATE_DEC BUTTON_LEFT
41 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) \
42 || (CONFIG_KEYPAD == IPOD_1G2G_PAD)
43 #define SCANRATE_DONE BUTTON_MENU
44 #define SCANRATE_FASTINC BUTTON_SCROLL_FWD
45 #define SCANRATE_FASTDEC BUTTON_SCROLL_BACK
46 #define SCANRATE_INC BUTTON_RIGHT
47 #define SCANRATE_DEC BUTTON_LEFT
51 #if LCD_PIXELFORMAT == HORIZONTAL_PACKING
52 #define BUF_WIDTH ((LCD_WIDTH+7)/8/4)
53 #define BUF_HEIGHT LCD_HEIGHT
54 #define TEXT_X (BUF_WIDTH*8)
56 #define BUF_WIDTH (LCD_WIDTH/4)
57 #define BUF_HEIGHT (LCD_HEIGHT/8)
58 #define TEXT_X BUF_WIDTH
61 /* Default refresh rates in 1/10 Hz */
62 #if CONFIG_LCD == LCD_SSD1815
63 #define DEFAULT_SCAN_RATE 670
64 #elif CONFIG_LCD == LCD_S1D15E06
65 #define DEFAULT_SCAN_RATE 700
66 #elif CONFIG_LCD == LCD_IPOD2BPP
67 #define DEFAULT_SCAN_RATE 800
68 #elif CONFIG_LCD == LCD_IPODMINI
69 #define DEFAULT_SCAN_RATE 880
72 #if defined(CPU_PP) && defined(HAVE_ADJUSTABLE_CPU_FREQ)
76 static struct plugin_api
* rb
;
77 static unsigned char bitbuffer
[2][BUF_HEIGHT
][BUF_WIDTH
];
78 static int curbuf
= 0;
79 static int scan_rate
= DEFAULT_SCAN_RATE
;
80 static bool need_refresh
= false;
82 static void timer_isr(void)
84 rb
->lcd_blit(bitbuffer
[curbuf
][0], 0, 0, BUF_WIDTH
, BUF_HEIGHT
, BUF_WIDTH
);
85 curbuf
= (curbuf
+ 1) & 1;
88 rb
->lcd_update_rect(TEXT_X
, 0, LCD_WIDTH
-TEXT_X
, 8);
95 unsigned char buf
[32];
100 rb
->lcd_setfont(FONT_SYSFIXED
);
102 rb
->lcd_putsxy(TEXT_X
, 12, "Adjust Frequ.");
103 rb
->lcd_putsxy(TEXT_X
, 20, "so the block");
104 rb
->lcd_putsxy(TEXT_X
, 28, "stops moving.");
105 #if (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == ONDIO_PAD) \
106 || (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
107 rb
->lcd_putsxy(TEXT_X
, 40, "U/D: Coarse");
108 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) \
109 || (CONFIG_KEYPAD == IPOD_1G2G_PAD)
110 rb
->lcd_putsxy(TEXT_X
, 40, "Scroll: Coarse");
112 rb
->lcd_putsxy(TEXT_X
, 48, "L/R: Fine");
115 rb
->memset(bitbuffer
[0], 0, sizeof(bitbuffer
[0]));
116 rb
->memset(bitbuffer
[1], 0xff, sizeof(bitbuffer
[1]));
120 /* The actual frequency is twice the displayed value */
121 rb
->timer_register(1, NULL
, TIMER_FREQ
* 5 / scan_rate
, 1, timer_isr
);
127 /* The actual frequency is twice the displayed value */
128 rb
->timer_set_period(TIMER_FREQ
* 5 / scan_rate
);
129 rb
->snprintf(buf
, sizeof(buf
), "f: %d.%d Hz", scan_rate
/ 10,
131 rb
->lcd_putsxy(TEXT_X
, 0, buf
);
135 button
= rb
->button_get(true);
138 case SCANRATE_FASTINC
:
139 case SCANRATE_FASTINC
|BUTTON_REPEAT
:
144 case SCANRATE_FASTDEC
:
145 case SCANRATE_FASTDEC
|BUTTON_REPEAT
:
151 case SCANRATE_INC
|BUTTON_REPEAT
:
157 case SCANRATE_DEC
|BUTTON_REPEAT
:
167 rb
->timer_unregister();
169 rb
->cpu_boost(false);
172 rb
->lcd_setfont(FONT_UI
);
178 /* this is the plugin entry point */
179 enum plugin_status
plugin_start(struct plugin_api
* api
, void* parameter
)
183 return plugin_main();