Adding windows experimental support, and cleaning

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

@ -22,6 +22,14 @@ func (e *embedBox) Get(file string) []byte {
return nil
}
func (e *embedBox) List() []string {
keys := make([]string, 0)
for k, _ := range e.storage {
keys = append(keys, k)
}
return keys
}
// Embed box expose
var box = newEmbedBox()
@ -35,6 +43,11 @@ func Get(file string) []byte {
return box.Get(file)
}
// Lists files in box
func List() []string {
return box.List()
}
// Code generated by go generate; DO NOT EDIT.
func init() {

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

@ -7,27 +7,22 @@ import (
var vkm uinput.Keyboard = nil
func init() {
//ProcKey keyboard emulator loop
func ProcKey(kb chan *keyevents.KeyEvent) {
var err error
vkm, err = uinput.CreateKeyboard("/dev/uinput", []byte("Orbmap"))
if err != nil {
panic(err)
}
}
//ProcKey keyboard emulator loop
func ProcKey(kb chan *keyevents.KeyEvent) {
for vkm == nil {
println("VKM not init")
}
defer vkm.Close()
for {
KeyEv := <-kb
if KeyEv.Type == 1 {
if KeyEv.Value == 1 {
vkm.KeyDown(KeyEv.Code)
vkm.KeyDown(int(KeyEv.Code))
} else if KeyEv.Value == 2 {
} else {
vkm.KeyUp(KeyEv.Code)
vkm.KeyUp(int(KeyEv.Code))
}
}
}

@ -0,0 +1,37 @@
package keypad
import (
"unsafe"
"github.com/lxn/win"
"github.com/minizbot2012/orbmap/interface/keyevents"
)
type keyboardInput struct {
wVk uint16
wScan uint16
dwFlags uint32
time uint32
dwExtraInfo uint64
}
type input struct {
inputType uint32
ki keyboardInput
padding uint64
}
//Windows support is so weird
func ProcKey(kb chan *keyevents.KeyEvent) {
for {
KeyEv := <-kb
var i win.KEYBD_INPUT
i.Type = 1
i.Ki.WScan = uint16(KeyEv.Code)
i.Ki.DwFlags = 0x8
if KeyEv.Type == 2 {
i.Ki.DwFlags |= 0x2
}
win.SendInput(1, unsafe.Pointer(&i), int32(unsafe.Sizeof(i)))
}
}

@ -4,21 +4,26 @@ package main
import (
"flag"
"os"
"strings"
"github.com/minizbot2012/orbmap/box"
"github.com/minizbot2012/orbmap/interface/keyevents"
"github.com/minizbot2012/orbmap/keypad"
"github.com/minizbot2012/orbmap/orbweaver"
)
func main() {
var orbs string
flag.StringVar(&orbs, "orbs", "xiv.orb", "Comma seperated string of orb files")
var orbs []*string
for _, v := range box.List() {
println(v)
orbs = append(orbs, flag.String(strings.Split(v, ".")[0], "", "Comma seperated string of orbs for the orbweaver"))
}
flag.Parse()
path, _ := os.Getwd()
Maps := orbweaver.ProcOrbFiles(orbs, path)
KeyBus := make(chan *keyevents.KeyEvent, 128)
for i := 0; i <= 4; i++ {
go keypad.ProcKey(KeyBus)
if *orbs[0] != "" {
Maps := orbweaver.ProcOrbFiles(*orbs[0], path)
go orbweaver.OrbLoop(Maps, KeyBus)
}
orbweaver.OrbLoop(Maps, KeyBus)
keypad.ProcKey(KeyBus)
}

@ -18,7 +18,7 @@ func init() {
//KeyMap singular keymap
type KeyMap struct {
Keymap [26]int
Keymap [26]uint16
Color [3]byte
}
@ -35,16 +35,13 @@ func ProcOrbFiles(orbs string, wd string) *KeyMaps {
idx := 0
if len(orbs) > 0 {
for _, orb := range strings.Split(orbs, ",") {
KMap := new(KeyMap)
KMap := &KeyMap{}
inf, _ := os.Open(wd + "/" + orb)
for i := 0; i < 26; i++ {
b := make([]byte, 2)
inf.Read(b)
KMap.Keymap[i] = int(binary.LittleEndian.Uint16(b))
err := binary.Read(inf, binary.LittleEndian, KMap)
if err != nil {
panic(err)
}
keymaps.Maps[idx] = KMap
idx++
inf.Close()
}
} else {
panic("No orbs")

@ -23,14 +23,9 @@ func OrbLoop(km *KeyMaps, KeyBus chan *keyevents.KeyEvent) {
b := make([]byte, 24)
for {
f.Read(b)
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)
KeyEv := &keyevents.KeyEvent{}
KeyEv.Type = typ
KeyEv.Code = km.Maps[km.Currentmap].Keymap[ecm[code]]
KeyEv.Value = value
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
}

@ -0,0 +1,42 @@
package orbweaver
import (
"fmt"
"os"
"os/signal"
"github.com/minizbot2012/orbmap/interface/keyevents"
"github.com/minizbot2012/winorb/sys/keyboard"
"github.com/minizbot2012/winorb/sys/types"
)
//OrbLoop Main loop for this device
func OrbLoop(km *KeyMaps, KeyBus chan *keyevents.KeyEvent) {
for i := 0; i < 26; i++ {
ecm[uint16(eventcodes[i])] = i
}
keyboardChan := make(chan types.KeyboardEvent, 16)
if err := keyboard.Install(nil, keyboardChan); err != nil {
panic(err)
}
defer keyboard.Uninstall()
signalChan := make(chan os.Signal, 1)
signal.Notify(signalChan, os.Interrupt)
fmt.Println("start capturing keyboard input")
for {
k := <-keyboardChan
fmt.Printf("Received %V %v\n", k.Message, k.ScanCode)
KeyEv := &keyevents.KeyEvent{}
if k.Flags == 0x2 {
KeyEv.Type = 2
} else {
KeyEv.Type = 1
}
KeyEv.Code = uint16(k.ScanCode)
KeyEv.Code = km.Maps[km.Currentmap].Keymap[ecm[KeyEv.Code]]
}
}
Loading…
Cancel
Save