Fully Wireless · Volume 6
The Dongle's Identity, FCC Part 15, the Bench Plan and the Decisions
What USB identity a wireless gun's receiver carries and why decision D24 follows it; what the FCC's Part 15 means for a hand-held radio gun built at home and for one sold as a kit; eleven bench tests on the ADP3450; what the trial costs; and the rows proposed for the decision log
6.1 The Dongle’s USB Identity
A wireless gun has two USB faces: its own socket, used for flashing and configuration, and the dongle, which is what the PC sees during play. MiSTer, the OpenFIRE App and the hook programs find a gun by vendor ID 0xF143 and the “OpenFIRE” name (Open-Source Firmware Vol 6, 6.5). So whatever identity the dongle carries decides whether the wireless gun works with them, and whether a kit’s dongle is lawfully labelled.
The ESP32 port answers it neatly. Its dongle copies the gun’s vendor ID, product ID, manufacturer and product strings at pairing, and uses the gun’s radio MAC address as its USB serial number (Volume 3, 3.3). Three consequences:
- A stock-firmware gun’s dongle enumerates as 0xF143 / “OpenFIRE”, so MiSTer and the App find it, and the player presets P1 to P4 survive (each gun’s product ID travels to whichever dongle it pairs with).
- Decision D24 follows automatically. D24 keeps 0xF143 for now and requires an assigned vendor ID before any kit sale; FW-7 proposes asking TeamOpenFIRE first, then a product ID under Raspberry Pi’s 0x2E8A (Our Firmware Vol 6). In the clone design, changing the gun’s vendor ID changes the dongle’s with it. The dongle must not carry an identity of its own that contradicts the gun’s.
- A COM port that stays put. The serial number is fixed per gun, so Windows assigns the same COM number each time, which MAMEHooker’s player-to-COM rule needs (Open-Source Firmware Vol 6, 6.9).
Route B should copy the design, not invent another: the Nordic dongle takes its identity from the gun over the air at pairing (WL-9). A note on the 0x2E8A option: a product ID under Raspberry Pi’s vendor ID is for products built on Raspberry Pi silicon. A Nordic dongle presenting a Raspberry Pi vendor ID is a question to put to Raspberry Pi with the FW-7 request, not an assumption.
6.2 FCC Part 15: What a Radio Gun Is
Not legal advice; the kit-level analysis belongs to Licensing, IP and Kits. What follows is what the rules and the grants say, read on 19 October 2026.
A cabled light gun is an unintentional radiator under Part 15: a digital device whose emissions are a by-product. A wireless gun is also an intentional radiator: it transmits on purpose, in the 2.4 GHz band, under the rules for digital transmission systems (the grants below are all “15C”, “Digital Transmission System”). An intentional radiator sold in the US needs certification, an FCC ID, before it is marketed.
The usual way a small product meets that is a pre-certified module. Section 15.212 lets a radio module carry its own grant if it meets a list of conditions (its own shielding, buffered data inputs, its own supply regulation, a permanently attached or unique antenna, testing on its own, a label or electronic display of its FCC ID) and if it “must comply with any applicable RF exposure requirements in its final configuration”. The host product then carries a label referring to the module’s FCC ID, follows the module maker’s integration instructions, and is still tested and authorised as a digital device for its own unintentional emissions.
The phrase that matters for a gun is “in its final configuration”: RF exposure is assessed for how the device is used. A module granted for use at least 20 cm from people is a mobile configuration; a device held in the hand is portable, and the module’s grant does not cover it without further evaluation.
6.3 The Grants Behind Each Board
Table 1 — 6.3 The Grants Behind Each Board
| Board | Radio | FCC ID | What the grant says | In a hand-held gun |
|---|---|---|---|---|
| ESP32-S3-DevKitC-1 | ESP32-S3-WROOM-1 module | 2AC7Z-ESPS3WROOM1 (original grant 21 January 2022) | Single modular; Wi-Fi 2412 to 2462 MHz, 0.3597 W conducted; Bluetooth LE 2402 to 2480 MHz; “Separate approval is required for all other operating configurations, including portable configurations” | Not covered without further approval |
| LILYGO T-Dongle S3; Waveshare ESP32-S3-Pico, -Zero | Bare ESP32-S3 chip, board antenna | None read | — | No grant found; personal builds only |
| Raspberry Pi Pico 2 W | CYW43439 | 2ABCB-PICO2W (25 November 2024) | Single modular; Wi-Fi 2412 to 2462 MHz, 0.3112 W; Bluetooth 2402 to 2480 MHz, 0.0034 W; antenna “at least 20 cm from all persons” | Not covered without further evaluation |
| Seeed XIAO nRF54L15 | nRF54L15 | Z4T-XIAONRF54L15 (31 July 2025) | Single modular; 2402 to 2480 MHz, 0.0049 W; “Device meets SAR Exclusion for Portable use.” | Covered as a portable device, subject to the co-location condition |
| Raytac MDBT50Q (nRF52840 module) | nRF52840 | SH6MDBT50Q (2018; changes 2020) | Single modular (limited on one change); 2402 to 2480 MHz, 0.0066 W; “This is a portable device” | A certified basis for a kit dongle; whether the MDBT50Q-RX on Adafruit’s USB key is covered was not confirmed |
| Nordic nRF52840 Dongle | nRF52840 | None found | Nordic staff on Nordic’s forum: a development tool, “compliant, but it is not certified” | Bench only |
Grant data from the Raspberry Pi grant document and fccid.io summaries, read 19 October 2026.
Two observations decide the kit route. First, the only gun-side radio read here whose grant covers hand-held use is the Nordic module. Second, the low-power Bluetooth-class radios (a few milliwatts) are the ones that clear the portable exclusion easily; the Wi-Fi radios, at about 0.3 W, are the ones whose grants exclude it. A light gun does not need 0.3 W to reach a dongle three metres away, and the ESP32 port’s 17 dBm (50 mW) is still an order of magnitude above a Nordic part at 0 to 8 dBm.
6.4 Channels 12 and 13
Both Wi-Fi grants above list centre frequencies 2412 to 2462 MHz, Wi-Fi channels 1 to 11. The ESP32 port’s gun sets its country to “IT” with channels 1 to 13, with the comment that this is needed “so channels 12 and 13 work”; the dongle’s scan covers all thirteen and picks the quietest. In a US house, where most access points stay on 1 to 11, channels 12 and 13 are often the quietest, so the scan will tend to choose them. Operating there is outside the frequency range on the module’s US grant.
For the D25 trial this is a thing to record (W2), not a reason to stop: it is a home bench, one or two units. For anything given to anyone else, the channel list must be limited to 1 to 11 in the US (WL-4). In the port that is a compile-time change (its country table and the scan’s channel range) to a firmware the project has agreed not to maintain (D30), which is one more reason the kit route is not the port.
6.5 Built at Home, Sold as a Kit
Built at home. Section 15.23 exempts from authorisation devices that are not marketed, are “not constructed from a kit”, and are built in quantities of five or fewer for personal use; the builder is still expected to meet the technical standards as closely as practicable, and section 15.5’s no-harmful-interference condition applies. Guns built by Jeff and Michael for their own use, on any of the boards above, fall here, provided they do not interfere with anyone, which is a further reason to keep to channels 1 to 11.
Sold as a kit. The exemption excludes kits explicitly, and a kit is marketed. A kit that contains a transmitter therefore needs that transmitter to be authorised. The practical route is: a pre-certified module whose grant covers the way the gun is used (portable), mounted as its integration instructions say; the kit’s own label referring to the module’s FCC ID; the kit tested as a digital device under Part 15 Subpart B; and the same for the dongle. On that reading:
- A Pico-fork gun with a XIAO nRF54L15 radio and an MDBT50Q-class dongle is a credible kit (WL-7).
- An ESP32-S3 gun on a WROOM-1 module would need further RF-exposure approval for portable use; one on a bare-chip board would need a grant of its own.
- Shipping no radio, and letting the buyer add one, does not obviously escape the rules for a product designed around one; that is a question for Licensing, IP and Kits.
6.6 The Bench Plan

