通过 usb4java 从 raspberry pi 打印
Printing from raspberry pi via usb4java
提前感谢您阅读本文!
我正在使用 java 应用程序使用 esc/pos 命令通过 USB 接口将字节发送到 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 命令按预期工作,所以我不认为这可能是原因 - 但可能是错误的!
再次感谢您的帮助!
发送完所需字节后,尝试向打印机发送更多字节(一、两千?!)。尝试 0x00
或 0xFF
.
我好像找到了解决办法
拆分数组并一次发送 8 个字节已使 printer/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;
}
}
我仍然不知道实际问题是什么,如果有人能阐明任何问题,那就太棒了
但对于其他面临同样问题的人来说,这似乎已经解决了:)
提前感谢您阅读本文!
我正在使用 java 应用程序使用 esc/pos 命令通过 USB 接口将字节发送到 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 命令按预期工作,所以我不认为这可能是原因 - 但可能是错误的!
再次感谢您的帮助!
发送完所需字节后,尝试向打印机发送更多字节(一、两千?!)。尝试 0x00
或 0xFF
.
我好像找到了解决办法
拆分数组并一次发送 8 个字节已使 printer/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;
}
}
我仍然不知道实际问题是什么,如果有人能阐明任何问题,那就太棒了
但对于其他面临同样问题的人来说,这似乎已经解决了:)