Refactoring.
This commit is contained in:
parent
f773897509
commit
f6162d0f7b
3 changed files with 56 additions and 50 deletions
|
@ -4,7 +4,6 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"git.annabunches.net/annabunches/joyful/internal/config"
|
||||
"git.annabunches.net/annabunches/joyful/internal/logger"
|
||||
|
@ -13,11 +12,6 @@ import (
|
|||
"github.com/holoplot/go-evdev"
|
||||
)
|
||||
|
||||
const (
|
||||
TimerCheckIntervalMs = 250
|
||||
DeviceCheckIntervalMs = 1
|
||||
)
|
||||
|
||||
func readConfig() *config.ConfigParser {
|
||||
parser := &config.ConfigParser{}
|
||||
homeDir, err := os.UserHomeDir()
|
||||
|
@ -71,25 +65,7 @@ func main() {
|
|||
rules := config.BuildRules(pDevices, getVirtualDevices(vBuffers))
|
||||
logger.Logf("Created %d mapping rules.", len(rules))
|
||||
|
||||
// Listen for events and map them forever
|
||||
mapEvents(vBuffers, pDevices, rules)
|
||||
}
|
||||
|
||||
type ChannelEventType int
|
||||
|
||||
const (
|
||||
ChannelEventInput ChannelEventType = iota
|
||||
ChannelEventTimer
|
||||
)
|
||||
|
||||
type ChannelEvent struct {
|
||||
Type ChannelEventType
|
||||
Device *evdev.InputDevice
|
||||
Event *evdev.InputEvent
|
||||
}
|
||||
|
||||
func mapEvents(vBuffers map[string]*virtualdevice.EventBuffer, pDevices map[string]*evdev.InputDevice, rules []mappingrules.MappingRule) {
|
||||
// start listening for events on all devices
|
||||
// start listening for events on devices and timers
|
||||
eventChannel := make(chan ChannelEvent, 1000)
|
||||
for _, device := range pDevices {
|
||||
go eventWatcher(device, eventChannel)
|
||||
|
@ -139,28 +115,3 @@ func mapEvents(vBuffers map[string]*virtualdevice.EventBuffer, pDevices map[stri
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func eventWatcher(device *evdev.InputDevice, channel chan<- ChannelEvent) {
|
||||
for {
|
||||
event, err := device.ReadOne()
|
||||
if err != nil {
|
||||
logger.LogError(err, "Error while reading event. Disconnecting device.")
|
||||
return
|
||||
}
|
||||
channel <- ChannelEvent{Device: device, Event: event, Type: ChannelEventInput}
|
||||
|
||||
if event.Type == evdev.EV_SYN {
|
||||
time.Sleep(DeviceCheckIntervalMs * time.Millisecond)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func timerWatcher(rule *mappingrules.ProportionalAxisMappingRule, channel chan<- ChannelEvent) {
|
||||
for {
|
||||
event := rule.TimerEvent()
|
||||
if event != nil {
|
||||
channel <- ChannelEvent{Device: rule.Output.Device, Event: event, Type: ChannelEventTimer}
|
||||
}
|
||||
time.Sleep(TimerCheckIntervalMs * time.Millisecond)
|
||||
}
|
||||
}
|
||||
|
|
39
cmd/joyful/threads.go
Normal file
39
cmd/joyful/threads.go
Normal file
|
@ -0,0 +1,39 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"git.annabunches.net/annabunches/joyful/internal/logger"
|
||||
"git.annabunches.net/annabunches/joyful/internal/mappingrules"
|
||||
"github.com/holoplot/go-evdev"
|
||||
)
|
||||
|
||||
const (
|
||||
TimerCheckIntervalMs = 250
|
||||
DeviceCheckIntervalMs = 1
|
||||
)
|
||||
|
||||
func eventWatcher(device *evdev.InputDevice, channel chan<- ChannelEvent) {
|
||||
for {
|
||||
event, err := device.ReadOne()
|
||||
if err != nil {
|
||||
logger.LogError(err, "Error while reading event. Disconnecting device.")
|
||||
return
|
||||
}
|
||||
channel <- ChannelEvent{Device: device, Event: event, Type: ChannelEventInput}
|
||||
|
||||
if event.Type == evdev.EV_SYN {
|
||||
time.Sleep(DeviceCheckIntervalMs * time.Millisecond)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func timerWatcher(rule *mappingrules.ProportionalAxisMappingRule, channel chan<- ChannelEvent) {
|
||||
for {
|
||||
event := rule.TimerEvent()
|
||||
if event != nil {
|
||||
channel <- ChannelEvent{Device: rule.Output.Device, Event: event, Type: ChannelEventTimer}
|
||||
}
|
||||
time.Sleep(TimerCheckIntervalMs * time.Millisecond)
|
||||
}
|
||||
}
|
16
cmd/joyful/types.go
Normal file
16
cmd/joyful/types.go
Normal file
|
@ -0,0 +1,16 @@
|
|||
package main
|
||||
|
||||
import "github.com/holoplot/go-evdev"
|
||||
|
||||
type ChannelEventType int
|
||||
|
||||
const (
|
||||
ChannelEventInput ChannelEventType = iota
|
||||
ChannelEventTimer
|
||||
)
|
||||
|
||||
type ChannelEvent struct {
|
||||
Type ChannelEventType
|
||||
Device *evdev.InputDevice
|
||||
Event *evdev.InputEvent
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue