keyboard push mvp
parent
b65d2134f5
commit
4c233cf794
2
go.mod
2
go.mod
|
|
@ -1,3 +1,5 @@
|
||||||
module mayhem-party
|
module mayhem-party
|
||||||
|
|
||||||
go 1.19
|
go 1.19
|
||||||
|
|
||||||
|
require github.com/micmonay/keybd_event v1.1.1 // indirect
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
github.com/micmonay/keybd_event v1.1.1 h1:rv7omwXWYL9Lgf3PUq6uBgJI2k1yGkL/GD6dxc6nmSs=
|
||||||
|
github.com/micmonay/keybd_event v1.1.1/go.mod h1:CGMWMDNgsfPljzrAWoybUOSKafQPZpv+rLigt2LzNGI=
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
package output
|
||||||
|
|
||||||
|
type Device interface{}
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
package output
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/micmonay/keybd_event"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Keyboard struct {
|
||||||
|
created time.Time
|
||||||
|
kb *keybd_event.KeyBonding
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewKeyboard() Keyboard {
|
||||||
|
kb, err := keybd_event.NewKeyBonding()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return Keyboard{
|
||||||
|
kb: &kb,
|
||||||
|
created: time.Now(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kb Keyboard) wait() {
|
||||||
|
if delta := time.Since(kb.created.Add(time.Second * 2)); delta < 0 {
|
||||||
|
time.Sleep(-1 * delta)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kb Keyboard) Press(keys ...int) {
|
||||||
|
kb.wait()
|
||||||
|
|
||||||
|
kb.Release()
|
||||||
|
kb.kb.SetKeys(keys...)
|
||||||
|
if err := kb.kb.Press(); err != nil {
|
||||||
|
log.Println("failed to press keys:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (kb Keyboard) Release() {
|
||||||
|
kb.wait()
|
||||||
|
|
||||||
|
if err := kb.kb.Release(); err != nil {
|
||||||
|
log.Println("failed to release keys:", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
//go:build integration
|
||||||
|
|
||||||
|
package output_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"mayhem-party/src/device/output"
|
||||||
|
"testing"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestKeyboardIntegration(t *testing.T) {
|
||||||
|
kb := output.NewKeyboard()
|
||||||
|
defer kb.Release()
|
||||||
|
|
||||||
|
t.Log("pressing 'a' for 5 seconds")
|
||||||
|
kb.Press(output.A)
|
||||||
|
for i := 0; i < 5; i++ {
|
||||||
|
t.Logf("\t%d...", 5-i)
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
}
|
||||||
|
t.Logf("releasing")
|
||||||
|
kb.Release()
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
package output
|
||||||
|
|
||||||
|
import "github.com/micmonay/keybd_event"
|
||||||
|
|
||||||
|
const (
|
||||||
|
A = keybd_event.VK_A
|
||||||
|
B = keybd_event.VK_B
|
||||||
|
C = keybd_event.VK_C
|
||||||
|
D = keybd_event.VK_D
|
||||||
|
E = keybd_event.VK_E
|
||||||
|
F = keybd_event.VK_F
|
||||||
|
G = keybd_event.VK_G
|
||||||
|
H = keybd_event.VK_H
|
||||||
|
I = keybd_event.VK_I
|
||||||
|
J = keybd_event.VK_J
|
||||||
|
K = keybd_event.VK_K
|
||||||
|
L = keybd_event.VK_L
|
||||||
|
M = keybd_event.VK_M
|
||||||
|
N = keybd_event.VK_N
|
||||||
|
O = keybd_event.VK_O
|
||||||
|
P = keybd_event.VK_P
|
||||||
|
Q = keybd_event.VK_Q
|
||||||
|
R = keybd_event.VK_R
|
||||||
|
S = keybd_event.VK_S
|
||||||
|
T = keybd_event.VK_T
|
||||||
|
U = keybd_event.VK_U
|
||||||
|
V = keybd_event.VK_V
|
||||||
|
W = keybd_event.VK_W
|
||||||
|
X = keybd_event.VK_X
|
||||||
|
Y = keybd_event.VK_Y
|
||||||
|
Z = keybd_event.VK_Z
|
||||||
|
)
|
||||||
Loading…
Reference in New Issue