diff --git a/module_usb_audio/endpoint0/endpoint0.c b/module_usb_audio/endpoint0/endpoint0.c index 86de6c94..5c70df08 100755 --- a/module_usb_audio/endpoint0/endpoint0.c +++ b/module_usb_audio/endpoint0/endpoint0.c @@ -343,6 +343,11 @@ void Endpoint0(chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl, /* Check the alt is in range */ if (sp.wValue <= IAP_EA_NATIVE_TRANS_ALT_COUNT) { + /* Reset all state of endpoints associated with this interface + * when changing an alternative setting. See USB 2.0 Spec 9.1.1.5 */ + XUD_ResetEpStateByAddr(ENDPOINT_ADDRESS_IN_IAP_EA_NATIVE_TRANS); + XUD_ResetEpStateByAddr(ENDPOINT_ADDRESS_OUT_IAP_EA_NATIVE_TRANS); + /* Send selected Alt interface number onto EA Native EP manager */ outuint(c_EANativeTransport_ctrl, (unsigned)sp.wValue); diff --git a/module_usb_audio/main.xc b/module_usb_audio/main.xc index 8666c2da..19468478 100755 --- a/module_usb_audio/main.xc +++ b/module_usb_audio/main.xc @@ -222,7 +222,7 @@ XUD_EpType epTypeTableIn[ENDPOINT_COUNT_IN] = { XUD_EPTYPE_CTL | XUD_STATUS_ENAB XUD_EPTYPE_BUL | XUD_STATUS_ENABLE, #endif #ifdef IAP_EA_NATIVE_TRANS - XUD_EPTYPE_BUL /*| XUD_STATUS_ENABLE*/, + XUD_EPTYPE_BUL | XUD_STATUS_ENABLE, #endif #endif };