[app][mdebug] handle some usb edge cases
This commit is contained in:
@@ -44,7 +44,7 @@ static udc_endpoint_t *rxept;
|
||||
static volatile int online;
|
||||
static volatile int txstatus;
|
||||
static volatile int rxstatus;
|
||||
static volatile unsigned rxactual;
|
||||
static volatile int rxactual;
|
||||
|
||||
static void mdebug_notify(udc_gadget_t *gadget, unsigned event) {
|
||||
if (event == UDC_EVENT_ONLINE) {
|
||||
@@ -67,44 +67,39 @@ static void tx_complete(udc_request_t *req, unsigned actual, int status) {
|
||||
|
||||
#if TX_AHEAD
|
||||
void usb_xmit(void *data, unsigned len) {
|
||||
//printf(">%d>\n", len);
|
||||
event_wait(&txevt);
|
||||
event_unsignal(&txevt);
|
||||
txreq->buffer = data;
|
||||
txreq->length = len;
|
||||
txstatus = 1;
|
||||
udc_request_queue(txept, txreq);
|
||||
//printf(">%d>QUEUED\n", len);
|
||||
if (udc_request_queue(txept, txreq)) {
|
||||
printf("txqf\n");
|
||||
event_signal(&txevt, 0);
|
||||
}
|
||||
}
|
||||
#else
|
||||
void usb_xmit(void *data, unsigned len) {
|
||||
//printf(">%d>\n", len);
|
||||
event_unsignal(&txevt);
|
||||
txreq->buffer = data;
|
||||
txreq->length = len;
|
||||
txstatus = 1;
|
||||
udc_request_queue(txept, txreq);
|
||||
if (udc_request_queue(txept, txreq) == 0) {
|
||||
event_wait(&txevt);
|
||||
//printf(">%d>%s\n", len, txstatus ? "ERR" : "");
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
unsigned usb_recv(void *data, unsigned len) {
|
||||
//printf("<%d<\n", len);
|
||||
int usb_recv(void *data, unsigned len) {
|
||||
event_unsignal(&rxevt);
|
||||
rxreq->buffer = data;
|
||||
rxreq->length = len;
|
||||
rxstatus = 1;
|
||||
udc_request_queue(rxept, rxreq);
|
||||
event_wait(&rxevt);
|
||||
#if 0
|
||||
if (rxstatus) {
|
||||
printf("<%d<ERR\n", len);
|
||||
} else {
|
||||
printf("<%d<%d\n", len, rxactual);
|
||||
if (udc_request_queue(rxept, rxreq)) {
|
||||
printf("rxqf\n");
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
return rxactual;
|
||||
event_wait(&rxevt);
|
||||
return rxstatus ? rxstatus : rxactual;
|
||||
}
|
||||
|
||||
static udc_device_t mdebug_device = {
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#include "rswdp.h"
|
||||
|
||||
void usb_xmit(void *data, unsigned len);
|
||||
unsigned usb_recv(void *data, unsigned len);
|
||||
int usb_recv(void *data, unsigned len);
|
||||
|
||||
unsigned swdp_trace = 0;
|
||||
|
||||
@@ -226,7 +226,7 @@ void handle_rswd(void) {
|
||||
#endif
|
||||
|
||||
if ((rxc < 4) || (rxc & 3)) {
|
||||
printf("error, runt frame, or strange frame... %x\n", rxc);
|
||||
printf("error, runt frame, or strange frame... %d\n", rxc);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user