From 940708d0dc1d1fb86e4326488b0c5d8c6d87bdb7 Mon Sep 17 00:00:00 2001
From: Rahix <rahix@rahix.de>
Date: Thu, 4 Jul 2019 12:48:14 +0200
Subject: [PATCH] fix(epicardium): Reenable cdcacm

---
 epicardium/cdcacm.c | 12 ++++++++++++
 epicardium/serial.c |  6 +++++-
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/epicardium/cdcacm.c b/epicardium/cdcacm.c
index 5bc8f706..fd0f2d86 100644
--- a/epicardium/cdcacm.c
+++ b/epicardium/cdcacm.c
@@ -172,6 +172,8 @@ void cdcacm_init(void)
 
     /* Start with USB in low power mode */
     usb_app_sleep();
+    /* TODO: Fix priority */
+    NVIC_SetPriority(USB_IRQn, 6);
     NVIC_EnableIRQ(USB_IRQn);
 }
 
@@ -338,9 +340,19 @@ static int usb_read_callback(void)
 }
 
 /******************************************************************************/
+#include "FreeRTOS.h"
+#include "task.h"
+
+extern TaskHandle_t serial_task_id;
 void USB_IRQHandler(void)
 {
     usb_event_handler();
+
+    if (serial_task_id != NULL) {
+        BaseType_t xHigherPriorityTaskWoken = pdFALSE;
+        vTaskNotifyGiveFromISR(serial_task_id, &xHigherPriorityTaskWoken);
+        portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
+    }
 }
 
 /******************************************************************************/
diff --git a/epicardium/serial.c b/epicardium/serial.c
index 0b956422..ac9e1ce0 100644
--- a/epicardium/serial.c
+++ b/epicardium/serial.c
@@ -13,7 +13,7 @@
 #include "queue.h"
 
 /* Task ID for the serial handler */
-TaskHandle_t serial_task_id;
+TaskHandle_t serial_task_id = NULL;
 
 /* The serial console in use (UART0) */
 extern mxc_uart_regs_t* ConsoleUart;
@@ -109,5 +109,9 @@ void vSerialTask(void*pvParameters)
 		while (UART_NumReadAvail(ConsoleUart) > 0) {
 			enqueue_char(UART_ReadByte(ConsoleUart));
 		}
+
+		while (cdcacm_num_read_avail() > 0) {
+			enqueue_char(cdcacm_read());
+		}
 	}
 }
-- 
GitLab