mirror of
https://github.com/Genymobile/scrcpy.git
synced 2026-04-21 01:33:36 +00:00
Add UHID_DESTROY control message
This message will be sent on gamepad disconnection. Contrary to keyboard and mouse, which are registered once and are unregistered when scrcpy exists, each gamepad is mapped with its own HID id, and they can be plugged/unplugged dynamically.
This commit is contained in:
parent
29105b240b
commit
2d32cbc716
6 changed files with 69 additions and 3 deletions
|
|
@ -155,6 +155,9 @@ sc_control_msg_serialize(const struct sc_control_msg *msg, uint8_t *buf) {
|
|||
sc_write16be(&buf[3], msg->uhid_input.size);
|
||||
memcpy(&buf[5], msg->uhid_input.data, msg->uhid_input.size);
|
||||
return 5 + msg->uhid_input.size;
|
||||
case SC_CONTROL_MSG_TYPE_UHID_DESTROY:
|
||||
sc_write16be(&buf[1], msg->uhid_destroy.id);
|
||||
return 3;
|
||||
case SC_CONTROL_MSG_TYPE_EXPAND_NOTIFICATION_PANEL:
|
||||
case SC_CONTROL_MSG_TYPE_EXPAND_SETTINGS_PANEL:
|
||||
case SC_CONTROL_MSG_TYPE_COLLAPSE_PANELS:
|
||||
|
|
@ -269,6 +272,9 @@ sc_control_msg_log(const struct sc_control_msg *msg) {
|
|||
}
|
||||
break;
|
||||
}
|
||||
case SC_CONTROL_MSG_TYPE_UHID_DESTROY:
|
||||
LOG_CMSG("UHID destroy [%" PRIu16 "]", msg->uhid_destroy.id);
|
||||
break;
|
||||
case SC_CONTROL_MSG_TYPE_OPEN_HARD_KEYBOARD_SETTINGS:
|
||||
LOG_CMSG("open hard keyboard settings");
|
||||
break;
|
||||
|
|
@ -281,8 +287,11 @@ sc_control_msg_log(const struct sc_control_msg *msg) {
|
|||
bool
|
||||
sc_control_msg_is_droppable(const struct sc_control_msg *msg) {
|
||||
// Cannot drop UHID_CREATE messages, because it would cause all further
|
||||
// UHID_INPUT messages for this device to be invalid
|
||||
return msg->type != SC_CONTROL_MSG_TYPE_UHID_CREATE;
|
||||
// UHID_INPUT messages for this device to be invalid.
|
||||
// Cannot drop UHID_DESTROY messages either, because a further UHID_CREATE
|
||||
// with the same id may fail.
|
||||
return msg->type != SC_CONTROL_MSG_TYPE_UHID_CREATE
|
||||
&& msg->type != SC_CONTROL_MSG_TYPE_UHID_DESTROY;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ enum sc_control_msg_type {
|
|||
SC_CONTROL_MSG_TYPE_ROTATE_DEVICE,
|
||||
SC_CONTROL_MSG_TYPE_UHID_CREATE,
|
||||
SC_CONTROL_MSG_TYPE_UHID_INPUT,
|
||||
SC_CONTROL_MSG_TYPE_UHID_DESTROY,
|
||||
SC_CONTROL_MSG_TYPE_OPEN_HARD_KEYBOARD_SETTINGS,
|
||||
};
|
||||
|
||||
|
|
@ -105,6 +106,9 @@ struct sc_control_msg {
|
|||
uint16_t size;
|
||||
uint8_t data[SC_HID_MAX_SIZE];
|
||||
} uhid_input;
|
||||
struct {
|
||||
uint16_t id;
|
||||
} uhid_destroy;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue