From 3362870e1ec5b856a0e1e50bb734c23be7bfd97e Mon Sep 17 00:00:00 2001 From: Alexandre Lunelli da Silva Date: Wed, 29 Apr 2026 01:33:41 -0300 Subject: [PATCH 1/2] Make encoder optional during UI init and tick --- targets/embedded_esp32s3/main/board_config.h | 10 +++++----- targets/embedded_esp32s3/main/ui_app.h | 15 ++++++++++----- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/targets/embedded_esp32s3/main/board_config.h b/targets/embedded_esp32s3/main/board_config.h index 61a79a8..ed10dd5 100644 --- a/targets/embedded_esp32s3/main/board_config.h +++ b/targets/embedded_esp32s3/main/board_config.h @@ -28,12 +28,12 @@ constexpr uint16_t kHeight = 135; namespace spi { constexpr int kMosiGpio = 35; constexpr int kSclkGpio = 36; -constexpr int kCsGpio = 37; +constexpr int kCsGpio = 7; } // namespace spi -constexpr int kDcGpio = 38; -constexpr int kResetGpio = 39; -constexpr int kBacklightGpio = 40; +constexpr int kDcGpio = 39; +constexpr int kResetGpio = 40; +constexpr int kBacklightGpio = 45; } // namespace tft namespace encoder { @@ -48,7 +48,7 @@ constexpr int kSwitch = 16; } // namespace encoder namespace controls { -constexpr int kBypassButton = 5; +constexpr int kBypassButton = 9; } // namespace controls // Guard against accidental overlap with active audio I2S signals. diff --git a/targets/embedded_esp32s3/main/ui_app.h b/targets/embedded_esp32s3/main/ui_app.h index 35f4fdd..2eb7047 100644 --- a/targets/embedded_esp32s3/main/ui_app.h +++ b/targets/embedded_esp32s3/main/ui_app.h @@ -33,8 +33,10 @@ class UserInterface { bool init(uint8_t* framebuffer) { if (!display_.init(framebuffer)) return false; - if (!encoder_.init()) return false; - enc_btn_.init(); + encoder_available_ = encoder_.init(); + if (encoder_available_) { + enc_btn_.init(); + } bypass_btn_.init(); // Initialize parameters matching the requested grid layout @@ -53,7 +55,9 @@ class UserInterface { } void tick(ParameterBridge& bridge) { - enc_btn_.update(); + if (encoder_available_) { + enc_btn_.update(); + } bypass_btn_.update(); if (bypass_btn_.justPressed()) { @@ -63,13 +67,13 @@ class UserInterface { display_.update(); } - if (enc_btn_.justPressed()) { + if (encoder_available_ && enc_btn_.justPressed()) { mode_ = (mode_ == UiMode::Scroll) ? UiMode::Edit : UiMode::Scroll; drawUI(); display_.update(); } - int delta = encoder_.getDelta(); + int delta = encoder_available_ ? encoder_.getDelta() : 0; if (delta != 0) { if (mode_ == UiMode::Scroll) { selected_idx_ += delta; @@ -244,6 +248,7 @@ class UserInterface { int selected_idx_ = 0; UiMode mode_ = UiMode::Scroll; bool bypassed_ = false; + bool encoder_available_ = false; }; } // namespace orbit::embedded::ui From 87ff76eb1522d252c0295eca502974fd10126d64 Mon Sep 17 00:00:00 2001 From: Alexandre Lunelli da Silva Date: Wed, 29 Apr 2026 01:52:22 -0300 Subject: [PATCH 2/2] Gate encoder by board presence flag and move TFT backlight pin --- targets/embedded_esp32s3/main/board_config.h | 3 ++- targets/embedded_esp32s3/main/ui_app.h | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/targets/embedded_esp32s3/main/board_config.h b/targets/embedded_esp32s3/main/board_config.h index ed10dd5..86cd9e5 100644 --- a/targets/embedded_esp32s3/main/board_config.h +++ b/targets/embedded_esp32s3/main/board_config.h @@ -33,7 +33,7 @@ constexpr int kCsGpio = 7; constexpr int kDcGpio = 39; constexpr int kResetGpio = 40; -constexpr int kBacklightGpio = 45; +constexpr int kBacklightGpio = 38; } // namespace tft namespace encoder { @@ -45,6 +45,7 @@ namespace encoder { constexpr int kA = 14; constexpr int kB = 15; constexpr int kSwitch = 16; +constexpr bool kPresent = false; // Set true on board revisions with populated rotary encoder. } // namespace encoder namespace controls { diff --git a/targets/embedded_esp32s3/main/ui_app.h b/targets/embedded_esp32s3/main/ui_app.h index 2eb7047..f1aa9c6 100644 --- a/targets/embedded_esp32s3/main/ui_app.h +++ b/targets/embedded_esp32s3/main/ui_app.h @@ -33,9 +33,12 @@ class UserInterface { bool init(uint8_t* framebuffer) { if (!display_.init(framebuffer)) return false; - encoder_available_ = encoder_.init(); + encoder_available_ = board::encoder::kPresent; if (encoder_available_) { - enc_btn_.init(); + encoder_available_ = encoder_.init(); + if (encoder_available_) { + enc_btn_.init(); + } } bypass_btn_.init();