summaryrefslogtreecommitdiff
path: root/src/lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua')
-rw-r--r--src/lua/CMakeLists.txt2
-rw-r--r--src/lua/include/lua_registry.hpp51
-rw-r--r--src/lua/include/lua_thread.hpp34
-rw-r--r--src/lua/lua_queue.cpp3
-rw-r--r--src/lua/lua_thread.cpp47
-rw-r--r--src/lua/registry.cpp73
6 files changed, 127 insertions, 83 deletions
diff --git a/src/lua/CMakeLists.txt b/src/lua/CMakeLists.txt
index d89b22e8..ff0831c9 100644
--- a/src/lua/CMakeLists.txt
+++ b/src/lua/CMakeLists.txt
@@ -4,7 +4,7 @@
idf_component_register(
SRCS "lua_thread.cpp" "bridge.cpp" "property.cpp" "lua_database.cpp"
- "lua_queue.cpp" "lua_version.cpp" "lua_controls.cpp"
+ "lua_queue.cpp" "lua_version.cpp" "lua_controls.cpp" "registry.cpp"
INCLUDE_DIRS "include"
REQUIRES "drivers" "lvgl" "tinyfsm" "events" "system_fsm" "database"
"esp_timer" "battery" "esp-idf-lua" "luavgl" "lua-linenoise" "lua-term"
diff --git a/src/lua/include/lua_registry.hpp b/src/lua/include/lua_registry.hpp
new file mode 100644
index 00000000..abc5063e
--- /dev/null
+++ b/src/lua/include/lua_registry.hpp
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2023 jacqueline <me@jacqueline.id.au>
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#pragma once
+
+#include <memory>
+#include <string>
+
+#include "lua.hpp"
+
+#include "bridge.hpp"
+#include "lua_thread.hpp"
+#include "service_locator.hpp"
+
+namespace lua {
+
+class Registry {
+ public:
+ static auto instance(system_fsm::ServiceLocator&) -> Registry&;
+
+ auto uiThread() -> std::shared_ptr<LuaThread>;
+ auto newThread() -> std::shared_ptr<LuaThread>;
+
+ auto AddPropertyModule(
+ const std::string&,
+ std::vector<std::pair<std::string, std::variant<LuaFunction, Property*>>>)
+ -> void;
+
+ Registry(const Registry&) = delete;
+ Registry& operator=(const Registry&) = delete;
+
+ private:
+ Registry(system_fsm::ServiceLocator&);
+
+ system_fsm::ServiceLocator& services_;
+ std::unique_ptr<Bridge> bridge_;
+
+ std::shared_ptr<LuaThread> ui_thread_;
+ std::list<std::weak_ptr<LuaThread>> threads_;
+
+ std::vector<
+ std::pair<std::string,
+ std::vector<std::pair<std::string,
+ std::variant<LuaFunction, Property*>>>>>
+ modules_;
+};
+
+} // namespace lua
diff --git a/src/lua/include/lua_thread.hpp b/src/lua/include/lua_thread.hpp
index c12a0bfc..384de61d 100644
--- a/src/lua/include/lua_thread.hpp
+++ b/src/lua/include/lua_thread.hpp
@@ -10,9 +10,7 @@
#include <string>
#include "lua.hpp"
-#include "lvgl.h"
-#include "bridge.hpp"
#include "service_locator.hpp"
namespace lua {
@@ -43,36 +41,4 @@ class LuaThread {
lua_State* state_;
};
-class Registry {
- public:
- static auto instance(system_fsm::ServiceLocator&) -> Registry&;
-
- auto uiThread() -> std::shared_ptr<LuaThread>;
- auto newThread() -> std::shared_ptr<LuaThread>;
-
- auto AddPropertyModule(
- const std::string&,
- std::vector<
- std::pair<std::string, std::variant<LuaFunction, Property*>>>)
- -> void;
-
- Registry(const Registry&) = delete;
- Registry& operator=(const Registry&) = delete;
-
- private:
- Registry(system_fsm::ServiceLocator&);
-
- system_fsm::ServiceLocator& services_;
- std::unique_ptr<Bridge> bridge_;
-
- std::shared_ptr<LuaThread> ui_thread_;
- std::list<std::weak_ptr<LuaThread>> threads_;
-
- std::vector<
- std::pair<std::string,
- std::vector<std::pair<std::string,
- std::variant<LuaFunction, Property*>>>>>
- modules_;
-};
-
} // namespace lua
diff --git a/src/lua/lua_queue.cpp b/src/lua/lua_queue.cpp
index 69d3b03d..dfb820c2 100644
--- a/src/lua/lua_queue.cpp
+++ b/src/lua/lua_queue.cpp
@@ -16,6 +16,7 @@
#include "lua.h"
#include "lvgl.h"
+#include "bridge.hpp"
#include "database.hpp"
#include "event_queue.hpp"
#include "index.hpp"
@@ -70,4 +71,4 @@ auto RegisterQueueModule(lua_State* s) -> void {
lua_pop(s, 1);
}
-} // namespace lua \ No newline at end of file
+} // namespace lua
diff --git a/src/lua/lua_thread.cpp b/src/lua/lua_thread.cpp
index 7d64e3c5..dd72e41d 100644
--- a/src/lua/lua_thread.cpp
+++ b/src/lua/lua_thread.cpp
@@ -184,51 +184,4 @@ auto CallProtected(lua_State* s, int nargs, int nresults) -> int {
return ret;
}
-auto Registry::instance(system_fsm::ServiceLocator& s) -> Registry& {
- static Registry sRegistry{s};
- return sRegistry;
-}
-
-Registry::Registry(system_fsm::ServiceLocator& services)
- : services_(services), bridge_(new Bridge(services)) {}
-
-auto Registry::uiThread() -> std::shared_ptr<LuaThread> {
- if (!ui_thread_) {
- ui_thread_ = newThread();
- bridge_->installLvgl(ui_thread_->state());
- }
- return ui_thread_;
-}
-
-auto Registry::newThread() -> std::shared_ptr<LuaThread> {
- std::shared_ptr<LuaThread> thread{LuaThread::Start(services_)};
- bridge_->installBaseModules(thread->state());
- for (auto& module : modules_) {
- bridge_->installPropertyModule(thread->state(), module.first,
- module.second);
- }
- threads_.push_back(thread);
- return thread;
-}
-
-auto Registry::AddPropertyModule(
- const std::string& name,
- std::vector<std::pair<std::string, std::variant<LuaFunction, Property*>>>
- properties) -> void {
- modules_.push_back(std::make_pair(name, properties));
-
- // Any live threads will need to be updated to include the new module.
- auto it = threads_.begin();
- while (it != threads_.end()) {
- auto thread = it->lock();
- if (!thread) {
- // Thread has been destroyed; stop tracking it.
- it = threads_.erase(it);
- } else {
- bridge_->installPropertyModule(thread->state(), name, properties);
- it++;
- }
- }
-}
-
} // namespace lua
diff --git a/src/lua/registry.cpp b/src/lua/registry.cpp
new file mode 100644
index 00000000..a6487858
--- /dev/null
+++ b/src/lua/registry.cpp
@@ -0,0 +1,73 @@
+/*
+ * Copyright 2023 jacqueline <me@jacqueline.id.au>
+ *
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+
+#include "lua_registry.hpp"
+
+#include <iostream>
+#include <memory>
+
+#include "esp_heap_caps.h"
+#include "esp_log.h"
+#include "lua.hpp"
+
+#include "bridge.hpp"
+#include "event_queue.hpp"
+#include "memory_resource.hpp"
+#include "service_locator.hpp"
+#include "ui_events.hpp"
+
+namespace lua {
+
+[[maybe_unused]] static constexpr char kTag[] = "lua";
+
+auto Registry::instance(system_fsm::ServiceLocator& s) -> Registry& {
+ static Registry sRegistry{s};
+ return sRegistry;
+}
+
+Registry::Registry(system_fsm::ServiceLocator& services)
+ : services_(services), bridge_(new Bridge(services)) {}
+
+auto Registry::uiThread() -> std::shared_ptr<LuaThread> {
+ if (!ui_thread_) {
+ ui_thread_ = newThread();
+ bridge_->installLvgl(ui_thread_->state());
+ }
+ return ui_thread_;
+}
+
+auto Registry::newThread() -> std::shared_ptr<LuaThread> {
+ std::shared_ptr<LuaThread> thread{LuaThread::Start(services_)};
+ bridge_->installBaseModules(thread->state());
+ for (auto& module : modules_) {
+ bridge_->installPropertyModule(thread->state(), module.first,
+ module.second);
+ }
+ threads_.push_back(thread);
+ return thread;
+}
+
+auto Registry::AddPropertyModule(
+ const std::string& name,
+ std::vector<std::pair<std::string, std::variant<LuaFunction, Property*>>>
+ properties) -> void {
+ modules_.push_back(std::make_pair(name, properties));
+
+ // Any live threads will need to be updated to include the new module.
+ auto it = threads_.begin();
+ while (it != threads_.end()) {
+ auto thread = it->lock();
+ if (!thread) {
+ // Thread has been destroyed; stop tracking it.
+ it = threads_.erase(it);
+ } else {
+ bridge_->installPropertyModule(thread->state(), name, properties);
+ it++;
+ }
+ }
+}
+
+} // namespace lua