Firmware guys never like to say anything is done. I had a bootloader I wrote which was used in medical products that was still at version 0.1 when used in the final products. The problem is you can always add more features, make things better, etc. Previous released versions included 0.1.0.0 which was the first version that I accidentally left a debug statement that overwrote the configuration each time it booted. 0.1.1.0 came out as soon as I realized the bug which was wayyy before kickstarters and such. 0.1.1.0 was fully functional, but had the issue that you had to program 0.1.0.0 onto the board and then program 0.1.1.0 to do it. (Easy to work around, but still annoying). Here is 0.2.0.0 which boasts a full set of regression tests to verify the functionality.
Here is a quick list of things that have been added/fixed:
- Fixed bug where 0.1.0.0 had to be programmed before updating the firmware. This means that you can simply program 0.2.0.0 onto a board and you are good to go. I will update the programming instructions in the next week or so.
- Feature to add ability for on/off solenoid functionality. Previously solenoids could not just be turned on at 100%, then turned off at 100% depending on a switch or a command sent by the main controller. That has now been implemented using a new configuration bit for the solenoid. This feature was targeted at dual wound flippers low power coil and driving DC motors for all you Jokerz fans out there.
- Feature to kick a solenoid after a certain delay of a switch. This feature is for those people out there (all 1 of them) who wants to do a kickback in the outlane, and his switch is pretty high up in the outlane.
- Fixed bug where serial number was not working properly. This is for those guys doing head to head machines and requiring a way to tell which group of OPP boards are player 1, player 2, etc. There is a small remaining bit of work on this that whenever the software is updated, the serial number gets cleared again. I’m going to add code in the firmware updater to read the serial number, and then replace that information after the upgrade. Then the user doesn’t need to worry about it.
- Feature to allow different inputs to kick a solenoid. This allows things like wacky flippers (left button kicks right flipper) and other really exciting things. You can now use any input on the board to trigger a solenoid. Note: For bat-a-ball mode and white wood mode you still have to use the designated input for the solenoid. This change is only for people using MPF, OPP framework, or writing their own serial interface.
- Feature to allow one input to kick multiple solenoids. Let the dual wound flipper configurations commence. This is now supported. If you want to do this in bat-a-ball mode or white wood mode, you still need to pass the flipper button input to all the designated inputs for the two solenoids. If configuring through serial commands (i.e. MPF), this can now be controlled by the framework.
This firmware contains a completely rewritten digital processing section. That has allowed the code to become smaller and even more efficient. There were also some processing that was spread across two different parts of a function that have all been combined. Essentially, the code just looks cleaner at this point. At this point the firmware is using less than 65% of the flash and less than 65% of the RAM. Plenty of space to grow and add more features.
The bootloader which is provided by Cypress toggles all the output lines as it is updating the firmware. This means that you can’t update the firmware with high voltages going to solenoids. This would make all the solenoids toggle at once, and would probably trigger the short circuit detection in the power supply. I could rewrite their bootloader, but that would involve getting people to update the bootloader, which if power is lost during that process, the device will be bricked. Leaving the default bootloader Cypress provides means that the device can’t be bricked. At this point, that is much more important.
The documentation still needs to be updated for the added serial command and extra options. I might be able to get to that this week. Jan is probably the only person who really cares about that info. (Jan was the source of half of the feature requests.) I also need to update the populate boards document with the simplified instructions for updating the firmware. At this point (because of the work I did on the regression tests), I can probably write a simple one line command that upgrades a blank from the factory card and puts a configuration on the card. That should make it a lot easier for people.
Next up, I really need to finish the rewire on SS3. Gah… I just need to suck it up and finish it. At that point, I will start hitting the MPF hard. 0.30 has been officially released, so I need to grab that from the repository. That’s all for today.