From c4845400ede3986987e1a591d0b347172803df85 Mon Sep 17 00:00:00 2001
From: Rahix <rahix@rahix.de>
Date: Wed, 7 Apr 2021 21:48:21 +0200
Subject: [PATCH] chore(epicardium): Move core OS code into an `os` subdir

---
 Documentation/epicardium/mutex.rst      | 2 +-
 epicardium/api/control.c                | 2 +-
 epicardium/api/genapi.py                | 2 +-
 epicardium/ble/ble.c                    | 4 ++--
 epicardium/ble/ble_adv.c                | 4 ++--
 epicardium/ble/ble_attc.c               | 2 +-
 epicardium/ble/ble_main.c               | 4 ++--
 epicardium/ble/bondings.c               | 2 +-
 epicardium/ble/epic_att_api.c           | 2 +-
 epicardium/ble/epic_ble_api.c           | 2 +-
 epicardium/ble/ess.c                    | 3 ++-
 epicardium/ble/filetransfer.c           | 2 +-
 epicardium/ble/hid.c                    | 2 +-
 epicardium/ble/hid_work.c               | 2 +-
 epicardium/fs/filesystem_fat.c          | 4 ++--
 epicardium/l0der/l0der.c                | 2 +-
 epicardium/main.c                       | 5 +++--
 epicardium/meson.build                  | 2 ++
 epicardium/modules/bhi.c                | 2 +-
 epicardium/modules/bme680.c             | 2 +-
 epicardium/modules/bsec.c               | 4 ++--
 epicardium/modules/buttons.c            | 2 +-
 epicardium/modules/dispatcher.c         | 4 ++--
 epicardium/modules/gpio.c               | 2 +-
 epicardium/modules/hardware.c           | 2 +-
 epicardium/modules/hw-lock.c            | 4 ++--
 epicardium/modules/interrupts.c         | 4 ++--
 epicardium/modules/lifecycle.c          | 6 +++---
 epicardium/modules/light_sensor.c       | 3 ++-
 epicardium/modules/max30001.c           | 4 ++--
 epicardium/modules/max86150.c           | 2 +-
 epicardium/modules/meson.build          | 5 -----
 epicardium/modules/modules.h            | 8 +-------
 epicardium/modules/pmic.c               | 4 ++--
 epicardium/modules/rtc.c                | 2 +-
 epicardium/modules/serial.c             | 2 +-
 epicardium/modules/sleep.c              | 2 +-
 epicardium/modules/stream.c             | 4 ++--
 epicardium/modules/usb.c                | 4 ++--
 epicardium/modules/watchdog.c           | 2 +-
 epicardium/{modules => os}/config.c     | 4 ++--
 epicardium/{modules => os}/config.h     | 0
 epicardium/{modules => os}/log.c        | 2 +-
 epicardium/{modules => os}/log.h        | 0
 epicardium/os/meson.build               | 7 +++++++
 epicardium/{modules => os}/mutex.c      | 2 +-
 epicardium/{modules => os}/mutex.h      | 0
 epicardium/{modules => os}/panic.c      | 2 +-
 epicardium/{modules => os}/work_queue.c | 4 ++--
 epicardium/os/work_queue.h              | 9 +++++++++
 epicardium/support.c                    | 2 +-
 epicardium/usb/cdcacm.c                 | 2 +-
 epicardium/usb/epc_usb.c                | 2 +-
 epicardium/usb/mass_storage.c           | 2 +-
 54 files changed, 85 insertions(+), 75 deletions(-)
 rename epicardium/{modules => os}/config.c (99%)
 rename epicardium/{modules => os}/config.h (100%)
 rename epicardium/{modules => os}/log.c (97%)
 rename epicardium/{modules => os}/log.h (100%)
 create mode 100644 epicardium/os/meson.build
 rename epicardium/{modules => os}/mutex.c (98%)
 rename epicardium/{modules => os}/mutex.h (100%)
 rename epicardium/{modules => os}/panic.c (99%)
 rename epicardium/{modules => os}/work_queue.c (94%)
 create mode 100644 epicardium/os/work_queue.h

