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:
parent
2594b99629
commit
f8738fd757
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue