drivers_managed-pc: propagate keyboard LEDs

This patch supplements the drivers subsystem with the ability to
propagate the global capslock and numlock states to PS/2 and USB HID
keyboards.
This commit is contained in:
Norman Feske 2017-11-08 15:15:24 +01:00 committed by Christian Helmuth
parent fe4f304815
commit c05ab9c310
4 changed files with 68 additions and 8 deletions

View File

@ -139,13 +139,15 @@
</config>
</start>
<start name="usb_drv" caps="100" priority="-1">
<start name="usb_drv" caps="200" priority="-1">
<resource name="RAM" quantum="16M"/>
<provides> <service name="Input"/> <service name="Usb"/> </provides>
<route>
<service name="Platform"> <child name="platform_drv"/> </service>
<service name="ROM" label="config">
<child name="fs_rom" label="usb_drv.config"/> </service>
<service name="ROM" label="capslock"> <parent label="capslock"/> </service>
<service name="ROM" label="numlock"> <parent label="numlock"/> </service>
<service name="Report" label="devices">
<child name="fs_report" label="usb_devices"/> </service>
<service name="Report" label="config">
@ -162,21 +164,25 @@
<start name="ps2_drv" priority="0">
<resource name="RAM" quantum="1M"/>
<provides> <service name="Input"/> </provides>
<config capslock_led="rom" numlock_led="rom"/>
<route>
<service name="Platform"> <child name="platform_drv"/> </service>
<service name="ROM"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
<service name="ROM" label="capslock"> <parent label="capslock"/> </service>
<service name="ROM" label="numlock"> <parent label="numlock"/> </service>
<service name="ROM"> <parent/> </service>
<service name="PD"> <parent/> </service>
<service name="CPU"> <parent/> </service>
<service name="LOG"> <parent/> </service>
</route>
</start>
<start name="input_filter" caps="80" priority="-1">
<resource name="RAM" quantum="1M"/>
<start name="input_filter" caps="90" priority="-1">
<resource name="RAM" quantum="2M"/>
<provides> <service name="Input"/> </provides>
<route>
<service name="ROM" label="config"> <parent label="input_filter.config"/> </service>
<service name="ROM" label="config"> <parent label="input_filter.config"/> </service>
<service name="ROM" label="en_us.chargen"> <parent label="en_us.chargen"/> </service>
<service name="ROM" label="capslock"> <parent label="capslock"/> </service>
<service name="Input" label="ps2"> <child name="ps2_drv"/> </service>
<service name="Input" label="usb"> <child name="usb_drv"/> </service>
<service name="ROM"> <parent/> </service>

View File

@ -0,0 +1,30 @@
<config>
<input label="ps2"/>
<input label="usb"/>
<output>
<chargen>
<merge>
<accelerate max="50" sensitivity_percent="1000" curve="127">
<button-scroll>
<input name="ps2"/>
<vertical button="BTN_MIDDLE" speed_percent="-10"/>
<horizontal button="BTN_MIDDLE" speed_percent="-10"/>
</button-scroll>
</accelerate>
<input name="usb"/>
</merge>
<mod1>
<key name="KEY_LEFTSHIFT"/> <key name="KEY_RIGHTSHIFT"/>
<rom name="capslock"/>
</mod1>
<mod2>
<key name="KEY_LEFTCTRL"/> <key name="KEY_RIGHTCTRL"/>
</mod2>
<mod3>
<key name="KEY_RIGHTALT"/> <!-- AltGr -->
</mod3>
<repeat delay_ms="230" rate_ms="90"/>
<include rom="en_us.chargen"/>
</chargen>
</output>
</config>

View File

@ -10,6 +10,7 @@ create_boot_directory
import_from_depot genodelabs/src/[base_src] \
genodelabs/pkg/drivers_managed-pc \
genodelabs/src/report_rom \
genodelabs/src/dynamic_rom \
genodelabs/src/init
install_config {
@ -48,6 +49,8 @@ install_config {
<binary name="init"/>
<route>
<service name="ROM" label="config"> <parent label="drivers.config"/> </service>
<service name="ROM" label="capslock"> <child name="dynamic_rom"/> </service>
<service name="ROM" label="numlock"> <child name="dynamic_rom"/> </service>
<service name="Timer"> <child name="timer"/> </service>
<service name="Report" label="block_devices"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
@ -59,6 +62,25 @@ install_config {
</provides>
</start>
<start name="dynamic_rom">
<resource name="RAM" quantum="4M"/>
<provides> <service name="ROM"/> </provides>
<config verbose="yes">
<rom name="capslock">
<inline> <capslock enabled="no"/> </inline>
<sleep milliseconds="500" />
<inline> <capslock enabled="yes"/> </inline>
<sleep milliseconds="500" />
</rom>
<rom name="numlock">
<inline> <numlock enabled="no"/> </inline>
<sleep milliseconds="1000" />
<inline> <numlock enabled="yes"/> </inline>
<sleep milliseconds="1000" />
</rom>
</config>
</start>
<start name="test-driver_manager">
<resource name="RAM" quantum="1M"/>
<config>

View File

@ -477,6 +477,8 @@ void Driver_manager::Main::_generate_usb_drv_config(Reporter &usb_drv_config,
xml.attribute("uhci", true);
xml.attribute("ehci", true);
xml.attribute("xhci", true);
xml.attribute("capslock_led", "rom");
xml.attribute("numlock_led", "rom");
xml.node("hid", [&] () { });
xml.node("raw", [&] () {
xml.node("report", [&] () { xml.attribute("devices", true); });