Is this printer really a RS232 device that has a USB<->RS232 converter inside it or attached to it? If so, you should use javax.comm to talk to it, not javax.usb. What device node do you tell cups to print on?
On Feb 19, 2008 3:12 AM, Daniel Strobl <[EMAIL PROTECTED]> wrote: > Hello, > > I need to translate a printer driver from parallel to USB. I have a Star TSP > 143, which supports ESCPOS. I have been using RXTX to talk to the printer > over /dev/lp0. > > My code already retrieves the status of the printer, which tells me if it is > out of paper and forth. > > But I am not able to get the printer to print. Therefore I have sniffed the > USB port once when printing with CUPS. And once when talking to it via > javax.usb. > > The difference between CUPS and javax.usb is the interrupt-events when > printing with CUPS. It seems to me that the kernel usblp-Modules does use > interrupts to send data to the printer. > > Is the a way to tell javax.usb to use interrupts or am I doing something > wrong in general? > > > The Code: > > public class USBTest implements UsbPipeListener, UsbDeviceListener { > > public static final byte PRN_CLASS = 0x07; > public static final byte PRN_SUBCLASS_BOOT_INTERFACE = 0x01; > public static final byte PROTOCOL_PRN = 0x02; > > public static void main(String argv[]) throws > UnsupportedEncodingException, UsbDisconnectedException, UsbException, > UsbNotActiveException, UsbNotOpenException, IllegalArgumentException, > InterruptedException > { > UsbHub virtualRootUsbHub = > ShowTopology.getVirtualRootUsbHub(); > List<InterfaceWithDeviceBag> usbInterfaces = > FindUsbInterface.getUsbInterfacesWithInterfaceClass(virtualRootUsbHub, > PRN_CLASS); > for (InterfaceWithDeviceBag > bag:usbInterfaces) { > UsbInterface usbInterface = > bag.interf; > > UsbInterfaceDescriptor desc = > usbInterface.getUsbInterfaceDescriptor(); > > if > (PRN_SUBCLASS_BOOT_INTERFACE == desc.bInterfaceSubClass() && PROTOCOL_PRN == > desc.bInterfaceProtocol()) { > > System.err.println("Drucker gefunden: > "+bag.device.getManufacturerString()+bag.device.getProductString()); > } > testPrint(bag.interf, > bag.device); > } > } > > public static void testPrint(UsbInterface usbInterface, > UsbDevice usbDevice) throws UsbNotActiveException, UsbNotOpenException, > IllegalArgumentException, UsbDisconnectedException, UsbException, > InterruptedException > { > UnicodeTranslator trans=new > UnicodeTranslatorInt(); > usbDevice.addUsbDeviceListener(new > USBTest()); > > try { > usbInterface.claim(new > UsbInterfacePolicy() { > public > boolean forceClaim(UsbInterface usbinterface) { > > return true; > } > }); > } catch ( UsbException uE ) { > System.out.println("Could not > claim interface to USB printer (remove module usblp)!!! : " + > uE.getMessage()); > return; > } > > List usbEndpoints = > usbInterface.getUsbEndpoints(); > > UsbEndpoint usbEndpoint_in = null; > UsbEndpoint usbEndpoint_out = null; > > for (int i=0; i<usbEndpoints.size(); i++) { > UsbEndpoint usbEndpoint_tmp = > (UsbEndpoint)usbEndpoints.get(i); > > > > if(UsbConst.ENDPOINT_DIRECTION_IN == usbEndpoint_tmp.getDirection()) > > usbEndpoint_in=usbEndpoint_tmp; > else > if(UsbConst.ENDPOINT_DIRECTION_OUT == usbEndpoint_tmp.getDirection()) > > usbEndpoint_out=usbEndpoint_tmp; > > System.err.println("endpoint > no "+i); > > } > if(usbEndpoint_in==null){ > System.err.println("No USB IN > Endpoint"); > return; > } > if(usbEndpoint_out==null){ > System.err.println("No USB > OUT Endpoint"); > return; > } > > > UsbPipe usbPipe_out = > usbEndpoint_out.getUsbPipe(); > UsbPipe usbPipe_in = > usbEndpoint_in.getUsbPipe(); > > try { > usbPipe_out.open(); > usbPipe_in.open(); > System.err.println("hatkein > papier?:"+isPrinterError(usbPipe_in)); > > > usbPipe_in.addUsbPipeListener(new USBTest()); > > //usbPipe_out.addUsbPipeListener(new USBTest()); > } catch ( UsbException uE ) { > > System.out.println("Could not > open out endpoint to communicate with USB Printer : " + uE.getMessage()); > try { usbInterface.release(); > } > catch ( UsbException uE2 ) { > } > return; > } > > // INIT > UsbIrp irp=usbPipe_out.createUsbIrp(); > > irp.setData(joinArray(StarComConstants.INIT_PRINTER,new > byte[]{0x1b,'U','0'})); > usbPipe_out.syncSubmit(irp); > > System.err.println("after init"); > byte[] bytesToRead = new byte[64]; > UsbIrp irpRead = usbPipe_in.createUsbIrp(); > irpRead.setData(bytesToRead); > usbPipe_in.asyncSubmit(irpRead); > irpRead.waitUntilComplete(1000); > for(int i=0;i<10;i++){ > > System.err.println(bytesToRead[i]); > } > > // PAPER > irp=usbPipe_out.createUsbIrp(); > > irp.setData(joinArray(StarComConstants.SELECT_PRINTER,StarComConstants.SET_ > PAPERWIDTH_80MM)); > usbPipe_out.syncSubmit(irp); > > > System.err.println("after set paper"); > bytesToRead = new byte[64]; > irpRead = usbPipe_in.createUsbIrp(); > irpRead.setData(bytesToRead); > usbPipe_in.asyncSubmit(irpRead); > irpRead.waitUntilComplete(1000); > for(int i=0;i<10;i++){ > > System.err.println(bytesToRead[i]); > } > > > // drucke was !! > irp=usbPipe_out.createUsbIrp(); > irp.setData(joinArray( > joinArray( > > joinArray(StarComConstants.IGNORE_SEQ_CMD, > ESCPOS.CHAR_FONT_3), ESCPOS.CHAR_SIZE_3),"please > print\n\n\n\n\n\n\n\n\n\n".getBytes()) > ); > > usbPipe_out.syncSubmit(irp); > > System.err.println("after drucke du sau"); > bytesToRead = new byte[64]; > IrpRead = usbPipe_in.createUsbIrp(); > irpRead.setData(bytesToRead); > usbPipe_in.asyncSubmit(irpRead); > irpRead.waitUntilComplete(1000); > for(int i=0;i<10;i++){ > > System.err.println(bytesToRead[i]); > } > > Thread.sleep(1000); > > try { > usbPipe_out.close(); > usbPipe_in.close(); > usbInterface.release(); > } catch ( UsbException uE ) { > uE.printStackTrace(); > } > > } > > private static boolean isPrinterError(UsbPipe pipe) throws > IllegalArgumentException, UsbDisconnectedException, UsbException{ > UsbControlIrp getUsageIrp = > pipe.createUsbControlIrp((byte)(UsbConst.REQUESTTYPE_DIRECTION_IN | > UsbConst.REQUESTTYPE_TYPE_STANDARD | > UsbConst.REQUESTTYPE_RECIPIENT_INTERFACE) > , (byte)0x01, > (short)0,(short)0 ); > > byte[] data = new byte[256]; > getUsageIrp.setData(data); > > pipe.syncSubmit(getUsageIrp); > > if(getUsageIrp.getActualLength()>=3){ > > if(getUsageIrp.getData()[2]!=0){ > return true; > } > } > if(getUsageIrp.getActualLength()>=6){ > > if(getUsageIrp.getData()[2]!=0){ > return true; > } > } > return false; > } > > private static byte[] joinArray(byte[] a1,byte[] a2){ > byte[] r=new byte[a1.length+a2.length]; > int i=0; > for(i=0;i<a1.length;i++){ > r[i]=a1[i]; > } > for(int j=0;j<a2.length;j++){ > r[i+j]=a2[j]; > } > return r; > } > > public void dataEventOccurred(UsbPipeDataEvent > usbpipedataevent) { > System.err.println("data > "+usbpipedataevent.getData()); > } > public void errorEventOccurred(UsbPipeErrorEvent > usbpipeerrorevent) { > System.err.println("error > "+usbpipeerrorevent.getUsbPipe().getUsbEndpoint().getDirection()); > } > public void dataEventOccurred(UsbDeviceDataEvent > usbdevicedataevent) { > System.err.println("dataevent device"); > } > public void errorEventOccurred(UsbDeviceErrorEvent > usbdeviceerrorevent) { > System.err.println("errorevent device"); > } > public void usbDeviceDetached(UsbDeviceEvent usbdeviceevent) > { > System.err.println("device detached device"); > } > } > > > Sniff CUPS: > > … > f7eb5ec0 297629823 C Bi:007:01 0 9 = 23060000 00000000 00 f7eb5ec0 297629864 > S Bi:007:01 -115 8192 < f7eb5ec0 297630823 C Bi:007:01 0 9 = 23060000 > 00000000 00 f7eb5ec0 297630863 S Bi:007:01 -115 8192 < f7eb5ec0 297631825 C > Bi:007:01 0 9 = 23060000 00000000 00 f7eb5ec0 297631867 S Bi:007:01 -115 > 8192 < f7eb5ec0 297632822 C Bi:007:01 0 9 = 23060000 00000000 00 f7eb5ec0 > 297632862 S Bi:007:01 -115 8192 < f7eb5ec0 297633823 C Bi:007:01 0 9 = > 23060000 00000000 00 f7eb5ec0 297633864 S Bi:007:01 -115 8192 < f7eb5ec0 > 297634822 C Bi:007:01 0 9 = 23060000 00000000 00 f7eb5ec0 297634864 S > Bi:007:01 -115 8192 < f7eb5ec0 297635823 C Bi:007:01 0 9 = 23060000 00000000 > 00 f7eb5ec0 297635864 S Bi:007:01 -115 8192 < f7eb5ec0 297636823 C Bi:007:01 > 0 9 = 23060000 00000000 00 f7eb5ec0 297637290 S Bi:007:01 -115 8192 < > df8cd240 297637370 S Bo:007:02 -115 8192 = 1b401b1e 41001b2a 72521b2a > 72411b2a 72513000 1b2a7250 30001b2a 72543200 f7eb5ec0 297637824 C Bi:007:01 > 0 9 = 23060000 00000000 00 df8cd240 297733849 C Bo:007:02 0 8192 > f7eb5ec0 > 297734012 S Bi:007:01 -115 8192 < df8cd240 297734134 S Bo:007:02 -115 8192 = > 20625000 c0000000 00000000 00000000 00000000 00000000 00000000 00000000 > f7eb5ec0 297734841 C Bi:007:01 0 9 = 23060000 00000000 00 df8cd240 297771843 > C Bo:007:02 0 8192 > f7eb5ec0 297771918 S Bi:007:01 -115 8192 < df8cd240 > 297772040 S Bo:007:02 -115 8192 = 44440000 00000000 00000dde dfffffdf > ffffffff ffffffff fffffefe ec000000 f7eb5ec0 297772841 C Bi:007:01 0 9 = > 23060000 00000000 00 df8cd240 297809844 C Bo:007:02 0 8192 > f7eb5ec0 > 297809925 S Bi:007:01 -115 8192 < df8cd240 297810045 S Bo:007:02 -115 8192 = > c0000600 00000000 00000000 00000480 00000000 00000000 04800000 00000000 > f7eb5ec0 297810840 C Bi:007:01 0 9 = 23060000 00000000 00 df8cd240 297847843 > C Bo:007:02 0 8192 > f7eb5ec0 297847916 S Bi:007:01 -115 8192 < df8cd240 > 297848028 S Bo:007:02 -115 8192 = 00000000 00000000 00000000 00000000 > 00000000 00000000 00000000 00000000 f7eb5ec0 297848839 C Bi:007:01 0 9 = > 23060000 00000000 00 df8cd240 297885843 C Bo:007:02 0 8192 > f7eb5ec0 > 297885873 S Bi:007:01 -115 8192 < df8cd240 297885929 S Bo:007:02 -115 8192 = > 10000000 00000000 00000007 9ee10e49 ee072e3b 7edc0000 00000000 0000002a > f7eb5ec0 297886840 C Bi:007:01 0 9 = 23060000 00000000 00 df8cd240 297923842 > C Bo:007:02 0 8192 > f7eb5ec0 297923872 S Bi:007:01 -115 8192 < df8cd240 > 297923929 S Bo:007:02 -115 8192 = 00000000 00000000 00000000 00000000 > 00000000 00000000 000000d0 00000030 f7eb5ec0 297924839 C Bi:007:01 0 9 = > 23060000 00000000 00 df8cd240 297961809 C Bo:007:02 0 8192 > f7eb5ec0 > 297961839 S Bi:007:01 -115 8192 < df8cd240 297961896 S Bo:007:02 -115 8192 = > 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 > f7eb5ec0 297962840 C Bi:007:01 0 9 = 23060000 00000000 00 df8cd240 297999829 > C Bo:007:02 0 8192 > f7eb5ec0 297999899 S Bi:007:01 -115 8192 < df8cd240 > 297999954 S Bo:007:02 -115 8192 = 00000000 00000000 00000000 00000000 > 00000000 00000000 3ffffff0 20625000 f7eb5ec0 298000825 C Bi:007:01 0 9 = > 23060000 00000000 00 df8cd240 298037847 C Bo:007:02 0 8192 > f7eb5ec0 > 298037915 S Bi:007:01 -115 8192 < df8cd240 298037975 S Bo:007:02 -115 1930 = > 00000000 00000044 40000000 00000000 02220000 00000000 00001030 00000000 > f7eb5ec0 298038842 C Bi:007:01 0 9 = 23060000 00000000 00 df8cd240 298046804 > C Bo:007:02 0 1930 > f7eb5ec0 298046834 S Bi:007:01 -115 8192 < f7eb5ec0 > 298047840 C Bi:007:01 -2 0 > > Sniff my program: > > cde0c340 416027332 S Ci:001:00 s 80 08 0000 0000 0001 1 < cde0c340 416027350 > C Ci:001:00 0 1 = 01 cde0c340 416028088 S Ci:004:00 s 80 08 0000 0000 0001 1 > < cde0c340 416029341 C Ci:004:00 0 1 = 01 cde0c340 416029441 S Ci:007:00 s > 80 08 0000 0000 0001 1 < cde0c340 416030336 C Ci:007:00 0 1 = 01 cde0cec0 > 420587767 S Ci:001:00 s 80 06 0300 0000 0100 256 < cde0cec0 420587772 C > Ci:001:00 0 4 = 04030904 cde0cec0 420588010 S Ci:001:00 s 80 06 0303 0409 > 0100 256 < cde0cec0 420588014 C Ci:001:00 0 57 = 38034c00 69006e00 75007800 > 20003200 2e003600 2e003100 38002d00 34002d00 cde0c3c0 420588624 S Ci:004:00 > s 80 06 0300 0000 0100 256 < cde0c3c0 420591317 C Ci:004:00 0 4 = 04030904 > cde0c3c0 420592017 S Ci:004:00 s 80 06 0301 0409 0100 256 < cde0c3c0 > 420593316 C Ci:004:00 0 50 = 06033300 4d002e03 33004d00 20004500 58002000 > 49004900 20005500 53004200 e33aba40 420642687 S Ci:007:00 s 80 06 0300 0000 > 0100 256 < e33aba40 420645317 C Ci:007:00 0 4 = 04030904 e33aba40 420649041 > S Ci:007:00 s 80 06 0301 0409 0100 256 < e33aba40 420650315 C Ci:007:00 0 10 > = 0a035300 54004100 5200 e33aba40 420652871 S Ci:007:00 s 80 06 0302 0409 > 0100 256 < e33aba40 420654315 C Ci:007:00 0 24 = 18035300 74006100 72002000 > 54005300 50003100 34003300 f7eb5ec0 420659650 S Co:007:00 s 01 0b 0000 0000 > 0000 0 f7eb5ec0 420660317 C Co:007:00 0 0 f7eb5ec0 420663332 S Bo:007:02 > -115 5 = 1b401b55 30 f7eb5ec0 420664317 C Bo:007:02 0 5 > f7eb5ec0 420670248 > S Bi:007:01 -115 64 < f7eb5ec0 420671318 C Bi:007:01 0 9 = 23060000 00000000 > 00 f7eb5ec0 420675113 S Bo:007:02 -115 7 = 1b3d011b 1e4100 f7eb5ec0 > 420675316 C Bo:007:02 0 7 > f7eb5ec0 420681094 S Bi:007:01 -115 64 < > f7eb5ec0 420681315 C Bi:007:01 0 9 = 23060000 00000000 00 f7eb5ec0 420685515 > S Bo:007:02 -115 24 = 1b421b4d 311d2131 66736473 64660a0a 0a0a0a0a 0a0a0a0a > f7eb5ec0 420686315 C Bo:007:02 0 24 > f7eb5ec0 420689250 S Bi:007:01 -115 64 > < f7eb5ec0 420690316 C Bi:007:01 0 9 = 23060000 00000000 00 df9c09c0 > 421751372 S Co:007:00 s 01 0b 0000 0000 0000 0 df9c09c0 421753315 C > Co:007:00 0 0 > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > javax-usb-devel mailing list > javax-usb-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/javax-usb-devel > > ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ javax-usb-devel mailing list javax-usb-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/javax-usb-devel