如何读写/dev/input/eventN

发布于 2022-09-23 13:17:23 字数 3758 浏览 29 评论 0

我自己做了USB hid 设备,暂定为joystick(不是mouse或keyboard),其作用就是向PC上传数据,同时接受PC下行数据。在windows可以通过bushound看到这些上传的数据,当然也可以接受PC下行数据。现在到了linux-2.6.26系统下,遇到了以下问题:
1。FC8(linux-2.6.26)系统默认把usbhid驱动编入到了内核中,而不是编译成可卸载的模块(.ko文件),这样我的usb设备一插入就被usbhid截获,无法自己写驱动。由于编写的是应用软件,不能编译用户机器的内核,所以不考虑重新编译内核。
2。基于问题1,我考虑读写设备文件,但是却读不到数据。我的usb设备对应的设备文件是event5。读写代码如下:

///////////////////////////////////////////////////////////
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/select.h>
#include <sys/time.h>

int main()
{

        int fd, retval;
        unsigned char buf[13];
        fd_set readfds;
        struct timeval tv;

        fd = open("/dev/input/event5", O_RDONLY);

        if(!fd)
        {
                printf("Failed to open \"/dev/input/js1\"\n");
                return -1;
        }

        while(1)
        {
                FD_ZERO(&readfds);
                FD_SET(fd, &readfds);
                tv.tv_sec = 5;
                tv.tv_usec = 0;
                if((retval = select(fd+1, &readfds, NULL, NULL, &tv)) == 1)
                {
                        if(read(fd, buf, 12) <= 0)
                        {
                                //printf("read fail ... \n");
                                continue;
                        }
                        //printf("Button type = %d, X = %d, Y = %d\n", (buf[0] & 0x07), buf[1], buf[2]);
                        printf("0x%02x 0x%02x 0x%02x 0x%02x   0x%02x 0x%02x 0x%02x 0x%02x   0x%02x 0x%02x 0x%02x 0x%02x \n",
                                buf[0], buf[1], buf[2],buf[3],buf[4], buf[5], buf[6],buf[7],buf[8], buf[9], buf[10],buf[11]);
                        //sleep(1);
                }
        }
        close(fd);
        return 0;
}
///////////////////////////////////////////////////////////

但是没有任何反应。可是 cat /dev/input/event5 却有乱码。

3。/dev/input 下有多个event文件,有的是键盘的设备文件,可是我的这段代码都不能读取event的数据。哪位知道event的读写方法吗?

4。/dev/input 下的mouse文件是可以通过我的代码读取的,mouse文件和event文件有什么本质的区别。

以上就是我的问题,请大家指教,若有更好的系统解决方案,还望不吝赐教。小弟谢谢了

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

2022-09-30 13:17:23

自己顶一个

多情出卖 2022-09-30 13:17:23

搜个叫evtest的源程序编译下测测看

小糖芽 2022-09-30 13:17:23

原帖由 wqhl.mark 于 2008-12-18 09:34 发表
搜个叫evtest的源程序编译下测测看

谢谢wqhl.mark.
这个方法(evtest.c)可以操作/dev/input/eventN,但是有一些细节需要处理.我要好好研究一下

非要怀念 2022-09-30 13:17:23

主要看event与用户层的接口了!

贩梦商人 2022-09-30 13:17:23

原帖由 force_eagle 于 2008-12-18 16:04 发表
主要看event与用户层的接口了!

我使用 cat /proc/bus/input/devices ,有如下结果:

I: Bus=0003 Vendor=1234 Product=5678 Version=0111
N: Name="Test Joy"
P: Phys=usb-0000:00:1d.3-1/input3
S: Sysfs=/class/input/input4
U: Uniq=TestJoy
H: Handlers=event4
B: EV=9
B: ABS=ffff00 0

然后我使用evtest.c经过简单修改读取数据,可是为什么每次读取的数据长度都是变的。(我的usb设备每10ms固定上传12个byte的数据)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文