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

BEGIN:VCARD
VERSION:2.1
X-MS-SIGNATURE:YES
N:Strobl;Daniel
FN:Daniel Strobl
ORG:DaPhi Daniel Strobl & Philipp Krey GbR
TITLE;CHARSET=Windows-1252:Geschäftsleitung
TEL;WORK;VOICE:+49 (030) 2936319 - 21
ADR;WORK;PREF;CHARSET=Windows-1252:;;Boxhagener Straße 119;Berlin;;10245;Deutschland
LABEL;WORK;PREF;CHARSET=Windows-1252;ENCODING=QUOTED-PRINTABLE:Boxhagener Stra=DFe 119=0D=0A=
10245 Berlin
X-MS-OL-DEFAULT-POSTAL-ADDRESS:2
EMAIL;PREF;INTERNET:[EMAIL PROTECTED]
PHOTO;TYPE=JPEG;ENCODING=BASE64:
 /9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQY
 GBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYa
 KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAAR
 CAAXAEgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAA
 AgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
 FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWG
 h4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl
 5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREA
 AgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk
 NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
 hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk
 5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD6porC8Q+KLHQr2ws7lZ5bu+fZBFCoJY5A
 6kgDkjvXJL45vrXx9qlpq0D2mkWlmZjEyK7rjaQ+VznO7GM45FAHpVFchP4+0y20ay1a5tb+
 LTbt/LjnKIRnnqAxI6Ht2q83iywfxA2i2UVze3yRec6wKu1FwDyzMB/Ev5igDoaK8x1/4jGe
 HSZfDgkG/UVtrlJovmxx8ncc56g54rpdS8Z2VjqU+mXcV1ZXot3nieeHfG4VCxIKtzgA8ZHT
 HWgDodQu47GzkuJslUH3VGSxPAA9ySBWTFrxtp5YNZjW3mCrJGkIaUlTnjgZJGOSOKz9G1b/
 AISHT/Dty0scqzzSSuUiMQJjDADaWYjDY7npXQzQTR286w/vZZ5DlnOAgPHT0AA4HU/UmuKp
 KrKbdN2UfK99L+vVW+Z1wVOMEpq7l52trb06O/yLUMqTQpLEwaN1DKw6EHkGisLQInh1GaC2
 vLi40+1iEH70qR5gxwuAPuqMH3PtRW9Cq6sOZqxjWpqnPlTubF5ZWt8ipe20FwqnIEsYcA+o
 zQljaIxZLWBSU8skRgZT+79PaiitjIhXR9MW3eBdOsxA/wB6MQLtb6jGDVK28LaPb6td6jHZ
 RefcxLDIpAKbVxgBeg6D8qKKANGHTrKGGOKGzto4o38xEWJQFb+8Bjg+9TSQQyuryxRu6AhW
 ZQSAeuPrRRQBRvdNzFaf2b5NtJaPuhXZ+7wQQVIGOCD2qJrLUrwbL68jhgP3o7RSrN7Fycgf
 QA+9FFYSw8JNt3131eptGvKKSXTyNO2t4rWBIbeNY4kGFVRgCiiitkklZGTbbuz/2Q==

X-MS-OL-DESIGN;CHARSET=utf-8:<card xmlns="http://schemas.microsoft.com/office/outlook/12/electronicbusinesscards"; ver="1.0" layout="top" bgcolor="ffffff"><img xmlns="" align="tright" area="21" use="photo"/><fld xmlns="" prop="name" align="left" dir="ltr" style="b" color="000000" size="10"/><fld xmlns="" prop="title" align="left" dir="ltr" color="000000" size="7"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="org" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="addrwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="telwork" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="email" align="left" dir="ltr" color="000000" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/><fld xmlns="" prop="blank" size="8"/></card>
REV:20070608T131231Z
END:VCARD
-------------------------------------------------------------------------
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

Reply via email to