aboutsummaryrefslogtreecommitdiff
path: root/lib/pbdrv/ext
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pbdrv/ext')
-rw-r--r--lib/pbdrv/ext/freertos/include.cmake9
-rw-r--r--lib/pbdrv/ext/freertos/pb-mem.c31
-rw-r--r--lib/pbdrv/ext/freertos/pb-mod.c9
-rw-r--r--lib/pbdrv/ext/stdlib/include.cmake2
-rw-r--r--lib/pbdrv/ext/stdlib/pb-mem.c25
5 files changed, 76 insertions, 0 deletions
diff --git a/lib/pbdrv/ext/freertos/include.cmake b/lib/pbdrv/ext/freertos/include.cmake
new file mode 100644
index 0000000..e7ab7fd
--- /dev/null
+++ b/lib/pbdrv/ext/freertos/include.cmake
@@ -0,0 +1,9 @@
+target_sources(pbdrv PRIVATE "${CMAKE_CURRENT_LIST_DIR}/pb-mem.c")
+target_link_libraries(pbdrv
+ freertos_kernel
+ freertos_kernel_include
+ freertos_config
+ )
+
+target_sources(pbdrv-mod PRIVATE "${CMAKE_CURRENT_LIST_DIR}/pb-mod.c")
+
diff --git a/lib/pbdrv/ext/freertos/pb-mem.c b/lib/pbdrv/ext/freertos/pb-mem.c
new file mode 100644
index 0000000..b18d79f
--- /dev/null
+++ b/lib/pbdrv/ext/freertos/pb-mem.c
@@ -0,0 +1,31 @@
+#include <FreeRTOS.h>
+
+#include "../../pb-mem.h"
+#include "../../pb-types.h"
+
+inline void * pb_malloc(size_t sz) {
+ return pvPortMalloc(sz);
+}
+
+inline void pb_free(void * ptr) {
+ vPortFree(ptr);
+}
+
+__weak inline void * pb_realloc(void * ptr, size_t sz) {
+ return NULL; // shit out of luck (don't use mpack_writer_init_growable)
+}
+
+__weak void * pb_memcpy(void * dest, const void * src, size_t sz) {
+ for (size_t offset = 0; offset < sz; offset++)
+ *((char*) dest + offset) = *((char*) src + offset);
+ return dest;
+}
+
+__weak int pb_memcmp(const void * a, const void * b, size_t sz) {
+ for (size_t offset = 0; offset < sz; offset++) {
+ int diff = *((char*) a + offset) - *((char*) b + offset);
+ if (diff != 0) return diff;
+ }
+ return 0;
+}
+
diff --git a/lib/pbdrv/ext/freertos/pb-mod.c b/lib/pbdrv/ext/freertos/pb-mod.c
new file mode 100644
index 0000000..75495be
--- /dev/null
+++ b/lib/pbdrv/ext/freertos/pb-mod.c
@@ -0,0 +1,9 @@
+#include <FreeRTOS.h>
+#include <task.h>
+
+#include "../../pb-types.h"
+
+__weak void pb_mod_blocking_delay_ms(unsigned long ms) {
+ vTaskDelay(ms / portTICK_PERIOD_MS);
+}
+
diff --git a/lib/pbdrv/ext/stdlib/include.cmake b/lib/pbdrv/ext/stdlib/include.cmake
new file mode 100644
index 0000000..67fe80e
--- /dev/null
+++ b/lib/pbdrv/ext/stdlib/include.cmake
@@ -0,0 +1,2 @@
+target_sources(pbdrv PRIVATE "${CMAKE_CURRENT_LIST_DIR}/pb-mem.c")
+
diff --git a/lib/pbdrv/ext/stdlib/pb-mem.c b/lib/pbdrv/ext/stdlib/pb-mem.c
new file mode 100644
index 0000000..b260c2c
--- /dev/null
+++ b/lib/pbdrv/ext/stdlib/pb-mem.c
@@ -0,0 +1,25 @@
+#include <stdlib.h>
+#include <string.h>
+
+#include "../../pb-mem.h"
+
+inline void * pb_malloc(size_t sz) {
+ return malloc(sz);
+}
+
+inline void pb_free(void * ptr) {
+ free(ptr);
+}
+
+inline void * pb_realloc(void * ptr, size_t sz) {
+ return realloc(ptr, sz);
+}
+
+void * pb_memcpy(void * dest, const void * src, size_t sz) {
+ return memcpy(dest, src, sz);
+}
+
+int pb_memcmp(const void * a, const void * b, size_t sz) {
+ return memcmp(a, b, sz);
+}
+