hrvach / deskhop

Fast Desktop Switching Device
GNU General Public License v3.0
6.44k stars 188 forks source link

Dry Studio Black Diamond 75 keyboard not working #50

Open infosecconsultant opened 9 months ago

infosecconsultant commented 9 months ago

I thought I'd try with a few other keyboard I have. Unfortunately the Dry Studio Black Diamond 75 keyboard does not register with the deskhop at all. I'm guessing it's got issues with the power draw but I'm not sure. I don't currently have a way to measure that but I've ordered a little inline USB power monitor/tester. I turned off the LEDs etc but still no luck. If there's any advice on debugging please let me know and I'll give it a shot.

hrvach commented 9 months ago

Try dumping the usb hid report first, maybe it's also detected as a mouse ... I had to google this keyboard out of curiosity and must admit I have never seen anything like this :) it's pretty interesting...

infosecconsultant commented 9 months ago

I'll try to do that when I'm back tomorrow. This output?

lsusb -v
usbhid-dump

The keyboard supports Bluetooth... Is there any chance the raspi could pair a bluetooth keyboard? Or have a bluetooth dongle attached to it?

hrvach commented 9 months ago

Unless a BT dongle presents as a usb keyboard, I doubt that would work, but I was working on pico W BT support, mostly in the other direction (use BT as client so you need only one pico).

Trying to do support for non-boot keyboards as well, that should sort out most issues with a few stubborn keyboard models.

hrvach commented 8 months ago

Any change with the latest fw?

infosecconsultant commented 8 months ago

Hey hrvach, I've got some other firmware issues with that keyboard unfortunately. I'll have to try again once the RMA'd unit comes though in a couple of weeks. Sorry :(

infosecconsultant commented 7 months ago

Hey @hrvach

Still no luck with the keyboard. Not registering any keypresses at all and I've updated to the most recent release of firmware.

The following output is from a linux machine plugged into the 'A' port of the deskhop.

usbdhid-dump

001:005:001:DESCRIPTOR         1713489329.878272
 05 01 09 02 A1 01 85 01 09 01 A1 00 05 09 19 01
 29 05 15 00 25 01 95 05 75 01 81 02 95 01 75 03
 81 01 05 01 09 30 09 31 15 81 25 7F 95 02 75 08
 81 06 09 38 15 81 25 7F 95 01 75 08 81 06 05 0C
 0A 38 02 15 81 25 7F 95 01 75 08 81 06 C0 C0

001:005:000:DESCRIPTOR         1713489329.879163
 05 01 09 06 A1 01 85 01 05 07 19 E0 29 E7 15 00
 25 01 95 08 75 01 81 02 95 01 75 08 81 01 05 08
 19 01 29 05 95 05 75 01 91 02 95 01 75 03 91 01
 05 07 19 00 2A FF 00 15 00 26 FF 00 95 06 75 08
 81 00 C0 05 01 09 02 A1 01 85 02 09 01 A1 00 05
 09 19 01 29 05 15 00 25 01 95 05 75 01 81 02 95
 01 75 03 81 01 05 01 09 30 09 31 15 00 26 FF 7F
 75 10 95 02 81 02 09 38 15 81 25 7F 95 01 75 08
 81 06 95 01 75 08 81 01 C0 C0

And lsusb -v output


Bus 001 Device 005: ID 2e8a:107c Hrvoje Cavrak DeskHop Switch
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 [unknown]
  bDeviceSubClass         0 [unknown]
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x2e8a Hrvoje Cavrak
  idProduct          0x107c DeskHop Switch
  bcdDevice            1.00
  iManufacturer           1 Hrvoje Cavrak
  iProduct                2 DeskHop Switch
  iSerial                 3 0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x003b
    bNumInterfaces          2
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 [unknown]
      bInterfaceProtocol      0 
      iInterface              2 DeskHop Switch
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     138
          Report Descriptors: 
            ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 [unknown]
      bInterfaceProtocol      0 
      iInterface              4 MouseHelper
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      79
          Report Descriptors: 
            ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0020  1x 32 bytes
        bInterval               1
Device Status:     0x0000
  (Bus Powered)

The following output is from a linux machine plugged into the black diamond keyboard directly: usbdhid-dump

001:007:002:DESCRIPTOR         1713489935.694410
 06 00 FF 09 01 A1 01 09 01 15 00 26 FF 00 75 08
 95 40 81 02 09 02 15 00 26 FF 00 75 08 95 40 91
 02 C0

