diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/SOURCES | 1 | ||||
-rw-r--r-- | apps/gui/usb_screen.c | 312 | ||||
-rw-r--r-- | apps/gui/usb_screen.h | 27 | ||||
-rw-r--r-- | apps/main.c | 6 | ||||
-rw-r--r-- | apps/misc.c | 4 | ||||
-rw-r--r-- | apps/screens.c | 287 | ||||
-rw-r--r-- | apps/screens.h | 1 |
7 files changed, 345 insertions, 293 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 |
157 | usb_keymaps.c | 157 | usb_keymaps.c |
158 | #endif | 158 | #endif |
159 | gui/usb_screen.c | ||
159 | metadata.c | 160 | metadata.c |
160 | metadata/mp3.c | 161 | metadata/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 | ||
48 | int usb_keypad_mode; | ||
49 | #endif | ||
50 | |||
51 | static 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 | ||
106 | void gui_usb_screen_run(void) | ||
107 | { | ||
108 | } | ||
109 | #else | ||
110 | #define MODE_NAME_LEN 32 | ||
111 | |||
112 | struct 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 | ||
124 | static 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 | |||
173 | static 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 | |||
232 | void 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 | |||
24 | extern 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 | ||
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 | { |
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 | ||
27 | struct screen; | 27 | struct screen; |
28 | 28 | ||
29 | void 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) |
31 | int charging_screen(void); | 30 | int charging_screen(void); |
32 | #endif | 31 | #endif |