USB Host Shield + Mouse Scroll как достать?

Нет ответов
vanwin
vanwin аватар
Offline
Зарегистрирован: 13.02.2012

Я скачал 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

В чем ошибка, недопонимание?