Перейти к содержанию
    

Работает больше года в 24\7 . Проблемы отваливания решил отслеживанием ошибки и повторной энумерацией, как это сделано в винде.

 

Ну реенумерацию (реинит хоста) я запущу, эти механизмы у меня уже есть, запускается автоматически по спец флажку, но как отловить отваливание? Вставить в тот if какой-то флажок?

Кусок

          if ( p_hid_data -> start_toggle == 1 ) /* handle data once */
          {
              p_hid_data -> start_toggle = 0;
              p_hid_data -> HID_Machine.cb->Decode ( p_hid_data -> HID_Machine.buff );
          }

вызывается только когда мышу двигают.

 

Я вроде не замечал, чтобы у меня про сдыхании мыши вызывался обработчик USBH_USR_DeviceDisconnected (устройство отключилось от хоста). Иначе бы хост реинитился бы.

Он вызывается только если я мышу вообще выдёргиваю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вызывается только когда мышу двигают.

 

Конкретно здесь не подскажу, у меня контроллер EHCI, но по сути, мышь работает в режиме interrupt, скорость запроса репортов определяется хостом, у меня 5 мсек, причем не зависит от того, что я с мышью делаю, когда отваливается, контроллер дает ошибку обмена или запроса, ее отлавливаю и на обработчик...

 

ЗЫ. Можете проверить свою мышь usb luzerом, у меня, в зависимости от мыши, происходили отвалы раз в час, а может и чаще, и сравните с контроллером, если винда работает без отвалов, ищите ошибку у себя...

ЗЫЫ. На практике, проводные мыши у меня вообще не отваливались (правда, они были не совсем уж говно logitech и defender), а вот радио - почем зря, особенно rapoo и smartbay...

Изменено пользователем mantech

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашёл я, как это отловить, добавил туда свой флажок. В итоге курсор мыши при отвале лишь замирает менее чем на полсекунды (пока реинит хост не пройдёт), после чего нормальная работа возобновляется.

 

Самое интересное, что USB ядро такие случаи отрабатывает абсолютно корректно, а в USB HID драйвер просто забыли добавить обработку этого случая. Хотя может забыли вполне сознательно, т.к. у них даже при простом выдёргивании девайса хост тупо виснет и не перезапускается.

 

Пока проблема решена, понаблюдаю за стабильностью.

 

mantech , спасибо за наводку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...