From f56ed2c5814ef70768cef3659827742475b4290a Mon Sep 17 00:00:00 2001 From: Ken Van Hoeylandt Date: Sun, 31 Aug 2025 22:46:01 +0200 Subject: [PATCH] Add app path functions to TactilityC --- TactilityC/Include/tt_app.h | 18 +++++++++++++++++- TactilityC/Source/tt_app.cpp | 36 +++++++++++++++++++++++++++++++++++ TactilityC/Source/tt_init.cpp | 2 ++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/TactilityC/Include/tt_app.h b/TactilityC/Include/tt_app.h index 884bd5df..03bfdd3b 100644 --- a/TactilityC/Include/tt_app.h +++ b/TactilityC/Include/tt_app.h @@ -7,6 +7,7 @@ extern "C" { #endif typedef void* AppHandle; +typedef void* AppPathsHandle; /** @return the bundle that belongs to this application, or null if it wasn't started with parameters. */ BundleHandle _Nullable tt_app_get_parameters(AppHandle handle); @@ -14,7 +15,7 @@ BundleHandle _Nullable tt_app_get_parameters(AppHandle handle); /** * Set the result before closing an app. * The result and bundle are passed along to the app that launched this app, when this app is closed. - * @param[in] handle the app context handle to set the result for + * @param[in] handle the app handle to set the result for * @param[in] result the result state to set * @param[in] bundle the result bundle to set */ @@ -23,6 +24,21 @@ void tt_app_set_result(AppHandle handle, AppResult result, BundleHandle _Nullabl /** @return true if a result was set for this app context */ bool tt_app_has_result(AppHandle handle); +/** Get the path to the data directory of this app. + * @param[in] handle the app handle + * @param[out] buffer the output buffer (recommended size is 256 bytes) + * @param[inout] size used as input for maximum buffer size (including null terminator) and is set with the path string length by this function + */ +void tt_app_get_data_directory(AppPathsHandle handle, char* buffer, size_t& size); + +/** Get the path to the data directory of this app, with LVGL drive letter prefix applied. + * The recommended buffer size is 256 bytes. + * @param[in] handle the app handle + * @param[out] buffer the output buffer (recommended size is 256 bytes) + * @param[inout] size used as input for maximum buffer size (including null terminator) and is set with the path string length by this function + */ +void tt_app_get_data_directory_lvgl(AppPathsHandle handle, char* buffer, size_t& size); + /** * Start an app by id. * @param[in] appId the app manifest id diff --git a/TactilityC/Source/tt_app.cpp b/TactilityC/Source/tt_app.cpp index 2a50ddbf..ad152b36 100644 --- a/TactilityC/Source/tt_app.cpp +++ b/TactilityC/Source/tt_app.cpp @@ -4,6 +4,8 @@ extern "C" { +constexpr auto* TAG = "tt_app"; + #define HANDLE_AS_APP_CONTEXT(handle) ((tt::app::AppContext*)(handle)) BundleHandle _Nullable tt_app_get_parameters(AppHandle handle) { @@ -31,4 +33,38 @@ void tt_app_stop() { tt::app::stop(); } +void tt_app_get_data_directory(AppPathsHandle handle, char* buffer, size_t& size) { + assert(buffer != nullptr); + assert(size > 0); + auto paths = HANDLE_AS_APP_CONTEXT(handle)->getPaths(); + auto data_path = paths->getDataDirectory(); + auto expected_length = data_path.length() + 1; + if (size < expected_length) { + TT_LOG_E(TAG, "Path buffer not large enough (%d < %d)", size, expected_length); + size = 0; + buffer[0] = 0; + return; + } + + strcpy(buffer, data_path.c_str()); + size = data_path.length(); +} + +void tt_app_get_data_directory_lvgl(AppPathsHandle handle, char* buffer, size_t& size) { + assert(buffer != nullptr); + assert(size > 0); + auto paths = HANDLE_AS_APP_CONTEXT(handle)->getPaths(); + auto data_path = paths->getDataDirectoryLvgl(); + auto expected_length = data_path.length() + 1; + if (size < expected_length) { + TT_LOG_E(TAG, "Path buffer not large enough (%d < %d)", size, expected_length); + size = 0; + buffer[0] = 0; + return; + } + + strcpy(buffer, data_path.c_str()); + size = data_path.length(); +} + } \ No newline at end of file diff --git a/TactilityC/Source/tt_init.cpp b/TactilityC/Source/tt_init.cpp index 8a2142d5..d741108c 100644 --- a/TactilityC/Source/tt_init.cpp +++ b/TactilityC/Source/tt_init.cpp @@ -119,6 +119,8 @@ const esp_elfsym elf_symbols[] { ESP_ELFSYM_EXPORT(tt_app_selectiondialog_get_result_index), ESP_ELFSYM_EXPORT(tt_app_alertdialog_start), ESP_ELFSYM_EXPORT(tt_app_alertdialog_get_result_index), + ESP_ELFSYM_EXPORT(tt_app_get_data_directory), + ESP_ELFSYM_EXPORT(tt_app_get_data_directory_lvgl), ESP_ELFSYM_EXPORT(tt_bundle_alloc), ESP_ELFSYM_EXPORT(tt_bundle_free), ESP_ELFSYM_EXPORT(tt_bundle_opt_bool),