Update docs and CI retention (#124)

- Set artifact retention to 30 days
- Update script dscription
- Updated docs
This commit is contained in:
Ken Van Hoeylandt 2024-12-15 09:45:20 +01:00 committed by GitHub
parent f664de898d
commit ca4e29ac0e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 12 additions and 162 deletions

View File

@ -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

View File

@ -31,4 +31,4 @@ runs:
with:
name: TactilitySDK-${{ inputs.arch }}
path: release/TactilitySDK
retention-days: 5
retention-days: 30

View File

@ -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
#

View File

@ -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()`

View File

@ -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.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

136
README.md
View File

@ -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)