Снова USB

Drivers for periphery equipment
  • Leency

    Мышь - убийца ?

    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;
    };
    Курсор ползает нормально. Может принажатии на кнопку приходит не стандартный boot_packet, а что-то другое.
  • Мышь убивца имеет официальную страничку 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, прилагаю.
    Attachments
    USB2.LOG (12.44 KiB)
    Downloaded 395 times
    Ушёл к умным, знающим и культурным людям.
  • Похоже что падает до SetMouseData. Но совсем непонятно почему.
  • Serge
    Ничего не падает, цикл опроса исправно выполняется, но статус для соответствующего дескриптора после нажатия на кнопку становится равен 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 мыши, или эт не то?
  • Атауальпа
    Выложенный драйвер он только для 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 3 guests