summaryrefslogtreecommitdiffstats
path: root/qemu/roms/SLOF/slof/fs/usb/dev-keyb.fs
diff options
context:
space:
mode:
Diffstat (limited to 'qemu/roms/SLOF/slof/fs/usb/dev-keyb.fs')
-rw-r--r--qemu/roms/SLOF/slof/fs/usb/dev-keyb.fs54
1 files changed, 54 insertions, 0 deletions
diff --git a/qemu/roms/SLOF/slof/fs/usb/dev-keyb.fs b/qemu/roms/SLOF/slof/fs/usb/dev-keyb.fs
new file mode 100644
index 000000000..db9e23ef1
--- /dev/null
+++ b/qemu/roms/SLOF/slof/fs/usb/dev-keyb.fs
@@ -0,0 +1,54 @@
+new-device
+
+VALUE sudev
+false VALUE usb-keyb-debug?
+
+s" slofdev.fs" included
+sudev slof-dev>port l@ dup set-unit encode-phys " reg" property
+sudev slof-dev>udev @ VALUE udev
+
+s" usb-keyboard" device-name
+s" keyboard" device-type
+s" EN" encode-string s" language" property
+s" keyboard" get-node node>path set-alias
+
+s" dev-parent-calls.fs" included
+
+0 VALUE open-count
+
+: open ( -- true | false )
+ usb-keyb-debug? IF ." USB-KEYB: Opening (count is " open-count . ." )" cr THEN
+ open-count 0= IF
+ udev USB-HID-INIT 0= IF
+ ." USB keyboard setup failed " pwd cr false EXIT
+ THEN
+ THEN
+ open-count 1 + to open-count
+ true
+;
+
+: close
+ usb-keyb-debug? IF ." USB-KEYB: Closing (count is " open-count . ." )" cr THEN
+ open-count 0> IF
+ open-count 1 - dup to open-count
+ 0= IF
+ my-phandle set-node
+ udev USB-HID-EXIT drop
+ 0 set-node
+ THEN
+ THEN
+;
+
+\ method to check if a key is present in output buffer
+\ used by 'term-io.fs'
+: key-available? ( -- true|false )
+ udev USB-KEY-AVAILABLE IF TRUE ELSE FALSE THEN
+;
+
+: read ( addr len -- actual )
+ 0= IF drop 0 EXIT THEN
+ udev USB-READ-KEYB ?dup IF swap c! 1 ELSE 0 swap c! 0 then
+;
+
+." USB Keyboard " cr
+finish-device