[argyllcms] Re: DTP94 doesn't seem to work in 1.3.0

  • From: Simon Kirby <sim@xxxxxxxxxxxx>
  • To: argyllcms@xxxxxxxxxxxxx
  • Date: Tue, 21 Sep 2010 02:11:21 -0700

(Replying manually since I was unsubscribed for a bit and missed your
reply.)

Hello, Graeme!

> Sorry, I'm unable to reproduce this.
> 
> First try simplifying your options.

[sroot@oof:/usr/src/argyll/Argyll_V1.3.0/bin]# ./dispcal -v -yl acd
XRandR 1.2 is faulty - falling back to older extensions
Setting up the instrument
dispcal: Error - new_disprd() failed with 'Instrument Access Failed'

[sroot@oof:/usr/src/argyll/Argyll_V1.3.0/bin]# ./dispcal -v -yl -K acd
XRandR 1.2 is faulty - falling back to older extensions
Setting up the instrument
dispcal: Error - docalibration failed with return value -1

[sroot@oof:/usr/src/argyll/Argyll_V1.3.0/bin]# ./dispcal -v -D5 -K acd
Checking XRandR 1.2 VideoLUT access
XRandR 1.2 is faulty - falling back to older extensions
get_displays checking for Xinerama
Display 0 name = ':0.0'
Display 1 name = ':0.1'
Setting up the instrument
usb_get_paths about to look through devices:
usb_check_and_add() called with VID 0x1d6b, PID 0x2
usb_check_and_add() called with VID 0x1d6b, PID 0x2
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_check_and_add() called with VID 0x51d, PID 0x2
usb_check_and_add() called with VID 0x9da, PID 0xe
usb_check_and_add() called with VID 0x765, PID 0xd094
usb_check_and_add() found known instrument
usb_check_and_add() called with VID 0x5ac, PID 0x911c
usb_check_and_add() called with VID 0x5ac, PID 0x921c
managed to open serial "/dev/ttyS2"
managed to open serial "/dev/ttyS1"
managed to open serial "/dev/ttyS3"
managed to open serial "/dev/ttyS0"
dtp92: About to init coms
dtp92Q/dtp94: About to init USB
icoms: About to set usb port characteristics
icoms: About to open the USB port
icoms: USB port needs opening
icoms: About to open USB port 'usb:/bus5/dev7/ (Xrite DTP94)'
icoms: USB port is now open
icoms: Clearing any USB errors
icoms: usb port characteristics set ok

icoms: Write_Read called with '0PR^M'
icoms: About to write '0PR^M' ICOM err 0x200
icoms: Write_Read Write failed - returning 0x200

icoms: Write_Read called with '0PR^M'
icoms: About to write '0PR^M' ICOM err 0x200
icoms: Write_Read Write failed - returning 0x200

icoms: Write_Read called with '^M'
icoms: About to write '^M' ICOM err 0x200
icoms: Write_Read Write failed - returning 0x200
dtp92: init coms has failed
icoms: delete called
icoms: closing port
usb_close_port() called
usb port has been released and closed
init_coms returned 'Communications failure' (No device error)
dispcal: Error - docalibration failed with return value -1

Here is the same call with packaged argyll 1.1.1:

[sroot@oof:/usr/src/argyll/Argyll_V1.3.0/bin]# dispcal -v -D5 -K acd
Checking XRandR 1.2 VideoLUT access
XRandR 1.2 is faulty - falling back to older extensions
get_displays checking for Xinerama
Display 0 name = ':0.0'
Display 1 name = ':0.1'
Setting up the instrument
usb_get_paths about to look through buses:
usb_get_paths about to look through devices:
usb_check_and_add() called with VID 0x9da, PID 0xe
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_get_paths about to look through devices:
usb_check_and_add() called with VID 0x1d6b, PID 0x2
usb_get_paths about to look through devices:
usb_check_and_add() called with VID 0x5ac, PID 0x921c
usb_check_and_add() called with VID 0x5ac, PID 0x911c
usb_check_and_add() called with VID 0x1d6b, PID 0x2
usb_get_paths about to look through devices:
usb_check_and_add() called with VID 0x765, PID 0xd094
usb_check_and_add() found known instrument
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_get_paths about to look through devices:
usb_check_and_add() called with VID 0x51d, PID 0x2
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_get_paths about to look through devices:
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_get_paths about to look through devices:
usb_check_and_add() called with VID 0x1d6b, PID 0x1
managed to open serial "/dev/ttyS2"
managed to open serial "/dev/ttyS1"
managed to open serial "/dev/ttyS3"
managed to open serial "/dev/ttyS0"
dtp92: About to init coms
dtp92Q/dtp94: About to init USB
icoms: About to set usb port characteristics
icoms: About to open the USB port
icoms: USB port needs opening
icoms: About to open USB port 'usb:/bus0/dev7 (Xrite DTP94)'
icoms: USB port is now open
icoms: Clearing any USB errors
icoms: usb port characteristics set ok

