我正在开发一个C语言程序,它使用USB SNES控制器输入基于RPM的分发.是否存在任何人都知道的库使得这更容易与之交互,或者某些工具(joydev?)允许从设备中正确读取输入?我不需要整个游戏引擎; 它仅用于来自角色设备的输入.
如果有一个库已经为我做了这个,那将是非常好的(我可以看看库自己做了什么),这可以通过一个链接关闭; 否则,如果我必须自己这样做,我有几个具体的问题:
简而言之,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) 我正在编写守护程序的配置处理程序并利用该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_port或bind_address,我只想将它们设置为默认值:
func setDefaults(config …Run Code Online (Sandbox Code Playgroud)