Solved Kinesis Advantage 360 pro managed by umodem

good morning, nice freeBSD community!

I need your help.

  1. Dell T640 + freeBSD 14.2
  2. Kinesis Advantage 360 pro connected via USB
The keyboard does not send any keystrokes. Only the left part of the keyboard is connected via USB cable to an SS USB port in the Dell T640.

From the dmesg's output I see the keyboard is managed by umodem. No idea why and no idea how to remove this binding.

Please see dmesg and usbconfig output below. Please ask questions.

sh:
doas dmesg | grep -E 'Kineis|usb|hid|kbd|umodem '
kbd0 at kbdmux0
usbus0 numa-domain 0 on xhci0
usbus0: 5.0Gbps Super Speed USB v3.0
ugen0.1: <Intel XHCI root HUB> at usbus0
uhub0 numa-domain 0 on usbus0
uhub0: <Intel XHCI root HUB, class 9/0, rev 3.00/1.00, addr 1> on usbus0
Root mount waiting for: CAM usbus0
ugen0.2: <GenesysLogic USB2.1 Hub> at usbus0
uhub1: <GenesysLogic USB2.1 Hub, class 9/0, rev 2.10/6.63, addr 1> on usbus0
usb\_alloc\_device: set address 3 failed (USB\_ERR\_IOERROR, ignored)
Root mount waiting for: CAM usbus0
Root mount waiting for: CAM usbus0
usbd\_setup\_device\_desc: getting device descriptor at addr 3 failed, USB\_ERR\_IOERROR
ugen0.3: <VIA Labs, Inc. USB2.0 Hub> at usbus0
uhub2: <VIA Labs, Inc. USB2.0 Hub, class 9/0, rev 2.10/d.a0, addr 2> on usbus0
Root mount waiting for: CAM usbus0
ugen0.4: <Metadot - Das Keyboard Das Keyboard> at usbus0
ukbd1 numa-domain 0 on uhub2
ukbd1: <Metadot - Das Keyboard Das Keyboard, class 0/0, rev 1.10/1.00, addr 3> on usbus0
kbd1 at ukbd1
Root mount waiting for: CAM usbus0
ugen0.5: <PixArt HP 100 USB Optical Mouse> at usbus0
ugen0.6: <Focusrite Scarlett Solo USB> at usbus0
ugen0.7: <Kinesis Corporation Adv360 Pro> at usbus0
Root mount waiting for: CAM usbus0
ugen0.8: <vendor 0x1604 product 0x10c0> at usbus0
uhub3: <vendor 0x1604 product 0x10c0, class 9/0, rev 2.00/0.00, addr 7> on usbus0
Root mount waiting for: CAM usbus0
Root mount waiting for: CAM usbus0
Root mount waiting for: CAM usbus0
ugen0.9: <vendor 0x1604 product 0x10c0> at usbus0
uhub4: <vendor 0x1604 product 0x10c0, class 9/0, rev 2.00/0.00, addr 8> on usbus0
Root mount waiting for: CAM usbus0
Root mount waiting for: CAM usbus0
ugen0.10: <vendor 0x1604 product 0x10c0> at usbus0
uhub5: <vendor 0x1604 product 0x10c0, class 9/0, rev 2.00/0.00, addr 9> on usbus0
Root mount waiting for: usbus0
Root mount waiting for: usbus0
Root mount waiting for: usbus0
usb\_msc\_auto\_quirk: UQ\_MSC\_NO\_GETMAXLUN set for USB mass storage device DELL Internal Dual SD (0x413c:0xa101)
usb\_msc\_auto\_quirk: UQ\_MSC\_NO\_SYNC\_CACHE set for USB mass storage device DELL Internal Dual SD (0x413c:0xa101)
ugen0.11: <DELL Internal Dual SD> at usbus0
umass0: <DELL Internal Dual SD, class 0/0, rev 3.00/0.00, addr 10> on usbus0
ugen0.12: <GenesysLogic USB3.1 Hub> at usbus0
uhub6: <GenesysLogic USB3.1 Hub, class 9/0, rev 3.20/6.63, addr 11> on usbus0
Root mount waiting for: usbus0
ugen0.13: <VIA Labs, Inc. USB3.0 Hub> at usbus0
uhub7: <VIA Labs, Inc. USB3.0 Hub, class 9/0, rev 3.00/d.a1, addr 12> on usbus0
Root mount waiting for: usbus0
ugen0.3: <VIA Labs, Inc. USB2.0 Hub> at usbus0 (disconnected)
ugen0.4: <Metadot - Das Keyboard Das Keyboard> at usbus0 (disconnected)
ukbd1: at uhub2, port 4, addr 3 (disconnected)
ukbd1: detached
ugen0.13: <VIA Labs, Inc. USB3.0 Hub> at usbus0 (disconnected)
uhid0 numa-domain 0 on uhub0
uhid0: <Kinesis Corporation Adv360 Pro, class 239/2, rev 2.00/3.05, addr 6> on usbus0
ums0: <PixArt HP 100 USB Optical Mouse, class 0/0, rev 2.00/1.00, addr 4> on usbus0
uaudio0: <Focusrite Scarlett Solo USB, class 239/2, rev 2.00/6.45, addr 5> on usbus0
umodem0: <Kinesis Corporation Adv360 Pro, class 239/2, rev 2.00/3.05, addr 6> on usbus0
ugen0.3: <VIA Labs, Inc. USB3.0 Hub> at usbus0
uhub2: <VIA Labs, Inc. USB3.0 Hub, class 9/0, rev 3.00/d.a1, addr 13> on usbus0
ugen0.12: <GenesysLogic USB3.1 Hub> at usbus0 (disconnected)
ugen0.4: <GenesysLogic USB3.1 Hub> at usbus0
uhub6: <GenesysLogic USB3.1 Hub, class 9/0, rev 3.20/6.63, addr 14> on usbus0
ugen0.12: <VIA Labs, Inc. USB2.0 Hub> at usbus0
uhub7: <VIA Labs, Inc. USB2.0 Hub, class 9/0, rev 2.10/d.a0, addr 15> on usbus0
ugen0.13: <Metadot - Das Keyboard Das Keyboard> at usbus0
ukbd1 numa-domain 0 on uhub7
ukbd1: <Metadot - Das Keyboard Das Keyboard, class 0/0, rev 1.10/1.00, addr 16> on usbus0
kbd1 at ukbd1
uhid1 numa-domain 0 on uhub7
uhid1: <Metadot - Das Keyboard Das Keyboard, class 0/0, rev 1.10/1.00, addr 16> on usbus0
ugen0.2: <GenesysLogic USB2.1 Hub> at usbus0 (disconnected)
ugen0.5: <PixArt HP 100 USB Optical Mouse> at usbus0 (disconnected)
 
