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);