I got pretty excited to try out Block Party, but my bubble totally burst when none of my LEDs lit up. Alas, Rodrigo programmed it specifically for varibright, and I’m on a grayscale 128.
The core issue here is that libmonome (and in turn, serialosc) just NOPs for the /level OSC messages, rather than degrading gracefully.
So, I’ve opened up a pull request with a proof of concept implementation.
For the thoughtful non-C-coders in the bunch, there are a couple of design/approach issues that should probably still be hammered out. Particularly, where do we put a threshold for falling back?
In this implementation, any LED whose level is set to 8 or higher is turned on, and anything 7 or lower is turned off. This matches up somewhat with the legacy 4-level varibright, in that “low” intensity maps to off, and “medium” and “high” intensities both map to on.
Is this something that should be configurable? Should only the “high” intensity map to on, with “medium” mapping to off?
I was also thinking that it might be a worthwhile experiment to add a timer and an LED state buffer to libmonome for legacy devices and have it attempt to PWM the brightness. There might be downsides to this (code bloat in libmonome, for example), but since we already have the higher-level OSC API, and since people are using it to build apps, it seems like a reasonably good idea to try to emulate as much as possible, at as low of a level as possible in order for older devices to keep up with the times.