From 706ffa9f3b986eff193377142459fbfde2362036 Mon Sep 17 00:00:00 2001 From: laforge Date: Fri, 22 Sep 2006 21:41:22 +0000 Subject: - move large rctx definitions to req_ctx.h - add more fine-grained debugging macros in pcd_enumarate.c - resolve race conditions between main-loop ep_refill and irq-triggered ep_refill by adding one irq-[b]locking variant - consolidate endpoint reset code into reset_ep() - add code to handle correct transmission and reception of usb transfers larger than endpoint size - use new jump address (0x104000) in DFU Cstartup.S - move main_usb to pcd subdirectory - fix include/compile.h make dependencies - make usb benchmark code use new large req_ctx git-svn-id: https://svn.openpcd.org:2342/trunk@219 6dc7ffe9-61d6-0310-9af1-9938baff3ed1 --- firmware/src/os/usb_benchmark.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'firmware/src/os/usb_benchmark.c') diff --git a/firmware/src/os/usb_benchmark.c b/firmware/src/os/usb_benchmark.c index bfc6b37..967efbb 100644 --- a/firmware/src/os/usb_benchmark.c +++ b/firmware/src/os/usb_benchmark.c @@ -21,6 +21,7 @@ #include #include #include +#include #include #include #include @@ -49,18 +50,30 @@ static void usbtest_tx_transfer(unsigned int num_pkts) static int usbtest_rx(struct req_ctx *rctx) { struct openpcd_hdr *poh = (struct openpcd_hdr *) rctx->data; + struct req_ctx *rctx_new; int i; switch (poh->cmd) { case OPENPCD_CMD_USBTEST_IN: + DEBUGP("USBTEST_IN "); /* test bulk in pipe */ - for (i = 0; i < poh->reg; i++) { - usbtest_tx_transfer(poh->val); - led_toggle(2); + if (poh->val > RCTX_SIZE_LARGE/AT91C_EP_OUT_SIZE) + poh->val = RCTX_SIZE_LARGE/AT91C_EP_OUT_SIZE; + rctx_new = req_ctx_find_get(1, RCTX_STATE_FREE, + RCTX_STATE_MAIN_PROCESSING); + if (!rctx_new) { + DEBUGP("NO RCTX "); + return USB_ERR(0); } + + rctx_new->tot_len = poh->val * AT91C_EP_OUT_SIZE; + req_ctx_set_state(rctx_new, RCTX_STATE_UDP_EP2_PENDING); + led_toggle(2); break; case OPENPCD_CMD_USBTEST_OUT: + DEBUGP("USBTEST_IN "); /* test bulk out pipe */ + return USB_ERR(USB_ERR_CMD_NOT_IMPL); break; } -- cgit v1.2.3