diff --git a/Documentation/epicardium/mutex.rst b/Documentation/epicardium/mutex.rst
index 928730b0..42447c75 100644
--- a/Documentation/epicardium/mutex.rst
+++ b/Documentation/epicardium/mutex.rst
@@ -23,7 +23,7 @@ look at the :ref:`mutex-design-reasons`.
 
 Definitions
 -----------
-.. c:autodoc:: epicardium/modules/mutex.h
+.. c:autodoc:: epicardium/os/mutex.h
 
 .. _mutex-design-reasons:
 
diff --git a/epicardium/api/control.c b/epicardium/api/control.c
index 5de74e84..0a024940 100644
--- a/epicardium/api/control.c
+++ b/epicardium/api/control.c
@@ -1,6 +1,6 @@
 #include "epicardium.h"
 #include "api/dispatcher.h"
-#include "modules/log.h"
+#include "os/log.h"
 
 #include "card10.h"
 
diff --git a/epicardium/api/genapi.py b/epicardium/api/genapi.py
index 9f24fa21..146c2195 100644
--- a/epicardium/api/genapi.py
+++ b/epicardium/api/genapi.py
@@ -246,7 +246,7 @@ void __dispatch_isr(api_int_id_t id)
     # Generate Dispatcher {{{
     with open(args.server, "w") as f_dispatcher:
         tmp = """\
-#include "modules/log.h"
+#include "os/log.h"
 #include "{header}"
 
 void __api_dispatch_call(uint32_t id, void*epc__apistub_buffer)
diff --git a/epicardium/ble/ble.c b/epicardium/ble/ble.c
index afe02ec2..335ecac8 100644
--- a/epicardium/ble/ble.c
+++ b/epicardium/ble/ble.c
@@ -1,6 +1,6 @@
 #include "epicardium.h"
-#include "modules/log.h"
-#include "modules/config.h"
+#include "os/log.h"
+#include "os/config.h"
 
 #include "fs/fs_util.h"
 #include "wsf_types.h"
diff --git a/epicardium/ble/ble_adv.c b/epicardium/ble/ble_adv.c
index 4aea57c5..cfa20d4b 100644
--- a/epicardium/ble/ble_adv.c
+++ b/epicardium/ble/ble_adv.c
@@ -1,7 +1,7 @@
 #include "ble_api.h"
 #include "epicardium.h"
-#include "modules/log.h"
-#include "modules/config.h"
+#include "os/log.h"
+#include "os/config.h"
 
 #include "wsf_types.h"
 #include "util/bstream.h"
diff --git a/epicardium/ble/ble_attc.c b/epicardium/ble/ble_attc.c
index 2cbf51a5..db0d0bf8 100644
--- a/epicardium/ble/ble_attc.c
+++ b/epicardium/ble/ble_attc.c
@@ -12,7 +12,7 @@
 #include "profiles/gap_api.h"
 #include "tipc/tipc_api.h"
 
-#include "modules/log.h"
+#include "os/log.h"
 /* card10:
  * copied from lib/sdk/Libraries/BTLE/stack/ble-profiles/sources/apps/tag/tag_main.c
  * and lib/sdk/Libraries/BTLE/stack/ble-profiles/sources/apps/watch/watch_main.c
diff --git a/epicardium/ble/ble_main.c b/epicardium/ble/ble_main.c
index 795aaa41..33dcd16e 100644
--- a/epicardium/ble/ble_main.c
+++ b/epicardium/ble/ble_main.c
@@ -39,8 +39,8 @@
 
 #include "ble_api.h"
 #include "epicardium.h"
-#include "modules/log.h"
-#include "modules/config.h"
+#include "os/log.h"
+#include "os/config.h"
 
 #define SCAN_REPORTS_NUM	16
 
diff --git a/epicardium/ble/bondings.c b/epicardium/ble/bondings.c
index 6dcc917b..431bef10 100644
--- a/epicardium/ble/bondings.c
+++ b/epicardium/ble/bondings.c
@@ -33,7 +33,7 @@
 #include "app_cfg.h"
 
 #include "epicardium.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "FreeRTOS.h"
 #include "timers.h"
 #include "mxc_sys.h"
diff --git a/epicardium/ble/epic_att_api.c b/epicardium/ble/epic_att_api.c
index 3cd3ebf2..ef811e42 100644
--- a/epicardium/ble/epic_att_api.c
+++ b/epicardium/ble/epic_att_api.c
@@ -1,6 +1,6 @@
 #include "ble_api.h"
 #include "epicardium.h"
-#include "modules/log.h"
+#include "os/log.h"
 
 #include "wsf_types.h"
 #include "util/bstream.h"
diff --git a/epicardium/ble/epic_ble_api.c b/epicardium/ble/epic_ble_api.c
index 9d27fe3b..3812863b 100644
--- a/epicardium/ble/epic_ble_api.c
+++ b/epicardium/ble/epic_ble_api.c
@@ -1,7 +1,7 @@
 #include "ble_api.h"
 
 #include "epicardium.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
 
 #include "wsf_buf.h"
diff --git a/epicardium/ble/ess.c b/epicardium/ble/ess.c
index 8b26a9f9..c8cd6eff 100644
--- a/epicardium/ble/ess.c
+++ b/epicardium/ble/ess.c
@@ -8,7 +8,8 @@
 #include "app_api.h"
 
 #include "epicardium.h"
-#include "modules/log.h"
+#include "os/log.h"
+#include "os/work_queue.h"
 #include "modules/modules.h"
 
 #include "ble/ble_api.h"
diff --git a/epicardium/ble/filetransfer.c b/epicardium/ble/filetransfer.c
index e3897c44..c92ce4e7 100644
--- a/epicardium/ble/filetransfer.c
+++ b/epicardium/ble/filetransfer.c
@@ -33,7 +33,7 @@
 #include "hci_vs.h"
 
 #include <epicardium.h>
-#include "modules/log.h"
+#include "os/log.h"
 
 #include "util/bstream.h"
 #include "att_api.h"
diff --git a/epicardium/ble/hid.c b/epicardium/ble/hid.c
index 56f51142..472b594f 100644
--- a/epicardium/ble/hid.c
+++ b/epicardium/ble/hid.c
@@ -10,7 +10,7 @@
 #include "svc_hid.h"
 #include "hid/hid_api.h"
 
-#include "modules/log.h"
+#include "os/log.h"
 
 #include <stdio.h>
 #include <string.h>
diff --git a/epicardium/ble/hid_work.c b/epicardium/ble/hid_work.c
index f4eeb2e7..8bce8d5a 100644
--- a/epicardium/ble/hid_work.c
+++ b/epicardium/ble/hid_work.c
@@ -2,7 +2,7 @@
 #include "cccd.h"
 
 #include "epicardium.h"
-#include "modules/log.h"
+#include "os/log.h"
 
 #include "dm_api.h"
 #include "att_api.h"
diff --git a/epicardium/fs/filesystem_fat.c b/epicardium/fs/filesystem_fat.c
index b85283af..e9627449 100644
--- a/epicardium/fs/filesystem_fat.c
+++ b/epicardium/fs/filesystem_fat.c
@@ -22,10 +22,10 @@
 #include "modules/filesystem.h"
 #include "epicardium.h"
 #include "card10.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
 #include "api/common.h"
-#include "modules/mutex.h"
+#include "os/mutex.h"
 
 #define SSLOG_DEBUG(...) LOG_DEBUG("fatfs", __VA_ARGS__)
 #define SSLOG_INFO(...) LOG_INFO("fatfs", __VA_ARGS__)
diff --git a/epicardium/l0der/l0der.c b/epicardium/l0der/l0der.c
index 5f10c441..f94ae051 100644
--- a/epicardium/l0der/l0der.c
+++ b/epicardium/l0der/l0der.c
@@ -6,7 +6,7 @@
 
 #include "epicardium.h"
 #include "l0der/elf.h"
-#include "modules/log.h"
+#include "os/log.h"
 
 /*
  * l0der is, in reality, a boneless operating-system style ELF loader.
diff --git a/epicardium/main.c b/epicardium/main.c
index ec9d8047..a9f32979 100644
--- a/epicardium/main.c
+++ b/epicardium/main.c
@@ -1,7 +1,8 @@
 #include "modules/modules.h"
-#include "modules/log.h"
+#include "os/log.h"
+#include "os/work_queue.h"
 #include "modules/filesystem.h"
-#include "modules/config.h"
+#include "os/config.h"
 #include "card10-version.h"
 
 #include "gfx.h"
diff --git a/epicardium/meson.build b/epicardium/meson.build
index f0140575..05a83935 100644
--- a/epicardium/meson.build
+++ b/epicardium/meson.build
@@ -67,6 +67,7 @@ freertos = static_library(
 
 subdir('modules/')
 subdir('ble/')
+subdir('os/')
 
 subdir('l0der/')
 
@@ -99,6 +100,7 @@ elf = executable(
   'fs/filesystem_fat.c',
   'fs/fs_util.c',
   module_sources,
+  os_sources,
   l0der_sources,
   ble_sources,
   version_hdr,
diff --git a/epicardium/modules/bhi.c b/epicardium/modules/bhi.c
index b894c520..4d919d41 100644
--- a/epicardium/modules/bhi.c
+++ b/epicardium/modules/bhi.c
@@ -12,7 +12,7 @@
 #include "queue.h"
 
 #include "epicardium.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
 #include "modules/stream.h"
 
diff --git a/epicardium/modules/bme680.c b/epicardium/modules/bme680.c
index 8671559f..22dd0900 100644
--- a/epicardium/modules/bme680.c
+++ b/epicardium/modules/bme680.c
@@ -1,6 +1,6 @@
 #include "epicardium.h"
 #include "modules/modules.h"
-#include "modules/log.h"
+#include "os/log.h"
 
 #include "card10.h"
 
diff --git a/epicardium/modules/bsec.c b/epicardium/modules/bsec.c
index 041ff9cf..cf38febe 100644
--- a/epicardium/modules/bsec.c
+++ b/epicardium/modules/bsec.c
@@ -8,8 +8,8 @@
 
 #include "epicardium.h"
 #include "modules.h"
-#include "config.h"
-#include "modules/log.h"
+#include "os/config.h"
+#include "os/log.h"
 
 #include "FreeRTOS.h"
 #include "task.h"
diff --git a/epicardium/modules/buttons.c b/epicardium/modules/buttons.c
index 0caa50c3..80a04c18 100644
--- a/epicardium/modules/buttons.c
+++ b/epicardium/modules/buttons.c
@@ -1,6 +1,6 @@
 #include "epicardium.h"
 #include "modules/modules.h"
-#include "modules/log.h"
+#include "os/log.h"
 
 #include "portexpander.h"
 #include "MAX77650-Arduino-Library.h"
diff --git a/epicardium/modules/dispatcher.c b/epicardium/modules/dispatcher.c
index 355bc047..83e9c8c4 100644
--- a/epicardium/modules/dispatcher.c
+++ b/epicardium/modules/dispatcher.c
@@ -1,5 +1,5 @@
-#include "modules/log.h"
-#include "modules/mutex.h"
+#include "os/log.h"
+#include "os/mutex.h"
 
 #include "api/dispatcher.h"
 
diff --git a/epicardium/modules/gpio.c b/epicardium/modules/gpio.c
index 72ce3ba6..6588d12a 100644
--- a/epicardium/modules/gpio.c
+++ b/epicardium/modules/gpio.c
@@ -4,7 +4,7 @@
 #include "mxc_sys.h"
 #include "adc.h"
 #include "mxc_errors.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
 
 /*
diff --git a/epicardium/modules/hardware.c b/epicardium/modules/hardware.c
index de0d9d21..42442638 100644
--- a/epicardium/modules/hardware.c
+++ b/epicardium/modules/hardware.c
@@ -3,7 +3,7 @@
 #include "api/dispatcher.h"
 #include "usb/epc_usb.h"
 #include "modules/filesystem.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
 #include "modules/stream.h"
 
diff --git a/epicardium/modules/hw-lock.c b/epicardium/modules/hw-lock.c
index 529963e3..de629f4a 100644
--- a/epicardium/modules/hw-lock.c
+++ b/epicardium/modules/hw-lock.c
@@ -1,6 +1,6 @@
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
-#include "modules/mutex.h"
+#include "os/mutex.h"
 
 #include "FreeRTOS.h"
 #include "task.h"
diff --git a/epicardium/modules/interrupts.c b/epicardium/modules/interrupts.c
index d65505ea..43aa5c88 100644
--- a/epicardium/modules/interrupts.c
+++ b/epicardium/modules/interrupts.c
@@ -1,5 +1,5 @@
-#include "modules/mutex.h"
-#include "modules/log.h"
+#include "os/mutex.h"
+#include "os/log.h"
 #include "epicardium.h"
 #include "api/interrupt-sender.h"
 #include <assert.h>
diff --git a/epicardium/modules/lifecycle.c b/epicardium/modules/lifecycle.c
index bcd4213f..a789a542 100644
--- a/epicardium/modules/lifecycle.c
+++ b/epicardium/modules/lifecycle.c
@@ -1,8 +1,8 @@
 #include "epicardium.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
-#include "modules/config.h"
-#include "modules/mutex.h"
+#include "os/config.h"
+#include "os/mutex.h"
 #include "api/dispatcher.h"
 #include "l0der/l0der.h"
 
diff --git a/epicardium/modules/light_sensor.c b/epicardium/modules/light_sensor.c
index e7ab899d..27b0a03b 100644
--- a/epicardium/modules/light_sensor.c
+++ b/epicardium/modules/light_sensor.c
@@ -1,5 +1,6 @@
 #include "epicardium.h"
-#include "modules/log.h"
+#include "os/log.h"
+#include "os/work_queue.h"
 #include "modules/modules.h"
 
 #include "mxc_config.h"
diff --git a/epicardium/modules/max30001.c b/epicardium/modules/max30001.c
index 1b6dfd7b..406e447f 100644
--- a/epicardium/modules/max30001.c
+++ b/epicardium/modules/max30001.c
@@ -12,10 +12,10 @@
 #include "queue.h"
 
 #include "epicardium.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
 #include "modules/stream.h"
-#include "modules/mutex.h"
+#include "os/mutex.h"
 
 /* Interrupt Pin */
 static const gpio_cfg_t max30001_interrupt_pin = {
diff --git a/epicardium/modules/max86150.c b/epicardium/modules/max86150.c
index 890aa7d2..95c23e5f 100644
--- a/epicardium/modules/max86150.c
+++ b/epicardium/modules/max86150.c
@@ -4,7 +4,7 @@
 #include "max86150.h"
 #include "epicardium.h"
 #include "modules.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/stream.h"
 #include "gpio.h"
 #include "pmic.h"
diff --git a/epicardium/modules/meson.build b/epicardium/modules/meson.build
index 73357b19..8b1110ce 100644
--- a/epicardium/modules/meson.build
+++ b/epicardium/modules/meson.build
@@ -3,7 +3,6 @@ module_sources = files(
   'bsec.c',
   'bme680.c',
   'buttons.c',
-  'config.c',
   'dispatcher.c',
   'display.c',
   'fileops.c',
@@ -14,11 +13,8 @@ module_sources = files(
   'leds.c',
   'lifecycle.c',
   'light_sensor.c',
-  'log.c',
   'max86150.c',
   'max30001.c',
-  'mutex.c',
-  'panic.c',
   'personal_state.c',
   'pmic.c',
   'rtc.c',
@@ -29,6 +25,5 @@ module_sources = files(
   'usb.c',
   'vibra.c',
   'watchdog.c',
-  'work_queue.c',
   'ws2812.c'
 )
diff --git a/epicardium/modules/modules.h b/epicardium/modules/modules.h
index 33c7526d..a873d372 100644
--- a/epicardium/modules/modules.h
+++ b/epicardium/modules/modules.h
@@ -3,7 +3,7 @@
 
 #include "FreeRTOS.h"
 #include "gpio.h"
-#include "modules/mutex.h"
+#include "os/mutex.h"
 #include "epicardium.h"
 
 #include <stdint.h>
@@ -150,10 +150,4 @@ void sleep_deepsleep(void);
 /* ---------- RNG ---------------------------------------------------------- */
 void rng_init(void);
 
-/* ---------- Work Queue --------------------------------------------------- */
-#define WORK_QUEUE_SIZE 20
-void workqueue_init(void);
-int workqueue_schedule(void (*func)(void *data), void *data);
-void vWorkQueueTask(void *pvParameters);
-
 #endif /* MODULES_H */
diff --git a/epicardium/modules/pmic.c b/epicardium/modules/pmic.c
index fba748f7..b80e6202 100644
--- a/epicardium/modules/pmic.c
+++ b/epicardium/modules/pmic.c
@@ -1,7 +1,7 @@
 #include "epicardium.h"
 #include "modules/modules.h"
-#include "modules/log.h"
-#include "modules/config.h"
+#include "os/log.h"
+#include "os/config.h"
 
 #include "card10.h"
 #include "pmic.h"
diff --git a/epicardium/modules/rtc.c b/epicardium/modules/rtc.c
index 7d75fd16..253ad652 100644
--- a/epicardium/modules/rtc.c
+++ b/epicardium/modules/rtc.c
@@ -1,5 +1,5 @@
 #include "epicardium.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
 
 #include "FreeRTOS.h"
diff --git a/epicardium/modules/serial.c b/epicardium/modules/serial.c
index 6be231d6..ad877674 100644
--- a/epicardium/modules/serial.c
+++ b/epicardium/modules/serial.c
@@ -1,5 +1,5 @@
 #include "epicardium.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
 
 #include "max32665.h"
diff --git a/epicardium/modules/sleep.c b/epicardium/modules/sleep.c
index abeea812..58c30e4d 100644
--- a/epicardium/modules/sleep.c
+++ b/epicardium/modules/sleep.c
@@ -1,6 +1,6 @@
 #include "epicardium.h"
 #include "modules/modules.h"
-#include "modules/log.h"
+#include "os/log.h"
 
 #include "card10.h"
 #include "simo.h"
diff --git a/epicardium/modules/stream.c b/epicardium/modules/stream.c
index 07f55f3a..5251b23a 100644
--- a/epicardium/modules/stream.c
+++ b/epicardium/modules/stream.c
@@ -4,9 +4,9 @@
 #include "queue.h"
 
 #include "epicardium.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/stream.h"
-#include "modules/mutex.h"
+#include "os/mutex.h"
 
 /* Internal buffer of registered streams */
 static struct stream_info *stream_table[SD_MAX];
diff --git a/epicardium/modules/usb.c b/epicardium/modules/usb.c
index a58e7d27..9d093b10 100644
--- a/epicardium/modules/usb.c
+++ b/epicardium/modules/usb.c
@@ -12,14 +12,14 @@
 #include "epicardium.h"
 
 #include "modules/filesystem.h"
-#include "modules/config.h"
+#include "os/config.h"
 
 #include "usb/cdcacm.h"
 #include "usb/mass_storage.h"
 #include "usb/descriptors.h"
 #include "usb/epc_usb.h"
 
-#include "modules/log.h"
+#include "os/log.h"
 
 #include "mx25lba.h"
 #include "msc.h"
diff --git a/epicardium/modules/watchdog.c b/epicardium/modules/watchdog.c
index fa8792cc..4c3bf235 100644
--- a/epicardium/modules/watchdog.c
+++ b/epicardium/modules/watchdog.c
@@ -1,4 +1,4 @@
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
 
 #include "timers.h"
diff --git a/epicardium/modules/config.c b/epicardium/os/config.c
similarity index 99%
rename from epicardium/modules/config.c
rename to epicardium/os/config.c
index e963d0dd..8c990336 100644
--- a/epicardium/modules/config.c
+++ b/epicardium/os/config.c
@@ -1,5 +1,5 @@
-#include "modules/log.h"
-#include "modules/config.h"
+#include "os/log.h"
+#include "os/config.h"
 #include "modules/filesystem.h"
 #include "epicardium.h"
 
diff --git a/epicardium/modules/config.h b/epicardium/os/config.h
similarity index 100%
rename from epicardium/modules/config.h
rename to epicardium/os/config.h
diff --git a/epicardium/modules/log.c b/epicardium/os/log.c
similarity index 97%
rename from epicardium/modules/log.c
rename to epicardium/os/log.c
index 888c68bf..63700616 100644
--- a/epicardium/modules/log.c
+++ b/epicardium/os/log.c
@@ -1,4 +1,4 @@
-#include "modules/log.h"
+#include "os/log.h"
 
 #include "FreeRTOS.h"
 #include "task.h"
diff --git a/epicardium/modules/log.h b/epicardium/os/log.h
similarity index 100%
rename from epicardium/modules/log.h
rename to epicardium/os/log.h
diff --git a/epicardium/os/meson.build b/epicardium/os/meson.build
new file mode 100644
index 00000000..37a211d7
--- /dev/null
+++ b/epicardium/os/meson.build
@@ -0,0 +1,7 @@
+os_sources = files(
+  'config.c',
+  'log.c',
+  'mutex.c',
+  'panic.c',
+  'work_queue.c',
+)
diff --git a/epicardium/modules/mutex.c b/epicardium/os/mutex.c
similarity index 98%
rename from epicardium/modules/mutex.c
rename to epicardium/os/mutex.c
index 9ce527f6..07175c93 100644
--- a/epicardium/modules/mutex.c
+++ b/epicardium/os/mutex.c
@@ -1,4 +1,4 @@
-#include "modules/mutex.h"
+#include "os/mutex.h"
 
 #include <assert.h>
 
diff --git a/epicardium/modules/mutex.h b/epicardium/os/mutex.h
similarity index 100%
rename from epicardium/modules/mutex.h
rename to epicardium/os/mutex.h
diff --git a/epicardium/modules/panic.c b/epicardium/os/panic.c
similarity index 99%
rename from epicardium/modules/panic.c
rename to epicardium/os/panic.c
index b365b223..64680989 100644
--- a/epicardium/modules/panic.c
+++ b/epicardium/os/panic.c
@@ -9,7 +9,7 @@
  * unrecoverable hardware conditions.
  */
 
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
 
 #include "card10.h"
diff --git a/epicardium/modules/work_queue.c b/epicardium/os/work_queue.c
similarity index 94%
rename from epicardium/modules/work_queue.c
rename to epicardium/os/work_queue.c
index 3af2c03c..461812bf 100644
--- a/epicardium/modules/work_queue.c
+++ b/epicardium/os/work_queue.c
@@ -1,6 +1,6 @@
 #include "epicardium.h"
-#include "modules/log.h"
-#include "modules.h"
+#include "os/log.h"
+#include "os/work_queue.h"
 
 #include "FreeRTOS.h"
 #include "queue.h"
diff --git a/epicardium/os/work_queue.h b/epicardium/os/work_queue.h
new file mode 100644
index 00000000..31d21c01
--- /dev/null
+++ b/epicardium/os/work_queue.h
@@ -0,0 +1,9 @@
+#ifndef _WORK_QUEUE_H
+#define _WORK_QUEUE_H
+
+#define WORK_QUEUE_SIZE 20
+void workqueue_init(void);
+int workqueue_schedule(void (*func)(void *data), void *data);
+void vWorkQueueTask(void *pvParameters);
+
+#endif
diff --git a/epicardium/support.c b/epicardium/support.c
index ac58cf03..4bb13b58 100644
--- a/epicardium/support.c
+++ b/epicardium/support.c
@@ -7,7 +7,7 @@
 
 #include "api/dispatcher.h"
 #include "modules/modules.h"
-#include "modules/log.h"
+#include "os/log.h"
 
 #include "card10.h"
 
diff --git a/epicardium/usb/cdcacm.c b/epicardium/usb/cdcacm.c
index d9095162..6bd17a13 100644
--- a/epicardium/usb/cdcacm.c
+++ b/epicardium/usb/cdcacm.c
@@ -16,7 +16,7 @@
 #include "usb_event.h"
 #include "cdc_acm.h"
 
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/modules.h"
 
 #include "FreeRTOS.h"
diff --git a/epicardium/usb/epc_usb.c b/epicardium/usb/epc_usb.c
index e9502436..3caac706 100644
--- a/epicardium/usb/epc_usb.c
+++ b/epicardium/usb/epc_usb.c
@@ -68,7 +68,7 @@
 #include "cdc_acm.h"
 
 #include "usb/descriptors.h"
-#include "modules/log.h"
+#include "os/log.h"
 #include "modules/filesystem.h"
 
 //#define USE_REMOTE_WAKE_ENABLE
diff --git a/epicardium/usb/mass_storage.c b/epicardium/usb/mass_storage.c
index b3c6c0f6..12c26ec2 100644
--- a/epicardium/usb/mass_storage.c
+++ b/epicardium/usb/mass_storage.c
@@ -7,7 +7,7 @@
 #include "usb/epc_usb.h"
 #include "usb/descriptors.h"
 
-#include "modules/log.h"
+#include "os/log.h"
 
 #include "msc.h"
 #include "usb.h"
-- 
GitLab