nusb/kb, nusb/joy: dont try to set protocol on nonboot devices

the hid 1.11 specification says that for hid devices which arent in
the boot subclass (subclass 1), it is only optional to support the set
protocol command.  for my devices, trying to set protocol results in a
stall error and unusable devices.

fixes my Tex Shinobi keyboard and Playstation 4 controller.
This commit is contained in:
mischief 2020-11-21 12:31:54 -08:00
parent 2594b99629
commit f8738fd757
2 changed files with 16 additions and 0 deletions

View file

@ -222,6 +222,14 @@ setproto(KDev *f, int eid)
proto = Reportproto;
}else
kbfatal(f, "no report");
/*
* if a HID's subclass code is 1 (boot mode), it will support
* setproto, otherwise it is not guaranteed to.
*/
if(Subclass(f->dev->usb->ep[eid]->iface->csp) != 1)
return 0;
return usbcmd(f->dev, Rh2d|Rclass|Riface, Setproto, proto, id, nil, 0);
}

View file

@ -368,6 +368,14 @@ setproto(Hiddev *f, int eid)
}
proto = Bootproto;
}
/*
* if a HID's subclass code is 1 (boot mode), it will support
* setproto, otherwise it is not guaranteed to.
*/
if(Subclass(iface->csp) != 1)
return 0;
return usbcmd(f->dev, Rh2d|Rclass|Riface, Setproto, proto, iface->id, nil, 0);
}