diff --git a/lua/main_menu.lua b/lua/main_menu.lua index 5426ee0d..f3b7a042 100644 --- a/lua/main_menu.lua +++ b/lua/main_menu.lua @@ -90,26 +90,41 @@ return widgets.MenuScreen:new { -- a list of all available database indexes, but could also be the contents -- of the SD card root. - local list = lvgl.List(self.root, { - w = lvgl.PCT(100), - h = lvgl.PCT(100), - flex_grow = 1, - }) + if require("sd_card").mounted:get() then + local list = lvgl.List(self.root, { + w = lvgl.PCT(100), + h = lvgl.PCT(100), + flex_grow = 1, + }) - local indexes = database.indexes() - for _, idx in ipairs(indexes) do - local btn = list:add_btn(nil, tostring(idx)) - btn:onClicked(function() - backstack.push(browser:new { - title = tostring(idx), - iterator = idx:iter(), - }) - end) - btn:add_style(styles.list_item) - if not has_focus then - has_focus = true - btn:focus() + local indexes = database.indexes() + for _, idx in ipairs(indexes) do + local btn = list:add_btn(nil, tostring(idx)) + btn:onClicked(function() + backstack.push(browser:new { + title = tostring(idx), + iterator = idx:iter(), + }) + end) + btn:add_style(styles.list_item) + if not has_focus then + has_focus = true + btn:focus() + end end + else + local container = self.root:Object { + w = lvgl.PCT(100), + flex_grow = 1, + } + container:Label { + w = lvgl.PCT(100), + h = lvgl.SIZE_CONTENT, + text_align = 2, + long_mode = 0, + margin_all = 4, + text = "SD Card is not inserted or could not be opened.", + }:center(); end -- Finally, the bottom bar with icon buttons for other device features. diff --git a/src/tangara/system_fsm/running.cpp b/src/tangara/system_fsm/running.cpp index c808e9da..6c655105 100644 --- a/src/tangara/system_fsm/running.cpp +++ b/src/tangara/system_fsm/running.cpp @@ -75,6 +75,7 @@ void Running::react(const SdDetectChanged& ev) { } if (ev.has_sd_card && !sStorage) { + vTaskDelay(pdMS_TO_TICKS(500)); mountStorage(); } diff --git a/src/tangara/ui/lvgl_task.cpp b/src/tangara/ui/lvgl_task.cpp index 76274ba9..2bfc3f1c 100644 --- a/src/tangara/ui/lvgl_task.cpp +++ b/src/tangara/ui/lvgl_task.cpp @@ -55,7 +55,8 @@ auto UiTask::Main() -> void { current_screen_ = screen; } - if (input_ && current_screen_->group() != current_group) { + if (input_ && current_screen_ && + current_screen_->group() != current_group) { current_group = current_screen_->group(); input_->setGroup(current_group); }