Skip to content

DL: Configure Driver command

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.

This command is only valid for v2 NET protocol

The DL: command is valid for FAST Controllers which use the v2 NET protocol, which are Neuron and Retro Controllers. The Nano is v1 and uses the command DN: instead of DL:. All syntax and parameters are the same.

The DL: command is used to configure & initialize a driver. All drivers must be configured with this command before they can be used.

Understanding FAST Drivers

In the FAST Pinball Modern platform, the I/O boards running the drivers have processors on them, and you can visualize each driver as a separate process running on the I/O board itself. (Each driver process is its own state machine, with memory, timers, configuration, etc.) The DL: command is used to create, initialize, and start this process on the I/O board processor for a driver.

These driver configurations are lost when the Neuron is reset, so that's why you need to send a DL: command before a driver can be used--you're quite literally sending the config for the driver process to start up.

If you send a new DL: configuration to a driver which is already running from a prior DL: config, the existing driver object will be destroyed (like a hard shut down) and a new one will be created with the new command parameters.

A companion TL: command allows you to interact with an existing running driver, which provides several advantages over doing everything with the DL: command. (For example, to temporarily disable a driver while the playfield is tilted, TL: commands can temporarily disable and then e-enable the driver, rather than using DL: to set up a whole new drivers.

Command Parameters

The DL: command uses the driver number (or driver ID) followed by one or more configuration parameters, followed by a <CR>.

[DL]:<DRIVER_ID>,<TRIGGER>,<SWITCH_ID>,<MODE>,<PARAM_1>,<PARAM_2>,<PARAM_3>,<PARAM_4>,<PARAM_5><CR>

Let's look at what each parameter means.

<DRIVER_ID>

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

<TRIGGER>

Sets the mode for how this driver is triggered (e.g. how it's fired). There are many trigger options which are all flags, so this is a bitmask value which lets you combine multiple options into this single control byte, meaning you'll have to do a binary to hex conversion to get the final command parameter.

BIT    7           6       5        4        3         2         1         0
      [DISABLE_SW][MANUAL][INV_SW2][INV_SW1][ONE_SHOT][NOT USED][NOT USED][DRV_ENA]

(From right-to-left)

  • 0x01 = Driver Enabled. (Must be set to do anything at all with this driver.)
  • 0x08 = Fire Driver Now (e.g. “one shot”, in most cases. Different cases for diverters, etc.) After configuring the driver the mode trigger input will be momentary True, and then False. is a manual method to fire a driver like a switch was pressed. Not all driver types support this.
  • 0x10 = Switch 1 Inverted, If set, switch 1 input to the Trigger Mux Control will be inverted. These modes just invert the switches used in the driver
  • 0x20 = Switch 2 Inverted, If set, switch 2 input to the Trigger Mux Control will be inverted
  • 0x40 = Manual control, emulates a "virtual" switch being set to active. basically forces the driver to stop looking at the physical switches and use bit "CONTROL_DRIVER_MAN_ON" instead. If CONTROL_DRIVER_MAN_ON is a 1, the "switch" is seen as true. if this bit is 0, the "switch" is seen as false. This allows a driver to be controlled by software in more of a latched mode
  • 0x80 = Disable Auto Switch Control (disconnects physical switch, taking over manual control)

<SWITCH_ID>

FAST switch number, zero-based, hex.

<MODE>

Configure what this driver does when its triggered.

Note that each of these drive modes has additional parameters, so they're all covered one-by-one in their own section. Click a mode for details.

  • 00 Null (Driver not configured / not used)
  • 10 Pulsed
  • 12
  • 18 Latched
  • 20 FlipFlop (uses two switches one to enable, one to disable)
  • 25
  • 30 Delayed (VUK, Ball Shooter)
  • 40
  • 41
  • 48
  • 49
  • 50
  • 58
  • 70 Auto-triggered Diverter
  • 75 Auto-triggered Diverter with exit switch
  • 78 Gate with switch trigger
  • 80 Dither (Low Current Lamp Driver)
  • F0
  • FF

<PARAM_1>

Mode Specific Parameter 1

<PARAM_2>

Mode Specific Parameter 2

<PARAM_3>

Mode Specific Parameter 3

<PARAM_4>

Mode Specific Parameter 4

<PARAM_5>

Mode Specific Parameter 5

Control Values

Driver control values.

  • 0x01 = Driver Enabled
  • 0x08 = Fire Driver Upon Configuration
  • 0x10 = Switch 1 Inverted
  • 0x20 = Switch 2 Inverted
  • 0x40 = Manual Mode Trigger
  • 0x80 = Manual Mode Enabled.

PWM Byte Sequence

The bits of the PWM byte are sequenced 1 bit every 1ms.

  • 0x00 = 0b00000000 = 0% power
  • 0x01 = 0b00000001 = 12.5% power
  • 0x88 = 0b10001000 = 25% power
  • 0x92 = 0b10010010 = 37.5% power
  • 0xAA = 0b10101010 = 50% power
  • 0xBA = 0b10111010 = 62.5% power
  • 0xEE = 0b11101110 = 75% power
  • 0xFE = 0b11111110 = 87.5% power
  • 0xFF = 0b11111111 = 100% power

Partial commands are ok

The DL: commands allow for variable input length, meaning that you do not have to enter all of the parameters. Any missing parameters will just reuse whatever the previous values were.

So if you first send:

DL:01,81,00,10,0F,55,00,00,50

Then

DL:01,00

Would result in

DL:01,00,00,10,0F,55,00,00,50

Doing this only affects the serial communication message length. In all cases, sending a DL: command will destroy the existing driver object and create a new one. Consider the TL: command instead to perform simple operations on existing drivers.

Driver Responses

The response returned is DL:P<CR> for Pass, or DL:F<CR> if the operation failed.

There are several ways to read back the driver data as well:

To return all the the parameters for a given driver the following command can be executed:

DL:<Driver Number><CR>

DL:1<CR> could return the following:

DL:01,81,00,10,0F,55,00,00,50 The order of these parameters are the same as when writing the driver data:

DL:<DRIVER_ID>,<TRIGGER>,<SWITCH_ID>,<MODE>,<PARAM_1>,<PARAM_2>,<PARAM_3>,<PARAM_4>,<PARAM_5><CR>

It is also possible to request a list of all the driver data using the DL:L<CR> command

executing the instruction DL:L<CR> could return the following:

DL:L<CR>
DL:04
DL:00,81,00,10,0F,55,00,00,50
DL:01,81,00,10,0F,55,00,00,50
DL:02,81,00,10,0F,55,00,00,50
DL:03,81,00,10,0F,55,00,00,50

DL:04 indicates there are 4 drivers total. The next lines are the configurations of each driver using the same output parameters as the DL:<Driver Number><CR> command.

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 ?