From the dmesg's output I see the keyboard is managed by umodem. No idea why and no idea how to remove this binding.
What you can do is research our source tree and see if there is not a mistake in the USB device identification file.
/usr/src/sys/dev/usb/usbdevs

To find the Vendor ID and Product ID look at you dmesg output. I don't see it there so check with this:
usbconfig -d ugen0.7 dump_device_desc
Now bounce VID and PID against usbdevs.
 
Please provide the output of usbconfig -v.

What do you mean when you say that only the left part of the keyboard is connected?

As an experiment, you can try using the usbhid method of connecting USB keyboards. Add these to /boot/loader.conf and reboot:
Code:
usbhid_load="YES"
hw.usb.usbhid.enable="YES"
The keyboard should appear as hkbd, not ukbd device.
 
Please provide the output of usbconfig -v.

What do you mean when you say that only the left part of the keyboard is connected?

As an experiment, you can try using the usbhid method of connecting USB keyboards. Add these to /boot/loader.conf and reboot:
Code:
usbhid_load="YES"
hw.usb.usbhid.enable="YES"
The keyboard should appear as hkbd, not ukbd device.
 

Attachments

At first glance, this keyboard can also act as a mouse to some extent. USB devices that are both keyboards and mice at the same time are not handled well by FreeBSD's old USB HID code. The new USB HID code should be able to handle them. It can be enabled with the settings I recommended in my previous post. Try them and report what happened.

Alternatively, see if any software for configuring the keyboard can disable the "Mouse Emulation" feature. This should change the way the keyboard describes itself to the host and should make it more compatible with FreeBSD's old USB HID code.
 
Hmm, my original instructions might have been slightly incorrect. Please, add these to your /boot/loader.conf:
Code:
usbhid_load="YES"
hw.usb.usbhid.enable="1"
 

[SOLVED] Kinesis Advantage 360 Pro Keyboard on FreeBSD 14.3​


Problem​


The Kinesis Advantage 360 Pro keyboard (ZMK firmware) was not functioning on FreeBSD 14.3-RELEASE. When connected via USB, FreeBSD incorrectly attached umodem and ums drivers instead of the keyboard drivers (uhid/ukbd), resulting in no keystroke recognition.


Root Cause​


ZMK firmware defaults to NKRO (N-Key Rollover) mode using USB HID Report Protocol, which FreeBSD's legacy USB drivers cannot properly parse. The keyboard needs to operate in Boot Protocol (6KRO) mode for FreeBSD compatibility.


Solution​


Step 1: Configure ZMK Firmware for Boot Protocol​


Fork the official Kinesis repository and add Boot Protocol support:


Edit config/adv360.conf:

Code:
# Enable USB Boot Protocol support for FreeBSD

CONFIG_ZMK_USB_BOOT=y
CONFIG_ZMK_HID_REPORT_TYPE_HKRO=y
CONFIG_ZMK_HID_KEYBOARD_REPORT_SIZE=6
CONFIG_USB_DEVICE_SOF=y
CONFIG_USB_HID_BOOT_PROTOCOL=y

Build firmware using GitHub Actions and flash both keyboard halves.


Step 2: Enable FreeBSD Modern HID Stack​


Edit /boot/loader.conf:

sh:
# Enable modern HID subsystem
hw.usb.usbhid.enable=1
usbhid_load="YES"
hkbd_load="YES"

# Disable conflicting legacy drivers
uhid_load="NO"
ukbd_load="NO"

Edit /etc/rc.conf:

Code:
kld_list="usbhid"

Reboot for changes to take effect.

Verification​


After reboot, dmesg should show hkbd driver attaching to the keyboard instead of umodem. All keys should function normally.


Bonus: USB/Bluetooth Toggle​


To switch output between USB and Bluetooth while keeping USB connected for power, add to your keymap:

Code:
#include <dt-bindings/zmk/outputs.h>

// In your preferred layer, assign a key:

&out OUT_TOG // Toggles between USB and BLE output

Technical Details​


  • Boot Protocol: Fixed 8-byte HID report (1 modifier + 1 reserved + 6 keys)
  • Report Protocol: Variable-length reports supporting NKRO, incompatible with FreeBSD legacy drivers
  • Modern HID Stack: FreeBSD 14.x includes improved HID support via usbhid module

Resources​





Tested on FreeBSD 14.3-RELEASE with Kinesis Advantage 360 Pro (V3.0 firmware branch)
 
Back
Top