@Ben Logan (EDIT: I thought your name was "silver supporter" haha.
) - I haven't heard of DOF until now. And holy moly that's awesome! I actually laughed in awe watching that video.. like "hahahawowooow!" After Expo I'll really dig into it. (Great docs!) For sure if we get to the point where MPF machines are running on VP cabs then we should write a DOF module so we can talk to it. (If that's how it works.. I haven't read any of the docs yet so that statement may be comically ignorant. 
@Tmek - So... this is really, really interesting. I don't know if you saw, but in MPF we have this protcol we invented called BCP for "Backbox Control Protocol." MPF is multi-process, with the core game engine which does game logic and controls the hardware, and then a media controller which handles the graphics, dots, LCD, and sounds. The two talk via BCP, a lightweight streaming protocol which is platform agnostic, can run between architectures, and allows timestamp recording so either side can be played back.

BCP game into existance because there were some people who wanted to do their graphics and sounds in Unity 3D, but they still wanted to have MPF drive the pinball machine. They reached out asking how that might be possible, and around the same time we were thinking of splitting MPF into two processes since we couldn't scale on small form factor computers that were multi-core, and so BCP was born. (And now with MPF, you can use our Python-based media controller or the Unity 3D one, whichever you prefer.)
I think we can take what BCP is today and make a "sister" protocol (do we call it PCP so the names match?) which is just like BCP except it sends all the pinball controller things we talked about. Here's the draft spec for BCP:
https://missionpinba...ng/bcp1-0-spec/
As you can see, it's a TCP socket which passes messages that are in the style of URLs, e.g. command?key1=value&key2=value
So I wonder if we can do something like that. Some examples:
- driver_pulse?number=2&ms=30
- driver_enable?numner=4
- set_light?number=2&brightness=255
- set_led?number=5&color=ff5500
- set_trigger?switch=1&driver=2&action=pulse&ms=30
(the set_trigger command is for programming those instant-response hardware rules I was talking about.)
And from the hardware to the game engine:
- switch_change?number=1&state=1&debounced=true
BCP also supports receiving DMD frames (since the frames are composed on the media controller but the pinball controller is what talks to the actual hardware. So when MPF wants to update a frame, the media controller sends:
- dmd_frame?data=<4096 raw bytes>
(4096 raw bytes for a 128x32 = 4096 pixels x 1 byte per pixel)
With PCP, the media controller could talk directly to the hardware interface instead of passing DMD frames to the pinball controller which turns around and sends them right back to the hardware.
We also are working on an addition to BCP for "screen space" LEDs which is where you can give all your LEDs or lights on the pinball machine x,y coordinates and then "play" videos rendered effects on them as if they were movie files, with each light or LED being tied to a pixel from the movie. (The movie is not visibly rendered, but it allows for crazy awesome light explosion effects and stuff.)
I don't know if this is the kind of thing you had in mind, but BCP has worked well for us so that's why I'm throwing it out there. Then we just have to make a PCP interface for MPF and we can talk to any hardware that uses it. Heck, maybe we'll rewrite our P-ROC and FAST platform interfaces so that they're just PCP providers. 
When we first introduced BCP, some people were afraid it would be too slow. But since the TCP socket is held open and both processes are on the same computer, we see less than 1ms delay to get messages back and forth. And since the "instant response" stuff is handled by the hardware controller directly, even adding 5 or 10ms delay to trigger a sound effect or DMD slide is obviously not anything that any human will ever notice.
Also MPF already makes efficient use of the USB connection to the pinball controllers by sending all the commands in bulk at the end of a full game loop. So if the MPF game logic wants to fire a coil, it could be 5-10ms anyway before that command is flushed to the USB port. So I don't think adding a TCP socket in the mix will hurt anything.
Heck, it could even be faster because now we can use three processes for MPF (the hardware controller, the game logic, and the media controller), and on the little computers like RPi2 which are quad-core, now we can handle all hardware communication in a separate process.
Dang this is awesome.
So I really, really like this idea. BCP was not originally my idea and is a result of about 5 or 6 peoples' efforts, but most of them are here at the show. I'll talk to all them over the next few days and get their feedback. (I've already shared this thread with the extended MPF team which is about 10 guys now. We all talk via Slack.)
Man I'm stoked. I think I can put together an initial PCP spec pretty quickly. (EDIT: Just a first draft starting point that everyone can weigh in on.) )I can look at our platform driver interfaces and break out all the discrete commands they use. It's really not that many. 3-4 for drivers, a couple for switches, a couple for lights and LEDs, a couple for hw rules, a watchdog.. Heck, I think I could actually implement this thing in a day. It'd be interesting to test it on the real hardware side-by-side and see if any human can tell the difference. I bet not.
So I'm curious as to all of your thoughts on this? What do you think about a URL encoded TCP socket? (We can still strongly type the keys and values if that helps you. I'm a Python guy.. so to me "type" is whatever you want it to be.
But of course the Unity 3D backbox controller already has a BCP interface. Maybe you can even use that code as a starting point for a PCP interface in Unreal? The Unity code is open source too: https://github.com/m...nity-bcp-server
EDIT: BCP uses TCP sockets, not UDP. 
Exciting times!
Brian
Edited by Brian Madden, 15 October 2015 - 03:07 PM.