Implement by-device output map for timers.

This commit is contained in:
Anna Rose Wiggins 2025-07-04 23:44:28 -04:00
parent 3b75fd30e4
commit 80bfdfde90

View file

@ -21,17 +21,19 @@ func readConfig() *config.ConfigParser {
return parser return parser
} }
func initVirtualBuffers(config *config.ConfigParser) map[string]*virtualdevice.EventBuffer { func initVirtualBuffers(config *config.ConfigParser) (map[string]*virtualdevice.EventBuffer, map[*evdev.InputDevice]*virtualdevice.EventBuffer) {
vDevices := config.CreateVirtualDevices() vDevices := config.CreateVirtualDevices()
if len(vDevices) == 0 { if len(vDevices) == 0 {
logger.Log("Warning: no virtual devices found in configuration. No rules will work.") logger.Log("Warning: no virtual devices found in configuration. No rules will work.")
} }
vBuffers := make(map[string]*virtualdevice.EventBuffer) vBuffersByName := make(map[string]*virtualdevice.EventBuffer)
vBuffersByDevice := make(map[*evdev.InputDevice]*virtualdevice.EventBuffer)
for name, device := range vDevices { for name, device := range vDevices {
vBuffers[name] = virtualdevice.NewEventBuffer(device) vBuffersByName[name] = virtualdevice.NewEventBuffer(device)
vBuffersByDevice[device] = vBuffersByName[name]
} }
return vBuffers return vBuffersByName, vBuffersByDevice
} }
// Extracts the evdev devices from a list of virtual buffers and returns them. // Extracts the evdev devices from a list of virtual buffers and returns them.
@ -56,13 +58,13 @@ func main() {
config := readConfig() config := readConfig()
// Initialize virtual devices with event buffers // Initialize virtual devices with event buffers
vBuffers := initVirtualBuffers(config) vBuffersByName, vBuffersByDevice := initVirtualBuffers(config)
// Initialize physical devices // Initialize physical devices
pDevices := initPhysicalDevices(config) pDevices := initPhysicalDevices(config)
// Initialize rules // Initialize rules
rules := config.BuildRules(pDevices, getVirtualDevices(vBuffers)) rules := config.BuildRules(pDevices, getVirtualDevices(vBuffersByName))
logger.Logf("Created %d mapping rules.", len(rules)) logger.Logf("Created %d mapping rules.", len(rules))
// start listening for events on devices and timers // start listening for events on devices and timers
@ -93,7 +95,7 @@ func main() {
switch channelEvent.Event.Type { switch channelEvent.Event.Type {
case evdev.EV_SYN: case evdev.EV_SYN:
// We've received a SYN_REPORT, so now we send all of our pending events // We've received a SYN_REPORT, so now we send all of our pending events
for _, buffer := range vBuffers { for _, buffer := range vBuffersByName {
buffer.SendEvents() buffer.SendEvents()
} }
@ -104,14 +106,13 @@ func main() {
if outputEvent == nil { if outputEvent == nil {
continue continue
} }
vBuffers[rule.OutputName()].AddEvent(outputEvent) vBuffersByName[rule.OutputName()].AddEvent(outputEvent)
} }
} }
case ChannelEventTimer: case ChannelEventTimer:
// Timer events give us the device and event to use directly // Timer events give us the device and event to use directly
// TODO: we need a vbuffer map with device keys vBuffersByDevice[channelEvent.Device].AddEvent(channelEvent.Event)
// vBuffers[wrapper.Device].AddEvent(wrapper.Event)
} }
} }
} }