Skip to content

feat: add handler for DDR GRAND PRIX controller (BF110)#4

Merged
dinsfire64 merged 5 commits intodinsfire64:mainfrom
nogic1008:feat/grand-prix-controller
Nov 16, 2025
Merged

feat: add handler for DDR GRAND PRIX controller (BF110)#4
dinsfire64 merged 5 commits intodinsfire64:mainfrom
nogic1008:feat/grand-prix-controller

Conversation

@nogic1008
Copy link
Contributor

close #3

I couldn't build on my environment, so I'm marking it as draft.
We would be happy to assist you with testing using actual device.

@dinsfire64
Copy link
Owner

Thank you for your PR.

I do actually own this device and haven't opened the box until now.

it is having trouble enumerating with tinyusb and actually my linux desktop as well, it is seemingly disconnecting itself constantly. This is with the batteries and without.

Is this a case of the device works okay in windows, but doesn't in other usb stacks because it's expecting a packet that linux isn't sending?

I haven't used any of the official controllers to know, so I thought I'd ask.

[ 1753.563834] usb 1-2: USB disconnect, device number 33
[ 1753.811345] usb 1-2: new full-speed USB device number 34 using xhci_hcd
[ 1753.989466] usb 1-2: New USB device found, idVendor=1ccf, idProduct=1020, bcdDevice= 4.10
[ 1753.989471] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1753.989473] usb 1-2: Product: DDR MAT controller
[ 1753.989474] usb 1-2: Manufacturer: Konami Amusement
[ 1753.989476] usb 1-2: SerialNumber: BF010
[ 1754.026685] input: Konami Amusement DDR MAT controller as /devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:08.0/0000:06:00.1/usb1/1-2/1-2:1.0/0003:1CCF:1020.0014/input/input49
[ 1754.026771] hid-generic 0003:1CCF:1020.0014: input,hidraw7: USB HID v1.11 Joystick [Konami Amusement DDR MAT controller] on usb-0000:06:00.1-2/input0
[ 1759.883801] usb 1-2: USB disconnect, device number 34
[ 1760.135346] usb 1-2: new full-speed USB device number 35 using xhci_hcd
[ 1760.314436] usb 1-2: New USB device found, idVendor=1ccf, idProduct=1020, bcdDevice= 4.10
[ 1760.314440] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1760.314443] usb 1-2: Product: DDR MAT controller
[ 1760.314444] usb 1-2: Manufacturer: Konami Amusement
[ 1760.314446] usb 1-2: SerialNumber: BF010
[ 1760.354658] input: Konami Amusement DDR MAT controller as /devices/pci0000:00/0000:00:01.2/0000:02:00.0/0000:03:08.0/0000:06:00.1/usb1/1-2/1-2:1.0/0003:1CCF:1020.0015/input/input50
[ 1760.354748] hid-generic 0003:1CCF:1020.0015: input,hidraw7: USB HID v1.11 Joystick [Konami Amusement DDR MAT controller] on usb-0000:06:00.1-2/input0

@dinsfire64
Copy link
Owner

dinsfire64 commented Nov 15, 2025

I found the issue at hand, and it's annoying in general.

HID devices usually have the ReportDescriptor before the endpoint that describes the descriptor in question.

However, this device has it after which is aggravating.

You can see that in lsusb as the random DEVICE CLASS string is actually the report descriptor info...


[dinsfire@hyrule ~]$ lsusb -d 1ccf:1020 -v

Bus 001 Device 055: ID 1ccf:1020 Konami Amusement DDR MAT controller
Negotiated speed: Full Speed (12Mbps)
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 [unknown]
  bDeviceSubClass         0 [unknown]
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x1ccf Konami Amusement
  idProduct          0x1020 DDR MAT controller
  bcdDevice            4.10
  iManufacturer           1 Konami Amusement
  iProduct                2 DDR MAT controller
  iSerial                 3 BF010
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0022
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              200mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 [unknown]
      bInterfaceProtocol      0 
      iInterface              1 Konami Amusement
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0010  1x 16 bytes
        bInterval               4
        DEVICE CLASS:  09 21 11 01 21 01 22 32 00
Device Status:     0x0000
  (Bus Powered)

I have gone into tinyusb and modified it to work with this device, but I need to clean up the code drastically and then push the change upstream so others can take advantage.

For now try this attached binary, it works with my controller.

snek_box.uf2.zip

@dinsfire64
Copy link
Owner

dinsfire64 commented Nov 15, 2025

I have pushed the fix upstream, I'll work on integrating this in cleanly later.

Let me know how your testing goes.

hathach/tinyusb#3340

@dinsfire64
Copy link
Owner

I have changed the code to use bitflags instead of bitwise math to make it read better.

Attached is the update that matches the changes I pushed.

Let me know if you are happy with it.

snek_box.uf2.zip

@nogic1008
Copy link
Contributor Author

I have changed the code to use bitflags instead of bitwise math to make it read better.

Attached is the update that matches the changes I pushed.

Let me know if you are happy with it.

snek_box.uf2.zip

@dinsfire64 Thanks! I'll try it later.

@nogic1008 nogic1008 marked this pull request as ready for review November 16, 2025 01:55
@nogic1008
Copy link
Contributor Author

@dinsfire64
Works fine! Thank you!
Movie: https://x.com/nogic1008/status/1989877549510660301

Side note: Circle/Cross button is high sensitivity, so 6-panel play may be difficult.

@dinsfire64
Copy link
Owner

Glad that's working for you, I'll update the compat in the readme, squash and merge.

@dinsfire64 dinsfire64 merged commit 0fa7980 into dinsfire64:main Nov 16, 2025
@nogic1008 nogic1008 deleted the feat/grand-prix-controller branch November 16, 2025 09:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Support DDR GRAND PRIX controller

2 participants