Page 4 of 12

Re: USB-принтеры для USB-ядра

Posted: Sat Apr 13, 2013 1:50 pm
by SoUrcerer
Посмотрел, не шлет он никаких команд. А вот PCL-драйвер шлет дополнительно

Code: Select all

	AppendString("\033%-12345X@PJL JOB\n@PJL SET RESOLUTION=");
	string << dpi;
	AppendString(string.String());
	AppendString("\n@PJL ENTER LANGUAGE=PCLXL\n) HP-PCL XL;");
Но это никак не затмевает того факта, что PS не печатаются - а так быть не должно.

Re: USB-принтеры для USB-ядра

Posted: Sat Apr 13, 2013 1:58 pm
by Serge
Ядро при загрузке драйвера, насколько я понял, само выбирает и устанавливает конфигурацию
Не знаю, исходников ядра нет. Попробуй установить конфигурацию.

Re: USB-принтеры для USB-ядра

Posted: Sat Apr 13, 2013 8:39 pm
by SoUrcerer
В Linux через libusb не получается установить конфигурацию даже после detachKernelDriver - говорит, что device busy. В Колибри еще не пробовал.

Re: USB-принтеры для USB-ядра

Posted: Mon Apr 15, 2013 1:51 pm
by CleverMouse
В протоколе USB есть две команды, устанавливающие настройку, SET_CONFIGURATION и SET_INTERFACE. Первая ответственна за выбор из того, что на доске отладки пишется как "found USB device with ID ..., n configuration(s)", практически всегда конфигурация всего устройства ровно одна, команда SET_CONFIGURATION обязательна, ядро её посылает, драйвер может использовать только в очень редких случаях, причём драйвер класса устройств - вообще никогда. Вторая ответственна за выбор из того, что на доске отладки пишется как "USB interface class/subclass/protocol ..." и "note: alternate setting with ...", её ядро не посылает никогда, потому что здесь драйвер должен решать, как именно он хочет работать. По стандарту, если SET_INTERFACE не посылать, то интерфейс устройства должен работать как основная настройка, и я не думаю, что явная посылка что-то изменит.

Re: USB-принтеры для USB-ядра

Posted: Wed Apr 17, 2013 10:19 am
by SoUrcerer
Угадайте, какие у меня новости? Потестировать Brother и Canon с Haiku не удалось - в упор не хочет загружаться на двух компах. Однако, тест с Brother дал интересные результаты. В Linux через cat filename > /dev/usb/lp0 не напечатался НИ ОДИН из моих тестовых файлов. Ни ascii, ни PostScript, ни PCL4. Файл PostScript дал те же результаты, что и в Колибри - принтер прогнал несколько пустых листов. Тогда я попробовал PCL5 - и, о чудо, он напечатался!
Я скомпоновал версию с PCL5-документом для Колибри - и она отлично напечаталась на Brother HL-2030R - как после Linux, так и после включения-выключения принтера.
Вывод: не все версии PCL одинаково полезны. Не все принтеры одинаково умны.
Canon, однако, PCL5-документ печатать отказывается - буду еще копать. В скором времени выложу драйвер с PCL5-документом.

Re: USB-принтеры для USB-ядра

Posted: Wed Apr 17, 2013 10:28 am
by SoUrcerer
Тестовые драйверы PCL5 и PostScript level1. В теории должны пониматься большинством принтеров.
Жду результатов тестов.
Пробовать лучше оба. Как уже говорилось, на результат не влияет печать из Windows - хотя может повлиять печать из Haiku или cat file > /dev/usb/lp0 (хотя и не ясно, почему).

Re: USB-принтеры для USB-ядра

Posted: Wed Apr 17, 2013 11:11 am
by SoUrcerer
Почитал про Canon. Люди пытались общаться с ним через PCL и PS, но безуспешно - как и я.
Like most inexpensive inkjet printers, the Pixma MP250 doesn't use either PCL or Postscript. The printer does not have an on-board processor, so is designed to receive data from the sending computer in an already rendered (pixel-based) format.

Re: USB-принтеры для USB-ядра

Posted: Wed Apr 17, 2013 12:21 pm
by 0CodErr
hp LaserJet 1010 (DOT4) (VID_03F0; PID_0C17)
Проверил — печати не было. В обоих случаях пишет "USB device initialization failed".

usbother_ps1:
Spoiler:

Code: Select all

