From fbe047a35fff100cb5f42d10984bccde137f586e Mon Sep 17 00:00:00 2001 From: jacqueline Date: Wed, 26 Apr 2023 15:21:32 +1000 Subject: Add some basic data and retrieval --- src/main/app_console.cpp | 54 +++++++++++++++++++++++++++++++++++++++++++++++- src/main/app_console.hpp | 4 +++- src/main/main.cpp | 16 +++++++------- 3 files changed, 65 insertions(+), 9 deletions(-) (limited to 'src/main') diff --git a/src/main/app_console.cpp b/src/main/app_console.cpp index 40159f4e..859700f4 100644 --- a/src/main/app_console.cpp +++ b/src/main/app_console.cpp @@ -9,7 +9,9 @@ #include #include "audio_playback.hpp" +#include "database.hpp" #include "esp_console.h" +#include "esp_log.h" namespace console { @@ -145,7 +147,55 @@ void RegisterAudioStatus() { esp_console_cmd_register(&cmd); } -AppConsole::AppConsole(audio::AudioPlayback* playback) : playback_(playback) { +int CmdDbInit(int argc, char** argv) { + static const std::string usage = "usage: db_init"; + if (argc != 1) { + std::cout << usage << std::endl; + return 1; + } + + sInstance->database_->Initialise(); + + return 0; +} + +void RegisterDbInit() { + esp_console_cmd_t cmd{.command = "db_init", + .help = "scans for playable files and adds them to the database", + .hint = NULL, + .func = &CmdDbInit, + .argtable = NULL}; + esp_console_cmd_register(&cmd); +} + +int CmdDbTitles(int argc, char** argv) { + static const std::string usage = "usage: db_titles"; + if (argc != 1) { + std::cout << usage << std::endl; + return 1; + } + + database::Iterator it = sInstance->database_->ByTitle(); + while (true) { + std::optional title = it.Next(); + if (!title) { + break; + } + std::cout << *title << std::endl; + } + return 0; +} + +void RegisterDbTitles() { + esp_console_cmd_t cmd{.command = "db_titles", + .help = "lists titles of ALL songs in the database", + .hint = NULL, + .func = &CmdDbTitles, + .argtable = NULL}; + esp_console_cmd_register(&cmd); +} + +AppConsole::AppConsole(audio::AudioPlayback* playback, database::Database *database) : playback_(playback), database_(database) { sInstance = this; } AppConsole::~AppConsole() { @@ -158,6 +208,8 @@ auto AppConsole::RegisterExtraComponents() -> void { RegisterToggle(); RegisterVolume(); RegisterAudioStatus(); + RegisterDbInit(); + RegisterDbTitles(); } } // namespace console diff --git a/src/main/app_console.hpp b/src/main/app_console.hpp index f94bcb51..fcefd4d4 100644 --- a/src/main/app_console.hpp +++ b/src/main/app_console.hpp @@ -4,16 +4,18 @@ #include "audio_playback.hpp" #include "console.hpp" +#include "database.hpp" #include "storage.hpp" namespace console { class AppConsole : public Console { public: - explicit AppConsole(audio::AudioPlayback* playback); + explicit AppConsole(audio::AudioPlayback* playback, database::Database *database); virtual ~AppConsole(); audio::AudioPlayback* playback_; + database::Database *database_; protected: virtual auto RegisterExtraComponents() -> void; diff --git a/src/main/main.cpp b/src/main/main.cpp index 312018cb..6ef7c61b 100644 --- a/src/main/main.cpp +++ b/src/main/main.cpp @@ -38,6 +38,7 @@ static const char* TAG = "MAIN"; void db_main(void* whatever) { + database::Database **arg_db = reinterpret_cast(whatever); ESP_LOGI(TAG, "Init database"); std::unique_ptr db; auto db_res = database::Database::Open(); @@ -48,13 +49,13 @@ void db_main(void* whatever) { ESP_LOGI(TAG, "database good :)"); } - vTaskDelay(pdMS_TO_TICKS(2000)); + *arg_db = db.get(); - db->Initialise(); + db->ByTitle(); - vTaskDelay(pdMS_TO_TICKS(2000)); - - db.reset(); + while (1) { + vTaskDelay(portMAX_DELAY); + } vTaskDelete(NULL); } @@ -89,7 +90,8 @@ extern "C" void app_main(void) { StaticTask_t database_task_buffer = {}; StackType_t* database_stack = reinterpret_cast( heap_caps_malloc(db_stack_size, MALLOC_CAP_SPIRAM)); - xTaskCreateStatic(&db_main, "LEVELDB", db_stack_size, NULL, 1, database_stack, + database::Database *db; + xTaskCreateStatic(&db_main, "LEVELDB", db_stack_size, &db, 1, database_stack, &database_task_buffer); ESP_LOGI(TAG, "Init touch wheel"); @@ -110,7 +112,7 @@ extern "C" void app_main(void) { vTaskDelay(pdMS_TO_TICKS(1000)); ESP_LOGI(TAG, "Launch console"); - console::AppConsole console(playback.get()); + console::AppConsole console(playback.get(), db); console.Launch(); uint8_t prev_position = 0; -- cgit v1.2.3