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

Drivers for periphery equipment
Post Reply
SoUrcerer
Posts: 2810
Joined: Mon Sep 24, 2007 11:11 am
Been thanked: 1 time

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

Post by SoUrcerer »

CleverMouse wrote:Для желающих писать USB-драйвера я обновила ядро, теперь для устройств классов не 3 = hid и не 8 = mass storage ядро пытается загрузить драйвер usbother.obj. HID-устройства обрабатываются в usbhid.obj, исходный текст которого лежит рядом с ядром на ftp, mass storage - в usbstor.obj.


Драйвер usbother.obj - тест работы принтера. При подключении принтера он должен напечатать "KolibriOS print!".
Драйвер глючный (то есть многократное отключение-подключение скорее всего работать не будет), API пока что тоже никакого нет для печати. В принципе, всё, что может дать API, это:
1) Отправка на принтер raw-данных
2) Получение форматов, которые принтер знает: обычно это ASCII, PCL и PS (в который уже можно сохранять из Колибри, если кто не в курсе)
3) Нет ли замятия бумаги
4) Есть ли бумага в принтере


Спецификация: http://www.usb.org/developers/devclass_ ... rint11.pdf
Attachments
USBOTHER.OBJ
(4.04 KiB) Downloaded 817 times
SoUrcerer
Posts: 2810
Joined: Mon Sep 24, 2007 11:11 am
Been thanked: 1 time

Re: Тестируем поддержку USB

Post by SoUrcerer »

Если принтер поддерживает PCL, то этот драйвер заставит напечатать его сложную страницу.
Не забудьте переименовать в usbother.obj и положить в /rd/1/drivers
Починить баги так и не получилось - это нужна консультация умных людей.
Тест для PostScript скоро тоже выложу - только картинку подготовлю.
Attachments
usboth_pcl.obj
(28.54 KiB) Downloaded 871 times
SoUrcerer
Posts: 2810
Joined: Mon Sep 24, 2007 11:11 am
Been thanked: 1 time

Re: Тестируем поддержку USB

Post by SoUrcerer »

Держите котяток, владельцы принтеров с поддержкой PostScript. Размер драйвера большой (ещё бы, в нем картинка на четверть листа!), поэтому придется что-то удалить с rd навроде demos или 3d.
У меня на hp1200 получилось вот так:
Image

Было бы интересно посмотреть на результаты печати для цветных принтеров.
Attachments
usboth_ps2.obj
(179.25 KiB) Downloaded 804 times
SoUrcerer
Posts: 2810
Joined: Mon Sep 24, 2007 11:11 am
Been thanked: 1 time

Re: Тестируем поддержку USB

Post by SoUrcerer »

Исходники - прилагаются. Основаны на usbhid.asm.
Многие места я не понял, и поэтому..
Image

Собственно, потому оно и падает.

Ложка дёгтя
На принтерах, требующих "прошивки", тестовые программы работать просто так не будут.
Так, мой HP1200 бодро печатает из Колибри только в том случае, если перед этим на нём что-то печаталось из Linux при помощи cupsd. Эта печать из Linux (и, вероятно, Windows) похоже что-то загружает в принтер, и в итоге принтер печатает даже из Колибри. Если же принтер включить и выключить, то печатать из Колибри уже не получится - до следующей печати из "большой" ОС.
Есть и другой вариант - возможно, я совсем не понял, что и как работает, и не инициализирую принтер правильным образом через control pipe, но это делает за меня Linux или Windows. В любом случае, и то, и другое можно исправить - надеюсь, желающие найдутся.
Attachments
USBOTHER.ASM
(7.9 KiB) Downloaded 863 times
SoUrcerer
Posts: 2810
Joined: Mon Sep 24, 2007 11:11 am
Been thanked: 1 time

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

Post by SoUrcerer »

Протестировал с двумя принтерами: Brother HL-2030R и Canon Pixma MP250. Первый лазерный, второй - струйный.
Оба принтера, к моему удивлению, оказались 07/01/02, а не 07/01/03, что потребовало правок драйвера. То есть, короче говоря, они вроде как не поддерживают протокол обмена IEEE. А может и поддерживают, но конфигурация по умолчанию usb bidir.

На обоих принтерах напечатать ничего не получилось. В первом случае драйвер принтера упал со странными, невиданными доселе ошибками. Во втором случае принтер вел себя корректно, подвигал головкой и надумал было печатать, но так ничего и не напечатал. Возможно/вероятно, причина в том, что в нем кончилась краска, и даже из Windows он не горит желанием печатать без почесывания левой пятки правым ухом. Предварительная загрузка Windows на результат второго теста (Кэнон) никак не повлияла. Сейчас проверю бразер, но надежды мало. Такие вот дела.

По-крайней мере, хотя бы что-то работает. И главное - я почти уверен, что у меня в коде не хватает инициализации чего-то. CleverMouse наверняка сможет объяснить, чего именно - если это так. Возможно, причина в этом.
User avatar
CleverMouse
Kernel Developer
Posts: 1625
Joined: Thu Sep 03, 2009 1:52 pm

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

