Сейчас общаемся с diamondом по ЛС. Он верно заметил, драйвер стал падать когда я сменил мышь. Оказывается, что старая USB-мышь действительно нормально работает, драйвер не умирает при нажатии клавиши. А вот с новой проблемы.
Замечу, кстати, что новая мышь вообще не работает в ХайкуОС, в отличии от старой. В Линуксе, Винде всё норм.
Снова USB
-
Из хаоса в космос
Leency
Мышь - убийца ?
Курсор ползает нормально. Может принажатии на кнопку приходит не стандартный boot_packet, а что-то другое.
Мышь - убийца ?
Code: Select all
Bool mouse_handler(udev_t *dev, struct tag_request *rq)
{
td_t *td;
td = rq->td_head;
if( (td->status &0x7FF)==rq->size-1)
{
struct boot_packet *pkt;
pkt = (struct boot_packet *)rq->data;
SetMouseData(pkt->buttons, pkt->x, -pkt->y, -pkt->z, 0);
};
td->status = 0x00800000 | dev->speed;
td->token ^= DATA1;
return TRUE;
};
Мышь убивца имеет официальную страничку http://www.canyon-tech.com/archive/comp ... r-switcher если это поможет.
Из хаоса в космос
А что в /rd/1/drivers/usb.log ?
Serge
В ходе тестирования пробовал: убрать проверку размера в mouse_handler(); при конфигурации явно посылать SET_PROTOCOL с установкой boot protocol; увеличить размер буфера под пакет до 8 байт. Первое действие чинит проблему с одной из моих мышей (но там другая проблема - исходный драйвер мышь видел, но полностью игнорировал - maxpacketsize=5, а по boot protocol посылаются 4 байта), все остальные ни к какому результату не приводят.
В лог ещё добавил перед вызовом SetMouseData дамп статуса и пакета. Последний из логов, присланный Leency, прилагаю.
В ходе тестирования пробовал: убрать проверку размера в mouse_handler(); при конфигурации явно посылать SET_PROTOCOL с установкой boot protocol; увеличить размер буфера под пакет до 8 байт. Первое действие чинит проблему с одной из моих мышей (но там другая проблема - исходный драйвер мышь видел, но полностью игнорировал - maxpacketsize=5, а по boot protocol посылаются 4 байта), все остальные ни к какому результату не приводят.
В лог ещё добавил перед вызовом SetMouseData дамп статуса и пакета. Последний из логов, присланный Leency, прилагаю.
- Attachments
-
-
USB2.LOG (12.44 KiB)Downloaded 406 times
-
Ушёл к умным, знающим и культурным людям.
Похоже что падает до SetMouseData. Но совсем непонятно почему.
Serge
Ничего не падает, цикл опроса исправно выполняется, но статус для соответствующего дескриптора после нажатия на кнопку становится равен 0x48507ff (low-speed, active, CRC/Time-Out error+Reserved bit) и больше уже не меняется. Если счётчик ошибок выставлять в 3 (aka "допускается 3 ошибки") вместо 0 (aka "опрашивай до упора"), то mouse_handler, как и положено, вызывается и после нажатия на кнопку, и статус там 0x44507ff (то есть то же самое с той же загадочной ошибкой и установленным reserved-битом, только stalled вместо active).
Ничего не падает, цикл опроса исправно выполняется, но статус для соответствующего дескриптора после нажатия на кнопку становится равен 0x48507ff (low-speed, active, CRC/Time-Out error+Reserved bit) и больше уже не меняется. Если счётчик ошибок выставлять в 3 (aka "допускается 3 ошибки") вместо 0 (aka "опрашивай до упора"), то mouse_handler, как и положено, вызывается и после нажатия на кнопку, и статус там 0x44507ff (то есть то же самое с той же загадочной ошибкой и установленным reserved-битом, только stalled вместо active).
Ушёл к умным, знающим и культурным людям.
Понятно. Я думал что там вся система виснет. Надо сделать обработчик ошибок.
Не, там не обработку ошибок делать надо. Статус порта, куда воткнута мышь, при нажатии на кнопку меняется с 1A5 на AB, то есть мышь делает вид, что произошёл дисконнект с последующим коннектом. Здесь нужно обрабатывать дисконнекты и коннекты, а этого в драйвере и близко нет. Так что это не баг, это отсутствие фичи, такое не лечим. (И вообще, "чем таких лечить, лучше новых сделать"...)
Ушёл к умным, знающим и культурным людям.
Серёга, ты абсолютно прав. Как жаль, что я не заметил этого раньше. Только сегодня, рисуя граффити вконтакте, я заметил что невозможно нормально зажать ЛКМ - через несколько секунд после зажатия кнопки она как-будто отпускается и нажимается снова раза 2-3. Видимо, это брак.
Из хаоса в космос
Колибри - acid test для железа
Что делать, чтобы usb-мышь заработала? Я перечитал всю тему, но так и не понял :-[
viewtopic.php?f=3&t=1400
Включить в биосе эмуляцию ps/2 мыши, или эт не то?
Включить в биосе эмуляцию ps/2 мыши, или эт не то?
Атауальпа
Выложенный драйвер он только для UHCI контроллеров, которые есть далеко не в каждой материнской плате.
Запусти программу PCIDEV и увидишь какой у тебя контроллер: UHCI, OHCI или EHCI.
Выложенный драйвер он только для UHCI контроллеров, которые есть далеко не в каждой материнской плате.
Запусти программу PCIDEV и увидишь какой у тебя контроллер: UHCI, OHCI или EHCI.
Не во всех биосах она естьSh@dy wrote:viewtopic.php?f=3&t=1400
Включить в биосе эмуляцию ps/2 мыши, или эт не то?
Who is online
Users browsing this forum: No registered users and 0 guests