summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <thach@tinyusb.org>2021-02-04 16:00:14 +0700
committerhathach <thach@tinyusb.org>2021-02-04 16:00:14 +0700
commit8d7b1f9e8c9545468305443ae6cae3d653ead8d2 (patch)
treec515494a15b2f4b28a18c88c2af78aa87c5c2cec
parente699a598905c95eb8249e89e436030376a518239 (diff)
add usb_background_schedule()
unconditionally schedule usb background after background_callback_reset()
-rwxr-xr-xmain.c1
-rw-r--r--supervisor/shared/background_callback.c5
-rw-r--r--supervisor/shared/usb/usb.c13
-rw-r--r--supervisor/usb.h3
4 files changed, 13 insertions, 9 deletions
diff --git a/main.c b/main.c
index d9cdcca1d..f85109e2f 100755
--- a/main.c
+++ b/main.c
@@ -184,6 +184,7 @@ STATIC void stop_mp(void) {
#endif
background_callback_reset();
+ usb_background_schedule();
gc_deinit();
}
diff --git a/supervisor/shared/background_callback.c b/supervisor/shared/background_callback.c
index 44709b60b..68a0a9667 100644
--- a/supervisor/shared/background_callback.c
+++ b/supervisor/shared/background_callback.c
@@ -105,9 +105,6 @@ void background_callback_end_critical_section() {
CALLBACK_CRITICAL_END;
}
-extern background_callback_t usb_callback;
-extern void usb_background_do(void* unused);
-
void background_callback_reset() {
CALLBACK_CRITICAL_BEGIN;
background_callback_t *cb = (background_callback_t*)callback_head;
@@ -120,8 +117,6 @@ void background_callback_reset() {
callback_tail = NULL;
in_background_callback = false;
CALLBACK_CRITICAL_END;
-
- background_callback_add(&usb_callback, usb_background_do, NULL);
}
void background_callback_gc_collect(void) {
diff --git a/supervisor/shared/usb/usb.c b/supervisor/shared/usb/usb.c
index af34f2598..9cbb295c8 100644
--- a/supervisor/shared/usb/usb.c
+++ b/supervisor/shared/usb/usb.c
@@ -93,16 +93,21 @@ void usb_background(void) {
}
}
-/*static*/ background_callback_t usb_callback;
-/*static*/ void usb_background_do(void* unused) {
+static background_callback_t usb_callback;
+static void usb_background_do(void* unused) {
usb_background();
}
-void usb_irq_handler(void) {
- tud_int_handler(0); \
+void usb_background_schedule(void)
+{
background_callback_add(&usb_callback, usb_background_do, NULL);
}
+void usb_irq_handler(void) {
+ tud_int_handler(0);
+ usb_background_schedule();
+}
+
//--------------------------------------------------------------------+
// tinyusb callbacks
//--------------------------------------------------------------------+
diff --git a/supervisor/usb.h b/supervisor/usb.h
index ccb35470c..1c709926a 100644
--- a/supervisor/usb.h
+++ b/supervisor/usb.h
@@ -35,6 +35,9 @@
// it may be necessary to call it directly.
void usb_background(void);
+// Schedule usb background
+void usb_background_schedule(void);
+
// Ports must call this from their particular USB IRQ handler
void usb_irq_handler(void);