Skip to content

Commit

Permalink
Merge pull request #1319 from mcallegari/libusb1
Browse files Browse the repository at this point in the history
Make use of libusb1 only
  • Loading branch information
mcallegari committed Feb 26, 2022
2 parents aec0def + 3cab7fc commit b841db9
Show file tree
Hide file tree
Showing 17 changed files with 360 additions and 296 deletions.
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

0 comments on commit b841db9

Please sign in to comment.