Reverting parts of r19760 that was mistakenly committed.
[kugel-rb.git] / apps / plugins / test_scanrate.c
blobe869d3be12b8880689fd36dc12f12fdd5870c8f3
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
10 * Copyright (C) 2006 Jens Arnold
12 * 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.
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
20 ****************************************************************************/
22 #include "plugin.h"
24 #if defined(HAVE_LCD_BITMAP) && (LCD_DEPTH < 4) && !defined(SIMULATOR)
26 PLUGIN_HEADER
28 #if (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == ONDIO_PAD) \
29 || (CONFIG_KEYPAD == IRIVER_H100_PAD)
30 #define SCANRATE_DONE BUTTON_OFF
31 #define SCANRATE_FASTINC BUTTON_UP
32 #define SCANRATE_FASTDEC BUTTON_DOWN
33 #define SCANRATE_INC BUTTON_RIGHT
34 #define SCANRATE_DEC BUTTON_LEFT
36 #elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \
37 || (CONFIG_KEYPAD == MROBE100_PAD) \
38 || (CONFIG_KEYPAD == SANSA_CLIP_PAD) \
39 || (CONFIG_KEYPAD == SANSA_FUZE_PAD)
40 #define SCANRATE_DONE BUTTON_POWER
41 #define SCANRATE_FASTINC BUTTON_UP
42 #define SCANRATE_FASTDEC BUTTON_DOWN
43 #define SCANRATE_INC BUTTON_RIGHT
44 #define SCANRATE_DEC BUTTON_LEFT
46 #elif CONFIG_KEYPAD == IAUDIO_M3_PAD
47 #define SCANRATE_DONE BUTTON_RC_REC
48 #define SCANRATE_FASTINC BUTTON_RC_VOL_UP
49 #define SCANRATE_FASTDEC BUTTON_RC_VOL_DOWN
50 #define SCANRATE_INC BUTTON_RC_FF
51 #define SCANRATE_DEC BUTTON_RC_REW
53 #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) \
54 || (CONFIG_KEYPAD == IPOD_1G2G_PAD)
55 #define SCANRATE_DONE BUTTON_MENU
56 #define SCANRATE_FASTINC BUTTON_SCROLL_FWD
57 #define SCANRATE_FASTDEC BUTTON_SCROLL_BACK
58 #define SCANRATE_INC BUTTON_RIGHT
59 #define SCANRATE_DEC BUTTON_LEFT
61 #endif
63 /* Default refresh rates in 1/10 Hz */
64 #if defined ARCHOS_RECORDER || defined ARCHOS_FMRECORDER \
65 || defined ARCHOS_RECORDERV2 || defined ARCHOS_ONDIOFM \
66 || defined ARCHOS_ONDIOSP
67 #define DEFAULT_SCAN_RATE 670
68 #elif defined IAUDIO_M3
69 #define DEFAULT_SCAN_RATE 1500
70 #define HORIZ_SCAN /* LCD controller updates the panel sideways */
71 #define NEED_BOOST
72 #elif defined IAUDIO_M5
73 #define DEFAULT_SCAN_RATE 730
74 #elif defined IPOD_1G2G
75 #define DEFAULT_SCAN_RATE 960
76 #elif defined IPOD_MINI2G || defined IPOD_MINI \
77 || defined IPOD_3G || defined IPOD_4G
78 #define DEFAULT_SCAN_RATE 870
79 #elif defined IRIVER_H100_SERIES
80 #define DEFAULT_SCAN_RATE 700
81 #elif defined SANSA_CLIP
82 #define DEFAULT_SCAN_RATE 780
83 #else
84 #define DEFAULT_SCAN_RATE 700
85 #warning Generic default scanrate
86 #endif
88 #ifdef HORIZ_SCAN
89 #define TEXT_X 0
90 #if LCD_PIXELFORMAT == HORIZONTAL_PACKING
91 #define BUF_WIDTH ((LCD_WIDTH+7)/8)
92 #define BUF_HEIGHT (LCD_HEIGHT/4)
93 #define TEXT_Y BUF_HEIGHT
94 #else
95 #define BUF_WIDTH (LCD_WIDTH)
96 #define BUF_HEIGHT (LCD_HEIGHT/8/4)
97 #define TEXT_Y (BUF_HEIGHT*8)
98 #endif
99 #else /* !HORIZ_SCAN */
100 #define TEXT_Y 0
101 #if LCD_PIXELFORMAT == HORIZONTAL_PACKING
102 #define BUF_WIDTH ((LCD_WIDTH+7)/8/4)
103 #define BUF_HEIGHT LCD_HEIGHT
104 #define TEXT_X (BUF_WIDTH*8)
105 #else
106 #define BUF_WIDTH (LCD_WIDTH/4)
107 #define BUF_HEIGHT (LCD_HEIGHT/8)
108 #define TEXT_X BUF_WIDTH
109 #endif
110 #endif /* !HORIZ_SCAN */
112 #if defined(CPU_PP) && defined(HAVE_ADJUSTABLE_CPU_FREQ)
113 #define NEED_BOOST
114 #endif
116 static const struct plugin_api* rb;
117 static unsigned char bitbuffer[2][BUF_HEIGHT][BUF_WIDTH];
118 static int curbuf = 0;
119 static int scan_rate = DEFAULT_SCAN_RATE;
120 static bool need_refresh = false;
122 static void timer_isr(void)
124 rb->lcd_blit_mono(bitbuffer[curbuf][0], 0, 0, BUF_WIDTH, BUF_HEIGHT, BUF_WIDTH);
125 curbuf = (curbuf + 1) & 1;
126 if (need_refresh)
128 rb->lcd_update_rect(TEXT_X, TEXT_Y, LCD_WIDTH-TEXT_X, 8);
129 need_refresh = false;
133 int plugin_main(void)
135 unsigned char buf[32];
136 int button;
137 bool done = false;
138 bool change = true;
140 rb->lcd_setfont(FONT_SYSFIXED);
142 rb->lcd_putsxy(TEXT_X, TEXT_Y+12, "Adjust Frequ.");
143 rb->lcd_putsxy(TEXT_X, TEXT_Y+20, "so the block");
144 rb->lcd_putsxy(TEXT_X, TEXT_Y+28, "stops moving.");
145 #if (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) \
146 || (CONFIG_KEYPAD == IPOD_1G2G_PAD)
147 rb->lcd_putsxy(TEXT_X, TEXT_Y+40, "Scroll: Coarse");
148 #else
149 rb->lcd_putsxy(TEXT_X, TEXT_Y+40, "U/D: Coarse");
150 #endif
151 rb->lcd_putsxy(TEXT_X, TEXT_Y+48, "L/R: Fine");
152 rb->lcd_update();
154 rb->memset(bitbuffer[0], 0, sizeof(bitbuffer[0]));
155 rb->memset(bitbuffer[1], 0xff, sizeof(bitbuffer[1]));
156 #ifdef NEED_BOOST
157 rb->cpu_boost(true);
158 #endif
159 /* The actual frequency is twice the displayed value */
160 rb->timer_register(1, NULL, TIMER_FREQ * 5 / scan_rate, 1,
161 timer_isr IF_COP(, CPU));
163 while (!done)
165 if (change)
167 /* The actual frequency is twice the displayed value */
168 rb->timer_set_period(TIMER_FREQ * 5 / scan_rate);
169 rb->snprintf(buf, sizeof(buf), "f: %d.%d Hz", scan_rate / 10,
170 scan_rate % 10);
171 rb->lcd_putsxy(TEXT_X, TEXT_Y, buf);
172 need_refresh = true;
173 change = false;
175 button = rb->button_get(true);
176 switch (button)
178 case SCANRATE_FASTINC:
179 case SCANRATE_FASTINC|BUTTON_REPEAT:
180 scan_rate += 10;
181 change = true;
182 break;
184 case SCANRATE_FASTDEC:
185 case SCANRATE_FASTDEC|BUTTON_REPEAT:
186 scan_rate -= 10;
187 change = true;
188 break;
190 case SCANRATE_INC:
191 case SCANRATE_INC|BUTTON_REPEAT:
192 scan_rate++;
193 change = true;
194 break;
196 case SCANRATE_DEC:
197 case SCANRATE_DEC|BUTTON_REPEAT:
198 scan_rate--;
199 change = true;
200 break;
202 case SCANRATE_DONE:
203 done = true;
204 break;
207 rb->timer_unregister();
208 #ifdef NEED_BOOST
209 rb->cpu_boost(false);
210 #endif
212 rb->lcd_setfont(FONT_UI);
214 return PLUGIN_OK;
218 /* this is the plugin entry point */
219 enum plugin_status plugin_start(const struct plugin_api* api, const void* parameter)
221 (void)parameter;
222 rb = api;
223 return plugin_main();
226 #endif