#995071 argyll: USB devices not found on big-endian (powerpc)

Package:
argyll
Source:
argyll
Description:
Color Management System, calibrator and profiler
Submitter:
Wyatt Ward
Date:
2022-02-01 01:33:03 UTC
Severity:
important
Tags:
#995071#5
Date:
2021-09-25 17:25:13 UTC
From:
To:
Dear Maintainer,

*** Reporter, please consider answering these questions, where appropriate ***

After installing argyll and enabling the appropriate udev rules, argyll fails
to enumerate USB-based colorimeters and spectrometers on PowerPC
(big-endian, 32-bit).

Specifically, 'spotread -?' does not list any usb devices connected to the
system.

I can find no means of debugging why the device (an i1Display Pro Plus) fails
to be detected, but it enumerates fine on my i386 and amd64 machines with the
same udev rules.

Manually setting the permissions on the appropriate /dev/bus/usb/*/* node does
not fix things, either, so I am relatively sure this is not a simple
permissions problem.

I suspect that USB PID's and Vendor ID's are being read in an endian-specific
(and incorrect) manner.

Argyll should be able to run on big-endian machines as well as little-endian
ones. The only way I was able to profile this machine was to run Argyll on
an i386 system with X forwarding to the powerbook's display.

As a side-note, I noticed that my argyll-ref package was out of date when
I ran reportbug; I just upgraded it to 2.2.0+repack-1 and nothing changed.

#995071#10
Date:
2022-02-01 01:23:41 UTC
From:
To:
I have finally had some time to verify; by adding the byte-swapped version of
my colorimeter's USB Vendor and Product ID's, Argyll enumerates it and lets me
use it. 0765:5020 became 6507:2050.

Spotread appears to be giving correct results, given that they are about the
same on average as when I run it on an x86 system. This makes me believe that
this may be the only big endian issue, but there is plenty I have not tested
(including all other colorimeters and spectrometers Argyll supports).

In summary, Argyll needs to either change how it retrieves the VID and PID to
avoid things like memcpy(), or it needs to swap the bytes internally for big
endian platforms.

#995071#15
Date:
2022-02-01 01:28:38 UTC
From:
To:
Sorry for the hasty email. I just tried it again, and realized it was only
working because of *another* change I made while investigating. It still fails
with my suggested fix. The thing that was working was setting USE_LIBUSB=true
either in the Jamfile or on the command line. It is my understanding that
Argyll normally uses its own code for interacting with the colorimeters; is
that correct?

Since the Libusb support seems to be something the project wants to move away
from, I think this might be worth considering.