<< Pinscape Resources Home

If you're using the Pinscape v2 firmware, you should install these updated versions of the system support library files.

The "Grander Unified" version combines all of the formerly separate third-party versions on GitHub that forked off from SwissLizard's last official release in late 2015. It also features a Windows Setup installer that handles all of the setup automatically rather than requiring the traditional series of error-prone manual steps. More...

The latest version of the LedWiz DLL lets you access all of your Pinscape Controller ports from older, LedWiz-only software, even if you have more than 32 ports. It does this by creating "virtual" LedWiz units to represent the additional ports on your Pinscape unit. Suppose you have a Pinscape controller with 75 ports, and you've set it up as LedWiz unit #8. The first 32 ports will appear as LedWiz #8 as usual. But in addition, the DLL will set up a fake LedWiz unit #9 for Pinscape ports 33-64, and unit #10 for Pinscape ports 65-70. Older LedWiz-only software will think you have 3 LedWiz's installed. Keep in mind that the ports for each virtual LedWiz are numbered 1 to 32 as always, since the LedWiz is hard-wired to think that way, so you'll have to do a little arithmetic to figure out that Pinscape port 33 is mapped to LedWiz #9 port 1. And of course, you can just ignore the virtual LedWiz units in DOF programs like VP, since DOF already knows how to access all of the Pinscape ports directly. Note: you'll also need the Pinscape firmware from 2017-02-03 or later to use this feature, since the DLL depends on some enhancements on the device side to make it all work.


Current version (16 April 2021): A minor R3++ update, with a few bug fixes and new features:

  • Fixes a DOF startup bug that affected Pinscape controllers on some machines. The most common symptom was that button lights (e.g., the Start button light) that were supposed to remain lit during a game didn't light up at all, or only worked some of the time, at random.
  • Smart LED strips now have gamma correction, to make the apparent brightness better match the programmed percentage level. The gamma is set to 2.2 by default, which should be a good setting for most strips, but it can be changed via the BrightnessGammaCorrection parameter in the cabinet configuration XML file. (Enhancement courtesy of Vroonsh.)
  • Fixes some bugs in matrix bitmap animation effects and fade effects, including a crash bug when an image file was missing. (Fixes courtesy of Vroonsh.)
  • Updates SSFImpactor (DOF device simulation using in-cabinet speakers or exciters) to incorporate features from Kai Cherry's last public release, with an overhaul by njk70 to correct some issues that Kai left unresolved before stopping work on it. Notably, this adds simulated shaker motors and gear motors to the simulated device set. (SSFImpactor by Kai Cherry; updates and fixes courtesy of njk70.)

As always, this is a cumulative update that includes all features from earlier R3++ and R3+ versions.

You can install automatically from the Windows Setup installer, or manually from the ZIP file. You only need one or the other. The Setup version is highly recommended, because the manual installation process is notoriously difficult and error-prone. The Setup version is easy to use and has proven to be much more reliable than doing it by hand.

More about R3++ | Manual setup instructions


