Initial commit
This commit is contained in:
commit
53c827be13
|
@ -0,0 +1 @@
|
|||
/kvmkey
|
|
@ -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
|
|
@ -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=
|
|
@ -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")
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue