2017-02-06 221 views
0

我正在開發一個java應用程序(它將運行在Linux桌面上)使用TSC TTP-244 Pro打印機打印出貨標籤。該打印機支持TSPL2命令。從java應用程序打印到TSC打印機

我正在使用USB連接,並開始使用usb4java高級API編寫一些簡單的測試,以便與本打印機進行通信。我能夠成功查詢打印機狀態<ESC>?!<ESC>?S<ESC>這裏是ASCII 27),但無法發出任何問題,但無法發出PRINT命令。

以下是我的代碼。

@Test 
public void printTest() throws UsbException 
{ 
    final UsbServices services = UsbHostManager.getUsbServices(); 
    UsbDevice printerUsbDevice = findDevice(services.getRootUsbHub(), 0x1234, 0x1734); 
    UsbConfiguration configuration = device.getActiveUsbConfiguration(); 
    UsbInterface iface = configuration.getUsbInterface((byte) 1); 
    iface.claim(); 
    try 
    { 
     UsbEndpoint inEndpoint = iface.getUsbEndpoint(0x01); 
     UsbPipe pipe = inEndpoint.getUsbPipe(); 


     UsbEndpoint outEndpoint = iface.getUsbEndpoint(0x82); 
     UsbPipe pipe2 = outEndpoint.getUsbPipe(); 
     pipe2.open(); 

      pipe.open(); 
      pipe.syncSubmit(27 + "!?".getBytes("US-ASCII")); 
      pipe.close(); 

      pipe2.open(); 
      byte[] statusResponse = pipe2.syncSubmit(new byte[1]); 
      pipe2.close(); 
      System.out.println(new String(statusResponse, "US-ASCII")); // Here status got is "00" if ok otherwise getting error code 

      pipe.open(); 
      pipe.syncSubmit("SIZE 57 mm,37 mm"); 
      pipe.syncSubmit("GAP 3 mm,0 mm"); 
      pipe.syncSubmit("DIRECTION 1"); 
      pipe.syncSubmit("CLS"); 
      pipe.syncSubmit("TEXT 10,10 "3",0,1,1, "Test printing"); 
      pipe.syncSubmit("PRINT 1"); 
      pipe.close(); 

      // at this pint of time, printer is not printing anything instead just idle 
    } 
    finally   
    { 
     iface.release(); 
    } 
} 

private UsbDevice findDevice(UsbHub hub, short vendorId, short productId) 
{ 
    for (UsbDevice device : (List<UsbDevice>) hub.getAttachedUsbDevices()) 
    { 
     UsbDeviceDescriptor desc = device.getUsbDeviceDescriptor(); 
     if (desc.idVendor() == vendorId && desc.idProduct() == productId) return device; 
     if (device.isUsbHub()) 
     { 
      device = findDevice((UsbHub) device, vendorId, productId); 
      if (device != null) return device; 
     } 
    } 
    return null; 
} 

我的USB通信是否正確?

與TSC打印機的USB通信是否在沒有安裝任何打印機驅動程序(在Linux上)的情況下工作?

回答

1

是的,你的溝通是正確的。

是的,Linux上的USB通信可以直接工作,無需驅動程序。

如果打印機不接受某些命令,請仔細檢查該命令,可能是應該有一些控制總和,或者其他錯誤?研究應該如何構建這個命令。

我已經做了一個使用串口與打印機通信的項目,一個命令的細節非常重要。狀態命令可能沒有控制總和,並且非常簡單,這就是爲什麼它可以開箱即用,但是通過更復雜的命令,您需要閱讀文檔和調試。

還有一種可能性,即打印機使用與「狀態」通信不同的USB端點。

+0

非常感謝。將考慮控制總數或不同的端點方面。 – Venky

+0

儘管我仍然沒有成功地進行打印,但通過'PRINT'命令發現了早期的問題。爲了讓打印機開始打印(可能指示刷新它的內部緩衝區),我必須在'PRINT'命令的最後按順序發出''。修改我的代碼以發出''打印機響應,但由於我的設置問題(與色帶放置和標籤位置有關),打印機在打印時給我錯誤。總之,謝謝你的投入。 – Venky

+0

是的,命令結束時的CR LF是必不可少的,如果它幫助你,請接受我的答案。 –

相關問題