static void usb_screens_draw(struct usb_screen_vps_t *usb_screen_vps_ar) { #ifdef HAVE_LCD_BITMAP static const struct bitmap* logos[NB_SCREENS] = { &bm_usblogo, #ifdef HAVE_REMOTE_LCD &bm_remote_usblogo, #endif }; #endif FOR_NB_SCREENS(i) { struct screen *screen = &screens[i]; struct usb_screen_vps_t *usb_screen_vps = &usb_screen_vps_ar[i]; struct viewport *parent = &usb_screen_vps->parent; #ifdef HAVE_LCD_BITMAP struct viewport *logo = &usb_screen_vps->logo; #endif screen->set_viewport(parent); screen->clear_viewport(); screen->backlight_on(); #ifdef HAVE_LCD_BITMAP screen->set_viewport(logo); screen->bmp(logos[i], 0, 0); if (i == SCREEN_MAIN) { #ifdef USB_ENABLE_HID if (usb_hid) { char modestring[100]; screen->set_viewport(&usb_screen_vps->title); usb_screen_vps->title.flags |= VP_FLAG_ALIGN_CENTER; snprintf(modestring, sizeof(modestring), "%s: %s", str(LANG_USB_KEYPAD_MODE), str(keypad_mode_name_get())); screen->puts_scroll(0, 0, modestring); } #endif /* USB_ENABLE_HID */ } screen->set_viewport(parent); #else /* !HAVE_LCD_BITMAP */ screen->double_height(false); screen->puts_scroll(0, 0, "[USB Mode]"); status_set_param(false); status_set_audio(false); status_set_usb(true); #endif /* HAVE_LCD_BITMAP */ screen->set_viewport(NULL); screen->update_viewport(); } }
static void usb_screens_draw(struct usb_screen_vps_t *usb_screen_vps_ar) { int i; FOR_NB_SCREENS(i) { struct screen *screen = &screens[i]; struct usb_screen_vps_t *usb_screen_vps = &usb_screen_vps_ar[i]; struct viewport *parent = &usb_screen_vps->parent; #ifdef HAVE_LCD_BITMAP struct viewport *logo = &usb_screen_vps->logo; #endif screen->set_viewport(parent); screen->clear_viewport(); screen->backlight_on(); #ifdef HAVE_LCD_BITMAP screen->set_viewport(logo); #ifdef HAVE_REMOTE_LCD if (i == SCREEN_REMOTE) { screen->bitmap(remote_usblogo, 0, 0, logo->width, logo->height); } else #endif { screen->transparent_bitmap(usblogo, 0, 0, logo->width, logo->height); #ifdef USB_ENABLE_HID if (usb_hid) { screen->set_viewport(&usb_screen_vps->title); usb_screen_vps->title.flags |= VP_FLAG_ALIGN_CENTER; screen->puts_scroll(0, 0, str(keypad_mode_name_get())); } #endif /* USB_ENABLE_HID */ } screen->set_viewport(parent); #else /* HAVE_LCD_BITMAP */ screen->double_height(false); screen->puts_scroll(0, 0, "[USB Mode]"); status_set_param(false); status_set_audio(false); status_set_usb(true); #endif /* HAVE_LCD_BITMAP */ screen->set_viewport(NULL); screen->update_viewport(); } }
void gui_usb_screen_run(bool early_usb) { (void) early_usb; struct usb_screen_vps_t usb_screen_vps_ar[NB_SCREENS]; #if defined HAVE_TOUCHSCREEN enum touchscreen_mode old_mode = touchscreen_get_mode(); /* TODO: Paint buttons on screens OR switch to point mode and use * touchscreen as a touchpad to move the host's mouse cursor */ touchscreen_set_mode(TOUCHSCREEN_BUTTON); #endif push_current_activity(ACTIVITY_USBSCREEN); #ifdef USB_ENABLE_HID usb_hid = global_settings.usb_hid; usb_keypad_mode = global_settings.usb_keypad_mode; #endif FOR_NB_SCREENS(i) { struct screen *screen = &screens[i]; screen->set_viewport(NULL); #ifdef HAVE_LCD_CHARCELLS /* Quick fix. Viewports should really be enabled proper for charcell */ viewport_set_defaults(&usb_screen_vps_ar[i].parent, i); #else usb_screen_fix_viewports(screen, &usb_screen_vps_ar[i]); #endif } /* update the UI before disabling fonts, this maximizes the propability * that font cache lookups succeed during USB */ send_event(GUI_EVENT_ACTIONUPDATE, NULL); #ifdef HAVE_LCD_BITMAP if(!early_usb) { /* The font system leaves the .fnt fd's open, so we need for force close them all */ font_disable_all(); } #endif usb_acknowledge(SYS_USB_CONNECTED_ACK); while (1) { usb_screens_draw(usb_screen_vps_ar); #ifdef SIMULATOR if (button_get_w_tmo(HZ/2)) break; send_event(GUI_EVENT_ACTIONUPDATE, NULL); #else if (handle_usb_events()) break; #endif /* SIMULATOR */ } FOR_NB_SCREENS(i) { const struct viewport* vp = NULL; #if defined(HAVE_LCD_BITMAP) && defined(USB_ENABLE_HID) vp = usb_hid ? &usb_screen_vps_ar[i].title : NULL; #elif !defined(HAVE_LCD_BITMAP) vp = &usb_screen_vps_ar[i].parent; #endif if (vp) screens[i].scroll_stop_viewport(vp); } #ifdef USB_ENABLE_HID if (global_settings.usb_keypad_mode != usb_keypad_mode) { global_settings.usb_keypad_mode = usb_keypad_mode; settings_save(); } #endif #ifdef HAVE_TOUCHSCREEN touchscreen_set_mode(old_mode); #endif #ifdef HAVE_LCD_CHARCELLS status_set_usb(false); #endif /* HAVE_LCD_CHARCELLS */ #ifdef HAVE_LCD_BITMAP if(!early_usb) { font_enable_all(); /* Not pretty, reload all settings so fonts are loaded again correctly */ settings_apply(true); /* Reload playlist */ playlist_resume(); } #endif FOR_NB_SCREENS(i) { screens[i].backlight_on(); viewportmanager_theme_undo(i, false); } pop_current_activity(); }
void gui_usb_screen_run(void) { int i; struct usb_screen_vps_t usb_screen_vps_ar[NB_SCREENS]; #if defined HAVE_TOUCHSCREEN enum touchscreen_mode old_mode = touchscreen_get_mode(); /* TODO: Paint buttons on screens OR switch to point mode and use * touchscreen as a touchpad to move the host's mouse cursor */ touchscreen_set_mode(TOUCHSCREEN_BUTTON); #endif #ifndef SIMULATOR usb_acknowledge(SYS_USB_CONNECTED_ACK); #endif #ifdef USB_ENABLE_HID usb_hid = global_settings.usb_hid; usb_keypad_mode = global_settings.usb_keypad_mode; #endif FOR_NB_SCREENS(i) { struct screen *screen = &screens[i]; screen->set_viewport(NULL); #ifdef HAVE_LCD_BITMAP usb_screen_fix_viewports(screen, &usb_screen_vps_ar[i]); #endif } while (1) { usb_screens_draw(usb_screen_vps_ar); #ifdef SIMULATOR if (button_get_w_tmo(HZ/2)) break; send_event(GUI_EVENT_ACTIONUPDATE, NULL); #else if (handle_usb_events()) break; #endif /* SIMULATOR */ } FOR_NB_SCREENS(i) { const struct viewport* vp = NULL; #if defined(HAVE_LCD_BITMAP) && defined(USB_ENABLE_HID) vp = usb_hid ? &usb_screen_vps_ar[i].title : NULL; #elif !defined(HAVE_LCD_BITMAP) vp = &usb_screen_vps_ar[i].parent; #endif if (vp) screens[i].scroll_stop(vp); } #ifdef USB_ENABLE_HID if (global_settings.usb_keypad_mode != usb_keypad_mode) { global_settings.usb_keypad_mode = usb_keypad_mode; settings_save(); } #endif #ifdef HAVE_TOUCHSCREEN touchscreen_set_mode(old_mode); #endif #ifdef HAVE_LCD_CHARCELLS status_set_usb(false); #endif /* HAVE_LCD_CHARCELLS */ FOR_NB_SCREENS(i) { screens[i].backlight_on(); viewportmanager_theme_undo(i, false); } }
static void usb_screens_draw(struct usb_screen_vps_t *usb_screen_vps_ar) { int i; /* Clear main and remote screens to remove scrolling line artifacts */ lcd_clear_display(); #ifdef HAVE_LCD_REMOTE lcd_remote_clear_display(); #endif FOR_NB_SCREENS(i) { struct screen *screen = &screens[i]; struct usb_screen_vps_t *usb_screen_vps = &usb_screen_vps_ar[i]; struct viewport *parent = &usb_screen_vps->parent; #ifdef HAVE_LCD_BITMAP struct viewport *logo = &usb_screen_vps->logo; #endif screen->set_viewport(parent); screen->clear_viewport(); screen->backlight_on(); #ifdef HAVE_LCD_BITMAP screen->set_viewport(logo); #ifdef HAVE_REMOTE_LCD if (i == SCREEN_REMOTE) { screen->bitmap(remote_usblogo, 0, 0, logo->width, logo->height); } else #endif { screen->transparent_bitmap(usblogo, 0, 0, logo->width, logo->height); #ifdef USB_ENABLE_HID if (usb_hid) { char modestring[100]; screen->set_viewport(&usb_screen_vps->title); usb_screen_vps->title.flags |= VP_FLAG_ALIGN_CENTER; snprintf(modestring, sizeof(modestring), "%s: %s", str(LANG_USB_KEYPAD_MODE), str(keypad_mode_name_get())); screen->puts_scroll(0, 0, modestring); } #endif /* USB_ENABLE_HID */ } screen->set_viewport(parent); #else /* HAVE_LCD_BITMAP */ screen->double_height(false); screen->puts_scroll(0, 0, "[USB Mode]"); status_set_param(false); status_set_audio(false); status_set_usb(true); #endif /* HAVE_LCD_BITMAP */ screen->set_viewport(NULL); screen->update_viewport(); } }