小编rob*_*nes的帖子

如何直接在Linux系统中处理来自角色设备/游戏手柄的输入?

我正在开发一个C语言程序,它使用USB SNES控制器输入基于RPM的分发.是否存在任何人都知道的库使得这更容易与之交互,或者某些工具(joydev?)允许从设备中正确读取输入?我不需要整个游戏引擎; 它仅用于来自角色设备的输入.

如果有一个库已经为我做了这个,那将是非常好的(我可以看看库自己做了什么),这可以通过一个链接关闭; 否则,如果我必须自己这样做,我有几个具体的问题:

问题:

  • 是否有一个已经存在的C库可以为我处理所有USB设备与游戏手柄的交互?我很乐意学习一个新的图书馆.(我的google-fu在这里失败了,如果这个过于明显,我道歉)
  • 确保每次打开正确的字符设备的适当方法是什么,因为事件*名称在会话/初始化之间发生变化?
  • 从我的应用程序处理来自这些设备的输入的适当方法是什么?在我们轮询字符设备时,只需确定按下按钮的数量是多少,并根据该输入执行操作?

简而言之,pseduo-C,这样的事情?

struct gamepad {
    int fd;
};

void get_input(struct gamepad *gamepad)
{
    char *buf;
    read(gamepad->fd, buf, 48);
    switch(buf)
    {
        /* insert cases about handling differing buttons */
    }
}
Run Code Online (Sandbox Code Playgroud)

设备如何呈现:

据我所见,我可以清楚地看到设备正确注册:

$ dmesg | tail
[198564.517068] usb 1-1: USB disconnect, device number 17
[198566.154324] usb 1-1: new low-speed USB device number 18 using xhci_hcd
[198566.323309] usb 1-1: New USB device found, idVendor=12bd, idProduct=d015
[198566.323312] usb 1-1: New USB device …
Run Code Online (Sandbox Code Playgroud)

c linux input gamepad

7
推荐指数
1
解决办法
2212
查看次数

当 yaml 已经初始化值时,如何在 Golang 中测试默认值?

我正在编写守护程序的配置处理程序并利用该yaml包来执行此操作。导入我的文件的工作方式如下:

package daemon

import (
    "ioutil"
    "log"

    "gopkg.in/yaml.v2"
)

type daemonConfig struct {
    BindAddress string `yaml:"bind_address"`
    BindPort    int    `yaml:"bind_port"`
    VerifySSL   bool   `yaml:"verify_ssl"`
}
Run Code Online (Sandbox Code Playgroud)

我可以轻松地从 YAML 文件中解组数据,如下所示:

func (config *daemonConfig) getConf() *daemonConfig {
    yamlFile, err := ioutil.ReadFile("config.yaml")
    if err != nil {
        log.Fatal("Unable to open config.yaml:", err)
    }
    err = yaml.Unmarshal(yamlFile, config)
    if err != nil {
        log.Fatal("Failed to unmarshall config.yaml:", err)
    }
    config, err = setDefaults(config)

    return config
}
Run Code Online (Sandbox Code Playgroud)

我的问题是关于我的自定义 setDefaults 函数。如果未提供字段,例如bind_portbind_address,我只想将它们设置为默认值:

func setDefaults(config …
Run Code Online (Sandbox Code Playgroud)

go

1
推荐指数
1
解决办法
1977
查看次数

标签 统计

c ×1

gamepad ×1

go ×1

input ×1

linux ×1