A few intrepid customers keep cleaning me out of my stock of these boards. You know who you are, and thank you. :-)
In an effort to stay ahead of demand, my next restock will be for six boards, but I'll have more PCBs on-hand. That should happen a bit before Christmas. Please know that I pay attention to waitlists. So if I'm ever out of stock on anything, and you add yourself to the waitlist, I will typically have you served within 3-weeks at the outside. Sometimes faster.
I made some small changes the boards to make manufacturing them easier. So the layouts will change slightly starting with this run, but the schematic/pinouts/drivers are unaffected. But the change will make pick-and-place easier and reduce attrition if/when I send this out for mass production.
I really like OSHPark's new "After Dark" offering. So this next batch will have that as an option on Tindie.
Documentation and bug fixes
Lots of small bug fixes and improvements have been bleeding into the drivers over the past few days. So now is a good time to re-pull those. The README has also been updated with discourse on driver features.
The driver had a tremendous amount of technical debt cleared away last night. Bus references are no longer hard-coded to "Wire", but are instead passed in as an argument to init(), and is then retained by the class. This costs an extra 4 bytes of resting memory load per-instance, but paves the way for the linux TwoWire abstraction, and makes life generally easier for anyone using the board with (suppose) "Wire1".
Additionally, the driver now supports state serialization and restore. It needs some more testing, but it should allow state restore before or after init(), allowing for "profiles" and easy management of preferred settings, default states, etc. Buffers written this way are versioned so that new driver features can be gracefully migrated in. This API is essentially finished, so it is now safe to code against. The example sketch is updated, tested, committed, and pushed.
Unrelated to the above feature is another feature that is important for the linux port: preserve-on-destroy. When the driver instance for the switch is destroyed, the default behavior is to put the hardware into a known state (reset). This opens all routes. Use-cases that want the hardware state to outlive the driver's life cycle are now possible again. See the driver README for details.
Sloppy private boolean class variables were condensed into something more efficient and manageable (int member with flags).
I might decide to put the row::col cardinality checking code back in (especially if someone tells me they want it). But it won't change the API from here on out.