Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make use of libusb1 only #1319

Merged
merged 7 commits into from
Feb 26, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ addons:
#base packages for all builds
- gdb
- libasound2-dev
- libusb-dev
- libftdi-dev
- libusb-1.0-0-dev
- libftdi1-dev
- shared-mime-info
- libudev-dev
- libmad0-dev
Expand Down
2 changes: 1 addition & 1 deletion appveyor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ install:
#- pacman --noconfirm -Sy
#- pacman --noconfirm --needed -S pacman-mirrors
- pacman --noconfirm -Syu
- pacman --noconfirm --needed -S unzip mingw32/mingw-w64-i686-libmad mingw32/mingw-w64-i686-libsndfile mingw32/mingw-w64-i686-flac mingw32/mingw-w64-i686-fftw mingw32/mingw-w64-i686-nsis
- pacman --noconfirm --needed -S unzip mingw32/mingw-w64-i686-libmad mingw32/mingw-w64-i686-libsndfile mingw32/mingw-w64-i686-flac mingw32/mingw-w64-i686-fftw mingw32/mingw-w64-i686-libusb mingw32/mingw-w64-i686-nsis
#- wget http://repo.msys2.org/mingw/i686/mingw-w64-i686-gcc-libs-9.3.0-2-any.pkg.tar.xz -P /c/projects
#- wget http://repo.msys2.org/mingw/i686/mingw-w64-i686-gcc-9.3.0-2-any.pkg.tar.xz -P /c/projects
- wget http://www.qlcplus.org/misc/mingw-w64-i686-qt5-5.14.2-3-any.pkg.tar.zst -P /c/projects
Expand Down
27 changes: 17 additions & 10 deletions platforms/macos/libsndfile-nametool.pri
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,20 @@ LIBSNDFILE_FILE = libsndfile.1.dylib
LIBSNDFILE_FILEPATH = $$LIBSNDFILE_DIR/$$LIBSNDFILE_FILE

LIBOGG_FILE = libogg.0.dylib
LIBOGG_FILEPATH = $$LIBSNDFILE_DIR/$$LIBOGG_FILE
LIBOGG_PATH = $$system("pkg-config --variable libdir ogg")
LIBOGG_FILEPATH = $$LIBOGG_PATH/$$LIBOGG_FILE
LIBFLAC_FILE = libFLAC.8.dylib
LIBFLAC_FILEPATH = $$LIBSNDFILE_DIR/$$LIBFLAC_FILE
LIBFLAC_PATH = $$system("pkg-config --variable libdir flac")
LIBFLAC_FILEPATH = $$LIBFLAC_PATH/$$LIBFLAC_FILE
LIBVORBIS_FILE = libvorbis.0.dylib
LIBVORBIS_FILEPATH = $$LIBSNDFILE_DIR/$$LIBVORBIS_FILE
LIBVORBIS_PATH = $$system("pkg-config --variable libdir vorbis")
LIBVORBIS_FILEPATH = $$LIBVORBIS_PATH/$$LIBVORBIS_FILE
LIBVORBISENC_FILE = libvorbisenc.2.dylib
LIBVORBISENC_FILEPATH = $$LIBSNDFILE_DIR/$$LIBVORBISENC_FILE
#LIBVORBISFILE_FILE = libvorbisfile.3.dylib
#LIBVORBISFILE_FILEPATH = $$LIBSNDFILE_DIR/$$LIBVORBISFILE_FILE
LIBVORBISENC_PATH = $$system("pkg-config --variable libdir vorbisenc")
LIBVORBISENC_FILEPATH = $$LIBVORBISENC_PATH/$$LIBVORBISENC_FILE
LIBOPUS_FILE = libopus.0.dylib
LIBOPUS_PATH = $$system("pkg-config --variable libdir opus")
LIBOPUS_FILEPATH = $$LIBOPUS_PATH/$$LIBOPUS_FILE

