| 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 |