K : edx=00006871
K : has_ownership
K : enter ehci_init
K : HCSPARAMS=00104208, HCCPARAMS=00006871
K : stopped
K : reset ok
K : attaching to IRQ 0B
K : EHCI controller at 00:EF with 8 ports initialized
K : UHCI controller at 00:E8 with 2 ports initialized
K : [43] connect status changed, 0082/0080
K : UHCI controller at 00:E9 with 2 ports initialized
K : [43] connect status changed, 0092/0080
K : [43] connect status changed, 0082/0080
K : UHCI controller at 00:EA with 2 ports initialized
K : UHCI controller at 00:EB with 2 ports initialized
K : [44] EHCI 80B58094: status of port 1 changed to 00001803
K : [44] EHCI 80B58094: status of port 2 changed to 00001803
K : [44] EHCI 80B58094: status of port 3 changed to 00001803
K : kernel SVN r3460
K : 1 CPU detected
Zero-config service:
No Card found!
K : [55] EHCI 80B58094 port 1 state is 00001801
K : [55] EHCI 80B58094: port 1 has HS or FS device, resetting
K : [55] EHCI 80B58094 port 2 state is 00001801
K : [55] EHCI 80B58094 port 3 state is 00001801
=========  tmpdisk 0.45  =========
tmpdisk.obj driver loaded successfully
trying to add disk
disk size is not specified
10% from free RAM will be used, new DiskSize: 203 MB
K : [58] EHCI 80B58094: reset port 1 done
operation completed successfully
K : [60] EHCI 80B58094 status of port 1 is 00001005
K : address set in device
K : [60] EHCI 80B58094: port 2 has HS or FS device, resetting
K : async advance doorbell
K : async advance int
K : address set for controller
K : async advance doorbell
K : async advance int
K : device descriptor: 12 01 00 02 00 00 00 40 E8 04 0E 12 01 90 01 02 00 01
K : found USB device with ID 04E8:120E, 1 configuration(s)
K : config descriptor: 09 02 20 00 01 01 00 C0 00 09 04 00 00 02 08 06 50 01 07 05 81 02 00 02 00 07 05 04 02 00 02 00
K : USB interface class/subclass/protocol = 08/06/50
K : USB mass storage device detected
K : 1 logical unit(s)
K : media is ready
K : 0 attempts, 0 ticks
K : peripheral device type is 00
K : direct-access mass storage device detected
K : sector size is 512, last sector is 3854335
K : [62] EHCI 80B58094: reset port 2 done
K : [64] EHCI 80B58094 status of port 2 is 00001801
K : releasing to companion
K : [64] EHCI 80B58094: port 3 has HS or FS device, resetting
K : [64] EHCI 80B58094: status of port 2 changed to 00003002
K : [66] EHCI 80B58094: reset port 3 done
K : [68] EHCI 80B58094 status of port 3 is 00001801
K : releasing to companion
K : [68] EHCI 80B58094: status of port 3 changed to 00003002
K : [143] connect status changed, 0093/0091
K : [143] connect status changed, 0093/0091
K : [155] status 0280/0093
K : reset done at 155
K : [157] status 0095
K : address set in device
K : address set for controller
K : device descriptor: 12 01 10 01 FF FF FF 40 15 09 04 81 00 01 01 02 03 01
K : found USB device with ID 0915:8104, 1 configuration(s)
K : config descriptor: 09 02 DB 00 01 01 00 80 FA 09 04 00 00 03 FF FF FF 00 07 05 83 02 40 00 00 07 05 04 02 40 00 00 07 05 81 03 20 00 03 09 04 00 01 03 FF FF FF 00 07 05 82 01 F0 03 01 07 05 04 02 40 00 00 07 05 81 03 20 00 03 09 04 00 02 03 FF FF FF 00 07 05 82 01 90 03 01 07 05 04 02 40 00 00 07 05 81 03 20 00 03 09 04 00 03 03 FF FF FF 00 07 05 82 01 E0 02 01 07 05 04 02 40 00 00 07 05 81 03 20 00 03 09 04 00 04 03 FF FF FF 00 07 05 82 01 C0 01 01 07 05 04 02 40 00 00 07 05 81 03 20 00 03 09 04 00 05 03 FF FF FF 00 07 05 82 01 F0 00 01 07 05 04 02 40 00 00 07 05 81 03 20 00 03 09 04 00 06 03 FF FF FF 00 07 05 82 01 50 00 01 07 05 04 02 40 00 00 07 05 81 03 20 00 03
K : USB interface class/subclass/protocol = FF/FF/FF
K : unknown device
K : USB device initialization failed
K : note: alternate setting with FF/FF/FF
K : note: alternate setting with FF/FF/FF
K : note: alternate setting with FF/FF/FF
K : note: alternate setting with FF/FF/FF
K : note: alternate setting with FF/FF/FF
K : note: alternate setting with FF/FF/FF
K : [159] status 0280/0093
K : reset done at 159
K : [161] status 0095
K : address set in device
K : address set for controller
K : device descriptor: 12 01 10 01 00 00 00 08 F0 03 17 0C 00 01 01 02 03 01
K : found USB device with ID 03F0:0C17, 1 configuration(s)
K : config descriptor: 09 02 4E 00 01 01 00 C0 01 09 04 00 00 03 07 01 03 00 07 05 01 02 40 00 00 07 05 81 02 40 00 00 07 05 82 03 08 00 FF 09 04 00 01 02 07 01 02 00 07 05 01 02 40 00 00 07 05 81 02 40 00 00 09 04 00 02 01 07 01 01 00 07 05 01 02 40 00 00
K : USB interface class/subclass/protocol = 07/01/03
K : USB printer attached
K : alloc memory
K : look for IN endpoint
K : next descriptor
K : all data in descriptor?
K : check if OUT
K : load params from descriptor
K : open pipe!
K : pipe is opened
K : start printing
K : return something after USB Normal Transfer...
K : USB device initialization failed
K : note: alternate setting with 07/01/02
K : note: alternate setting with 07/01/01
K : print finishedK : destroy app object
usbother_pcl5:
Spoiler:

