During my first week of holiday I did a bit of groundwork refactoring the new framework (laptop on the beach, I get bored quickly and prefer coding puzzles to sudoku ). In the second week, I read 4 of Scott Meyers C++ books which gave me a lot of inspiration and I got excited about using the new C++14 features and much more of the STL.
So when I came back, I refactored the entire framework we use for managing objects on the controller (like sensors, pids, actuators, etc). I’m very happy with the new implementation and have 97% test coverage for it now!
If you are curious, look here (readme in repo is outdated),
This is the right moment to make some fundamental changes to how the control system works, so I’m not only switching to a new framework, but also change how objects reference each other and how calculations are done.
Last week I spent integrating a new fixed point library called CNL and I integrated a new filtering implementation I coded earlier which gives a much flatter passband, less delay and has step detection. This enables wider temperature ranges in the future, so we can add support for higher temperature sensors for example. I just refactored the PID class and my next goal is refactoring the actuators to simplify constraints (min/max, time limits, mutex, load balancing).
So done for firmware:
- Framework for communcation, object management, settings storage.
- Sending/receiving object data with protocol buffers
- Refactoring of temperature sensors, setpoint, PID, mock objects
- Refactor actuators
- New display code
- More unit tests
- More integration tests
See the commit log here. I’m a bit disappointed that a release in September is unlikely but the pace is great and I do expect to have a demo ready in the first half of October. We’ll start testing with a few selected testers and if that goes well roll it out for others too.
Meanwhile, Bob and Gaya have done a ton of work on the service layer and UI. The framework for dashboards and widgets is done. We have live updating charts, dashboard widgets and setup wizards. Most of the work to be done is implementing the actual widgets for the different block types (Pid, Setpoint, etc).
You can follow that development here.
I’m very sorry that we’ll overrun my estimate of September, but not by much. I’m 100% certain the new feature set will blow you away though.