Add qemu 2.4.0
[kvmfornfv.git] / qemu / roms / SLOF / slof / fs / usb / dev-keyb.fs
1 new-device
2
3 VALUE sudev
4 false VALUE usb-keyb-debug?
5
6 s" slofdev.fs" included
7 sudev slof-dev>port l@ dup set-unit encode-phys " reg" property
8 sudev slof-dev>udev @ VALUE udev
9
10 s" usb-keyboard" device-name
11 s" keyboard" device-type
12 s" EN" encode-string s" language" property
13 s" keyboard" get-node node>path set-alias
14
15 s" dev-parent-calls.fs" included
16
17 0 VALUE open-count
18
19 : open   ( -- true | false )
20     usb-keyb-debug? IF ." USB-KEYB: Opening (count is " open-count . ." )" cr THEN
21     open-count 0= IF
22         udev USB-HID-INIT 0= IF
23             ." USB keyboard setup failed " pwd cr false EXIT
24         THEN
25     THEN
26     open-count 1 + to open-count
27     true
28 ;
29
30 : close
31     usb-keyb-debug? IF ." USB-KEYB: Closing (count is " open-count . ." )" cr THEN
32     open-count 0> IF
33         open-count 1 - dup to open-count
34         0= IF
35             my-phandle set-node
36             udev USB-HID-EXIT drop
37             0 set-node
38         THEN
39     THEN
40 ;
41
42 \ method to check if a key is present in output buffer
43 \ used by 'term-io.fs'
44 : key-available? ( -- true|false )
45     udev USB-KEY-AVAILABLE IF TRUE ELSE FALSE THEN
46 ;
47
48 : read                     ( addr len -- actual )
49     0= IF drop 0 EXIT THEN
50     udev USB-READ-KEYB ?dup IF swap c! 1 ELSE 0 swap c! 0 then
51 ;
52
53 ."     USB Keyboard " cr
54 finish-device