From 8df26fef2b7527c74f5b10c660d7b522a93eff5d Mon Sep 17 00:00:00 2001 From: Simon Chan <1330321+yume-chan@users.noreply.github.com> Date: Tue, 7 Feb 2023 15:38:39 +0800 Subject: [PATCH] Fix issues in rebase --- app/src/control_msg.c | 8 ++++---- app/src/input_manager.c | 40 +++++++++++++++++++++++++++------------- app/src/input_manager.h | 1 + app/src/scrcpy.c | 5 +++-- app/src/screen.c | 1 + app/src/screen.h | 1 + 6 files changed, 37 insertions(+), 19 deletions(-) diff --git a/app/src/control_msg.c b/app/src/control_msg.c index 091651c4..7148b660 100644 --- a/app/src/control_msg.c +++ b/app/src/control_msg.c @@ -153,17 +153,17 @@ sc_control_msg_serialize(const struct sc_control_msg *msg, unsigned char *buf) { // no additional data return 1; case SC_CONTROL_MSG_TYPE_INJECT_GAME_CONTROLLER_AXIS: - buffer_write16be(&buf[1], msg->inject_game_controller_axis.id); + sc_write16be(&buf[1], msg->inject_game_controller_axis.id); buf[3] = msg->inject_game_controller_axis.axis; - buffer_write16be(&buf[4], msg->inject_game_controller_axis.value); + sc_write16be(&buf[4], msg->inject_game_controller_axis.value); return 6; case SC_CONTROL_MSG_TYPE_INJECT_GAME_CONTROLLER_BUTTON: - buffer_write16be(&buf[1], msg->inject_game_controller_button.id); + sc_write16be(&buf[1], msg->inject_game_controller_button.id); buf[3] = msg->inject_game_controller_button.button; buf[4] = msg->inject_game_controller_button.state; return 5; case SC_CONTROL_MSG_TYPE_INJECT_GAME_CONTROLLER_DEVICE: - buffer_write16be(&buf[1], msg->inject_game_controller_device.id); + sc_write16be(&buf[1], msg->inject_game_controller_device.id); buf[3] = msg->inject_game_controller_device.event; return 4; default: diff --git a/app/src/input_manager.c b/app/src/input_manager.c index 5cdce72e..616337fd 100644 --- a/app/src/input_manager.c +++ b/app/src/input_manager.c @@ -62,7 +62,7 @@ sc_input_manager_init(struct sc_input_manager *im, im->kp = params->kp; im->mp = params->mp; - im->forward_game_controllers = options->forward_game_controllers; + im->forward_game_controllers = params->forward_game_controllers; im->forward_all_clicks = params->forward_all_clicks; im->legacy_paste = params->legacy_paste; im->clipboard_autosync = params->clipboard_autosync; @@ -799,29 +799,29 @@ sc_input_manager_process_file(struct sc_input_manager *im, } void -input_manager_process_controller_axis(struct input_manager *im, +input_manager_process_controller_axis(struct sc_input_manager *im, const SDL_ControllerAxisEvent *event) { - struct control_msg msg; - msg.type = CONTROL_MSG_TYPE_INJECT_GAME_CONTROLLER_AXIS; + struct sc_control_msg msg; + msg.type = SC_CONTROL_MSG_TYPE_INJECT_GAME_CONTROLLER_AXIS; msg.inject_game_controller_axis.id = event->which; msg.inject_game_controller_axis.axis = event->axis; msg.inject_game_controller_axis.value = event->value; - controller_push_msg(im->controller, &msg); + sc_controller_push_msg(im->controller, &msg); } void -input_manager_process_controller_button(struct input_manager *im, +input_manager_process_controller_button(struct sc_input_manager *im, const SDL_ControllerButtonEvent *event) { - struct control_msg msg; - msg.type = CONTROL_MSG_TYPE_INJECT_GAME_CONTROLLER_BUTTON; + struct sc_control_msg msg; + msg.type = SC_CONTROL_MSG_TYPE_INJECT_GAME_CONTROLLER_BUTTON; msg.inject_game_controller_button.id = event->which; msg.inject_game_controller_button.button = event->button; msg.inject_game_controller_button.state = event->state; - controller_push_msg(im->controller, &msg); + sc_controller_push_msg(im->controller, &msg); } static SDL_GameController ** -find_free_game_controller_slot(struct input_manager *im) { +find_free_game_controller_slot(struct sc_input_manager *im) { for (unsigned i = 0; i < MAX_GAME_CONTROLLERS; ++i) { if (!im->game_controllers[i]) { return &im->game_controllers[i]; @@ -831,8 +831,21 @@ find_free_game_controller_slot(struct input_manager *im) { return NULL; } +static bool +free_game_controller_slot(struct sc_input_manager *im, + SDL_GameController *game_controller) { + for (unsigned i = 0; i < MAX_GAME_CONTROLLERS; ++i) { + if (im->game_controllers[i] == game_controller) { + im->game_controllers[i] = NULL; + return true; + } + } + + return false; +} + void -input_manager_process_controller_device(struct input_manager *im, +input_manager_process_controller_device(struct sc_input_manager *im, const SDL_ControllerDeviceEvent *event) { SDL_JoystickID id; @@ -882,12 +895,12 @@ input_manager_process_controller_device(struct input_manager *im, return; } - struct control_msg msg; + struct sc_control_msg msg; msg.type = SC_CONTROL_MSG_TYPE_INJECT_GAME_CONTROLLER_DEVICE; msg.inject_game_controller_device.id = id; msg.inject_game_controller_device.event = event->type; msg.inject_game_controller_device.event -= SDL_CONTROLLERDEVICEADDED; - controller_push_msg(im->controller, &msg); + sc_controller_push_msg(im->controller, &msg); } void @@ -937,6 +950,7 @@ sc_input_manager_handle_event(struct sc_input_manager *im, SDL_Event *event) { break; } sc_input_manager_process_file(im, &event->drop); + break; } case SDL_CONTROLLERAXISMOTION: if (!control || !im->forward_game_controllers) { diff --git a/app/src/input_manager.h b/app/src/input_manager.h index 9e836f03..fc41981b 100644 --- a/app/src/input_manager.h +++ b/app/src/input_manager.h @@ -54,6 +54,7 @@ struct sc_input_manager_params { struct sc_key_processor *kp; struct sc_mouse_processor *mp; + bool forward_game_controllers; bool forward_all_clicks; bool legacy_paste; bool clipboard_autosync; diff --git a/app/src/scrcpy.c b/app/src/scrcpy.c index f99e3c0d..d79020f8 100644 --- a/app/src/scrcpy.c +++ b/app/src/scrcpy.c @@ -367,8 +367,8 @@ scrcpy(struct scrcpy_options *options) { sdl_configure(options->display, options->disable_screensaver); - if (SDL_Init(SDL_INIT_GAMECONTROLLER)) { - LOGC("Could not initialize SDL: %s", SDL_GetError()); + if (SDL_InitSubSystem(SDL_INIT_GAMECONTROLLER)) { + LOGE("Could not initialize SDL: %s", SDL_GetError()); return false; } @@ -602,6 +602,7 @@ aoa_hid_end: .fp = fp, .kp = kp, .mp = mp, + .forward_game_controllers = options->forward_game_controllers, .forward_all_clicks = options->forward_all_clicks, .legacy_paste = options->legacy_paste, .clipboard_autosync = options->clipboard_autosync, diff --git a/app/src/screen.c b/app/src/screen.c index ae28e6e6..e192ffec 100644 --- a/app/src/screen.c +++ b/app/src/screen.c @@ -525,6 +525,7 @@ sc_screen_init(struct sc_screen *screen, .screen = screen, .kp = params->kp, .mp = params->mp, + .forward_game_controllers = params->forward_game_controllers, .forward_all_clicks = params->forward_all_clicks, .legacy_paste = params->legacy_paste, .clipboard_autosync = params->clipboard_autosync, diff --git a/app/src/screen.h b/app/src/screen.h index 222e418f..09e37cd8 100644 --- a/app/src/screen.h +++ b/app/src/screen.h @@ -74,6 +74,7 @@ struct sc_screen_params { struct sc_key_processor *kp; struct sc_mouse_processor *mp; + bool forward_game_controllers; bool forward_all_clicks; bool legacy_paste; bool clipboard_autosync;