icoms: Write_Read called with '0PR^M'
icoms: About to write '0PR^M' ICOM err 0x0
icoms: Read called
icoms: About to return read '<00>' ICOM err 0x0
icoms: Write_Read Write_Read success, returning '<00>'

icoms: Write_Read called with '0PR^M'
icoms: About to write '0PR^M' ICOM err 0x0
icoms: Read called
icoms: About to return read '<00>' ICOM err 0x0
icoms: Write_Read Write_Read success, returning '<00>'

icoms: Write_Read called with '^M'
icoms: About to write '^M' ICOM err 0x0
icoms: Read called
icoms: About to return read '<00>' ICOM err 0x0
icoms: Write_Read Write_Read success, returning '<00>'

icoms: Write_Read called with '0PR^M'
icoms: About to write '0PR^M' ICOM err 0x0
icoms: Read called
icoms: About to return read '<00>' ICOM err 0x0
icoms: Write_Read Write_Read success, returning '<00>'
dtp92: init coms has suceeded
dtp92: About to init instrument

...

It seems like something different with the way it is writing to the USB device.

./dispcal -v -D255 -K acd shows:

icoms: usb port characteristics set ok

icoms: Write_Read called with '0PR^M'
icoms: About to write '0PR^M' libusb:error [submit_bulk_transfer] submiturb 
failed error -1 errno=22
ICOM err 0x200
icoms: Write_Read Write failed - returning 0x200

errno=22 == EINVAL

strace of the area:

write(2, "\nicoms: Write_Read called with '0PR^M'\n", 39
icoms: Write_Read called with '0PR^M'
) = 39
write(2, "icoms: About to write '0PR^M' ", 30icoms: About to write '0PR^M' ) = 
30
ioctl(5, USBDEVFS_SUBMITURB or USBDEVFS_SUBMITURB32, 0x79d420) = -1 EINVAL 
(Invalid argument)
write(2, "ICOM err 0x200\n", 15ICOM err 0x200
)        = 15
write(2, "icoms: Write_Read Write failed - returning 0x200\n", 49icoms: 
Write_Read Write failed - returning 0x200
) = 49

gdb:

[sroot@oof:/usr/src/argyll/Argyll_V1.3.0/spectro]# gdb --args ./dispcal -v -D5 
-K acd
GNU gdb (GDB) 7.2-debian
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from /usr/src/argyll/Argyll_V1.3.0/spectro/dispcal...done.
(gdb) set print pretty
(gdb) b ioctl
Breakpoint 1 at 0x403bf8
(gdb) r
Starting program: /usr/src/argyll/Argyll_V1.3.0/spectro/dispcal -v -D5 -K acd
[Thread debugging using libthread_db enabled]
Checking XRandR 1.2 VideoLUT access
XRandR 1.2 is faulty - falling back to older extensions
get_displays checking for Xinerama
Display 0 name = ':0.0'
Display 1 name = ':0.1'
Setting up the instrument
usb_get_paths about to look through devices:
usb_check_and_add() called with VID 0x1d6b, PID 0x2
usb_check_and_add() called with VID 0x1d6b, PID 0x2
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_check_and_add() called with VID 0x1d6b, PID 0x1
usb_check_and_add() called with VID 0x51d, PID 0x2
usb_check_and_add() called with VID 0x9da, PID 0xe
usb_check_and_add() called with VID 0x765, PID 0xd094
usb_check_and_add() found known instrument
usb_check_and_add() called with VID 0x5ac, PID 0x911c
usb_check_and_add() called with VID 0x5ac, PID 0x921c
managed to open serial "/dev/ttyS2"
managed to open serial "/dev/ttyS1"
managed to open serial "/dev/ttyS3"
managed to open serial "/dev/ttyS0"
dtp92: About to init coms
dtp92Q/dtp94: About to init USB
icoms: About to set usb port characteristics
icoms: About to open the USB port
icoms: USB port needs opening
icoms: About to open USB port 'usb:/bus5/dev7/ (Xrite DTP94)'

Breakpoint 1, ioctl () at ../sysdeps/unix/syscall-template.S:82
82      ../sysdeps/unix/syscall-template.S: No such file or directory.
        in ../sysdeps/unix/syscall-template.S
(gdb) up
#1  0x00000000004ec11d in op_set_configuration (handle=0x7a0f00, config=1) at 
libusb1/libusb/os/linux_usbfs.c:1100
1100            int r = ioctl(fd, IOCTL_USBFS_SETCONFIG, &config);
(gdb) c
Continuing.

Breakpoint 1, ioctl () at ../sysdeps/unix/syscall-template.S:82
82      ../sysdeps/unix/syscall-template.S: No such file or directory.
        in ../sysdeps/unix/syscall-template.S
(gdb) up
#1  0x00000000004ec27d in op_claim_interface (handle=0x7a0f00, iface=0) at 
libusb1/libusb/os/linux_usbfs.c:1134
1134            int r = ioctl(fd, IOCTL_USBFS_CLAIMINTF, &iface);
(gdb) c
Continuing.

