-
Notifications
You must be signed in to change notification settings - Fork 7
Description
When connect nintendo pro gamepad through BT, in below function
the size is always 12, and the data[0] is always 63(JC_INPUT_BUTTON_EVENT 0x3F)
static int joycon_ctlr_handle_event(struct joycon_ctlr *ctlr, u8 *data,
int size)
{
int ret = 0;
bool match = false;
struct joycon_input_report *report;
int i;
hid_info(ctlr->hdev, "[wurc]joycon_ctlr_handle_event:size[%d] data[0] %d\n", size, data[0]);
for(i =0; i < size; i++)
{
hid_info(ctlr->hdev, "[wurc]data[%d]=[%x] \n", i, data[i]);
}
//hid_info(ctlr->hdev, "wurc - joycon_ctlr_handle_event---1\n");
if (unlikely(mutex_is_locked(&ctlr->output_mutex)) &&
ctlr->msg_type != JOYCON_MSG_TYPE_NONE) {
switch (ctlr->msg_type) {
case JOYCON_MSG_TYPE_USB:
if (size < 2)
break;
if (data[0] == JC_INPUT_USB_RESPONSE &&
data[1] == ctlr->usb_ack_match)
match = true;
break;
case JOYCON_MSG_TYPE_SUBCMD:
hid_info(ctlr->hdev, "[wurc]JOYCON_MSG_TYPE_SUBCMD-1:size[%d] data[0] %d\n", size, data[0]);
if (size < sizeof(struct joycon_input_report) ||
data[0] != JC_INPUT_SUBCMD_REPLY)
break;
hid_info(ctlr->hdev, "[wurc]JOYCON_MSG_TYPE_SUBCMD-2\n");
report = (struct joycon_input_report )data;
hid_info(ctlr->hdev, "[wurc]JOYCON_MSG_TYPE_SUBCMD-3: replyCmd[%d]-sendCmd[%d]\n", report->subcmd_reply.id, ctlr->subcmd_ack_match);
if (report->subcmd_reply.id == ctlr->subcmd_ack_match)
match = true;
break;
default:
break;
}
if (match) {
hid_info(ctlr->hdev, "[wurc]joycon_ctlr_handle_event ---2\n");
memcpy(ctlr->input_buf, data,
min(size, (int)JC_MAX_RESP_SIZE));
ctlr->msg_type = JOYCON_MSG_TYPE_NONE;
ctlr->received_resp = true;
wake_up(&ctlr->wait);
hid_info(ctlr->hdev, "[wurc]joycon_ctlr_handle_event ---3\n");
/ This message has been handled */
return 1;
}
}
And we have checked the data, it is like below
3f 00 00 08 70 85 5f 8c 70 7c 3f 8a
3f 00 00 08 60 85 5f 8c 70 7c 2f 8a
3f 00 00 08 70 85 4f 8c 60 7c 5f 8a
3f 00 00 08 70 85 6f 8c 70 7c 3f 8a
3f 00 00 08 70 85 6f 8c 60 7c 4f 8a
3f 00 00 08 70 85 7f 8c 60 7c 3f 8a
3f 00 00 08 70 85 7f 8c 70 7c 3f 8a
3f 00 00 08 70 85 6f 8c 70 7c 4f 8a
...
While connected through USB, nintendo gamepad can works well and its data is like below
the data size is always 64
21 96 91 00 80 00 98 f8 71 ec e7 7a 0b 90 10 28
80 00 00 18 67 00 39 00 92 03 00 40 00 40 00 40
f3 ff 09 00 02 00 e7 3b e7 3b e7 3b 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
..
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size**[64]** data[0] 129
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 129
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 129
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 33
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 33
nintendo 0003:057E:2009.0012: [wurc]joycon_ctlr_handle_event:size[64] data[0] 48
Do you know what cause gamepad send wrong data? it seems that the size should be 64 and the data content is also wrong in BT connection.