【问题标题】:Mapping device input event codes to new event codes将设备输入事件代码映射到新事件代码
【发布时间】:2022-11-25 04:04:33
【问题描述】:

我目前正在尝试修复一台旧街机,但在解释来自 usb 控制器的事件时遇到了问题。特别是,控制器正在发送事件代码 1:300 (EV_KEY:300),但不幸的是 300 不是有效的事件代码。因此,我无法让它与我正在使用的街机软件一起使用。

我想要做的是运行一个进程来拦截 1:300 事件并将它们转换为其他类型的事件。例如,每次按下操纵杆时,我可能希望它被解释为1:194EV_KEY:KEY_F24)。

知道怎么做吗?

来自evtest 的输出:

Event: time 1669313468.400824, type 4 (EV_MSC), code 4 (MSC_SCAN), value 9000d
Event: time 1669313468.400824, type 1 (EV_KEY), code 300 (?), value 0

我试过evsieve等各种输入映射软件,但都无济于事。

来自evsieve 的输出:

While parsing the arguments "--map key:300 key:up":
    While parsing the key "key:300":
        Invalid argument: unknown event code "300".

【问题讨论】:

    标签: linux ubuntu events io


    【解决方案1】:

    好吧,我想我至少找到了一个临时的解决方法:

    CONTROLLER1_LOCATION=/dev/input/by-id/usb-GGG_GPWiz49-event-joystick
    CONTROLLER1_EVENT_PORT=event6
    BTN=BTN_TRIGGER_HAPPY4
    
    sudo /bin/evtest $CONTROLLER1_LOCATION EV_KEY 300 
            | grep "300.*value" --line-buffered 
            | grep --line-buffered -o "[01]$" 
            | while read x ; do sudo evemu-event /dev/input/$CONTROLLER1_EVENT_PORT --type EV_KEY --code $BTN --value $x ; done
    
    

    基本上是这样的:

    1. 监控设备以匹配错误事件
    2. 获取对应于实际按钮按下的输出
    3. 并从控制器发送一个虚拟事件

      这肯定可以清理干净,但现在就可以了

    【讨论】:

      猜你喜欢
      • 2012-10-21
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-26
      • 2015-03-25
      • 2019-05-23
      相关资源
      最近更新 更多