Centralization and threading of handling KeyEvents

main
Minizbot2012 4 years ago
parent b4ef412336
commit b29e7f53b7
No known key found for this signature in database
GPG Key ID: 977C8ADE12361917

@ -0,0 +1,8 @@
package keyevents
//KeyEvent represents a keyevent
type KeyEvent struct {
Type uint16
Value int32
Code int
}

@ -4,14 +4,34 @@ import (
"flag"
"os"
"github.com/bendahl/uinput"
"github.com/minizbot2012/orbmap/interface/keyevents"
"github.com/minizbot2012/orbmap/orbweaver"
)
func procKey(kb chan keyevents.KeyEvent) {
vkm, _ := uinput.CreateKeyboard("/dev/uinput", []byte("Orbmap"))
defer vkm.Close()
for {
KeyEv := <-kb
if KeyEv.Type == 1 {
if KeyEv.Value == 1 {
vkm.KeyDown(KeyEv.Code)
} else if KeyEv.Value == 2 {
} else {
vkm.KeyUp(KeyEv.Code)
}
}
}
}
func main() {
var orbs string
flag.StringVar(&orbs, "orbs", "xiv.orb", "Comma seperated string of orb files")
flag.Parse()
path, _ := os.Getwd()
Maps := orbweaver.ProcOrbFiles(orbs, path)
orbweaver.OrbLoop(Maps)
KeyBus := make(chan keyevents.KeyEvent, 128)
go procKey(KeyBus)
orbweaver.OrbLoop(Maps, KeyBus)
}

@ -8,12 +8,19 @@ import (
"fmt"
"os"
"strings"
"time"
"github.com/bendahl/uinput"
"github.com/minizbot2012/orbmap/box"
"github.com/minizbot2012/orbmap/interface/keyevents"
)
var eventcodes []byte
var ecm map[uint16]int
func init() {
eventcodes = box.Get("orbweaver.dev")
ecm = make(map[uint16]int)
}
//KeyMap singular keymap
type KeyMap struct {
Keymap [26]int
@ -52,11 +59,9 @@ func ProcOrbFiles(orbs string, wd string) *KeyMaps {
}
//OrbLoop Main loop for this device
func OrbLoop(km *KeyMaps) {
EventCodes := box.Get("orbweaver.dev")
ecm := make(map[uint16]int)
func OrbLoop(km *KeyMaps, KeyBus chan keyevents.KeyEvent) {
for i := 0; i < 26; i++ {
ecm[uint16(EventCodes[i])] = i
ecm[uint16(eventcodes[i])] = i
}
f, err := os.Open("/dev/input/by-id/usb-Razer_Razer_Orbweaver_Chroma-event-kbd")
if err != nil {
@ -64,30 +69,14 @@ func OrbLoop(km *KeyMaps) {
}
defer f.Close()
b := make([]byte, 24)
vkm, _ := uinput.CreateKeyboard("/dev/uinput", []byte("Orbmap"))
defer vkm.Close()
for {
f.Read(b)
sec := binary.LittleEndian.Uint64(b[0:8])
usec := binary.LittleEndian.Uint64(b[8:16])
t := time.Unix(int64(sec), int64(usec))
var _ = t
var value int32
typ := binary.LittleEndian.Uint16(b[16:18])
code := binary.LittleEndian.Uint16(b[18:20])
binary.Read(bytes.NewReader(b[20:]), binary.LittleEndian, &value)
/*fmt.Println(t)
fmt.Println(typ)
fmt.Println(code)
fmt.Println(value)*/
if typ == 1 {
if value == 1 {
vkm.KeyDown(km.Maps[km.Currentmap].Keymap[ecm[code]])
} else if value == 2 {
//pass
} else {
vkm.KeyUp(km.Maps[km.Currentmap].Keymap[ecm[code]])
}
KeyEv := keyevents.KeyEvent{}
KeyEv.Type = binary.LittleEndian.Uint16(b[16:18])
KeyEv.Code = km.Maps[km.Currentmap].Keymap[ecm[binary.LittleEndian.Uint16(b[18:20])]]
binary.Read(bytes.NewReader(b[20:]), binary.LittleEndian, &KeyEv.Value)
if KeyEv.Code != 0 {
KeyBus <- KeyEv
}
}
}

Loading…
Cancel
Save