USB Host Shield + Mouse Scroll как достать?
- Войдите на сайт для отправки комментариев
Я скачал https://github.com/felis/USB_Host_Shield_2.0 ( http://www.circuitsathome.com/mcu/hid-support-for-usb-host-shield-librar... ) библиотеку, в ней был USBHidMouse пример, но только для 3-х кнопочной мыши.
Да, этот код работает, но как спарзить информацию о скроле или еще других 2 кнопках? У мыши 5 кнопок и колесико. Не получается достать информацию о колесике. В PS/2 мышках все просто было: спросил ID, потом изменил rate, спросил еще раз ID, если изменился, значит есть колесико, изменил еще раз рейт и спросил ID, если поменялся, то в мышке 5 кнопок и колесико. А как сделать по USB? Документ http://www.usb.org/developers/devclass_docs/HID1_11.pdf не подсказал где взять инфу о колесике.
Я начал копаться в скачанной библиотеке. Первая версия библиотеки http://www.circuitsathome.com/communicating-arduino-with-hid-devices-part-1 не работает на новой ардуинке, но там есть строчка про колесико. Хочется конечно для этого использовать более свежую версию библиотеки и сделать все по-правильному.
Первым делом я залез в hidboot.h: и добавил dZ координату.
struct MOUSEINFO { struct { uint8_t bmLeftButton : 1; uint8_t bmRightButton : 1; uint8_t bmMiddleButton : 1; uint8_t bmDummy : 1; }; int8_t dX; int8_t dY; int8_t dZ; };
Изменил вместо bInfo[3] В скетче в классе MouseRptParser в блоке "protected:"
class MouseReportParser : public HIDReportParser { union { MOUSEINFO mouseInfo; uint8_t bInfo[4]; } prevState;
Добавил
virtual void OnWheelMove (MOUSEINFO *mi);
void MouseRptParser::OnWheelMove(MOUSEINFO *mi) { Serial.print("dz="); Serial.println(mi->dZ, DEC); };
И в hidboot.cpp в методе "MouseReportParser::Parse(HID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf)" добавил
if (prevState.mouseInfo.dZ != pmi->dZ) OnWheelMove(pmi);
И в конце метода вместо
for (uint8_t i=0; i<3; i++)
Написал вот так:
for (uint8_t i=0; i<4; i++)
Залил получившееся в ардуинку и в предвкушении получить информацию о скроле, как я делал с PS/2 мышкой - значение от -8 до 7. А нет... Я Видимо получил направление куда я двигал колесико, но не значение, вот что вышло:
Start BM Init Addr:1 BM configured dz=-1 dz=1 dz=-1 dz=1 dz=-1
В чем ошибка, недопонимание?