diff --git a/config/ola.m4 b/config/ola.m4 index af7b0bc3a..f767788c8 100644 --- a/config/ola.m4 +++ b/config/ola.m4 @@ -49,7 +49,14 @@ if test -z "$PROTOC" ; then AC_MSG_ERROR([cannot find 'protoc' program]); elif test -n "$1" ; then AC_MSG_CHECKING([protoc version]) - [protoc_version=`$PROTOC --version 2>&1 | grep 'libprotoc' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`] + # Since v20.x we only get effectively the minor and patch versions out of protoc. + # Treat them as major and minor and everything should keep working indefinitely. + # See https://protobuf.dev/support/version-support/ + # So we've got either of these: + # libprotoc 2.4.1 + # libprotoc 23.3 + # The first sed ensures all versions have major, minor, patch, by adding a .0 on the end of ones missing it + [protoc_version=`$PROTOC --version 2>&1 | grep 'libprotoc' | sed 's/\([^\.0-9][0-9][0-9]*\.[0-9][0-9]*\)$/\1\.0/g' | sed 's/[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`] [required=$1] [required_major=`echo $required | sed 's/[^0-9].*//'`] [required_minor=`echo $required | sed 's/[0-9][0-9]*\.\([0-9][0-9]*\)\.[0-9][0-9]*/\1/'`] diff --git a/plugins/usbdmx/AVLdiyD512Factory.cpp b/plugins/usbdmx/AVLdiyD512Factory.cpp index 0f965ab7f..2e0481636 100644 --- a/plugins/usbdmx/AVLdiyD512Factory.cpp +++ b/plugins/usbdmx/AVLdiyD512Factory.cpp @@ -63,6 +63,9 @@ bool AVLdiyD512Factory::DeviceAdded( // Some AVLdiy devices don't have serial numbers. Since there isn't another // good way to uniquely identify a USB device, we only support one of these // types of devices per host. + // TODO(Peter): We could instead use the device & bus number (like the + // Eurolite plugin). You could use more than one device, but the patch + // wouldn't follow if you plugged it into a different port if (info.serial.empty()) { if (m_missing_serial_number) { OLA_WARN << "Failed to read serial number or serial number empty. " diff --git a/plugins/usbdmx/AnymauDMXFactory.cpp b/plugins/usbdmx/AnymauDMXFactory.cpp index 1995fd87b..86df54f2d 100644 --- a/plugins/usbdmx/AnymauDMXFactory.cpp +++ b/plugins/usbdmx/AnymauDMXFactory.cpp @@ -63,6 +63,9 @@ bool AnymauDMXFactory::DeviceAdded( // Some Anyma devices don't have serial numbers. Since there isn't another // good way to uniquely identify a USB device, we only support one of these // types of devices per host. + // TODO(Peter): We could instead use the device & bus number (like the + // Eurolite plugin). You could use more than one device, but the patch + // wouldn't follow if you plugged it into a different port if (info.serial.empty()) { if (m_missing_serial_number) { OLA_WARN << "Failed to read serial number or serial number empty. " diff --git a/plugins/usbdmx/DMXCreator512BasicFactory.cpp b/plugins/usbdmx/DMXCreator512BasicFactory.cpp index 0728e7a18..caa6a0de5 100644 --- a/plugins/usbdmx/DMXCreator512BasicFactory.cpp +++ b/plugins/usbdmx/DMXCreator512BasicFactory.cpp @@ -55,6 +55,9 @@ bool DMXCreator512BasicFactory::DeviceAdded( // vendor and product ids. Also, since DMXCreator 512 Basic devices don't have // serial numbers and there is no other good way to uniquely identify a USB // device, we only support one of these types of devices per host. + // TODO(Peter): We could instead use the device & bus number (like the + // Eurolite plugin). You could use more than one device, but the patch + // wouldn't follow if you plugged it into a different port if (info.serial.empty()) { if (m_missing_serial_number) { OLA_WARN << "We can only support one device without a serial number."; diff --git a/plugins/usbdmx/EuroliteProFactory.cpp b/plugins/usbdmx/EuroliteProFactory.cpp index f79c81260..42efe7bea 100644 --- a/plugins/usbdmx/EuroliteProFactory.cpp +++ b/plugins/usbdmx/EuroliteProFactory.cpp @@ -92,11 +92,11 @@ bool EuroliteProFactory::DeviceAdded( libusb_device *usb_device, const struct libusb_device_descriptor &descriptor) { bool is_mk2 = false; + LibUsbAdaptor::DeviceInformation info; // Eurolite USB-DMX512-PRO? if (descriptor.idVendor == VENDOR_ID && descriptor.idProduct == PRODUCT_ID) { OLA_INFO << "Found a new Eurolite USB-DMX512-PRO device"; - LibUsbAdaptor::DeviceInformation info; if (!m_adaptor->GetDeviceInfo(usb_device, descriptor, &info)) { return false; } @@ -112,7 +112,6 @@ bool EuroliteProFactory::DeviceAdded( // Eurolite USB-DMX512-PRO MK2? } else if (descriptor.idVendor == VENDOR_ID_MK2 && descriptor.idProduct == PRODUCT_ID_MK2) { - LibUsbAdaptor::DeviceInformation info; if (!m_adaptor->GetDeviceInfo(usb_device, descriptor, &info)) { return false; } @@ -150,17 +149,21 @@ bool EuroliteProFactory::DeviceAdded( return false; } - // The Eurolite doesn't have a serial number, so instead we use the device & - // bus number. + // The original Eurolite doesn't have a serial number, so instead we use the + // device & bus number. The MK2 does, so we use that where available. // TODO(simon): check if this supports the SERIAL NUMBER label and use that // instead. - // There is no Serialnumber--> work around: bus+device number - int bus_number = libusb_get_bus_number(usb_device); - int device_address = libusb_get_device_address(usb_device); - std::ostringstream serial_str; - serial_str << bus_number << "-" << device_address; + if (is_mk2 && !info.serial.empty()) { + serial_str << info.serial; + } else { + // Original, there is no Serialnumber--> work around: bus+device number + int bus_number = libusb_get_bus_number(usb_device); + int device_address = libusb_get_device_address(usb_device); + + serial_str << bus_number << "-" << device_address; + } EurolitePro *widget = NULL; if (FLAGS_use_async_libusb) { diff --git a/plugins/usbdmx/ScanlimeFadecandyFactory.cpp b/plugins/usbdmx/ScanlimeFadecandyFactory.cpp index 4f1420a8b..60f28d5dd 100644 --- a/plugins/usbdmx/ScanlimeFadecandyFactory.cpp +++ b/plugins/usbdmx/ScanlimeFadecandyFactory.cpp @@ -64,6 +64,9 @@ bool ScanlimeFadecandyFactory::DeviceAdded( // Fadecandy devices may be missing serial numbers. Since there isn't another // good way to uniquely identify a USB device, we only support one of these // types of devices per host. + // TODO(Peter): We could instead use the device & bus number (like the + // Eurolite plugin). You could use more than one device, but the patch + // wouldn't follow if you plugged it into a different port if (info.serial.empty()) { if (m_missing_serial_number) { OLA_WARN << "Failed to read serial number or serial number empty. "