diff --git a/.github/actions/build-firmware/action.yml b/.github/actions/build-firmware/action.yml index a2de5016..bcca421a 100644 --- a/.github/actions/build-firmware/action.yml +++ b/.github/actions/build-firmware/action.yml @@ -31,10 +31,10 @@ runs: with: name: tactility-${{ inputs.board_id }} path: release/Tactility-${{ inputs.board_id }} - retention-days: 5 + retention-days: 30 - name: 'Upload Artifact: Release symbols' uses: actions/upload-artifact@v4 with: name: tactility-${{ inputs.board_id }}-symbols path: release/Tactility-${{ inputs.board_id }}-symbols - retention-days: 5 + retention-days: 30 diff --git a/.github/actions/build-sdk/action.yml b/.github/actions/build-sdk/action.yml index 4a4bc78d..59d6b893 100644 --- a/.github/actions/build-sdk/action.yml +++ b/.github/actions/build-sdk/action.yml @@ -31,4 +31,4 @@ runs: with: name: TactilitySDK-${{ inputs.arch }} path: release/TactilitySDK - retention-days: 5 + retention-days: 30 diff --git a/Buildscripts/release-sdk-current.sh b/Buildscripts/release-sdk-current.sh index 6d27c001..761a8d85 100755 --- a/Buildscripts/release-sdk-current.sh +++ b/Buildscripts/release-sdk-current.sh @@ -1,7 +1,7 @@ #!/bin/bash # -# Description: Releases the current build files as an SDK in the specified folder. +# Description: Releases the current build files as an SDK in release/TactilitySDK # This deployment is used when compiling apps in ./ExternalApps # diff --git a/Documentation/app-lifecycle.md b/Documentation/app-lifecycle.md deleted file mode 100644 index 4b1b21fb..00000000 --- a/Documentation/app-lifecycle.md +++ /dev/null @@ -1,12 +0,0 @@ -# Application Lifecycle - -The app goes through these states: - -![app lifecycle state diagram](pics/app-lifecycle.png) - -Let's look at a scenario where an app launches another app: - -1. `first` app starts: `first.onStart()` -> `first.onShow()` -2. `second` app starts: `first.onHide()` -> `second.onStart()` -> `second.onShow()` -3. `second` app stops: `second.onHide()` -> `second.onStop()` -> `first.onShow()` -4. `first` app stops: `first.onHide()` -> `first.onStop()` diff --git a/Documentation/app-lifecycle.puml b/Documentation/application-lifecycle.puml similarity index 100% rename from Documentation/app-lifecycle.puml rename to Documentation/application-lifecycle.puml diff --git a/Documentation/external-apps.md b/Documentation/external-apps.md deleted file mode 100644 index 5a297825..00000000 --- a/Documentation/external-apps.md +++ /dev/null @@ -1,18 +0,0 @@ -# External Apps - -## Building - -Steps to build: - -- Build the main project with `idf.py build` in the root folder of the project -- Open a terminal at `ExternalApps/${AppName}` -- The first time, run `./build.sh` (during consecutive runs, you can run `idf.py build`) -- Find the executable `build/${AppName}.app.elf` and copy it to an SD card. - -## Developing apps - -Currently, only C is supported. The `TactilityC` project converts Tactility's C++ code into C. - -Methods need to be manually exposed to the ELF apps, by editing `TactilityC/Source/TactilityC.cpp` - -You can put apps in `Data/config` or `Data/assets` during development, because putting it on an SD card takes more effort. diff --git a/Documentation/pics/app-lifecycle.png b/Documentation/pics/app-lifecycle.png deleted file mode 100644 index 669df49b..00000000 Binary files a/Documentation/pics/app-lifecycle.png and /dev/null differ diff --git a/Documentation/pics/screenshot-HelloWorld.png b/Documentation/pics/screenshot-HelloWorld.png deleted file mode 100644 index 478731df..00000000 Binary files a/Documentation/pics/screenshot-HelloWorld.png and /dev/null differ diff --git a/README.md b/README.md index 683e8794..991cb778 100644 --- a/README.md +++ b/README.md @@ -2,140 +2,20 @@ Tactility is an operating system that is focusing on the ESP32 microcontroller. +See [https://tactility.bytewelder.com](https://tactility.bytewelder.com) for more information. + +Status: pre-release + ![photo of devices running Tactility](Documentation/pics/tactility-devices.webp)  ![screenshot of desktop app](Documentation/pics/screenshot-Desktop.png) -**Status: Alpha** +You can run built-in apps or start them from an SD card: -Next to desktop functionality, Tactility makes it easy to manage system settings: +![screenshot off app list app](Documentation/pics/screenshot-AppList.png)  ![screenshot of files app](Documentation/pics/screenshot-Files.png) -![screenshot of settings app](Documentation/pics/screenshot-Settings.png) ![screenshot of wifi management app](Documentation/pics/screenshot-WifiManage.png) +It's easy to manage system settings: -There are also built-in apps: - -![screenshot off app list app](Documentation/pics/screenshot-AppList.png) ![screenshot of files app](Documentation/pics/screenshot-Files.png) - -Play with the built-in apps or build your own! Use one of the supported devices or set up the drivers for your own hardware platform. - -Noteworthy features: -- Touch UI capabilities (via LVGL) with support for input devices such as keyboard, trackable and more. -- Run apps and services. -- Run external apps from SD card. (limited APIs available, for now) -- Basic applications to boost productivity, such as a Wi-Fi connectivity and I2C. -- Includes a PC simulator build target to speed up development. - -Requirements: -- ESP32 (any?) -- [esp-idf 5.3](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/get-started/index.html) or a newer v5.3.x -- (for PC simulator) SDL2 library, including SDL image - -## Making apps is easy! - -The app manifest provides basic information like the application name. -It also describes the [app lifecycle](Documentation/app-lifecycle.md): -It tells Tactility which functions need to be called when the app is started/shown/etc. - -UI is created with [lvgl](https://github.com/lvgl/lvgl) which has lots of [widgets](https://docs.lvgl.io/9.0/widgets/index.html)! -Creating a touch-capable UI is [easy](https://docs.lvgl.io/9.0/get-started/quick-overview.html) and doesn't require your own render loop! - -```C++ -static void onShow(tt::app::AppContext context, lv_obj_t* parent) { - // Default toolbar with app name and close button - lv_obj_t* toolbar = tt::lvgl::toolbar_create(parent, context); - lv_obj_align(toolbar, LV_ALIGN_TOP_MID, 0, 0); - - // Label widget - lv_obj_t* label = lv_label_create(parent); - lv_label_set_text(label, "Hello, world!"); - lv_obj_align(label, LV_ALIGN_CENTER, 0, 0); - // Widgets are auto-removed from the parent when the app is closed -} - -extern const tt::app::AppManifest manifest = { - .id = "HelloWorld", // Used to identify and start an app - .name = "Hello World", // Shown on the desktop and app's toolbar - .onShow = onShow // A minimal setup sets the onShow() function -}; -``` - -![hello world app screenshot](Documentation/pics/screenshot-HelloWorld.png) - -## Supported Hardware - -Any ESP32 device with a touchscreen should be able to run Tactility, -because LVGL is set up in a platform-agnostic manner. -Implementing drivers can take some effort, so Tactility provides support for several devices. - -Predefined configurations are available for: - -| Device | Screen&Touch | SD card | Power | Other | -|---------------------------------|--------------|---------|-------|----------| -| [LilyGo T-Deck Plus][tdeckplus] | ✅ | ✅ | ⏳ | Keyboard | -| [LilyGo T-Deck][tdeck] | ✅ | ✅ | | Keyboard | -| [M5Stack Core2][m5stack] | ✅ | ✅ | ✅ | | -| [M5Stack CoreS3][m5stack] | ✅ | ✅ | ✅ | | -| Yellow Board 2432S024C (\*) | ✅ | ✅ | | | - -- ✅: Capable and implemented -- ⏳: Capable but not yet implemented -- ❌: Not capable - -(*) Note: Only the capacitive version is supported. See AliExpress [here][2432s024c_1] and [here][2432s024c_2]. - -[tdeck]: https://www.lilygo.cc/products/t-deck -[tdeckplus]: https://lilygo.cc/products/t-deck-plus -[2432s024c_1]: https://www.aliexpress.com/item/1005005902429049.html -[2432s024c_2]: https://www.aliexpress.com/item/1005005865107357.html -[m5stack]: https://m5stack.com/ - -## Guide - -### Cloning from git - -Ensure you clone the repository including the submodules! For example: - -```bash -git clone --recurse-submodules -j8 https://github.com/ByteWelder/Tactility.git -``` - -### Build environment setup - -Ensure you have [esp-idf 5.3](https://docs.espressif.com/projects/esp-idf/en/release-v5.3/esp32/get-started/index.html) installed, then select the correct device: - -Copy the `sdkconfig.board.YOUR_BOARD` into `sdkconfig`. Use `sdkconfig.defaults` if you are setting up a custom board. - -### Building firmware - -Building for ESP32(\*) or PC: - -```bash -idf.py build -``` - -Flashing ESP32: - -```bash -idf.py flash monitor -``` - -(\*) The build scripts will detect if ESP-IDF is available. They will adapt if you ran `${IDF_PATH}/export.sh` - -### Development - -Take a look at the [App Lifecycle](Documentation/app-lifecycle.md) or the [dependency diagram](Documentation/project-structure.puml) (this uses [PlantUML](https://plantuml.com)). - -Directories explained: - -- `App`: The application/firmware example project -- `Boards`: Contains board configuration projects with drivers (and simulator) -- `Tactility`: The main application platform code -- `TactilityC`: C wrappers for making side-loaded apps (C++ is not supported yet) -- `TactilityHeadless`: Service framework and default services. -- `TactilityCore`: Core functionality regarding threads, stdlib, etc. -- `Libraries`: Contains a mix of regular libraries and ESP modules - -Until there is proper documentation, here are some pointers: +![screenshot of settings app](Documentation/pics/screenshot-Settings.png)  ![screenshot of wifi management app](Documentation/pics/screenshot-WifiManage.png) ## License [GNU General Public License Version 3](LICENSE.md) -