use strict;
use warnings;
use Device::USB;

my $usb = Device::USB -> new();
my $dev = $usb -> find_device (0x04F3, 0x04A0);
#my $dev = $usb -> find_device (0x13FE, 0x1A00);
die "Device not found.\n" unless defined $dev;

print "Device: ", $dev->filename(), "\n";
printf "ID hex  %04x:%04x\n", $dev->idVendor(), $dev->idProduct();
printf "ID dec %5d:%5d\n\n", $dev->idVendor(), $dev->idProduct();

show('bcdUSB', $dev -> bcdUSB());
show('bDeviceClass', $dev -> bDeviceClass());
show('bDeviceSubClass', $dev -> bDeviceSubClass());
show('bDeviceProtocol', $dev -> bDeviceProtocol());
show('bMaxPacketSize0', $dev -> bMaxPacketSize0());
show('idVendor', sprintf('0x%04X',$dev -> idVendor()));
show('idProduct', sprintf('0x%04X',$dev -> idProduct()));
show('bcdDevice', $dev -> bcdDevice());
show('iManufacturer', $dev -> iManufacturer());
show('iProduct', $dev -> iProduct());
show('iSerialNumber', $dev -> iSerialNumber());
show('bNumConfigurations', $dev -> bNumConfigurations());
for my $i (0 .. $dev -> bNumConfigurations()-1)
  {
  show("\n[configuration $i]", '');
  my $cfg = $dev -> get_configuration ( $i);
  show('wTotalLength', $cfg -> wTotalLength());
  show('bNumInterfaces', $cfg -> bNumInterfaces());
  show('bConfigurationValue', $cfg -> bConfigurationValue());
  show('iConfiguration', $cfg -> iConfiguration());
  show('MaxPower', $cfg -> MaxPower() . ' mA');
  }

sub show
  {
  my ($key, $val) = @_;
  $key = substr ($key . ' 'x22, 0, 22);
  print ( $key, $val, "\n");
  }
