Add support for multiple keycode formats. #3
2 changed files with 126 additions and 2 deletions
|
@ -65,6 +65,10 @@ func makeRuleTargetAxis(targetConfig RuleTargetConfig, devs map[string]*evdev.In
|
||||||
return nil, fmt.Errorf("non-existent device '%s'", targetConfig.Device)
|
return nil, fmt.Errorf("non-existent device '%s'", targetConfig.Device)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if targetConfig.DeadzoneEnd < targetConfig.DeadzoneStart {
|
||||||
|
return nil, errors.New("deadzone_end must be greater than deadzone_start")
|
||||||
|
}
|
||||||
|
|
||||||
var eventCode evdev.EvCode
|
var eventCode evdev.EvCode
|
||||||
axisConfig := strings.ToUpper(targetConfig.Axis)
|
axisConfig := strings.ToUpper(targetConfig.Axis)
|
||||||
switch {
|
switch {
|
||||||
|
@ -121,7 +125,7 @@ func makeRuleTargetRelaxis(targetConfig RuleTargetConfig, devs map[string]*evdev
|
||||||
eventCode = evdev.EvCode(codeInt)
|
eventCode = evdev.EvCode(codeInt)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
eventCode, ok = evdev.ABSFromString["REL_"+axisConfig]
|
eventCode, ok = evdev.RELFromString["REL_"+axisConfig]
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, fmt.Errorf("invalid axis code '%s'", axisConfig)
|
return nil, fmt.Errorf("invalid axis code '%s'", axisConfig)
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,127 @@ func (t *MakeRuleTargetsTests) SetupSuite() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *MakeRuleTargetsTests) TestMakeRuleTargetButton() {
|
func (t *MakeRuleTargetsTests) TestMakeRuleTargetButton() {
|
||||||
// STUB
|
config := RuleTargetConfig{
|
||||||
|
Device: "test",
|
||||||
|
}
|
||||||
|
t.Run("Standard keycode", func() {
|
||||||
|
config.Button = "BTN_TRIGGER"
|
||||||
|
rule, err := makeRuleTargetButton(config, t.devs)
|
||||||
|
t.Nil(err)
|
||||||
|
t.EqualValues(evdev.BTN_TRIGGER, rule.Button)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Hex code", func() {
|
||||||
|
config.Button = "0x2fd"
|
||||||
|
rule, err := makeRuleTargetButton(config, t.devs)
|
||||||
|
t.Nil(err)
|
||||||
|
t.EqualValues(evdev.EvCode(0x2fd), rule.Button)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Index", func() {
|
||||||
|
config.Button = "3"
|
||||||
|
rule, err := makeRuleTargetButton(config, t.devs)
|
||||||
|
t.Nil(err)
|
||||||
|
t.EqualValues(evdev.BTN_TOP, rule.Button)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Index too high", func() {
|
||||||
|
config.Button = "74"
|
||||||
|
_, err := makeRuleTargetButton(config, t.devs)
|
||||||
|
t.NotNil(err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Un-prefixed keycode", func() {
|
||||||
|
config.Button = "pinkie"
|
||||||
|
rule, err := makeRuleTargetButton(config, t.devs)
|
||||||
|
t.Nil(err)
|
||||||
|
t.EqualValues(evdev.BTN_PINKIE, rule.Button)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Invalid keycode", func() {
|
||||||
|
config.Button = "foo"
|
||||||
|
_, err := makeRuleTargetButton(config, t.devs)
|
||||||
|
t.NotNil(err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *MakeRuleTargetsTests) TestMakeRuleTargetAxis() {
|
||||||
|
config := RuleTargetConfig{
|
||||||
|
Device: "test",
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run("Standard keycode", func() {
|
||||||
|
config.Axis = "ABS_X"
|
||||||
|
rule, err := makeRuleTargetAxis(config, t.devs)
|
||||||
|
t.Nil(err)
|
||||||
|
t.EqualValues(evdev.ABS_X, rule.Axis)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Hex keycode", func() {
|
||||||
|
config.Axis = "0x01"
|
||||||
|
rule, err := makeRuleTargetAxis(config, t.devs)
|
||||||
|
t.Nil(err)
|
||||||
|
t.EqualValues(evdev.ABS_Y, rule.Axis)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Un-prefixed keycode", func() {
|
||||||
|
config.Axis = "x"
|
||||||
|
rule, err := makeRuleTargetAxis(config, t.devs)
|
||||||
|
t.Nil(err)
|
||||||
|
t.EqualValues(evdev.ABS_X, rule.Axis)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Invalid keycode", func() {
|
||||||
|
config.Axis = "foo"
|
||||||
|
_, err := makeRuleTargetAxis(config, t.devs)
|
||||||
|
t.NotNil(err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Invalid deadzone", func() {
|
||||||
|
config.DeadzoneEnd = 100
|
||||||
|
config.DeadzoneStart = 1000
|
||||||
|
_, err := makeRuleTargetAxis(config, t.devs)
|
||||||
|
t.NotNil(err)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *MakeRuleTargetsTests) TestMakeRuleTargetRelaxis() {
|
||||||
|
config := RuleTargetConfig{
|
||||||
|
Device: "test",
|
||||||
|
}
|
||||||
|
|
||||||
|
t.Run("Standard keycode", func() {
|
||||||
|
config.Axis = "REL_WHEEL"
|
||||||
|
rule, err := makeRuleTargetRelaxis(config, t.devs)
|
||||||
|
t.Nil(err)
|
||||||
|
t.EqualValues(evdev.REL_WHEEL, rule.Axis)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Hex keycode", func() {
|
||||||
|
config.Axis = "0x00"
|
||||||
|
rule, err := makeRuleTargetRelaxis(config, t.devs)
|
||||||
|
t.Nil(err)
|
||||||
|
t.EqualValues(evdev.REL_X, rule.Axis)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Un-prefixed keycode", func() {
|
||||||
|
config.Axis = "wheel"
|
||||||
|
rule, err := makeRuleTargetRelaxis(config, t.devs)
|
||||||
|
t.Nil(err)
|
||||||
|
t.EqualValues(evdev.REL_WHEEL, rule.Axis)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Invalid keycode", func() {
|
||||||
|
config.Axis = "foo"
|
||||||
|
_, err := makeRuleTargetRelaxis(config, t.devs)
|
||||||
|
t.NotNil(err)
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("Incorrect axis type", func() {
|
||||||
|
config.Axis = "ABS_X"
|
||||||
|
_, err := makeRuleTargetRelaxis(config, t.devs)
|
||||||
|
t.NotNil(err)
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRunnerMakeRuleTargets(t *testing.T) {
|
func TestRunnerMakeRuleTargets(t *testing.T) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue