多手柄输入(20150515、20150610、20150827)

来源:互联网 发布:如何连接条形码数据库 编辑:程序博客网 时间:2024/05/21 17:19
Joystick测试程序,可检测Joystick的各种输入JoyStickTest
包含多按钮识别 控制杆方位提取DirectInputJS
joyGetPosEx返回操纵杆位置扩展信息
joyGetPos返回操纵杆位置及按钮活动
joyGetNumDevs返回操纵杆数目
joyGetDevCaps确定操纵杆是否可用
joyGetThreshold返回操纵杆运动临界值
joySetThreshold设置操纵杆运动临界值
DirectX中的dinput.h关于游戏杆操作的LPDIRECTINPUT8,JoystickIn

1.13.4输入系统
1、键盘
DirectInput
直接访问式
缓冲式
1.13.5鼠标与操纵杆
缓冲式输入用来处理按钮和点击,而直接访问数据则来处理轴。


Unity中多个Joystick的识别问题?
依次打开菜单栏中的Edit|Project Settings|Input项,打开输入管理器。
Unity默认为用户创建了若干映射了摇杆按钮的虚拟按键,包括Fire1、Fire2、Fire3、Jump以及虚拟轴Horizontal和Vertical,可以在脚本里直接使用它们。
Unity4.6.4中默认创建了18个输入轴(其它版本有15个、25个)。
通过更改Size参数来设置轴的数量。单击轴名称会显示设置参数。
Horizontal轴有两个
Vertical轴有两个
第一个Horizontal轴的参数设置如下:
负按钮:left
正按钮:right
备选负按钮:a
备选正按钮:d
重力:3
死亡:0.001
灵敏度:3
捕捉:启用
反向:不启用
类型:键或鼠标按钮
轴:x轴
操作杆:joystick 1
第一个Vertical轴的参数设置如下:
负按钮:down
正按钮:up
备选负按钮:s
备选正按钮:w
重力:3
死亡:0.001
灵敏度:3
捕捉:启用
反向:不启用
类型:键或鼠标按钮
轴:x轴
操作杆:joystick 1
第二个Horizontal轴的参数设置如下:
重力:0
死亡:0.19
灵敏度:1
捕捉:不启用
反向:不启用
类型:joystick轴
轴:x轴
操作杆:joystick 1
第二个Vertical轴的参数设置如下:
重力:0
死亡:0.19
灵敏度:1
捕捉:不启用
反向:启用
类型:joystick轴
轴:y轴
操作杆:joystick 1
新增2个轴:
Horizontal2轴的参数设置如下:
重力:0
死亡:0.19
灵敏度:1
捕捉:不启用
反向:不启用
类型:joystick轴
轴:x轴
操作杆:joystick 2
Vertical2轴的参数设置如下:
重力:0
死亡:0.19
灵敏度:1
捕捉:不启用
反向:启用
类型:joystick轴
轴:y轴
操作杆:joystick 2
手柄模式(左上LED灯亮)下A,B,X,Y在PC上的KeyCode值分别为0,1,3,4,例如:
public const KeyCode Joystick1Button0 = 350;
public const KeyCode Joystick1Button1 = 351;
public const KeyCode Joystick1Button3 = 353;
public const KeyCode Joystick1Button4 = 354;
public const KeyCode Joystick2Button0 = 370;
public const KeyCode Joystick2Button1 = 371;
public const KeyCode Joystick2Button3 = 373;
public const KeyCode Joystick2Button4 = 374;
public const KeyCode Joystick3Button0 = 390;
public const KeyCode Joystick3Button1 = 391;
public const KeyCode Joystick3Button3 = 393;
public const KeyCode Joystick3Button4 = 394;


