linux测试手柄,Linux Joystick 介绍

Linux手柄使用

Linux手柄驱动, 一般为joydev, 可使用modprobe -a joydev加载驱动模块。

手柄连接后的原始设备文件为/dev/hidraw*, 这个和具体手柄厂商的驱动相关。需要针对特定手柄进行操作优化可能需要使用这个设备。

通常情况下joydev手柄驱动提供一个通用的手柄接口供使用。joydev驱动创建的设备文件一般为/dev/input/js*。joydev驱动提供两种不同操作: 摇杆axes和按键button。

一般使用joydev提供的通用驱动。使用joydev一些手柄会将十字方向键当作摇杆类型,而不是button类型,比如我的手柄北通蝙蝠D2(BTP-BD2F),因此在一些游戏模拟器软件中不能识别十字按键。

实用工具

在Linux中提供几个实用工具:

jscal: 按键校准和按键重映射工具

jscal-restore

jscal-store

jstest: 读取按键状态,测试按键是否正确

jscal 按键映射示例:

An example output of -q looks like this ./jscal -q /dev/input/js0:

-u

n_of_buttons,btnmap1,btnmap2,

...> --set-mappings Sets axis and button mappings to the

specified valuesjscal -u

10,0,1,2,5,6,16,17,40,41,42,13,288,289,290,291,292,293,294,295,296,297,298,299,300

/dev/input/js0

The joystick has 10 axes and 13 buttons. If now one is to switch axes 2jscal -u

10,0,1,5,2,6,16,17,40,41,42,13,288,289,290,291,292,293,294,295,296,297,298,299,300

/dev/input/js0

changing 2,5 to 5,2 on the line.

Remapping buttons is done the same way.

jstest示例:

jstest /dev/input/js0

手柄编程#include

#include

#include

typedef unsigned int __u32;

typedef short __s16;

typedef unsigned char __u8;

struct js_event {

__u32 time; /* event timestamp in milliseconds */

__s16 value; /* value */

__u8 type; /* event type */

__u8 number; /* axis/button number */

};

#define JS_EVENT_BUTTON 0x01 /* button pressed/released */

#define JS_EVENT_AXIS 0x02 /* joystick moved */

#define JS_EVENT_INIT 0x80 /* initial state of device */

int main() {

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

struct js_event e;

while(1) {

read(fd, &e, sizeof(e));

int type = JS_EVENT_BUTTON | JS_EVENT_INIT;

switch(e.type) {

case JS_EVENT_AXIS:

printf("axis number: %d, value: %d, time: %d\n", e.number, e.value, e.time);

break;

case JS_EVENT_BUTTON:

printf("btn: number: %d, value: %d, time: %d\n", e.number, e.value, e.time);

break;

}

}

close(fd);

return 0;

}

参考:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512608.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 职场需求_九年从业经验的职场人是否需要学习Python语言

首先,对于已经有9年从业经验的职场人来说,当前持续学习编程语言还是有必要的,一方面未来的职场上升空间非常大,另一方面掌握编程语言也是顺应当前互联网、人工智能时代的发展要求,随着工业互联网的发展,未来…

10分钟!构建支持10万/秒请求的大型网站

简介: 应用网关作为应用的统一接入层,它的发展和演进也是伴随着应用架构的变化,大家都知道企业应用从最早期 SOA 时代发展到微服务的时代。在 SOA 时代,传统的企业服务总线承担了企业应用的统一接入层;但是发展到微服务…

服务实体经济、战略级行业再下一城,钉钉发布制造行业解决方案2.0

编辑 | 宋慧 出品 | CSDN 云计算 1月5日,钉钉召开主题为“数字新生”的2022制造业钉峰会。会上,钉钉正式发布制造行业解决方案2.0,该方案以“码上制造”产品为制造行业专属底座,提供设备上钉、计件日结等基础产品,同时…

阿里云边缘云全新架构升级,助力CDN操控新体验

简介: 本次升级根据上万企业客户的使用反馈和行业应用特征,从简单开通到个性化定制,从内容分发到边缘计算完整解决方案,对客户侧的使用体验进行了全局梳理和全链路优化,推进边缘云CDN操控革新,并逐步构建面…

key redis 遍历_快乐运维Redis大数据量查询与清理

一、 keys命令(生产环境禁止使用)简单粗暴,由于Redis单线程这一特性,keys命令是以阻塞的方式执行的,keys是以遍历的方式实现的复杂度是 O(n),Redis库中的key越多,查找实现代价越大,产生的阻塞时间越长。key…

linux部分基础命令总结,Linux常用基础命令总结

近期自己学习了一下Linux,写这篇博客以便于对自己的一个总结,记录自己的学习情况,奥利给!想对Linux熟练掌握,就必须学会它的操作命令,虽然可能会花费一些时间,不过从长远的角度来说,…

MaxCompute执行引擎核心技术DAG揭秘

简介: 作为业界少有的EB级数据分布式平台,MaxCompute每天支撑上千万个分布式作业的运行。这些作业特点各异,既有包含数十万计算节点的超大型作业,也有中小规模的分布式作业。不同用户对于不同规模/特点的作业,在运行时…

