nes 红白机模拟器 第8篇 USB 手柄支持
买了一个支持 USB OTG, 蓝牙 连接的 安卓手柄。
接到 ubunto 上 dmesg 可以看到识别出来的信息,内核已经支持了。
usb -2.2: new full-speed USB device number using uhci_hcd
usb -2.2: New USB device found, idVendor=20bc, idProduct=
usb -2.2: New USB device strings: Mfr=, Product=, SerialNumber=
usb -2.2: Product: Android Gamepad
usb -2.2: Manufacturer: ShanWan
input: ShanWan Android Gamepad as /devices/pci0000:/::11.0/::00.0/usb2/-/-2.2/-2.2:1.0/input/input5
hid-generic :20BC:5500.0002: input,hidraw1: USB HID v1. Gamepad [ShanWan Android Gamepad] on usb-::00.0-2.2/input0
根据 VID 20bc PID 5500 在 内核源码中搜索
hid/hid-ids.h:196:#define USB_VENDOR_ID_BETOP_2185V2BFM 0x20bc
hid/hid-betopff.c:16: * 0x20bc:0x5500 "BTP2185 V2 BFM mode Joystick"
配置内核加上 hid-betopff.c
Device Drivers
Input device support
HID support
Special HID drivers
Betop Production Inc. force feedback support
使用新内核启动后,接入 USB 手柄,有打印信息,有生成设备节点
写测试程序,确定按键的对应码。
/**
* 参考内核文档 joystick-api.txt
* author: ningci dev date: 2017-06-02 18:00
*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> struct js_event {
unsigned int time; /* event timestamp in milliseconds */
unsigned short value; /* value */
unsigned char type; /* event type */
unsigned char number; /* axis/button number */
}; int main(int argc, char **argv)
{
struct js_event e;
int fd = open("/dev/input/js0", O_RDONLY);
while()
{
if( < read (fd, &e, sizeof(e)))
{
printf("value:0x%x type:0x%x number:0x%x \n", e.value, e.type, e.number);
}
}
close(fd);
return ;
}
测试后有用的按键的整理
value:0x8001 type:0x2 number:0x5 上
value:0x0 type:0x2 number:0x5 松开
value:0x7fff type:0x2 number:0x5 下
value:0x0 type:0x2 number:0x5 松开
value:0x8001 type:0x2 number:0x4 左
value:0x0 type:0x2 number:0x4 松开
value:0x7fff type:0x2 number:0x4 右
value:0x0 type:0x2 number:0x4 松开
value:0x1 type:0x1 number:0xa 选择
value:0x0 type:0x1 number:0xa 松开
value:0x1 type:0x1 number:0xb 开始
value:0x0 type:0x1 number:0xb 松开
value:0x1 type:0x1 number:0x0 A
value:0x0 type:0x1 number:0x0 松开
value:0x1 type:0x1 number:0x1 B
value:0x0 type:0x1 number:0x1 松开
value:0x1 type:0x1 number:0x3 X
value:0x0 type:0x1 number:0x3 松开
value:0x1 type:0x1 number:0x4 Y
value:0x0 type:0x1 number:0x4 松开
因为USB 手柄在 read 时会阻塞,所以改用 多线程方式,进入输入。
全整源码,可以关注 github 。
暂未支持 连A 连B 的支持。
nes 红白机模拟器 第8篇 USB 手柄支持的更多相关文章
- arm 2440 linux 应用程序 nes 红白机模拟器 第4篇 linux 手柄驱动支持
小霸王学习机的真实手柄,实测CPU 占用 80% 接线图: 手柄读时序: joypad.c 驱动: 普通的字符设备驱动. #include <linux/module.h> #includ ...
- nes 红白机模拟器 第4篇 linux 手柄驱动支持
小霸王学习机的真实手柄,实测CPU 占用 80% 接线图: 手柄读时序: joypad.c 驱动: 普通的字符设备驱动. #include <linux/module.h> #includ ...
- nes 红白机模拟器 第7篇 编译使用方法
模拟器,基于 InfoNES ,作者添加修改以下功能: 1, joypad 真实手柄驱动程序(字符型设备驱动) 2,原始图像只有256*240 ,添加 图像放大算法,这里实现了2种,a, 最近邻插值 ...
- arm 2440 linux 应用程序 nes 红白机模拟器 第1篇
对比了很多种,开源的 NES 模拟器 VirtuaNES , nestopia , FakeNES , FCEUX , InfoNES , LiteNES 最后决定使用 LiteNES 进行移值,它是 ...
- nes 红白机模拟器 第1篇
对比了很多种,开源的 NES 模拟器 VirtuaNES , nestopia , FakeNES , FCEUX , InfoNES , LiteNES 最后决定使用 LiteNES 进行移值,它是 ...
- arm 2440 linux 应用程序 nes 红白机模拟器 第2篇 InfoNES
InfoNES 支持 map ,声音,代码比较少,方便 移值. 在上个 LiteNES 的基础上,其实不到半小时就移值好了这个,但问题是,一直是黑屏.InfoNES_LoadFrame () Wo ...
- nes 红白机模拟器 第6篇 声音支持
InfoNES 源码中并没有包含 linux 的声音支持. 但提供 wince 和 win 的工程,文件,通过分析,win 的 DirectSound 发声,在使用 linux ALSA 实现. 先使 ...
- nes 红白机模拟器 第5篇 全屏显示
先看一下效果图 放大的原理是使用最初级的算法,直接取对应像素法. /*================================================================= ...
- nes 红白机模拟器 第2篇 InfoNES
InfoNES 支持 map ,声音,代码比较少,方便 移值. 在上个 LiteNES 的基础上,其实不到半小时就移值好了这个,但问题是,一直是黑屏.InfoNES_LoadFrame () Wo ...
随机推荐
- 74)PHP,Session的一些属性
(1) (2)有效期在 会话周期结束(就是将浏览器关闭前) (3)有效路径: 整站都有效 (4)有效域:当前域 (5)是否安全传输:否 (6)以上的session数据的特征都是由一个问题导致的,就 ...
- SQL数据库的查询方法
简单查询: 一.投影 select * from 表名 select 列1,列2... from 表名 select distinct 列名 from 表名 二.筛选 select top 数字 列| ...
- 线程中start和run方法的区别
先说java中实现多线程常用的两种方式: 1:继承Thread类,并重写run()方法 2:实现Runnable接口,实现run方法实际上Thread类也是实现了Runnable接口 [Jav ...
- 3dmax2014卸载/安装失败/如何彻底卸载清除干净3dmax2014注册表和文件的方法
3dmax2014提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dmax2014失败提示3dmax2014安装未完成,某些产品无法安装,也有时候想重新安装3 ...
- 限制IP每分钟访问10次
转载:https://www.jianshu.com/p/d1326ab657ff IP请求限制,之前用过redis的set设置时间戳一分钟过期:也用过nginx的IP限流配置.前者,没法解决“用户在 ...
- 关于va_list实例
printf函数: #include <stdio.h> #include <stdarg.h> int myself_printf(char *format, ...) { ...
- Filezilla Server搭建FTP服务器
一.下载Filezilla Server 官网网址:https://filezilla-project.org 下载链接 :https://filezilla-project.org/downloa ...
- 【转】mac os x配置adb命令的方法,苹果电脑设置adb命令的方法
http://www.myexception.cn/operating-system/1636963.html 步骤如下: 1. 启动终端Terminal (如果当前用户文件夹下已有.bash_pro ...
- mysql 优化一
从几个方面出发: ① 数据库设计② sql语句优化③ 数据库参数配置④ 恰当的硬件资源和操作系统 下面详细介绍: ① 数据库设计 通俗地理解三个范式,对于数据库设计大有好处.在数据库设计中,为了更好地 ...
- java生成饼图
pom.xml文件导入依赖包 <!-- https://mvnrepository.com/artifact/org.jfree/jfreechart --> <dependency ...