通过usb4java从raspberry pi打印

通过usb4java从raspberry pi打印,java,printing,raspberry-pi,usb4java,escpos,Java,Printing,Raspberry Pi,Usb4java,Escpos,提前感谢您阅读本文 我正在使用java应用程序通过usb接口使用esc/pos命令将字节发送到EPSON TM-T88V收据打印机 在raspberry pi上执行时的行为与在我的开发笔记本电脑上执行时的行为不同,这非常奇怪 当从raspberry pi打印字节时,它会在完成之前停止 代码如下: public void sendToPrinter(byte[] message) throws UsbException { UsbDevice device = getPrinterDevic

提前感谢您阅读本文

我正在使用java应用程序通过usb接口使用esc/pos命令将字节发送到EPSON TM-T88V收据打印机

在raspberry pi上执行时的行为与在我的开发笔记本电脑上执行时的行为不同,这非常奇怪

当从raspberry pi打印字节时,它会在完成之前停止

代码如下:

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();
}
我调查过的事情:

我读到了关于java8的内容,在繁重的处理过程中,pi可能会失去usb设备的电源,我已经将电源升级到pi,以便它能够接收2A 我已经尝试比较从我的开发机器和pi发送到打印机的字节,它们是相同的发送的字节和发送的字节数是相同的 我可以提供有关发送到打印机的字节的更多信息,尽管从我的笔记本电脑发送的esc/pos命令与预期一致,因此我不认为这可能是原因,但可能是错误的


再次感谢你的帮助

尝试发送更多字节1,2000?!发送所需内容后,将其发送到打印机。尝试使用0x00或0xFF。

我似乎找到了解决方案

拆分阵列并一次发送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;
   }
}
我仍然不知道真正的问题是什么,如果有人能透露一些信息,那将是令人惊讶的


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

这有什么帮助?这会有什么帮助吗?这是一种确保打印机内部缓冲区中的内容在另一端输出的方法。我在Brother或Zebra标签打印机中看到过它,作为确保内部缓冲区为空的一种方法。我也遇到过类似的情况。。。该应用程序在打印多个标签时工作,但在仅打印一个标签时不工作-发送更多字节有帮助。@LOUTUSMS-我刚刚尝试向打印机发送额外的1000个0x00字节,但仍然无法正常打印。如果打印机在完成任何帮助之前大约中途停止打印,仍然会遇到同样的问题,我们将不胜感激!提前谢谢!某些打印机要求您在关闭管道之前等待打印完成。