Paso 3: Probar el controlador
Vamos a utilizar el programa de prueba de linux-sunxi/documentación/usb.A continuación se muestra el código (puede descargarse desde aquí):
LIST_HEAD(hidg_func_list) estática;
/ * hid descriptor para un teclado * /
Static struct hidg_func_descriptor pcduino_keyboard_date = {}
.Subclass = 0, / * no subclase * /
.Protocol = 1, / * teclado * /
.report_length = 8,
.report_desc_length = 63,
.report_desc = {}
0 × 05, 0 × 01, / * USAGE_PAGE (escritorio genérico) * /
0 × 09, 0 × 06, / * uso (teclado) * /
0xa1, 0 × 01, / * colección (aplicación) * /
0 × 05, 0 × 07, / * USAGE_PAGE (teclado) * /
0 × 19, 0xe0, / * USAGE_MINIMUM (teclado LeftControl) * /
0 × 29, 0xe7, / * USAGE_MAXIMUM (GUI de la derecha del teclado) * /
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, / * entrada (datos, Var, Abs) * /
0 × 95, 0 × 01, / * REPORT_COUNT (1) * /
0 × 75, 0 × 08, / * REPORT_SIZE (8) * /
0 × 81, 0 × 03, / * entrada (Cnst, Var, 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 (Bloq Num) * /
0 × 29, 0 × 05, / * USAGE_MAXIMUM (Kana) * /
0 × 91, 0 × 02, / * salida (datos, Var, Abs) * /
0 × 95, 0 × 01, / * REPORT_COUNT (1) * /
0 × 75, 0 × 03, / * REPORT_SIZE (3) * /
0 × 91, 0 × 03, / * salida (Cnst, Var, 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 (teclado) * /
0 × 19, 0 × 00, / * USAGE_MINIMUM (reservado) * /
0 × 29, 0 × 65, / * USAGE_MAXIMUM (aplicación de teclado) * /
0 × 81, 0 × 00, / * entrada (datos, Ary, Abs) * /
0XC0 / * END_COLLECTION * /
}
};
Static struct platform_device pcduino_hid_keyboard = {}
Name = "hidg",
.id = 0,
.num_resources = 0,
recursos = 0,
. dev.platform_data = & amp; amp; pcduino_keyboard_date,
};
/ * hid descriptor para un ratón * /
Static struct hidg_func_descriptor pcduino_mouse_data = {}
.Subclass = 0, //No subclase
.Protocol = 2, //Mouse
.report_length = 4,
.report_desc_length = 52,
.report_desc = {}
0 × 05, 0 × 01, //Usage página (controles de escritorio genéricas)
0 × 09, 0 × 02, //Usage (ratón)
0xa1, 0 × 01, //Collction (aplicación)
0 × 09, 0 × 01, //Usage (puntero)
0xa1, 0 × 00, //Collction (físico)
0 × 05, 0 × 09, //Usage página (botón)
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 página (controles de escritorio genéricas)
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, colección //End
0xc0 //End colección
}
};
Static struct platform_device pcduino_hid_mouse = {}
Name = "hidg",
.ID = 1,
.num_resources = 0,
recursos = 0,
. dev.platform_data = & amp; amp; pcduino_mouse_data,
};
Static int __init hidg_init(void)
{
int estado;
Estado = platform_device_register (& amp; amp; pcduino_hid_keyboard);
Si (condición & amp; lt; 0) {}
han ("teclado hid reg fallo en");
platform_device_unregister (& amp; amp; pcduino_hid_keyboard);
volver estado;
}
Estado = platform_device_register (& amp; amp; pcduino_hid_mouse);
Si (condición & amp; lt; 0) {}
han ("ratón hid reg fallo en");
platform_device_unregister (& amp; amp; pcduino_hid_mouse);
volver estado;
}
Estado = platform_driver_probe (& amp; amp; hidg_plat_driver,
hidg_plat_driver_probe);
Si (condición & amp; lt; 0)
volver estado;
Estado = usb_composite_probe (& amp; amp; hidg_driver, hid_bind);
Si (condición & amp; lt; 0)
platform_driver_unregister (& amp; amp; hidg_plat_driver);
volver estado;
}
module_init(hidg_init);
Static 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);
}
Compilar:
$gcc gadget_hid.c
Por conectar pcDuino a un PC a través de USB OTG y luego ejecute el comando siguiente en pcDuino:
raíz. /a.out/dev/hidg0 k #keyboard
Opciones de teclado:
– Mantenga
– izquierda-ctrl
– derecho-ctrl
– izquierda-cambio
– derecho-cambio
– izquierda-alt
– derecho-alt
– izquierda-meta
– derecho-meta
valores de teclado:
[a-z] o
– volver – esc
– bckspc – ficha
– barra espaciadora – caps-lock
–f1 –f2
–f3 –f4
–f5 –f6
–f7 –f8
– f9 – f10
-f11-f12
– insertar – Inicio
– y – del
– terminar – pagedown
– la derecha – izquierda
– abajo – kp-entrar
– arriba – num-lock
Introduce: a b c d e f
Ahora se puede ver algo en la pantalla de la PC.
Cuando ejecute los comandos siguientes en pcDunio:
raíz. /a.out/dev/hidg1 m #keyboard
Opciones de ratón:
– Mantenga
– b1
– b2
– b3
valores de ratón:
Dos números firmados
– dejar de fumar para cerrar
Aquí le damos una pequeña explicación:
– b1 10 10
Cuando se ejecuta esto, actúa como el botón izquierdo del ratón.
– b2 1
Cuando se ejecuta esto, actúa como el botón derecho del ratón.
– b3-10 100
Cuando se ejecuta esto, actúa como moviendo el ratón.