001:007:001:DESCRIPTOR         1713489935.695966
 05 0C 09 01 A1 01 85 02 15 00 25 01 75 01 95 01
 09 CD 81 06 09 E2 81 06 09 B5 81 06 09 B6 81 06
 09 E9 81 06 09 EA 81 06 09 6F 81 06 09 70 81 06
 C0 05 01 09 80 A1 01 85 03 19 81 29 B8 15 00 25
 01 75 01 95 38 81 02 C0

001:007:000:DESCRIPTOR         1713489935.696796
 05 01 09 06 A1 01 05 07 19 E0 29 E7 15 00 25 01
 75 01 95 08 81 02 95 01 75 08 81 03 95 05 75 01
 05 08 19 01 29 05 91 02 95 01 75 03 91 03 95 E0
 75 01 15 00 25 01 05 07 19 00 29 DF 81 02 C0

001:005:001:DESCRIPTOR         1713489935.697443
 05 01 09 02 A1 01 85 01 09 01 A1 00 05 09 19 01
 29 05 15 00 25 01 95 05 75 01 81 02 95 01 75 03
 81 01 05 01 09 30 09 31 15 81 25 7F 95 02 75 08
 81 06 09 38 15 81 25 7F 95 01 75 08 81 06 05 0C
 0A 38 02 15 81 25 7F 95 01 75 08 81 06 C0 C0

001:005:000:DESCRIPTOR         1713489935.698194
 05 01 09 06 A1 01 85 01 05 07 19 E0 29 E7 15 00
 25 01 95 08 75 01 81 02 95 01 75 08 81 01 05 08
 19 01 29 05 95 05 75 01 91 02 95 01 75 03 91 01
 05 07 19 00 2A FF 00 15 00 26 FF 00 95 06 75 08
 81 00 C0 05 01 09 02 A1 01 85 02 09 01 A1 00 05
 09 19 01 29 05 15 00 25 01 95 05 75 01 81 02 95
 01 75 03 81 01 05 01 09 30 09 31 15 00 26 FF 7F
 75 10 95 02 81 02 09 38 15 81 25 7F 95 01 75 08
 81 06 95 01 75 08 81 01 C0 C0

And lsusb -v

Bus 001 Device 007: ID 05ac:0256 Apple, Inc. Black Diamond 75
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 [unknown]
  bDeviceSubClass         0 [unknown]
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x05ac Apple, Inc.
  idProduct          0x0256 Black Diamond 75
  bcdDevice            1.00
  iManufacturer           1 AngryMiao
  iProduct                2 Black Diamond 75
  iSerial                 3 000000000000
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0096
    bNumInterfaces          5
    bConfigurationValue     1
    iConfiguration          4 Default configuration
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      63
          Report Descriptors: 
            ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      1 Keyboard
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      72
          Report Descriptors: 
            ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      0 
      iInterface              0 
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      34
          Report Descriptors: 
            ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
    Interface Association:
      bLength                 8
      bDescriptorType        11
      bFirstInterface         3
      bInterfaceCount         2
      bFunctionClass          2 Communications
      bFunctionSubClass       2 Abstract (modem)
      bFunctionProtocol       1 AT-commands (v.25ter)
      iFunction               0 
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        3
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         2 Communications
      bInterfaceSubClass      2 Abstract (modem)
      bInterfaceProtocol      1 AT-commands (v.25ter)
      iInterface              0 
      CDC Header:
        bcdCDC               1.10
      CDC Call Management:
        bmCapabilities       0x03
          call management
          use DataInterface
        bDataInterface          4
      CDC ACM:
        bmCapabilities       0x02
          line coding and serial state
      CDC Union:
        bMasterInterface        3
        bSlaveInterface         4 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval              16
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        4
      bAlternateSetting       0
      bNumEndpoints           2
      bInterfaceClass        10 CDC Data
      bInterfaceSubClass      0 [unknown]
      bInterfaceProtocol      0 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               0
Device Status:     0x0001
  Self Powered

I'm not sure why the device is an 'Apple' device... Bit odd. I'm testing on a mac and a debian based HP at the moment.

Please let me know if you need anything further from my end.

hrvach commented 7 months ago
Output (Constant, Variable),
Report Count (224),
Report Size (1),

Your keyboard is NKRO, that's not supported yet.. it should work in boot mode though, but I suspect it's also a mouse. Can you try rebuilding with ENFORCE_PORTS set to 1 in user_config.h ?

hrvach commented 7 months ago

Ordered a NKRO keyboard, that should help with implementing support for it. 😃

hrvach commented 6 months ago

@infosecconsultant is there a change with the latest experimental BETA (https://github.com/hrvach/deskhop/releases/tag/v0.60) ?