gui: allow auto-connecting to wii u

Fixes #454
This commit is contained in:
itsmattkc committed 2026-08-06 14:58:20 -07:00
1 parent f1ff2eab44
commit 7cd43591db
7 files changed
+54 -9

No files matched your search

+1
View File
@@ -183,6 +183,7 @@ void vpi_config_init()
vpi_config.fullscreen = 1;
vpi_config_reset_default_controls_internal();
vpi_config.cursor_in_fullscreen = 0;
vpi_config.autoconnect = -1;
// Load from file
char config_fn[1024];
+1
View File
@@ -32,6 +32,7 @@ typedef struct {
int cursor_in_fullscreen;
int fast_drm;
int force_software_decode;
int autoconnect;
} vpi_config_t;
extern vpi_config_t vpi_config;
+30 -1
View File
@@ -1,3 +1,4 @@
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <vanilla.h>
@@ -21,9 +22,12 @@ void display_cli_help(const char **argv);
int SDL_main(int argc, const char **argv)
{
int ret = 1;
// Determine whether we're overriding the fullscreen setting in the config
int override_fs = -1;
int force_swdec = 0;
long autoconnect = -1;
for (int i = 1, consumed; i < argc; i += consumed) {
consumed = -1;
@@ -36,6 +40,21 @@ int SDL_main(int argc, const char **argv)
} else if (!strcmp(argv[i], "-s") || !strcmp(argv[i], "--swdec")) {
force_swdec = 1;
consumed = 1;
} else if (!strcmp(argv[i], "-a") || !strcmp(argv[i], "--autoconnect")) {
if (i + 1 >= argc) {
vpilog("%s requires an argument\n", argv[i]);
return 1;
}
const char *s_acId = argv[i+1];
char *endptr;
autoconnect = strtol(s_acId, &endptr, 10);
if (errno == ERANGE || endptr == s_acId || *endptr != '\0' || autoconnect < 0) {
vpilog("\"%s\" was not a valid argument for %s\n", s_acId, argv[i]);
return 1;
}
consumed = 2;
} else if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--help")) {
display_cli_help(argv);
return 0;
@@ -51,7 +70,12 @@ int SDL_main(int argc, const char **argv)
// Load config
vpi_config_init();
if (autoconnect >= vpi_config.connected_console_count) {
vpilog("Console %li does not exist for auto-connection\n", autoconnect);
goto exit_config;
}
vpi_config.autoconnect = autoconnect;
vpi_config.force_software_decode |= force_swdec;
#ifndef VANILLA_GUI_ENABLE_WINDOWED
@@ -68,7 +92,6 @@ int SDL_main(int argc, const char **argv)
vui_context_t *vui = vui_alloc(SCREEN_WIDTH, SCREEN_HEIGHT);
// Initialize SDL2
int ret = 1;
if (vui_init_sdl(vui, vpi_config.fullscreen)) {
vpilog("Failed to initialize VUI\n");
goto exit;
@@ -89,6 +112,7 @@ exit:
vui_free(vui);
exit_config:
vpi_config_free();
return ret;
@@ -100,5 +124,10 @@ void display_cli_help(const char **argv) {
vpilog(" -w, --window Run Vanilla in a window (overrides config)\n");
vpilog(" -f, --fullscreen Run Vanilla full screen (overrides config)\n");
vpilog(" -s, --swdec Force software decoding (overrides config)\n");
vpilog(" -a <id>,\n");
vpilog(" --autoconnect <id> Auto-connect to a console on startup\n");
vpilog(" (<id> is the index of the console in the\n");
vpilog(" menu, e.g. 0 is the first console, 1 is\n");
vpilog(" the second, etc.)\n");
vpilog(" -h, --help Show this help message\n");
}
+6 -2
View File
@@ -23,8 +23,12 @@ void vpi_menu_init(vui_context_t *vui)
// Set microphone callback
vui_mic_callback_set(vui, vpi_mic_callback, 0);
// Start with main menu
vpi_menu_main(vui, 0);
if (vpi_config.autoconnect != -1) {
vpi_menu_game(vui, (void *)(intptr_t) vpi_config.autoconnect);
} else {
// Start with main menu
vpi_menu_main(vui, 0);
}
}
void get_valid_filename(const char *fmt, char *abs_buf, size_t size_abs_buf, const char *preferred_dir)
+2 -2
View File
@@ -127,7 +127,7 @@ int vpi_menu_show_error(vui_context_t *vui, int status, int fade_fglayer, vui_bu
return bglayer;
}
static void do_quit(vui_context_t *vui, void *v)
void vpi_menu_do_quit(vui_context_t *vui, void *v)
{
vui_reset(vui);
vui_enable_background(vui, 0);
@@ -136,5 +136,5 @@ static void do_quit(vui_context_t *vui, void *v)
void vpi_menu_quit_vanilla(vui_context_t *vui)
{
vui_transition_fade_black_in(vui, do_quit, 0);
vui_transition_fade_black_in(vui, vpi_menu_do_quit, 0);
}
+2 -1
View File
@@ -12,6 +12,7 @@ void vpi_menu_create_back_button(vui_context_t *vui, int layer, vui_button_callb
void vpi_menu_start_pipe(vui_context_t *vui, int fade_fglayer, vui_callback_t success_action, void *success_data, vui_callback_t cancel_action, void *cancel_data);
int vpi_menu_show_error(vui_context_t *vui, int status, int fade_fglayer, vui_button_callback_t ok_action, void *ok_data);
void vpi_menu_do_quit(vui_context_t *vui, void *v);
void vpi_menu_quit_vanilla(vui_context_t *vui);
#endif // VANILLA_MENU_COMMON_H
#endif // VANILLA_MENU_COMMON_H
+12 -3
View File
@@ -62,10 +62,19 @@ static struct {
static _Atomic int vpi_game_queued_error = VANILLA_SUCCESS;
void vpi_menu_game_exit(vui_context_t *vui, void *v)
{
if (vpi_config.autoconnect == -1) {
vpi_menu_main(vui, v);
} else {
vpi_menu_do_quit(vui, v);
}
}
void back_to_main_menu(vui_context_t *vui, int button, void *v)
{
int layer = (intptr_t) v;
vui_transition_fade_layer_out(vui, layer, vpi_menu_main, (void *) (intptr_t) 1);
vui_transition_fade_layer_out(vui, layer, vpi_menu_game_exit, (void *) (intptr_t) 1);
}
void show_error(vui_context_t *vui, void *v)
@@ -95,7 +104,7 @@ void cancel_connect(vui_context_t *vui, int button, void *v)
{
int layer = (intptr_t) v;
vanilla_stop();
vui_transition_fade_layer_out(vui, layer, vpi_menu_main, 0);
vui_transition_fade_layer_out(vui, layer, vpi_menu_game_exit, 0);
}
static void update_battery_information(vui_context_t *vui, int64_t time)
@@ -1068,7 +1077,7 @@ void vpi_display_update(vui_context_t *vui, int64_t time, void *v)
if (vpi_game_queued_error != VANILLA_ERR_SHUTDOWN) {
show_error(vui, (void*)(intptr_t) vpi_game_queued_error);
} else {
vpi_menu_main(vui, 0);
vpi_menu_game_exit(vui, 0);
}
vpi_game_queued_error = VANILLA_SUCCESS;
}