2017-02-06 12 views
0

Я разрабатываю приложение java (которое будет работать на рабочем столе Linux) для печати меток доставки с использованием принтера TSC TTP-244 Pro. Этот принтер поддерживает команды TSPL2.Печать на принтер TSC из java-приложения

Я использую USB-соединение и начал писать несколько простых тестов, используя API-интерфейс высокого уровня usb4java для связи с этим принтером. Я могу успешно запросить статус/состояние принтера <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?

Поддерживает ли это USB-связь с принтером TSC без установки драйвера принтера (на Linux)?

ответ

1

Да, ваше сообщение верное.

Да, связь USB на Linux может работать напрямую, без драйверов.

Если принтер не принимает какую-либо команду, дважды проверьте эту команду, возможно, должна быть какая-то контрольная сумма или что-то еще, что вы пропустили? Изучите, как именно эта команда должна быть структурирована.

Я сделал проект с использованием последовательного порта для связи с принтером, детали команды очень важны. Команда статуса может не иметь контрольной суммы и очень проста, поэтому она работает из готовой, но с более сложной командой вам нужно прочитать документацию и отладить.

Существует также возможность того, что на принтере используется конечная точка другого терминала, отличная от «состояния».

+0

Большое спасибо. Посмотрите контрольную сумму или различные аспекты конечной точки. – Venky

+0

Хотя я все еще не имел успеха при печати, но определил, в чем была проблема с командой 'PRINT'. Мне пришлось выпустить '' в конце команды 'PRINT', чтобы принтер начал печатать (вероятно, это указание, чтобы очистить его внутренний буфер). После изменения моего кода на выпуск '' принтер отвечал, но из-за моих проблем с настройкой (связанных с размещением ленты и расположением ярлыков), принтер дает мне ошибку во время печати. Во всяком случае, спасибо за ваши материалы. – Venky

+0

Да, CR LF в конце команды является существенным, если это помогло вам, пожалуйста, примите мой ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^