[英]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();
}
我調查過的事情:
我可以提供有關發送給打印機的字節的更多信息,盡管從筆記本電腦發送的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;
}
}
我仍然不知道實際的問題是什么,如果有人可以闡明任何想法,那將是驚人的
但是對於其他面臨相同問題的人來說,這似乎已經解決了:)
發送所需的字節后,嘗試向打印機發送更多的字節(一,兩千個?!)。 嘗試使用0x00
或0xFF
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.