Merge branch 'main' of github.com:OrbTools/OrbMap

main
Minizbot2012 3 years ago
commit 323642333f
No known key found for this signature in database
GPG Key ID: 977C8ADE12361917

@ -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
package orbweaver
package keypad
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 *keyevents.KeyEvent) {
eventcodes = morb.BINDING[:]
for i := 0; i < len(eventcodes); i++ {
ecm[uint16(eventcodes[i])] = i
}
func (p *Keypad) OrbLoop(KeyBus chan *keyevents.KeyEvent) {
println("UnixLoop starting")
f, err := evdev.Open("/dev/input/by-id/usb-Razer_Razer_Orbweaver_Chroma-event-kbd")
if err != nil {
panic(err)
}
f, _ := evdev.Open(p.definition.Device.SystemFile)
f.Grab()
var evsize = int(unsafe.Sizeof(keyevents.KeyEvent{}))
b := make([]byte, evsize)
for {
f.File.Read(b)
KeyEv := &keyevents.KeyEvent{}
KeyEv := new(keyevents.KeyEvent)
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 {
KeyBus <- KeyEv
}

@ -1,21 +1,18 @@
// +build windows
package orbweaver
package keypad
import (
"bytes"
"encoding/binary"
"fmt"
morb "github.com/OrbTools/OrbCommon/devices/orbweaver"
"github.com/OrbTools/OrbCommon/hid"
"github.com/OrbTools/OrbMap/keyevents"
"github.com/google/gousb"
)
const (
vendor = gousb.ID(0x1532)
prod = gousb.ID(0x0207)
leftControl byte = 0x1
leftShift byte = 0x2
leftAlt byte = 0x4
@ -101,14 +98,10 @@ func (s *swapInt) Differ(s2 *swapInt) []byte {
}
//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
}
func (p *Keypad) OrbLoop(KeyBus chan *keyevents.KeyEvent) {
fmt.Println("Windows Loop Init")
ctx := gousb.NewContext()
dev, err := ctx.OpenDeviceWithVIDPID(vendor, prod)
dev, err := ctx.OpenDeviceWithVIDPID(gousb.ID(p.definition.Device.VendorID), gousb.ID(p.definition.Device.ProdID))
if err != nil {
panic(err)
}
@ -145,10 +138,9 @@ func OrbLoop(km *morb.KeyMaps, KeyBus chan *keyevents.KeyEvent) {
dat := append(addin, tdat...)
for i := 0; i < len(dat); i++ {
if dat[i] != 0 {
dat[i] = byte(hid.GetLinuxFromHid(uint16(dat[i])))
dat[i] = byte(km.Maps[km.Currentmap].Keymap[ecm[uint16(dat[i])]])
dat[i] = byte(hid.GetHidFromLinux(uint16(dat[i])))
dat[i] = byte(hid.GetWindowsFromHid(uint16(dat[i])))
dat[i] = byte(hid.GetMappingFromHID(uint16(dat[i])).Evdev)
dat[i] = byte(p.keymaps.Maps[p.keymaps.Currentmap].Keymap[p.ecm[uint16(dat[i])]])
dat[i] = byte(hid.GetMappingFromLinux(uint16(dat[i])).Win)
}
}
err = binary.Read(bytes.NewReader(dat), binary.LittleEndian, swaper.S1)

@ -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(")"))
}

@ -3,7 +3,7 @@ module github.com/OrbTools/OrbMap
go 1.16
require (
github.com/OrbTools/OrbCommon v0.0.0-20210604213605-2c1ec68f6f91
github.com/OrbTools/OrbCommon v0.0.0-20210724194347-38cc36047c7d
github.com/bendahl/uinput v1.4.1
github.com/google/gousb v1.1.1
github.com/gvalkov/golang-evdev v0.0.0-20191114124502-287e62b94bcb

@ -1,5 +1,5 @@
github.com/OrbTools/OrbCommon v0.0.0-20210604213605-2c1ec68f6f91 h1:zsCP3Xou+cciiCjs/hTT5Ecr9WT1X0mIsfX4MR0nYW8=
github.com/OrbTools/OrbCommon v0.0.0-20210604213605-2c1ec68f6f91/go.mod h1:8HEhD7wF9Fqritt/jYxDmjbxEScWhFfVajdYdPO5Y14=
github.com/OrbTools/OrbCommon v0.0.0-20210724194347-38cc36047c7d h1:v3tlCft2Rbg3Fojm+bKWnkMjmABiMhGeL+wVAcSTp8Q=
github.com/OrbTools/OrbCommon v0.0.0-20210724194347-38cc36047c7d/go.mod h1:8HEhD7wF9Fqritt/jYxDmjbxEScWhFfVajdYdPO5Y14=
github.com/bendahl/uinput v1.4.1 h1:ecxSLcVxWk0EFyZBtmCTnOKjK/HCNdsUcWXRTkNt06k=
github.com/bendahl/uinput v1.4.1/go.mod h1:Np7w3DINc9wB83p12fTAM3DPPhFnAKP0WTXRqCQJ6Z8=
github.com/google/gousb v1.1.1 h1:2sjwXlc0PIBgDnXtNxUrHcD/RRFOmAtRq4QgnFBE6xc=

@ -3,17 +3,28 @@ package main
import (
"flag"
"strings"
"github.com/OrbTools/OrbMap/devices/orbweaver"
"github.com/OrbTools/OrbCommon/devices"
"github.com/OrbTools/OrbMap/emu"
"github.com/OrbTools/OrbMap/keyevents"
"github.com/OrbTools/OrbMap/registry"
)
//go:generate go run generators/backends.go
func main() {
orbs := flag.String("orbweaver", "", "Comma seperated string of orbs for the orbweaver")
str := make(map[string]*string)
for d, dev := range devices.DeviceTypes {
str[d] = flag.String(d, "", "Comma seperated list of orb files for "+d+" "+dev.Backend)
}
flag.Parse()
KeyBus := make(chan *keyevents.KeyEvent, 128)
Maps := orbweaver.ProcOrbFiles(*orbs)
go orbweaver.OrbLoop(Maps, KeyBus)
for sys, orbs := range str {
if len(*orbs) > 0 {
devh := registry.NewOf(devices.DeviceTypes[sys].Backend)
devh.ProcOrbs(devices.DeviceTypes[sys], strings.Split(*orbs, ","))
go devh.OrbLoop(KeyBus)
}
}
emu.ProcKey(KeyBus)
}

@ -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…
Cancel
Save