Older stable releases:

  • January 2021: A minor R3++ update, with special support for using a WeMos as an addressable LED strip controller, courtesy of Vroonsh. The WeMos is an alternative to the Teensy that's cheaper than the Teensy in some regions, and although it's meant to be basically a drop-in replacement for the Teensy, the WeMos hardware has some slight differences that require a few adjustments to the DOF COM port settings. Past DOF versions worked with the WeMos by pretending it was a Teensy, but this version promotes the WeMos to a specifically supported device, which should make it a little easier to set up. This version also adds the ability to adjust LED strip brightness separately for each strip, to compensate for any differences in native brightness from one strip to the next, for a more uniform overall appearance.

    Windows Setup (MSI) | ZIP file | Source code

  • August 2020: A minor R3++ update with two new features, courtesy of Vroonsh. First, table-scoped variables in the config file are expanded before global variables when processing the Config Tool strings. This means that table-scoped variables override global variables, which lets you customize all variables on a per-table basis (which is really the way it should have been originally). The specific use case Vroonsh had in mind is that this lets you easily customize LED matrix effects per table. Second, it adds some new variables to the global config file that let you customize the signal timing for Addressable Light Strips controllers. The default timing is designed to work with SwissLizard's original Teensy-based controller design, so if you're using a Teensy, you can ignore this change and continue using the default settings. Vroonsh added the new variables because some people (especially in Europe) use a Wemos D1 Pro in place of a Teensy, and that device has slightly different signal timing requirements. This change lets you adjust the timing to match your device via the global config file (rather than having to recompile the source code, which is what people using the Wemos were forced to do in the past).

    Windows Setup (MSI) | ZIP file | Source code

  • March 2019: A minor R3++ update that added new code from Kaicherry to simulate DOF effects using Surround Sound Feedback (SSF) with bass shaker or tactile speakers (also known as exciters).

    Windows Setup (MSI) | ZIP file | Source code

  • January 2019: The second major R3++ release, with support for ZB Output Control devices, support for LedWiz+GP devices, fixes for some Sainsmart device recognition problems, support for 64-bit versions of PinballY. The big change in this version is that all components are packed into monolithic DLL files, which should eliminate the mysterious path naming problems that some people ran into in past versions.

    Windows Setup (MSI) | ZIP file | Source code

  • August 2018: Grander Unified R3++ version, merging all of the separate development forks that branched off after 2015, and adding an automated Windows Setup installer. (This isn't quite the original Jan 2018 R3++; it has some minor updates and fixes. This is the last update before the rearrangement of the components into monolithic DLL files, so I'm preserving it as an option just in case the DLL refactoring causes problems on any systems.)

    Windows Setup (MSI) | ZIP file | Source code

  • October 2016: The older DOF R3+ version from 19 Oct 2016, from before the re-unification of development branches described above. This is considered highly stable.

    More about R3+ | Setup instructions | ZIP file | Source code



The LedWiz DLL download includes a spiffy new test program, NewLedTester. This is similar to the SimpleLedTest program that a lot of people use to test their LedWiz setup, but this one is a little friendlier and more flexible, and it's 100% open source in case you want to make any customizations. It's also aware of the new "virtual LedWiz" interfaces that the DLL creates for Pinscape units with more than 32 outputs, which lets it display port numbering on the virtual units that's consistent with your Pinscape setup.

How to install the DOF update

System requirements: .Net 4.6 is required. This is a core Windows component that DOF requires. It's pre-installed on most Windows systems by default, but it might be missing on older Windows 7 systems, especially if you recently did a fresh install of the operating system. You can install it via Windows Update if it's missing.

New system setup vs. updating an existing setup: There are no differences in the procedure. Just run the installer or follow the manual install steps. You can install an update on top of an existing copy without un-installing anything first.

Automatic setup (recommended): Download the Windows Setup (MSI) installer. Double-click the downloaded file and follow the on-screen prompts.

