TL: Modify a driver's trigger¶
FAST Serial Protocol: Overview & First Steps
This documentation section is about the FAST Serial Protocol (FSP) commands, which are the low-level commands a host computer sends to a FAST board. Most FAST Pinball makers do not need to know about these details, since the pinball game framework (such as the Mission Pinball Framework) handles this communication for you.
TL: command modifies how a driver is triggered and/or manually triggers it to fire.
Nano Controllers use
The FAST Nano Controller uses the letter
N for switch & driver-related commands instead of
L. So everything here applies to the Nano too, except the commands are
This command only works for existing drivers which have been previously configured using the
DL: command. (If you're not familiar with the
DL: command, read about it first, including the section on how FAST drivers work.)
Once configured, a driver's "trigger" is whatever causes it to activate. For hardware-controlled drivers, that's a switch in the machine changing state, and for software-controlled drivers, that's using this command itself. (So what happens when a driver is actually triggered? That depends on the driver mode you configured with the
Some examples of trigger-related things you can do with the
TL: command include:
- Manually fire a driver (eject a ball, pulse a magnet, enable a motor, reset targets, pop a bumper during ball search, etc.)
- Disconnect a driver from its autofire switch (disable pops, slings, and flippers during tilt or game end)
- Connect a driver to its autofire switch (enable flippers, pops, etc. on ball start)
- Changes the switch a driver uses for autofire actions (swapped flipper button "drunk mode")
All of these actions could, in theory, be achieved by sending a new driver config via the
DL: command, however, using the
TL: command is preferred. The main reason for this is since the
DL: command destroys the existing driver object, any running timers (cool down, rapid fire, pwm times) or transitions (switch debouncing) in process are hard killed, and the driver is completely reset. (For example, if you applied a new
DL: command to a flipper driver while the player was holding the button, the flipper would deactivate since it was killed and then reactivate once the new one got set up.) The
TL: command just changes the trigger for an existing running driver, so all the timers and other processes stay intact.
TL: command is much faster. (The
TL: command will typically return a
TL:P response in 1-2ms, versus 10-30ms when a
DL: command is used to set up a new driver object.)
FAST driver number, zero-based, in hex. (Remember all values in the FAST Serial Protocol are in hex.)
A value which is used to manually trigger this driver or to enable/disable physical switch control
0= Sets the driver to automatic (hardware-controlled) mode, meaning the driver will fire when its associated switch changes state.
1= Manually "tap" the driver, used to manually fire pulse-type driver modes (eject a ball, reset drop target, fire the knocker). This command does not change the prior automatic setting and the driver stays in whatever state it was before this command manually fired it.
2= Turn the driver off and disconnect it from its physical switch (disable an autofire driver during tilt, after game, turn off a motor, etc.)
3= Turn the driver on, used with hold-type driver modes (turn on a motor, enable the bill validator, etc.) If the driver was set for automatic mode, this will disable the automatic mode as well.
Geek dive on how the
TL: command really works
Technically-speaking, this control value temporarily overrides portions of the trigger bitmask for a driver which had been previously configured via the
DL: command. Here's that trigger bitmask again:
BIT 7 6 5 4 3 2 1 0 [DISABLE_SW][MANUAL][INV_SW2][INV_SW1][ONE_SHOT][NOT USED][NOT USED][DRV_ENA]
And here's how the various
TL: control modes modify this bitmask for the driver.
0= Auto, clears bit 6 (
MANUAL) and 7 (
1= Manual tap, sets bit 3 (
2= Driver off, sets bit 7 (
DISABLE_SW), clears bit 6 (
3= Driver on, sets bit 6 (
MANUAL) and 7 (
This parameter is optional and not commonly used.
Changes the physical switch associated with a driver's autofire configuration. This value will completely replace and overwrite whatever switch value was sent via the original
DL: command. To change back to the original switch, send another
TL: command with the original switch numbers.
This value is the FAST switch number, zero-based, hex. For example,
TL:10,00,16 changes the switch that controls Driver 10 to switch 16.
In practical use, this could be used to implement a "novelty flipper" modes. You could use the
TL: command for each flipper driver to:
- Swap the left and right flipper buttons that control the driver (swapped flippers)
- Disable the hold coil while keeping the main coil configured normally (no hold flippers)
(If you want to change the flipper strength (weak flippers), or invert the switches (flippers up by default, push button to lower them), you would need to send new
If you want to see examples of how the
TL: command is used and how it relates to the
DL: command, we have examples for common uses like pop bumpers and flippers in our programming guide.
Documentation Feedback? Requests? Confused?
Hi! I'm Brian, and I'm responsible for the documentation at FAST Pinball. If you have any feedback, requests, corrections, ideas, or any other thoughts about the docs, please let me know!
You can email me at email@example.com. I maintain this site in my spare time, so there might be a week or so delay if you email me.
If you have a more pressing need, reach out to us via Slack, or email Aaron Davis.
N or > jump the next page, P or < for previous, search with S or ?