Skip to the content
PCBKitNew board
4 layers129.3 × 113.2 mmHid controller pcb, the printed circuit board in 3D

Hid controller pcb

elitetq/hid-controller

Making a custom HID controller PCB for interfacing with operating systems like Windows to play games.

Size
129.3 × 113.2 mm
Copper layers
4
Thickness
1.6 mm
Parts
72
Nets
50
Pads
261
Tracks, vias
414, 173
Pours
12
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
20 Aug 2026
Updated
8 Oct 2026

Overview

Hid controller pcb is an open-source printed circuit board by elitetq, from the elitetq/hid-controller repository on GitHub. It is a 4-layer board of 129.3 × 113.2 mm with 72 parts on 50 nets, routed with 414 tracks and 173 vias.

It is built around the COM-09032, RT9080-33GJ5 and B3F-1000, with the 10118194-0011LF among its other parts. Its parts include 28 resistors, 16 capacitors, 15 switches, 4 ICs and 4 diodes. It belongs with the STM32 boards of this library.

Main components

4

README

README.md

hid-controller

A custom USB gamepad built on an STM32F103, with a KiCad PCB and STM32 firmware. It has two analog sticks with click switches, a D-pad, face buttons, bumpers, digital triggers and Start/Share buttons.

Assembled controller

https://github.com/user-attachments/assets/c4e4d3e5-b4be-487b-b6eb-255510382f0a

USB identity and compatibility

The device appears as J-Controller, with manufacturer Jonart B and VID:PID 1209:028e. It sends custom HID gamepad reports. The controls follow an Xbox-style layout, but the firmware does not provide native XInput support.

Linux enumerates the controller. Windows only partly enumerates it so far. You can try x360ce for XInput mapping, but Windows needs to detect the controller first. There is no confirmed setup procedure for Windows yet.

Files

PathPurpose
hid-controller-pcb/KiCad schematic, PCB, libraries and BOM
hid-controller-pcb/production/hid-controller-pcb.zipFabrication Gerbers
hid-controller-code/hid-controller-code/Active firmware and Makefile
Core/Src/main.c inside the firmware folderADC sampling, button mapping and report updates
USB_DEVICE/App/ inside the firmware folderUSB descriptors and HID interface
usb-backup/ inside the firmware folderOlder firmware copy; not the Makefile's source tree
assets/Photos, PCB layout and video

PCB and assembly

Open hid-controller-pcb/hid-controller-pcb.kicad_pro in KiCad. Review the schematic and layout before fabrication. The root board BOM is hid-controller-pcb/BOM.csv; production exports also include production/bom.csv and production/positions.csv. Match the BOM and placement export to the board revision you intend to assemble.

PCB layout

Use the schematic's SWDIO, SWCLK and ground nets for the ST-Link connection, together with target-voltage reference as required by your probe. Check the actual connector orientation against the schematic rather than assuming a standard header pin order.

Build

Requires GNU make, Arm GNU tools (arm-none-eabi-gcc, objcopy and size, including the C library/nano specs), and a POSIX shell for Makefile commands. Flashing requires ST-Link and STM32CubeProgrammer, with STM32_Programmer_CLI on PATH.