The installer is usually reliable, but there are a couple of issues that sometimes come up. If you encounter any error messages that aren't self-explanatory, here are some things to try:

  • Check that UAC is enabled. (You should always leave it enabled. Any advice you've seen on the Internet telling you to disable it is out of date. UAC is an integral part of modern Windows; turning it off changes system internals and creates lots of headaches.)
  • If you get an error saying that C:\DirectOutput (or your chosen folder) can't be found, can't be created, or can't be written, your C:\ root folder might be "owned" by a special system account like SYSTEM or Trusted Installer. That blocks regular user accounts from writing to it. You can choose another folder that isn't protected like this, or you can work around the permission blockage using "Run as Administrator" mode when running the installer. In the latter case, the new C:\DirectOutput folder will also be created with restricted permissions, which will create problems later on. But you can fix that up by changing its owner to match your regular user account:
    • Right click the C:\DirectOutput folder on the desktop
    • Select Properties from the context menu
    • Go to the Security tab
    • Click the Advanced button
    • Next to the "Owner" listing, click Change
    • In the box, type your regular user account name and click Check Names
    • Make sure that expands your entry properly to "Domain\Username", then click OK

Manual setup (not recommended): If you prefer doing things the hard way, you can install DOF manually from the ZIP file distribution. But I'm serious in recommending against this. DOF is ridiculously difficult to install by hand. There are numerous steps required and many details, and if you get just one little thing wrong, DOF won't work at all and won't give you the slightest hint as to why. I wrote the installer because of all the trouble I had installing DOF on my own system, and all the time I was spending trying to help other people troubleshoot their setups. The Setup version has proven to be much more reliable, and it makes the whole process quick and painless. It'll save you a lot of time and aggravation.

But if you really want to try it on your own anyway, follow the instructions in the DOF Setup chapter in the new Pinscape Build Guide.

LEDWIZ.DLL is not included in DOF any more. That's intentional. DOF no longer uses that file. DOF communicates with LedWiz devices directly for improved reliability. You can delete any old copy from your DOF folder.

How to install the LEDWIZ.DLL update

Note: you don't need LEDWIZ.DLL for DOF's sake. DOF doesn't use it any more. LEDWIZ.DLL is only needed by older, non-DOF software that wants to access your LedWiz on its own, such as Future Pinball.

Download the ZIP above, open it, and extract LEDWIZ.DLL onto your desktop or any convenient folder.

Right-click on the new LEDWIZ.DLL file. Select Properties, then go to the General tab on the menu. If you see a message saying something like "This file came from another computer and has been blocked", click the Unblock button.

Now search your system for older copies of LEDWIZ.DLL, and replace each one you find with the new copy. To search your system:

  • On Windows XP, 7, or Vista, click the Start menu, click Search > For Files or Folders..., then type LEDWIZ.DLL into the search box and press Enter
  • On Windows 8 or 10, press +F (that is, hold down the " Start" key and press "F"), then type LEDWIZ.DLL into the search box and press Enter

For each file you find, copy the new LEDWIZ.DLL into the same folder location, overwriting the old file. To copy the file, select the new one, press Ctrl+C (Copy), then click on the old file and click Ctrl+V (Paste). Windows will warn you about the duplicate file; choose the option to REPLACE the old file.

About the DOF Grander Unified R3++ update (January 2018)

In January 2018, I merged the DOF development branches from several independent developers who added features to Swiss Lizard's 2015 "R3" beta release. (Swiss Lizard is DOF's original author, and the R3 beta was the last time he worked on the project, so that beta release was for a while the reference point most people worked from.) I called this new merger of branches the "Grander Unified R3++" version, in reference to my earlier "Grand Unified R3+" version from 2016, which was a merger of some changes of my own with Swiss Lizard's final release.

The "Grander Unified R3++" version was intended to get everyone back to a single DOF branch. Before it came out, you were forced to choose which subset of new features you wanted by picking one of those separate branches from different developers. R3++ combines all of the known new features into a single release. It includes Djrobx's fixes for boolean effects with PWM controls; Rambo3's UltimateIO and Philips Hue support, and SainSmart auto-configuration; Freezy's ProPinball bridge; and my own R3+ version, which had updates for Pinscape devices and improved LedWiz support.

New with this version is the option to install automatically with Windows Setup, instead of using the traditional manual procedure. The manual procedure is complex and error-prone, and it's notoriously difficult to troubleshoot if you miss any minor details. The Windows Setup option makes installation easy and almost always gets it right the first time. The installer carries out the whole procedure described in the DOF documentation, so you can skip all of the manual steps described there (unblocking DLL files, creating B2S links, updating B2S settings, setting up the PinballX plug-in, etc). Just run the .MSI file and you should be ready to go as soon as it's done.

To use the automatic Setup installer, just download the .MSI file to your hard disk and double-click the file to run the installer. If you prefer to use the manual ZIP setup instead, you can find instructions in the DOF Setup chapter of the Pinscape Build Guide.

It's completely up to you whether to use the automatic Setup or the manual ZIP install. Both downloads contain the same files, and there should be no difference in the final result installed on your system (assuming you do everything right if you attempt the manual procedure).

You can use the Setup installer for new installations or updates. There's no need to uninstall the old version or do any other preparation first; just run the Setup.

I've continued to update the R3++ branch with minor updates since the initial January 2018 release. See the release list above. As far as I know, there haven't been any other schisms since, so this is still the universal version.

