From 4b2003c78a5e4270f384283f72d185cd4a40f30e Mon Sep 17 00:00:00 2001 From: jacqueline Date: Thu, 22 Feb 2024 12:37:01 +1100 Subject: Make property bindings shared amongst all lua threads --- src/ui/ui_fsm.cpp | 132 +++++++++++++++++++++++++++--------------------------- 1 file changed, 65 insertions(+), 67 deletions(-) (limited to 'src/ui') diff --git a/src/ui/ui_fsm.cpp b/src/ui/ui_fsm.cpp index 24145ead..e46832ba 100644 --- a/src/ui/ui_fsm.cpp +++ b/src/ui/ui_fsm.cpp @@ -128,29 +128,29 @@ lua::Property UiState::sPlaybackPosition{0}; lua::Property UiState::sQueuePosition{0}; lua::Property UiState::sQueueSize{0}; lua::Property UiState::sQueueRepeat{false, [](const lua::LuaValue& val) { - if (!std::holds_alternative(val)) { - return false; - } - bool new_val = std::get(val); - sServices->track_queue().repeat(new_val); - return true; -}}; + if (!std::holds_alternative(val)) { + return false; + } + bool new_val = std::get(val); + sServices->track_queue().repeat(new_val); + return true; + }}; lua::Property UiState::sQueueReplay{false, [](const lua::LuaValue& val) { - if (!std::holds_alternative(val)) { - return false; - } - bool new_val = std::get(val); - sServices->track_queue().replay(new_val); - return true; -}}; + if (!std::holds_alternative(val)) { + return false; + } + bool new_val = std::get(val); + sServices->track_queue().replay(new_val); + return true; + }}; lua::Property UiState::sQueueRandom{false, [](const lua::LuaValue& val) { - if (!std::holds_alternative(val)) { - return false; - } - bool new_val = std::get(val); - sServices->track_queue().random(new_val); - return true; -}}; + if (!std::holds_alternative(val)) { + return false; + } + bool new_val = std::get(val); + sServices->track_queue().random(new_val); + return true; + }}; lua::Property UiState::sVolumeCurrentPct{ 0, [](const lua::LuaValue& val) { @@ -442,27 +442,26 @@ void Lua::entry() { alert_timer_callback); sAlertContainer = lv_obj_create(sCurrentScreen->alert()); - sLua.reset(lua::LuaThread::Start(*sServices, sCurrentScreen->content())); - sLua->bridge().AddPropertyModule("power", - { - {"battery_pct", &sBatteryPct}, - {"battery_millivolts", &sBatteryMv}, - {"plugged_in", &sBatteryCharging}, - }); - sLua->bridge().AddPropertyModule( - "bluetooth", { - {"enabled", &sBluetoothEnabled}, - {"connected", &sBluetoothConnected}, - {"paired_device", &sBluetoothPairedDevice}, - {"devices", &sBluetoothDevices}, - }); - sLua->bridge().AddPropertyModule("playback", - { - {"playing", &sPlaybackPlaying}, - {"track", &sPlaybackTrack}, - {"position", &sPlaybackPosition}, - }); - sLua->bridge().AddPropertyModule( + auto& registry = lua::Registry::instance(*sServices); + sLua = registry.uiThread(); + registry.AddPropertyModule("power", { + {"battery_pct", &sBatteryPct}, + {"battery_millivolts", &sBatteryMv}, + {"plugged_in", &sBatteryCharging}, + }); + registry.AddPropertyModule("bluetooth", + { + {"enabled", &sBluetoothEnabled}, + {"connected", &sBluetoothConnected}, + {"paired_device", &sBluetoothPairedDevice}, + {"devices", &sBluetoothDevices}, + }); + registry.AddPropertyModule("playback", { + {"playing", &sPlaybackPlaying}, + {"track", &sPlaybackTrack}, + {"position", &sPlaybackPosition}, + }); + registry.AddPropertyModule( "queue", { {"next", [&](lua_State* s) { return QueueNext(s); }}, @@ -473,40 +472,39 @@ void Lua::entry() { {"repeat_track", &sQueueRepeat}, {"random", &sQueueRandom}, }); - sLua->bridge().AddPropertyModule("volume", - { - {"current_pct", &sVolumeCurrentPct}, - {"current_db", &sVolumeCurrentDb}, - {"left_bias", &sVolumeLeftBias}, - {"limit_db", &sVolumeLimit}, - }); - - sLua->bridge().AddPropertyModule("display", - { - {"brightness", &sDisplayBrightness}, - }); - - sLua->bridge().AddPropertyModule("controls", - { - {"scheme", &sControlsScheme}, - {"scroll_sensitivity", &sScrollSensitivity}, - }); - - sLua->bridge().AddPropertyModule( + registry.AddPropertyModule("volume", + { + {"current_pct", &sVolumeCurrentPct}, + {"current_db", &sVolumeCurrentDb}, + {"left_bias", &sVolumeLeftBias}, + {"limit_db", &sVolumeLimit}, + }); + + registry.AddPropertyModule("display", + { + {"brightness", &sDisplayBrightness}, + }); + + registry.AddPropertyModule("controls", + { + {"scheme", &sControlsScheme}, + {"scroll_sensitivity", &sScrollSensitivity}, + }); + + registry.AddPropertyModule( "backstack", { {"push", [&](lua_State* s) { return PushLuaScreen(s); }}, {"pop", [&](lua_State* s) { return PopLuaScreen(s); }}, }); - sLua->bridge().AddPropertyModule( + registry.AddPropertyModule( "alerts", { {"show", [&](lua_State* s) { return ShowAlert(s); }}, {"hide", [&](lua_State* s) { return HideAlert(s); }}, }); - sLua->bridge().AddPropertyModule("database", - { - {"updating", &sDatabaseUpdating}, - }); + registry.AddPropertyModule("database", { + {"updating", &sDatabaseUpdating}, + }); auto bt = sServices->bluetooth(); sBluetoothEnabled.Update(bt.IsEnabled()); -- cgit v1.2.3 From f9aec8b6906599296417af5414b1c72a3cf53e73 Mon Sep 17 00:00:00 2001 From: jacqueline Date: Thu, 22 Feb 2024 14:16:33 +1100 Subject: split the lua thread registry into its own files --- src/ui/ui_fsm.cpp | 1 + 1 file changed, 1 insertion(+) (limited to 'src/ui') diff --git a/src/ui/ui_fsm.cpp b/src/ui/ui_fsm.cpp index e46832ba..9668b0f3 100644 --- a/src/ui/ui_fsm.cpp +++ b/src/ui/ui_fsm.cpp @@ -36,6 +36,7 @@ #include "encoder_input.hpp" #include "event_queue.hpp" #include "gpios.hpp" +#include "lua_registry.hpp" #include "lvgl_task.hpp" #include "nvs.hpp" #include "property.hpp" -- cgit v1.2.3 From 5141c9f0bd62e575fff9e132c0ad6de089a18ece Mon Sep 17 00:00:00 2001 From: ailurux Date: Tue, 27 Feb 2024 17:28:55 +1100 Subject: Add time.ticks to lua bridge --- src/ui/include/ui_fsm.hpp | 2 ++ src/ui/ui_fsm.cpp | 11 +++++++++++ 2 files changed, 13 insertions(+) (limited to 'src/ui') diff --git a/src/ui/include/ui_fsm.hpp b/src/ui/include/ui_fsm.hpp index ffaff0bb..6cf2ba4c 100644 --- a/src/ui/include/ui_fsm.hpp +++ b/src/ui/include/ui_fsm.hpp @@ -163,6 +163,8 @@ class Lua : public UiState { auto ShowAlert(lua_State*) -> int; auto HideAlert(lua_State*) -> int; + auto Ticks(lua_State*) -> int; + auto SetPlaying(const lua::LuaValue&) -> bool; auto SetRandom(const lua::LuaValue&) -> bool; auto SetRepeat(const lua::LuaValue&) -> bool; diff --git a/src/ui/ui_fsm.cpp b/src/ui/ui_fsm.cpp index 9668b0f3..f5288882 100644 --- a/src/ui/ui_fsm.cpp +++ b/src/ui/ui_fsm.cpp @@ -24,6 +24,7 @@ #include "core/lv_obj_tree.h" #include "database.hpp" #include "esp_heap_caps.h" +#include "esp_timer.h" #include "haptics.hpp" #include "lauxlib.h" #include "lua_thread.hpp" @@ -503,6 +504,11 @@ void Lua::entry() { {"show", [&](lua_State* s) { return ShowAlert(s); }}, {"hide", [&](lua_State* s) { return HideAlert(s); }}, }); + + registry.AddPropertyModule( + "time", { + {"ticks", [&](lua_State* s) { return Ticks(s); }}, + }); registry.AddPropertyModule("database", { {"updating", &sDatabaseUpdating}, }); @@ -564,6 +570,11 @@ auto Lua::PopLuaScreen(lua_State* s) -> int { return 0; } +auto Lua::Ticks(lua_State* s) -> int { + lua_pushinteger(s, esp_timer_get_time()/1000); + return 1; +} + auto Lua::ShowAlert(lua_State* s) -> int { if (!sCurrentScreen) { return 0; -- cgit v1.2.3