Вот уже пару недель (непостоянно конечно

Использовал СТ-шные либы и частично переделанные библиотеки немца - http://mikrocontroller.bplaced.net/wordpress/?page_id=2991
Результаты весьма плачевные - проверял на 3-х мышах:
1. (какой-то Logitch) не опознаётся, обламывается где-то на этапе энумерации. Там я не копался, забил пока на неё.
2. Logitech RX250 (PS2+USB) и Terratech mouse опознаются с полпинка, но ведут себя как пьяный заяц на дороге - даже если мыша просто лежит
на столе без движения, координаты как-то странно скачут, в подавляющем большинстве случаев в сторону увеличения, довольно быстро упираются
в заданные мною максимумы, на чём всё и замирает. Кнопки вроде нормально отрабатывают, но с задержкой в несколько секунд - от одной до 10 (на глаз).
Ну и ещё один общий вопрос.
В HID ядре прописана некая частота опроса мыши (HID устройства):
CODE
if ( HID_Machine.poll < HID_MIN_POLL)
{
HID_Machine.poll = HID_MIN_POLL;
} // if
....................
case HID_POLL:
t= HCD_GetCurrentFrame ( pdev ) - HID_Machine.timer;
if ( t >= HID_Machine.poll )
{ // прошло больше HID_Machine.poll SOF-ов
HID_Machine.state = HID_GET_DATA;
}
else if ( HCD_GetURB_State ( pdev, HID_Machine.hc_num_in ) == URB_DONE )
{
// handle data once
if ( start_toggle == 1 )
{
start_toggle = 0;
HID_Machine.cb->Decode ( HID_Machine.buff );
} // if
} // if
else if ( HCD_GetURB_State(pdev, HID_Machine.hc_num_in) == URB_STALL ) /* IN Endpoint Stalled */
{
/* Issue Clear Feature on interrupt IN endpoint */
if ( USBH_ClrFeature ( pdev, pphost, HID_Machine.ep_addr, HID_Machine.hc_num_in ) == USBH_OK )
{
/* Change state to issue next IN token */
HID_Machine.state = HID_GET_DATA;
}
} // if
break;
{
HID_Machine.poll = HID_MIN_POLL;
} // if
....................
case HID_POLL:
t= HCD_GetCurrentFrame ( pdev ) - HID_Machine.timer;
if ( t >= HID_Machine.poll )
{ // прошло больше HID_Machine.poll SOF-ов
HID_Machine.state = HID_GET_DATA;
}
else if ( HCD_GetURB_State ( pdev, HID_Machine.hc_num_in ) == URB_DONE )
{
// handle data once
if ( start_toggle == 1 )
{
start_toggle = 0;
HID_Machine.cb->Decode ( HID_Machine.buff );
} // if
} // if
else if ( HCD_GetURB_State(pdev, HID_Machine.hc_num_in) == URB_STALL ) /* IN Endpoint Stalled */
{
/* Issue Clear Feature on interrupt IN endpoint */
if ( USBH_ClrFeature ( pdev, pphost, HID_Machine.ep_addr, HID_Machine.hc_num_in ) == USBH_OK )
{
/* Change state to issue next IN token */
HID_Machine.state = HID_GET_DATA;
}
} // if
break;
Зачем это сделано - понятно, но по факту это выполнимо только если проц выполняет один только USBH_Process(&USB_OTG_Core_dev, &USB_Host);в главном цикле. А если надо делать ещё что-то? Та же немецкая либа в чистом виде у меня не пошла именно из-за условия if ( t >= HID_Machine.poll )
Можно вызывать USBH_Process в каком-нибудь таймере, но я не знаю, насколько безопасно вызывать эту функцию в прерывании.
У кого-то USB-мышки работают? Может кто-то помочь?
Приложил свой проект, посмотрите кто может пожалуйста. На кокосе.
Спасибо.
PS.
USB клавиатуру я не пробовал, хотя и не вырезал.