{"id":687,"date":"2012-09-01T01:42:48","date_gmt":"2012-08-31T23:42:48","guid":{"rendered":"http:\/\/blog.ulrichard.ch\/?p=687"},"modified":"2012-09-01T01:42:48","modified_gmt":"2012-08-31T23:42:48","slug":"payment-slip-reader","status":"publish","type":"post","link":"https:\/\/ulrichard.ch\/blog\/?p=687","title":{"rendered":"payment slip reader"},"content":{"rendered":"<p>Probably the first time I got in contact with one of the pen style payment slip readers, was when I was working for <a href=\"http:\/\/www.topcapturegroup.com\" target=\"_blank\" rel=\"noopener\">TCG<\/a>. They only come with drivers for Windows and in the meantime also for Mac. I contacted their support more than once, asking for a linux driver. No success so far. So I decided to get one cheap from <a href=\"http:\/\/ricardo.ch\" target=\"_blank\" rel=\"noopener\">ricardo.ch<\/a> (similar to <a href=\"http:\/\/ebay.com\" target=\"_blank\" rel=\"noopener\">ebay.com<\/a>). I was really lucky, and got one that makes noise when shaking for CHF 5. <a href=\"https:\/\/www.clx-shop.com\/de\/Belegleser\/CLX-PayPen-spacer-1.html\">A new one<\/a> would cost more than CHF 200. They have a very effective way of making sure people buy new ones from time to time. They just don&#8217;t release drivers for the older devices on newer versions of Windows. Well, that happens a lot in the Windows world, that people are forced to buy new devices. So there are a lot of devices floating around on ricardo.ch which only run on WindowsXP 32bit. Mine is one of those, but since I want to use it on linux that should be no problem.<\/p>\n<table border =0>\n<tr>\n<td>\n<a href=\"https:\/\/ulrichard.ch\/piwigo\/index.php?\/category\/49\"><img decoding=\"async\" src=\"https:\/\/ulrichard.ch\/piwigo\/_data\/i\/upload\/2015\/11\/09\/20151109235110-0d658a31-th.jpg\"\/><\/a><\/td>\n<\/tr>\n<\/table>\n<p>When I first plugged it in, the USB id was recognized correctly:<\/p>\n<pre class=\"brush: bash; gutter: false; first-line: 1\">$ lsusb\n...\nBus 002 Device 010: ID 0a93:0002 C Technologies AB C-Pen 10<\/pre>\n<p>But that was about it.<\/p>\n<p>Trying to capture the communication on the USB port worked nicely with WireShark under ubuntu. But as I had no driver for it, there was not much communication to monitor. So I had to capture on a Windows box. Not so easy in a Windows-free zone. I have a VMWare virtual machine on my harddisk that I used some time ago to maintain an ancient project. But the outdated WMWare-Player could not run with my current installation. I had to upgrade it. It compiled the kernel modules with some minor help. But then the VM wouldn&#8217;t boot. I suspect, they changed the hardware they emulate. That would be no problem with linux, but Windows has real trouble with changing hardware. That was the same reason, I could not migrate that VM to VirtualBox some years ago. So, I installed a new Windows VM with VirtualBox. But now I could not figure out how to make the USB device accessible to the guest OS. The next try was qemu. It&#8217;s not as point and clicky as the other two products, but it&#8217;s really powerful and comes with loads of features. I grow to like it ever more. <!--more-->Although there are some <a href=\"https:\/\/help.ubuntu.com\/community\/WindowsXPUnderQemuHowTo\">very good tutorials on qemu<\/a>, some commands changed with the latest upgrade, so I list them here. In fact the whole thing runs faster if you <a href=\"http:\/\/ubuntuforums.org\/showthread.php?t=6509\">create an image from your installation media<\/a> in advance.<\/p>\n<pre class=\"brush: bash; gutter: false; first-line: 1\">sudo umount \/media\/windows\ndd if=\/dev\/sr1 of=windows.iso\nqemu-img create -f qcow windows_2k.img 4G\nqemu-system-i386 -localtime -cdrom windows.iso -m 384 -boot d -usb -usbdevice host:0a93:0002 -net nic,model=ne2k_pci -net user windows_2k.img<\/pre>\n<p>I don&#8217;t know why, but the installation took very long. Then I installed the driver software, and it was really recognized, and pressing the button on the device generated a return keystroke as it was configured to do. But when I tried to scan something, it would appear to process some data with the OCR software, but I didn&#8217;t get any output. Well, I tried it on what I had laying on my desk. That was a business card. It contained letters and numbers in varying sizes. But nothing of it was recognized. Then I grabbed a payment slip from the drawer. After all, that&#8217;s what the device is designed for. It contains OCR-B digits in exactly the size that&#8217;s expected. And &#8230;. it worked!<\/p>\n<p>Next thing was installing <a href=\"http:\/\/benoit.papillault.free.fr\/usbsnoop\/\">usbsnoop<\/a> for capturing the USB traffic. But there were also some minor road blockers ahead. Ah right, Windows 2000 didn&#8217;t have anything to unzip a file. That was the era when everybody had a shareware version of WinZip. Oh, cool the sourceforge download page doesn&#8217;t work with Internet Exploder 5.0.<\/p>\n<p>The <a href=\"https:\/\/github.com\/ulrichard\/mypen\/blob\/master\/logs\/usbsnoop.log\" target=\"_blank\" rel=\"noopener\">log file<\/a> is actually quite large, and a guy at the <a href=\"http:\/\/www.sane-project.org\/\" target=\"_blank\" rel=\"noopener\">sane<\/a> mailing list told me, I&#8217;m going to spend a lot of time looking at these <a href=\"https:\/\/github.com\/ulrichard\/mypen\/tree\/master\/logs\" target=\"_blank\" rel=\"noopener\">logs<\/a>.<\/p>\n<pre class=\"brush: bash; gutter: false; first-line: 1\">[0 ms] UsbSnoop compiled on Jan 18 2003 22:41:32 loading\n[0 ms] UsbSnoop - DriverEntry(f2342c40) : Windows NT WDM version 1.16\n[27 ms] UsbSnoop - AddDevice(f2342f50) : DriverObject 827873d0, pdo 825ffaf0\n[27 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_PNP (0x00000018)\n[27 ms] UsbSnoop - MyDispatchPNP(f2342ee0) : IRP_MJ_PNP (0x00000018)\n[27 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_PNP (IRP_MN_QUERY_RESOURCE_REQUIREMENTS)\n[27 ms] UsbSnoop - MyDispatchPNP(f2342ee0) : IRP_MJ_PNP (IRP_MN_QUERY_RESOURCE_REQUIREMENTS)\n[28 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_PNP (IRP_MN_FILTER_RESOURCE_REQUIREMENTS)\n[28 ms] UsbSnoop - MyDispatchPNP(f2342ee0) : IRP_MJ_PNP (IRP_MN_FILTER_RESOURCE_REQUIREMENTS)\n[28 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_PNP (IRP_MN_START_DEVICE)\n[28 ms] UsbSnoop - MyDispatchPNP(f2342ee0) : IRP_MJ_PNP (IRP_MN_START_DEVICE)\n[28 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_INTERNAL_DEVICE_CONTROL\n[28 ms] UsbSnoop - MyDispatchInternalIOCTL(f2341e80) : fdo=825ffaf0, Irp=82521608, IRQL=0\n[28 ms] &gt;&gt;&gt; URB 1 going down &gt;&gt;&gt;\n-- URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE:\nTransferBufferLength = 00000012\nTransferBuffer = 8252f068\nTransferBufferMDL = 00000000\nIndex = 00000000\nDescriptorType = 00000001 (USB_DEVICE_DESCRIPTOR_TYPE)\nLanguageId = 00000000\n[33 ms] UsbSnoop - MyInternalIOCTLCompletion(f2341db0) : fido=00000000, Irp=82521608, Context=8251e948, IRQL=2\n[33 ms] &lt;&lt;&lt; URB 1 coming back &lt;&lt;&lt;\n-- URB_FUNCTION_CONTROL_TRANSFER:\nPipeHandle = 824f2b74\nTransferFlags = 005c0077 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 00000012\nTransferBuffer = 8252f068\nTransferBufferMDL = 82644068\n00000000: 12 01 00 02 ff 00 00 08 93 0a 02 00 17 01 01 02\n00000010: 03 01\nUrbLink = 00000000\nSetupPacket =\n00000000: 80 06 00 01 00 00 12 00\n[33 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_INTERNAL_DEVICE_CONTROL\n[33 ms] UsbSnoop - MyDispatchInternalIOCTL(f2341e80) : fdo=825ffaf0, Irp=82521608, IRQL=0\n[33 ms] &gt;&gt;&gt; URB 2 going down &gt;&gt;&gt;\n-- URB_FUNCTION_GET_DESCRIPTOR_FROM_DEVICE:\nTransferBufferLength = 00000209\nTransferBuffer = 824f3008\nTransferBufferMDL = 00000000\nIndex = 00000000\nDescriptorType = 00000002 (USB_CONFIGURATION_DESCRIPTOR_TYPE)\nLanguageId = 00000000\n[43 ms] UsbSnoop - MyInternalIOCTLCompletion(f2341db0) : fido=00000000, Irp=82521608, Context=826386a8, IRQL=2\n[43 ms] &lt;&lt;&lt; URB 2 coming back &lt;&lt;&lt;\n-- URB_FUNCTION_CONTROL_TRANSFER:\nPipeHandle = 824f2b74\nTransferFlags = 005c0077 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 00000028\nTransferBuffer = 824f3008\nTransferBufferMDL = 82644068\n00000000: 09 02 20 00 01 01 00 a0 64 09 04 00 00 02 ff 00\n00000010: ff 00 07 05 81 03 08 00 01 07 05 82 03 40 00 01\n00000020: 00 00 00 00 00 00 00 00\nUrbLink = 00000000\nSetupPacket =\n00000000: 80 06 00 02 00 00 09 02\n[43 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_INTERNAL_DEVICE_CONTROL\n[43 ms] UsbSnoop - MyDispatchInternalIOCTL(f2341e80) : fdo=825ffaf0, Irp=82521608, IRQL=0\n[43 ms] &gt;&gt;&gt; URB 3 going down &gt;&gt;&gt;\n-- URB_FUNCTION_SELECT_CONFIGURATION:\nConfigurationDescriptor = 0x824f3008 (configure)\nConfigurationDescriptor : bLength = 9\nConfigurationDescriptor : bDescriptorType = 0x00000002\nConfigurationDescriptor : wTotalLength = 0x00000020\nConfigurationDescriptor : bNumInterfaces = 0x00000001\nConfigurationDescriptor : bConfigurationValue = 0x00000001\nConfigurationDescriptor : iConfiguration = 0x00000000\nConfigurationDescriptor : bmAttributes = 0x000000a0\nConfigurationDescriptor : MaxPower = 0x00000064\nConfigurationHandle = 0x005c0077\nInterface[0]: Length = 56\nInterface[0]: InterfaceNumber = 0\nInterface[0]: AlternateSetting = 0\n[46 ms] UsbSnoop - MyInternalIOCTLCompletion(f2341db0) : fido=00000000, Irp=82521608, Context=82561c08, IRQL=0\n[46 ms] &lt;&lt;&lt; URB 3 coming back &lt;&lt;&lt;\n-- URB_FUNCTION_SELECT_CONFIGURATION:\nConfigurationDescriptor = 0x824f3008 (configure)\nConfigurationDescriptor : bLength = 9\nConfigurationDescriptor : bDescriptorType = 0x00000002\nConfigurationDescriptor : wTotalLength = 0x00000020\nConfigurationDescriptor : bNumInterfaces = 0x00000001\nConfigurationDescriptor : bConfigurationValue = 0x00000001\nConfigurationDescriptor : iConfiguration = 0x00000000\nConfigurationDescriptor : bmAttributes = 0x000000a0\nConfigurationDescriptor : MaxPower = 0x00000064\nConfigurationHandle = 0xe11e4bc8\nInterface[0]: Length = 56\nInterface[0]: InterfaceNumber = 0\nInterface[0]: AlternateSetting = 0\nInterface[0]: Class = 0x000000ff\nInterface[0]: SubClass = 0x00000000\nInterface[0]: Protocol = 0x000000ff\nInterface[0]: InterfaceHandle = 0x82563828\nInterface[0]: NumberOfPipes = 2\nInterface[0]: Pipes[0] : MaximumPacketSize = 0x00000008\nInterface[0]: Pipes[0] : EndpointAddress = 0x00000081\nInterface[0]: Pipes[0] : Interval = 0x00000001\nInterface[0]: Pipes[0] : PipeType = 0x00000003 (UsbdPipeTypeInterrupt)\nInterface[0]: Pipes[0] : PipeHandle = 0x82563840\nInterface[0]: Pipes[0] : MaxTransferSize = 0x00001000\nInterface[0]: Pipes[0] : PipeFlags = 0x00000000\nInterface[0]: Pipes[1] : MaximumPacketSize = 0x00000040\nInterface[0]: Pipes[1] : EndpointAddress = 0x00000082\nInterface[0]: Pipes[1] : Interval = 0x00000001\nInterface[0]: Pipes[1] : PipeType = 0x00000003 (UsbdPipeTypeInterrupt)\nInterface[0]: Pipes[1] : PipeHandle = 0x8256385c\nInterface[0]: Pipes[1] : MaxTransferSize = 0x00001000\nInterface[0]: Pipes[1] : PipeFlags = 0x00000000\n[47 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_PNP (IRP_MN_QUERY_CAPABILITIES)\n[47 ms] UsbSnoop - MyDispatchPNP(f2342ee0) : IRP_MJ_PNP (IRP_MN_QUERY_CAPABILITIES)\n[47 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_PNP (IRP_MN_QUERY_PNP_DEVICE_STATE)\n[47 ms] UsbSnoop - MyDispatchPNP(f2342ee0) : IRP_MJ_PNP (IRP_MN_QUERY_PNP_DEVICE_STATE)\n[47 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_PNP (IRP_MN_QUERY_DEVICE_RELATIONS)\n[47 ms] UsbSnoop - MyDispatchPNP(f2342ee0) : IRP_MJ_PNP (IRP_MN_QUERY_DEVICE_RELATIONS)\n[47 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_PNP (IRP_MN_QUERY_DEVICE_RELATIONS)\n[47 ms] UsbSnoop - MyDispatchPNP(f2342ee0) : IRP_MJ_PNP (IRP_MN_QUERY_DEVICE_RELATIONS)\n[49 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_INTERNAL_DEVICE_CONTROL\n[49 ms] UsbSnoop - MyDispatchInternalIOCTL(f2341e80) : fdo=825ffaf0, Irp=82521608, IRQL=0\n[49 ms] &gt;&gt;&gt; URB 4 going down &gt;&gt;&gt;\n-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\nPipeHandle = 82563840 [endpoint 0x00000081]\nTransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 00000008\nTransferBuffer = 82546168\nTransferBufferMDL = 00000000\nUrbLink = 00000000\n[50 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_INTERNAL_DEVICE_CONTROL\n[50 ms] UsbSnoop - MyDispatchInternalIOCTL(f2341e80) : fdo=825ffaf0, Irp=82701008, IRQL=0\n[50 ms] &gt;&gt;&gt; URB 5 going down &gt;&gt;&gt;\n-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\nPipeHandle = 8256385c [endpoint 0x00000082]\nTransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 0000041c\nTransferBuffer = 826de3e8\nTransferBufferMDL = 00000000\nUrbLink = 00000000\n[50 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_INTERNAL_DEVICE_CONTROL\n[50 ms] UsbSnoop - MyDispatchInternalIOCTL(f2341e80) : fdo=825ffaf0, Irp=82609848, IRQL=0\n[50 ms] &gt;&gt;&gt; URB 6 going down &gt;&gt;&gt;\n-- URB_FUNCTION_VENDOR_DEVICE:\nTransferFlags = 00000000 (USBD_TRANSFER_DIRECTION_OUT, ~USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 00000000\nTransferBuffer = 00000000\nTransferBufferMDL = 00000000\n\nno data supplied\nUrbLink = 00000000\nRequestTypeReservedBits = 00000000\nRequest = 000000fe\nValue = 000000de\nIndex = 00000005\n[53 ms] UsbSnoop - MyInternalIOCTLCompletion(f2341db0) : fido=00000000, Irp=82609848, Context=82542268, IRQL=2\n[53 ms] &lt;&lt;&lt; URB 6 coming back &lt;&lt;&lt;\n-- URB_FUNCTION_CONTROL_TRANSFER:\nPipeHandle = 824f2b74\nTransferFlags = 00000002 (USBD_TRANSFER_DIRECTION_OUT, USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 00000000\nTransferBuffer = 00000000\nTransferBufferMDL = 00000000\nUrbLink = 00000000\nSetupPacket =\n00000000: 40 fe de 00 05 00 00 00\n[7930 ms] UsbSnoop - MyInternalIOCTLCompletion(f2341db0) : fido=00000000, Irp=82521608, Context=825a32e8, IRQL=2\n[7930 ms] &lt;&lt;&lt; URB 4 coming back &lt;&lt;&lt;\n-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\nPipeHandle = 82563840 [endpoint 0x00000081]\nTransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 00000007\nTransferBuffer = 82546168\nTransferBufferMDL = 82644068\n00000000: 01 01 17 01 00 30 05\nUrbLink = 00000000\n[7930 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_INTERNAL_DEVICE_CONTROL\n[7930 ms] UsbSnoop - MyDispatchInternalIOCTL(f2341e80) : fdo=825ffaf0, Irp=82521608, IRQL=2\n[7930 ms] &gt;&gt;&gt; URB 7 going down &gt;&gt;&gt;\n-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\nPipeHandle = 82563840 [endpoint 0x00000081]\nTransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 00000008\nTransferBuffer = 82546168\nTransferBufferMDL = 00000000\nUrbLink = 00000000\n[7941 ms] UsbSnoop - MyInternalIOCTLCompletion(f2341db0) : fido=00000000, Irp=82701008, Context=825364a8, IRQL=2\n[7941 ms] &lt;&lt;&lt; URB 5 coming back &lt;&lt;&lt;\n-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\nPipeHandle = 8256385c [endpoint 0x00000082]\nTransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 00000006\nTransferBuffer = 826de3e8\nTransferBufferMDL = 8255c128\n00000000: 01 01 17 01 01 20\nUrbLink = 00000000\n[7941 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_INTERNAL_DEVICE_CONTROL\n[7941 ms] UsbSnoop - MyDispatchInternalIOCTL(f2341e80) : fdo=825ffaf0, Irp=82701008, IRQL=2\n[7941 ms] &gt;&gt;&gt; URB 8 going down &gt;&gt;&gt;\n-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\nPipeHandle = 8256385c [endpoint 0x00000082]\nTransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 0000041c\nTransferBuffer = 826de3e8\nTransferBufferMDL = 00000000\nUrbLink = 00000000\n[7978 ms] UsbSnoop - MyInternalIOCTLCompletion(f2341db0) : fido=00000000, Irp=82701008, Context=82546768, IRQL=2\n[7978 ms] &lt;&lt;&lt; URB 8 coming back &lt;&lt;&lt;\n-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\nPipeHandle = 8256385c [endpoint 0x00000082]\nTransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 0000014e\nTransferBuffer = 826de3e8\nTransferBufferMDL = 8255c128\n00000000: 01 01 17 01 00 20 00 00 00 00 00 00 00 00 68 00\n00000010: 50 00 00 00 38 01 f0 ff ff ff ff ff ff ff ff ff\n00000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000080: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 75\n00000090: ff ff ff e3 ff ff df 2f ff ff cf 3f ff ff af 5f\n000000a0: ff ff 9f 5f ff ff 8f 68 f7 ff ff 78 78 ff ff 7f\n000000b0: 96 f7 ff ff 67 6a ff ff 6f a7 f6 ff ff 76 7a ff\n000000c0: ff 5f a7 f7 ff ff 75 7a ff ff 5f a7 f7 ff ff 75\n000000d0: 7a ff ff 6f a6 f7 ff ff 66 7a ff ff 5f a7 f7 ff\n000000e0: ff 75 7a ff ff 5f a7 f7 ff ff 75 7a ff ff 6f a6\n000000f0: f7 ff ff 75 7a ff ff 5f a7 f6 ff ff 67 6a ff ff\n00000100: 7f 97 f6 ff ff 77 78 ff ff 7f 68 f8 ff ff f7 f6\n00000110: ff ff f9 f5 ff ff f9 f5 ff 1f f7 f2 f3 ff ff fc\n00000120: f1 ff ff 0f fc ff ff ff ff ff ff ff ff ff ff ff\n00000130: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000140: ff ff ff ff ff ff ff ff ff ff ff ff ff ff\nUrbLink = 00000000\n[7978 ms] UsbSnoop - DispatchAny(f2340610) : IRP_MJ_INTERNAL_DEVICE_CONTROL\n[7978 ms] UsbSnoop - MyDispatchInternalIOCTL(f2341e80) : fdo=825ffaf0, Irp=82701008, IRQL=2\n[7978 ms] &gt;&gt;&gt; URB 9 going down &gt;&gt;&gt;\n-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\nPipeHandle = 8256385c [endpoint 0x00000082]\nTransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 0000041c\nTransferBuffer = 826de3e8\nTransferBufferMDL = 00000000\nUrbLink = 00000000\n[8329 ms] UsbSnoop - MyInternalIOCTLCompletion(f2341db0) : fido=00000000, Irp=82701008, Context=827cc288, IRQL=2\n[8329 ms] &lt;&lt;&lt; URB 9 coming back &lt;&lt;&lt;\n-- URB_FUNCTION_BULK_OR_INTERRUPT_TRANSFER:\nPipeHandle = 8256385c [endpoint 0x00000082]\nTransferFlags = 00000003 (USBD_TRANSFER_DIRECTION_IN, USBD_SHORT_TRANSFER_OK)\nTransferBufferLength = 00000162\nTransferBuffer = 826de3e8\nTransferBufferMDL = 8255c128\n00000000: 01 01 17 01 00 20 0d 00 00 00 02 00 00 00 68 00\n00000010: 50 00 00 00 4c 01 f0 ff ff ff ff ff ff ff ff ff\n00000020: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000030: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000040: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000050: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000060: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000070: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000080: ff ff ff ff ff 2b ff ff d7 3f f6 ff 5f 2f 0f f7\n00000090: ff 5f 3f 8d ff ff f4 b5 f9 ff 4f 5f 9b ff ff a3\n000000a0: 92 8a ff ff 75 68 7a ff ff 86 77 79 ff ff 75 79\n000000b0: 69 ff ff 76 6a 69 ff ff 76 7a 68 ff ff 76 7a 68\n000000c0: ff ff 76 7a 68 ff ff 66 7b 68 ff ff 66 7b 68 ff\n000000d0: ff 66 7b 68 ff ff 76 7a 68 ff ff 66 7b 68 ff ff\n000000e0: 66 7b 68 ff ff 66 7b 68 ff ff 76 7a 68 ff ff 76\n000000f0: 7a 68 ff ff 76 7a 68 ff ff 76 7a 78 ff ff 75 6a\n00000100: 79 ff ff 75 6a 79 ff ff 76 78 79 ff ff 76 78 8a\n00000110: ff ff 94 94 9a ff ff f3 b6 f9 ff 4f 5f 8c ff ff\n00000120: f4 c5 f8 ff 5f 3f 7e ff ff f7 f0 52 ff 9f 87 f9\n00000130: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff\n00000140: ff ff ff ff ff ff ff ff ff ff ff ff ff ff bf f1\n00000150: ff ff ff ff ff ff ff ff ff ff ff ff ff ff 11 f1<\/pre>\n<p>To be continued &#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Probably the first time I got in contact with one of the pen style payment slip readers, was when I was working for TCG. They only come with drivers for Windows and in the meantime also for Mac. I contacted their support more than once, asking for a linux driver. No success so far. So [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,7,1],"tags":[72,135,156],"class_list":["post-687","post","type-post","status-publish","format-standard","hentry","category-projects","category-software","category-uncategorized","tag-driver","tag-linux","tag-ocr"],"_links":{"self":[{"href":"https:\/\/ulrichard.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/687","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ulrichard.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ulrichard.ch\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ulrichard.ch\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ulrichard.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=687"}],"version-history":[{"count":0,"href":"https:\/\/ulrichard.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/687\/revisions"}],"wp:attachment":[{"href":"https:\/\/ulrichard.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=687"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ulrichard.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=687"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ulrichard.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=687"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}