mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-02-18 10:53:17 +00:00
Lots of things "ported" over from the "enhanced" fork. With some adjustments here and there. KeyboardBacklight driver (for T-Deck only currently) Trackball driver (for T-Deck only currently) Keyboard backlight sleep/wake (for T-Deck only currently...also requires keyboard firmware update) Display sleep/wake Files - create file/folder Keyboard settings (for T-Deck only currently) Time & Date settings tweaks Locale settings tweaks Systeminfo additions Espnow wifi coexist initI2cDevices - moved to T-deck init.cpp / initBoot KeyboardInitService - removed, moved to T-deck init.cpp / initBoot Adjusted TIMER_UPDATE_INTERVAL to 2 seconds. Added lock to ActionCreateFolder Maybe missed some things in the list. Display wake could do with some kind of block on wake first touch to prevent UI elements being hit when waking device with touch. Same with encoder/trackball/keyboard press i guess. The original code was written by @cscott0108 at https://github.com/cscott0108/tactility-enhanced-t-deck
110 lines
4.4 KiB
C++
110 lines
4.4 KiB
C++
#include "PwmBacklight.h"
|
|
#include "Tactility/kernel/SystemEvents.h"
|
|
#include "Tactility/service/gps/GpsService.h"
|
|
|
|
#include <Tactility/TactilityCore.h>
|
|
#include <Tactility/hal/gps/GpsConfiguration.h>
|
|
#include <Tactility/settings/KeyboardSettings.h>
|
|
|
|
#include "devices/KeyboardBacklight.h"
|
|
#include "devices/TrackballDevice.h"
|
|
#include <KeyboardBacklight/KeyboardBacklight.h>
|
|
#include <Trackball/Trackball.h>
|
|
|
|
#define TAG "tdeck"
|
|
|
|
// Power on
|
|
#define TDECK_POWERON_GPIO GPIO_NUM_10
|
|
|
|
static bool powerOn() {
|
|
gpio_config_t device_power_signal_config = {
|
|
.pin_bit_mask = BIT64(TDECK_POWERON_GPIO),
|
|
.mode = GPIO_MODE_OUTPUT,
|
|
.pull_up_en = GPIO_PULLUP_DISABLE,
|
|
.pull_down_en = GPIO_PULLDOWN_DISABLE,
|
|
.intr_type = GPIO_INTR_DISABLE,
|
|
};
|
|
|
|
if (gpio_config(&device_power_signal_config) != ESP_OK) {
|
|
return false;
|
|
}
|
|
|
|
if (gpio_set_level(TDECK_POWERON_GPIO, 1) != ESP_OK) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
bool initBoot() {
|
|
ESP_LOGI(TAG, LOG_MESSAGE_POWER_ON_START);
|
|
if (!powerOn()) {
|
|
TT_LOG_E(TAG, LOG_MESSAGE_POWER_ON_FAILED);
|
|
return false;
|
|
}
|
|
|
|
/* 32 Khz and higher gives an issue where the screen starts dimming again above 80% brightness
|
|
* when moving the brightness slider rapidly from a lower setting to 100%.
|
|
* This is not a slider bug (data was debug-traced) */
|
|
if (!driver::pwmbacklight::init(GPIO_NUM_42, 30000)) {
|
|
TT_LOG_E(TAG, "Backlight init failed");
|
|
return false;
|
|
}
|
|
|
|
tt::kernel::subscribeSystemEvent(tt::kernel::SystemEvent::BootSplash, [](tt::kernel::SystemEvent event) {
|
|
auto gps_service = tt::service::gps::findGpsService();
|
|
if (gps_service != nullptr) {
|
|
std::vector<tt::hal::gps::GpsConfiguration> gps_configurations;
|
|
gps_service->getGpsConfigurations(gps_configurations);
|
|
if (gps_configurations.empty()) {
|
|
if (gps_service->addGpsConfiguration(tt::hal::gps::GpsConfiguration {.uartName = "Grove", .baudRate = 38400, .model = tt::hal::gps::GpsModel::UBLOX10})) {
|
|
TT_LOG_I(TAG, "Configured internal GPS");
|
|
} else {
|
|
TT_LOG_E(TAG, "Failed to configure internal GPS");
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
tt::kernel::subscribeSystemEvent(tt::kernel::SystemEvent::BootSplash, [](tt::kernel::SystemEvent event) {
|
|
auto kbBacklight = tt::hal::findDevice("Keyboard Backlight");
|
|
if (kbBacklight != nullptr) {
|
|
TT_LOG_I(TAG, "%s starting", kbBacklight->getName().c_str());
|
|
auto kbDevice = std::static_pointer_cast<KeyboardBacklightDevice>(kbBacklight);
|
|
if (kbDevice->start()) {
|
|
TT_LOG_I(TAG, "%s started", kbBacklight->getName().c_str());
|
|
} else {
|
|
TT_LOG_E(TAG, "%s start failed", kbBacklight->getName().c_str());
|
|
}
|
|
}
|
|
|
|
auto trackball = tt::hal::findDevice("Trackball");
|
|
if (trackball != nullptr) {
|
|
TT_LOG_I(TAG, "%s starting", trackball->getName().c_str());
|
|
auto tbDevice = std::static_pointer_cast<TrackballDevice>(trackball);
|
|
if (tbDevice->start()) {
|
|
TT_LOG_I(TAG, "%s started", trackball->getName().c_str());
|
|
} else {
|
|
TT_LOG_E(TAG, "%s start failed", trackball->getName().c_str());
|
|
}
|
|
}
|
|
|
|
// Backlight doesn't seem to turn on until toggled on and off from keyboard settings...
|
|
// Or let the display and backlight sleep then wake it up.
|
|
// Then it works fine...until reboot, then you need to toggle again.
|
|
// The current keyboard firmware sets backlight duty to 0 on boot.
|
|
// https://github.com/Xinyuan-LilyGO/T-Deck/blob/master/firmware/T-Keyboard_Keyboard_ESP32C3_250620.bin
|
|
// https://github.com/Xinyuan-LilyGO/T-Deck/blob/master/examples/Keyboard_ESP32C3/Keyboard_ESP32C3.ino#L25
|
|
// https://github.com/Xinyuan-LilyGO/T-Deck/blob/master/examples/Keyboard_ESP32C3/Keyboard_ESP32C3.ino#L217
|
|
auto kbSettings = tt::settings::keyboard::loadOrGetDefault();
|
|
bool result = keyboardbacklight::setBrightness(kbSettings.backlightEnabled ? kbSettings.backlightBrightness : 0);
|
|
if (!result) {
|
|
TT_LOG_W(TAG, "Failed to set keyboard backlight brightness");
|
|
}
|
|
|
|
trackball::setEnabled(kbSettings.trackballEnabled);
|
|
});
|
|
|
|
return true;
|
|
}
|