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- driver

Support 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

The ‘-bm-’ driver is powerful, but it is not the only player.

For the budget-conscious enthusiast who needs raw performance, the open-source ‘-bm-’ driver remains unbeatable.

In the world of flight simulation, drone piloting, and industrial remote operation, the physical connection between a joystick and a computer has traditionally been a limiting factor. But what if you could control a joystick located hundreds of feet away, through walls, or across a building using your existing Ethernet network?

Enter the niche but powerful category of the USB Network Joystick, and specifically the enigmatic ‘-bm-’ driver that has become a cornerstone for advanced users.

Whether you are a sim racer trying to eliminate USB cable clutter, a security professional operating a PTZ camera from a remote bunker, or a developer building a custom cockpit, understanding this driver is crucial. This article will unpack everything from basic installation to advanced kernel-level tweaks.

This module is responsible for discovering the device and maintaining the connection.

This paper explores the development cycle of a host-side driver for the "USB Network Joystick -BM-" class of devices. These devices, commonly utilized in robotics (specifically Botmate/Benchmark scrubbers) and industrial remote control applications, operate by encapsulating USB Human Interface Device (HID) reports within network packets (TCP/UDP). The development of a driver for such hardware requires bridging the gap between network socket programming and kernel-level input subsystems. This document outlines the translation of network data streams into standard OS input events, addressing latency jitter, packet loss handling, and seamless integration with modern operating systems.


To ensure your USB Network Joystick (-BM-) works perfectly:

The world of specialty drivers is a purgatory of frustration and reward. The usb network joystick -bm- driver is no exception. While it requires the patience of a saint and the technical know-how of a systems administrator, getting it right transforms a bricked circuit board into the most responsive, versatile controller in your hangar.

Disclaimer: Use at your own risk. Always scan driver files with Windows Defender before installation.


Traditional input devices communicate via physical buses such as USB or Bluetooth. However, industrial and commercial robotics increasingly require low-latency control over local area networks (LAN) or Wi-Fi. The "BM" (Benchmark) series of network joysticks functions as a USB-over-IP peripheral, appearing to the host as a network node rather than a physical USB device.