Breakpoint 1, ioctl () at ../sysdeps/unix/syscall-template.S:82
82      ../sysdeps/unix/syscall-template.S: No such file or directory.
        in ../sysdeps/unix/syscall-template.S
(gdb) up
#1  0x00000000004ec552 in op_clear_halt (handle=0x7a0f00, endpoint=129 '\201') 
at libusb1/libusb/os/linux_usbfs.c:1214
1214            int r = ioctl(fd, IOCTL_USBFS_CLEAR_HALT, &_endpoint);
(gdb) c
Continuing.

Breakpoint 1, ioctl () at ../sysdeps/unix/syscall-template.S:82
82      ../sysdeps/unix/syscall-template.S: No such file or directory.
        in ../sysdeps/unix/syscall-template.S
(gdb) up
#1  0x00000000004ec552 in op_clear_halt (handle=0x7a0f00, endpoint=2 '\002') at 
libusb1/libusb/os/linux_usbfs.c:1214
1214            int r = ioctl(fd, IOCTL_USBFS_CLEAR_HALT, &_endpoint);
(gdb) c
Continuing.
icoms: USB port is now open
icoms: Clearing any USB errors
icoms: usb port characteristics set ok

icoms: Write_Read called with '0PR^M'
icoms: About to write '0PR^M' 
Breakpoint 1, ioctl () at ../sysdeps/unix/syscall-template.S:82
82      ../sysdeps/unix/syscall-template.S: No such file or directory.
        in ../sysdeps/unix/syscall-template.S
(gdb) up
#1  0x00000000004ecc32 in submit_bulk_transfer (itransfer=0x7a0360, urb_type=1 
'\001') at libusb1/libusb/os/linux_usbfs.c:1414
1414                    r = ioctl(dpriv->fd, IOCTL_USBFS_SUBMITURB, urb);
(gdb) print *urb
$1 = {
  type = 1 '\001', 
  endpoint = 2 '\002', 
  status = 0, 
  flags = 1, 
  buffer = 0x4f5399, 
  buffer_length = 4, 
  actual_length = 0, 
  start_frame = 0, 
  number_of_packets = 0, 
  error_count = 0, 
  signr = 0, 
  usercontext = 0x7a0360, 
  iso_frame_desc = 0x7a0420
}
(gdb) x/4xb 0x4f5399
0x4f5399:       0x30    0x50    0x52    0x0d
(gdb) c
Continuing.
ICOM err 0x200
icoms: Write_Read Write failed - returning 0x200

icoms: Write_Read called with '0PR^M'
icoms: About to write '0PR^M' 

gdb of 1.1.1 is a bit longer, but the ioctl() seems to work fine:

icoms: USB port is now open
icoms: Clearing any USB errors
icoms: usb port characteristics set ok

icoms: Write_Read called with '0PR^M'
icoms: About to write '0PR^M' 
Breakpoint 1, ioctl () at ../sysdeps/unix/syscall-template.S:82
82      in ../sysdeps/unix/syscall-template.S
(gdb) bt
#0  ioctl () at ../sysdeps/unix/syscall-template.S:82
#1  0x000000000045ad5f in usb_urb_transfer (dev=0x782970, ep=2, urbtype=1, 
bytes=<value optimized out>, size=<value optimized out>, timeout=<value 
optimized out>) at linux.c:219
#2  0x000000000045b609 in usb_interrupt_write (dev=0x3, ep=-2143791862, 
bytes=<value optimized out>, size=<value optimized out>, timeout=<value 
optimized out>) at linux.c:467
#3  0x0000000000456200 in icoms_usb_interrupt_write ()
#4  0x0000000000456625 in icoms_usb_ser_write ()
#5  0x0000000000456085 in icoms_write_read ()
#6  0x0000000000423228 in T.69 ()
#7  0x00000000004232c9 in dtp92_command ()
#8  0x0000000000423d20 in dtp92_init_coms ()
#9  0x0000000000412399 in disprd_calibration ()
#10 0x00000000004071cf in main ()
(gdb) up
#1  0x000000000045ad5f in usb_urb_transfer (dev=0x782970, ep=2, urbtype=1, 
bytes=<value optimized out>, size=<value optimized out>, timeout=<value 
optimized out>) at linux.c:219
219       ret = ioctl(dev->fd, IOCTL_USB_SUBMITURB, &urb[0]);
(gdb) print *urb
$1 = {type = 1 '\001', endpoint = 2 '\002', status = 32767, flags = 0, buffer = 
0x4e73b9, buffer_length = 4, actual_length = 0, start_frame = 7853120, 
number_of_packets = 0, error_count = -1, signr = 0, 
  usercontext = 0x0, iso_frame_desc = 0x7ffffffd9100}
(gdb) x/4xb 0x4e73b9
0x4e73b9:       0x30    0x50    0x52    0x0d

Cheers,

Simon-

Other related posts: