Set_Idle request handled (incomplete reports sent instead of NAK)

This commit is contained in:
Larry Snizek
2019-10-08 21:16:33 +01:00
parent 2a960700c5
commit b592c943f8
3 changed files with 46 additions and 1 deletions

View File

@@ -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

26
lib_xua/src/hid/hid.xc Normal file
View File

@@ -0,0 +1,26 @@
#include <xs1.h>
#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;
}

View File

@@ -0,0 +1,9 @@
#include <xs1.h>
#include <xccompat.h>
#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);