Use Xbox 360 gamepad name
Some games do not work without a known gamepad name. Fixes #5362 <https://github.com/Genymobile/scrcpy/issues/5362> Refs #5623 comment <https://github.com/Genymobile/scrcpy/pull/5623#issuecomment-2525685323> PR #5623 <https://github.com/Genymobile/scrcpy/pull/5623> Signed-off-by: Romain Vimont <rom@rom1v.com>
This commit is contained in:
parent
0a09518a49
commit
7418fd0662
@ -15,7 +15,6 @@ struct sc_hid_input {
|
|||||||
|
|
||||||
struct sc_hid_open {
|
struct sc_hid_open {
|
||||||
uint16_t hid_id;
|
uint16_t hid_id;
|
||||||
const char *name; // pointer to static memory
|
|
||||||
const uint8_t *report_desc; // pointer to static memory
|
const uint8_t *report_desc; // pointer to static memory
|
||||||
size_t report_desc_size;
|
size_t report_desc_size;
|
||||||
};
|
};
|
||||||
|
@ -246,14 +246,8 @@ sc_hid_gamepad_generate_open(struct sc_hid_gamepad *hid,
|
|||||||
|
|
||||||
sc_hid_gamepad_slot_init(&hid->slots[slot_idx], gamepad_id);
|
sc_hid_gamepad_slot_init(&hid->slots[slot_idx], gamepad_id);
|
||||||
|
|
||||||
SDL_GameController* game_controller =
|
|
||||||
SDL_GameControllerFromInstanceID(gamepad_id);
|
|
||||||
assert(game_controller);
|
|
||||||
const char *name = SDL_GameControllerName(game_controller);
|
|
||||||
|
|
||||||
uint16_t hid_id = sc_hid_gamepad_slot_get_id(slot_idx);
|
uint16_t hid_id = sc_hid_gamepad_slot_get_id(slot_idx);
|
||||||
hid_open->hid_id = hid_id;
|
hid_open->hid_id = hid_id;
|
||||||
hid_open->name = name;
|
|
||||||
hid_open->report_desc = SC_HID_GAMEPAD_REPORT_DESC;
|
hid_open->report_desc = SC_HID_GAMEPAD_REPORT_DESC;
|
||||||
hid_open->report_desc_size = sizeof(SC_HID_GAMEPAD_REPORT_DESC);
|
hid_open->report_desc_size = sizeof(SC_HID_GAMEPAD_REPORT_DESC);
|
||||||
|
|
||||||
|
@ -335,7 +335,6 @@ sc_hid_keyboard_generate_input_from_mods(struct sc_hid_input *hid_input,
|
|||||||
|
|
||||||
void sc_hid_keyboard_generate_open(struct sc_hid_open *hid_open) {
|
void sc_hid_keyboard_generate_open(struct sc_hid_open *hid_open) {
|
||||||
hid_open->hid_id = SC_HID_ID_KEYBOARD;
|
hid_open->hid_id = SC_HID_ID_KEYBOARD;
|
||||||
hid_open->name = NULL; // No name specified after "scrcpy"
|
|
||||||
hid_open->report_desc = SC_HID_KEYBOARD_REPORT_DESC;
|
hid_open->report_desc = SC_HID_KEYBOARD_REPORT_DESC;
|
||||||
hid_open->report_desc_size = sizeof(SC_HID_KEYBOARD_REPORT_DESC);
|
hid_open->report_desc_size = sizeof(SC_HID_KEYBOARD_REPORT_DESC);
|
||||||
}
|
}
|
||||||
|
@ -190,7 +190,6 @@ sc_hid_mouse_generate_input_from_scroll(struct sc_hid_input *hid_input,
|
|||||||
|
|
||||||
void sc_hid_mouse_generate_open(struct sc_hid_open *hid_open) {
|
void sc_hid_mouse_generate_open(struct sc_hid_open *hid_open) {
|
||||||
hid_open->hid_id = SC_HID_ID_MOUSE;
|
hid_open->hid_id = SC_HID_ID_MOUSE;
|
||||||
hid_open->name = NULL; // No name specified after "scrcpy"
|
|
||||||
hid_open->report_desc = SC_HID_MOUSE_REPORT_DESC;
|
hid_open->report_desc = SC_HID_MOUSE_REPORT_DESC;
|
||||||
hid_open->report_desc_size = sizeof(SC_HID_MOUSE_REPORT_DESC);
|
hid_open->report_desc_size = sizeof(SC_HID_MOUSE_REPORT_DESC);
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
// Xbox 360
|
// Xbox 360
|
||||||
#define SC_GAMEPAD_UHID_VENDOR_ID UINT16_C(0x045e)
|
#define SC_GAMEPAD_UHID_VENDOR_ID UINT16_C(0x045e)
|
||||||
#define SC_GAMEPAD_UHID_PRODUCT_ID UINT16_C(0x028e)
|
#define SC_GAMEPAD_UHID_PRODUCT_ID UINT16_C(0x028e)
|
||||||
|
#define SC_GAMEPAD_UHID_NAME "Microsoft X-Box 360 Pad"
|
||||||
|
|
||||||
static void
|
static void
|
||||||
sc_gamepad_uhid_send_input(struct sc_gamepad_uhid *gamepad,
|
sc_gamepad_uhid_send_input(struct sc_gamepad_uhid *gamepad,
|
||||||
@ -36,7 +37,7 @@ sc_gamepad_uhid_send_open(struct sc_gamepad_uhid *gamepad,
|
|||||||
msg.uhid_create.id = hid_open->hid_id;
|
msg.uhid_create.id = hid_open->hid_id;
|
||||||
msg.uhid_create.vendor_id = SC_GAMEPAD_UHID_VENDOR_ID;
|
msg.uhid_create.vendor_id = SC_GAMEPAD_UHID_VENDOR_ID;
|
||||||
msg.uhid_create.product_id = SC_GAMEPAD_UHID_PRODUCT_ID;
|
msg.uhid_create.product_id = SC_GAMEPAD_UHID_PRODUCT_ID;
|
||||||
msg.uhid_create.name = hid_open->name;
|
msg.uhid_create.name = SC_GAMEPAD_UHID_NAME;
|
||||||
msg.uhid_create.report_desc = hid_open->report_desc;
|
msg.uhid_create.report_desc = hid_open->report_desc;
|
||||||
msg.uhid_create.report_desc_size = hid_open->report_desc_size;
|
msg.uhid_create.report_desc_size = hid_open->report_desc_size;
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ sc_keyboard_uhid_init(struct sc_keyboard_uhid *kb,
|
|||||||
msg.uhid_create.id = SC_HID_ID_KEYBOARD;
|
msg.uhid_create.id = SC_HID_ID_KEYBOARD;
|
||||||
msg.uhid_create.vendor_id = 0;
|
msg.uhid_create.vendor_id = 0;
|
||||||
msg.uhid_create.product_id = 0;
|
msg.uhid_create.product_id = 0;
|
||||||
msg.uhid_create.name = hid_open.name;
|
msg.uhid_create.name = NULL;
|
||||||
msg.uhid_create.report_desc = hid_open.report_desc;
|
msg.uhid_create.report_desc = hid_open.report_desc;
|
||||||
msg.uhid_create.report_desc_size = hid_open.report_desc_size;
|
msg.uhid_create.report_desc_size = hid_open.report_desc_size;
|
||||||
if (!sc_controller_push_msg(controller, &msg)) {
|
if (!sc_controller_push_msg(controller, &msg)) {
|
||||||
|
@ -83,7 +83,7 @@ sc_mouse_uhid_init(struct sc_mouse_uhid *mouse,
|
|||||||
msg.uhid_create.id = SC_HID_ID_MOUSE;
|
msg.uhid_create.id = SC_HID_ID_MOUSE;
|
||||||
msg.uhid_create.vendor_id = 0;
|
msg.uhid_create.vendor_id = 0;
|
||||||
msg.uhid_create.product_id = 0;
|
msg.uhid_create.product_id = 0;
|
||||||
msg.uhid_create.name = hid_open.name;
|
msg.uhid_create.name = NULL;
|
||||||
msg.uhid_create.report_desc = hid_open.report_desc;
|
msg.uhid_create.report_desc = hid_open.report_desc;
|
||||||
msg.uhid_create.report_desc_size = hid_open.report_desc_size;
|
msg.uhid_create.report_desc_size = hid_open.report_desc_size;
|
||||||
if (!sc_controller_push_msg(controller, &msg)) {
|
if (!sc_controller_push_msg(controller, &msg)) {
|
||||||
|
@ -174,7 +174,7 @@ public final class UhidManager {
|
|||||||
ByteBuffer buf = ByteBuffer.allocate(280 + reportDesc.length).order(ByteOrder.nativeOrder());
|
ByteBuffer buf = ByteBuffer.allocate(280 + reportDesc.length).order(ByteOrder.nativeOrder());
|
||||||
buf.putInt(UHID_CREATE2);
|
buf.putInt(UHID_CREATE2);
|
||||||
|
|
||||||
String actualName = name.isEmpty() ? "scrcpy" : "scrcpy: " + name;
|
String actualName = name.isEmpty() ? "scrcpy" : name;
|
||||||
byte[] utf8Name = actualName.getBytes(StandardCharsets.UTF_8);
|
byte[] utf8Name = actualName.getBytes(StandardCharsets.UTF_8);
|
||||||
int len = StringUtils.getUtf8TruncationIndex(utf8Name, 127);
|
int len = StringUtils.getUtf8TruncationIndex(utf8Name, 127);
|
||||||
assert len <= 127;
|
assert len <= 127;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user