From bbe27fc357941a527a8edd92d56cfab421ea60a1 Mon Sep 17 00:00:00 2001 From: Werner Almesberger Date: Fri, 10 Jun 2011 21:50:42 -0300 Subject: [PATCH] atusb/fw: revert most of the user_setups change and use simple callback instead This allows us to do other things as well, e.g., change state. - ep0.c (ep0_init), usb/dfu.c (dfu_init): use user_setup - usb/atu2.c (usb_poll): no need to reset user_setup - the user's reset function can do that - usb/usb.h (user_setups), usb/usb.c (handle_setup): removed user_setups - usb/usb.h (user_set_interface), usb/usb.c (user_set_interface, handle_setup): callback for SET_INTERFACE --- atusb/fw/ep0.c | 2 +- atusb/fw/usb/atu2.c | 1 - atusb/fw/usb/dfu.c | 2 +- atusb/fw/usb/usb.c | 7 +++---- atusb/fw/usb/usb.h | 2 +- 5 files changed, 6 insertions(+), 8 deletions(-) diff --git a/atusb/fw/ep0.c b/atusb/fw/ep0.c index b41f85f..81c2a3f 100644 --- a/atusb/fw/ep0.c +++ b/atusb/fw/ep0.c @@ -209,5 +209,5 @@ static int my_setup(const struct setup_request *setup) void ep0_init(void) { - user_setups[0] = my_setup; + user_setup = my_setup; } diff --git a/atusb/fw/usb/atu2.c b/atusb/fw/usb/atu2.c index f626864..6ab9146 100644 --- a/atusb/fw/usb/atu2.c +++ b/atusb/fw/usb/atu2.c @@ -190,7 +190,6 @@ void usb_poll(void) if (flags & (1 << EORSTI)) { if (user_reset) user_reset(); - user_setup = NULL; ep_init(); UDINT &= ~(1 << EORSTI); } diff --git a/atusb/fw/usb/dfu.c b/atusb/fw/usb/dfu.c index a70c52b..0ba2b81 100644 --- a/atusb/fw/usb/dfu.c +++ b/atusb/fw/usb/dfu.c @@ -280,7 +280,7 @@ static void my_reset(void) void dfu_init(void) { - user_setups[0] = my_setup; + user_setup = my_setup; user_get_descriptor = my_descr; user_reset = my_reset; } diff --git a/atusb/fw/usb/usb.c b/atusb/fw/usb/usb.c index b127069..8239735 100644 --- a/atusb/fw/usb/usb.c +++ b/atusb/fw/usb/usb.c @@ -36,7 +36,7 @@ extern void panic(void); #endif int (*user_setup)(const struct setup_request *setup); -int (*user_setups[2])(const struct setup_request *setup); +void (*user_set_interface)(int nth); int (*user_get_descriptor)(uint8_t type, uint8_t index, const uint8_t **reply, uint8_t *size); void (*user_reset)(void); @@ -145,7 +145,8 @@ int handle_setup(const struct setup_request *setup) p += p[0]) { if (p[2] == setup->wIndex && p[3] == setup->wValue) { - user_setup = user_setups[i]; + if (user_set_interface) + user_set_interface(i); return 1; } i++; @@ -170,8 +171,6 @@ int handle_setup(const struct setup_request *setup) default: if (user_setup) return user_setup(setup); - if (user_setups[0]) - return user_setups[0](setup); return 0; } diff --git a/atusb/fw/usb/usb.h b/atusb/fw/usb/usb.h index 8808e06..8b7eebc 100644 --- a/atusb/fw/usb/usb.h +++ b/atusb/fw/usb/usb.h @@ -133,7 +133,7 @@ extern const uint8_t config_descriptor[]; extern struct ep_descr eps[]; extern int (*user_setup)(const struct setup_request *setup); -extern int (*user_setups[2])(const struct setup_request *setup); +extern void (*user_set_interface)(int nth); extern int (*user_get_descriptor)(uint8_t type, uint8_t index, const uint8_t **reply, uint8_t *size); extern void (*user_reset)(void);