USB-Wii Classic Controller (16 / 18 steg)
USB-tangentbord
HID rapport deskriptorn har ändrats för att ange att användningen är ett tangentbord. Denna deskriptor är något mer komplicerat. Vi skickar 8 byte data, den första byten är en modifierare byte som innehåller bitflaggor för skift, CTRL, ALT och andra specialtangenter. Den 2: a byten är värdelös. De sista 6 byte innehåller nyckel koder (inte ASCII) av tangenterna trycks.
C data struct ser ut:
statiska struct keyboard_report_t
{
uint8_t modifierare; Bitflaggor som skift, ctrl, alt och andra saker
uint8_t reserverade; värdelös för nu
uint8_t nyckel [6]. HID nyckelkoderna
} keyboard_report;
HID rapport deskriptorn ser ut
PROGMEM char usbHidReportDescriptor [63] = {
kontrollera storlek matchar USB_CFG_HID_REPORT_DESCRIPTOR_LENGTH i usbconfig.h
0x05, 0x01, / / USAGE_PAGE (generiska skrivbordet)
0x09, 0x06, / / användning (tangentbord)
0xa1, 0x01, / / samling (ansökan)
0x05, 0x07, / / USAGE_PAGE (tangentbord)
0x19, 0xe0, / / USAGE_MINIMUM (tangentbord LeftControl)
0x29, 0xe7, / / USAGE_MAXIMUM (tangentbord höger GUI)
0X15, 0X00, / / LOGICAL_MINIMUM (0)
0X25, 0X01, / / LOGICAL_MAXIMUM (1)
0X75, 0X01, / / REPORT_SIZE (1)
0X95, 0X08, / / REPORT_COUNT (8)
0x81, 0x02, / / ingång (Data, Var, Abs)
0X95, 0X01, / / REPORT_COUNT (1)
0X75, 0X08, / / REPORT_SIZE (8)
0x81, 0x03, / / ingång (Cnst, Var, Abs)
0X95, 0X05, / / REPORT_COUNT (5)
0X75, 0X01, / / REPORT_SIZE (1)
0x05, 0x08, / / USAGE_PAGE (LED)
0x19, 0x01, / / USAGE_MINIMUM (Num Lock)
0x29, 0x05, / / USAGE_MAXIMUM (Kana)
0x91, 0x02, / / OUTPUT (Data, Var, Abs)
0X95, 0X01, / / REPORT_COUNT (1)
0X75, 0X03, / / REPORT_SIZE (3)
0x91, 0x03, / / OUTPUT (Cnst, Var, Abs)
0X95, 0X06, / / REPORT_COUNT (6)
0X75, 0X08, / / REPORT_SIZE (8)
0X15, 0X00, / / LOGICAL_MINIMUM (0)
0X25, 0X65, / / LOGICAL_MAXIMUM (101)
0x05, 0x07, / / USAGE_PAGE (tangentbord)
0x19, 0x00, / / USAGE_MINIMUM (reserverat (inga omständigheter anges))
0x29, 0x65, / / USAGE_MAXIMUM (tangentbord)
0x81, 0x00, / / ingång (Data, Ary, Abs)
0XC0 / / END_COLLECTION
};
Denna deskriptor är sortera av "standardiserade" så att det fungerar utan ett operativsystem. "usbconfig.h" innehåller några ändringar i gränssnittet underklass och protokoll för att aktivera "boot protokoll" så att det fungerar utan ett operativsystem (till exempel när du är i BIOS menyer).
En V-USB-funktion som kallas "usbFunctionWrite" har också skapats för att hantera situationen när datorn vill säga tangentbordet för att aktivera eller inaktivera status lysdioder, som CAPS LOCK, NUM LOCK eller SCROLL LOCK. Funktionen är skriven men det faktiskt gör inte något.
data från datorn som hanteras här
Detta faktiskt kommer att bli sånt NUM LOCK-, CAPS LOCK och SCROLL LOCK LED
unsigned char usbFunctionWrite (unsigned char * data, unsigned char len)
{
ignorera dessa data
returnera len;
}
Funktionen "usbFunctionSetup" är lite längre att hantera lite mer saker som ändrar det nuvarande protokollet, och kräver "usbFunctionWrite".
Några andra mindre ändringar gjordes i "usbconfig.h", främst de leverantör och produkt-ID har ändrats. Längden på HID rapport deskriptorn också ändras för att matcha storleken på matrisen.