mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-06-05 22:30:29 +00:00
[skip ci] Fix joycon handling
This commit is contained in:
parent
b0823349bb
commit
5936ee00dd
2 changed files with 27 additions and 13 deletions
|
|
@ -285,18 +285,22 @@ static void set_report(hid_device *dev, unsigned char *data, size_t length)
|
|||
EM_ASYNC_JS(void, hid_js_open, (int device_id, hid_device *dev, SetByteCallback callback, SetReportCallback set_report_callback), {
|
||||
let device = window._hidDeviceList[device_id];
|
||||
if (device) {
|
||||
await device.open();
|
||||
device.addEventListener("inputreport", function (event) {
|
||||
const { data, device, reportId } = event;
|
||||
|
||||
let dataLength = data['byteLength']+1;
|
||||
let pointer = _malloc(dataLength);
|
||||
dynCall("viiii", callback, [pointer, dataLength, reportId, 0]);
|
||||
for (let i = 0; i < data['byteLength']; i++) {
|
||||
dynCall("viiii", callback, [pointer, dataLength, data['getUint8'](i), i+1]);
|
||||
}
|
||||
dynCall("viii", set_report_callback, [dev, pointer, dataLength]);
|
||||
});
|
||||
try {
|
||||
await device.open();
|
||||
device.addEventListener("inputreport", function (event) {
|
||||
const { data, device, reportId } = event;
|
||||
|
||||
let dataLength = data['byteLength']+1;
|
||||
let pointer = _malloc(dataLength);
|
||||
dynCall("viiii", callback, [pointer, dataLength, reportId, 0]);
|
||||
for (let i = 0; i < data['byteLength']; i++) {
|
||||
dynCall("viiii", callback, [pointer, dataLength, data['getUint8'](i), i+1]);
|
||||
}
|
||||
dynCall("viii", set_report_callback, [dev, pointer, dataLength]);
|
||||
});
|
||||
} catch (e) {
|
||||
// Pass?
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -139,6 +139,11 @@ static void SDL_WebHID_DisconnectEmscriptenGamepad(int device_index)
|
|||
|
||||
static void SDL_RequestWebHIDDevice(Uint16 vendor, Uint16 product, int device_index)
|
||||
{
|
||||
Uint16 product2 = 0;
|
||||
if (vendor == USB_VENDOR_NINTENDO && product == USB_PRODUCT_NINTENDO_SWITCH_JOYCON_GRIP) {
|
||||
product = USB_PRODUCT_NINTENDO_SWITCH_JOYCON_LEFT;
|
||||
product2 = USB_PRODUCT_NINTENDO_SWITCH_JOYCON_RIGHT;
|
||||
}
|
||||
MAIN_THREAD_EM_ASM({
|
||||
function timeout(ms) {
|
||||
return new Promise(resolve => setTimeout(resolve, ms));
|
||||
|
|
@ -149,6 +154,11 @@ static void SDL_RequestWebHIDDevice(Uint16 vendor, Uint16 product, int device_in
|
|||
while (true) {
|
||||
try {
|
||||
let devices = await navigator["hid"]["requestDevice"]({ "filters": [ { "vendorId": $0, "productId": $1, } ]});
|
||||
let device_length = devices["length"];
|
||||
if ($4) { // product2
|
||||
devices = await navigator["hid"]["requestDevice"]({ "filters": [ { "vendorId": $0, "productId": $4, } ]});
|
||||
device_length += devices["length"];
|
||||
}
|
||||
if (devices["length"]) {
|
||||
dynCall("vi", $2, [$3]);
|
||||
}
|
||||
|
|
@ -162,7 +172,7 @@ static void SDL_RequestWebHIDDevice(Uint16 vendor, Uint16 product, int device_in
|
|||
}
|
||||
handler();
|
||||
}
|
||||
}, vendor, product, SDL_WebHID_DisconnectEmscriptenGamepad, device_index);
|
||||
}, vendor, product, SDL_WebHID_DisconnectEmscriptenGamepad, device_index, product2);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue