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

Drivers for periphery equipment
  • Ядро при загрузке драйвера, насколько я понял, само выбирает и устанавливает конфигурацию
    Не знаю, исходников ядра нет. Попробуй установить конфигурацию.
  • В Linux через libusb не получается установить конфигурацию даже после detachKernelDriver - говорит, что device busy. В Колибри еще не пробовал.
  • В протоколе 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 не посылать, то интерфейс устройства должен работать как основная настройка, и я не думаю, что явная посылка что-то изменит.
    Сделаем мир лучше!
  • Угадайте, какие у меня новости? Потестировать Brother и Canon с Haiku не удалось - в упор не хочет загружаться на двух компах. Однако, тест с Brother дал интересные результаты. В Linux через cat filename > /dev/usb/lp0 не напечатался НИ ОДИН из моих тестовых файлов. Ни ascii, ни PostScript, ни PCL4. Файл PostScript дал те же результаты, что и в Колибри - принтер прогнал несколько пустых листов. Тогда я попробовал PCL5 - и, о чудо, он напечатался!
    Я скомпоновал версию с PCL5-документом для Колибри - и она отлично напечаталась на Brother HL-2030R - как после Linux, так и после включения-выключения принтера.
    Вывод: не все версии PCL одинаково полезны. Не все принтеры одинаково умны.
    Canon, однако, PCL5-документ печатать отказывается - буду еще копать. В скором времени выложу драйвер с PCL5-документом.
  • Тестовые драйверы PCL5 и PostScript level1. В теории должны пониматься большинством принтеров.
    Жду результатов тестов.
    Пробовать лучше оба. Как уже говорилось, на результат не влияет печать из Windows - хотя может повлиять печать из Haiku или cat file > /dev/usb/lp0 (хотя и не ясно, почему).
    Attachments
    usbother_ps1.obj (2.94 KiB)
    Downloaded 275 times
    usbother_pcl5.obj (15.83 KiB)
    Downloaded 281 times
  • Почитал про 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.
  • 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
  • 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.
  • Файл 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, и ожидать окончания отправки - так что ли? Надо попробовать.
    Attachments
    dot4 (31.94 KiB)
    Downloaded 267 times
  • выбор интерфейса
    Выбирается не умолчальный интерфейс 07/01/03, а интерфейс с 07/01/02.
    Сделаем мир лучше!
  • Так, это очень интересно, спасибо. А как установить нужный интерфейс?
    p.s. В теории 07/01/03 тоже должен работать - ну да ладно, пока что не будем на него обращать внимание.
  • Функцией Usbcontroltransferasync отправить запрос SET_INTERFACE. Параметры запроса описаны в главе 9 спецификации USB.
    Сделаем мир лучше!
  • Установка альтернативного интерфейса не помогает. Видимо, особая уличная магия.
  • А вот и нет. В Linux - очень даже дает. Отсюда делаем вывод, что я делаю это неправильно. Перепроверю.
  • Who is online

    Users browsing this forum: No registered users and 1 guest