Close

More driver improvements

A project log for ADG2128 Breakout

A breakout board for Analog Devices' 8x12 analog cross-point switch

j-ian-lindsayJ. Ian Lindsay 11/30/2019 at 22:400 Comments

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.

Discussions