forked from PAWPAW-Mirror/lib_xua
Trigger reset from endpoint 0.
This commit is contained in:
@@ -19,6 +19,7 @@
|
|||||||
#include "audiostream.h"
|
#include "audiostream.h"
|
||||||
#include "vendorrequests.h"
|
#include "vendorrequests.h"
|
||||||
#include "dfu_types.h"
|
#include "dfu_types.h"
|
||||||
|
#include "xc_ptr.h"
|
||||||
|
|
||||||
/* Windows does not have a built in DFU driver (windows will prompt), so warn that DFU will not be functional in Audio 1.0 mode.
|
/* Windows does not have a built in DFU driver (windows will prompt), so warn that DFU will not be functional in Audio 1.0 mode.
|
||||||
* Of course, OSX is unaffected.
|
* Of course, OSX is unaffected.
|
||||||
@@ -94,6 +95,9 @@ unsigned g_curUsbSpeed = 0;
|
|||||||
void VendorHostActive(int active);
|
void VendorHostActive(int active);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Global used for signalling reset to decouple */
|
||||||
|
extern unsigned g_iap_reset;
|
||||||
|
|
||||||
/* Used when setting/clearing EP halt */
|
/* Used when setting/clearing EP halt */
|
||||||
void SetEndpointStatus(unsigned epNum, unsigned status)
|
void SetEndpointStatus(unsigned epNum, unsigned status)
|
||||||
{
|
{
|
||||||
@@ -797,7 +801,10 @@ void Endpoint0( chanend c_ep0_out, chanend c_ep0_in, chanend c_audioControl, cha
|
|||||||
|
|
||||||
if (retVal < 0)
|
if (retVal < 0)
|
||||||
{
|
{
|
||||||
|
int iap_reset = 1;
|
||||||
g_curUsbSpeed = XUD_ResetEndpoint(ep0_in, ep0_out);
|
g_curUsbSpeed = XUD_ResetEndpoint(ep0_in, ep0_out);
|
||||||
|
SET_SHARED_GLOBAL(g_iap_reset, iap_reset);
|
||||||
|
//printstrln("Resetting");
|
||||||
|
|
||||||
g_config = 0;
|
g_config = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -158,6 +158,7 @@ int midi_from_host_usb_ep = 0;
|
|||||||
|
|
||||||
#ifdef IAP
|
#ifdef IAP
|
||||||
#ifdef IAP_BUFFERED
|
#ifdef IAP_BUFFERED
|
||||||
|
unsigned g_iap_reset = 0;
|
||||||
unsigned g_iap_from_host_flag = 0;
|
unsigned g_iap_from_host_flag = 0;
|
||||||
unsigned g_iap_to_host_flag = 0;
|
unsigned g_iap_to_host_flag = 0;
|
||||||
int iap_to_host_usb_ep = 0;
|
int iap_to_host_usb_ep = 0;
|
||||||
@@ -672,6 +673,7 @@ void decouple(chanend c_mix_out,
|
|||||||
|
|
||||||
int is_ack_iap;
|
int is_ack_iap;
|
||||||
int is_reset;
|
int is_reset;
|
||||||
|
int iap_reset;
|
||||||
unsigned int datum_iap;
|
unsigned int datum_iap;
|
||||||
int iap_data_remaining_to_device = 0;
|
int iap_data_remaining_to_device = 0;
|
||||||
int iap_data_collected_from_device = 0;
|
int iap_data_collected_from_device = 0;
|
||||||
@@ -764,7 +766,6 @@ void decouple(chanend c_mix_out,
|
|||||||
|
|
||||||
// send the current host -> device buffer out of the fifo
|
// send the current host -> device buffer out of the fifo
|
||||||
XUD_SetReady(iap_from_host_usb_ep, 1);
|
XUD_SetReady(iap_from_host_usb_ep, 1);
|
||||||
iap_send_reset(c_iap);
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -1172,6 +1173,12 @@ void decouple(chanend c_mix_out,
|
|||||||
|
|
||||||
#ifdef IAP
|
#ifdef IAP
|
||||||
#ifdef IAP_BUFFERED
|
#ifdef IAP_BUFFERED
|
||||||
|
GET_SHARED_GLOBAL(iap_reset, g_iap_reset);
|
||||||
|
if (iap_reset) {
|
||||||
|
iap_send_reset(c_iap); // What if this happen in the middle of a send/ack?
|
||||||
|
iap_reset = 0;
|
||||||
|
SET_SHARED_GLOBAL(g_iap_reset, iap_reset); // Reset has been signalled
|
||||||
|
}
|
||||||
// Need to handle sending ZLP on iap_to_host_usb_ep_int to signal iOS device to collect from bulk endpoint.
|
// Need to handle sending ZLP on iap_to_host_usb_ep_int to signal iOS device to collect from bulk endpoint.
|
||||||
/* Check if buffer() has send IAP packet to host */
|
/* Check if buffer() has send IAP packet to host */
|
||||||
GET_SHARED_GLOBAL(iap_to_host_flag, g_iap_to_host_flag);
|
GET_SHARED_GLOBAL(iap_to_host_flag, g_iap_to_host_flag);
|
||||||
|
|||||||
Reference in New Issue
Block a user