NOTE: The firmware folder contains both STM32F103XX_FLASH.ld and STM32F103xx_FLASH.ld. They collide on a normal Windows filesystem. Use a case-sensitive filesystem (for example, a clone inside WSL's Linux filesystem) so both files can be checked out. The Makefile selects STM32F103xx_FLASH.ld.

sh
git clone https://github.com/elitetq/hid-controller.git
cd hid-controller/hid-controller-code/hid-controller-code
make clean
make

The compiler path defaults to /usr/bin/. If your toolchain is elsewhere:

sh
make GCC_PATH=/path/to/arm-toolchain/bin

Or, if the Arm tools are already on PATH, use make GCC_PATH=. The output is build/hid-controller-code.elf, with .hex and .bin versions alongside it. Clean first so checked-in build artifacts are not reused. There is no specific compiler/programmer version recorded for this build.

Flash

Connect ST-Link to the powered target with common ground. From the firmware folder:

sh
STM32_Programmer_CLI -c port=SWD -w build/hid-controller-code.elf -v -rst

This writes the ELF, verifies it and resets the device. The Makefile's make flash target contains a machine-specific Windows programmer path; use the command above or override STMJLINKPATH with your programmer executable. If you build in WSL, make sure the programmer can access ST-Link. You can also copy the ELF to Windows and flash it with STM32CubeProgrammer there.

Check the inputs

  1. Connect the controller's USB data port to the host. On Linux, lsusb -d 1209:028e can check enumeration; then check the inputs separately.
  2. Open a gamepad input viewer. On Windows, start with Win+R > joy.cpl if the device appears there.
  3. Move both sticks through their range and back to center. Check the D-pad, face buttons, bumpers, Start/Share and both stick clicks individually.
  4. Press and release each trigger. These are digital switches: the firmware maps each trigger to 0 or 255, not an analog pressure range.
  5. If using x360ce, confirm it detects the source device before mapping controls to a virtual controller and testing in a game. Failure to enumerate must be solved before mapping can help.

If inputs are missing, compare gamepad_update_buttons() and gamepad_update_joysticks() in Core/Src/main.c with the schematic and the report descriptor in USB_DEVICE/App/usbd_custom_hid_if.c. The two stick axes are swapped/inverted in software. Check the inputs on the assembled controller, as enumeration alone does not confirm that the mappings work.

Parts

72
QtyValueFootprintReferences
15B3F-1000lib:SW_B3F-1000S1, S2, S3, S4, S5, S6, S7, S8, S9, S10, S11, S12, S13, S14, S15
1420kRResistor_SMD:R_0603_1608MetricR9, R10, R11, R12, R13, R14, R15, R16, R20, R21, R22, R23, R24, R25
50.1uFCapacitor_SMD:C_0603_1608MetricC6, C7, C12, C13, C14
40.1uFCapacitor_SMD:C_0805_2012Metric_Pad1.18x1.45mm_HandSolderC15, C16, C17, C18
41.5kRResistor_SMD:R_0603_1608MetricR3, R4, R7, R8
20RResistor_SMD:R_0603_1608MetricR17, R19
210uFlib:CAPAE530X550NC1, C10
222RResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR1, R2
230pFCapacitor_SMD:C_0603_1608MetricC2, C3
26pFCapacitor_SMD:C_0603_1608MetricC4, C5
2COM-09032lib:XDCR_COM-09032U3, U4
2LEDLED_SMD:LED_0805_2012MetricD3, D4
2R_SmallResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR27, R28
110118194-0011LFlib:10118194-0011LFJ1
110kRResistor_SMD:R_0805_2012Metric_Pad1.20x1.40mm_HandSolderR26
113kRResistor_SMD:R_0603_1608MetricR6
11uFCapacitor_SMD:C_0603_1608MetricC8
13.4Vlib:SMFA2005CAD1
132.768KHzlib:XTAL_ABS25-32.768KHZ-6-TY2
1663RResistor_SMD:R_0603_1608MetricR18
168kRResistor_SMD:R_0603_1608MetricR5
16Vlib:DIODE_VESD05A1B-HD1-GS08_VISD2
18MHzlib:ABLS-8.000MHZ-B4-TY1
1JumperConnector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ2
1RT9080-33GJ5lib:RT9080-33GJ5IC1
1STLinkConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ3
1STM32F103C8TxPackage_QFP:LQFP-48_7x7mm_P0.5mmU1

Questions

How big is the Hid controller pcb PCB?

It measures 129.3 × 113.2 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Hid controller pcb use?

72 parts, built around the COM-09032, RT9080-33GJ5, B3F-1000 and 10118194-0011LF. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Hid controller pcb KiCad files?

From the elitetq/hid-controller repository on GitHub, at the commit this page was made from: the board is hid-controller-pcb/hid-controller-pcb.kicad_pcb and its schematic hid-controller-pcb/hid-controller-pcb.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Hid controller pcb design in my own project?

Its repository states no licence, so its author keeps all rights: ask elitetq before reusing the design.

Similar boards

  • 2 layers62 × 46 mmF1c200s, the printed circuit board in 3D

    F1c200s

    Mr-Bossman/f1c200s-dev-board

    A custom development board for an soc

    64 parts16
  • 2 layers27.5 × 48.3 mmICE40DevBoard, the printed circuit board in 3D

    ICE40DevBoard

    hackclub/OnBoard

    💡 Join 1,000 teenagers and make your first PCB with a $100 grant!

    41 parts915
  • 4 layers141.7 × 134.1 mmCore board, the printed circuit board in 3D

    Core board

    calstar/le2-pcb-hardware

    96 parts1CC0-1.0
  • 2 layers72.8 × 32 mmMicro fm radio, the printed circuit board in 3D

    Micro fm radio

    dilshan/rda5807-fm-radio-module

    RDA5807M based stereo FM radio receiver

    56 parts8MIT
  • 2 layers85 × 155 mmEsp32-fan controller, the printed circuit board in 3D

    Esp32-fan controller

    merlindorin/esp32-fan-controller

    A small KiCad board to keep my home server cabinet cool. 4 PWM fans, 4 temperature probes, one ESP32.

    38 parts8MIT
  • 4 layers73.1 × 69.8 mmStm32u595-breakout, the printed circuit board in 3D

    Stm32u595-breakout

    oresat/oresat-kicad

    All things KiCAD for OreSat; libraries, tools, settings, etc.

    85 parts6