[package] name = "acid-firmware" version = "0.1.0" authors = ['Jakub "Limeth" Hlusička'] description = "Firmware for the ACID keyboard" homepage = "https://github.com/haobogu/rmk" repository = "https://github.com/haobogu/rmk" edition = "2024" [features] default = ["usb-log", "limit-fps"] # Make RMK not to use USB no-usb = ["rmk/_no_usb"] # Let RMK use BLE ble = ["rmk/esp32s3_ble", "dep:esp-radio", "dep:bt-hci"] # Use alternative logging via GPIO5 as RX and GPIO12 as TX. # Disables default logging via USB. # Does not support esp-println's `println!`. alt-log = [] # Standard logging implementation over USB. usb-log = ["esp-backtrace/panic-handler"] # RTT (+ logging) for probe-rs rtt-log = ["dep:rtt-target", "dep:panic-rtt-target"] # Block the main core while it is driving the LCD. # This prevents the main core from accessing PSRAM while the LCD is being driven, # which causes the LCD to glitch. To prevent the main core from spending all its # execution time on just driving the LCD, it will be limited. limit-fps = [] # Development profiles develop = ["limit-fps", "alt-log"] develop-usb = ["limit-fps", "usb-log", "no-usb", "ble"] probe = ["limit-fps", "rtt-log", "no-usb", "ble"] # Formats the EKV database on boot. format-db = [] [dependencies] rmk = { version = "0.8.2", git = "https://github.com/Limeth/rmk", rev = "1661c55f5c21e7d80ea3f93255df483302c74b84", default-features = false, features = [ "log", "storage", "vial", "controller", ] } embassy-executor = { version = "0.9", features = ["log"] } embassy-time = { version = "0.5.0", features = ["log"] } embassy-embedded-hal = "0.5.0" embassy-sync = { version = "0.7.2", features = ["log"] } embassy-sync-old = { package = "embassy-sync", version = "0.6.2", features = ["log"] } esp-backtrace = { version = "0.18", default-features = false, features = [ "esp32s3", "println", ] } esp-hal = { version = "1.0", features = ["esp32s3", "unstable", "psram", "log-04"] } esp-storage = { version = "0.8", features = ["esp32s3"] } esp-alloc = { version = "0.9", features = ["nightly"] } esp-println = { version = "0.16", features = ["esp32s3", "log-04"] } esp-radio = { version = "0.17", features = ["esp32s3", "unstable", "ble"], optional = true } esp-rtos = { version = "0.2", features = ["esp32s3", "esp-radio", "embassy"] } esp-bootloader-esp-idf = { version = "0.4", features = ["esp32s3", "log-04"] } esp-sync = { version = "0.1.1", features = ["esp32s3", "log-04"] } bt-hci = { version = "0.6", optional = true } # Must be updated with esp-radio and rmk rand_core = { version = "0.9", default-features = false } static_cell = "2" lazy_static = { version = "1.5.0", features = ["spin_no_std"], default-features = false } log = "0.4.29" bitflags = "2.10.0" paste = { package = "pastey", version = "0.2.1" } itertools = { version = "0.14.0", default-features = false } bytemuck = "1.24.0" critical-section = "1.2.0" cfg-if = "1.0.4" xkbcommon = { git = "https://github.com/Limeth/xkbcommon-rs", rev = "d91705a7211e294c09abae5e3e64f1df158bc2c5", default-features = false, features = ["c-lib-wrap"] } rtt-target = { version = "0.6.2", features = ["log"], optional = true } panic-rtt-target = { version = "0.2.0", optional = true } enumset = "1.1.10" printf-compat = { version = "0.2.1", default-features = false } # Kept older because of the outdated esp toolchain's VaList spectre-api-sys = { git = "https://github.com/Limeth/spectre-api-sys" } sha2 = { version = "0.10.9", default-features = false } password-hash = { path = "../password-hash", default-features = false } hmac = "0.12.1" data-encoding-macro = "0.1.19" embedded-storage-async = "0.4.1" postcard = { version = "1.1", default-features = false, features = ["alloc", "postcard-derive"] } # TODO: defmt serde = { version = "1.0", default-features = false, features = ["derive"] } # serde_with = { version = "3.16", default-features = false, features = ["alloc", "macros"] } serde_bytes = { version = "0.11.19", default-features = false, features = ["alloc"] } chrono = { version = "0.4.43", default-features = false, features = ["alloc", "serde"] } # TODO: defmt tinyvec = { version = "1.10.0", default-features = false, features = ["alloc"] } esp-metadata-generated = { version = "0.3.0", features = ["esp32s3"] } # A fork of slint with patches for `allocator_api` support. # Don't forget to change `slint-build` in build dependencies, if this is changed. slint = { version = "1.14.1", git = "https://github.com/Limeth/slint", rev = "c2e5d05df2476557a299a78664e148d2fe62427d", default-features = false, features = ["compat-1-2", "libm", "log", "unsafe-single-threaded", "renderer-software"]} i-slint-common = { version = "1.14.1", git = "https://github.com/Limeth/slint", rev = "c2e5d05df2476557a299a78664e148d2fe62427d" } i-slint-core = { version = "1.14.1", git = "https://github.com/Limeth/slint", rev = "c2e5d05df2476557a299a78664e148d2fe62427d", default-features = false } # Crates for serial UART CLI embedded-cli = { version = "0.2.1", default-features = false, features = ["help", "macros"] } embedded-io = "0.7" mutually_exclusive_features = "0.1.0" [dependencies.ekv] version = "1.0.0" features = [ # TODO: "defmt", "crc", "max-page-count-2048", "max-key-size-256", # "max-value-size-65536", "max-value-size-1024", # These must adhere to `FlashStorage`'s parameters. "align-4", "page-size-4096", ] [build-dependencies] xz2 = "0.1.7" json = "0.12" const-gen = "1.6" embuild = "0.33" cc = "1.2.9" slint-build = { version = "1.14.1", git = "https://github.com/Limeth/slint", rev = "c2e5d05df2476557a299a78664e148d2fe62427d" } gix = { version = "0.78", default-features = false, features = ["max-performance", "status"] } indoc = "2.0.7" [[bin]] name = "acid-firmware" test = false bench = false [profile.release-with-debug] inherits = "release" debug = true [profile.dev.package.esp-storage] opt-level = 3 [profile.dev] # Rust debug is too slow. # For debug builds always builds with some optimization opt-level = "s" [profile.release] codegen-units = 1 # LLVM can perform better optimizations using a single thread debug = 2 debug-assertions = false incremental = false lto = 'thin' opt-level = 3 overflow-checks = false