summaryrefslogtreecommitdiff
path: root/src/ui
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2024-02-29 12:10:44 +1100
committerjacqueline <me@jacqueline.id.au>2024-02-29 12:10:44 +1100
commit7d3ddac0eaea207aee187729e3beec95d8d201dc (patch)
tree4b4545e725697663a4768630c48f49e8bbb8cf59 /src/ui
parentd41f9f703375171d5766840c9edec32ff47bb25d (diff)
parent9fca08f8434a05e1fe93a1c4f8133f0e7fc118bf (diff)
downloadtangara-fw-7d3ddac0eaea207aee187729e3beec95d8d201dc.tar.gz
Merge branch 'main' into seek-support
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/include/ui_fsm.hpp2
-rw-r--r--src/ui/ui_fsm.cpp144
2 files changed, 79 insertions, 67 deletions
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 3e85c36e..d98e435d 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"
@@ -36,6 +37,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"
@@ -142,29 +144,29 @@ lua::Property UiState::sPlaybackPosition{0, [](const lua::LuaValue& val) {
lua::Property UiState::sQueuePosition{0};
lua::Property UiState::sQueueSize{0};
lua::Property UiState::sQueueRepeat{false, [](const lua::LuaValue& val) {
- if (!std::holds_alternative<bool>(val)) {
- return false;
- }
- bool new_val = std::get<bool>(val);
- sServices->track_queue().repeat(new_val);
- return true;
-}};
+ if (!std::holds_alternative<bool>(val)) {
+ return false;
+ }
+ bool new_val = std::get<bool>(val);
+ sServices->track_queue().repeat(new_val);
+ return true;
+ }};
lua::Property UiState::sQueueReplay{false, [](const lua::LuaValue& val) {
- if (!std::holds_alternative<bool>(val)) {
- return false;
- }
- bool new_val = std::get<bool>(val);
- sServices->track_queue().replay(new_val);
- return true;
-}};
+ if (!std::holds_alternative<bool>(val)) {
+ return false;
+ }
+ bool new_val = std::get<bool>(val);
+ sServices->track_queue().replay(new_val);
+ return true;
+ }};
lua::Property UiState::sQueueRandom{false, [](const lua::LuaValue& val) {
- if (!std::holds_alternative<bool>(val)) {
- return false;
- }
- bool new_val = std::get<bool>(val);
- sServices->track_queue().random(new_val);
- return true;
-}};
+ if (!std::holds_alternative<bool>(val)) {
+ return false;
+ }
+ bool new_val = std::get<bool>(val);
+ sServices->track_queue().random(new_val);
+ return true;
+ }};
lua::Property UiState::sVolumeCurrentPct{
0, [](const lua::LuaValue& val) {
@@ -456,27 +458,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); }},
@@ -487,40 +488,44 @@ 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(
+ "time", {
+ {"ticks", [&](lua_State* s) { return Ticks(s); }},
+ });
+ registry.AddPropertyModule("database", {
+ {"updating", &sDatabaseUpdating},
+ });
auto bt = sServices->bluetooth();
sBluetoothEnabled.Update(bt.IsEnabled());
@@ -579,6 +584,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;