mirror of https://github.com/OrbTools/OrbMap
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
877 B
Go
37 lines
877 B
Go
// +build linux !windows
|
|
|
|
package orbweaver
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/binary"
|
|
"os"
|
|
|
|
morb "github.com/OrbTools/OrbCommon/devices/orbweaver"
|
|
"github.com/OrbTools/OrbMap/interface/keyevents"
|
|
)
|
|
|
|
//OrbLoop Main loop for this device
|
|
func OrbLoop(km *morb.KeyMaps, KeyBus chan keyevents.KeyEvent) {
|
|
eventcodes = morb.BINDING[:]
|
|
for i := 0; i < len(eventcodes); i++ {
|
|
ecm[uint16(eventcodes[i])] = i
|
|
}
|
|
println("UnixLoop starting")
|
|
f, err := os.Open("/dev/input/by-id/usb-Razer_Razer_Orbweaver_Chroma-event-kbd")
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
defer f.Close()
|
|
b := make([]byte, 24)
|
|
for {
|
|
f.Read(b)
|
|
KeyEv := keyevents.KeyEvent{}
|
|
binary.Read(bytes.NewReader(b[16:]), binary.LittleEndian, &KeyEv)
|
|
KeyEv.Code = km.Maps[km.Currentmap].Keymap[ecm[KeyEv.Code]]
|
|
if KeyEv.Code != 0 && KeyEv.Type != 4 {
|
|
KeyBus <- KeyEv
|
|
}
|
|
}
|
|
}
|