Code: Select all

K : edx=00006871
K : has_ownership
K : enter ehci_init
K : HCSPARAMS=00104208, HCCPARAMS=00006871
K : stopped
K : reset ok
K : attaching to IRQ 0B
K : EHCI controller at 00:EF with 8 ports initialized
K : UHCI controller at 00:E8 with 2 ports initialized
K : [42] connect status changed, 0082/0080
K : UHCI controller at 00:E9 with 2 ports initialized
K : [42] connect status changed, 0092/0080
K : [42] connect status changed, 0082/0080
K : UHCI controller at 00:EA with 2 ports initialized
K : UHCI controller at 00:EB with 2 ports initialized
K : [43] EHCI 80B58094: status of port 1 changed to 00001803
K : [43] EHCI 80B58094: status of port 2 changed to 00001803
K : [43] EHCI 80B58094: status of port 3 changed to 00001803
K : kernel SVN r3460
K : 1 CPU detected
Zero-config service:
No Card found!
K : [53] EHCI 80B58094 port 1 state is 00001801
K : [53] EHCI 80B58094: port 1 has HS or FS device, resetting
K : [53] EHCI 80B58094 port 2 state is 00001801
K : [53] EHCI 80B58094 port 3 state is 00001801
K : [55] EHCI 80B58094: reset port 1 done
=========  tmpdisk 0.45  =========
tmpdisk.obj driver loaded successfully
trying to add disk
disk size is not specified
10% from free RAM will be used, new DiskSize: 203 MB
K : [58] EHCI 80B58094 status of port 1 is 00001005
operation completed successfully
K : address set in device
K : [58] EHCI 80B58094: port 2 has HS or FS device, resetting
K : async advance doorbell
K : async advance int
K : address set for controller
K : async advance doorbell
K : async advance int
K : device descriptor: 12 01 00 02 00 00 00 40 E8 04 0E 12 01 90 01 02 00 01
K : found USB device with ID 04E8:120E, 1 configuration(s)
K : config descriptor: 09 02 20 00 01 01 00 C0 00 09 04 00 00 02 08 06 50 01 07 05 81 02 00 02 00 07 05 04 02 00 02 00
K : USB interface class/subclass/protocol = 08/06/50
K : USB mass storage device detected
K : 1 logical unit(s)
K : media is ready
K : 0 attempts, 0 ticks
K : peripheral device type is 00
K : direct-access mass storage device detected
K : sector size is 512, last sector is 3854335
K : [60] EHCI 80B58094: reset port 2 done
K : [62] EHCI 80B58094 status of port 2 is 00001801
K : releasing to companion
K : [62] EHCI 80B58094: port 3 has HS or FS device, resetting
K : [62] EHCI 80B58094: status of port 2 changed to 00003002
K : [64] EHCI 80B58094: reset port 3 done
K : [66] EHCI 80B58094 status of port 3 is 00001801
K : releasing to companion
K : [66] EHCI 80B58094: status of port 3 changed to 00003002
K : [142] connect status changed, 0093/0091
K : [142] connect status changed, 0093/0091
K : [154] status 0280/0093
K : reset done at 154
K : [156] status 0095
K : address set in device
K : address set for controller
K : device descriptor: 12 01 10 01 FF FF FF 40 15 09 04 81 00 01 01 02 03 01
K : found USB device with ID 0915:8104, 1 configuration(s)
K : config descriptor: 09 02 DB 00 01 01 00 80 FA 09 04 00 00 03 FF FF FF 00 07 05 83 02 40 00 00 07 05 04 02 40 00 00 07 05 81 03 20 00 03 09 04 00 01 03 FF FF FF 00 07 05 82 01 F0 03 01 07 05 04 02 40 00 00 07 05 81 03 20 00 03 09 04 00 02 03 FF FF FF 00 07 05 82 01 90 03 01 07 05 04 02 40 00 00 07 05 81 03 20 00 03 09 04 00 03 03 FF FF FF 00 07 05 82 01 E0 02 01 07 05 04 02 40 00 00 07 05 81 03 20 00 03 09 04 00 04 03 FF FF FF 00 07 05 82 01 C0 01 01 07 05 04 02 40 00 00 07 05 81 03 20 00 03 09 04 00 05 03 FF FF FF 00 07 05 82 01 F0 00 01 07 05 04 02 40 00 00 07 05 81 03 20 00 03 09 04 00 06 03 FF FF FF 00 07 05 82 01 50 00 01 07 05 04 02 40 00 00 07 05 81 03 20 00 03
K : USB interface class/subclass/protocol = FF/FF/FF
K : unknown device
K : USB device initialization failed
K : note: alternate setting with FF/FF/FF
K : note: alternate setting with FF/FF/FF
K : note: alternate setting with FF/FF/FF
K : note: alternate setting with FF/FF/FF
K : note: alternate setting with FF/FF/FF
K : note: alternate setting with FF/FF/FF
K : [158] status 0280/0093
K : reset done at 158
K : [160] status 0095
K : address set in device
K : address set for controller
K : device descriptor: 12 01 10 01 00 00 00 08 F0 03 17 0C 00 01 01 02 03 01
K : found USB device with ID 03F0:0C17, 1 configuration(s)
K : config descriptor: 09 02 4E 00 01 01 00 C0 01 09 04 00 00 03 07 01 03 00 07 05 01 02 40 00 00 07 05 81 02 40 00 00 07 05 82 03 08 00 FF 09 04 00 01 02 07 01 02 00 07 05 01 02 40 00 00 07 05 81 02 40 00 00 09 04 00 02 01 07 01 01 00 07 05 01 02 40 00 00
K : USB interface class/subclass/protocol = 07/01/03
K : USB printer attached
K : alloc memory
K : look for IN endpoint
K : next descriptor
K : all data in descriptor?
K : check if OUT
K : load params from descriptor
K : open pipe!
K : pipe is opened
K : start printing
K : return something after USB Normal Transfer...
K : USB device initialization failed
K : note: alternate setting with 07/01/02
K : note: alternate setting with 07/01/01
K : print finished