键盘模式(右下LED灯亮)按键对应
L1
KeyCode=12,按键’5’,KEYCODE_5
L2
KeyCode=14,按键’7’,KEYCODE_7
R1
KeyCode=13,按键’6’,KEYCODE_6
R2
KeyCode=15,按键’8’,KEYCODE_8
W,KeyCode=51
KEYCODE_W 按键'W' 51
A,KeyCode=29
KEYCODE_A 按键'A' 29
S,KeyCode=47
KEYCODE_S 按键'S' 47
D,KeyCode=32
KEYCODE_D 按键'D' 32
X,keycode=8
KEYCODE_1 按键'1' 8
A,keycode=9
KEYCODE_2 按键'2' 9
B,keycode=10
KEYCODE_3 按键'3' 10
Y,keycode=11
KEYCODE_4 按键'4' 11
左下角摇杆
KEYCODE_DPAD_UP 导航键 向上 19
KEYCODE_DPAD_DOWN 导航键 向下 20
KEYCODE_DPAD_LEFT 导航键 向左 21
KEYCODE_DPAD_RIGHT 导航键 向右 22
按下:
KEYCODE_9 按键'9' 16
右下角摇杆
KEYCODE_I 按键'I' 37
KEYCODE_J 按键'J' 38
KEYCODE_K 按键'K' 39
KEYCODE_L 按键'L' 40
按下:
KEYCODE_0 按键'0' 7
SELECT
KEYCODE_ESCAPE ESC键 111
START
KEYCODE_ENTER 回车键 66
iCade模式(苹果模式)(左下LED灯亮)
手柄模式(左上LED灯亮)按键对应
SELECT键,KeyCode=109
START键,KeyCode=108
动作按键
A,KeyCode=96
B,KeyCode=97
X,KeyCode=99
Y,KeyCode=100
L1
KeyCode=102
L2
KeyCode=104
R1
KeyCode=103
R2
KeyCode=105
操控模式(鼠标+多媒体)(右上LED灯亮)按键对应
鼠标左键:L1,KeyCode=102
鼠标右键:R1,KeyCode=103
播放/暂停:L2,KeyCode=104
播放/暂停:R2,KeyCode=105
音量加:Y,KeyCode=100
音量减:A,KeyCode=96
下一曲:B,KeyCode=97
上一曲:X,KeyCode=99
SELECT键,KeyCode=109
START键,KeyCode=108

 游戏控制器
1、罗技F510
按钮
X,A,B,Y是1,2,3,4
LB,RB,LT,RT是5,6,7,8
BACK是9
START是10
左摇杆按下是11
右摇杆按下是12
2、Bluetooth Gamepad
按钮
X,A,B,Y是4,1,2,5
LB,RB,LT,RT是7,8,9,10
SELECT是11
START是12
左摇杆按下是14
右摇杆按下是15
3、八手柄(显示有4个USB GAMEPAD控制器)
X轴
Y轴
Z轴
Z旋转
1
11
罗技F510
X,A,B,Y在PC上的KeyCode值分别为0,1,2,3(第一个:),
第一个左摇杆:
h轴
Joystick Axis
X axis
Joystick 1
v轴
Joystick Axis
Y axis
Joystick 1
第一个右摇杆:
h轴
Joystick Axis
3th axis(Joysticks and Scrollwheel)
Joystick 1
v轴
Joystick Axis
4th axis(Joysticks)
Joystick 1
蓝牙手柄
X,A,B,Y在PC上的KeyCode值分别为3,0,1,4(第二个:),
第二个左摇杆:
h轴
Joystick Axis
X axis
Joystick 2
v轴
Joystick Axis
Y axis
Joystick 1
第二个右摇杆:
h轴
Joystick Axis
3th axis(Joysticks and Scrollwheel)
Joystick 2
v轴
Joystick Axis
4th axis(Joysticks)
Joystick 2

Win7台式机:
Finding HDEVINFO available Device...
Symbolic link is: \\?\hid#vid_046d&pid_c077#6&1485bcad&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
Found the 1th  HID device
ProductID=0xc077  VendorID=0x46d  VersionNumber=0x7200
HID Opened OK!
CloseHandle worked!

