Skip to content

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.

If you're writing your own game framework, read the overview of how FSP works and how to connect first.

The TL: command is valid for FAST Neuron and Retro controllers. The FAST Nano Controller uses the command TN: instead, but everything else is the same.

The TL: command modifies how a driver is triggered. Or, in simpler terms, it's how you manually fire a driver you already configured, or how you disable a driver between balls, etc.

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. (The activation itself, such a pulse, latch, flip-flop, etc., is configured as part of the DL: command.)

The TL: command changes the trigger, which in a practical sense includes:

  • Manually fire a driver (eject a ball, pulse a magnet, enable a motor, reset targets)
  • Disconnect a driver from its autofire switch (disable pops, slings, and flippers during tilt)
  • Connects a driver to its autofire switch (enable flippers on ball start)
  • Changes the switch a driver uses for autofire actions (reversed flipper "drunk mode")

All of these actions could be used 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. (So for example if you applied a new DL: command to a flipper driver while the player was holding the button it, 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.

Also the TL: command is much faster.

Command Syntax

TL:<DRIVER_ID>,<CONTROL>,<SWITCH_ID><CR>

<DRIVER_ID>

FAST driver number, zero-based, in hex. (Remember all values in the FAST Serial Protocol are in hex.)

<CONTROL>

Used to manually trigger this driver, or to enable/disable physical switch control

  • 0 = Auto, clears manual control and goes back to whatever was configured via DL:
  • 1 = Tap the driver (eject a ball, reset drop target, fire the knocker)
  • 2 = Turn the driver off (disable for tilt, after game, turn off a motor, etc.)
  • 3 = Turn the driver on (turn on a motor)

Some practical examples:

A pop bumper, you would configure using the DL: command to be an autofire pulse triggered by its activation switch. Then when you needed to temporarily disable the autofire nature of that pop bumper, like during a tilt or between games, you would use the TL: command along with a CONTROL value of 2 to manually turn the driver off, and then again with 0 to set the driver back to the autofire control.

Or for a VUK eject, you'd configure it using the DL: command for a pulse mode but not tied to an autofire switch, since it's only software-controlled. Then whenever you wanted to fire it, you'd use the TL: command along with a CONTROL value of 1 to tap the driver.

Technically-speaking, this CONTROL value temporarily overrides portions of the TRIGGER bitmask for a driver which has been previously configured via the DL: command. Here's that TRIGGER bitmask from the DL: command documentation:

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 (DISABLE_SW)
  • 1 = Manual tap, sets bit 3 (ONE_SHOT)
  • 2 = Manual off, sets bit 7 (DISABLE_SW), clears bit 6 (MANUAL)
  • 3 = Manual on, sets bit 6 (MANUAL) and 7 (DISABLE_SW)

<SWITCH_ID>

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<CR> change the switch that controls Driver 0x10 to switch 0x16. Simple.

In practical use, this could be used to implement a "drunk flipper" mode where the flippers and switches are inverted. You'd just use this command to reconfigure the drivers for the right flipper to use the left flipper button and vice versa.

Examples

Let's start with a pop bumper. You might create its driver object with the following command:

DL:10,01,15,10,14,FF,00,00,50<CR>

This will pulse the pop bumper on driver 0x10 hex for 20ms when switch 0x15 triggers. After this event, allow a rest time of 80ms.

To disable this pop bumper, like during tilt or when the game ends, use the command:

TL:10,02<CR>

This will manually turn off the driver. To re-enable the physical switch, like when the game starts, use:

TL:10,00<CR>

If you need to manually fire the pop bumper, like for ball search or the coil test menu, you would use:

TL:10,01<CR>

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 this documentation, please let me know! You can email me at brian@fastpinball.com. Thanks!

N or > jump the next page, P or < for previous, search with S or ?