LIBSNDFILE_INSTALL_NAME_TOOL = install_name_tool -change $$LIBSNDFILE_FILEPATH \
@executable_path/../$$LIBSDIR/$$LIBSNDFILE_FILE
Expand All @@ -23,6 +28,8 @@ LIBVORBIS_INSTALL_NAME_TOOL = install_name_tool -change $$LIBVORBIS_FILEPATH \
@executable_path/../$$LIBSDIR/$$LIBVORBIS_FILE
LIBVORBISENC_INSTALL_NAME_TOOL = install_name_tool -change $$LIBVORBISENC_FILEPATH \
@executable_path/../$$LIBSDIR/$$LIBVORBISENC_FILE
LIBOPUS_INSTALL_NAME_TOOL = install_name_tool -change $$LIBOPUS_FILEPATH \
@executable_path/../$$LIBSDIR/$$LIBOPUS_FILE

contains(PKGCONFIG, sndfile) {
!isEmpty(nametool.commands) {
Expand All @@ -36,8 +43,8 @@ LIBSNDFILE.path = $$INSTALLROOT/$$LIBSDIR
LIBSNDFILE.files += $$LIBOGG_FILEPATH
LIBSNDFILE.files += $$LIBFLAC_FILEPATH
LIBSNDFILE.files += $$LIBVORBISENC_FILEPATH
#LIBSNDFILE.files += $$LIBVORBISFILE_FILEPATH
LIBSNDFILE.files += $$LIBVORBIS_FILEPATH
LIBSNDFILE.files += $$LIBOPUS_FILEPATH
LIBSNDFILE.files += $$LIBSNDFILE_FILEPATH

LIBSNDFILE_INSTALL_NAME_TOOL_ID = install_name_tool -id @executable_path/../$$LIBSDIR/$$LIBSNDFILE_FILE \
Expand All @@ -50,10 +57,10 @@ LIBVORBIS_INSTALL_NAME_TOOL_ID = install_name_tool -id @executable_path/../$$LIB
$$INSTALLROOT/$$LIBSDIR/$$LIBVORBIS_FILE
LIBVORBISENC_INSTALL_NAME_TOOL_ID = install_name_tool -id @executable_path/../$$LIBSDIR/$$LIBVORBISENC_FILE \
$$INSTALLROOT/$$LIBSDIR/$$LIBVORBISENC_FILE

LIBOPUS_INSTALL_NAME_TOOL_ID = install_name_tool -id @executable_path/../$$LIBSDIR/$$LIBOPUS_FILE \
$$INSTALLROOT/$$LIBSDIR/$$LIBOPUS_FILE

LIBSNDFILE_ID.path = $$INSTALLROOT/$$LIBSDIR
LIBSNDFILE_ID.commands = $$LIBSNDFILE_INSTALL_NAME_TOOL_ID && $$LIBOGG_INSTALL_NAME_TOOL_ID && \
$$LIBFLAC_INSTALL_NAME_TOOL_ID && $$LIBVORBIS_INSTALL_NAME_TOOL_ID && \
$$LIBVORBISENC_INSTALL_NAME_TOOL_ID

$$LIBVORBISENC_INSTALL_NAME_TOOL_ID && $$LIBOPUS_INSTALL_NAME_TOOL_ID
14 changes: 2 additions & 12 deletions platforms/macos/libusb-nametool.pri
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
LIBUSB0_DIR = $$system("pkg-config --variable libdir libusb")
LIBUSB0_FILE = libusb-0.1.4.dylib
LIBUSB0_FILEPATH = $$LIBUSB0_DIR/$$LIBUSB0_FILE

LIBUSB1_DIR = $$system("pkg-config --variable libdir libusb-1.0")
LIBUSB1_FILE = libusb-1.0.0.dylib
LIBUSB1_FILEPATH = $$LIBUSB1_DIR/$$LIBUSB1_FILE

LIBUSB0_INSTALL_NAME_TOOL = install_name_tool -change $$LIBUSB0_FILEPATH \
@executable_path/../$$LIBSDIR/$$LIBUSB0_FILE
LIBUSB1_INSTALL_NAME_TOOL = install_name_tool -change $$LIBUSB1_FILEPATH \
@executable_path/../$$LIBSDIR/$$LIBUSB1_FILE

Expand All @@ -16,17 +10,13 @@ contains(PKGCONFIG, libusb) {
nametool.commands += "&&"
}

nametool.commands += $$LIBUSB0_INSTALL_NAME_TOOL $$OUTFILE && \
$$LIBUSB1_INSTALL_NAME_TOOL $$OUTFILE
nametool.commands += $$LIBUSB1_INSTALL_NAME_TOOL $$OUTFILE
}

LIBUSB.path = $$INSTALLROOT/$$LIBSDIR
LIBUSB.files += $$LIBUSB0_FILEPATH
LIBUSB.files += $$LIBUSB1_FILEPATH

LIBUSB0_INSTALL_NAME_TOOL_ID = install_name_tool -id @executable_path/../$$LIBSDIR/$$LIBUSB0_FILE \
$$INSTALLROOT/$$LIBSDIR/$$LIBUSB0_FILE
LIBUSB1_INSTALL_NAME_TOOL_ID = install_name_tool -id @executable_path/../$$LIBSDIR/$$LIBUSB1_FILE \
$$INSTALLROOT/$$LIBSDIR/$$LIBUSB1_FILE
LIBUSB_ID.path = $$INSTALLROOT/$$LIBSDIR
LIBUSB_ID.commands = $$LIBUSB0_INSTALL_NAME_TOOL_ID && $$LIBUSB1_INSTALL_NAME_TOOL_ID
LIBUSB_ID.commands = $$LIBUSB1_INSTALL_NAME_TOOL_ID
24 changes: 12 additions & 12 deletions platforms/macos/macos.pro
Original file line number Diff line number Diff line change
Expand Up @@ -93,17 +93,21 @@ defineReplace(qt5LibTargetID) {
include(libusb-nametool.pri)
include(libsndfile-nametool.pri)

LIBFTDI1_FILE = libftdi1.2.dylib
LIBFFTW_FILE = libfftw3.3.dylib
LIBMAD_FILE = libmad.0.dylib

!qmlui: {
INSTALLS += $$libraryTargetID(LIBQLCUI, libqlcplusui.1.dylib)
INSTALLS += $$libraryTargetID(LIBQLCWEBACCESS, libqlcpluswebaccess.1.dylib)
}

INSTALLS += $$libraryTargetID(LIBQLCENGINE, libqlcplusengine.1.dylib)
INSTALLS += LIBUSB LIBUSB_ID
INSTALLS += $$systemLibTarget(LIBFTDI, libftdi1.2.dylib, libftdi1) $$libraryTargetID(LIBFTDI, libftdi1.2.dylib)
INSTALLS += $$systemLibTarget(LIBMAD, libmad.0.dylib, mad) $$libraryTargetID(LIBMAD, libmad.0.dylib)
INSTALLS += $$systemLibTarget(LIBFTDI, $$LIBFTDI1_FILE, libftdi1) $$libraryTargetID(LIBFTDI, $$LIBFTDI1_FILE)
INSTALLS += $$systemLibTarget(LIBMAD, $$LIBMAD_FILE, mad) $$libraryTargetID(LIBMAD, $$LIBMAD_FILE)
INSTALLS += LIBSNDFILE LIBSNDFILE_ID
INSTALLS += $$systemLibTarget(LIBFFTW, libfftw3.3.dylib, fftw3) $$libraryTargetID(LIBFFTW, libfftw3.3.dylib)
INSTALLS += $$systemLibTarget(LIBFFTW, $$LIBFFTW_FILE, fftw3) $$libraryTargetID(LIBFFTW, $$LIBFFTW_FILE)

INSTALLS += $$qt5LibTarget(LIBQTCORE, QtCore) $$qt5LibTargetID(LIBQTCORE, QtCore)
INSTALLS += $$qt5LibTarget(LIBQTGUI, QtGui)
Expand Down Expand Up @@ -164,15 +168,9 @@ qtnametool.commands += && $$LIBQTCORE_INSTALL_NAME_TOOL \
$$INSTALLROOT/$$LIBSDIR/$$LIBQTSCRIPT_DIR/$$LIBQTSCRIPT_FILE
}

# Libftdi depends on libusb0.1 & 1.0
qtnametool.commands += && $$LIBUSB0_INSTALL_NAME_TOOL \
$$INSTALLROOT/$$LIBSDIR/$$LIBFTDI_FILE
qtnametool.commands += && $$LIBUSB1_INSTALL_NAME_TOOL \
$$INSTALLROOT/$$LIBSDIR/$$LIBFTDI_FILE

# Libusb0.1 depends on libusb1.0
# Libftdi1 depends on libusb1.0
qtnametool.commands += && $$LIBUSB1_INSTALL_NAME_TOOL \
$$INSTALLROOT/$$LIBSDIR/$$LIBUSB0_FILE
$$INSTALLROOT/$$LIBSDIR/$$LIBFTDI1_FILE

# libqlcplusengine depends on libmad, libsndfile, libportaudio and libfftw3
qtnametool.commands += && $$LIBMAD_INSTALL_NAME_TOOL \
Expand Down Expand Up @@ -204,7 +202,7 @@ lessThan(QT_MAJOR_VERSION, 5) {
qtnametool.commands += && $$LIBFFTW_INSTALL_NAME_TOOL \
$$INSTALLROOT/$$LIBSDIR/$$LIBQLCENGINE_FILE

# libsndfile depends on flac, libvorbis, libvorbisenc and libogg
# libsndfile depends on flac, libvorbis, libvorbisenc, libopus and libogg
qtnametool.commands += && $$LIBOGG_INSTALL_NAME_TOOL \
$$INSTALLROOT/$$LIBSDIR/$$LIBSNDFILE_FILE
qtnametool.commands += && $$LIBFLAC_INSTALL_NAME_TOOL \
Expand All @@ -213,6 +211,8 @@ qtnametool.commands += && $$LIBVORBIS_INSTALL_NAME_TOOL \
$$INSTALLROOT/$$LIBSDIR/$$LIBSNDFILE_FILE
qtnametool.commands += && $$LIBVORBISENC_INSTALL_NAME_TOOL \
$$INSTALLROOT/$$LIBSDIR/$$LIBSNDFILE_FILE
qtnametool.commands += && $$LIBOPUS_INSTALL_NAME_TOOL \
$$INSTALLROOT/$$LIBSDIR/$$LIBSNDFILE_FILE

# libFLAC depends on libogg
qtnametool.commands += && $$LIBOGG_INSTALL_NAME_TOOL \
Expand Down
4 changes: 4 additions & 0 deletions platforms/windows/windows.pro
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,10 @@ exists($$SYS_LIBS_PATH/libwinpthread-1.dll) {
msys.files += $$SYS_LIBS_PATH/libwinpthread-1.dll
}

exists($$SYS_LIBS_PATH/libusb-1.0.dll) {
msys.files += $$SYS_LIBS_PATH/libusb-1.0.dll
}

INSTALLS += msys

# audio libraries
Expand Down
1 change: 1 addition & 0 deletions plugins/ola/ola.pro
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ macx: {
#QMAKE_CXXFLAGS_X86_64 -= -mmacosx-version-min=10.5
#QMAKE_CXXFLAGS_X86_64 = -mmacosx-version-min=10.7
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.9
QMAKE_CXXFLAGS_WARN_ON += -Wno-deprecated-declarations

# Check for pkg-config and setup queries accordingly.
# Otherwise, use MacPorts default paths.
Expand Down
74 changes: 40 additions & 34 deletions plugins/peperoni/unix/peperoni.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
#include <QMessageBox>
#include <QString>
#include <QDebug>
#include <usb.h>
#include <libusb.h>

#include "peperonidevice.h"
#include "peperoni.h"
Expand All @@ -35,7 +35,11 @@ Peperoni::~Peperoni()

void Peperoni::init()
{
usb_init();
m_ctx = NULL;

if (libusb_init(&m_ctx) != 0)
qWarning() << "Unable to initialize libusb context!";

rescanDevices();
}

Expand Down Expand Up @@ -221,50 +225,52 @@ bool Peperoni::canConfigure()

void Peperoni::rescanDevices()
{
struct usb_device* dev;
struct usb_bus* bus;

/* Treat all devices as dead first, until we find them again. Those
that aren't found, get destroyed at the end of this function. */
QHash <quint32, PeperoniDevice*> destroyList(m_devices);
quint32 line = 0;
int devCount = m_devices.count();

usb_find_busses();
usb_find_devices();

/* Iterate through all buses */
for (bus = usb_get_busses(); bus != NULL; bus = bus->next)
libusb_device** devices = NULL;
ssize_t count = libusb_get_device_list(m_ctx, &devices);
for (ssize_t i = 0; i < count; i++)
{
/* Iterate thru all devices in each bus */
for (dev = bus->devices; dev != NULL; dev = dev->next)
libusb_device* dev = devices[i];
Q_ASSERT(dev != NULL);

libusb_device_descriptor desc;
int r = libusb_get_device_descriptor(dev, &desc);
if (r < 0)
{
if(device(dev) == true)
qWarning() << "Unable to get device descriptor:" << r;
continue;
}

if (device(dev) == true)
{
/* We already have this device and it's still
there. Remove from the destroy list and
continue iterating. */
destroyList.remove(line);
line++;
continue;
}
else if (PeperoniDevice::isPeperoniDevice(&desc) == true)
{
/* This is a new device. Create and append. */
PeperoniDevice* pepdev = new PeperoniDevice(this, dev, &desc, line);
m_devices[line] = pepdev;
if (PeperoniDevice::outputsNumber(&desc) == 2)
{
/* We already have this device and it's still
there. Remove from the destroy list and
continue iterating. */
destroyList.remove(line);
line++;
continue;
}
else if (PeperoniDevice::isPeperoniDevice(dev) == true)
{
/* This is a new device. Create and append. */
PeperoniDevice* pepdev = new PeperoniDevice(this, dev, line);
/* reserve another line with the same device reference */
m_devices[line] = pepdev;
if (PeperoniDevice::outputsNumber(dev) == 2)
{
line++;
/* reserve another line with the same device reference */
m_devices[line] = pepdev;
}
line++;
}
line++;
}
}

qDebug() << "[Peperoni] Need to destroy" << destroyList.count() << "devices";
//qDebug() << "[Peperoni] Need to destroy" << destroyList.count() << "devices";
QHashIterator<quint32, PeperoniDevice*> it(destroyList);
while(it.hasNext())
{
Expand All @@ -274,14 +280,14 @@ void Peperoni::rescanDevices()
delete dev;
}

qDebug() << "Peperoni devices found:" << m_devices.count();
//qDebug() << "[Peperoni] devices found:" << m_devices.count();
if (m_devices.count() != devCount)
emit configurationChanged();
}

bool Peperoni::device(struct usb_device* usbdev)
bool Peperoni::device(struct libusb_device* usbdev)
{
foreach(PeperoniDevice* dev, m_devices.values())
foreach (PeperoniDevice* dev, m_devices.values())
{
if (dev->device() == usbdev)
return true;
Expand Down
5 changes: 4 additions & 1 deletion plugins/peperoni/unix/peperoni.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@

#include "qlcioplugin.h"

struct libusb_device;
class PeperoniDevice;

/*****************************************************************************
Expand Down Expand Up @@ -112,9 +113,11 @@ class Peperoni : public QLCIOPlugin

protected:
/** Get a PeperoniDevice entry by its usbdev struct */
bool device(struct usb_device* usbdev);
bool device(libusb_device *usbdev);

protected:
struct libusb_context* m_ctx;

/** List of available devices */
QHash <quint32, PeperoniDevice*> m_devices;

Expand Down