系统中HID类的GUID标识为:4d1e55b2-f16f-11cf-88cb-001111000030
正在查找可用的USB设备...
找到了一个USB设备:
设备路径:\\?\hid#vid_046d&pid_c077#6&1485bcad&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
打开设备路径出错!
找到了一个USB设备:
设备路径:\\?\hid#vid_046d&pid_c218#6&344c74f8&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
供应商ID        :0X046D
产品ID  :0XC218
产品版本号:0X0220
生产商: Logitech
产品名称:       Logitech Rumblepad 2 USB
CAP信息如下:
     InputReportByteLength 9
     OutputReportByteLength 8
00-80-7f-80-7f-08-00-00-ff
左摇杆h轴左边00-80,h轴右边80-ff
左摇杆v轴上边00-7f,v轴下边7f-ff
右摇杆h轴左边00-80,h轴右边80-ff
右摇杆v轴上边00-7f,v轴下边7f-ff
X按下18弹起08,A按下28弹起08,B按下48弹起08,Y按下88弹起08
LB按下01弹起00,RB按下02弹起00,LT按下04弹起00,RT按下08弹起00

系统中HID类的GUID标识为:4d1e55b2-f16f-11cf-88cb-001111000030
正在查找可用的USB设备...
找到了一个USB设备:
设备路径:\\?\hid#vid_0079&pid_0006#6&291ca5a8&0&0000#{4d1e55b2-f16f-11cf-88cb-00
1111000030}
供应商ID        :0X0079
产品ID  :0X0006
产品版本号:0X0107
生产商: DragonRise Inc.
产品名称:       Generic   USB  Joystick
CAP信息如下:
     InputReportByteLength 9
     OutputReportByteLength 8
灯不亮非摇杆模式
00-7f-7f-87-7f-7f-0f-00-c0
灯亮摇杆模式00-80-80-88-80-80-0f-00-40
左摇杆h轴左边00-80,h轴右边80-ff
左摇杆v轴上边00-80,v轴下边80-ff
右摇杆h轴左边00-80,h轴右边80-ff
右摇杆v轴上边00-80,v轴下边80-ff
1按下1f弹起0f,2按下2f弹起0f,3按下4f弹起0f,4按下8f弹起0f
SELECT按下10弹起00,5按下01弹起00,6按下02弹起00,7按下04弹起00,7按下08弹起00

找到了一个USB设备:
设备路径:\\?\hid#vid_046d&pid_c31c&mi_00#7&2a680a4a&0&0000#{4d1e55b2-f16f-11cf-8
8cb-001111000030}
打开设备路径出错!
找到了一个USB设备:
设备路径:\\?\hid#vid_046d&pid_c31c&mi_01&col01#7&690cc88&0&0000#{4d1e55b2-f16f-1
1cf-88cb-001111000030}
供应商ID        :0X046D
产品ID  :0XC31C
产品版本号:0X6400
生产商: Logitech
产品名称:       USB Keyboard
CAP信息如下:
     InputReportByteLength 2
     OutputReportByteLength 0

Win8笔记本:
Finding HDEVINFO available Device...
Symbolic link is: \\?\hid#vid_24ae&pid_2000&mi_00#8&3441d38a&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
Found the 1th  HID device
ProductID=0x2000  VendorID=0x24ae  VersionNumber=0x1001
HID Opened OK!
CloseHandle worked!


