54 lines
1.2 KiB
Forth
54 lines
1.2 KiB
Forth
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
|