USB-muis
De HID-verslag "descriptor" is gewijzigd om aan te geven dat het gebruik een muisaanwijzer is. De X- en Y-bewegingen zijn nu relatieve in plaats van absolute. Er zijn slechts drie bits gebruikt voor de muisknoppen (links klik, klik met de rechtermuisknop, Midden tikken) is er ook verticale muis wiel schuiven en horizontaal schuiven (niet echt werkt zonder Logitech drivers, want het is niet een standaard functie).
De gegevensstructuur wordt zoiets als dit:
Bit 7 | Bit 6 | Bit 5 | Bit 4 | Bit 3 | Bit 2 | Bit 1 | Bit 0 | |
0 byte | Nutteloos | Nutteloos | Nutteloos | Nutteloos | Nutteloos | Middelste knop | Linker knop | Rechterknop |
Byte 1 | X as relatieve beweging als geheel getal met voorteken | |||||||
Byte 2 | Y as relatieve beweging als Integer met teken | |||||||
Byte 3 | Verticale schuifbalk als Integer met teken | |||||||
Byte 4 | Horizontale schuifbalk als Integer met teken |
De bijbehorende C gegevens struct eruit:
static struct mouse_report_t { uint8_t buttons; // button mask ( . . . . . M L R ) int8_t x; // mouse x movement int8_t y; // mouse y movement int8_t v_wheel; // mouse wheel movement int8_t h_wheel; // mouse wheel movement } mouse_report;
De HID-verslag "descriptor" ziet eruit als
PROGMEM char usbHidReportDescriptor[61] = { // make sure the size matches USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH in usbconfig.h 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x02, // USAGE (Mouse) 0xa1, 0x01, // COLLECTION (Application) 0x09, 0x01, // USAGE (Pointer) 0xa1, 0x00, // COLLECTION (Physical) 0x05, 0x09, // USAGE_PAGE (Button) 0x19, 0x01, // USAGE_MINIMUM (Button 1) 0x29, 0x03, // USAGE_MAXIMUM (Button 3) 0x15, 0x00, // LOGICAL_MINIMUM (0) 0x25, 0x01, // LOGICAL_MAXIMUM (1) 0x95, 0x03, // REPORT_COUNT (3) 0x75, 0x01, // REPORT_SIZE (1) 0x81, 0x02, // INPUT (Data,Var,Abs) 0x95, 0x01, // REPORT_COUNT (1) 0x75, 0x05, // REPORT_SIZE (5) 0x81, 0x03, // INPUT (Cnst,Var,Abs) 0x05, 0x01, // USAGE_PAGE (Generic Desktop) 0x09, 0x30, // USAGE (X) 0x09, 0x31, // USAGE (Y) 0x09, 0x38, // USAGE (Wheel) 0x15, 0x81, // LOGICAL_MINIMUM (-127) 0x25, 0x7f, // LOGICAL_MAXIMUM (127) 0x75, 0x08, // REPORT_SIZE (8) 0x95, 0x03, // REPORT_COUNT (3) 0x81, 0x06, // INPUT (Data,Var,Rel) 0x05, 0x0c, // USAGE_PAGE (Consumer Devices) 0x0a, 0x38, 0x02, // USAGE (Undefined) 0x95, 0x01, // REPORT_COUNT (1) 0x81, 0x06, // INPUT (Data,Var,Rel) 0xc0, // END_COLLECTION 0xc0 // END_COLLECTION };
Enkele kleine wijzigingen werden gemaakt in "usbconfig.h", voornamelijk de leverancier en product-id's werden veranderd om het klonen van een Logitech-muis merk. De product- en vervaardiging snaren werden veranderd maar dit niet doorgevoerd in Windows wijten aan het feit dat Windows update de productinformatie via Windows Update vindt. De lengte van de HID verslag "descriptor" is ook aangepast aan de grootte van de matrix.