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.

Note that this DL: command is valid for the FAST Neuron and Retro Controllers. The FAST Nano Controller uses DN: instead of DL:. All syntax and parameters are the same.

Command Parameters

The DL: command is used to configure a driver. You send the driver number along with several parameters which configure it or cause it to fire.

For example, to configure a coil that is only manual pulse, like the trough eject, you might send the following configuration command: DL:07,80,00,10...

You could then send this command to pulse that coil: DL:7,1

[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.

<TRIGGER>

Sets the mode for how this driver is triggered.

There are many options that you can combine together into this single control byte, so you have to do some math.

  • 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.)
  • 0x10 = Switch 1 Inverted
  • 0x20 = Switch 2 Inverted
  • 0x40 = Send virtual switch “on” state (state of the virtual switch)
  • 0x80 = Disable Auto Switch Control (disconnects physical switch, taking over manual control)

Do the bit math to come up with the final value. 

Trigger Control Byte:

    BIT    7     6     5        4        3         2         1         0
          [MUX1][MUX0][INV_SW2][INV_SW1][ONE_SHOT][NOT USED][NOT USED][DRV_ENA]
  • DRV_ENA bit 0 (0 = driver not enabled, 1 = driver enabled)
  • ONE_SHOT bit 3 Taps the driver one time. After Configuring the driver the mode trigger input will be momentary True, and then False.
  • INV_SW1 bit 4 If set, switch 1 input to the Trigger Mux Control will be inverted
  • INV_SW2 bit 5 If set, switch 1 input to the Trigger Mux Control will be inverted
  • Trigger Mux Select bits 6 and 7. The bits are used to select the trigger input to the selected mode
  • 00 Trigger input is attached to switch 1 output mux
  • 01 Trigger input is attached to switch 1 output mux
  • 10 Trigger input is set to logic 0 (not triggered). This also disconnects switch 1 and switch 2 from from the trigger input to the mode
  • 11 Trigger input is set to logic 1 (triggered). This also disconnects switch 1 and switch 2 from from the trigger input to the mode

<SWITCH_ID>

FAST Switch number, zero-based.

<MODE>

Configured 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 on 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

Driver Responses

The DL: commands allow for variable input (you do not need to send all the parameters).

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 ?