* Move all virtual device initialization to virtualbuffer package. * Factor out common eventcode helper logic into a new package.
57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
package configparser
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"git.annabunches.net/annabunches/joyful/internal/logger"
|
|
"github.com/holoplot/go-evdev"
|
|
)
|
|
|
|
// InitPhysicalDevices will create InputDevices corresponding to any registered
|
|
// devices with type = physical.
|
|
//
|
|
// This function assumes Parse() has been called.
|
|
//
|
|
// This function should only be called once.
|
|
func (parser *ConfigParser) InitPhysicalDevices() map[string]*evdev.InputDevice {
|
|
deviceMap := make(map[string]*evdev.InputDevice)
|
|
|
|
for _, deviceConfig := range parser.config.Devices {
|
|
if strings.ToLower(deviceConfig.Type) != DeviceTypePhysical {
|
|
continue
|
|
}
|
|
|
|
deviceConfig := deviceConfig.Config.(DeviceConfigPhysical)
|
|
|
|
var infoName string
|
|
var device *evdev.InputDevice
|
|
var err error
|
|
|
|
if deviceConfig.DevicePath != "" {
|
|
infoName = deviceConfig.DevicePath
|
|
device, err = evdev.Open(deviceConfig.DevicePath)
|
|
} else {
|
|
infoName = deviceConfig.DeviceName
|
|
device, err = evdev.OpenByName(deviceConfig.DeviceName)
|
|
}
|
|
|
|
if err != nil {
|
|
logger.LogError(err, "Failed to open physical device, skipping. Confirm the device name or path with 'evinfo'")
|
|
continue
|
|
}
|
|
|
|
if deviceConfig.Lock {
|
|
logger.LogDebugf("Locking device '%s'", infoName)
|
|
err := device.Grab()
|
|
if err != nil {
|
|
logger.LogError(err, "Failed to grab device for exclusive access")
|
|
}
|
|
}
|
|
|
|
logger.Log(fmt.Sprintf("Connected to '%s' as '%s'", infoName, deviceConfig.Name))
|
|
deviceMap[deviceConfig.Name] = device
|
|
}
|
|
|
|
return deviceMap
|
|
}
|