From 661e5bf50bab879e04d83b91195d2d7ca174b98e Mon Sep 17 00:00:00 2001 From: gblues Date: Sun, 17 Dec 2017 22:15:21 -0800 Subject: [PATCH] Implement new functions in hid_driver_t in WiiU driver == DETAILS This implements the WiiU-specific functions. Since the wiiu_hid_t data structure contains the handle and interface index, the method signatures can be simplified quite a bit. And since (at least for now) we want these to be synchronous, we don't need to expose the callback parameters. --- input/drivers_hid/wiiu_hid.c | 47 +++++++++++++++++++++++++++++++----- input/input_driver.h | 2 +- wiiu/include/wiiu/syshid.h | 2 +- 3 files changed, 43 insertions(+), 8 deletions(-) diff --git a/input/drivers_hid/wiiu_hid.c b/input/drivers_hid/wiiu_hid.c index 6e1f8923b8..6b53877d89 100644 --- a/input/drivers_hid/wiiu_hid.c +++ b/input/drivers_hid/wiiu_hid.c @@ -133,13 +133,44 @@ static void wiiu_hid_poll(void *data) (void)data; } -static void wiiu_hid_device_send_control(void *data, - uint8_t *buffer, - size_t buffer_size) { - struct wiiu_adapter *adapter = (struct wiiu_adapter *)data; +static int32_t wiiu_hid_set_report(void *data, uint8_t report_type, report_id, + void *report_data, uint32_t report_length) +{ + wiiu_hid_t *hid = (wiiu_hid_t)data; - if(!adapter) - return; + if(!hid) + return -1; + + return HIDSetReport(hid->handle, + report_type, + report_id, + report_data, + report_length, + NULL, NULL); +} + +static int32_t wiiu_hid_set_idle(void *data, uint8_t duration) +{ + wiiu_hid_t *hid = (wiiu_hid_t)data; + if(!hid) + return -1; + + return HIDSetIdle(hid->handle, + hid->interface_index, + duration, + NULL, NULL); +} + +static int32_t wiiu_hid_set_protocol(void *data, uint8_t protocol) +{ + wiiu_hid_t *hid = (wiiu_hid_t)data; + if(!hid) + return -1; + + return HIDSetProtocol(hid->handle, + hid->interface_index, + protocol, + NULL, NULL); } static void start_polling_thread(wiiu_hid_t *hid) { @@ -419,4 +450,8 @@ hid_driver_t wiiu_hid = { wiiu_hid_joypad_rumble, wiiu_hid_joypad_name, "wiiu", + NULL, // send_control + wiiu_hid_set_report, + wiiu_hid_set_idle, + wiiu_hid_set_protocol }; diff --git a/input/input_driver.h b/input/input_driver.h index 28711502aa..38d1401d67 100644 --- a/input/input_driver.h +++ b/input/input_driver.h @@ -195,7 +195,7 @@ struct hid_driver const char *ident; void (*send_control)(void *data, uint8_t *buf, size_t size); int32_t (*set_report)(void *, uint8_t, uint8_t, void *, uint32_t); - int32_t (*set_idle)(void *, uint8_t, uint8_t); + int32_t (*set_idle)(void *, uint8_t); int32_t (*set_protocol)(void *, uint8_t); }; diff --git a/wiiu/include/wiiu/syshid.h b/wiiu/include/wiiu/syshid.h index 385f42acab..a940225dfa 100644 --- a/wiiu/include/wiiu/syshid.h +++ b/wiiu/include/wiiu/syshid.h @@ -104,7 +104,7 @@ HIDSetIdle(uint32_t handle, int32_t HIDSetProtocol(uint32_t handle, - uint8_t int32_terface_index, + uint8_t interface_index, uint8_t protocol, HIDCallback hc, void *p_user);