diff --git a/vendor/rnode_firmware/Display.h b/vendor/rnode_firmware/Display.h index bfb6165..b3e7172 100644 --- a/vendor/rnode_firmware/Display.h +++ b/vendor/rnode_firmware/Display.h @@ -194,6 +194,8 @@ float epd_update_fps = 0.5; #if BOARD_MODEL == BOARD_CARDPUTER_ADV #define DISPLAY_BLANKING_TIMEOUT 30*1000 #define CARDPUTER_ADV_DISPLAY_INTENSITY_DEFAULT 96 +#elif BOARD_MODEL == BOARD_TDECK + #define DISPLAY_BLANKING_TIMEOUT 60*1000 #else #define DISPLAY_BLANKING_TIMEOUT 15*1000 #endif @@ -1768,7 +1770,10 @@ bool epd_blanked = false; void update_display(bool blank = false) { display_updating = true; #if BOARD_MODEL == BOARD_TDECK - if (td_ui_ready) td_poll_touch(); + if (td_ui_ready) { + td_poll_touch(); + td_poll_keyboard(); + } #endif if (blank == true) { last_disp_update = millis()-disp_update_interval-1; diff --git a/vendor/rnode_firmware/TDeckUI.h b/vendor/rnode_firmware/TDeckUI.h index 542fde0..45c9976 100644 --- a/vendor/rnode_firmware/TDeckUI.h +++ b/vendor/rnode_firmware/TDeckUI.h @@ -133,7 +133,8 @@ void td_poll_touch() { if (!td_touch_down) return; td_touch_down = false; - // Tap released + // Tap released. Taps only wake or interact — the screen sleeps on the + // inactivity timeout alone, never from a tap. if (display_blanked) { display_unblank(); last_disp_update = 0; @@ -146,11 +147,27 @@ void td_poll_touch() { } else if (in_panel && bt_state == BT_STATE_PAIRING) { bt_disable_pairing(); // tap again to cancel } else { - last_unblank_event = millis() - display_blanking_timeout - 1; // screen off + display_unblank(); // count as activity, extend the timeout } last_disp_update = 0; } +// T-Deck keyboard (ESP32-C3 @ I2C 0x55, single translated byte per read). +// Any keypress wakes the display / extends the inactivity timeout. +#define TD_KB_ADDR 0x55 +uint32_t td_last_kb_poll = 0; + +void td_poll_keyboard() { + if (millis() - td_last_kb_poll < 50) return; + td_last_kb_poll = millis(); + + Wire.requestFrom((uint8_t)TD_KB_ADDR, (uint8_t)1); + if (Wire.available() && Wire.read() != 0) { + display_unblank(); + last_disp_update = 0; + } +} + void td_ui_init() { if (td_ui_ready) return; display.setRotation(3); @@ -404,10 +421,12 @@ void td_draw_idle_content() { td_canvas->print(modbuf); y += 12; - char brbuf[24]; - snprintf(brbuf, sizeof(brbuf), "%.2f Kbps", (float)lora_bitrate / 1000.0f); - td_canvas->setCursor(x, y); - td_canvas->print(brbuf); + if (radio_online) { + char brbuf[24]; + snprintf(brbuf, sizeof(brbuf), "%.2f Kbps", (float)lora_bitrate / 1000.0f); + td_canvas->setCursor(x, y); + td_canvas->print(brbuf); + } y += 14; td_canvas->setCursor(x, y); @@ -565,8 +584,6 @@ void td_draw_footer() { char vbuf[20]; snprintf(vbuf, sizeof(vbuf), "Firmware v%d.%02d", MAJ_VERS, MIN_VERS); td_canvas->print(vbuf); - td_canvas->setCursor(188, TD_FOOT_Y + 4); - td_canvas->print("touch: pair / screen off"); } void td_render_frame() {