summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTomer Shalev <shalev.tomer@gmail.com>2009-10-19 21:19:30 +0000
committerTomer Shalev <shalev.tomer@gmail.com>2009-10-19 21:19:30 +0000
commit5d585f4b9be0c3a5c6e669133ad0d9a01f8ffb62 (patch)
tree7ce435a09b4a52ac0b41b398ec3352edcfc7c115
parent37daec75fb9412377c8670955ce641a6a812aa69 (diff)
downloadrockbox-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
-rw-r--r--apps/SOURCES1
-rw-r--r--apps/gui/usb_screen.c312
-rw-r--r--apps/gui/usb_screen.h27
-rw-r--r--apps/main.c6
-rw-r--r--apps/misc.c4
-rw-r--r--apps/screens.c287
-rw-r--r--apps/screens.h1
-rw-r--r--docs/PLUGIN_API4
8 files changed, 347 insertions, 295 deletions
diff --git a/apps/SOURCES b/apps/SOURCES
index f5bd9d819c..6ec1732881 100644
--- a/apps/SOURCES
+++ b/apps/SOURCES
@@ -156,6 +156,7 @@ eq_arm.S
156#ifdef USB_ENABLE_HID 156#ifdef USB_ENABLE_HID
157usb_keymaps.c 157usb_keymaps.c
158#endif 158#endif
159gui/usb_screen.c
159metadata.c 160metadata.c
160metadata/mp3.c 161metadata/mp3.c
161#if CONFIG_CODEC == SWCODEC 162#if CONFIG_CODEC == SWCODEC
diff --git a/apps/gui/usb_screen.c b/apps/gui/usb_screen.c
new file mode 100644
index 0000000000..6e7c24920f
--- /dev/null
+++ b/apps/gui/usb_screen.c
@@ -0,0 +1,312 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id: screens.c 23269 2009-10-19 20:06:51Z tomers $
9 *
10 * Copyright (C) 2002 Björn Stenberg
11 *
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.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21
22#include "action.h"
23#ifdef HAVE_REMOTE_LCD
24#include "lcd-remote.h"
25#endif
26#include "lang.h"
27#include "usb.h"
28#if defined(HAVE_USBSTACK)
29#include "usb_core.h"
30#ifdef USB_ENABLE_HID
31#include "usb_keymaps.h"
32#endif
33#endif
34#include "settings.h"
35#include "appevents.h"
36
37#ifdef HAVE_LCD_BITMAP
38#include "bitmaps/usblogo.h"
39#endif
40
41#ifdef HAVE_REMOTE_LCD
42#include "bitmaps/remote_usblogo.h"
43#endif
44
45#ifndef SIMULATOR
46
47#ifdef USB_ENABLE_HID
48int usb_keypad_mode;
49#endif
50
51static int handle_usb_events(void)
52{
53#if (CONFIG_STORAGE & STORAGE_MMC)
54 int next_update=0;
55#endif /* STORAGE_MMC */
56
57 /* Don't return until we get SYS_USB_DISCONNECTED or SYS_TIMEOUT */
58 while(1)
59 {
60 int button;
61#ifdef USB_ENABLE_HID
62 if (usb_core_driver_enabled(USB_DRIVER_HID))
63 {
64 button = get_hid_usb_action();
65
66 /* On mode change, we need to refresh the screen */
67 if (button == ACTION_USB_HID_MODE_SWITCH_NEXT ||
68 button == ACTION_USB_HID_MODE_SWITCH_PREV)
69 {
70 break;
71 }
72 }
73 else
74#endif
75 {
76 button = button_get_w_tmo(HZ/2);
77 /* hid emits the event in get_action */
78 send_event(GUI_EVENT_ACTIONUPDATE, NULL);
79 }
80
81 switch(button)
82 {
83 case SYS_USB_DISCONNECTED:
84 usb_acknowledge(SYS_USB_DISCONNECTED_ACK);
85 return 1;
86 case SYS_TIMEOUT:
87 break;
88 }
89
90#if (CONFIG_STORAGE & STORAGE_MMC) /* USB-MMC bridge can report activity */
91 if(TIME_AFTER(current_tick,next_update))
92 {
93 if(usb_inserted()) {
94 led(mmc_usb_active(HZ));
95 }
96 next_update=current_tick+HZ/2;
97 }
98#endif /* STORAGE_MMC */
99 }
100
101 return 0;
102}
103#endif
104
105#ifdef USB_NONE
106void gui_usb_screen_run(void)
107{
108}
109#else
110#define MODE_NAME_LEN 32
111
112struct usb_screen_vps_t
113{
114 struct viewport parent;
115#ifdef HAVE_LCD_BITMAP
116 struct viewport logo;
117#ifdef USB_ENABLE_HID
118 struct viewport title;
119#endif
120#endif
121};
122
123#ifdef HAVE_LCD_BITMAP
124static void usb_screen_fix_viewports(struct screen *screen,
125 struct usb_screen_vps_t *usb_screen_vps)
126{
127 int logo_width, logo_height;
128 struct viewport *parent = &usb_screen_vps->parent;
129 struct viewport *logo = &usb_screen_vps->logo;
130
131#ifdef HAVE_REMOTE_LCD
132 if (screen->screen_type == SCREEN_REMOTE)
133 {
134 logo_width = BMPWIDTH_remote_usblogo;
135 logo_height = BMPHEIGHT_remote_usblogo;
136 }
137 else
138#endif
139 {
140 logo_width = BMPWIDTH_usblogo;
141 logo_height = BMPHEIGHT_usblogo;
142 }
143
144 viewport_set_defaults(parent, screen->screen_type);
145 if (parent->width < logo_width || parent->height < logo_height)
146 viewport_set_fullscreen(parent, screen->screen_type);
147
148 *logo = *parent;
149 logo->x = parent->width - logo_width;
150 logo->y = (parent->height - logo_height) / 2;
151 logo->width = logo_width;
152 logo->height = logo_height;
153
154#ifdef USB_ENABLE_HID
155 struct viewport *title = &usb_screen_vps->title;
156 int char_height, nb_lines;
157
158 /* nb_lines only returns the number of fully visible lines, small screens
159 or really large fonts could cause problems with the calculation below.
160 */
161 nb_lines = viewport_get_nb_lines(parent);
162 if (nb_lines == 0)
163 nb_lines++;
164
165 char_height = parent->height/nb_lines;
166
167 *title = *parent;
168 title->y = logo->y + logo->height + char_height;
169#endif
170}
171#endif
172
173static void usb_screens_draw(struct usb_screen_vps_t *usb_screen_vps_ar)
174{
175 int i;
176 int usb_bars = VP_SB_ALLSCREENS; /* force statusbars */
177
178 FOR_NB_SCREENS(i)
179 {
180 struct screen *screen = &screens[i];
181
182 struct usb_screen_vps_t *usb_screen_vps = &usb_screen_vps_ar[i];
183 struct viewport *parent = &usb_screen_vps->parent;
184#ifdef HAVE_LCD_BITMAP
185 struct viewport *logo = &usb_screen_vps->logo;
186#endif
187
188 screen->set_viewport(parent);
189 screen->backdrop_show(BACKDROP_MAIN);
190 screen->backlight_on();
191 screen->clear_viewport();
192
193#ifdef HAVE_LCD_BITMAP
194 screen->set_viewport(logo);
195#ifdef HAVE_REMOTE_LCD
196 if (i == SCREEN_REMOTE)
197 {
198 screen->bitmap(remote_usblogo, 0, 0, logo->width,
199 logo->height);
200 }
201 else
202#endif
203 {
204 screen->transparent_bitmap(usblogo, 0, 0, logo->width,
205 logo->height);
206#ifdef USB_ENABLE_HID
207 screen->set_viewport(&usb_screen_vps->title);
208 usb_screen_vps->title.flags |= VP_FLAG_ALIGN_CENTER;
209 screen->puts_scroll(0, 0, str(keypad_mode_name_get()));
210#endif /* USB_ENABLE_HID */
211 }
212 screen->set_viewport(parent);
213
214#else /* HAVE_LCD_BITMAP */
215 screen->double_height(false);
216 screen->puts_scroll(0, 0, "[USB Mode]");
217 status_set_param(false);
218 status_set_audio(false);
219 status_set_usb(true);
220#endif /* HAVE_LCD_BITMAP */
221
222 screen->update_viewport();
223 screen->set_viewport(NULL);
224
225 /* force statusbar by ignoring the setting */
226 usb_bars |= VP_SB_IGNORE_SETTING(i);
227 }
228
229 viewportmanager_set_statusbar(usb_bars);
230}
231
232void gui_usb_screen_run(void)
233{
234 int i;
235 int old_bars = viewportmanager_get_statusbar();
236 struct usb_screen_vps_t usb_screen_vps_ar[NB_SCREENS];
237#if defined HAVE_TOUCHSCREEN
238 enum touchscreen_mode old_mode = touchscreen_get_mode();
239
240 /* TODO: Paint buttons on screens OR switch to point mode and use
241 * touchscreen as a touchpad to move the host's mouse cursor */
242 touchscreen_set_mode(TOUCHSCREEN_BUTTON);
243#endif
244
245#ifndef SIMULATOR
246 usb_acknowledge(SYS_USB_CONNECTED_ACK);
247#endif
248
249#ifdef USB_ENABLE_HID
250 usb_keypad_mode = global_settings.usb_keypad_mode;
251#endif
252
253 FOR_NB_SCREENS(i)
254 {
255 struct screen *screen = &screens[i];
256
257 screen->set_viewport(NULL);
258#ifdef HAVE_LCD_BITMAP
259 usb_screen_fix_viewports(screen, &usb_screen_vps_ar[i]);
260#endif
261 }
262
263 while (1)
264 {
265 usb_screens_draw(usb_screen_vps_ar);
266#ifdef SIMULATOR
267 if (button_get_w_tmo(HZ/2))
268 break;
269 send_event(GUI_EVENT_ACTIONUPDATE, NULL);
270#else
271 if (handle_usb_events())
272 break;
273#endif /* SIMULATOR */
274 }
275
276 FOR_NB_SCREENS(i)
277 {
278 const struct viewport* vp = NULL;
279
280#if defined(HAVE_LCD_BITMAP) && defined(USB_ENABLE_HID)
281 vp = &usb_screen_vps_ar[i].title;
282#elif !defined(HAVE_LCD_BITMAP)
283 vp = &usb_screen_vps_ar[i].parent;
284#endif
285 if (vp)
286 screens[i].scroll_stop(vp);
287 }
288#ifdef USB_ENABLE_HID
289 if (global_settings.usb_keypad_mode != usb_keypad_mode)
290 {
291 global_settings.usb_keypad_mode = usb_keypad_mode;
292 settings_save();
293 }
294#endif
295
296#ifdef HAVE_TOUCHSCREEN
297 touchscreen_set_mode(old_mode);
298#endif
299
300#ifdef HAVE_LCD_CHARCELLS
301 status_set_usb(false);
302#endif /* HAVE_LCD_CHARCELLS */
303 FOR_NB_SCREENS(i)
304 {
305 screens[i].backlight_on();
306 }
307 viewportmanager_set_statusbar(old_bars);
308 send_event(GUI_EVENT_REFRESH, NULL);
309
310}
311#endif /* !defined(USB_NONE) */
312
diff --git a/apps/gui/usb_screen.h b/apps/gui/usb_screen.h
new file mode 100644
index 0000000000..d601546520
--- /dev/null
+++ b/apps/gui/usb_screen.h
@@ -0,0 +1,27 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id: screens.h 21312 2009-06-16 17:04:47Z mcuelenaere $
9 *
10 * Copyright (C) 2002 Björn Stenberg
11 *
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.
16 *
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied.
19 *
20 ****************************************************************************/
21#ifndef _USB_SCREEN_H_
22#define _USB_SCREEN_H_
23
24extern void gui_usb_screen_run(void);
25
26#endif
27
diff --git a/apps/main.c b/apps/main.c
index 8b6c1bbfbe..52b161b500 100644
--- a/apps/main.c
+++ b/apps/main.c
@@ -56,7 +56,7 @@
56#include "playlist.h" 56#include "playlist.h"
57#include "buffer.h" 57#include "buffer.h"
58#include "rolo.h" 58#include "rolo.h"
59#include "screens.h" 59#include "usb_screen.h"
60#include "power.h" 60#include "power.h"
61#include "talk.h" 61#include "talk.h"
62#include "plugin.h" 62#include "plugin.h"
@@ -492,7 +492,7 @@ static void init(void)
492 (mmc_remove_request() == SYS_HOTSWAP_EXTRACTED)) 492 (mmc_remove_request() == SYS_HOTSWAP_EXTRACTED))
493#endif 493#endif
494 { 494 {
495 usb_screen(); 495 gui_usb_screen_run();
496 mounted = true; /* mounting done @ end of USB mode */ 496 mounted = true; /* mounting done @ end of USB mode */
497 } 497 }
498#ifdef HAVE_USB_POWER 498#ifdef HAVE_USB_POWER
@@ -517,7 +517,7 @@ static void init(void)
517 lcd_update(); 517 lcd_update();
518 518
519 while(button_get(true) != SYS_USB_CONNECTED) {}; 519 while(button_get(true) != SYS_USB_CONNECTED) {};
520 usb_screen(); 520 gui_usb_screen_run();
521 system_reboot(); 521 system_reboot();
522 } 522 }
523 } 523 }
diff --git a/apps/misc.c b/apps/misc.c
index 4400de1b92..198aff3014 100644
--- a/apps/misc.c
+++ b/apps/misc.c
@@ -36,7 +36,7 @@
36#include "errno.h" 36#include "errno.h"
37#include "system.h" 37#include "system.h"
38#include "timefuncs.h" 38#include "timefuncs.h"
39#include "screens.h" 39#include "usb_screen.h"
40#include "talk.h" 40#include "talk.h"
41#include "mpeg.h" 41#include "mpeg.h"
42#include "audio.h" 42#include "audio.h"
@@ -580,7 +580,7 @@ long default_event_handler_ex(long event, void (*callback)(void *), void *parame
580 check_bootfile(false); /* gets initial size */ 580 check_bootfile(false); /* gets initial size */
581#endif 581#endif
582#endif 582#endif
583 usb_screen(); 583 gui_usb_screen_run();
584#ifdef BOOTFILE 584#ifdef BOOTFILE
585#if !defined(USB_NONE) && !defined(USB_HANDLED_BY_OF) 585#if !defined(USB_NONE) && !defined(USB_HANDLED_BY_OF)
586 check_bootfile(true); 586 check_bootfile(true);
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
99int usb_keypad_mode;
100#endif
101
102static 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
157void usb_screen(void)
158{
159}
160#else
161#define MODE_NAME_LEN 32
162
163struct 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
175static 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
224static 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
283void 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)
365int mmc_remove_request(void) 78int mmc_remove_request(void)
366{ 79{
diff --git a/apps/screens.h b/apps/screens.h
index 56e2f36b25..7f2bc6ed0e 100644
--- a/apps/screens.h
+++ b/apps/screens.h
@@ -26,7 +26,6 @@
26 26
27struct screen; 27struct screen;
28 28
29void usb_screen(void);
30#if CONFIG_CHARGING && !defined(HAVE_POWEROFF_WHILE_CHARGING) && defined(CPU_SH) 29#if CONFIG_CHARGING && !defined(HAVE_POWEROFF_WHILE_CHARGING) && defined(CPU_SH)
31int charging_screen(void); 30int charging_screen(void);
32#endif 31#endif
diff --git a/docs/PLUGIN_API b/docs/PLUGIN_API
index 0498c0f2f3..a81bfed875 100644
--- a/docs/PLUGIN_API
+++ b/docs/PLUGIN_API
@@ -417,7 +417,7 @@ Kernel
417 time". This function is the entire foundation that our "cooperative 417 time". This function is the entire foundation that our "cooperative
418 multitasking" is based on. Use it. 418 multitasking" is based on. Use it.
419 419
420 void usb_screen(void); 420 void gui_usb_screen_run(void);
421 421
422 Show the usb connection screen. 422 Show the usb connection screen.
423 423
@@ -427,7 +427,7 @@ Kernel
427 427
428 int default_event_handler(int event); 428 int default_event_handler(int event);
429 429
430 If event == SYS_USB_CONNECTED, call usb_screen and return 430 If event == SYS_USB_CONNECTED, call gui_usb_screen_run and return
431 SYS_USB_CONNECTED. Else do nothing and return 0. 431 SYS_USB_CONNECTED. Else do nothing and return 0.
432 432
433 int create_thread(void* function, void* stack, int stack_size, 433 int create_thread(void* function, void* stack, int stack_size,