-- TODO: messages to specific lamps? Multiple brokers?
function lamp_announce(fn,colors)
- print("trying to announce ", colors)
if #colors > 1 then
- if colors then
- for k,v in pairs(colors[1]) do print(k,v) end
- else
- print("nil colors")
+ local broadcaststring
+ for i=1,#colors do
+ local r,g,b = transformcolors(colors[i]);
+ if (i == 1) then
+ broadcaststring = string.format("draw %s %x %x %x;", fn, r,g,b);
+ else
+ broadcaststring = string.format("color %x %x %x %x; ", i, r, g, b) .. broadcaststring
+ end
end
- -- TODO more than 2 colors?
- local r,g,b = transformcolors(colors[1]);
- local r2,g2,b2 = transformcolors(colors[2])
- mqc:publish(mqttBcastPfx,string.format("color 2 %x %x %x; draw %s %x %x %x;",r2,g2,b2,fn,r,g,b),1,1)
+ mqc:publish(mqttBcastPfx,broadcaststring,1,1)
else
- print("one color")
- if colors then
- for k,v in pairs(colors[1]) do print(k,v) end
- else
- print("nil colors")
- end
local r,g,b = transformcolors(colors[1])
- print(r,g,b)
mqc:publish(mqttBcastPfx,string.format("draw %s %x %x %x;",fn,r,g,b),1,1)
end
end
if touch_db_blackout == nil then
toggleblackout()
else
- print("dequeueing blackout call")
tq:dequeue(touch_db_blackout)
end
- print("queueing blackout call")
touch_db_blackout = tq:queue(300,onblackdebounce)
end
if touchcolor >= 48 then touchcolor = touchcolor - 48
elseif touchcolor < 0 then touchcolor = touchcolor + 48
end
- print(colors, "colorindex is while changing color", colorindex);
colors[colorindex] = string.char(touchcolorvec(touchcolor))
networkcolors[colorindex] = {touchcolorvec(touchcolor)}
end
-- front middle: mode select (rate-limited, not exactly debounced)
if bit.isset(down,3) then
- print("front middle touched", touch_db_fn)
if touch_db_fn == nil then
if bit.isset(down,2)
then touchfnix = touchfnix - 1
-- XXX left side middle button; change colors!
if bit.isset(down, 6) then
- print("ncolors is ", ncolors);
if ncolors and colorindex < ncolors then
colorindex = colorindex + 1;
else
colorindex = 1;
end
- print("should increment color", colorindex);
end
-- XXX front left
-- draw if we've claimed it!
if (ledfb == touchfb) and not didChangeFn and didChangeColor and cccb ~= nil then
- print("colors only");
-- all we did was change the color(s); inform the existing animation
cccb()
elseif didChangeFn or didChangeColor then
-- full (re)load
touchtmr:unregister()
touchlastfn = touchfns[touchfnix]
- print(touchlastfn);
local drawinfo = loaddrawfn(touchlastfn)(touchtmr,touchfb,colors)
- print(touchlasstfn, "trying drawinfo", drawinfo);
- if drawinfo then
- for k,v in pairs(drawinfo) do print(k,v) end
- end
cccb = drawinfo and drawinfo['cccb']
ncolors = drawinfo and drawinfo['ncolors'] or 1
- print(ncolors);
dodraw()
touchtmr:start()