自定义导航页_带你回归“真”的导航页

曾经浏览器主页是我们流向各大网站的要道从这里我们可以轻而易举的去往想要去的网站特别是在信息和专业性越来聚集的今天传统的主页难免令人有些审美疲劳或者说花里胡哨hao1232345是这些老牌的主页网站有些审美疲劳随着导航越来越细节化广告也越来越多美感也更少360主页qq主页百…

Redis 压缩列表原理与应用分析

作者 | 西瓜来源 | JAVA架构进阶之路摘要Redis是一款著名的key-value内存数据库软件,同时也是一款卓越的数据结构服务软件。它支持字符串、列表、哈希表、集合、有序集合五种数据结构类型,同时每种数据结构类型针对不同的应用场景又支持不同的编码方式。…

基于 MaxCompute 的智能推荐解决方案

简介: 在互联网行业红利已过、在获客成本越来越高、在用户在线时长全网基本无增长以及信息大爆炸的情况下,如何更好的转化新用户和提升老用户粘性就变得至关重要,智能化的个性化推荐无疑是经过验证的重要手段之一,我们每天使用的移…

linux下的socket在哪个头文件,linux下socket编程常用头文件

sys/types.h:数据类型定义sys/socket.h:提供socket函数及数据结构netinet/in.h:定义数据结构sockaddr_inarpa/inet.h:提供IP地址转换函数netdb.h:提供设置及获取域名的函数sys/ioctl.h:提供对I/O控制的函数…

基于MaxCompute+开放搜索的电商、零售行业搜索开发实践

简介: 搜索一直是电商行业流量来源的核心入口之一,如何搭建电商行业搜索并提升搜索效果,一直是电商行业开发者努力攻克的难题。基于传统数据库或开源引擎虽然能够搭建基础搜索服务,但随着商品数据的增多和业务流量的增长&#xff…

linux系统无法识别固态硬盘_linux查看硬盘是不是ssd

lsscsi:看看硬盘的型号,一般都是ssd字样。[6:0:0:0] disk ATA INTEL SSDSC2KB48 0100 /dev/sda[7:0:0:0] disk ATA INTEL SSDSC2KB48 0100 /dev/sdb[8:0:0:0] disk ATA INTEL SSDSC2KB48 0100 /dev/sdc[9:0:0:0] disk ATA HGST HUS722T2TAL WA09 /dev/sd…

快速搭建实验环境:使用 Terraform 部署 Proxmox 虚拟机

作者 | Addo Zhang来源 | 云原生指北自从用上 m1 的电脑,本地开发环境偶尔会遇到兼容性的问题。比如之前尝试用 Colima 在虚拟机中运行容器运行时和 Kubernetes,其实际使用的还是 aarch64 虚拟机,实际使用还是会有些差异。手上有台之前用的黑…

linux grub 下载,GRUB 2.04发布下载,附新功能介绍

GRUB 2.04版本发布了,它是在GRUB 2.02/2.00的基础上更新的,GRUB 2.02是目前使用得最多的多重启动管理器,全称为GRand Unified Bootloader,使用它可以引导几乎所有的操作系统,包括Unix、Linux、Windows,GRUB…

Go 调用 Java 方案和性能优化分享

简介: 一个基于 Golang 编写的日志收集和清洗的应用需要支持一些基于 JVM 的算子。 作者 | 响风 来源 | 阿里技术公众号 一 背景 一个基于 Golang 编写的日志收集和清洗的应用需要支持一些基于 JVM 的算子。 算子依赖了一些库: Groovy aviatorscript 该应用有如…

低代码发展专访系列之八:低代码平台能够打破企业「应用孤岛」现象吗?

话题:低代码发展系列专访 前言:2019年开始,低代码爆火。有人认为它是第四代编程语言,有人认为它是开发模式的颠覆,也有人认为是企业管理模式的变革……有很多声音,社区讨论很热烈。CSDN随后展开低代码平台产…

redis rdb aof区别_Redis(三):持久化RDB,fork.copyonwrite,AOF,RDBamp;AOF混合使用

Redis的数据全部在内存里,如果突然宕机,数据就会全部丢失,因此必须有一种机制来保证Redis的数据不会因为故障而丢失,这种机制就是Redis的持久化机制。Redis的持久化有两种,第一种是快照,第二种是AOF日志。快…

浅谈 Linux 高负载的系统化分析

简介: 浅谈 Linux 高负载的系统化分析,阿里云系统组工程师杨勇通过对线上各种问题的系统化分析。 讲解 Linux Load 高如何排查的话题属于老生常谈了,但多数文章只是聚焦了几个点,缺少整体排查思路的介绍。所谓 “授人以鱼不如授人…

如何用c语言程序写一段英文字母,菜鸟求助,写一个随机输出26个英文字母的程序...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include #include // 用srand、rand函数了#include // 用time函数了#define LEN 32// 产生min~max的随机数 (包含min和max)// rand函数产生0 ~ RAND_MAX 的随机数// 一般上不同编译器要求 RAND_MAX 的值(至少)为 32767#define RAN…