Post by CleverMouse »

"А может и поддерживают, но конфигурация по умолчанию usb bidir." - USB-ядро не слишком старых версий при инициализации устройства печатает все варианты для интерфейса устройства, типа

Code: Select all

K : USB interface class/subclass/protocol = 07/01/03
K : note: alternate setting with 07/01/02
K : note: alternate setting with 07/01/01
Альтернативные настройки нужно явным образом активировать - запрос SET_INTERFACE к устройству - но факт их наличия ядро отображает.
В коде грубейшая ошибка в callback-функции. Она должна иметь сигнатуру

Code: Select all

void __stdcall CallbackFunction(
    void* pipe,
    int status,
    void* buffer,
    int length,
    void* calldata
);
В частности, при выходе вычищать из стека 5 параметров командой ret 20, а ни в коем случае не ret 4.
Сделаем мир лучше!
Mario_r4
Kernel Developer
Posts: 2328
Joined: Sun Feb 10, 2013 12:37 pm

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

Post by Mario_r4 »

HP1020 / USBOTHER.OBJ (первый вариант драйвера)
Без предварительно инициализации в больших ОС.
Spoiler:
0BOARDLOG.TXT
(15.69 KiB) Downloaded 835 times
После предварительной инициализации в W7 (распечатана тестовая страница).
Spoiler:
1Boardlog.txt
(15.68 KiB) Downloaded 804 times
Нет печати в обоих случаях.
Last edited by Mario_r4 on Thu Apr 11, 2013 8:37 pm, edited 1 time in total.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
SoUrcerer
Posts: 2810
Joined: Mon Sep 24, 2007 11:11 am
Been thanked: 1 time

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

Post by SoUrcerer »

Блин, точно. Спасибо больше. Исправлю.
Для моего hp1200 есть три варианта, а вот brother и canon альтернативные конфигурации не предоставляют
SoUrcerer
Posts: 2810
Joined: Mon Sep 24, 2007 11:11 am
Been thanked: 1 time

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

Post by SoUrcerer »

Mario, у тебя 07/01/02, я поправлю и выложу рабочий драйвер в течении 15 минут. Должно заработать
Serge
Kernel Developer
Posts: 3952
Joined: Wed Mar 08, 2006 6:25 pm

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

Post by Serge »

CleverMouse
А можно грузить не usbother, а usb_xx, где xx код класса ?
SoUrcerer
Posts: 2810
Joined: Mon Sep 24, 2007 11:11 am
Been thanked: 1 time

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

Post by SoUrcerer »

Должны работать принтеры unidir (07/01/01), bidir (07/01/02), ieee (07/01/03). Ошибка с ret 4 вместо ret 20 поправлена. Mario, тестируй.
Attachments
usbother_pcl.obj
(120.76 KiB) Downloaded 883 times
usbother_ps.obj
(268.92 KiB) Downloaded 965 times
usbother_ascii.obj
(2.07 KiB) Downloaded 885 times
Mario_r4
Kernel Developer
Posts: 2328
Joined: Sun Feb 10, 2013 12:37 pm

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

Post by Mario_r4 »

usbother_ascii.obj
Spoiler:
BOARDLOG.TXT
(14.18 KiB) Downloaded 925 times
Не печатает в обоих случаях, после отключения шнура происходит вылет USB подсистемы в обоих случаях.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Mario_r4
Kernel Developer
Posts: 2328
Joined: Sun Feb 10, 2013 12:37 pm

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

Post by Mario_r4 »

usbother_pcl.obj
Без предварительно инициализации в больших ОС.
Spoiler:
0Boardlog.txt
(14.18 KiB) Downloaded 933 times
После предварительной инициализации в W7 (распечатана тестовая страница).
Spoiler:
1Boardlog.txt
(14.18 KiB) Downloaded 867 times
Не печатает в обоих случаях, после отключения шнура происходит вылет USB подсистемы в обоих случаях.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
User avatar
CleverMouse
Kernel Developer
Posts: 1625
Joined: Thu Sep 03, 2009 1:52 pm

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

Post by CleverMouse »

SoUrcerer, определись, тебе нужно постоянно хранить данные об устройстве или нет. Если нужно, то не освобождай выделенную память в AddDevice, а возвращай её в eax. Если не нужно, то не освобождай мусор в DeviceDisconnected. Сейчас ты из AddDevice возвращаешь 1, ядро радуется, что это не ноль, и запоминает эту единицу у себя, при дисконнекте вызывает DeviceDisconnected с параметром 1 - который ты вернул из AddDevice - и ты пытаешься сделать free на нём.
Сделаем мир лучше!
SoUrcerer
Posts: 2810
Joined: Mon Sep 24, 2007 11:11 am
Been thanked: 1 time

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

Post by SoUrcerer »

А, вот оно как. Хорошо, понятно, исправлюсь. Спасибо.
Post Reply

Who is online

Users browsing this forum: No registered users and 1 guest