mirror of https://github.com/OrbTools/OrbMap
Merge branch 'main' of github.com:OrbTools/OrbMap
commit
323642333f
@ -0,0 +1,42 @@
|
|||||||
|
package keypad
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"path/filepath"
|
||||||
|
|
||||||
|
"github.com/OrbTools/OrbCommon/devices"
|
||||||
|
"github.com/OrbTools/OrbMap/registry"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Keypad struct {
|
||||||
|
eventcodes []byte
|
||||||
|
ecm map[uint16]int
|
||||||
|
keymaps *devices.KeyMaps
|
||||||
|
definition *devices.DeviceDef
|
||||||
|
}
|
||||||
|
|
||||||
|
//ProbcOrbFiles processes orbs
|
||||||
|
func (p *Keypad) ProcOrbs(dev *devices.DeviceDef, orbs []string) {
|
||||||
|
p.definition = dev
|
||||||
|
p.keymaps = &devices.KeyMaps{Currentmap: 0}
|
||||||
|
if len(orbs) > 0 {
|
||||||
|
for _, orb := range orbs {
|
||||||
|
abs, _ := filepath.Abs(orb)
|
||||||
|
fmt.Println("Loading Orb " + abs)
|
||||||
|
KMap := devices.LoadKeymap(abs, dev)
|
||||||
|
p.keymaps.Maps = append(p.keymaps.Maps, KMap)
|
||||||
|
}
|
||||||
|
p.keymaps.MCount = len(orbs)
|
||||||
|
} else {
|
||||||
|
panic("No orbs")
|
||||||
|
}
|
||||||
|
p.ecm = make(map[uint16]int)
|
||||||
|
p.eventcodes = p.definition.Binding
|
||||||
|
for i := 0; i < len(p.eventcodes); i++ {
|
||||||
|
p.ecm[uint16(p.eventcodes[i])] = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
registry.Systems["keypad"] = registry.Device(&Keypad{})
|
||||||
|
}
|
@ -1,36 +1,27 @@
|
|||||||
// +build linux !windows
|
// +build linux !windows
|
||||||
|
package keypad
|
||||||
package orbweaver
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"unsafe"
|
"unsafe"
|
||||||
|
|
||||||
morb "github.com/OrbTools/OrbCommon/devices/orbweaver"
|
|
||||||
"github.com/OrbTools/OrbMap/keyevents"
|
"github.com/OrbTools/OrbMap/keyevents"
|
||||||
evdev "github.com/gvalkov/golang-evdev"
|
evdev "github.com/gvalkov/golang-evdev"
|
||||||
)
|
)
|
||||||
|
|
||||||
//OrbLoop Main loop for this device
|
//OrbLoop Main loop for this device
|
||||||
func OrbLoop(km *morb.KeyMaps, KeyBus chan *keyevents.KeyEvent) {
|
func (p *Keypad) OrbLoop(KeyBus chan *keyevents.KeyEvent) {
|
||||||
eventcodes = morb.BINDING[:]
|
|
||||||
for i := 0; i < len(eventcodes); i++ {
|
|
||||||
ecm[uint16(eventcodes[i])] = i
|
|
||||||
}
|
|
||||||
println("UnixLoop starting")
|
println("UnixLoop starting")
|
||||||
f, err := evdev.Open("/dev/input/by-id/usb-Razer_Razer_Orbweaver_Chroma-event-kbd")
|
f, _ := evdev.Open(p.definition.Device.SystemFile)
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
f.Grab()
|
f.Grab()
|
||||||
var evsize = int(unsafe.Sizeof(keyevents.KeyEvent{}))
|
var evsize = int(unsafe.Sizeof(keyevents.KeyEvent{}))
|
||||||
b := make([]byte, evsize)
|
b := make([]byte, evsize)
|
||||||
for {
|
for {
|
||||||
f.File.Read(b)
|
f.File.Read(b)
|
||||||
KeyEv := &keyevents.KeyEvent{}
|
KeyEv := new(keyevents.KeyEvent)
|
||||||
binary.Read(bytes.NewBuffer(b), binary.LittleEndian, KeyEv)
|
binary.Read(bytes.NewBuffer(b), binary.LittleEndian, KeyEv)
|
||||||
KeyEv.Code = km.Maps[km.Currentmap].Keymap[ecm[KeyEv.Code]]
|
KeyEv.Code = p.keymaps.Maps[p.keymaps.Currentmap].Keymap[p.ecm[KeyEv.Code]]
|
||||||
if KeyEv.Code != 0 && KeyEv.Type != 4 {
|
if KeyEv.Code != 0 && KeyEv.Type != 4 {
|
||||||
KeyBus <- KeyEv
|
KeyBus <- KeyEv
|
||||||
}
|
}
|
@ -0,0 +1,5 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
_ "github.com/OrbTools/OrbMap/backend/keypad"
|
||||||
|
)
|
@ -1,36 +0,0 @@
|
|||||||
package orbweaver
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
morb "github.com/OrbTools/OrbCommon/devices/orbweaver"
|
|
||||||
)
|
|
||||||
|
|
||||||
var eventcodes []byte
|
|
||||||
var ecm map[uint16]int
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
ecm = make(map[uint16]int)
|
|
||||||
}
|
|
||||||
|
|
||||||
//ProcOrbFiles processes orbs
|
|
||||||
func ProcOrbFiles(orbs string) *morb.KeyMaps {
|
|
||||||
keymaps := &morb.KeyMaps{Currentmap: 0}
|
|
||||||
if len(orbs) > 0 {
|
|
||||||
for idx, orb := range strings.Split(orbs, ";") {
|
|
||||||
abs, err := filepath.Abs(orb)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
fmt.Println("Loading Orb " + abs)
|
|
||||||
KMap := morb.LoadKM(abs)
|
|
||||||
keymaps.Maps[idx] = KMap
|
|
||||||
}
|
|
||||||
keymaps.MCount = len(orbs)
|
|
||||||
} else {
|
|
||||||
panic("No orbs")
|
|
||||||
}
|
|
||||||
return keymaps
|
|
||||||
}
|
|
@ -0,0 +1,19 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
out, _ := os.Create("boot.go")
|
||||||
|
out.Write([]byte("package main\n\nimport (\n"))
|
||||||
|
files, _ := ioutil.ReadDir("./backend/")
|
||||||
|
BasePkg := "github.com/OrbTools/OrbMap/backend/"
|
||||||
|
for _, fil := range files {
|
||||||
|
if fil.IsDir() {
|
||||||
|
out.Write([]byte("\t_ \"" + BasePkg + fil.Name() + "\"\n"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
out.Write([]byte(")"))
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package registry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
|
||||||
|
"github.com/OrbTools/OrbCommon/devices"
|
||||||
|
"github.com/OrbTools/OrbMap/keyevents"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
Systems map[string]Device
|
||||||
|
)
|
||||||
|
|
||||||
|
type Device interface {
|
||||||
|
OrbLoop(chan *keyevents.KeyEvent)
|
||||||
|
ProcOrbs(*devices.DeviceDef, []string)
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
Systems = make(map[string]Device)
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewOf(name string) Device {
|
||||||
|
nInter := reflect.New(reflect.ValueOf(Systems[name]).Type().Elem())
|
||||||
|
return nInter.Interface().(Device)
|
||||||
|
}
|
Loading…
Reference in New Issue