Well bistro-HD has more of my own code now than it has from original bistro, so pretty heavily modded yes and yet still very firmly intended to act like the nice and simple original, but Mike C and I think Flashy Mike also make pretty elaborate drivers, just not open source ones, which isn’t required here. And Lexel may be able to do some mods like this and does build and flash boards.
First you need a board. I don’t know a board with 2 channels of 3 7135. You could take a standard TA triple channel board and try to stack 3 7135s on the single 7135 channel. Srike that, those channels still drive the same LED.
Then you need the software. Yes bistro HD CAN do it, but it’s not just a matter of configuring custom modegroups. You need custom strobes. We can set set three levels in the ramps like:
red: 0 255 0 255 ( last mode, both on, unused in your spec, but added anyway)
blue: 0 0 255 255
#define RED 2
#define BLUE 3
Then your modegroup will look like
{ RBSTROBE BSTROBE RSTROBE 0}
Then just have to give those strobes an identifier in the same modegroup file (unless it’s in the config file still, I forgot) and the hardest part, program them in the code:
UPDATE… actually it’s now setup to be enabled in the modegroup file (just follow the existing examples) but the identifiers got moved back to bistro-hd.c
they look like this:
/* Define strobe magic numbers */
//Now separate from actually selecting which ones are used.
#define BATTCHECK 244 // Convenience code for battery check mode
//mode codes for strobes, must be less than MINIMUM_OVERRIDE_MODE
#define BIKING_STROBE 243 // Single flash biking strobe mode
#define FULL_BIKING_STROBE // Stutter bike strobe, uncomment to enable
#define POLICE_STROBE 242 // Dual mode alternating strobe
…
and at the bottom you’d need new ones like:
#define RBSTROBE 233
The numbers don’t matter so long as they are lower than existing ones. They basically assign a virtual ramp level to the strobe modes and are used in the conditionals in the code below.
That will look something like this:
#ifdef USE_RBSTROBE
else if (output == RBSTROBE) {
for(i=0;i<4;i++) {
set_level(RED);
_delay_ms(250);
set_level(0);
_delay_ms(250);
}
for(i=0;i<4;i++) {
set_level(BLUE);
_delay_ms(250);
set_level(0);
_delay_ms(250);
}
}
#endif
#ifdef USE_RSTROBE
else if (output == RSTROBE) {
....
Having trouble getting the == character in the conditional to show.
So if you can write how you actually want all those to look, ie particularly the timings, the rest is pretty simple actually. But I won’t flash it for you. Maybe you can get lexel to build the hardware as described and flash it for you.