DOFLinx users: You'll need an updated version DOFLinx to go with this updated DOF. DDH69 was kind enough to build that and make it available here.

About the DOF R3+ update (October 2016)

DOF is an open source interface library by SwissLizard that connects Visual Pinball, PinballX, and other programs with most types of output controllers, such as the LedWiz and the Pinscape board. DOF is the key software component for controlling all feedback devices in a virtual pin cab.

The last official release of DOF by SwissLizard was a beta testing version in November 2015, known as version "R3". SwissLizard stopped working on DOF after that beta, so that became the de facto "official" R3 release, even though it was still nominally a beta, meaning an incomplete testing version. "R3+" was my unofficial, modified version of the R3 beta that updated it with some necessary additions for Pinscape compatibility.

I called my unofficial R3+ release the "Grand Unified" version because it unified my Pinscape updates with the last source code that SwissLizard checked in, which included some additions he made for Teensy addressable LED strip support. Up until that time, my own Pinscape code was only available in a branch I had created earlier, from earlier DOF base code that didn't include SL's Teensy additions.

My "Grand Unified" moniker is now as ironic as it is grandiose, in that four independent splinter projects emerged on GitHub in the time since "Grand Unified" was created. That's what led to the "Grander Unified R3++" version above, which restores the status quo ante bellum, in the sense that we once again have a One True DOF that combines all of the features from all of the branches thus far.

About the LEDWIZ.DLL replacement

This version of LEDWIZ.DLL is based on the one in cithraidt's LWCloneU2 project. It's an open-source replacement for the manufacturer's DLL, with many improvements:

  • Pinscape device support
  • Support for Pinscape devices with more than 32 ports (client software like Future Pinball will see extra "virtual" LedWiz units to represent the additional ports beyond 32)
  • ZB Output Control device support (new in Oct 2018 update)
  • Multi-threaded USB I/O, so that the calling program doesn't freeze or stutter while waiting for USB commands to complete
  • Workaround for the firmware bugs in real LedWiz devices that cause erratic behavior if commands are sent too quickly

The original and biggest reason to use this replacement DLL is that it solves a big problem with the "stock" DLL if you use a Pinscape Controller. The problem is that the stock DLL crashes if you enable the Pinscape keyboard features. You can avoid the DLL crash by disabling the keyboard features, but they're so useful that you probably don't want to do that. The better solution is to use the replacement DLL. It solves the problem, and works whether or not you're using the Pinscape keyboard features.

For Pinscape Controller users, the new DLL has another great new feature: extended output port access. If you have the Pinscape expansion boards, you probably have more than 32 ports in your system, which is beyond what the standard LedWiz interface can handle. The new DLL solves this by making your Pinscape unit appear to be multiple LedWiz units. Legacy client software that's written for the LedWiz will see two or more separate LedWiz units - however many are necessary to cover all of your output ports. This is completely automatic, no configuration necessary; just replace your existing LEDWIZ.DLL with the new one, and your legacy clients will gain access to all of your ports.

Even if you're using a real LedWiz in your system instead of a Pinscape Controller, you still might want to upgrade to this DLL! It has some significant benefits for real LedWiz hardware. For one thing, the new DLL uses multiple threads internally, which greatly improves its performance compared with the stock DLL. If you're using Future Pinball with a real LedWiz, and you're experiencing "stutter" when playing LedWiz-enabled games, the new DLL might reduce or eliminate this, thanks to the multi-threading. Another advantage of the replacement DLL is that it has special programming to work around some known timing bugs in the real LedWiz hardware, which the manufacturer's DLL doesn't have any evident awareness of. This might improve the reliability of your real LedWiz.

The DLL is only a small portion of the LWCloneU2 project, by the way. The overall project is a complete open source LedWiz emulator for Arduinos and other Atmel AVR microcontrollers. In that respect, LWCloneU2 is somewhat similar to the Pinscape Controller project, but it doesn't share Pinscape's special focus on virtual pinball; LWCloneU2 is designed with more general arcade video game emulation in mind instead, like the LedWiz itself. Check out the full project if you're interested in arcade emulation beyond virtual pinball, or if you're looking for another DIY LedWiz alternative besides Pinscape.