首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从/dev/input获取实时信息

从/dev/input获取实时信息
EN

Stack Overflow用户
提问于 2013-04-15 08:18:49
回答 3查看 14.3K关注 0票数 9

我不确定这是否是这个问题的正确位置。我正在尝试从系统上的操纵杆/dev/input/js0获取轴位置值。如果我运行jstest /dev/input/js0,它会给我所有按钮和轴位置的实时反馈。

我正在尝试将这些信息输入到我的C程序中来控制伺服系统。有没有这样做的函数?我在编程中没有太多使用输入设备的经验,所以这对我来说都是新的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-15 08:58:46

这个页面:http://scaryreasoner.wordpress.com/2008/02/22/programming-joysticks-with-linux/写了一篇关于如何从/dev/input/js0读取信息的很好的文章

您从文件中读取的事件的格式记录在这里:https://www.kernel.org/doc/Documentation/input/input.txt。它是一个简单的结构,包含时间戳、事件类型和标识符以及值:

代码语言:javascript
复制
struct input_event {
    struct timeval time;
    unsigned short type;
    unsigned short code;
    unsigned int value;
};
票数 3
EN

Stack Overflow用户

发布于 2016-09-17 15:04:47

您可以运行此python code来读取事件。

您还可以使用高级模块python-evdev

代码语言:javascript
复制
#!/usr/bin/env python

import struct

infile_path = "/dev/input/js0"
EVENT_SIZE = struct.calcsize("llHHI")
file = open(infile_path, "rb")
event = file.read(EVENT_SIZE)
while event:
    print(struct.unpack("llHHI", event))
    (tv_sec, tv_usec, type, code, value) = struct.unpack("llHHI", event)
    event = file.read(EVENT_SIZE)

示例输出:

代码语言:javascript
复制
(73324490, 8454144, 55242, 1118, 25231360)
(73324490, 42008576, 55242, 1118, 58785792)
(73324490, 75563008, 55242, 1118, 92340224)
(73324490, 109117440, 55242, 1118, 125894656)
(73324490, 142671872, 55242, 1118, 159449088)
(73324490, 176226304, 55242, 1118, 193003520)
(73324490, 209780736, 55242, 1118, 226557952)
(73324490, 243335168, 55242, 1118, 8519680)
(73324490, 25296896, 55242, 1118, 42074112)
(73324490, 58884097, 55242, 1118, 75661313)
(73324490, 92405760, 55242, 1118, 109215745)
(73324490, 125992961, 55242, 1118, 142737408)
(73324490, 159514624, 55242, 1118, 176324609)
(73327790, 84041474, 58542, 1118, 84049919)
(73328030, 84044852, 58782, 1118, 84017152)
(73331790, 33749013, 62542, 1118, 33742256)
(73331790, 33736851, 62562, 1118, 33731108)
(73331830, 33723339, 62602, 1118, 33718273)
(73332090, 33723339, 62862, 1118, 33685504)
票数 4
EN

Stack Overflow用户

发布于 2018-03-15 12:32:01

在kev的帖子上构建

从linux/joytick.h文件:

代码语言:javascript
复制
struct js_event {
    __u32 time;     /* event timestamp in milliseconds */
    __s16 value;    /* value */
    __u8 type;      /* event type */
    __u8 number;    /* axis/button number */
};

所以python format应该是:“LhBB”

代码语言:javascript
复制
infile_path = "/dev/input/js0"
EVENT_SIZE = struct.calcsize("LhBB")
file = open(infile_path, "rb")
event = file.read(EVENT_SIZE)
while event:
    print(struct.unpack("LhBB", event))
    (tv_msec,  value, type, number) = struct.unpack("LhBB", event)
    event = file.read(EVENT_SIZE)

XBOX One S控制器的输出示例:

代码语言:javascript
复制
// type=button, number=button number
//msec, value, type, number
(2114530, 1, 1, 0) // A pressed
(2114670, 0, 1, 0) // A released
(2116490, 1, 1, 1) // B pressed
(2116620, 0, 1, 1) // B released
(2117370, 1, 1, 2) // X pressed
(2117520, 0, 1, 2) // X released
(2118220, 1, 1, 3) // Y pressed
(2118360, 0, 1, 3) // Y released
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16032982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档