Initial commit

This commit is contained in:
Joel Elkins 2022-11-13 13:52:38 -06:00
commit 53c827be13
Signed by: joel
GPG Key ID: 133589DC38921AE2
4 changed files with 95 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/kvmkey

5
go.mod Normal file
View File

@ -0,0 +1,5 @@
module gitea.elkins.co/joel/kvmkey
go 1.19
require github.com/gvalkov/golang-evdev v0.0.0-20220815104727-7e27d6ce89b6 // indirect

2
go.sum Normal file
View File

@ -0,0 +1,2 @@
github.com/gvalkov/golang-evdev v0.0.0-20220815104727-7e27d6ce89b6 h1:K9b8efT9f1NkITNgNAm2A1LuoamhG4pAhXVjz5Sfa5Q=
github.com/gvalkov/golang-evdev v0.0.0-20220815104727-7e27d6ce89b6/go.mod h1:SAzVFKCRezozJTGavF3GX8MBUruETCqzivVLYiywouA=

87
main.go Normal file
View File

@ -0,0 +1,87 @@
package main
import (
"io"
"log"
"net/http"
"time"
evdev "github.com/gvalkov/golang-evdev"
)
const devname = "Drop The Key"
const (
B_1 uint16 = 59 + iota
B_2
B_3
B_4
B_5
)
var keyUrl = map[uint16]string{
B_1: "http://atreides:5051/fromcur",
B_2: "http://atreides:5051/fromcurto/hoke",
B_3: "http://atreides:5051/fromcurto/rake",
B_4: "http://atreides:5051/to/hoke",
B_5: "http://atreides:5051/to/rake",
}
func getAndGrab() (keydev *evdev.InputDevice) {
devices, _ := evdev.ListInputDevices("/dev/input/event*")
for _, dev := range devices {
if dev.Name == devname {
keydev = dev
}
}
if keydev == nil {
return
}
err := keydev.Grab()
if err != nil {
return nil
}
log.Println("grabbed the device")
return
}
func handle_event(ev *evdev.InputEvent) {
if ev.Type != evdev.EV_KEY || ev.Value != 0 {
return
}
if ev.Code < B_1 || ev.Code > B_5 {
log.Print("unknown key", ev.Code)
return
}
resp, err := http.Get(keyUrl[ev.Code])
if err != nil {
log.Printf("error processing key %d (url %s): %s", ev.Code, keyUrl[ev.Code], err)
return
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
log.Print("output:\n", string(body))
}
func monitorForever(dev *evdev.InputDevice) {
for {
events, err := dev.Read()
if err != nil {
return
}
for i := range events {
go handle_event(&events[i])
}
}
}
func main() {
for {
keydev := getAndGrab()
if keydev == nil {
time.Sleep(5 * time.Second)
} else {
monitorForever(keydev)
log.Println("lost the device")
}
}
}