0

提前感谢您阅读本文!

我正在使用 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 命令按预期工作,所以我不相信这可能是原因 - 但可能是错误的!

再次感谢你的帮助!

4

2 回答 2

0

我似乎找到了解决方案

拆分数组并一次发送 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;
   }
}

我仍然不知道实际问题是什么,如果有人能阐明任何问题,那就太棒了

但是对于其他面临同样问题的人来说,这似乎已经解决了:)

于 2016-02-11T21:01:42.470 回答
-1

在发送所需的字节后,尝试向打印机发送更多字节(一、两千?!)。尝试使用0x00or 0xFF

于 2016-01-12T19:23:24.320 回答