From 41df68cba07a824679de305b35dcd32304679664 Mon Sep 17 00:00:00 2001 From: Andreas Gruenbacher Date: Fri, 27 Mar 2020 11:36:45 +0100 Subject: [PATCH] Add getusbprinterid script Add getusbprinterid script (based on the getusbprinterid.pl script described in https://github.com/OpenPrinting/foomatic-db/blob/master/README). --- getusbprinterid | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100755 getusbprinterid diff --git a/getusbprinterid b/getusbprinterid new file mode 100755 index 0000000..c663884 --- /dev/null +++ b/getusbprinterid @@ -0,0 +1,25 @@ +#!/usr/bin/perl + +# len = 1024 +# LPIOC_GET_DEVICE_ID(len) = _IOC(_IOC_READ, 'P', IOCNR_GET_DEVICE_ID, len) +# _IOC(), _IOC_READ as defined in /usr/include/asm/ioctl.h +$LPIOC_GET_DEVICE_ID = 0x84005001; +$LPIOC_GET_VID_PID = 0x84005006; + +open FILE, "$ARGV[0]" or die "cannot open $ARGV[0]"; + +my $result; +ioctl(FILE, $LPIOC_GET_DEVICE_ID , $result) or die; +# Cut resulting string to its real length +my $length = ord(substr($result, 1, 1)) + (ord(substr($result, 0, 1)) << 8); +$result = substr($result, 2, $length-2); +# Remove non-printable characters +$result =~ tr/[\x0-\x1f]/\./; +print "DeviceID $result\n"; + +$result = pack("LL",0); +ioctl(FILE, $LPIOC_GET_VID_PID, $result) or die; +my( $v1, $v2 ) = unpack("LL", $result ); +print "Vendor '$v1', Product '$v2'\n"; + +close FILE;