簡體   English   中英

通過usb4java從樹莓派打印

[英]Printing from raspberry pi via usb4java

預先感謝您閱讀本文!

我正在使用Java應用程序使用esc / pos命令通過usb接口將字節發送到EPSON TM-T88V收據打印機

在樹莓派上執行時的行為與在我的開發筆記本電腦上執行時的行為不同(這太奇怪了!)

從樹莓派打印字節時-在完成之前會停止

代碼如下:

public void sendToPrinter(byte[] message) throws UsbException {
   UsbDevice device = getPrinterDevice(); //find the usb using usb4java

   UsbConfiguration configuration = device.getActiveUsbConfiguration();
   UsbInterface iface = configuration.getUsbInterfaces().get(0); //There was only 1

   if (!iface.isClaimed()) {
      iface.claim(usbInterface -> true);
   }

   UsbEndpoint endpoint = (UsbEndpoint) iface.getUsbEndpoints().get(0);
   UsbPipe pipe = endpoint.getUsbPipe();

   pipe.open();

   try {
      LOG.info(Arrays.toString(message));
      int sent = pipe.syncSubmit(message);
      LOG.info("Bytes Sent: " + sent);
   } finally {
      pipe.close();
   }

   iface.release();
}

我調查過的事情:

  1. 我讀到有關java8的內容,在繁重的處理過程中,pi可能會給USB設備斷電,並且我已將電源升級到pi,以便它接收2A
  2. 我嘗試比較從我的開發機和pi發送到打印機的字節,它們是相同的(發送的字節和發送的字節數相同)

我可以提供有關發送給打印機的字節的更多信息,盡管從筆記本電腦發送的esc / pos命令可以按預期工作,所以我不認為這可能是原因-但可能是錯誤的!

再次感謝你的幫助!

我似乎找到了解決方案

拆分陣列並一次發送8個字節使打印機/ pi可以成功通信,而打印機不會隨機停止:

public static void sendAsBatch(int batchSize, byte[] payload, UsbPipe pipe) throws UsbException {

   int offset = 0;
   for (int multiplier = 1; offset < payload.length; multiplier++) {

      byte[] batch = offset + batchSize < payload.length ?
            Arrays.copyOfRange(payload, offset, offset + batchSize) :
            Arrays.copyOfRange(payload, offset, payload.length);

      pipe.syncSubmit(batch);
      offset = multiplier * batchSize;
   }
}

我仍然不知道實際的問題是什么,如果有人可以闡明任何想法,那將是驚人的

但是對於其他面臨相同問題的人來說,這似乎已經解決了:)

發送所需的字節后,嘗試向打印機發送更多的字節(一,兩千個?!)。 嘗試使用0x000xFF

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM