committed by
Norman Feske
parent
87ed5042c0
commit
6b7048762a
173
run/hotkey.run
Normal file
173
run/hotkey.run
Normal file
@@ -0,0 +1,173 @@
|
||||
create_boot_directory
|
||||
|
||||
#
|
||||
# To use the themed decorator instead of the default one, replace 'pkg/wm'
|
||||
# with 'pkg/themed_wm'.
|
||||
#
|
||||
|
||||
import_from_depot genodelabs/src/[base_src] \
|
||||
genodelabs/pkg/[drivers_interactive_pkg] \
|
||||
genodelabs/pkg/wm \
|
||||
genodelabs/src/init \
|
||||
genodelabs/src/nitpicker \
|
||||
genodelabs/src/ram_fs \
|
||||
genodelabs/src/fs_rom \
|
||||
|
||||
install_config {
|
||||
<config prio_levels="2">
|
||||
<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>
|
||||
<default caps="100"/>
|
||||
|
||||
<start name="timer">
|
||||
<resource name="RAM" quantum="1M"/>
|
||||
<provides><service name="Timer"/></provides>
|
||||
</start>
|
||||
|
||||
<start name="drivers" caps="1000">
|
||||
<resource name="RAM" quantum="32M"/>
|
||||
<binary name="init"/>
|
||||
<route>
|
||||
<service name="ROM" label="config"> <parent label="drivers.config"/> </service>
|
||||
<service name="Timer"> <child name="timer"/> </service>
|
||||
<any-service> <parent/> </any-service>
|
||||
</route>
|
||||
<provides>
|
||||
<service name="Input"/> <service name="Framebuffer"/>
|
||||
</provides>
|
||||
</start>
|
||||
|
||||
<start name="nitpicker">
|
||||
<resource name="RAM" quantum="4M"/>
|
||||
<provides><service name="Nitpicker"/></provides>
|
||||
<config>
|
||||
<domain name="pointer" layer="1" content="client" label="no" origin="pointer" />
|
||||
<domain name="default" layer="2" content="client" label="no" hover="always" focus="click" />
|
||||
|
||||
<policy label_prefix="pointer" domain="pointer"/>
|
||||
<default-policy domain="default"/>
|
||||
<global-key name="KEY_SPACE" label="hotkey_edit -> input" />
|
||||
</config>
|
||||
</start>
|
||||
|
||||
<start name="pointer">
|
||||
<resource name="RAM" quantum="1M"/>
|
||||
<route>
|
||||
<service name="Nitpicker"> <child name="nitpicker"/> </service>
|
||||
<any-service> <parent/> <any-child/> </any-service>
|
||||
</route>
|
||||
</start>
|
||||
|
||||
<start name="wm" caps="1000">
|
||||
<resource name="RAM" quantum="32M"/>
|
||||
<binary name="init"/>
|
||||
<provides> <service name="Nitpicker"/> </provides>
|
||||
<route>
|
||||
<service name="ROM" label="config"> <parent label="wm.config"/> </service>
|
||||
<service name="Nitpicker"> <child name="nitpicker"/> </service>
|
||||
<any-service> <parent/> <any-child/> </any-service>
|
||||
</route>
|
||||
</start>
|
||||
|
||||
<start name="ram_fs" priority="-1">
|
||||
<resource name="RAM" quantum="2M"/>
|
||||
<provides> <service name="File_system"/> </provides>
|
||||
<config verbose="yes">
|
||||
<content>
|
||||
<inline name="dynamic.init.config">
|
||||
<config prio_levels="2" verbose="yes">
|
||||
<parent-provides>
|
||||
<service name="ROM"/>
|
||||
<service name="PD"/>
|
||||
<service name="RM"/>
|
||||
<service name="CPU"/>
|
||||
<service name="LOG"/>
|
||||
<service name="Timer"/>
|
||||
<service name="Nitpicker"/>
|
||||
</parent-provides>
|
||||
<default-route>
|
||||
<any-service> <parent/> <any-child/> </any-service>
|
||||
</default-route>
|
||||
<default caps="100"/>
|
||||
</config>
|
||||
</inline>
|
||||
</content>
|
||||
<policy label_prefix="xml_editor -> " writeable="yes" root="/" />
|
||||
<policy label_prefix="fs_rom -> " writeable="no" root="/" />
|
||||
</config>
|
||||
</start>
|
||||
|
||||
<start name="fs_rom" priority="-1">
|
||||
<resource name="RAM" quantum="2M"/>
|
||||
<provides> <service name="ROM"/> </provides>
|
||||
</start>
|
||||
|
||||
<start name="init" priority="-1" caps="512">
|
||||
<resource name="RAM" quantum="8M"/>
|
||||
<route>
|
||||
<service name="ROM" label="config">
|
||||
<child name="fs_rom" label="dynamic.init.config"/> </service>
|
||||
<any-service>
|
||||
<child name="wm"/>
|
||||
<parent/> <any-child/>
|
||||
</any-service>
|
||||
</route>
|
||||
</start>
|
||||
|
||||
<start name="xml_editor" priority="-1">
|
||||
<resource name="RAM" quantum="2M"/>
|
||||
<provides> <service name="Report"/> </provides>
|
||||
<config verbose="yes" output="dynamic.init.config">
|
||||
<vfs> <fs/> </vfs>
|
||||
</config>
|
||||
</start>
|
||||
|
||||
<start name="hotkey_edit" priority="-1">
|
||||
<resource name="RAM" quantum="2M"/>
|
||||
<config>
|
||||
<key name="KEY_SPACE">
|
||||
<toggle>
|
||||
<start name="testnit" caps="96">
|
||||
<resource name="RAM" quantum="2M"/>
|
||||
<route> <any-service> <parent/> </any-service> </route>
|
||||
</start>
|
||||
</toggle>
|
||||
</key>
|
||||
</config>
|
||||
<route>
|
||||
<any-service>
|
||||
<child name="nitpicker"/>
|
||||
<parent/> <any-child/>
|
||||
</any-service>
|
||||
</route>
|
||||
</start>
|
||||
|
||||
</config>}
|
||||
|
||||
build {
|
||||
app/hotkey_edit
|
||||
app/xml_editor
|
||||
test/nitpicker
|
||||
init
|
||||
}
|
||||
|
||||
build_boot_image {
|
||||
init
|
||||
hotkey_edit
|
||||
testnit
|
||||
xml_editor
|
||||
libc.lib.so
|
||||
}
|
||||
|
||||
run_genode_until forever
|
||||
67
src/app/hotkey_edit/main.nim
Normal file
67
src/app/hotkey_edit/main.nim
Normal file
@@ -0,0 +1,67 @@
|
||||
#
|
||||
# \brief Hotkey XML editor
|
||||
# \author Emery Hemingway
|
||||
# \date 2017-09-28
|
||||
#
|
||||
|
||||
#
|
||||
# Copyright (C) 2017 Genode Labs GmbH
|
||||
#
|
||||
# This file is part of the Genode OS framework, which is distributed
|
||||
# under the terms of the GNU General Public License version 2.
|
||||
#
|
||||
|
||||
import streams, tables, strtabs, xmlparser, xmltree,
|
||||
genode, reportclient, romclient, nitpickerclient, inputclient
|
||||
|
||||
var
|
||||
keyActions = initTable[KeyCode, XmlNode]()
|
||||
let
|
||||
configRom = newRomClient("config")
|
||||
editReport = newReportClient("xml_editor")
|
||||
nitClient = newNitpickerClient("input")
|
||||
|
||||
let
|
||||
input = nitClient.input
|
||||
inputDispatch = newSignalDispatcher()
|
||||
|
||||
input.sigh inputDispatch.cap
|
||||
|
||||
proc submit(action: XmlNode) =
|
||||
editReport.stream.setPosition 0
|
||||
editReport.stream.writeLine "<edit>", action, "</edit>", 0.char
|
||||
submit editReport
|
||||
|
||||
inputDispatch.handler = proc() =
|
||||
for ev in input.events:
|
||||
if ev.typ == RELEASE and keyActions.contains ev.code:
|
||||
submit keyActions[ev.code]
|
||||
|
||||
proc xml(rom: RomClient): XmlNode =
|
||||
## Parse ROM content as XML.
|
||||
rom.stream.setPosition 0
|
||||
try: result = parseXml rom.stream
|
||||
except XmlError: result = newElement "empty"
|
||||
|
||||
proc configHandler() =
|
||||
update configRom
|
||||
clear keyActions
|
||||
let config = configRom.xml
|
||||
for node in config.findAll("key").items:
|
||||
try:
|
||||
let
|
||||
keyName = node.attrs["name"]
|
||||
keyCode = lookupKey keyName
|
||||
if keyActions.contains keyCode:
|
||||
echo "discarding duplicate action for key ", keyName
|
||||
else:
|
||||
keyActions[keyCode] = node[0]
|
||||
except:
|
||||
discard
|
||||
|
||||
configRom.handler = configHandler
|
||||
# set the ROM callback
|
||||
configHandler()
|
||||
# parse the config
|
||||
|
||||
echo "--- hotkey_edit returning to entrypoint ---"
|
||||
6
src/app/hotkey_edit/target.mk
Normal file
6
src/app/hotkey_edit/target.mk
Normal file
@@ -0,0 +1,6 @@
|
||||
TARGET = hotkey_edit
|
||||
LIBS = base libc
|
||||
SRC_NIM = main.nim
|
||||
|
||||
# Peek inside Input::Client
|
||||
CC_OPT += -Dprivate=public
|
||||
Reference in New Issue
Block a user