diff --git a/devices/orbweaver/orbweaver_linux.go b/devices/orbweaver/orbweaver_linux.go index a836d71..93db81d 100644 --- a/devices/orbweaver/orbweaver_linux.go +++ b/devices/orbweaver/orbweaver_linux.go @@ -5,13 +5,15 @@ package orbweaver import ( "bytes" "encoding/binary" + "unsafe" morb "github.com/OrbTools/OrbCommon/devices/orbweaver" + "github.com/OrbTools/OrbMap/keyevents" evdev "github.com/gvalkov/golang-evdev" ) //OrbLoop Main loop for this device -func OrbLoop(km *morb.KeyMaps, KeyBus chan *evdev.InputEvent) { +func OrbLoop(km *morb.KeyMaps, KeyBus chan *keyevents.KeyEvent) { eventcodes = morb.BINDING[:] for i := 0; i < len(eventcodes); i++ { ecm[uint16(eventcodes[i])] = i @@ -22,10 +24,12 @@ func OrbLoop(km *morb.KeyMaps, KeyBus chan *evdev.InputEvent) { panic(err) } f.Grab() - b := make([]byte, 24) + var evsize = int(unsafe.Sizeof(keyevents.KeyEvent{})) + b := make([]byte, evsize) for { - KeyEv, _ := f.ReadOne() - binary.Read(bytes.NewReader(b[16:]), binary.LittleEndian, &KeyEv) + f.File.Read(b) + KeyEv := &keyevents.KeyEvent{} + binary.Read(bytes.NewBuffer(b), binary.LittleEndian, KeyEv) KeyEv.Code = km.Maps[km.Currentmap].Keymap[ecm[KeyEv.Code]] if KeyEv.Code != 0 && KeyEv.Type != 4 { KeyBus <- KeyEv diff --git a/devices/orbweaver/orbweaver_windows.go b/devices/orbweaver/orbweaver_windows.go index 8830d61..af44097 100644 --- a/devices/orbweaver/orbweaver_windows.go +++ b/devices/orbweaver/orbweaver_windows.go @@ -9,8 +9,8 @@ import ( morb "github.com/OrbTools/OrbCommon/devices/orbweaver" "github.com/OrbTools/OrbCommon/hid" + "github.com/OrbTools/OrbMap/keyevents" "github.com/google/gousb" - evdev "github.com/gvalkov/golang-evdev" ) const ( @@ -101,7 +101,7 @@ func (s *swapInt) Differ(s2 *swapInt) []byte { } //OrbLoop Main loop for this device -func OrbLoop(km *morb.KeyMaps, KeyBus chan *evdev.InputEvent) { +func OrbLoop(km *morb.KeyMaps, KeyBus chan *keyevents.KeyEvent) { eventcodes = morb.BINDING[:] for i := 0; i < len(eventcodes); i++ { ecm[uint16(eventcodes[i])] = i @@ -163,7 +163,7 @@ func OrbLoop(km *morb.KeyMaps, KeyBus chan *evdev.InputEvent) { } for _, pre := range swaper.S1.Differ(swaper.S2) { if pre != 0 { - KeyEv := &evdev.InputEvent{} + KeyEv := &keyevents.KeyEvent{} KeyEv.Code = uint16(pre) KeyEv.Type = 1 KeyBus <- KeyEv @@ -171,7 +171,7 @@ func OrbLoop(km *morb.KeyMaps, KeyBus chan *evdev.InputEvent) { } for _, rel := range swaper.S2.Differ(swaper.S1) { if rel != 0 { - KeyEv := &evdev.InputEvent{} + KeyEv := &keyevents.KeyEvent{} KeyEv.Code = uint16(rel) KeyEv.Type = 2 KeyBus <- KeyEv diff --git a/emu/emu_linux.go b/emu/emu_linux.go index 48d0e1a..e79f1b4 100644 --- a/emu/emu_linux.go +++ b/emu/emu_linux.go @@ -3,14 +3,14 @@ package emu import ( + "github.com/OrbTools/OrbMap/keyevents" "github.com/bendahl/uinput" - evdev "github.com/gvalkov/golang-evdev" ) var vkm uinput.Keyboard = nil //ProcKey keyboard emulator loop -func ProcKey(kb chan *evdev.InputEvent) { +func ProcKey(kb chan *keyevents.KeyEvent) { println("Emu Unix Starting") var err error vkm, err = uinput.CreateKeyboard("/dev/uinput", []byte("Orbmap")) @@ -20,7 +20,7 @@ func ProcKey(kb chan *evdev.InputEvent) { defer vkm.Close() for { KeyEv := <-kb - if KeyEv.Code == 1 { + if KeyEv.Type == 1 { if KeyEv.Value == 1 { vkm.KeyDown(int(KeyEv.Code)) } else if KeyEv.Value == 2 { diff --git a/emu/emu_windows.go b/emu/emu_windows.go index 44c41a6..00911be 100644 --- a/emu/emu_windows.go +++ b/emu/emu_windows.go @@ -5,7 +5,7 @@ package emu import ( "unsafe" - evdev "github.com/gvalkov/golang-evdev" + "github.com/OrbTools/OrbMap/keyevents" "github.com/lxn/win" ) @@ -39,7 +39,7 @@ func upKey(key uint16) { } //ProcKey Windows support is so weird -func ProcKey(kb chan *evdev.InputEvent) { +func ProcKey(kb chan *keyevents.KeyEvent) { println("Emu Windows Starting") for { KeyEv := <-kb diff --git a/keyevents/events.go b/keyevents/events.go new file mode 100644 index 0000000..ae81676 --- /dev/null +++ b/keyevents/events.go @@ -0,0 +1,11 @@ +package keyevents + +import "syscall" + +//KeyEvent represents a keyevent +type KeyEvent struct { + Time syscall.Timeval + Type uint16 + Code uint16 + Value int32 +} diff --git a/main.go b/main.go index 22a7170..799a358 100644 --- a/main.go +++ b/main.go @@ -6,13 +6,13 @@ import ( "github.com/OrbTools/OrbMap/devices/orbweaver" "github.com/OrbTools/OrbMap/emu" - evdev "github.com/gvalkov/golang-evdev" + "github.com/OrbTools/OrbMap/keyevents" ) func main() { orbs := flag.String("orbweaver", "", "Comma seperated string of orbs for the orbweaver") flag.Parse() - KeyBus := make(chan *evdev.InputEvent, 128) + KeyBus := make(chan *keyevents.KeyEvent, 128) Maps := orbweaver.ProcOrbFiles(*orbs) go orbweaver.OrbLoop(Maps, KeyBus) emu.ProcKey(KeyBus)