Mark Copper wrote: > On Tue, Apr 4, 2017 at 2:36 PM, songbird <songb...@anthive.com> wrote: >> Mark Copper wrote: >>>> >>>> is it missing a build dependency or something? >>>> >>>> what does apt-get build-dep libinline-c-perl do? >>>> >>> >>> >>> The following NEW packages will be installed: >>> libfile-sharedir-install-perl libio-all-perl libspiffy-perl >>> libsub-uplevel-perl libtest-warn-perl >>> >>> I wasn't expecting that. >>> >>> The package libdevice-usb-perl seemed to install without difficulty. >>> It works in the sense that the main constructor functions, but other >>> things don't work. I know it's old code but I just need to read a >>> number from an interrupt endpoint so I was just trying chase down >>> whether it was an easy-to-fix problem. >> >> remember that installing a package for use >> is different than installing a package for >> building. >> >> did you try the same command for libdevice-usb-perl? >> >> aka: >> >> apt-get build-dep libdevice-usb-perl >> >> ? > > Nothing at all there. I'm thinking it must be something simple. This > test produces the output below which made me think not all the C code > was getting read in properly. > > #!/usr/bin/perl > > use warnings; > use strict; > use Device::USB; > use Carp; > use Data::Dumper; > $Data::Dumper::Indent = 1; > > my $data; > my $VENDOR=0x0b67; > my $PRODUCT=0x555e; > my $usb = Device::USB->new(); > my $dev = $usb->find_device( $VENDOR, $PRODUCT ); > croak "Device not found.\n" unless defined $dev; > print "Device found: ", $dev->filename(), ": "; > printf "Device: %04X:%04X\n", $dev->idVendor(), $dev->idProduct(); > if($dev->open()) > { > print "\t", $dev->manufacturer(), ": ", $dev->product(), "\n"; > print Dumper( $dev ); > } > print "Bytes read: " . $dev->interrupt_read(129, $data, 64, 1000) . "\n"; > print "Data read: " . $data . "\n"; > my $cfg = $dev->config()->[0]; > print "Config:", $cfg->iConfiguration(), ": interface count: ", > $cfg->nNumInterfaces(), "\n"; > __END__ > > > Output: > Use of uninitialized value in concatenation (.) or string at > /usr/lib/x86_64-linux-gnu/perl5/5.20/Device/USB.pm line 10. > Use of uninitialized value in concatenation (.) or string at > /usr/lib/x86_64-linux-gnu/perl5/5.20/Device/USB.pm line 10. > Use of uninitialized value in concatenation (.) or string at > /usr/lib/x86_64-linux-gnu/perl5/5.20/Device/USB.pm line 10. > Device found: 003: Device: 0B67:555E > : > $VAR1 = bless( { > 'descriptor' => { > 'idVendor' => 2919, > 'iProduct' => 2, > 'bcdDevice' => '0.04', > 'bcdUSB' => '1.10', > 'idProduct' => 21854, > 'bDeviceSubClass' => 0, > 'iSerialNumber' => 3, > 'bNumConfigurations' => 1, > 'bDeviceProtocol' => 0, > 'bMaxPacketSize0' => 64, > 'iManufacturer' => 1, > 'bDescriptorType' => 1, > 'bDeviceClass' => 0 > }, > 'config' => [ > bless( { > 'bConfigurationValue' => 1, > 'bNumInterfaces' => 1, > 'MaxPower' => 100, > 'bmAttributes' => 128, > 'wTotalLength' => 41, > 'interfaces' => [ > [ > bless( { > 'bAlternateSetting' => 0, > 'endpoints' => [ > bless( { > 'bDescriptorType' => 5, > 'bSynchAddress' => 0, > 'bRefresh' => 0, > 'wMaxPacketSize' => 6, > 'bEndpointAddress' => 129, > 'bInterval' => 50, > 'bmAttributes' => 3 > }, 'Device::USB::DevEndpoint' ), > bless( { > 'bmAttributes' => 3, > 'bInterval' => 100, > 'bEndpointAddress' => 2, > 'bSynchAddress' => 0, > 'wMaxPacketSize' => 14, > 'bRefresh' => 0, > 'bDescriptorType' => 5 > }, 'Device::USB::DevEndpoint' ) > ], > 'bInterfaceNumber' => 0, > 'bInterfaceSubClass' => 141, > 'bNumEndpoints' => 2, > 'bInterfaceClass' => 3, > 'bDescriptorType' => 4, > 'bInterfaceProtocol' => 141, > 'iInterface' => 0 > }, 'Device::USB::DevInterface' ) > ] > ], > 'bDescriptorType' => 2, > 'iConfiguration' => 4 > }, 'Device::USB::DevConfig' ) > ], > 'handle' => 16283552, > 'device' => 21499456, > 'filename' => '003' > }, 'Device::USB::Device' ); > Bytes read: -2 > Data read: > Can't locate object method "nNumInterfaces" via package > "Device::USB::DevConfig" at ./read_usb.pl line 26, <DATA> line 1.
hmm, in the docs i see: === This module depends on the Carp, Inline and Inline::C modules, as well as the strict and warnings pragmas. Obviously, libusb must be available since that is the entire reason for the module's existence. === but i don't see any references above to the Inline or Inline::C so i'm not sure if that's the problem or not? i'm not familiar enough with perl to otherwise debug this. songbird