summaryrefslogtreecommitdiff
path: root/src/memory/memory_resource.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-09-26 11:23:53 +1000
committerjacqueline <me@jacqueline.id.au>2023-09-26 11:23:53 +1000
commitf6d06421090f88094aba76b72b04d614f54efafa (patch)
tree6eabf0f6a9f69773289eb4ae616c9f1d771db9c3 /src/memory/memory_resource.cpp
parent2849399d5470bcd9646bf6a4f0f861e3029a5135 (diff)
downloadtangara-fw-f6d06421090f88094aba76b72b04d614f54efafa.tar.gz
Prepare for PMR with a memory_resource that understands heap_caps_malloc
Diffstat (limited to 'src/memory/memory_resource.cpp')
-rw-r--r--src/memory/memory_resource.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/memory/memory_resource.cpp b/src/memory/memory_resource.cpp
new file mode 100644
index 00000000..74c0bc48
--- /dev/null
+++ b/src/memory/memory_resource.cpp
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2023 jacqueline <me@jacqueline.id.au>
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#include "memory_resource.hpp"
+
+#include <memory_resource>
+#include <string>
+#include <utility>
+
+#include <esp_heap_caps.h>
+#include <stdint.h>
+
+namespace memory {
+
+Resource kSpiRamResource{Capabilities::kSpiRam};
+
+void* Resource::do_allocate(std::size_t bytes, std::size_t alignment) {
+ return heap_caps_malloc(bytes, std::to_underlying(caps_));
+}
+
+void Resource::do_deallocate(void* p,
+ std::size_t bytes,
+ std::size_t alignment) {
+ heap_caps_free(p);
+}
+
+bool Resource::do_is_equal(const std::pmr::memory_resource& other) const {
+ return this == &other;
+}
+
+} // namespace memory