2019-02-11 13:08:23 +00:00
|
|
|
#
|
|
|
|
# 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
|
2023-09-12 11:56:12 +00:00
|
|
|
#
|
2019-02-11 13:08:23 +00:00
|
|
|
# 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.
|
|
|
|
#
|
|
|
|
|
2021-01-29 12:48:00 +00:00
|
|
|
if {[have_board linux]} {
|
|
|
|
puts "Run script does not support Linux."
|
2019-02-11 13:08:23 +00:00
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
|
2021-01-29 12:48:00 +00:00
|
|
|
if {[get_cmd_switch --autopilot] && [have_include "power_on/qemu"]} {
|
2019-02-11 13:08:23 +00:00
|
|
|
puts "Run script does not support autopilot mode on Qemu"
|
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
|
|
|
|
if { [get_cmd_switch --autopilot] &&
|
2022-05-18 14:15:51 +00:00
|
|
|
![have_board pc] &&
|
|
|
|
![have_board rpi] &&
|
|
|
|
![have_board imx8q_evk] &&
|
2021-10-18 09:41:24 +00:00
|
|
|
![have_board imx6q_sabrelite]} {
|
2019-02-11 13:08:23 +00:00
|
|
|
puts "Run script does not support autopilot mode on this platform"
|
|
|
|
exit 0
|
|
|
|
}
|
|
|
|
|
|
|
|
create_boot_directory
|
2022-05-18 14:15:51 +00:00
|
|
|
import_from_depot [depot_user]/src/[base_src] \
|
2024-05-30 13:46:57 +00:00
|
|
|
[depot_user]/pkg/test_usb_host-[board] \
|
2022-05-18 14:15:51 +00:00
|
|
|
[depot_user]/src/dynamic_rom \
|
|
|
|
[depot_user]/src/report_rom \
|
2024-05-30 13:46:57 +00:00
|
|
|
[depot_user]/src/usb_hid \
|
2022-05-18 14:15:51 +00:00
|
|
|
[depot_user]/src/init
|
2019-02-11 13:08:23 +00:00
|
|
|
|
2022-05-18 14:15:51 +00:00
|
|
|
build { server/event_dump }
|
2019-02-11 13:08:23 +00:00
|
|
|
|
2022-05-18 14:15:51 +00:00
|
|
|
install_config {
|
2019-02-11 13:08:23 +00:00
|
|
|
<config>
|
|
|
|
<parent-provides>
|
|
|
|
<service name="ROM"/>
|
|
|
|
<service name="IRQ"/>
|
|
|
|
<service name="IO_MEM"/>
|
|
|
|
<service name="IO_PORT"/>
|
|
|
|
<service name="PD"/>
|
|
|
|
<service name="RM"/>
|
|
|
|
<service name="CPU"/>
|
|
|
|
<service name="LOG"/>
|
|
|
|
</parent-provides>
|
|
|
|
<default-route>
|
|
|
|
<any-service> <parent/> <any-child/> </any-service>
|
|
|
|
</default-route>
|
2020-08-14 12:58:03 +00:00
|
|
|
<default caps="100"/>
|
2019-02-11 13:08:23 +00:00
|
|
|
|
|
|
|
<start name="timer">
|
|
|
|
<resource name="RAM" quantum="1M"/>
|
|
|
|
<provides><service name="Timer"/></provides>
|
|
|
|
</start>
|
|
|
|
|
|
|
|
<start name="report_rom">
|
|
|
|
<resource name="RAM" quantum="1M"/>
|
|
|
|
<provides> <service name="Report"/> <service name="ROM"/> </provides>
|
2022-05-18 14:15:51 +00:00
|
|
|
<config>
|
2024-05-30 13:46:57 +00:00
|
|
|
<default-policy report="usb -> usb -> devices"/>
|
2019-02-11 13:08:23 +00:00
|
|
|
</config>
|
2022-05-18 14:15:51 +00:00
|
|
|
<route>
|
|
|
|
<any-service> <parent/> </any-service>
|
|
|
|
</route>
|
2019-02-11 13:08:23 +00:00
|
|
|
</start>
|
|
|
|
|
2024-05-30 13:46:57 +00:00
|
|
|
<start name="usb" caps="1500" managing_system="yes">
|
2022-05-18 14:15:51 +00:00
|
|
|
<binary name="init"/>
|
|
|
|
<resource name="RAM" quantum="32M"/>
|
2019-02-11 13:08:23 +00:00
|
|
|
<provides> <service name="Usb"/> </provides>
|
|
|
|
<route>
|
2022-05-18 14:15:51 +00:00
|
|
|
<service name="ROM" label="config">
|
|
|
|
<parent label="drivers.config"/> </service>
|
2019-02-11 13:08:23 +00:00
|
|
|
<service name="Report"> <child name="report_rom"/> </service>
|
2022-05-18 14:15:51 +00:00
|
|
|
<service name="Timer"> <child name="timer"/> </service>
|
|
|
|
<any-service> <parent/> </any-service>
|
2019-02-11 13:08:23 +00:00
|
|
|
</route>
|
|
|
|
</start>
|
|
|
|
|
2024-05-30 13:46:57 +00:00
|
|
|
<start name="usb_hid" caps="180">
|
2019-02-11 13:08:23 +00:00
|
|
|
<resource name="RAM" quantum="11M"/>
|
usb: session renewal & new client API
Replace the USB session API by one that provides a devices ROM only,
which contains information about all USB devices available for this client,
as well as methods to acquire and release a single device.
The acquisition of an USB device returns the capability to a device session
that includes a packet stream buffer to communicate control transfers
in between the client and the USB host controller driver. Moreover,
additional methods to acquire and release an USB interface can be used.
The acquisition of an USB interface returns the capability to an interface
session that includes a packet stream buffer to communicate either
bulk, interrupt, or isochronous transfers in between the client and the
USB host controller driver.
This commit implements the API changes in behalf of the Genode C API's
USB server and client side. Addtionally, it provides Usb::Device,
Usb::Interface, and Usb::Endpoint utilities that can be used by native
C++ clients to use the new API and hide the sophisticated packet stream API.
The adaptations necessary target the following areas:
* lx_emul layer for USB host and client side
* Linux USB host controller driver port for PC
* Linux USB client ports: usb_hid_drv and usb_net_drv, additionally
reduce the Linux tasks used inside these drivers
* Native usb_block_drv
* black_hole component
* Port of libusb, including smartcard and usb_webcam driver depending on it
* Port of Qemu XHCI model library, including vbox5 & vbox6 depending on it
* Adapt all run-scripts and drivers_interactive recipes to work
with the new policy rules of the USB host controller driver
Fix genodelabs/genode#5021
2023-09-14 08:55:11 +00:00
|
|
|
<config capslock_led="rom" numlock_led="rom" scrlock_led="rom"/>
|
2019-02-11 13:08:23 +00:00
|
|
|
<route>
|
|
|
|
<service name="ROM" label="capslock"> <child name="dynamic_rom"/> </service>
|
|
|
|
<service name="ROM" label="numlock"> <child name="dynamic_rom"/> </service>
|
|
|
|
<service name="ROM" label="scrlock"> <child name="dynamic_rom"/> </service>
|
|
|
|
<service name="ROM" label="report"> <child name="report_rom"/> </service>
|
2020-08-13 14:03:59 +00:00
|
|
|
<service name="Event"> <child name="event_dump"/> </service>
|
2024-05-30 13:46:57 +00:00
|
|
|
<service name="Usb"> <child name="usb"/> </service>
|
2022-05-18 14:15:51 +00:00
|
|
|
<service name="Timer"> <child name="timer"/> </service>
|
|
|
|
<any-service> <parent/> </any-service>
|
2019-02-11 13:08:23 +00:00
|
|
|
</route>
|
|
|
|
</start>
|
|
|
|
|
|
|
|
<start name="dynamic_rom">
|
|
|
|
<resource name="RAM" quantum="4M"/>
|
|
|
|
<provides> <service name="ROM"/> </provides>
|
|
|
|
<config verbose="no">
|
|
|
|
<rom name="numlock">
|
2024-01-19 13:46:59 +00:00
|
|
|
<inline> <numlock enabled="no"/> </inline>
|
|
|
|
<sleep milliseconds="500" />
|
|
|
|
<inline> <numlock enabled="yes"/> </inline>
|
|
|
|
<sleep milliseconds="500" />
|
|
|
|
<inline> <numlock enabled="no"/> </inline>
|
|
|
|
<sleep milliseconds="500" />
|
|
|
|
<inline> <numlock enabled="no"/> </inline>
|
2019-02-11 13:08:23 +00:00
|
|
|
<sleep milliseconds="500" />
|
|
|
|
<inline> <numlock enabled="yes"/> </inline>
|
|
|
|
<sleep milliseconds="500" />
|
|
|
|
</rom>
|
2024-01-19 13:46:59 +00:00
|
|
|
<rom name="capslock">
|
|
|
|
<inline> <capslock enabled="no"/> </inline>
|
|
|
|
<sleep milliseconds="500"/>
|
|
|
|
<inline> <capslock enabled="no"/> </inline>
|
|
|
|
<sleep milliseconds="500" />
|
|
|
|
<inline> <capslock enabled="yes"/> </inline>
|
|
|
|
<sleep milliseconds="500" />
|
|
|
|
<inline> <capslock enabled="no"/> </inline>
|
|
|
|
<sleep milliseconds="500" />
|
|
|
|
<inline> <capslock enabled="yes"/> </inline>
|
|
|
|
<sleep milliseconds="500" />
|
|
|
|
</rom>
|
2019-02-11 13:08:23 +00:00
|
|
|
<rom name="scrlock">
|
2024-01-19 13:46:59 +00:00
|
|
|
<inline> <scrlock enabled="no"/> </inline>
|
|
|
|
<sleep milliseconds="500"/>
|
|
|
|
<inline> <scrlock enabled="no"/> </inline>
|
|
|
|
<sleep milliseconds="500" />
|
|
|
|
<inline> <scrlock enabled="no"/> </inline>
|
|
|
|
<sleep milliseconds="500" />
|
2019-02-11 13:08:23 +00:00
|
|
|
<inline> <scrlock enabled="yes"/> </inline>
|
2024-01-19 13:46:59 +00:00
|
|
|
<sleep milliseconds="500" />
|
|
|
|
<inline> <scrlock enabled="yes"/> </inline>
|
|
|
|
<sleep milliseconds="500" />
|
2019-02-11 13:08:23 +00:00
|
|
|
</rom>
|
|
|
|
</config>
|
|
|
|
<route>
|
|
|
|
<service name="ROM"> <parent/> </service>
|
|
|
|
<service name="CPU"> <parent/> </service>
|
|
|
|
<service name="PD"> <parent/> </service>
|
|
|
|
<service name="LOG"> <parent/> </service>
|
|
|
|
<service name="Timer"> <child name="timer"/> </service>
|
|
|
|
</route>
|
|
|
|
</start>
|
|
|
|
|
2020-08-13 14:03:59 +00:00
|
|
|
<start name="event_dump">
|
2019-02-11 13:08:23 +00:00
|
|
|
<resource name="RAM" quantum="1M"/>
|
2020-08-13 14:03:59 +00:00
|
|
|
<provides> <service name="Event"/> </provides>
|
|
|
|
<config/>
|
2019-02-11 13:08:23 +00:00
|
|
|
</start>
|
|
|
|
</config>}
|
|
|
|
|
|
|
|
#
|
2022-05-18 14:15:51 +00:00
|
|
|
# Define USB host controller config
|
2019-02-11 13:08:23 +00:00
|
|
|
#
|
2024-05-30 13:46:57 +00:00
|
|
|
set fd [open [run_dir]/genode/usb_host.config w]
|
2022-05-18 14:15:51 +00:00
|
|
|
puts $fd {
|
2023-09-07 13:52:02 +00:00
|
|
|
<config bios_handoff="no">
|
2022-05-18 14:15:51 +00:00
|
|
|
<report devices="yes"/>
|
2024-05-30 13:46:57 +00:00
|
|
|
<policy label_prefix="usb_hid"> <device class="0x3"/> </policy>
|
2022-05-18 14:15:51 +00:00
|
|
|
</config>}
|
|
|
|
close $fd
|
2019-02-11 13:08:23 +00:00
|
|
|
|
2023-11-24 11:48:02 +00:00
|
|
|
build_boot_image [build_artifacts]
|
2019-02-11 13:08:23 +00:00
|
|
|
|
2022-03-03 16:14:12 +00:00
|
|
|
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"
|
2019-02-11 13:08:23 +00:00
|
|
|
|
|
|
|
if { [have_include "power_on/qemu"] || ![get_cmd_switch --autopilot] } { run_genode_until forever }
|
|
|
|
|
|
|
|
# autopilot test
|
|
|
|
|
2024-07-30 14:52:49 +00:00
|
|
|
run_genode_until {\[init -\> event_dump\] Input event #11.*\n} 100
|
2019-02-11 13:08:23 +00:00
|
|
|
|
|
|
|
# pay only attention to the output of init and its children
|
2024-07-30 14:52:49 +00:00
|
|
|
grep_output {^\[init -\> event_dump\]}
|
2019-02-11 13:08:23 +00:00
|
|
|
|
|
|
|
compare_output_to {
|
2020-08-13 14:03:59 +00:00
|
|
|
[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
|
2024-01-19 14:43:53 +00:00
|
|
|
[init -> event_dump] Input event #2 REL_MOTION -1+1 key count: 0
|
|
|
|
[init -> event_dump] Input event #3 PRESS BTN_LEFT 65534 key count: 1
|
2023-09-07 13:52:02 +00:00
|
|
|
[init -> event_dump] Input event #4 RELEASE BTN_LEFT key count: 0
|
|
|
|
[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
|
2024-01-19 14:43:53 +00:00
|
|
|
[init -> event_dump] Input event #7 REL_MOTION -1+1 key count: 0
|
|
|
|
[init -> event_dump] Input event #8 PRESS BTN_LEFT 65534 key count: 1
|
2023-09-07 13:52:02 +00:00
|
|
|
[init -> event_dump] Input event #9 RELEASE BTN_LEFT key count: 0
|
2019-02-11 13:08:23 +00:00
|
|
|
}
|