Controls and Inputs · Volume 7
Feedback, Accessibility and the Input Map — What the Gun Tells the Player, Who Else Can Play It, and Every Control on One Page
Kick, rumble, light and an ammo count close the loop from game to hand. A light gun is also unusually easy to open up to players a gamepad shuts out: a lighter trigger, a hold-to-fire selector, a pedal jack that takes any assistive switch. Then the whole input map, and the decision rows this dive proposes

7.1 Closing the Loop
A light gun is an input device with an unusually rich output side. Every channel by which it tells the player something is owned by another dive; this section only lists them and says what each means for the controls.
Table 1 — 7.1 Closing the Loop
| Channel | What it tells the player | Owned by |
|---|---|---|
| Recoil (solenoid kick) | a shot was fired | Solenoid Recoil |
| Rumble | an off-screen shot, damage, a game event | Motors and Rumble |
| Moving ejection port | a shot, visibly | Moving Ejection Port |
| Status light (NeoPixel) | the gun’s mode and profile; the profile colour is a per-profile setting | Open-Source Firmware, Volume 5 |
| OLED | pause-menu text; life and ammo when the game sends them | 7.3, and Open-Source Firmware, Volume 6 |
| The game | everything else | the game |
Two interactions with the controls are worth stating. First, the selector (Volume 2, §2.5) is the player’s switch for the strongest of these channels: SAFE turns the recoil off without touching the game. Second, the recoil is also a disturbance to the controls: a kick can move a lever or a slide that is not held firmly by its spring (Volume 2, §2.8; Volume 6, §6.7). The feedback channels and the input mechanisms have to be tested together.
7.2 The Feel of Each Control as Feedback
The most immediate feedback a gun gives is mechanical, before any electronics: the click of a switch, the wall and break of a trigger, the stop at the end of a pump stroke. Each one tells the player that an input has happened, without looking.
- A snap-action switch gives a click at the instant it operates, because the snap is the electrical event (Volume 4, §4.3).
- The Hall trigger gives none of its own; the detent provides the click, and the firmware is calibrated to fire at it (Volume 4, §4.5). If the two drift apart, the gun fires at a moment the finger did not feel, which is the worst kind of feedback: wrong.
- A pump without a stop and a detent at the rear gives the player no way to know the stroke counted (Volume 6, §6.7).
- The five-way switch’s centre press needs about twice the force of its directions (Alps: 2.35 N against 1.23 N), so a thumb that presses Home knows it did.
7.3 The Ammo Count
The owner has decided to keep the OLED on the first carrier, “at least for now, as a later ammo-count display” (decision D37, 2026-10-19). The firmware already has that function. Open-Source Firmware, Volume 6 lists OpenFIRE’s serial commands for it: MDx1, x2 and x3 select life only, ammo only or both on the OLED, and FDAx<n> and FDLx<n> set the ammo and life counts. The counts come from the game, through an output tool such as MAMEHooker or QMamehook, so the ammo count works only in games whose outputs those tools expose.
For the controls, the ammo count changes one thing: the reload becomes a visible event. A player who presses the magazine catch and sees the count refill learns the gun’s reload is real. A count that does not refill (because the game reloaded on something else, or not at all) is the first sign that a reload mapping is wrong.
7.4 Accessibility
A light gun can be opened to more players than a gamepad, because so many of its parameters are settings rather than mouldings. What follows lists what this build already has, and the cost of each.
Hands and grip strength.
- Trigger weight. The Hall trigger’s pull is a spring, and the build makes it swappable (Volume 4, §4.8). A player with little grip strength can have a pull far lighter than any microswitch trigger; the firing point is still set at the detent.
- Autofire. The selector’s BURST position makes a held trigger fire continuously (Volume 2, §2.5), which replaces a hundred pulls with one hold. On the kit-camera board, where the selector’s autofire contact has no pin, the same setting is in OpenFIRE’s pause menu (Open-Source Firmware, Volume 5, §5.9).
- One hand. H&K describes the real MP7 as able to be fired “with one or both hands”. Every input used during play (trigger, reload, A) is on the firing hand (Volume 2); the reload can also go to a foot.
- Fewer buttons. OpenFIRE’s Simple Pause Menu lets a gun with few buttons drive the menus with A, B and the trigger, and Low Buttons Mode makes A and B act as Start and Select off-screen (Open-Source Firmware, Volume 5). Every button’s meaning can be remapped in the App (Volume 6).
Feet, or no feet. The pedal jack (Volume 6, §6.4) takes any switch with a 3.5 mm plug that closes tip to sleeve. That is the convention of the Xbox Adaptive Controller’s switch inputs, Microsoft’s controller for players with limited mobility, which has “Nineteen 3.5mm ports” for them. So the very large range of assistive switches made for it (large push pads, sip-and-puff switches, chin and head switches) works as this gun’s Pedal input without any adapter. A player who cannot use a pedal can reload or take cover with whatever switch suits them; a player who cannot hold the gun up for long can rest it and use one.
Left-handed players. The real MP7 is fully ambidextrous; the light gun mirrors the magazine catch and A (Volume 2, §2.8), which are the in-play controls a left-handed player needs on the other side.
Hearing and sensory load. A solenoid kick is loud: the Time Extension review of the Sinden found its default recoil “so strong it often drowns out the game audio”. The selector’s SAFE position, and OpenFIRE’s separate rumble and solenoid toggles, let a player keep the aiming and drop the noise.
Eyes. The status light’s profile colours are red, green, blue and magenta by default (Open-Source Firmware, Volume 5); red and green are the pair most often confused in colour-vision deficiency. The OLED shows the profile name in pause mode, which is the unambiguous cue. Choosing profile colours that differ in brightness as well as hue costs nothing.
7.5 The Input Map
The complete map for the printed MP7. Pins are from Reference Electronics, Volume 2, §2.5, except the Autofire Switch on GP15, proposed here. Default reports and debounce times are OpenFIRE v6.2’s (OpenFIREprefs.h; Open-Source Firmware, Volume 6, §6.3).
Table 2 — 7.5 The Input Map
| Input | Control on the MP7 | Switch | Pull-up | Pin (stopgap) | Pin (kit camera) | Firmware function | Default report (mouse mode) | Debounce |
|---|---|---|---|---|---|---|---|---|
| Trigger | trigger | DRV5056A4 Hall (fork) or DRV5023 (stock) | — (sensor output) | GP26 | GP26 | Trigger | left mouse button | 15 ms (stock); none in the fork (CI-6) |
| Reload | magazine catch, hard stop | D2F-01F | 3.3 kΩ external | GP2 | GP2 | Button C | mouse button 4 | 15 ms |
| A | thumb button, left (and right, in parallel) | B3F-1000 | internal | GP0 | GP0 | Button A | right mouse button | 15 ms |
| B | bolt-catch lever | D2F-01F | 3.3 kΩ | GP1 | GP1 | Button B | middle mouse button | 15 ms |
| D-pad | five-way switch, left panel | SKRHABE010 | internal | GP6–GP9 | GP6–GP9 | D-Pad | gamepad D-pad (v6.2 table) | 20 ms |
| Home | five-way centre press | SKRHABE010 | internal | GP5 | GP5 | Home Button | pause mode | 15 ms |
| Start | charging handle | D2F-01F | 3.3 kΩ | GP3 | GP3 | Start | player start key (1 for P1) | 20 ms |
| Select | stock release lever | D2F-01F | 3.3 kΩ | GP4 | GP4 | Select | player coin key (5 for P1) | 20 ms |
| Pump | sliding fore-grip, rear stop (optional) | D2F-01F | 3.3 kΩ | GP13 | GP21 | Pump Action | right mouse button | 15 ms |
| Pedal | 3.5 mm TRS tip | pedal’s own, gold fitted | 3.3 kΩ | GP14 | GP22 | Pedal | mouse button 4 | 15 ms |
| Alt Pedal | TRS ring | — | — | unwired | unwired | Alt Pedal | mouse button 5 | 15 ms |
| Recoil on/off | selector SAFE / SEMI | D2F-01F on a cam | 3.3 kΩ | GP12 | GP20 | Solenoid Switch | toggle | — |
| Autofire | selector BURST | D2F-01F on a cam | 3.3 kΩ | GP15 | none | Autofire Switch | toggle | — |
Notes on the map:
- Button C and Pedal send the same report by default (mouse button 4), so the magazine catch and the pedal both reload in any game that binds it. In gamepad mode they differ (A and X).
- A and Pump send the same report by default (right mouse button). A game that uses right-click for a grenade will throw one on every pump. Remap one of them in the App.
- The IMU (D36) and the OLED (D37) sit on the peripheral I²C bus and take no input pins.
- Connectors: the D-pad and Home on one six-way JST PH from the panel’s small PCB (Reference Electronics allocates five-way for the D-pad; Home adds one); the catch, B and the selector’s two contacts on one lead from the trigger-guard area; Start and Select on one from the rear; the pump on its own. The groups follow the shell, which Reference Electronics, Volume 4, §4.8 asks for (“grouped by location in the shell”).
7.6 What to Buy for the First Gun
Prices from LCSC’s and Adafruit’s own pages, 2026-10-19 (Volume 3, §3.9; Volume 6, §6.3).
Table 3 — 7.6 What to Buy for the First Gun
| Part | Quantity (with spares) | Unit price | Line |
|---|---|---|---|
| Omron D2F-01F (LCSC C403989) | 10 | $0.5377 (10+) | $5.38 |
| Omron B3F-1000 (LCSC C93157) | 5 (minimum order) | $0.1874 | $0.94 |
| Alps SKRHABE010 (LCSC C139794) | 2 | $0.78 | $1.56 |
| 3.3 kΩ resistors, 0603 | 10 | (any) | |
| 3.5 mm TRS panel or inline jack | 1 | (any) | |
| Adafruit Foot switch (423) | 1 | $7.50 | $7.50 |
| Total, switches and pedal | about $15.40 before shipping |
The Hall sensor and its magnet are on Reference Electronics, Volume 9’s bill of materials. Springs for the trigger, the detent plunger and the stainless ball are printed-build parts.
7.7 Proposed Decision Rows
For the decision log (Light-Guns/DECISIONS.md); none is decided until the owner rules.
Table 4 — 7.7 Proposed Decision Rows
| # | Choice | Candidates | Pick | Status | Why, and why not the others | Vol |
|---|---|---|---|---|---|---|
| CI-1 | Input set | arcade minimum; OpenFIRE default set; + sticks; + more buttons | OpenFIRE default set, Alt Pedal unwired, no sticks | Proposed | Covers every genre but GunCon 3 sticks; sticks need two ADC pins; extra buttons have no firmware function | 1 |
| CI-2 | Placement on the MP7 | real controls reused; GunCon-style side buttons | Catch = reload, selector = recoil/autofire, bolt catch = B, charging handle = Start, stock lever = Select, five-way switch behind the selector, A at the thumb | Proposed | Uses H&K’s placement; in-play inputs on the firing hand; rare inputs where a squeeze cannot press them | 2 |
| CI-3 | Microswitch pull-up | RP2040 internal (41–66 µA); external 3.3 kΩ (1 mA) | 3.3 kΩ external on every microswitch input | Proposed | Omron’s minimum applicable load is 1 mA for gold contacts, 100–160 mA for silver; internal pull-up is far below both. Affects Reference Electronics Vol 4’s circuit | 3 |
| CI-4 | Switch parts | V-15-1C25; D2F; D2F-01F; SS-01; B3F-1000/-1002/-1005; SKRHABE010; four tact switches | D2F-01F for every lever; B3F-1000 for A; SKRHABE010 for D-pad + Home | Proposed | Gold contacts and low force for levers, one part number; longest-life tact force; one part for five inputs | 3 |
| CI-5 | Trigger firing point | fixed 50/40 % of span; three-point calibration | Calibrate rest, break and full; fire just past the felt break | Proposed (fork) | Shot and break coincide whatever the detent’s printed position | 4 |
| CI-6 | Trigger debounce in the fork | button library (32 reads + 15 ms); ADC threshold hysteresis only | Hysteresis only; bypass the button library | Proposed (fork) | A contactless sensor cannot bounce; removes the 32-read delay | 5 |
| CI-7 | Pedal connection | Sinden USB pedal; jack on the gun; jack at the cable’s far end | 3.5 mm TRS (tip Pedal, ring Alt Pedal); jack at the far end via spare GX pins, else on the gun | Proposed | One cable from the gun; any assistive switch fits. Needs GX pin allocation (Power Supplies, Fully Wired) | 6 |
| CI-8 | Pump | sliding fore-grip; charging handle; none; IMU flick | Optional sliding fore-grip, one D2F-01F at the rear stop | Waiting on Jeff | The real MP7 has no pump; a realism compromise to be decided | 6 |
| CI-9 | Trigger feel | spring only; spring + detent; spring + unwired microswitch | Spring + non-magnetic detent + two set-screw stops; swappable spring, start near 5 N | Testing | A Hall sensor has no wall; detent gives one without wear; pull weight to be chosen by feel | 4 |
| CI-10 | Autofire Switch pin | none (pause menu); GP15 | GP15 on the stopgap board; pause menu on the kit-camera board | Proposed | GP15 is the stopgap budget’s one spare; the kit-camera budget has none | 1, 2 |
7.8 Owed Measurements
Ranked by what they would change:
- The run-mode button latency (Volume 5, §5.9): the one number that decides whether the stock button filter needs changing.
- The Hall trigger’s force-travel curve with its detent, against the sensor output (Volume 4, §4.9): proves the firing point sits at the break.
- A solenoid kick against every lever input (Volume 2, §2.8): finds a catch or slide that the recoil moves.
- Bounce captures of each switch type, and the pedal at the end of its cable (Volume 5, §5.9).
- The long-run micro-load test of a D2F-01F on the internal and the external pull-up (Volume 3, §3.4).
- The printed test grip with both builders’ thumb reach marked (Volume 2, §2.7).
7.9 What Could Not Be Verified
- Which games expose ammo counts through MAMEHooker or QMamehook was not surveyed.
- No survey of assistive-switch types against the 1.8 V pull-up the Xbox Adaptive Controller uses versus this gun’s 3.3 V was made; a passive switch closure works on both, but a powered assistive switch with an active output should be checked against 3.3 V before use.
- The colour-vision point is general knowledge, not a measured study of the OpenFIRE status light.
Sources
- TeamOpenFIRE, OpenFIRE-Firmware v6.2,
OpenFIREprefs.h(button table), read 2026-10-19; and the Open-Source Firmware dive, Volumes 5 and 6. - Reference Electronics dive, Volumes 2, 4 and 9.
- Microsoft, Xbox Adaptive Controller product page, https://www.xbox.com/en-US/accessories/controllers/xbox-adaptive-controller (read 2026-10-19).
- Adafruit Learning System, DIY Adaptive Game Controllers, “XAC Standards”, https://learn.adafruit.com/diy-adaptive-game-controllers/xac-standards (read 2026-10-19).
- Time Extension, Sinden Light Gun review (read 2026-10-19).
- Heckler & Koch, MP7 A1 Operators Manual (fax 2011), via the H&K MP7 dive’s research file.
- Alps Alpine, SKRHABE010 product page (read 2026-10-19).
- LCSC and Adafruit product pages as listed in Volumes 3 and 6 (read 2026-10-19).
Comments (0)