Usb Network Joystick -bm- Driver
This is the tricky part. The standard Windows USB/IP client does not handle joystick axis correctly. You need the modified HID driver.
Marta Vasquez had been writing device drivers since before USB was a twinkle in Intel’s eye. She’d tamed parallel-port zip drives, wrestled WinModems into submission, and once made a Russian space-bar joystick work with MechWarrior 2 using nothing but a logic analyzer and spite.
But the USB Network Joystick -BM- was different.
The package arrived on a Tuesday, wrapped in brown paper and smelling faintly of ozone. No return address. Just a unit number: BM-07.
“What’s that?” asked Leo, her seventeen-year-old neighbor and self-appointed protégé, peering over her shoulder.
“No idea,” Marta admitted, turning the device over. It looked like a standard fight stick: eight buttons, a four-way gate, a sturdy USB-B port on the back. But the casing was slightly warm, and the base was etched with a faded logo she didn’t recognize: BitMech Dynamics, Sunnyvale, CA (1989–1991).
“Before my time,” she muttered.
She plugged it into her test bench—an old Linux box running a custom 5.15 kernel. dmesg spat out:
usb 3-2: new full-speed USB device using xhci_hcd
usb 3-2: Manufacturer: BitMech
usb 3-2: Product: Network Joystick -BM-
usb 3-2: Number of endpoints: 0
Zero endpoints. That wasn’t just wrong. It was impossible.
“It’s not claiming any pipes,” Leo said, reading over her shoulder. “How’s it going to move data?”
Marta didn’t answer. She fired up Wireshark on the USB bus. Normally, a joystick would sit on an interrupt endpoint, happily burping HID reports every 8 milliseconds. The -BM- did nothing. No configuration descriptor. No interface association. It just sat there, powered and silent, like a dead fish.
Then she saw the ARP request.
Her eyes narrowed. She filtered Wireshark to arp and there it was—originating from the joystick’s USB controller MAC. The device was asking, in perfect Ethernet-over-USB framing: “Who has 192.168.88.2? Tell 192.168.88.1.” usb network joystick -bm- driver
“It’s not a joystick,” Marta breathed. “It’s a network interface pretending to be a joystick.”
Over the next six hours, she reverse-engineered the protocol. The -BM- didn’t enumerate as a CDC Ethernet device—that would be too easy. No, it showed up as a vendor-specific class with a single control endpoint. But if you issued a specific SET_FEATURE request (0xDEADBEEF), the device would reset and re-enumerate as a full RNDIS NIC.
After that, the real fun began.
The joystick’s buttons mapped to UDP port numbers. Button 1? Port 40001. Button 8? Port 40008. The stick’s X and Y axes were encoded in the IP header’s TTL and TOS fields. Every time you moved the stick, the device would emit a specially crafted ICMP Echo Request—a ping packet—with the joystick state embedded in the payload.
She wrote the joynet_bm driver that night. It created a virtual /dev/input/js0 device that translated those pings into standard Linux joystick events. The code was ugly, brilliant, and used a kernel thread to listen on a raw socket for ICMP packets with the magic BitMech signature.
“Why would anyone do this?” Leo asked, watching the driver spit out EV_ABS values on the terminal as she wiggled the stick.
Marta leaned back, a rare smile crossing her face. “Because in 1990, BitMech wanted to sell a joystick that could be used across a LAN. No drivers on the game machine itself—just a UDP forwarder. Plug it into any Unix workstation with networking, and your game on another machine sees it as a local device.”
“That’s insane.”
“That’s elegant,” she corrected. “They hid the complexity in the wire protocol. The stick does all the work. Your OS just needs a tiny shim.”
She submitted the driver to the Linux kernel mailing list the next morning. The response was… mixed. Greg KH called it “an abomination.” Someone from Red Hat asked if it could be backported to RHEL 8. Linus Torvalds himself replied with three words:
“Huh. That’s clever.”
Two weeks later, a user reported a bug. The -BM- would occasionally stop sending pings, freezing all input. Marta debugged for three days before realizing: the joystick’s internal clock drifted. It was using a 4 MHz crystal meant for a 8051 microcontroller, and thermal variance caused it to lose sync with USB microframes. This is the tricky part
Her fix? A kernel workqueue that sent a NOOP ping every 250 milliseconds—just enough to keep the joystick’s state machine from falling asleep.
She named the patch bm_heartbeat.
The final commit message read:
net: usb: joynet_bm: Add BitMech Network Joystick -BM- driverSupport for the 1991 BitMech -BM- joystick, which transmits joystick state via ICMP Echo Requests over USB Ethernet framing.
No physical buttons were harmed in the writing of this driver. But one kernel developer now has RSI from debugging pings.
Signed-off-by: Marta Vasquez <marta@bitmech-revival.org>
She never did find out who sent her the device. But six months later, a small package arrived at her door. Inside: a -BM- unit, serial number 001, with a handwritten note:
“This one still has the original firmware bug. Thought you’d want to see it.”
—L
Marta smiled, plugged it into her test bench, and fired up Wireshark.
The ping packets started flowing again, like a heartbeat from another century. Zero endpoints
If your computer is identifying your device as a "USB network joystick"
or an "Unknown USB Device," it usually means Windows is struggling to find the specific manufacturer drivers and is defaulting to a generic (and often non-functional) classification. This is a common issue with older or budget-friendly controllers on modern versions of Windows.
Here is a guide to help you resolve this and get your joystick working. 1. Identify the Correct Hardware ID
To find the actual driver you need, you first need to identify the device's specific hardware signature: Device Manager (right-click the Start button and select it).
Find the "USB network joystick" (likely under "Other Devices" or "Human Interface Devices"). Right-click it and select Properties Change the "Property" dropdown to Hardware Ids Copy the top string (e.g., USB\VID_XXXX&PID_XXXX
) and search for it online to find the specific manufacturer's driver. 2. Manual Driver Installation
If you have a driver file but Windows won't install it automatically: Right-click the device in Device Manager and select Update driver "Browse my computer for drivers"
"Let me pick from a list of available drivers on my computer"
Look for "Generic USB Joystick" or "HID-compliant game controller." Sometimes forcing these generic drivers can bypass the "network" error. 3. Quick Fixes for Common Detection Errors
This is the OS-specific component that makes the "Virtual Joystick" visible to games and control software.
| Feature | Linux (Host/Client) | Windows (Client) | macOS (Client) | |---------|--------------------|------------------|----------------| | Kernel-level virtual joystick | ✅ (uinput, evdev) | ✅ (via WinUSB/libusb filter) | ❌ (requires 3rd party IOKit) | | XInput emulation | ❌ (but can use xboxdrv) | ✅ | ❌ | | Force feedback | ✅ (FFB over evdev) | ✅ (via hidraw) | ❌ | | Hot-plug detection | ✅ (udev) | ⚠️ (requires service restart) | ❌ |
In the world of flight simulation, industrial robotics, and custom arcade builds, the hardware is only half the battle. The true magic lies in communication—how your physical inputs translate into digital commands. For enthusiasts and professionals dealing with specific Chinese-manufactured controller boards, one string of text often triggers both excitement and frustration: usb network joystick -bm- driver.
If you have stumbled upon this device in your Windows Device Manager (showing as an unknown device, a HID-compliant game controller with errors, or a missing network adapter), you are not alone. This article will dissect everything you need to know about the USB Network Joystick (-BM-) driver, from installation and troubleshooting to its fascinating role in low-latency remote control.