0
我正在開發一個java應用程序(它將運行在Linux桌面上)使用TSC TTP-244 Pro打印機打印出貨標籤。該打印機支持TSPL2命令。從java應用程序打印到TSC打印機
我正在使用USB連接,並開始使用usb4java高級API編寫一些簡單的測試,以便與本打印機進行通信。我能夠成功查詢打印機狀態<ESC>?!
或<ESC>?S
(<ESC>
這裏是ASCII 27),但無法發出任何問題,但無法發出PRINT
命令。
以下是我的代碼。
@Test
public void printTest() throws UsbException
{
final UsbServices services = UsbHostManager.getUsbServices();
UsbDevice printerUsbDevice = findDevice(services.getRootUsbHub(), 0x1234, 0x1734);
UsbConfiguration configuration = device.getActiveUsbConfiguration();
UsbInterface iface = configuration.getUsbInterface((byte) 1);
iface.claim();
try
{
UsbEndpoint inEndpoint = iface.getUsbEndpoint(0x01);
UsbPipe pipe = inEndpoint.getUsbPipe();
UsbEndpoint outEndpoint = iface.getUsbEndpoint(0x82);
UsbPipe pipe2 = outEndpoint.getUsbPipe();
pipe2.open();
pipe.open();
pipe.syncSubmit(27 + "!?".getBytes("US-ASCII"));
pipe.close();
pipe2.open();
byte[] statusResponse = pipe2.syncSubmit(new byte[1]);
pipe2.close();
System.out.println(new String(statusResponse, "US-ASCII")); // Here status got is "00" if ok otherwise getting error code
pipe.open();
pipe.syncSubmit("SIZE 57 mm,37 mm");
pipe.syncSubmit("GAP 3 mm,0 mm");
pipe.syncSubmit("DIRECTION 1");
pipe.syncSubmit("CLS");
pipe.syncSubmit("TEXT 10,10 "3",0,1,1, "Test printing");
pipe.syncSubmit("PRINT 1");
pipe.close();
// at this pint of time, printer is not printing anything instead just idle
}
finally
{
iface.release();
}
}
private UsbDevice findDevice(UsbHub hub, short vendorId, short productId)
{
for (UsbDevice device : (List<UsbDevice>) hub.getAttachedUsbDevices())
{
UsbDeviceDescriptor desc = device.getUsbDeviceDescriptor();
if (desc.idVendor() == vendorId && desc.idProduct() == productId) return device;
if (device.isUsbHub())
{
device = findDevice((UsbHub) device, vendorId, productId);
if (device != null) return device;
}
}
return null;
}
我的USB通信是否正確?
與TSC打印機的USB通信是否在沒有安裝任何打印機驅動程序(在Linux上)的情況下工作?
非常感謝。將考慮控制總數或不同的端點方面。 – Venky
儘管我仍然沒有成功地進行打印,但通過'PRINT'命令發現了早期的問題。爲了讓打印機開始打印(可能指示刷新它的內部緩衝區),我必須在'PRINT'命令的最後按順序發出''。修改我的代碼以發出''打印機響應,但由於我的設置問題(與色帶放置和標籤位置有關),打印機在打印時給我錯誤。總之,謝謝你的投入。 –
Venky
是的,命令結束時的CR LF是必不可少的,如果它幫助你,請接受我的答案。 –