经过几天的忙活,终于把GamePad调通了。
硬件用的是电脑圈圈的USB开发板STC89C52+PDIUSBD12.
由于按键有限,所以只用了上、下、左、右四个方向跟四个按键,晚上还玩了会kof97.
首先把hid的子类代码跟协议代码都置为0.
接着,修改HID的报告描述符。
code char JoyStickReportDescriptor[54] = {
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
//用途,GamePad
0x09, 0x05, // USAGE (Game Pad)
//集合
0xa1, 0x01, // COLLECTION (Application)
//指针设备
0x09, 0x01, // USAGE (Pointer)
//集合
0xa1, 0x00, // COLLECTION (Physical)
//X座标跟Y座标
0x09, 0x30, // USAGE (X)
0x09, 0x31, // USAGE (Y)
//一共有九个方向3*3
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x02, // LOGICAL_MAXIMUM (2)
//X/Y各用两位来表示
0x75, 0x02, // REPORT_SIZE (2)
0x95, 0x02, // REPORT_COUNT (2)
0x81, 0x02, // INPUT (Data,Var,Abs)
0xc0, // END_COLLECTION
//高四位填充
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x04, // REPORT_COUNT (4)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
//四个按键
0x05, 0x09, // USAGE_PAGE (Button)
0x19, 0x01, // USAGE_MINIMUM (Button 1)
0x29, 0x04, // USAGE_MAXIMUM (Button 4)
0x15, 0x00, // LOGICAL_MINIMUM (0)
0x25, 0x01, // LOGICAL_MAXIMUM (1)
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x04, // REPORT_COUNT (4)
0x81, 0x02, // INPUT (Data,Var,Abs)
//高四位填充
0x75, 0x01, // REPORT_SIZE (1)
0x95, 0x04, // REPORT_COUNT (4)
0x81, 0x03, // INPUT (Cnst,Var,Abs)
0xc0 // END_COLLECTION
};
数据格式:
Byte1 bit7-bit4 常量填充 bi3-bit0 X/Y座标
Byte2 bit7-bit4 常量填充 bi3-bit0 四个按键状态
用户377235 2014-4-20 23:21
用户310250 2010-11-4 18:36
用户546181 2009-3-30 18:31
用户1364249 2009-3-27 23:01