diff --git a/firmware2/Cargo.toml b/firmware2/Cargo.toml index 6086c66..fdbb381 100644 --- a/firmware2/Cargo.toml +++ b/firmware2/Cargo.toml @@ -8,7 +8,7 @@ repository = "https://github.com/haobogu/rmk" edition = "2024" [features] -default = ["ble", "usb-log"] +default = ["usb-log", "limit-fps"] no-usb = ["rmk/_no_usb"] ble = ["rmk/esp32s3_ble"] # Use alternative logging via GPIO5 as RX and GPIO12 as TX. @@ -17,6 +17,7 @@ ble = ["rmk/esp32s3_ble"] alt-log = [] # Standard logging implementation over USB. usb-log = ["esp-backtrace/panic-handler"] +limit-fps = [] [dependencies] rmk = { version = "0.8.2", default-features = false, features = [ diff --git a/firmware2/src/main.rs b/firmware2/src/main.rs index 50c2917..1bf001b 100644 --- a/firmware2/src/main.rs +++ b/firmware2/src/main.rs @@ -19,6 +19,7 @@ use bt_hci::controller::ExternalController; use embassy_executor::Spawner; use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex; use embassy_sync::signal::Signal; +use embassy_time::Duration; use esp_alloc::{HeapRegion, MemoryCapability}; use esp_hal::clock::CpuClock; use esp_hal::dma::{BurstConfig, DmaDescriptor, DmaTxBuf, ExternalBurstConfig}; @@ -42,7 +43,6 @@ use log::{LevelFilter, error, info}; use rmk::channel::EVENT_CHANNEL; use rmk::config::{BehaviorConfig, PositionalConfig, RmkConfig, StorageConfig, VialConfig}; use rmk::debounce::default_debouncer::DefaultDebouncer; -use rmk::embassy_futures::yield_now; use rmk::input_device::Runnable; use rmk::{join_all}; use rmk::keyboard::Keyboard; @@ -74,6 +74,7 @@ mod console; esp_bootloader_esp_idf::esp_app_desc!(); const LOG_LEVEL_FILTER: LevelFilter = LevelFilter::Info; +const FRAME_DURATION_MIN: Duration = Duration::from_millis(40); // 25 FPS static PSRAM_ALLOCATOR: esp_alloc::EspHeap = esp_alloc::EspHeap::empty(); @@ -350,7 +351,8 @@ async fn run_renderer_task(backend: SlintBackend) { loop { slint::run_event_loop().unwrap(); SIGNAL_LCD_SUBMIT.signal(()); - // Timer::after_millis(50).await; + #[cfg(feature = "limit-fps")] + embassy_time::Timer::after(FRAME_DURATION_MIN).await; SIGNAL_UI_RENDER.wait().await; } @@ -508,6 +510,7 @@ async fn run_lcd(mut st7701s: St7701s<'static, Blocking>, framebuffer: &'static // the flash to be accessed, which interferes with the framebuffer transfer. // For that reason, it is disabled, and this task blocks the first core, until the transfer // is complete. + #[cfg(not(feature = "limit-fps"))] while !transfer.is_done() { // Timer::after_millis(1).await; yield_now().await;