diff --git a/light9/collector/output.py b/light9/collector/output.py --- a/light9/collector/output.py +++ b/light9/collector/output.py @@ -133,11 +133,11 @@ class Udmx(DmxOutput): scales.PmfStat('update'), scales.PmfStat('write'), scales.IntStat('usbErrors')) - def __init__(self, uri, numChannels): + def __init__(self, uri, bus, numChannels): DmxOutput.__init__(self, uri, numChannels) from light9.io.udmx import Udmx - self.dev = Udmx() + self.dev = Udmx(bus) self.currentBuffer = '' self.lastSentBuffer = None self.lastLog = 0 diff --git a/light9/io/udmx.py b/light9/io/udmx.py --- a/light9/io/udmx.py +++ b/light9/io/udmx.py @@ -24,8 +24,14 @@ or https://github.com/markusb/uDMX-linux cmd_SetChannelRange = 0x0002 class Udmx(object): - def __init__(self): - self.dev = usb.core.find(idVendor=0x16c0, idProduct=0x05dc) + def __init__(self, bus): + self.dev = None + for dev in usb.core.find(idVendor=0x16c0, idProduct=0x05dc, find_all=True): + print "udmx device at %r" % dev.bus + if bus is None or bus == dev.bus: + self.dev = dev + if not self.dev: + raise IOError('no matching udmx device found for requested bus %r' % bus) log.info('found udmx at %r', self.dev) def SendDMX(self, buf):