# # USB HID test # # By default, the run script runs interactively and reports any received USB # input events to the console. # # When run with the '--autopilot' run option, the run script tests the USB # input events generated by a 'Pro Micro' microcontroller. # # Pro Micro setup instructions # ---------------------------- # # Install prerequisites (example for Xubuntu 16.04): # # $ sudo apt-get install gcc-avr avr-libc avrdude # # Checkout and build the microcontroller software: # # $ git clone https://github.com/cproc/lufa.git # $ cd lufa # $ git checkout genode_usb_tests # $ cd Demos/Device/ClassDriver/KeyboardMouseGenode # $ make # # Connect the 'RST' pin with the 'GND' pin to hold the Pro Micro in the reset # state. # # Connect the Pro Micro to the host PC # # Check the device file name with 'dmesg'. If it is not 'ttyACM0', change # 'AVRDUDE_PORT' in 'makefile' accordingly. # # Release the RST/GND pin connection and within the next 8 seconds run: # # $ make avrdude # # Disconnect the Pro Micro or put it into reset state again to avoid unexpected # input events on the host PC. # if { [have_spec linux] || [have_spec muen] } { puts "Run script does not support Linux and Muen." exit 0 } if { [get_cmd_switch --autopilot] && [have_include "power_on/qemu"] } { puts "Run script does not support autopilot mode on Qemu" exit 0 } if { [get_cmd_switch --autopilot] && ![have_spec rpi] && ![have_spec x86] && ![have_spec imx6q_sabrelite] && ![have_spec imx8q_evk]} { puts "Run script does not support autopilot mode on this platform" exit 0 } proc platform_drv_config_non_x86 {} { if {[have_spec imx8q_evk]} { return { } } if {[have_spec imx6q_sabrelite]} { return { } } if {[have_spec rpi]} { return { } } return "" } proc platform_drv_binary_non_x86 {} { if {[have_spec imx8q_evk]} { return imx8mq_platform_drv } if {[have_spec imx6q_sabrelite]} { return platform_drv } if {[have_spec rpi]} { return rpi_new_platform_drv } return no_platform_drv_available } # # Build # set build_components { core init timer drivers/usb_host drivers/usb_hid server/event_dump server/dynamic_rom server/report_rom } source ${genode_dir}/repos/base/run/platform_drv.inc if { [have_spec x86] } { append_platform_drv_build_components } else { append build_components { drivers/platform } } build $build_components create_boot_directory # # Generate config # append config { } if { [have_spec x86] } { append_platform_drv_config } else { append config "" append config { } append config "[platform_drv_config_non_x86]" append config { } } append config { } append config "" append config { } install_config $config # # Boot modules # # generic modules set boot_modules { core ld.lib.so init timer usb_hid_drv event_dump dynamic_rom report_rom } append boot_modules " [usb_host_drv_binary] " if {[have_spec x86]} { append_platform_drv_boot_modules } else { append boot_modules " [platform_drv_binary_non_x86] " } build_boot_image $boot_modules append qemu_args " -usb -usbdevice mouse -usbdevice keyboard" append qemu_args " -device usb-ehci,id=ehci" append xen_args { usbdevice=\["mouse","keyboard"\] } if { [have_include "power_on/qemu"] || ![get_cmd_switch --autopilot] } { run_genode_until forever } # autopilot test run_genode_until {\[init -\> event_dump\] Input event #0\t} 60 # remove everything before the first interesting line regexp {(\[init -\> event_dump\] Input event #0\t.*)} $output all output run_genode_until {\[init -\> event_dump\] Input event #11.*\n} 40 [output_spawn_id] # pay only attention to the output of init and its children grep_output {^\[init } unify_output { number [0-9]+} "" unify_output {(?n)on usb-usbbus.*$} "" unify_output {(?n)using .*$} "" unify_output {(?n)^.*__wait_event.*$} "" unify_output {(?n)^.*Failed to submit URB.*$} "" unify_output {(?n)^.*dev_warn.*$} "" filter_out_color_escape_sequences trim_lines compare_output_to { [init -> event_dump] Input event #0 PRESS KEY_X 65534 key count: 1 [init -> event_dump] Input event #1 RELEASE KEY_X key count: 0 [init -> event_dump] Input event #2 PRESS BTN_LEFT 65534 key count: 1 [init -> event_dump] Input event #3 REL_MOTION -1+0 key count: 1 [init -> event_dump] Input event #4 REL_MOTION +0+1 key count: 1 [init -> event_dump] Input event #5 RELEASE BTN_LEFT key count: 0 [init -> usb_drv] dev_info: USB disconnect, device [init -> usb_drv] dev_info: new full-speed USB device [init -> usb_hid_drv] dev_info: input: USB HID v1.11 Keyboard [HID 03eb:204d] [init -> usb_hid_drv] dev_info: input: USB HID v1.11 Mouse [HID 03eb:204d] [init -> event_dump] Input event #6 PRESS KEY_X 65534 key count: 1 [init -> event_dump] Input event #7 RELEASE KEY_X key count: 0 [init -> event_dump] Input event #8 PRESS BTN_LEFT 65534 key count: 1 [init -> event_dump] Input event #9 REL_MOTION -1+0 key count: 1 [init -> event_dump] Input event #10 REL_MOTION +0+1 key count: 1 [init -> event_dump] Input event #11 RELEASE BTN_LEFT key count: 0 }