diff --git a/lib_xua/src/core/endpoint0/xua_endpoint0.c b/lib_xua/src/core/endpoint0/xua_endpoint0.c index b5d1d8b7..c59886c6 100755 --- a/lib_xua/src/core/endpoint0/xua_endpoint0.c +++ b/lib_xua/src/core/endpoint0/xua_endpoint0.c @@ -60,6 +60,10 @@ extern void device_reboot(void); #endif +#if HID_CONTROLS +#include "xua_hid.h" +#endif + unsigned int DFU_mode_active = 0; // 0 - App active, 1 - DFU active /* Global volume and mute tables */ @@ -321,7 +325,6 @@ void XUA_Endpoint0_lite_init(chanend c_ep0_out, chanend c_ep0_in, chanend c_audi DFU_mode_active = 1; } #endif - } void XUA_Endpoint0_loop(XUD_Result_t result, USB_SetupPacket_t sp, chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl, @@ -989,12 +992,19 @@ void XUA_Endpoint0_lite_loop(XUD_Result_t result, USB_SetupPacket_t sp, chanend device_reboot(); } } +#endif +#if HID_CONTROLS + if (interfaceNum == INTERFACE_NUMBER_HID) + { + result = HidInterfaceClassRequests(ep0_out, ep0_in, &sp); + } #endif /* Check for: - Audio CONTROL interface request - always 0, note we check for DFU first * - Audio STREAMING interface request (In or Out) * - Audio endpoint request (Audio 1.0 Sampling freq requests are sent to the endpoint) */ if(((interfaceNum == 0) || (interfaceNum == 1) || (interfaceNum == 2)) + && result == XUD_RES_ERR #if (XUA_DFU_EN == 1) && !DFU_mode_active #endif diff --git a/lib_xua/src/hid/hid.xc b/lib_xua/src/hid/hid.xc new file mode 100644 index 00000000..d7cda428 --- /dev/null +++ b/lib_xua/src/hid/hid.xc @@ -0,0 +1,26 @@ +#include +#include "xud.h" +#include "hid.h" +#include "xud_std_requests.h" +#include "xua_hid.h" + +static unsigned hidSetIdle = 0; + +unsigned HidIsSetIdleSilenced(void) +{ + return hidSetIdle; +} + +XUD_Result_t HidInterfaceClassRequests(XUD_ep c_ep0_out, XUD_ep c_ep0_in, + USB_SetupPacket_t &sp) +{ + switch (sp.bRequest) { + case HID_SET_IDLE: + printstrln("HID_SET_IDLE\n"); + hidSetIdle = 1; // TODO implement duration + return XUD_DoSetRequestStatus(c_ep0_in); + default: + break; + } + return XUD_RES_ERR; +} diff --git a/lib_xua/src/hid/xua_hid.h b/lib_xua/src/hid/xua_hid.h new file mode 100644 index 00000000..df89dc55 --- /dev/null +++ b/lib_xua/src/hid/xua_hid.h @@ -0,0 +1,9 @@ +#include +#include +#include "xud.h" +#include "xud_std_requests.h" + +XUD_Result_t HidInterfaceClassRequests(XUD_ep c_ep0_out, XUD_ep c_ep0_in, + REFERENCE_PARAM(USB_SetupPacket_t, sp)); + +unsigned HidIsSetIdleSilenced(void);