android游戏手柄问题
2013-11-12 14:39
531 查看
新产品(一款android智能机顶盒)需要支持2.4G无线游戏手柄,这款游戏手柄是一个接收头、双手柄的配置。客户反馈游戏摇杆的按键有问题,两个手柄同时将摇杆拉到上方,应用程序的onKeyDown事件中KEYCODE_UP有丢失。对游戏手柄一无所知,从头了解。
先用ubuntu调试。先把2.4g接收头插入PC上的usb接口,dmesg发现这是个hidraw设备,有两个设备节点被创建了:/dev/input/js0,/dev/input/js1。google下“linux游戏手柄驱动”,果然发现大把示例代码。到网上下载游戏手柄的驱动程序。编译成可执行文件,cc -o my_joystick my_joystick.c listop.c -lm。运行./my_joystick,开始验证,可以收到按键和摇杆的事件。下载地址(http://download.csdn.net/detail/special_lin/6286457)。
手柄驱动的关键代码:
看驱动代码大致了解了手柄的工作原理。我们使用的Android系统的linux kernel中一般会集成主流设备的驱动程序。以JS_EVENT_AXIS为线索,果然找到了内核选项INPUT_JOYSTICK。也就是这个选项打开的时候,内核已经支持手柄设备了。
再看Framework中的InputReader,有一个专门处理手柄的类,JoystickInputMapper。当InputEvent 发上来数据的时候,交由JoystickInputMapper处理,JoystickInputMapper在sync的时候,将摇杆事件包装成为Android的motion事件。当motion事件没有被用户处理到的时候,才会被转换为key
event。如何转换的,这部分代码还没有看,转换的逻辑应该有一些问题,导致有些Key事件发不出来。但是可以确定的是,需要在onGenericMotionEvent处理手柄摇杆事件。
时间紧张,只能简单记录。有时键再来回头详细看这个问题。
先用ubuntu调试。先把2.4g接收头插入PC上的usb接口,dmesg发现这是个hidraw设备,有两个设备节点被创建了:/dev/input/js0,/dev/input/js1。google下“linux游戏手柄驱动”,果然发现大把示例代码。到网上下载游戏手柄的驱动程序。编译成可执行文件,cc -o my_joystick my_joystick.c listop.c -lm。运行./my_joystick,开始验证,可以收到按键和摇杆的事件。下载地址(http://download.csdn.net/detail/special_lin/6286457)。
手柄驱动的关键代码:
rc = ioctl(fd, JSIOCGAXES, &number_of_axes); //获取手柄摇杆轴数 rc = ioctl(fd, JSIOCGBUTTONS, &number_of_btns); //获取手柄摇杆按键个数 i4_rd_bytes = read(i4_fd, &jse, sizeof(struct js_event)); //读手柄输入数据 if (jse.type == JS_EVENT_BUTTON){ //按键事件 // ... } else if (jse.type == JS_EVENT_AXIS) { //摇杆事件 //... }
看驱动代码大致了解了手柄的工作原理。我们使用的Android系统的linux kernel中一般会集成主流设备的驱动程序。以JS_EVENT_AXIS为线索,果然找到了内核选项INPUT_JOYSTICK。也就是这个选项打开的时候,内核已经支持手柄设备了。
再看Framework中的InputReader,有一个专门处理手柄的类,JoystickInputMapper。当InputEvent 发上来数据的时候,交由JoystickInputMapper处理,JoystickInputMapper在sync的时候,将摇杆事件包装成为Android的motion事件。当motion事件没有被用户处理到的时候,才会被转换为key
event。如何转换的,这部分代码还没有看,转换的逻辑应该有一些问题,导致有些Key事件发不出来。但是可以确定的是,需要在onGenericMotionEvent处理手柄摇杆事件。
时间紧张,只能简单记录。有时键再来回头详细看这个问题。
相关文章推荐
- cocos2d-x开发android游戏时出现的问题
- Android游戏可能遇到的3个问题及解决方案
- Android 手机模拟游戏手柄(USB,C#,winio)
- 【游戏开发备注之一】关于Cocos2dx_v1.x版本iphone与Android运行出现图片白块、添加GameCenter报错问题及编译Android闪退的解决办法&&CCLOG与CClog的区别
- cocos2d-x(quick--cocos2d-x)引擎开发的游戏在android平台上,锁屏,按HOME键,重反游戏后黑屏问题
- android无线游戏手柄:重力感应控制极品飞车(C#作为服务端)
- android游戏开发适应多屏幕的问题
- Android游戏可能遇到的3个问题及解决方案
- Unity和Android交互,按下锁屏键解锁后游戏重新启动问题解决方法
- 【读书笔记《Android游戏编程之从零开始》】8.Android 游戏开发常用的系统控件(系统控件常见问题)
- Android游戏引擎《Rokon》:常见问题汇总(2010.11.15更新)
- unity3D android游戏屏幕分辨率问题
- Android问题Button的onClick监听里,如何调用外部类的方法(2048实现重新开始游戏)
- Android 小米盒子游戏手柄按键捕获 - 能获取到的 home 键依然是个痛
- Android 游戏开发中横竖屏切换问题
- 一次Android游戏黑屏闪退问题的分析
- cocos 3.x android下home键后,切回游戏时黑屏太久的问题
- JoyStick for android2.3 游戏手柄功能开发
- Android打包部分机型问题,游戏界面在锁屏界面之上的解决方案