diff options
author | Tomer Shalev <shalev.tomer@gmail.com> | 2009-10-19 21:19:30 +0000 |
---|---|---|
committer | Tomer Shalev <shalev.tomer@gmail.com> | 2009-10-19 21:19:30 +0000 |
commit | 5d585f4b9be0c3a5c6e669133ad0d9a01f8ffb62 (patch) | |
tree | 7ce435a09b4a52ac0b41b398ec3352edcfc7c115 /apps/screens.c | |
parent | 37daec75fb9412377c8670955ce641a6a812aa69 (diff) | |
download | rockbox-5d585f4b9be0c3a5c6e669133ad0d9a01f8ffb62.tar.gz rockbox-5d585f4b9be0c3a5c6e669133ad0d9a01f8ffb62.zip |
Extract usb_screen logic out of screens.c into apps/gui/usb_screen.c
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@23273 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/screens.c')
-rw-r--r-- | apps/screens.c | 287 |
1 files changed, 0 insertions, 287 deletions
diff --git a/apps/screens.c b/apps/screens.c index bfc506d6b2..bc416f1baa 100644 --- a/apps/screens.c +++ b/apps/screens.c | |||
@@ -25,21 +25,11 @@ | |||
25 | #include "backlight.h" | 25 | #include "backlight.h" |
26 | #include "action.h" | 26 | #include "action.h" |
27 | #include "lcd.h" | 27 | #include "lcd.h" |
28 | #ifdef HAVE_REMOTE_LCD | ||
29 | #include "lcd-remote.h" | ||
30 | #endif | ||
31 | #include "lang.h" | 28 | #include "lang.h" |
32 | #include "icons.h" | 29 | #include "icons.h" |
33 | #include "font.h" | 30 | #include "font.h" |
34 | #include "audio.h" | 31 | #include "audio.h" |
35 | #include "mp3_playback.h" | 32 | #include "mp3_playback.h" |
36 | #include "usb.h" | ||
37 | #if defined(HAVE_USBSTACK) | ||
38 | #include "usb_core.h" | ||
39 | #ifdef USB_ENABLE_HID | ||
40 | #include "usb_keymaps.h" | ||
41 | #endif | ||
42 | #endif | ||
43 | #include "settings.h" | 33 | #include "settings.h" |
44 | #include "status.h" | 34 | #include "status.h" |
45 | #include "playlist.h" | 35 | #include "playlist.h" |
@@ -63,17 +53,8 @@ | |||
63 | #include "yesno.h" | 53 | #include "yesno.h" |
64 | #include "backdrop.h" | 54 | #include "backdrop.h" |
65 | #include "viewport.h" | 55 | #include "viewport.h" |
66 | #include "appevents.h" | ||
67 | #include "language.h" | 56 | #include "language.h" |
68 | 57 | ||
69 | #ifdef HAVE_LCD_BITMAP | ||
70 | #include "bitmaps/usblogo.h" | ||
71 | #endif | ||
72 | |||
73 | #ifdef HAVE_REMOTE_LCD | ||
74 | #include "bitmaps/remote_usblogo.h" | ||
75 | #endif | ||
76 | |||
77 | #if (CONFIG_STORAGE & STORAGE_MMC) | 58 | #if (CONFIG_STORAGE & STORAGE_MMC) |
78 | #include "ata_mmc.h" | 59 | #include "ata_mmc.h" |
79 | #endif | 60 | #endif |
@@ -93,274 +74,6 @@ static int clamp_value_wrap(int value, int max, int min) | |||
93 | } | 74 | } |
94 | #endif | 75 | #endif |
95 | 76 | ||
96 | #ifndef SIMULATOR | ||
97 | |||
98 | #ifdef USB_ENABLE_HID | ||
99 | int usb_keypad_mode; | ||
100 | #endif | ||
101 | |||
102 | static int handle_usb_events(void) | ||
103 | { | ||
104 | #if (CONFIG_STORAGE & STORAGE_MMC) | ||
105 | int next_update=0; | ||
106 | #endif /* STORAGE_MMC */ | ||
107 | |||
108 | /* Don't return until we get SYS_USB_DISCONNECTED or SYS_TIMEOUT */ | ||
109 | while(1) | ||
110 | { | ||
111 | int button; | ||
112 | #ifdef USB_ENABLE_HID | ||
113 | if (usb_core_driver_enabled(USB_DRIVER_HID)) | ||
114 | { | ||
115 | button = get_hid_usb_action(); | ||
116 | |||
117 | /* On mode change, we need to refresh the screen */ | ||
118 | if (button == ACTION_USB_HID_MODE_SWITCH_NEXT || | ||
119 | button == ACTION_USB_HID_MODE_SWITCH_PREV) | ||
120 | { | ||
121 | break; | ||
122 | } | ||
123 | } | ||
124 | else | ||
125 | #endif | ||
126 | { | ||
127 | button = button_get_w_tmo(HZ/2); | ||
128 | /* hid emits the event in get_action */ | ||
129 | send_event(GUI_EVENT_ACTIONUPDATE, NULL); | ||
130 | } | ||
131 | |||
132 | switch(button) | ||
133 | { | ||
134 | case SYS_USB_DISCONNECTED: | ||
135 | usb_acknowledge(SYS_USB_DISCONNECTED_ACK); | ||
136 | return 1; | ||
137 | case SYS_TIMEOUT: | ||
138 | break; | ||
139 | } | ||
140 | |||
141 | #if (CONFIG_STORAGE & STORAGE_MMC) /* USB-MMC bridge can report activity */ | ||
142 | if(TIME_AFTER(current_tick,next_update)) | ||
143 | { | ||
144 | if(usb_inserted()) { | ||
145 | led(mmc_usb_active(HZ)); | ||
146 | } | ||
147 | next_update=current_tick+HZ/2; | ||
148 | } | ||
149 | #endif /* STORAGE_MMC */ | ||
150 | } | ||
151 | |||
152 | return 0; | ||
153 | } | ||
154 | #endif | ||
155 | |||
156 | #ifdef USB_NONE | ||
157 | void usb_screen(void) | ||
158 | { | ||
159 | } | ||
160 | #else | ||
161 | #define MODE_NAME_LEN 32 | ||
162 | |||
163 | struct usb_screen_vps_t | ||
164 | { | ||
165 | struct viewport parent; | ||
166 | #ifdef HAVE_LCD_BITMAP | ||
167 | struct viewport logo; | ||
168 | #ifdef USB_ENABLE_HID | ||
169 | struct viewport title; | ||
170 | #endif | ||
171 | #endif | ||
172 | }; | ||
173 | |||
174 | #ifdef HAVE_LCD_BITMAP | ||
175 | static void usb_screen_fix_viewports(struct screen *screen, | ||
176 | struct usb_screen_vps_t *usb_screen_vps) | ||
177 | { | ||
178 | int logo_width, logo_height; | ||
179 | struct viewport *parent = &usb_screen_vps->parent; | ||
180 | struct viewport *logo = &usb_screen_vps->logo; | ||
181 | |||
182 | #ifdef HAVE_REMOTE_LCD | ||
183 | if (screen->screen_type == SCREEN_REMOTE) | ||
184 | { | ||
185 | logo_width = BMPWIDTH_remote_usblogo; | ||
186 | logo_height = BMPHEIGHT_remote_usblogo; | ||
187 | } | ||
188 | else | ||
189 | #endif | ||
190 | { | ||
191 | logo_width = BMPWIDTH_usblogo; | ||
192 | logo_height = BMPHEIGHT_usblogo; | ||
193 | } | ||
194 | |||
195 | viewport_set_defaults(parent, screen->screen_type); | ||
196 | if (parent->width < logo_width || parent->height < logo_height) | ||
197 | viewport_set_fullscreen(parent, screen->screen_type); | ||
198 | |||
199 | *logo = *parent; | ||
200 | logo->x = parent->width - logo_width; | ||
201 | logo->y = (parent->height - logo_height) / 2; | ||
202 | logo->width = logo_width; | ||
203 | logo->height = logo_height; | ||
204 | |||
205 | #ifdef USB_ENABLE_HID | ||
206 | struct viewport *title = &usb_screen_vps->title; | ||
207 | int char_height, nb_lines; | ||
208 | |||
209 | /* nb_lines only returns the number of fully visible lines, small screens | ||
210 | or really large fonts could cause problems with the calculation below. | ||
211 | */ | ||
212 | nb_lines = viewport_get_nb_lines(parent); | ||
213 | if (nb_lines == 0) | ||
214 | nb_lines++; | ||
215 | |||
216 | char_height = parent->height/nb_lines; | ||
217 | |||
218 | *title = *parent; | ||
219 | title->y = logo->y + logo->height + char_height; | ||
220 | #endif | ||
221 | } | ||
222 | #endif | ||
223 | |||
224 | static void usb_screens_draw(struct usb_screen_vps_t *usb_screen_vps_ar) | ||
225 | { | ||
226 | int i; | ||
227 | int usb_bars = VP_SB_ALLSCREENS; /* force statusbars */ | ||
228 | |||
229 | FOR_NB_SCREENS(i) | ||
230 | { | ||
231 | struct screen *screen = &screens[i]; | ||
232 | |||
233 | struct usb_screen_vps_t *usb_screen_vps = &usb_screen_vps_ar[i]; | ||
234 | struct viewport *parent = &usb_screen_vps->parent; | ||
235 | #ifdef HAVE_LCD_BITMAP | ||
236 | struct viewport *logo = &usb_screen_vps->logo; | ||
237 | #endif | ||
238 | |||
239 | screen->set_viewport(parent); | ||
240 | screen->backdrop_show(BACKDROP_MAIN); | ||
241 | screen->backlight_on(); | ||
242 | screen->clear_viewport(); | ||
243 | |||
244 | #ifdef HAVE_LCD_BITMAP | ||
245 | screen->set_viewport(logo); | ||
246 | #ifdef HAVE_REMOTE_LCD | ||
247 | if (i == SCREEN_REMOTE) | ||
248 | { | ||
249 | screen->bitmap(remote_usblogo, 0, 0, logo->width, | ||
250 | logo->height); | ||
251 | } | ||
252 | else | ||
253 | #endif | ||
254 | { | ||
255 | screen->transparent_bitmap(usblogo, 0, 0, logo->width, | ||
256 | logo->height); | ||
257 | #ifdef USB_ENABLE_HID | ||
258 | screen->set_viewport(&usb_screen_vps->title); | ||
259 | usb_screen_vps->title.flags |= VP_FLAG_ALIGN_CENTER; | ||
260 | screen->puts_scroll(0, 0, str(keypad_mode_name_get())); | ||
261 | #endif /* USB_ENABLE_HID */ | ||
262 | } | ||
263 | screen->set_viewport(parent); | ||
264 | |||
265 | #else /* HAVE_LCD_BITMAP */ | ||
266 | screen->double_height(false); | ||
267 | screen->puts_scroll(0, 0, "[USB Mode]"); | ||
268 | status_set_param(false); | ||
269 | status_set_audio(false); | ||
270 | status_set_usb(true); | ||
271 | #endif /* HAVE_LCD_BITMAP */ | ||
272 | |||
273 | screen->update_viewport(); | ||
274 | screen->set_viewport(NULL); | ||
275 | |||
276 | /* force statusbar by ignoring the setting */ | ||
277 | usb_bars |= VP_SB_IGNORE_SETTING(i); | ||
278 | } | ||
279 | |||
280 | viewportmanager_set_statusbar(usb_bars); | ||
281 | } | ||
282 | |||
283 | void usb_screen(void) | ||
284 | { | ||
285 | int i; | ||
286 | int old_bars = viewportmanager_get_statusbar(); | ||
287 | struct usb_screen_vps_t usb_screen_vps_ar[NB_SCREENS]; | ||
288 | #if defined HAVE_TOUCHSCREEN | ||
289 | enum touchscreen_mode old_mode = touchscreen_get_mode(); | ||
290 | |||
291 | /* TODO: Paint buttons on screens OR switch to point mode and use | ||
292 | * touchscreen as a touchpad to move the host's mouse cursor */ | ||
293 | touchscreen_set_mode(TOUCHSCREEN_BUTTON); | ||
294 | #endif | ||
295 | |||
296 | #ifndef SIMULATOR | ||
297 | usb_acknowledge(SYS_USB_CONNECTED_ACK); | ||
298 | #endif | ||
299 | |||
300 | #ifdef USB_ENABLE_HID | ||
301 | usb_keypad_mode = global_settings.usb_keypad_mode; | ||
302 | #endif | ||
303 | |||
304 | FOR_NB_SCREENS(i) | ||
305 | { | ||
306 | struct screen *screen = &screens[i]; | ||
307 | |||
308 | screen->set_viewport(NULL); | ||
309 | #ifdef HAVE_LCD_BITMAP | ||
310 | usb_screen_fix_viewports(screen, &usb_screen_vps_ar[i]); | ||
311 | #endif | ||
312 | } | ||
313 | |||
314 | while (1) | ||
315 | { | ||
316 | usb_screens_draw(usb_screen_vps_ar); | ||
317 | #ifdef SIMULATOR | ||
318 | if (button_get_w_tmo(HZ/2)) | ||
319 | break; | ||
320 | send_event(GUI_EVENT_ACTIONUPDATE, NULL); | ||
321 | #else | ||
322 | if (handle_usb_events()) | ||
323 | break; | ||
324 | #endif /* SIMULATOR */ | ||
325 | } | ||
326 | |||
327 | FOR_NB_SCREENS(i) | ||
328 | { | ||
329 | const struct viewport* vp = NULL; | ||
330 | |||
331 | #if defined(HAVE_LCD_BITMAP) && defined(USB_ENABLE_HID) | ||
332 | vp = &usb_screen_vps_ar[i].title; | ||
333 | #elif !defined(HAVE_LCD_BITMAP) | ||
334 | vp = &usb_screen_vps_ar[i].parent; | ||
335 | #endif | ||
336 | if (vp) | ||
337 | screens[i].scroll_stop(vp); | ||
338 | } | ||
339 | #ifdef USB_ENABLE_HID | ||
340 | if (global_settings.usb_keypad_mode != usb_keypad_mode) | ||
341 | { | ||
342 | global_settings.usb_keypad_mode = usb_keypad_mode; | ||
343 | settings_save(); | ||
344 | } | ||
345 | #endif | ||
346 | |||
347 | #ifdef HAVE_TOUCHSCREEN | ||
348 | touchscreen_set_mode(old_mode); | ||
349 | #endif | ||
350 | |||
351 | #ifdef HAVE_LCD_CHARCELLS | ||
352 | status_set_usb(false); | ||
353 | #endif /* HAVE_LCD_CHARCELLS */ | ||
354 | FOR_NB_SCREENS(i) | ||
355 | { | ||
356 | screens[i].backlight_on(); | ||
357 | } | ||
358 | viewportmanager_set_statusbar(old_bars); | ||
359 | send_event(GUI_EVENT_REFRESH, NULL); | ||
360 | |||
361 | } | ||
362 | #endif /* !defined(USB_NONE) */ | ||
363 | |||
364 | #if (CONFIG_STORAGE & STORAGE_MMC) | 77 | #if (CONFIG_STORAGE & STORAGE_MMC) |
365 | int mmc_remove_request(void) | 78 | int mmc_remove_request(void) |
366 | { | 79 | { |