Bus Hound 5.0使用说明书(版本:1.0)
编制:古道热肠
版权所有:21IC侃单片机板块
完成日期:2007年7月
一、功能介绍
BusHound软件是由美国perisoft公司研制的一种专用于PC机各种总线数据包监视和控制的开发工具软件,其名“hound”的中文意思为“猎犬”,即指其能敏锐地感知到总线的丝毫变化。
本说明书以其5.0作为蓝本,进行功能说明。
Bus Hound是一个超级软件总线协议分析器,用于捕获来自设备的协议包和输入输出操作,其优良特性如下:
支持所有版本的IDE,SCSI,USB,1394总线
支持各类设备如硬盘库,DVD,鼠标,扫描仪,网络照相机等
支持Windows操作系统
捕获数据的总量仅受机器内存限制
可以设置触发信号自动停止捕获操作
测试读取,同步等设备性能
捕获设备驱动包,例如IRP
捕获任意数量的并行设备,而不管其总线类型
身材苗条,易于交换与下载
捕获的数据能保存为文本文件或ZIP文件
所有可捕获设备以树形结构列出,让选择设备来得更轻松些
可捕获设备的启动过程
用户爱好设定功能
查看底层协议包括SCSI的sense数据和USB的设置包
查看每阶段的时间变化精确到微秒
将输入输出发生的操作实时显示到屏幕上
纯软件解决方案,你不需要对硬件进行任何变更,一些依旧
二、捕获窗口操作指南
单击主界面窗口上部命令按钮区的Capture按钮进入捕获操作主视窗。
一个命令发送到设备通常由1个或几个阶段来完成。
捕获数据列表,以下将描述捕获窗口中每一列的功能
1、设备列
设备ID,每个设备分配了一个数字,设备的ID分配在Device窗口中完成。
对于USB设备,设备的端点同时显示出来
2、阶段列
阶段类型,请参考下表为每个阶段缩写获知详细的细节信息
3、数据列  
与每个阶段对应的数据显示在此列中,例如命令字节,数据传输字节,和状态字节都能在此窗口中显示出来。
4、描述列
与每个阶段对应的文本说明给你带来极大的便利
5、时间微分值Delta(dt)
从前一阶段到当前阶段所花费的时间均显示在此列中,时间单位的缩写对照表见下表:
us,微秒
ms,毫秒
sc,秒
mn,分钟
hr,小时
dy,天
6、命令相位
7、日期
8、时间
捕获系统启动过程   
当退出Bus Hound应用程序时,Run按钮处于按下状态时,设备驱动部分继续捕获数据,当系统进行重启时,它将早于系统启动过程进行数据捕获操作。
当退出Bus Hound应用程序时,Stop按钮处于按下状态时,启动过程不会发生数据捕获操作,直到按下了启动按钮。
捕获数据显示窗口的用户爱好设定
数据列表的列顺序能通过拖拉列顶部到合适位置进行改变。每行字节显示宽度能被修改为1,2,4,8,16或者32,这些设定被保存。
查找功能
能够在捕获窗口进行数据查找操作
窗口支持拖选操作
命令交迭
多输入输出阶段
PS2鼠标数据格式
以下是PS/2鼠标返回的数据格式,这就是Windows DDK中定义的MOUSE_INPUT_DATA结构体
PS2键盘数据格式
以下是PS/2键盘返回的数据格式,这就是Windows DDK中定义的KEYBOARD_INPUT_DATA结构体
三、保存数据窗口
四、系统设定窗口
系统设定窗口提供用户进行参数设置。复选框选中后立即生效,数字输入需按压应用按钮或切换到另一个窗体时或退出Bus Hound时生效。
五、设备窗口
设备列表指示处Bus Hound能支持的当前系统中的每一个设备,列表自动更新,反映出是否插入或移除设备。选择操作立即生效。
每个设备被指定一个数字绑定到设备名的前面,这个数字在捕获窗口中将显示在设备列下,这个数字用来指示设备加入系统顺序。
当出现设备以亮字体显示时,指示设备不在当前的系统中。
捕获新设备
选中此项将自动捕获检测到的新设备的数据,这项特色功能尤其适用于发送到热插拔设备的第1个命令。
设备属性
这个面板将显示设备的一些细节特性,比如“传输性能表现”。
发送命令
让你提交命令到USB,1394,ATA和SCSI设备易如反掌。

Vinyson手柄
原生Android App:
1-9键按下和弹起:keycode=188-196,scancode=288-296
1-9键长按:keycode=23,scancode=288-296
左摇杆:
Up:keycode=19,scancode=0
Down:keycode=20,scancode=0
Left:keycode=21,scancode=0
Right:keycode=22,scancode=0

  // 获取设备实例ID=DeviceInstanceId:HID\VID_0079&PID_0006\6&21906F32&2&0000(手柄2002插在下面的USB口,JoyIndex=1),DeviceInstanceId:HID\VID_0079&PID_0006\6&ED6BE8D&2&0000(手柄2002插在上面的USB口,JoyIndex=0)            
  bool bRet5 =API.SetupDiGetDeviceInstanceId(hDevInfo,strtInterfaceData, DeviceInstanceId, DeviceInstanceId.Capacity, IntPtr.Zero);

