树梅派硬件学习_xbox手柄驱动
joystick手柄驱动
使用xbox手柄
手柄测试:
ls /dev/input #找到一个js0表示支持joystickcat /dev/input/js0 | hexdump #实时查看手柄的输出, 十六进制显示
00000a0 8bb4 0051 0000 0702 8ee8 0051 8001 0702
00000b0 8f56 0051 0000 0702 9000 0051 8001 0702
00000c0 9046 0051 0000 0702 9456 0051 7fff 0702sudo apt-get install joystick #下载手柄驱动jstest /dev/input/js0 #测试手柄,相当于上一种16进制的解释
Axes: 0: 0 1: 0 2:-32767 3: 0 4: 0 5:-32767 6: 0 7: 0 Buttons: 0:off 1:off 2:off 3:off 4:off 5:off 6:off 7:off 8:off 9:off 10:off
代码
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <linux/input.h>
#include <linux/joystick.h>
#include <iostream>using namespace std;#define XBOX_TYPE_BUTTON 0x01
#define XBOX_TYPE_AXIS 0x02 #define XBOX_BUTTON_A 0x00
#define XBOX_BUTTON_B 0x01
#define XBOX_BUTTON_X 0x02
#define XBOX_BUTTON_Y 0x03
#define XBOX_BUTTON_LB 0x04
#define XBOX_BUTTON_RB 0x05
#define XBOX_BUTTON_START 0x06
#define XBOX_BUTTON_BACK 0x07
#define XBOX_BUTTON_HOME 0x08
#define XBOX_BUTTON_LO 0x09 /* 左摇杆按键 */
#define XBOX_BUTTON_RO 0x0a /* 右摇杆按键 */ #define XBOX_BUTTON_ON 0x01
#define XBOX_BUTTON_OFF 0x00 #define XBOX_AXIS_LX 0x00 /* 左摇杆X轴 */
#define XBOX_AXIS_LY 0x01 /* 左摇杆Y轴 */
#define XBOX_AXIS_RX 0x03 /* 右摇杆X轴 */
#define XBOX_AXIS_RY 0x04 /* 右摇杆Y轴 */
#define XBOX_AXIS_LT 0x02
#define XBOX_AXIS_RT 0x05
#define XBOX_AXIS_XX 0x06 /* 方向键X轴 */
#define XBOX_AXIS_YY 0x07 /* 方向键Y轴 */ #define XBOX_AXIS_VAL_UP -32767
#define XBOX_AXIS_VAL_DOWN 32767
#define XBOX_AXIS_VAL_LEFT -32767
#define XBOX_AXIS_VAL_RIGHT 32767 #define XBOX_AXIS_VAL_MIN -32767
#define XBOX_AXIS_VAL_MAX 32767
#define XBOX_AXIS_VAL_MID 0x00 class XBox{private:int xbox_fd=0;const char* file_name = "/dev/input/js0";public:struct xbox_map { int time; int a; int b; int x; int y; int lb; int rb; int start; int back; int home; int lo; int ro; int lx; int ly; int rx; int ry; int lt; int rt; int xx; int yy; }map; public:XBox(){this->map = {0};}~XBox(){}int xbox_open() { this->xbox_fd = open(this->file_name, O_RDONLY); if (this->xbox_fd < 0) { perror("open"); return -1; } return 1; } int xbox_map_read() { int len, type, number, value; struct js_event js; len = read(this->xbox_fd, &js, sizeof(struct js_event)); if (len < 0) { perror("read"); return -1; } type = js.type; number = js.number; value = js.value; this->map.time = js.time; if (type == JS_EVENT_BUTTON) { switch (number) { case XBOX_BUTTON_A: this->map.a = value; break; case XBOX_BUTTON_B: this->map.b = value; break; case XBOX_BUTTON_X: this->map.x = value; break; case XBOX_BUTTON_Y: this->map.y = value; break; case XBOX_BUTTON_LB: this->map.lb = value; break; case XBOX_BUTTON_RB: this->map.rb = value; break; case XBOX_BUTTON_START: this->map.start = value; break; case XBOX_BUTTON_BACK: this->map.back = value; break; case XBOX_BUTTON_HOME: this->map.home = value; break; case XBOX_BUTTON_LO: this->map.lo = value; break; case XBOX_BUTTON_RO: this->map.ro = value; break; default: break; } } else if (type == JS_EVENT_AXIS) { switch(number) { case XBOX_AXIS_LX: this->map.lx = value; break; case XBOX_AXIS_LY: this->map.ly = value; break; case XBOX_AXIS_RX: this->map.rx = value; break; case XBOX_AXIS_RY: this->map.ry = value; break; case XBOX_AXIS_LT: this->map.lt = value; break; case XBOX_AXIS_RT: this->map.rt = value; break; case XBOX_AXIS_XX: this->map.xx = value; break; case XBOX_AXIS_YY: this->map.yy = value; break; default: break; } } else { /* Init do nothing */ } return len; } void xbox_close() { close(this->xbox_fd); return; } };int main(void)
{ XBox xbox; int len;if( xbox.xbox_open() < 0) { printf("打开文件失败!");return -1; } while(1) { len = xbox.xbox_map_read(); if (len < 0) { usleep(10*1000); continue; } if(xbox.map.a==1)printf("a\t");if(xbox.map.b==1)printf("b\t");if(xbox.map.xx<0)printf("left\t");if(xbox.map.xx>0)printf("right\t");printf("\n");} xbox.xbox_close(); return 0;
}
输出:
#全部为:
Time: 6647560 A:0 B:0 X:0 Y:0 LB:0 RB:0 start:0 back:0 home:0 LO:0 RO:0 XX:0 YY:0 LX:0 LY:0 RX:0 RY:0输出:
right
b right
right
a right
a
a left
left
树梅派硬件学习_xbox手柄驱动相关推荐
- 树梅派学习 21. 串口连接
树梅派学习 21. 串口连接 接线: 其中6.8.10 是串口的引脚. 1. 执行命令 sudo apt-get update sudo apt-get upgrade sudo reboot 2. ...
- python硬件驱动_从零开始:手把手教你安装深度学习操作系统、驱动和各种python库!...
原标题:从零开始:手把手教你安装深度学习操作系统.驱动和各种python库! 为了研究强化学习,最近购置了一台基于 Ubuntu 和英伟达 GPU 的深度学习机器.尽管目前在网络中能找到一些环境部署指 ...
- 如何学习linux设备驱动
面对不断升级的内核,如何学习linux设备驱动 面对不断升级的linux内核.GNU开发工具.linux环境下的各种图形库,很多linux应用程序开发人员和linux设备驱动开发人员即兴奋,又烦躁 ...
- linux硬件开发学习,硬件学习该从何下手
嵌入式的硬件学习是开始嵌入式的基础,从第一个最简单的流水灯开始,都是从开始读懂硬件原理图开始的,所有首先要有基本的电路知识,然后就是可以先学一下51单片机开发板,学习一下51的单片机基本外围设备有哪些 ...
- OpenHarmony学习笔记——I2C驱动0.96OLED屏幕
文章目录 前言 I2C简介 硬件连接 编程实现 创建代码框架 初始化并复用GPIO 初始化I2C0 初始化OLED 从机地址 OLED初始化配置 功能代码 总结 目录 前言 前面介绍了一些关于在Hi3 ...
- 学习使用USB-TTL驱动PN532来读写IC卡
学习使用USB-TTL驱动PN532来读写IC卡 PN532简介 PN532模块 使用前准备 硬件接线 软件设置 读取数据 写入数据 写入完成 总结 原文链接:https://www.yourcee. ...
- STM32L475 硬件SPI+软件SPI驱动ST7789V2
前言 最近购买了IoT Board 潘多拉开发板来研究,学习使用STM32CubeMX工具配置SPI,然后驱动了TFTLCD.潘多拉开发板的TFTLCD驱动IC是ST7789V2,结合原子哥的TFTL ...
- Android(4.2) Sensors 学习——G-sensor,Gyroscope驱动移植
Android(4.2) Sensors 学习--G-sensor,Gyroscope驱动移植 目录(?)[-] Sensors 种类和功能 G-sensor驱动code G-sensor HAL 注 ...
- 探索Linux设备树:硬件描述与驱动程序的桥梁
目录标题 引言:Linux设备树简介 | Introduction: Linux Device Tree Overview a. 设备树的背景与发展 | Background and Developm ...
最新文章
- android根据ip获取域名_android常用工具类 通过域名获取ip
- Zabbix 中文乱码解决
- 中国自研数据库打破西方垄断:阿里成绩刷新世界尘封9年纪录,性能2倍于第二名...
- python--numpy pad函数使用
- Android之Only fullscreen opaque activities can request orientation
- mybatis学习(30):修改功能
- ubuntu jdk tomcat mysql_Ubuntu下JDK+Tomcat+MySql环境的搭建
- linux中波浪号代表什么_Linux有什么吸引力,在程序员中如此受欢迎?
- Gradle之使用Gradle的命令行
- Github copilot: AI协助编程尝试
- java cjson_使用cJSON
- 【保研】2021南京大学计算机夏令营笔试面试笔记
- 一周技术思考(第22期)-编程的基本礼节
- 运维的一些日常知识点
- 算法小白理解最大流最小割(Maximum flow Minimum cut)问题
- 2019新税率计算器
- lavarel5.2中多表联查 搜索后分页
- Linux 各种压缩、解压命令
- Drafting and Revision: Laplacian Pyramid Network for Fast High-Quality Artistic Style Transfer--T Li
- Java动态执行代码字符串
热门文章
- Unity 草的制作
- mysql忘记密码win10_win10 mysql8.0.12 忘记root密码如何重置密码
- java SpringBoot 对接支付宝 APP支付 证书模式及非证书模式
- 博客图片html代码,【html博客代码】图片羽化代码
- 研发人员一些比较重要的能力指标参考
- 微信公众号批量打标签的自动化实现方法
- Python:次方计算
- 带你学C带你飞 | printf函数 | 变量 | 常量和宏定义 | 数据类型 | 取值范围 | 字符串 | 运算符
- oracle 如何考试,oracle考试怎么报名
- Keil5快速下载支持包