2024-02-25 21:46:19 +01:00
2022-06-06 17:47:12 +02:00
2024-02-25 21:46:19 +01:00
2019-09-12 22:48:55 +02:00
2024-02-25 21:14:27 +01:00

FlippR Driver

This is a driver written to control Zaccaria pinball machines from the 2nd Generation. It controls the hardware that can be found in the flippr-circuit repository.

An example game implementation for the Zaccaria Pinball Champ '82 can be found at flippr-game.

Build Instructions

By default a static library gets build together with a networking target which enables communication over a UNIX Socket, for possible games.

Dependencies

  • wiringPi 1
  • Boost: program_options thread timer chrono filesystem
  • libthread

Build

To build the flippr-driver library run the following commands:

$ mkdir flippr-code/Flippr-Driver/build
$ cd flippr-code/FlippR-Driver/build
$ cmake ..
$ make

This will create you the static-library file: flippr-code/FlippR-Driver/bin/libFlippR-Driver.a

The library uses wiringPi Pin numbering important for the config files

We added a script /usr/bin/reset_flippr this can be found in the repo and must be chosen in /etc/rc.local. It prevents the solenois from burning!

Build Options

  • -DCROSS_COMPILE Cross compile for raspberry pi. Default: Off
  • -DBUILD_SHARED_LIB Build a shared library. Default: Off
  • -DENABLE_TESTING Enables Tests after build. Default: On
  • -DBUILD_NETWORKING Builds the networking target binary. Default: On
  • -DBUILD_CLI Build a basic TUI to control the flipper by hand. Default: Off

Usage

Configuration

The driver must be configured according to your needs and machine through JSON files.

Exemplary Files that describe this can be found in json_example. The Readme there contains all necessary information about the specific files.

Networking

When built with the networking target (default), the driver is accessible via two UNIX Domain Socket through a simple HTTP/REST API. The sockets can be found either in the folder specified through the env variable XDG_RUNTIME_DIR or if it is not set in /tmp.

The sockets are:

  • S.flippR_driver.in: All input events that occure on the pinball machine get pushed there.
  • S.flippr_driver.out: With this socket the driver can be controlled.

An example connector writtin in Python can be found in the TUI FlippR_Networking.py

In the following subsection the API is described.

Output Socket

The following GET commands are understood by the Output Socket:

Solenoids
  • /solenoids: Returns all available solenoids
  • /solenoids/ + name + /trigger: Triggers the solenoid with the given name
Sounds
  • /sounds: Returns all available sounds
  • /sounds/ + name + /play: Plays the sound with the given name
Lamps
  • /lamps: Returns all available lamps
  • /lamps/ + name + /activate: Activates the lamp with the given name
  • /lamps/ + name + /deactivate: Deactivates the lamp with the given name
  • /lamps/ + name + /status: Returns the status of the lamp (active/inactive)
Displays
  • /displays: Returns all available displays
  • /displays/ + name + /write_score/ + score: Writes the given number to the display
  • /displays/ + name + /write_content/ + content: Writes the given content to the display
Flippers
  • /flippers/ + name + /activate: Activates the flippers (top or bottom)
  • /flippers/ + name + /deactivate: Deactivates the flippers (top or bottom)

Input Socket

The input socket events are character terminated with a 0x02 byte 2 and contain the JSON events defined in the Input Matrix Config:

{
    "name": string,
    "address": number,
    "priority": number
}

  1. Please note that wiringPi is deprecated and may not work on future releases of raspbian and most probably not on a Raspberry Pi5 and future versions. ↩︎

  2. This should be 0x03 ETX (End of text) ↩︎

Description
No description provided
Readme 14 MiB
Languages
C++ 96.9%
CMake 2.5%
Python 0.5%