All on the Analog Discovery Pro ADP3450 and the bench’s programmable supplies. Tests W1 to W4 and W8 to W11 need no firmware change to the ESP32 port, which keeps D30’s “as released”. W3 and W5 use test builds or Nordic’s samples.
Table 2 — 6.6 The Bench Plan
| # | Test | Method | Pass, or what it decides |
|---|---|---|---|
| W1 | Dongle identity | lsusb -v on Linux (or USB Device Tree Viewer on Windows) with a paired stock gun; and with the dongle alone | VID 0xF143, “OpenFIRE”, serial = gun MAC; nothing enumerates before pairing |
| W2 | Channel chosen | Read the T-Dongle’s LCD after each plug-in, ten plug-ins, morning and evening | Record how often 12 or 13 is chosen (Section 6.4) |
| W3 | Link latency, gun to host | Test builds toggle a pin at hand-off to the radio and at the USB write; DIO 1 to DIO 2, 2,000 reports | Mean and tail against Volume 4’s 0.8 ms / 1.3 ms |
| W4 | End-to-end, cabled against wireless | Trigger on DIO 0, photodiode on CH1, a test page that flashes on mouse-down; 500 shots cabled (the same ESP32 gun on its USB cable), 500 through the dongle | The difference of the two distributions is the link’s real cost to the player; expected about +0.3 ms mean |
| W5 | Nordic link alone | Nordic’s LLPM sample on an nRF52840 Dongle and an nRF54L15 DK (it reports latency); ESB transmitter and receiver samples with a pin toggled at send and at receive, DIO 0 to DIO 1, 10,000 packets | Latency and loss of route B’s link before any light-gun code (WL-2) |
| W6 | Power | Gun on the programmable supply at 22.2 V through the buck, current logged: idle, aiming, autofire; ESP32 gun and Pico + XIAO bridge | Replaces Volume 5’s 0.80 to 0.88 W and 0.51 W estimates |
| W7 | Brown-out under recoil | Radio board 3.3 V and coil current on two channels during full-rate autofire, with a thin then a 24 AWG solenoid lead | No dip that resets the radio; no link drop |
| W8 | Loss and bursts in the room | Log the absolute-mouse events with timestamps on Linux (evdev) at 209 Hz; count gaps over 10 ms. Cases: 2.5 m clear; gun in the shell, held; Wi-Fi saturated on the same channel by a file transfer; microwave running | Loss rate and longest burst per case (Volume 4’s 5 % placeholder) |
| W9 | Force-feedback commands | A script sends 1,000 F0x2x1 single-pulse commands through the dongle’s serial port; count coil pulses on the ADP3450 | Command loss rate; must be zero in the clear case |
| W10 | Antenna position | Log RSSI at the dongle (or a TinySA at its position) for each place in Volume 5, 5.7 | Choose the position |
| W11 | D+ with no host | ESP32 gun on its pack, USB lead to a PC that is switched off; measure D+ to ground | Whether the ESP32-S3 shares the RP2040’s forced pull-up (Wireless Power Only Vol 3, 3.3) |
6.7 What It Costs
Prices from the seller’s own page on 19 October 2026 unless marked; the pack, protection and charger are LiPo Batteries’ and are not repeated.
Table 3 — 6.7 What It Costs
| Item | For | Price and source |
|---|---|---|
| ESP32-S3 dongle: LILYGO T-Dongle S3 (sold out), or Waveshare ESP32-S3-Zero | Route A trial | $11.99 LILYGO; $5.49 to $7.99 (Open-Source Firmware Vol 6) |
| ESP32-S3 gun board: DevKitC-1 N16R8 (P-RE23) or Waveshare ESP32-S3-Pico | Route A trial | ESP32-S3-Pico $8.99 to $9.99 (Open-Source Firmware Vol 6); DevKitC-1 per Reference Electronics Vol 2 |
| Seeed XIAO nRF54L15 | Route B gun-side radio | $9.99, Seeed |
| nRF52840 Dongle | Route B bench dongle; W5 | At order time (distributor pages refused automated reading) |
| nRF54L15 DK | W5, if not already on hand (D38) | About $39 by a search summary; at order time |
| Pololu D36V6F5 buck | Logic rail | $5.95, Pololu (LiPo Batteries Vol 7) |
| USB 2.0 extension, short | Dongle placement | On hand |
| BPW34-class photodiode | W4 | On hand or a few dollars |
The D25 trial costs about $15 to $22 in boards. Route B’s bench costs one XIAO and one nRF52840 Dongle if the Nordic boards on hand do not already include them.
6.8 Proposed Decision Rows
All Proposed; none decided.
Table 4 — 6.8 Proposed Decision Rows
| # | Question | Options | Proposed | Why / why not | Where |
|---|---|---|---|---|---|
| WL-1 | The wireless trial | ESP32 port + dongle; Nordic samples; Pico W | ESP32 port + dongle as released (D25, D30), tests W1 to W4, W7 to W11 | Only route that plays today; answers “good enough?” | Vols 3, 6 |
| WL-2 | The kit’s wireless route | ESP32 port; Pico fork + Nordic bridge; Nordic-only port; Pico W | Pico fork + XIAO nRF54L15 bridge over UART + nRF52840-class dongle; bench the link first (W5) | Keeps D10 and D2; ~0.01 W; portable grant. ESP32: not the fork, ~0.35 W, grant excludes portable. Nordic-only: a port of the firmware. Pico W: no serial, 20 cm grant | Vol 3 |
| WL-3 | Link protocol for route B | ESB; LLPM; BLE + SCI; BLE HID to the PC | ESB with force feedback in ACK payloads; LLPM the alternative | ESB: no interval, ready return channel. LLPM: 0 to 1 ms more but hopping and bonding built in. SCI: needs both ends anyway. BLE to PC: no serial, 7.5 ms or more | Vol 2 |
| WL-4 | Wi-Fi channels in the US | 1 to 13 as the port ships; 1 to 11 | 1 to 11 for anything beyond the personal bench | Both module grants read cover 2412 to 2462 MHz only | Vol 6 |
| WL-5 | Logic supply | Buck before or after the LM5060; into VBUS or VSYS | Buck after the LM5060, into VSYS through an ideal diode (WP-8 parts); the fork’s VBUS-sense fix if a USB socket is kept | Off means off; UVLO protects the pack; no back-feed | Vol 5 |
| WL-6 | On and off | Slide switch; soft latch on LM5060 EN with auto-off | Soft latch with a firmware auto-off (route B); slide switch on the ESP32 trial | A cable-less gun left on is flat in 7 to 11 hours | Vol 5 |
| WL-7 | Radios in a kit | Bare-chip boards; WROOM-1 module; Pico 2 W; XIAO nRF54L15; MDBT50Q | Only modules whose grant covers portable use (XIAO nRF54L15 gun side, MDBT50Q-class dongle); bare-chip ESP32 boards for personal builds only | §15.23 excludes kits; portable exposure | Vol 6 |
| WL-8 | Several guns | One dongle per gun; one dongle for four | One dongle per gun | Each gun stays its own USB device, as MiSTer and the hook programs expect | Vol 4 |
| WL-9 | Dongle USB identity | Dongle’s own; cloned from the gun | Cloned from the gun, as the ESP32 port does; D24 applies through the gun’s firmware | P1 stays P1; one place to change the VID | Vol 6 |
6.9 Open Questions
- Which Nordic boards are on hand (D38)? Model and board numbers. If there is an nRF52840 Dongle or DK among them, W5 can run with no purchase.
- Adopt WL-2 as the direction for a wireless kit, with the ESP32 trial (WL-1) as the “is it good enough” test?
- Would a kit ever include the wireless option? If not, WL-4 and WL-7 bind only personal builds.
- Soft power latch (WL-6): a separate power button, or a second pole on the trigger to wake the gun?
- Is a spare UART pair free on the kit-camera carrier for the radio bridge (Reference Electronics Vol 2’s pin budget)?
6.10 What Could Not Be Verified
- The Nordic boards’ models (D38).
- Prices of the nRF52840 Dongle and nRF54L15 DK (seller pages refused automated reading; a search summary gave about $39 for the DK).
- FCC status of the LILYGO T-Dongle S3, Waveshare ESP32-S3 boards and the MDBT50Q-RX variant; the nRF52840 Dongle’s status is from Nordic’s forum, not a grant search.
- ESP-IDF’s internal send and receive times; the PC’s Bluetooth LE interval and stack latency; whether the ESP32 port acknowledges serial bytes at the application level.
- All of Volume 5’s power figures beyond the datasheets’ radio currents.
- Whether the ESP32-S3’s USB driver keeps D+ quiet with no host (W11).
- The commercial XGunner’s link, battery and latency (no maker page found).
- Whether the carrier has a free UART for route B.
Sources
- Alessandro Satanassi, OpenFIRE-Firmware-ESP32,
dongle/src/main.cpp,shared_lib/OpenFIRE_Wireless/ESP32/OpenFIRE_Wireless.cpp(read 2026-10-19). - FCC grant, FCC ID 2ABCB-PICO2W, Raspberry Pi Trading Ltd, TCB Eurofins, 25 November 2024 — https://pip-assets.raspberrypi.com/categories/1090-approvals/documents/ (read 2026-10-19).
- FCC ID summaries, fccid.io: 2AC7Z-ESPS3WROOM1, Z4T-XIAONRF54L15, SH6MDBT50Q (read 2026-10-19).
- 47 CFR 15.23 and 15.212, Legal Information Institute, Cornell — https://www.law.cornell.edu/cfr/text/47/15.23, https://www.law.cornell.edu/cfr/text/47/15.212 (read 2026-10-19).
- Adafruit, nRF52840 USB Key w TinyUF2 Bootloader, product 5199 (read 2026-10-19).
- Nordic Semiconductor DevZone threads 39464 and 41155 (forum; secondary).
Comments (0)