Re: USB-принтеры для USB-ядра

Posted: Wed Apr 17, 2013 12:35 pm
by SoUrcerer
This is DOT4 printer, it should use some MFP protocol. Try to print test page from Haiku or "cat some > /dev/usb/lp0" in Linux, and then try these drivers again.

Re: USB-принтеры для USB-ядра

Posted: Wed Apr 17, 2013 2:43 pm
by SoUrcerer
Файл wireshark с логами USB принтера DOT4. Вплоть до начала печати всё круто и понятно:
запрос конфигурации, установка конфигурации, выбор интерфейса, запрос информации об устройстве - модель, номер и так далее. Устройство видится как 8.0
В момент 613.29 происходит начало отправки данных на принтер - открытие интерфейса (как file descriptor), а затем отправка данных BULK OUT на устройство 8.1 (я так понимаю, имеется в виду устройство 8 endpoint 1 на чтение и запись). BULK IN перед началом печати не понятен. Это, возможно, проверка на BUSY - в стандарте 1284.4 написано, что перед отправкой данных нужно узнать, BUSY принтер или нет.
То есть перед отправкой данных через BULK OUT, нужно сделать BULK IN, и ожидать окончания отправки - так что ли? Надо попробовать.

Re: USB-принтеры для USB-ядра

Posted: Wed Apr 17, 2013 3:18 pm
by CleverMouse
выбор интерфейса
Выбирается не умолчальный интерфейс 07/01/03, а интерфейс с 07/01/02.

Re: USB-принтеры для USB-ядра

Posted: Wed Apr 17, 2013 3:23 pm
by SoUrcerer
Так, это очень интересно, спасибо. А как установить нужный интерфейс?
p.s. В теории 07/01/03 тоже должен работать - ну да ладно, пока что не будем на него обращать внимание.

Posted: Wed Apr 17, 2013 3:29 pm
by CleverMouse
Функцией Usbcontroltransferasync отправить запрос SET_INTERFACE. Параметры запроса описаны в главе 9 спецификации USB.

Re: USB-принтеры для USB-ядра

Posted: Wed Apr 17, 2013 4:00 pm
by SoUrcerer
Установка альтернативного интерфейса не помогает. Видимо, особая уличная магия.

Re: USB-принтеры для USB-ядра

Posted: Wed Apr 17, 2013 4:18 pm
by SoUrcerer
А вот и нет. В Linux - очень даже дает. Отсюда делаем вывод, что я делаю это неправильно. Перепроверю.