# # 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_board linux]} { puts "Run script does not support Linux." 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_board pc] && ![have_board rpi] && ![have_board imx8q_evk] && ![have_board imx6q_sabrelite]} { puts "Run script does not support autopilot mode on this platform" exit 0 } create_boot_directory import_from_depot [depot_user]/src/[base_src] \ [depot_user]/pkg/test_usb_host_drv-[board] \ [depot_user]/src/dynamic_rom \ [depot_user]/src/report_rom \ [depot_user]/src/usb_hid_drv \ [depot_user]/src/init build { server/event_dump } install_config { } # # Define USB host controller config # set fd [open [run_dir]/genode/usb_host_drv.config w] puts $fd { } close $fd build_boot_image { event_dump } append qemu_args " -device nec-usb-xhci,id=xhci" append qemu_args " -device usb-kbd,bus=xhci.0" append qemu_args " -device usb-mouse,bus=xhci.0" 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 } # filter out KVM switch messages during the nightly test unify_output {(?n).*0557:2213.*} "" unify_output {(?n) on usb-usbbus.*$} "" unify_output {(?n) at usb-usbbus.*\)} ")" unify_output {(?n)hid-generic.*input:} "hid-generic: input:" unify_output {(?n)usb-[0-9]-[0-9]} "usb-X-X" unify_output {(?n)device number [0-9]+} "device number X" unify_output {(?n)input[0-9]} "inputX" unify_output {(?n) as /devices/.*} "" unify_output {(?n)^\[init -\> usb_drv.*} "" 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+1 key count: 1 [init -> event_dump] Input event #4 RELEASE BTN_LEFT key count: 0 [init -> usb_hid_drv] usb usb-X-X: USB disconnect, device number X [init -> usb_hid_drv] Disconnected device: inputX [init -> usb_hid_drv] Disconnected device: inputX [init -> usb_hid_drv] input: HID 03eb:204d [init -> usb_hid_drv] Connected device: inputX (HID 03eb:204d) [init -> usb_hid_drv] hid-generic: input: USB HID v1.11 Keyboard [HID 03eb:204d] [init -> usb_hid_drv] input: HID 03eb:204d [init -> usb_hid_drv] Connected device: inputX (HID 03eb:204d) [init -> usb_hid_drv] hid-generic: input: USB HID v1.11 Mouse [HID 03eb:204d] [init -> event_dump] Input event #5 PRESS KEY_X 65534 key count: 1 [init -> event_dump] Input event #6 RELEASE KEY_X key count: 0 [init -> event_dump] Input event #7 PRESS BTN_LEFT 65534 key count: 1 [init -> event_dump] Input event #8 REL_MOTION -1+1 key count: 1 [init -> event_dump] Input event #9 RELEASE BTN_LEFT key count: 0 }