From ca4e29ac0e8b01ab3f60bc1de412d794711da85d Mon Sep 17 00:00:00 2001 From: Ken Van Hoeylandt Date: Sun, 15 Dec 2024 09:45:20 +0100 Subject: [PATCH] Update docs and CI retention (#124) - Set artifact retention to 30 days - Update script dscription - Updated docs --- .github/actions/build-firmware/action.yml | 4 +- .github/actions/build-sdk/action.yml | 2 +- Buildscripts/release-sdk-current.sh | 2 +- Documentation/app-lifecycle.md | 12 -- ...ecycle.puml => application-lifecycle.puml} | 0 Documentation/external-apps.md | 18 --- Documentation/pics/app-lifecycle.png | Bin 18301 -> 0 bytes Documentation/pics/screenshot-HelloWorld.png | Bin 2380 -> 0 bytes README.md | 136 ++---------------- 9 files changed, 12 insertions(+), 162 deletions(-) delete mode 100644 Documentation/app-lifecycle.md rename Documentation/{app-lifecycle.puml => application-lifecycle.puml} (100%) delete mode 100644 Documentation/external-apps.md delete mode 100644 Documentation/pics/app-lifecycle.png delete mode 100644 Documentation/pics/screenshot-HelloWorld.png 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 669df49baa9a1238bc2688a0f2188a97dac83703..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18301 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 diff --git a/Documentation/pics/screenshot-HelloWorld.png b/Documentation/pics/screenshot-HelloWorld.png deleted file mode 100644 index 478731df7d0b46c0ba4fe65f904015007769ab50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2380 zcmc&$Su`667fwW4TWgzE=wd0lXoXT+Z7r=*TaBu*PmvC4ZHZtKgHcKiwN_AS-zkD3 zNo545l2}TORHC%BDiT71L^A&W%;W#?zs<`%_kQ<#xaZ#Qo_o`s9c_+CC`kYSfFriI ztX%*Apyh$j5(6FBn{0=l4uC*sd)FHWAqs^O2n1X%H#s?3L`1~I#3Usp1&_zi&dzRb zZnn3#r>3S34i1Wnio#&9g@uK;Z{L=bl%%Jp2L=WLfj~n;Ln@Vu#bRAuUB$)4aX8%E z+?;`dL1SZMeSLj#adALE0EfewpP#p}v5}ONq|s<>HoLjGxvi~jU|;}^Mu&xkF&K=s zwYAXD(20qO+}vC`o!-*YGCDe1TU#3w6N5w|$z<}_*x2;+w2_ffPEJmCcD9p~lZ%T> zRaF&NcL@olyAuR4Ox%=jo?1F*< zb93_o(oS`CwP*YG0*enV*$nRCOnl=xG;CSE{2tRzADx)dDq>dPW_Uc_`1ttXC}n15 zW@~FpBT_dH066^0*7}-jEO2c)15R}V4sW>EeD|1@@kTUd4o>D<4qHj-B(qMF{C{%B ze6zze^)=s$eLQ~A0V90L8=q=lQpdGCU!rqM{>*y(#S4|yvaaNxscXD_jrM~34{l-G^Bv8A}6 z_|*CJtMq6rcl8ucKyIYNeR#hiJooYw;V5^eO(>;LYXFO6KI`IjGX=5!OSE|^_XDk` zTkytwov+T-0;1-6)~`|JnRaF?q!0^U@4WWO6$M;Br)Fwun8Z9Rt&~VRLTwduZ(QmB z@;>g}9!b=TGR*hb-$v6hW*cPvI-W6^xi)blF}$_gjJd8~^vMRFp>M=^0Cea8qJ&Q{ z59X^6)$%VcEHBTQT861TJ2Ztn&iVu8(FhXkLJdfEcv$jzoZ{`Bu7jp~QuWq7l56Nv zcpSYIUds@NxA?SfJP?*%qg~y{)ME0ynF=Rv3zb7Dzv~hq{_MD(F2-xgu7T~gP3p&> zc$0UtWEd%&J3qkXtZdO}7W=TQrJcsorH5+;Nz(9-$y|$Bi%MzQ%QtTryKt3Z;|TcL z1zHrG!a>Vby&R2&-%WcsH}a6 z-}a`7fq>UYM6}ZdNNNY;zNqLK6$tQcnX#Wr68}SWgRkP#y3n##DV-k(^@fr_8#PQg zaj-+^p)T4FD2E2F7Z5azKi?JQj|kmy37cPiDKa`3zj~P$yI0@A##WvJ%s0Ch&SHg3 zwut77>_{VUQA6?_1p3)psUcbJ)83GT_7l;Bxw~woSS{wCrv-daqJvgMLH#?yIl;x{$&YeBDaU?bk*C) z2OI@w3!$SV`EaHw8l~x{?#2E*6%yOz79p?Gb3G9z9H+dckh{}AhqTBPd8Fm8dKJG& zZigt&%w;Q;Ly5brYB0a`FAMWhEOcEpV_phjA9T4loN9R~~L3w4`1xS@DyEHi+8L%f!XJe|Oai;C$-IY|U zM-7nmVoxJ)4g8{pOjsRSF(p<0H`03(b@NGSQ)qrVicBW<&QFAe!pY=4wM5*}KS98`9mKM+Dq4_ZJ*7tgC zakhG@xn6{xI#4iauVM@cYOcf_!I|6xxhks>&zPxa+&j$j8ePGvLp{2I^O00Nchez9 zkoL8If0+MUQH5YWinkRuXepI)ZC2x9lbiO3Gkw9XxMv9w?L~gFW5dT;dTlg9Vm43} zbp23@l$fH-Wt9NSk^dKP!XMX*AAJGqJk~}WDT}I+jRs#dTVK0$_DyBsG1jAP2y&yw v_?52^*;tMl*hl($d2&joIz4Demtv^)g>T0cl=!5Bw+LW+!_m6sx?j@Y4w`k& 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) -