summaryrefslogtreecommitdiffstats
path: root/usb/endpt0.c
diff options
context:
space:
mode:
Diffstat (limited to 'usb/endpt0.c')
-rw-r--r--usb/endpt0.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/usb/endpt0.c b/usb/endpt0.c
index 7791d38..22d78df 100644
--- a/usb/endpt0.c
+++ b/usb/endpt0.c
@@ -7,6 +7,8 @@
#include <reg/gpio.h>
+#include "../uart/uart.h"
+
#include "bdt.h"
#include "endpt0.h"
@@ -131,29 +133,37 @@ static void tok_setup(struct tok_setup *setup)
{
switch (setup->reqtyp << 8 | setup->req) {
case 0x0005: /* SET ADDRESS */
+ uart_printf(" SET ADDRESS (%u)\n", (unsigned)setup->value);
nextaddr = setup->value;
puttx(NULL, 0);
break;
case 0x0009: /* SET CONFIGURATION */
+ uart_puts(" SET CONFIGURATION");
puttx(NULL, 0);
break;
case 0x8006: /* GET DESCRIPTOR */
+ uart_printf(" GET DESCRIPTOR (0x%x)", (unsigned)setup->value);
switch (setup->value) {
case 0x0100: /* DEVICE */
+ uart_puts(" DEVICE");
quetx(ds_dev, trunc(ARRLEN(ds_dev), setup->length));
return;
case 0x0200: /* CONFIGURATION */
+ uart_puts(" CONFIGURATION");
quetx(ds_conf, trunc(ARRLEN(ds_conf), setup->length));
return;
case 0x0300: /* STRING 0 */
+ uart_puts(" STRING 0");
quetx(ds_lang, trunc(ARRLEN(ds_lang), setup->length));
return;
case 0x0301: /* STRING 1 */
+ uart_puts(" STRING 1");
quetx(ds_str1, trunc(ARRLEN(ds_str1), setup->length));
return;
}
/* fall through */
default:
+ /* since this EP was called successfuly, we unstall it */
SET_BIT(USB0_ENDPT(0), ENDPT_EPSTALL);
break;
}
@@ -169,16 +179,19 @@ void usb_endpt0_token(uint8_t state)
switch (GET_BITS(bd->desc, BD_TOK_PID)) {
case BD_TOK_PID_OUT:
+ uart_puts(" PID_OUT");
bd->desc = USB0_BD_INIT(sizeof buf[0], 1);
break;
case BD_TOK_PID_IN:
- pushtx();
+ uart_puts(" PID_IN");
+ uart_printf(" pushtx: %d\n", (int)pushtx());
if (nextaddr) {
USB0_ADDR = nextaddr;
nextaddr = 0;
}
break;
case BD_TOK_PID_SETUP:
+ uart_puts(" PID_SETUP");
read_setup(&setup, bd->addr);
bd->desc = USB0_BD_INIT(sizeof buf[0], 1);
@@ -193,5 +206,6 @@ void usb_endpt0_token(uint8_t state)
break;
}
+ /*SET_BIT(USB0_CTL, CTL_ODDRST);*/
USB0_CTL = BV(CTL_USBENSOFEN);
}