Hi all,
I have been trying to get the detection of a scroll wheel of a regular mouse working with a USB Host Shield.
I am using Host Shield Library 2.0 for this but I cannot find a way to get any info from the scroll wheel that I can use. The only useful example that I found was with the provided USBHID_desc.ino script in the examples of that library. Here the serial returns that it found a "wheel" and gives me a good value when I scroll up or down.
I could not reverse-engineer how this is done however, since I have a severe lack of knowledge on how USB (and HID) work in this context (or any context at all for that matter).
Is there a way such that I can retrieve those wheel values so that I can use them in my own script?
Kind regards,
Falko
#include <usbhid.h>
#include <hiduniversal.h>
#include <hidescriptorparser.h>
#include <usbhub.h>
#include "pgmstrings.h"
// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#endif
#include <SPI.h>
class HIDUniversal2 : public HIDUniversal
{
public:
HIDUniversal2(USB *usb) : HIDUniversal(usb) {};
protected:
uint8_t OnInitSuccessful();
};
uint8_t HIDUniversal2::OnInitSuccessful()
{
uint8_t rcode;
HexDumper<USBReadParser, uint16_t, uint16_t> Hex;
ReportDescParser Rpt;
if ((rcode = GetReportDescr(0, &Hex)))
goto FailGetReportDescr1;
if ((rcode = GetReportDescr(0, &Rpt)))
goto FailGetReportDescr2;
return 0;
FailGetReportDescr1:
USBTRACE("GetReportDescr1:");
goto Fail;
FailGetReportDescr2:
USBTRACE("GetReportDescr2:");
goto Fail;
Fail:
Serial.println(rcode, HEX);
Release();
return rcode;
}
USB Usb;
//USBHub Hub(&Usb);
HIDUniversal2 Hid(&Usb);
UniversalReportParser Uni;
void setup()
{
Serial.begin( 115200 );
#if !defined(__MIPSEL__)
while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
Serial.println("Start");
if (Usb.Init() == -1)
Serial.println("OSC did not start.");
delay( 200 );
if (!Hid.SetReportParser(0, &Uni))
ErrorMessage<uint8_t>(PSTR("SetReportParser"), 1 );
}
void loop()
{
Usb.Task();
}