mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-10-20 12:25:06 +00:00
99 lines
6.8 KiB
Markdown
99 lines
6.8 KiB
Markdown
# TODOs
|
|
|
|
## Before release
|
|
|
|
- Tactility/Source/service/autorotate/AutoRotate.cpp
|
|
TODO: Display settings app might be saving DisplaySettings at the same time. This might corrupt the settings file.
|
|
|
|
## Higher Priority
|
|
|
|
- Move TactilityKernelCpp project as C++ include folder into TactilityKernel. This way, the kernel itself can use the C++ templates internally. And it's a library less.
|
|
- GPIO app: fix for monochrome display by using filled vs outline box in secondary colour
|
|
- BlueTooth as radio backend for MeshCore/Meshtastic?
|
|
- Find out why the first build of an app with a clean build cache folder always fails
|
|
- Use GPS time to set/update the current time: when enabled, at boot, when wifi is not enabled, start the gps device and wait until a lock is acquired, then get the time and sync it. Then stop the GPS device.
|
|
- Improve posix support: use user home path and system /tmp folder.
|
|
- NimBLE looses pairing key after reboot
|
|
- Pick different font to improve monochrome screen readability (or change the weight).
|
|
- Drivers/audio-codec-module is not a module. Move it somewhere else. Or make it an actual module.
|
|
- Improve SPI kernel driver (implement read, write, transactions)
|
|
- External app loading: Check the version of Tactility and check ESP target hardware to check for compatibility
|
|
Check during installation process, but also when starting (SD card might have old app install from before Tactility OS update)
|
|
- minitar/untarFile(): "entry->metadata.path" can escape its confined path (e.g. "../something")
|
|
- xl9555 and tca9534 drivers: support `GPIO_FLAG_ACTIVE_LOW` on outputs in software, like tca95xx does.
|
|
Afterwards the raw level reset handling in cst66xx and tca8418 can use ACTIVE_LOW too.
|
|
|
|
## Medium Priority
|
|
|
|
- Try https://github.com/bootdsc/Fastwave-Eink-Driver with CL-32 e-paper.
|
|
- Power Off with e-paper should trigger full refresh before power off.
|
|
- Support hot-plugging SD card (note: might be problematic with shared SPI bus)
|
|
- Inspect code for memory improvements: replace `std::*` with `tt::std::*`
|
|
- Tactility/Source/bluetooth move into bluetooth module, make it work generically for all bluetooth apis
|
|
- DisplayApi: resolution x/y shouldn't be functions but struct values
|
|
- Tactility/Source/app/imageviewer/ImageViewer.cpp: Limit memory used to open an image.
|
|
loadFile() now resizes fileData to the entire file size before displaying the image. start accepts a file path without a size limit, so opening a large image can exhaust memory on an embedded device before LVGL decodes it. Reject files above a supported limit or retain a bounded file-backed decoding path.
|
|
- A device profile selection screen for Simulator: select device profiles such as T-Lora Pager, T-Deck Plus, CL-32, Cardputer and T-Embed which changes the resolution and theming defaults after restarting.
|
|
- A fullscreen tiny keyboard that works with single stroke gestures (similar to Palm OS Graffiti)
|
|
- Move more window management code from Tactility/ to window-manager
|
|
- Implement signal/raise for terminal apps (for CTRL+C and window resize signals)
|
|
- Build the simulator with `-fno-exceptions` to match ESP32. First make app exit() work without C++ unwinding there:
|
|
scheduler.cpp's DeferredUnload relies on pthread_exit()'s forced unwind running its destructor.
|
|
Without exceptions, an app that calls exit() is never unloaded and the next app start waits the full timeout.
|
|
- netutils-module: ping, wget, ifconfig, nslookup, etc.
|
|
- Core2: support power off via software
|
|
- Make it clearer to end-users that an SD card is required to run Tactility
|
|
- Warn if file operations are done from prohibited tasks (e.g. lvgl task)
|
|
- stopAppFromToolbar() in lvgl/Lvgl.cpp stops the top-most app. Change it so the toolbar knows for which app id it is created, so it can rely on that.
|
|
- `struct Driver` has an `.owner`, but it's not always set. Either validate on Module construct that it matches, or otherwise set it during module start. The problem: NULL parent currently means that driver is not removable. This clashes with setting it dynamically. Consider some kind of flag to determine removability.
|
|
- Consider moving certain drivers into separate modules: audio, bt, wifi, etc
|
|
- Consider using https://github.com/Graphify-Labs/graphify
|
|
- Make a URL handler. Use it for handling local files. Match file types with apps.
|
|
Create some kind of "intent" handler like on Android.
|
|
The intent can have an action (e.g. view), a URL and an optional bundle.
|
|
The manifest can provide the intent handler
|
|
- LilyGO T-Dongle S3: 1 button control, stop auto-launching web server
|
|
- Core2: support power off via software
|
|
- Try out speed optimizations: https://docs.espressif.com/projects/esp-faq/en/latest/software-framework/peripherals/lcd.html
|
|
(relates to CONFIG_ESP32S3_DATA_CACHE_LINE_64B that is in use for RGB displays via the `device.properties` fix/workaround)
|
|
|
|
## Lower Priority
|
|
|
|
- Show device name clearly in on-device web server landing page (to identify tabs of multiple devices easier)
|
|
- When Wi-Fi connects, check for app updates
|
|
- Diceware app has large "+" and "-' buttons on Cardputer. It should be smaller.
|
|
- lvgl-module has a keyboard.cpp that creates a `keyboard_group`. This group is set as the default group, so it can also work with trackball(= LVGL "encoder").
|
|
Make a separate group that is the default group. The keyboard can then use it (or use its own).
|
|
The basic idea is to invert the ownership: now the keyboard group is made the default group, but it's probably more logical to have the default group used by the keyboard.
|
|
- Localize all apps
|
|
- Explore LVGL9's FreeRTOS functionality
|
|
- Fix system time to not be 1980 (use build year january 1st as a minimum).
|
|
- Use std::span or string_view in StringUtils https://youtu.be/FRkJCvHWdwQ?t=2754
|
|
- Mutex: Implement give/take from ISR support (works only for non-recursive ones)
|
|
- Show a warning screen if firmware encryption or secure boot are off when saving WiFi credentials.
|
|
- Calculator app should show regular text input field on non-touch devices that have a keyboard (Cardputer, T-Lora Pager)
|
|
- Make WiFi setup app that starts an access point and hosts a webpage to set up the device.
|
|
This will be useful for devices without a screen, a small screen or a non-touch screen.
|
|
|
|
# Nice-to-haves
|
|
|
|
- Audio player app
|
|
- Audio recording app
|
|
- OTA updates
|
|
|
|
# App Ideas
|
|
|
|
- Map widget:
|
|
https://github.com/portapack-mayhem/mayhem-firmware/blob/b66d8b1aa178d8a9cd06436fea788d5d58cb4c8d/firmware/application/ui/ui_geomap.cpp
|
|
https://github.com/portapack-mayhem/mayhem-firmware/blob/b66d8b1aa178d8a9cd06436fea788d5d58cb4c8d/firmware/tools/generate_world_map.bin.py
|
|
https://github.com/portapack-mayhem/mayhem-firmware/releases
|
|
- Weather app: https://lab.flipper.net/apps/flip_weather
|
|
- wget app: https://lab.flipper.net/apps/web_crawler (add profiles for known public APIs?)
|
|
- Chip 8 emulator
|
|
- Discord bot
|
|
- IR transceiver app
|
|
- GPS app
|
|
- Investigate CSI https://stevenmhernandez.github.io/ESP32-CSI-Tool/
|
|
- Calendar
|
|
- RSS reader
|