PS4 Compatibility

question

#1

I just received my model 01 today, plugged it into my system and everything works fine, however I would like to be able to use my keyboard on a PS4 Pro
Does anyone know how I could do this or if it is even possible as when I plug it into the PS4 it recognises the device as a mouse and doesn’t work?


(Gergely Nagy) #2

As the PS4 is based on FreeBSD, and its USB keyboard driver is… lets just say, not really sophisticated, it does not understand N-key rollover. I won’t go much into details, because it is both boring and a bit sad, so I’ll just offer a solution:

When you upgrade the firmware to the latest master on GitHub, in the setup() method of your sketch, add BootKeyboard.protocol = HID_BOOT_PROTOCOL; as the very first thing therein, before the Kaleidoscope.setup() call.

This should work, and allow the keyboard to function both as a keyboard (but no NKRO, so it can only recognize six keys pressed at the same time, and no more) and as a mouse. At least, it worked on FreeBSD, hopefully will work on PS4 too.

We are working on making this easier in the future, but we’re not completely there yet.


#3

Just to update this for a more recent firmware, as BootKeyboard.protocol became protected at some point, the code is now BootKeyboard.setProtocol(HID_BOOT_PROTOCOL);


#4

So it turns out that even with this change, the keyboard changes to HID_REPORT_PROTOCOL on boot anyway, and I still need to use the magic key combo to use it under FreeBSD.

If you have any details about why FreeBSD’s keyboard driver is lacking, I’d like to take my hand at making this work. This isn’t the only keyboard with this problem on that platform (but it is the only one that allows me to manually get it back into BOOT protocol).

EDIT: after looking more closely at BootKeyboard, I’ve found the correct code to be BootKeyboard.default_protocol = HID_BOOT_PROTOCOL; inserted before Kaleidoscope.setup().


(Gergely Nagy) #5

It’s lacking because it only supports the boot protocol. There’s zero support for the report / NKRO protocol in there. There is, however, support for whitelisting devices that will be asked to talk the boot protocol. Adding the Model01 to that list is likely a lot easier than implementing report proto for FreeBSD.

If the OS asks the keyboard to be in boot mode, the Kaleidoscope firmware will obey, and do just that.

If you do want to implement report protocol support for FreeBSD, let me know, and I can give you a few pointers. If you do that, lots of people will thank you. Keep in mind that it’s not going to be easy, or without funky corner cases most likely.