From 100c24f6a348bb1813688dc7a581e6f1d034afc5 Mon Sep 17 00:00:00 2001 From: Ken Van Hoeylandt Date: Sun, 15 Dec 2024 13:16:59 +0100 Subject: [PATCH] Added screenshot mode config and updated copyright docs (#126) --- Boards/Simulator/Source/hal/Configuration.cpp | 5 +++- .../Simulator/Source/hal/SimulatorSdcard.cpp | 26 ++++++++++++++++++ COPYRIGHT.md | 6 ++-- Documentation/pics/screenshot-AppList.png | Bin 4395 -> 4387 bytes Documentation/pics/screenshot-Desktop.png | Bin 4004 -> 3995 bytes Documentation/pics/screenshot-Files.png | Bin 2950 -> 2763 bytes Documentation/pics/screenshot-HelloWorld.png | Bin 0 -> 2371 bytes Documentation/pics/screenshot-Settings.png | Bin 4022 -> 4012 bytes Documentation/pics/screenshot-WifiConnect.png | Bin 4532 -> 0 bytes Documentation/pics/screenshot-WifiManage.png | Bin 5003 -> 4999 bytes Tactility/Source/TactilityConfig.h | 3 +- Tactility/Source/app/files/FilesData.cpp | 17 ++++++++---- 12 files changed, 47 insertions(+), 10 deletions(-) create mode 100644 Boards/Simulator/Source/hal/SimulatorSdcard.cpp create mode 100644 Documentation/pics/screenshot-HelloWorld.png delete mode 100644 Documentation/pics/screenshot-WifiConnect.png diff --git a/Boards/Simulator/Source/hal/Configuration.cpp b/Boards/Simulator/Source/hal/Configuration.cpp index cfe48175..dea0172d 100644 --- a/Boards/Simulator/Source/hal/Configuration.cpp +++ b/Boards/Simulator/Source/hal/Configuration.cpp @@ -1,3 +1,4 @@ +#include "Tactility.h" #include "hal/Configuration.h" #include "hal/SimulatorPower.h" #include "LvglTask.h" @@ -7,6 +8,8 @@ #define TAG "hardware" +extern const tt::hal::sdcard::SdCard simulatorSdcard; + static bool initBoot() { lv_init(); lvgl_task_start(); @@ -28,7 +31,7 @@ extern const tt::hal::Configuration hardware = { .initBoot = initBoot, .createDisplay = createDisplay, .createKeyboard = createKeyboard, - .sdcard = nullptr, + .sdcard = &simulatorSdcard, .power = simulatorPower, .i2c = { tt::hal::i2c::Configuration { diff --git a/Boards/Simulator/Source/hal/SimulatorSdcard.cpp b/Boards/Simulator/Source/hal/SimulatorSdcard.cpp new file mode 100644 index 00000000..42de03fa --- /dev/null +++ b/Boards/Simulator/Source/hal/SimulatorSdcard.cpp @@ -0,0 +1,26 @@ +#include "Tactility.h" +#include "hal/sdcard/Sdcard.h" + +static uint32_t fake_handle = 0; + +static void* _Nullable sdcard_mount(TT_UNUSED const char* mount_point) { + return &fake_handle; +} + +static void* sdcard_init_and_mount(TT_UNUSED const char* mount_point) { + return &fake_handle; +} + +static void sdcard_unmount(TT_UNUSED void* context) { +} + +static bool sdcard_is_mounted(TT_UNUSED void* context) { + return TT_SCREENSHOT_MODE; +} + +extern const tt::hal::sdcard::SdCard simulatorSdcard = { + .mount = &sdcard_init_and_mount, + .unmount = &sdcard_unmount, + .is_mounted = &sdcard_is_mounted, + .mount_behaviour = tt::hal::sdcard::MountBehaviourAtBoot +}; diff --git a/COPYRIGHT.md b/COPYRIGHT.md index a51d614a..8cc6ed4e 100644 --- a/COPYRIGHT.md +++ b/COPYRIGHT.md @@ -1,10 +1,12 @@ -## Tactility +# Tactility The Tactility logo copyrights are owned by Ken Van Hoeylandt. Firmwares built from [the original repository](https://github.com/ByteWelder/Tactility) can be redistributed with the Tactility logo. For other usages, [contact me](https://kenvanhoeylandt.net). -The Tactility firmware and code are published under [GPL License Version 3](./LICENSE.md). +The Tactility project is published under [GPL License Version 3](./LICENSE.md). + +The TactilitySDK project is published under an [MIT License](./LICENSE.md). # Dependencies diff --git a/Documentation/pics/screenshot-AppList.png b/Documentation/pics/screenshot-AppList.png index dfa444c467b7d69c3b07b3d42d1e5f6cc775ada9..76900e529171e0e8944320519fbed0cc4be8dd52 100644 GIT binary patch delta 3701 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 Ag8%>k diff --git a/Documentation/pics/screenshot-Desktop.png b/Documentation/pics/screenshot-Desktop.png index d46e3dc18e70b54309d4c3ee9f9c981ccffc807a..f123585c06ca1a22a617ca4ac578b3b5ccd55a5f 100644 GIT binary patch delta 3210 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 Lea*5vwxRz872X1$ delta 3206 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 RtuFuo002ovPDHLkV1kru;}-w` delta 2639 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 literal 0 HcmV?d00001 diff --git a/Documentation/pics/screenshot-Settings.png b/Documentation/pics/screenshot-Settings.png index 4577b3729ab2647cb96069aba6b77ab2fa739c40..bf6658582c1eb00b6690ebd1e86f59ab4375a9c3 100644 GIT binary patch delta 3466 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 Fe*tpc;|Tx& delta 3689 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 E0GapAD*ylh diff --git a/Tactility/Source/TactilityConfig.h b/Tactility/Source/TactilityConfig.h index 65bce9d9..00f7ac0e 100644 --- a/Tactility/Source/TactilityConfig.h +++ b/Tactility/Source/TactilityConfig.h @@ -3,4 +3,5 @@ #include "TactilityHeadlessConfig.h" #define TT_CONFIG_APPS_LIMIT 32 -#define TT_CONFIG_FORCE_ONSCREEN_KEYBOARD false \ No newline at end of file +#define TT_CONFIG_FORCE_ONSCREEN_KEYBOARD false // for development/debug purposes +#define TT_SCREENSHOT_MODE false // for taking screenshots (e.g. forces SD card presence and Files tree on simulator) diff --git a/Tactility/Source/app/files/FilesData.cpp b/Tactility/Source/app/files/FilesData.cpp index 6761c852..eb0ef50a 100644 --- a/Tactility/Source/app/files/FilesData.cpp +++ b/Tactility/Source/app/files/FilesData.cpp @@ -1,7 +1,7 @@ #include "FilesData.h" #include "FileUtils.h" #include "StringUtils.h" -#include "TactilityCore.h" +#include "Tactility.h" namespace tt::app::files { @@ -42,19 +42,24 @@ bool data_set_entries_for_path(std::shared_ptr data, const char* path) { * ESP32 does not have a root directory, so we have to create it manually. * We'll add the NVS Flash partitions and the binding for the sdcard. */ - if (kernel::getPlatform() == kernel::PlatformEsp && strcmp(path, "/") == 0) { +#if TT_SCREENSHOT_MODE + bool show_custom_root = true; +#else + bool show_custom_root = (kernel::getPlatform() == kernel::PlatformEsp && strcmp(path, "/") == 0); +#endif + if (show_custom_root) { int dir_entries_count = 3; - auto** dir_entries = static_cast(malloc(sizeof(struct dirent*) * 3)); + auto** dir_entries = (dirent**)malloc(sizeof(struct dirent*) * 3); - dir_entries[0] = static_cast(malloc(sizeof(struct dirent))); + dir_entries[0] = (dirent*)malloc(sizeof(struct dirent)); dir_entries[0]->d_type = TT_DT_DIR; strcpy(dir_entries[0]->d_name, "assets"); - dir_entries[1] = static_cast(malloc(sizeof(struct dirent))); + dir_entries[1] = (dirent*)malloc(sizeof(struct dirent)); dir_entries[1]->d_type = TT_DT_DIR; strcpy(dir_entries[1]->d_name, "config"); - dir_entries[2] = static_cast(malloc(sizeof(struct dirent))); + dir_entries[2] = (dirent*)malloc(sizeof(struct dirent)); dir_entries[2]->d_type = TT_DT_DIR; strcpy(dir_entries[2]->d_name, "sdcard");