# HG changeset patch # User drewp@bigasterisk.com # Date 2016-06-11 20:41:04 # Node ID d149a2c2236ca8416c1d21e18e9995f1e373c431 # Parent d0d5900a8031bf8d64fc7c17e7fb45fabd5e33bc always send trailing zeros to dmx Ignore-this: 973ae36ba571f865150710d304e255c8 diff --git a/bin/collector b/bin/collector --- a/bin/collector +++ b/bin/collector @@ -62,8 +62,8 @@ def launch(graph): # todo: drive outputs with config files outputs = [ - EnttecDmx(L9['output/dmx0/'], '/dev/dmx3'), - Udmx(L9['output/udmx/']), + EnttecDmx(L9['output/dmx0/'], '/dev/dmx3', 80), + Udmx(L9['output/udmx/'], 510), ] c = Collector(graph, outputs) diff --git a/light9/collector/collector.py b/light9/collector/collector.py --- a/light9/collector/collector.py +++ b/light9/collector/collector.py @@ -105,6 +105,8 @@ class Collector(object): outputAttrs[d] = toOutputAttrs(devType, deviceAttrs[d]) pendingOut = {} # output : values + for out in self.outputs: + pendingOut[out] = [0] * out.numChannels for device, attrs in outputAttrs.iteritems(): for outputAttr, value in attrs.iteritems(): self.setAttr(device, outputAttr, value, pendingOut) @@ -117,7 +119,7 @@ class Collector(object): def setAttr(self, device, outputAttr, value, pendingOut): output, index = self.outputMap[(device, outputAttr)] - outList = pendingOut.setdefault(output, []) + outList = pendingOut[output] setListElem(outList, index, value, combine=max) def flush(self, pendingOut): diff --git a/light9/collector/output.py b/light9/collector/output.py --- a/light9/collector/output.py +++ b/light9/collector/output.py @@ -8,6 +8,7 @@ from twisted.internet import task, threa from greplin import scales log = logging.getLogger('output') +# eliminate this: lists are always padded now def setListElem(outList, index, value, fill=0, combine=lambda old, new: new): if len(outList) < index: outList.extend([fill] * (index - len(outList))) @@ -48,8 +49,9 @@ class Output(object): class DmxOutput(Output): - def __init__(self, uri): + def __init__(self, uri, numChannels): self.uri = uri + self.numChannels = numChannels def flush(self): pass @@ -74,8 +76,8 @@ class EnttecDmx(DmxOutput): scales.PmfStat('write'), scales.PmfStat('update')) - def __init__(self, uri, devicePath='/dev/dmx0'): - DmxOutput.__init__(self, uri) + def __init__(self, uri, devicePath='/dev/dmx0', numChannels=80): + DmxOutput.__init__(self, uri, numChannels) sys.path.append("dmx_usb_module") from dmx import Dmx @@ -108,8 +110,8 @@ class Udmx(DmxOutput): scales.PmfStat('update'), scales.PmfStat('write'), scales.IntStat('usbErrors')) - def __init__(self, uri): - DmxOutput.__init__(self, uri) + def __init__(self, uri, numChannels): + DmxOutput.__init__(self, uri, numChannels) from light9.io.udmx import Udmx self.dev = Udmx()