mirror of
https://github.com/NixOS/mobile-nixos.git
synced 2024-12-13 04:04:35 +03:00
boot/init: Use the new evdev library
It still uses evdev internally, but first let's change the interface, *then* change the implementation details.
This commit is contained in:
parent
f2d1cf95b2
commit
0037614821
@ -40,6 +40,7 @@ stdenv.mkDerivation {
|
|||||||
|
|
||||||
# This is the "script" that will be loaded.
|
# This is the "script" that will be loaded.
|
||||||
mrbc -o init.mrb \
|
mrbc -o init.mrb \
|
||||||
|
$(find ${../lib} -type f | sort) \
|
||||||
$(find lib -type f | sort) \
|
$(find lib -type f | sort) \
|
||||||
$(get_tasks) \
|
$(get_tasks) \
|
||||||
init.rb
|
init.rb
|
||||||
|
@ -129,11 +129,7 @@ class Tasks::SwitchRoot < SingletonTask
|
|||||||
"KEY_ESC", # QEMU doesn't pass through CTRL and SHIFT as expected here...
|
"KEY_ESC", # QEMU doesn't pass through CTRL and SHIFT as expected here...
|
||||||
]
|
]
|
||||||
|
|
||||||
# Do *not* use System.run as it would fail the boot on return value != 0
|
Evdev.keys_held(keys)
|
||||||
system(LOADER, "/applets/key-held.mrb", *keys)
|
|
||||||
|
|
||||||
# It returns `0` on key being held.
|
|
||||||
$?.exitstatus == 0
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Checks if the user wants to select a generation.
|
# Checks if the user wants to select a generation.
|
||||||
|
26
boot/lib/evdev.rb
Normal file
26
boot/lib/evdev.rb
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
module Evdev
|
||||||
|
# TODO: Remove dependency on `evtest` and rather rely on direct evdev bindings.
|
||||||
|
def self.keys_held(keys)
|
||||||
|
# See:
|
||||||
|
# * https://github.com/torvalds/linux/blob/master/include/uapi/linux/input-event-codes.h
|
||||||
|
|
||||||
|
# `evdev` works on `/dev/input/event*` nodes.
|
||||||
|
# Check them *all*. We can't know which is a keyboard.
|
||||||
|
Dir.glob("/dev/input/event*").each do |ev|
|
||||||
|
# `evtest` only tests one key at a time with `--query`...
|
||||||
|
keys.each do |key|
|
||||||
|
system("evtest", "--query", ev, "EV_KEY", key)
|
||||||
|
# One of the keys desired is held
|
||||||
|
if $?.exitstatus == 10
|
||||||
|
puts "#{key} is being held"
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
# Failed for other reason
|
||||||
|
puts "Failed to run evtest, #{$?.exitstatus}" unless $?.exitstatus == 0
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in New Issue
Block a user