OutputReportLength:8
InputReportLength:9
16
DeviceID:HID\VID_0079&PID
1000
DeviceID:HID\VID_0079&PID_0006&REV_0107
系统中HID类的GUID标识为:4d1e55b2-f16f-11cf-88cb-001111000030
正在查找可用的USB设备...
找到了一个USB设备:
设备路径:\\?\hid#vid_0079&pid_0006#6&21906f32&2&0000#{4d1e55b2-f16f-11cf-88cb-00
1111000030}
供应商ID        :0X0079
产品ID  :0X0006
产品版本号:0X0107
生产商: DragonRise Inc.
产品名称:       Generic   USB  Joystick
CAP信息如下:
     InputReportByteLength 9
     OutputReportByteLength 8
00-7f-7f-7e-7f-7f-0f-00-c0
1、2、3、4键按下/弹起:1f/0f,2f/0f,4f/0f,8f/0f
5、6、7、8、SELECT键按下/弹起:01/00,02/00,04/00,08/00,10/00
左、右键按下/弹起:00/7f,ff/7f
上、下键按下/弹起:00/7f,ff/7f

带游戏卡手柄:
private final int m_VendorID = 4300;//0X10CC
private final int m_ProductID =21762;//0X5502
private final int m_ProductID2 =21772;//0X550C
0000905060a0b0a0//尾号为1的光滑卡
0000909050f06040//尾号为1的不光滑卡
00009050705030e0//尾号为4的干净卡
0000905000b06060//尾号为4的不干净卡
0000905030e05070//尾号为5的卡
00009090806010c0//尾号为6的光滑卡
0000905000a0a0b0//尾号为6的不光滑卡
0000905000e08080//尾号为7的卡
0000909050e0a000//尾号为8的卡
系统中HID类的GUID标识为:4d1e55b2-f16f-11cf-88cb-001111000030
正在查找可用的USB设备...
找到了一个USB设备:
设备路径:\\?\hid#vid_10cc&pid_5502&mi_01#8&3b528403&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
供应商ID        :0X10CC
产品ID  :0X5502
产品版本号:0X0572
生产商:
产品名称:       BAI LIAN LONG
CAP信息如下:
InputReportByteLength 18//加手柄号之前的17个字节
     InputReportByteLength 19//加手柄号之后的18个字节
     OutputReportByteLength 5
00-00-00-0f-80-80-80-80-00-00-00-00-00-00-00-00-00-00//加手柄号之前的17个字节
00-00-00-0f-80-80-80-80-00-00-00-00-90-90-80-60-10-c0-02//加手柄号之后的18个字节,00009090806010c0//尾号为6的光滑卡
00-00-00-0f-80-80-80-80-00-00-00-00-90-50-00-e0-80-80-01//0000905000e08080//尾号为7的卡
第2个字节表示4个按键(0上、1右、2下、3左)的按下/弹起:10/00,02/00,01/00,08/00
组合键0+1的按下/弹起:12/00
组合键0+2的按下/弹起:11/00
组合键0+3的按下/弹起:18/00
组合键1+2的按下/弹起:03/00
组合键1+3的按下/弹起:0a/00
组合键2+3的按下/弹起:09/00
组合键0+1+2的按下/弹起:13/00
组合键0+1+3的按下/弹起:1a/00
组合键0+2+3的按下/弹起:19/00
组合键1+2+3的按下/弹起:0b/00
组合键0+1+2+3的按下/弹起:1b/00
第5个字节表示LH轴:00-80-ff
第6个字节表示LV轴:00-80-ff


0 0
原创粉丝点击