diff --git a/.github/workflows/build-firmware.yml b/.github/workflows/build-firmware.yml index 4eb1640f..fe807c30 100644 --- a/.github/workflows/build-firmware.yml +++ b/.github/workflows/build-firmware.yml @@ -43,7 +43,8 @@ jobs: { id: waveshare-s3-touch-lcd-43, arch: esp32s3 }, { id: waveshare-s3-touch-lcd-147, arch: esp32s3 }, { id: waveshare-s3-touch-lcd-128, arch: esp32s3 }, - { id: waveshare-s3-lcd-13, arch: esp32s3 } + { id: waveshare-s3-lcd-13, arch: esp32s3 }, + { id: btt-panda-touch, arch: esp32s3 } ] runs-on: ubuntu-latest steps: diff --git a/.gitignore b/.gitignore index e9754734..cbec28e3 100644 --- a/.gitignore +++ b/.gitignore @@ -18,6 +18,7 @@ managed_components/ dependencies.lock .vscode/ +*.code-workspace .gitpod.yml sdkconfig.board.*.dev \ No newline at end of file diff --git a/Boards/btt-panda-touch/CMakeLists.txt b/Boards/btt-panda-touch/CMakeLists.txt new file mode 100644 index 00000000..c6e98b90 --- /dev/null +++ b/Boards/btt-panda-touch/CMakeLists.txt @@ -0,0 +1,7 @@ +file(GLOB_RECURSE SOURCE_FILES Source/*.c*) + +idf_component_register( + SRCS ${SOURCE_FILES} + INCLUDE_DIRS "Source" + REQUIRES Tactility esp_lvgl_port esp_lcd RgbDisplay GT911 PwmBacklight driver vfs fatfs +) diff --git a/Boards/btt-panda-touch/Source/Configuration.cpp b/Boards/btt-panda-touch/Source/Configuration.cpp new file mode 100644 index 00000000..19dd1884 --- /dev/null +++ b/Boards/btt-panda-touch/Source/Configuration.cpp @@ -0,0 +1,69 @@ +#include +#include "devices/Display.h" + +#include +#include +#include +#include + +using namespace tt::hal; + +static bool initBoot() { + //Display Reset + ESP_ERROR_CHECK(gpio_set_direction(GPIO_NUM_46, GPIO_MODE_OUTPUT)); + ESP_ERROR_CHECK(gpio_set_level(GPIO_NUM_46, 0)); + vTaskDelay(pdMS_TO_TICKS(100)); + ESP_ERROR_CHECK(gpio_set_level(GPIO_NUM_46, 1)); + vTaskDelay(pdMS_TO_TICKS(10)); + + return driver::pwmbacklight::init(GPIO_NUM_21); +} + +static DeviceVector createDevices() { + return { + createDisplay() + }; +} + +extern const Configuration hardwareConfiguration = { + .initBoot = initBoot, + .createDevices = createDevices, + .i2c = { + //Touch + i2c::Configuration { + .name = "Internal", + .port = I2C_NUM_0, + .initMode = i2c::InitMode::ByTactility, + .isMutable = true, + .config = (i2c_config_t) { + .mode = I2C_MODE_MASTER, + .sda_io_num = GPIO_NUM_2, + .scl_io_num = GPIO_NUM_1, + .sda_pullup_en = true, + .scl_pullup_en = true, + .master = { + .clk_speed = 400000 + }, + .clk_flags = 0 + } + }, + //Rear header, JST PH 2.0, SDA IO4 / SCL IO3 / GND / 3.3V + i2c::Configuration { + .name = "External", + .port = I2C_NUM_1, + .initMode = i2c::InitMode::Disabled, + .isMutable = true, + .config = (i2c_config_t) { + .mode = I2C_MODE_MASTER, + .sda_io_num = GPIO_NUM_4, + .scl_io_num = GPIO_NUM_3, + .sda_pullup_en = false, + .scl_pullup_en = false, + .master = { + .clk_speed = 400000 + }, + .clk_flags = 0 + } + } + } +}; diff --git a/Boards/btt-panda-touch/Source/devices/Display.cpp b/Boards/btt-panda-touch/Source/devices/Display.cpp new file mode 100644 index 00000000..94f68a3b --- /dev/null +++ b/Boards/btt-panda-touch/Source/devices/Display.cpp @@ -0,0 +1,104 @@ +#include "Display.h" + +#include +#include +#include +#include + +std::shared_ptr _Nullable createTouch() { + // Note for future changes: Reset pin is 41 and interrupt pin is 40 + auto configuration = std::make_unique( + I2C_NUM_0, + 800, + 480 + ); + + return std::make_shared(std::move(configuration)); +} + +std::shared_ptr createDisplay() { + auto touch = createTouch(); + + constexpr uint32_t bufferPixels = 800 * 10; + + esp_lcd_rgb_panel_config_t rgb_panel_config = { + .clk_src = LCD_CLK_SRC_DEFAULT, + .timings = { + .pclk_hz = 14000000, + .h_res = 800, + .v_res = 480, + .hsync_pulse_width = 4, + .hsync_back_porch = 8, + .hsync_front_porch = 8, + .vsync_pulse_width = 4, + .vsync_back_porch = 16, + .vsync_front_porch = 16, + .flags = { + .hsync_idle_low = false, + .vsync_idle_low = false, + .de_idle_high = false, + .pclk_active_neg = true, + .pclk_idle_high = true + } + }, + .data_width = 16, + .bits_per_pixel = 0, + .num_fbs = 2, + .bounce_buffer_size_px = bufferPixels, + .sram_trans_align = 8, + .psram_trans_align = 64, + .hsync_gpio_num = GPIO_NUM_NC, + .vsync_gpio_num = GPIO_NUM_NC, + .de_gpio_num = GPIO_NUM_38, + .pclk_gpio_num = GPIO_NUM_5, + .disp_gpio_num = GPIO_NUM_NC, + .data_gpio_nums = { + GPIO_NUM_17, // B + GPIO_NUM_18, // B + GPIO_NUM_48, // B + GPIO_NUM_47, // B + GPIO_NUM_39, // B + GPIO_NUM_11, // G + GPIO_NUM_12, // G + GPIO_NUM_13, // G + GPIO_NUM_14, // G + GPIO_NUM_15, // G + GPIO_NUM_16, // G + GPIO_NUM_6, // R + GPIO_NUM_7, // R + GPIO_NUM_8, // R + GPIO_NUM_9, // R + GPIO_NUM_10, // R + }, + .flags = { + .disp_active_low = false, + .refresh_on_demand = false, + .fb_in_psram = true, + .double_fb = true, + .no_fb = false, + .bb_invalidate_cache = false + } + }; + + RgbDisplay::BufferConfiguration buffer_config = { + .size = (800 * 480), + .useSpi = true, + .doubleBuffer = true, + .bounceBufferMode = true, + .avoidTearing = false + }; + + auto configuration = std::make_unique( + rgb_panel_config, + buffer_config, + touch, + LV_COLOR_FORMAT_RGB565, + false, + false, + false, + false, + driver::pwmbacklight::setBacklightDuty + ); + + return std::make_shared(std::move(configuration)); +} \ No newline at end of file diff --git a/Boards/btt-panda-touch/Source/devices/Display.h b/Boards/btt-panda-touch/Source/devices/Display.h new file mode 100644 index 00000000..7a9b967d --- /dev/null +++ b/Boards/btt-panda-touch/Source/devices/Display.h @@ -0,0 +1,5 @@ +#pragma once + +#include + +std::shared_ptr createDisplay(); diff --git a/Firmware/Kconfig b/Firmware/Kconfig index d41b47a5..7c84d55a 100644 --- a/Firmware/Kconfig +++ b/Firmware/Kconfig @@ -71,6 +71,8 @@ menu "Tactility App" bool "Waveshare ESP32 S3 Touch LCD 1.28" config TT_BOARD_WAVESHARE_S3_LCD_13 bool "Waveshare ESP32 S3 LCD 1.3" + config TT_BOARD_BTT_PANDA_TOUCH + bool "BigTreeTech Panda Touch" help Select a board/hardware configuration. Use TT_BOARD_CUSTOM if you will manually configure the board in your project. diff --git a/sdkconfig.board.btt-panda-touch b/sdkconfig.board.btt-panda-touch new file mode 100644 index 00000000..a3dbdedd --- /dev/null +++ b/sdkconfig.board.btt-panda-touch @@ -0,0 +1,63 @@ +# Software defaults +# Increase stack size for WiFi (fixes crash after scan) +CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=3072 +CONFIG_ESP_MAIN_TASK_STACK_SIZE=6144 +CONFIG_LV_FONT_MONTSERRAT_14=y +CONFIG_LV_FONT_MONTSERRAT_18=y +CONFIG_LV_USE_USER_DATA=y +CONFIG_LV_USE_FS_STDIO=y +CONFIG_LV_FS_STDIO_LETTER=65 +CONFIG_LV_FS_STDIO_PATH="" +CONFIG_LV_FS_STDIO_CACHE_SIZE=4096 +CONFIG_LV_USE_LODEPNG=y +CONFIG_LV_USE_BUILTIN_MALLOC=n +CONFIG_LV_USE_CLIB_MALLOC=y +CONFIG_LV_USE_MSGBOX=n +CONFIG_LV_USE_SPINNER=n +CONFIG_LV_USE_WIN=n +CONFIG_LV_USE_SNAPSHOT=y +CONFIG_FREERTOS_HZ=1000 +CONFIG_FREERTOS_TASK_NOTIFICATION_ARRAY_ENTRIES=2 +CONFIG_FREERTOS_SMP=n +CONFIG_FREERTOS_UNICORE=n +CONFIG_FREERTOS_TIMER_TASK_STACK_DEPTH=5120 +CONFIG_FREERTOS_USE_TRACE_FACILITY=y +CONFIG_FATFS_LFN_HEAP=y +CONFIG_FATFS_VOLUME_COUNT=3 +CONFIG_FATFS_SECTOR_512=y +CONFIG_WL_SECTOR_SIZE_512=y +CONFIG_WL_SECTOR_SIZE=512 +CONFIG_WL_SECTOR_MODE_SAFE=y +CONFIG_WL_SECTOR_MODE=1 +CONFIG_MBEDTLS_SSL_PROTO_TLS1_3=y + +# Hardware: Main +CONFIG_PARTITION_TABLE_CUSTOM=y +CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-16mb.csv" +CONFIG_PARTITION_TABLE_FILENAME="partitions-16mb.csv" +CONFIG_COMPILER_OPTIMIZATION_PERF=y +CONFIG_IDF_EXPERIMENTAL_FEATURES=y +CONFIG_TT_BOARD_BTT_PANDA_TOUCH=y +CONFIG_TT_BOARD_NAME="BigTreeTech Panda Touch" +CONFIG_TT_BOARD_ID="btt-panda-touch" +CONFIG_IDF_TARGET="esp32s3" +CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ_240=y +CONFIG_ESP32_DEFAULT_CPU_FREQ_240=y +CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y +CONFIG_FLASHMODE_QIO=y +# Hardware: SPI RAM +CONFIG_ESP32S3_SPIRAM_SUPPORT=y +CONFIG_SPIRAM_MODE_OCT=y +CONFIG_SPIRAM_FETCH_INSTRUCTIONS=y +CONFIG_SPIRAM_RODATA=y +CONFIG_SPIRAM_XIP_FROM_PSRAM=y +CONFIG_ESP32S3_DATA_CACHE_LINE_64B=y +CONFIG_SPIRAM_SPEED_120M=y +CONFIG_SPIRAM_USE_MALLOC=y +CONFIG_SPIRAM_TRY_ALLOCATE_WIFI_LWIP=y +# SPI Flash +CONFIG_ESPTOOLPY_FLASHFREQ_120M=y +# LVGL +CONFIG_LV_DISP_DEF_REFR_PERIOD=10 +CONFIG_LV_DPI_DEF=139 +CONFIG_LV_THEME_DEFAULT_DARK=y