Usb Network Joystick -bm- Driver Here

The "BM" buffer management is the driver’s crown jewel. Without it, dropped packets cause abrupt zero-input or stuck buttons. With it, the driver can tolerate up to 30ms of network jitter or 5% packet loss while maintaining stable control. Measured over Gigabit Ethernet, end-to-end latency (physical motion → host driver report) stays under 5 ms. Over Wi-Fi, 10–20 ms is typical.

However, the driver introduces subtle trade-offs:

This is the tricky part. The standard Windows USB/IP client does not handle joystick axis correctly. You need the modified HID driver.

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.

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.”

“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. usb network joystick -bm- driver

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.

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. The "BM" buffer management is the driver’s crown jewel