Använda pcDuino som en mus när dess anslutna till en dator via USB OTG- (3 / 4 steg)
Steg 3: Testa föraren
Vi kommer att använda testprogrammet från linux-sunxi/dokumentation/usb.Koden visas nedan (det kan också laddas ner från här):
statiska LIST_HEAD(hidg_func_list);
/ * gömde beskrivningen av ett tangentbord * /
statiska struct hidg_func_descriptor pcduino_keyboard_date = {
.subclass = 0, / * ingen underklass * /
.Protocol = 1 / * tangentbordet * /
.report_length = 8,
.report_desc_length = 63,
.report_desc = {
0 × 05, 0 × 01, / * USAGE_PAGE (generiska skrivbordet) * /
0 × 09, 0 × 06, / * användning (tangentbord) * /
0xa1, 0 × 01, / * samling (ansökan) * /
0 × 05, 0 × 07, / * USAGE_PAGE (Keyboard) * /
0 × 19, 0xe0, / * USAGE_MINIMUM (tangentbord LeftControl) * /
0 × 29, 0xe7, / * USAGE_MAXIMUM (tangentbord höger GUI) * /
0 × 15, 0 × 00, / * LOGICAL_MINIMUM (0) * /
0 × 25, 0 × 01, / * LOGICAL_MAXIMUM (1) * /
0 × 75, 0 × 01, / * REPORT_SIZE (1) * /
0 × 95, 0 × 08, / * REPORT_COUNT (8) * /
0 × 81, 0 × 02, / * INPUT (Data, Varians, Abs) * /
0 × 95, 0 × 01, / * REPORT_COUNT (1) * /
0 × 75, 0 × 08, / * REPORT_SIZE (8) * /
0 × 81, 0 × 03, / * INPUT (Cnst, Varians, Abs) * /
0 × 95, 0 × 05, / * REPORT_COUNT (5) * /
0 × 75, 0 × 01, / * REPORT_SIZE (1) * /
0 × 05, 0 × 08, / * USAGE_PAGE (LED) * /
0 × 19, 0 × 01, / * USAGE_MINIMUM (Num Lock) * /
0 × 29, 0 × 05, / * USAGE_MAXIMUM (Kana) * /
0 × 91, 0 × 02, / * OUTPUT (Data, Varians, Abs) * /
0 × 95, 0 × 01, / * REPORT_COUNT (1) * /
0 × 75, 0 × 03, / * REPORT_SIZE (3) * /
0 × 91, 0 × 03, / * OUTPUT (Cnst, Varians, Abs) * /
0 × 95, 0 × 06, / * REPORT_COUNT (6) * /
0 × 75, 0 × 08, / * REPORT_SIZE (8) * /
0 × 15, 0 × 00, / * LOGICAL_MINIMUM (0) * /
0 × 25, 0 × 65, / * LOGICAL_MAXIMUM (101) * /
0 × 05, 0 × 07, / * USAGE_PAGE (Keyboard) * /
0 × 19, 0 × 00, / * USAGE_MINIMUM (reserverad) * /
0 × 29, 0 × 65, / * USAGE_MAXIMUM (tangentbord) * /
0 × 81, 0 × 00, / * INPUT (Data, Ary, Abs) * /
0XC0 / * END_COLLECTION * /
}
};
statiska struct platform_device pcduino_hid_keyboard = {
.name = "hidg",
.ID = 0,
.num_resources = 0,
.Resource = 0,
. dev.platform_data = & amp; amp; pcduino_keyboard_date,
};
/ * gömde beskrivningen av en mus * /
statiska struct hidg_func_descriptor pcduino_mouse_data = {
.subclass = 0, //No underklass
.Protocol = 2, //Mouse
.report_length = 4,
.report_desc_length = 52,
.report_desc = {
0 × 05, 0 × 01, //Usage sida (generiska Desktop kontroller)
0 × 09, 0 × 02, //Usage (mus)
0xa1, 0 × 01, //Collction (ansökan)
0 × 09, 0 × 01, //Usage (pekare)
0xa1, 0 × 00, //Collction (fysiska)
0 × 05, 0 × 09, //Usage sida (knapp)
0 × 19, 0 × 01, //Usage Minimum(1)
0 × 29, 0 × 05, //Usage Maximum(5)
0 × 15, 0 × 00, //Logical Minimum(1)
0 × 25, 0 × 01, //Logical Maximum(1)
0 × 95, 0 × 05, //Report Count(5)
0 × 75, 0 × 01, //Report Size(1)
0 × 81, 0 × 02, //Input(Data,Variable,Absolute,BitField)
0 × 95, 0 × 01, //Report Count(1)
0 × 75, 0 × 03, //Report Size(3)
0 × 81, 0 × 01, //Input(Constant,Array,Absolute,BitField)
0 × 05, 0 × 01, //Usage sida (generiska Desktop kontroller)
0 × 09, 0 × 30, //Usage(x)
0 × 09, 0 × 31, //Usage(y)
0 × 09, 0 × 38, //Usage(Wheel)
0 × 15, 0 × 81, //Logical Minimum(-127)
0 × 25, 0x7F, //Logical Maximum(127)
0 × 75, 0 × 08, //Report Size(8)
0 × 95, 0 × 03, //Report Count(3)
0 × 81, 0 × 06, //Input(Data,Variable,Relative,BitField)
0xC0, //End samling
0xC0 //End samling
}
};
statiska struct platform_device pcduino_hid_mouse = {
.name = "hidg",
.ID = 1,
.num_resources = 0,
.Resource = 0,
. dev.platform_data = & amp; amp; pcduino_mouse_data,
};
statisk int __init hidg_init(void)
{
int status;
status = platform_device_register (& amp; amp; pcduino_hid_keyboard);
om (status & amp; lt; 0) {
printk ("hid tangentbord reg failed\n");
platform_device_unregister (& amp; amp; pcduino_hid_keyboard);
returstatus;
}
status = platform_device_register (& amp; amp; pcduino_hid_mouse);
om (status & amp; lt; 0) {
printk ("hid mus reg failed\n");
platform_device_unregister (& amp; amp; pcduino_hid_mouse);
returstatus;
}
status = platform_driver_probe (& amp; amp; hidg_plat_driver,
hidg_plat_driver_probe);
om (status & amp; lt; 0)
returstatus;
status = usb_composite_probe (& amp; amp; hidg_driver, hid_bind);
om (status & amp; lt; 0)
platform_driver_unregister (& amp; amp; hidg_plat_driver);
returstatus;
}
module_init(hidg_init);
statisk void __exit hidg_cleanup(void)
{
platform_driver_unregister (& amp; amp; hidg_plat_driver);
platform_device_unregister (& amp; amp; pcduino_hid_keyboard);
platform_device_unregister (& amp; amp; pcduino_hid_mouse);
usb_composite_unregister (& amp; amp; hidg_driver);
}
Kompilera:
$gcc gadget_hid.c
Genom att ansluta pcDuino till en dator via USB OTG och sedan köra följande kommando på pcDuino:
root. /a.out/dev/hidg0 k #keyboard
tangentbordsalternativ:
– Håll
– vänster-ctrl
– rätt-ctrl
– vänster-SKIFT
– rätt-SKIFT
– vänster-alt
– rätt-alt
– vänster-meta
– rätt-meta
värden för tangentbord:
[a-ö] eller
– gå tillbaka – esc
– bckspc – fliken
-mellanslag-caps-lock
-f1-f2
-f3-f4
– f5, f6
– f7-f8
– f9-f10
– f11-f12
-Infoga-hem
– pageup-del
– slut-pagedown
-höger-vänster
-down-kp-ange
– upp-num lock
Skriv in: en b c d e f
Nu kan du se något dyker upp på skärmen på PC.
När kör du följande kommandon på pcDunio:
root. /a.out/dev/hidg1 m #keyboard
alternativ för musen:
– Håll
-b1
-b2
– b3
värden för musen:
Två signerade nummer
-avsluta för att stänga
Här är en liten förklaring:
– b1 10 10
När du kör detta, fungerar det som vänstra knappen på musen.
-b2 1
När du kör detta, fungerar det som högerknappen på musen.
– b3-10 100
När du kör detta, fungerar den som att flytta musen.