Board Support: Heltec v3 (#407)
This commit is contained in:
@@ -0,0 +1,7 @@
|
||||
file(GLOB_RECURSE SOURCE_FILES Source/*.c*)
|
||||
|
||||
idf_component_register(
|
||||
SRCS ${SOURCE_FILES}
|
||||
INCLUDE_DIRS "Source"
|
||||
REQUIRES Tactility EspLcdCompat SSD1306 ButtonControl EstimatedPower driver
|
||||
)
|
||||
@@ -0,0 +1,71 @@
|
||||
#include "devices/Display.h"
|
||||
#include "devices/Power.h"
|
||||
#include "devices/Constants.h"
|
||||
|
||||
#include <Tactility/hal/Configuration.h>
|
||||
#include <Tactility/lvgl/LvglSync.h>
|
||||
#include <ButtonControl.h>
|
||||
|
||||
#include "driver/gpio.h"
|
||||
#include "driver/i2c.h"
|
||||
#include <Tactility/Log.h>
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/task.h"
|
||||
|
||||
static void enableOledPower() {
|
||||
gpio_config_t io_conf = {
|
||||
.pin_bit_mask = (1ULL << DISPLAY_PIN_POWER),
|
||||
.mode = GPIO_MODE_OUTPUT,
|
||||
.pull_up_en = GPIO_PULLUP_DISABLE, // The board has an external pull-up
|
||||
.pull_down_en = GPIO_PULLDOWN_DISABLE,
|
||||
.intr_type = GPIO_INTR_DISABLE,
|
||||
};
|
||||
gpio_config(&io_conf);
|
||||
gpio_set_level(DISPLAY_PIN_POWER, 0); // Active low
|
||||
|
||||
vTaskDelay(pdMS_TO_TICKS(500)); // Add a small delay for power to stabilize
|
||||
TT_LOG_I("OLED_POWER", "OLED power enabled");
|
||||
}
|
||||
|
||||
static bool initBoot() {
|
||||
// Enable power to the OLED before doing anything else
|
||||
enableOledPower();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
using namespace tt::hal;
|
||||
|
||||
static std::vector<std::shared_ptr<Device>> createDevices() {
|
||||
return {
|
||||
createPower(),
|
||||
ButtonControl::createOneButtonControl(0),
|
||||
createDisplay()
|
||||
};
|
||||
}
|
||||
|
||||
extern const Configuration hardwareConfiguration = {
|
||||
.initBoot = initBoot,
|
||||
.uiScale = UiScale::Smallest,
|
||||
.createDevices = createDevices,
|
||||
.i2c = {
|
||||
tt::hal::i2c::Configuration {
|
||||
.name = "Internal",
|
||||
.port = DISPLAY_I2C_PORT,
|
||||
.initMode = tt::hal::i2c::InitMode::ByTactility,
|
||||
.isMutable = true,
|
||||
.config = (i2c_config_t) {
|
||||
.mode = I2C_MODE_MASTER,
|
||||
.sda_io_num = DISPLAY_PIN_SDA,
|
||||
.scl_io_num = DISPLAY_PIN_SCL,
|
||||
.sda_pullup_en = GPIO_PULLUP_ENABLE,
|
||||
.scl_pullup_en = GPIO_PULLUP_ENABLE,
|
||||
.master = {
|
||||
.clk_speed = DISPLAY_I2C_SPEED
|
||||
},
|
||||
.clk_flags = 0
|
||||
}
|
||||
}
|
||||
},
|
||||
.spi {},
|
||||
};
|
||||
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
#include <driver/gpio.h>
|
||||
#include <driver/i2c.h>
|
||||
#include <driver/spi_common.h>
|
||||
|
||||
// Display
|
||||
constexpr auto DISPLAY_I2C_ADDRESS = 0x3C;
|
||||
constexpr auto DISPLAY_I2C_SPEED = 200000;
|
||||
constexpr auto DISPLAY_I2C_PORT = I2C_NUM_0;
|
||||
constexpr auto DISPLAY_PIN_SDA = GPIO_NUM_17;
|
||||
constexpr auto DISPLAY_PIN_SCL = GPIO_NUM_18;
|
||||
constexpr auto DISPLAY_PIN_RST = GPIO_NUM_21;
|
||||
constexpr auto DISPLAY_HORIZONTAL_RESOLUTION = 128;
|
||||
constexpr auto DISPLAY_VERTICAL_RESOLUTION = 64;
|
||||
constexpr auto DISPLAY_PIN_POWER = GPIO_NUM_36;
|
||||
@@ -0,0 +1,19 @@
|
||||
#include "Display.h"
|
||||
#include "Constants.h"
|
||||
|
||||
#include <Ssd1306Display.h>
|
||||
|
||||
std::shared_ptr<tt::hal::display::DisplayDevice> createDisplay() {
|
||||
auto configuration = std::make_unique<Ssd1306Display::Configuration>(
|
||||
DISPLAY_I2C_PORT,
|
||||
DISPLAY_I2C_ADDRESS,
|
||||
DISPLAY_PIN_RST,
|
||||
DISPLAY_HORIZONTAL_RESOLUTION,
|
||||
DISPLAY_VERTICAL_RESOLUTION,
|
||||
nullptr, // no touch
|
||||
false // invert
|
||||
);
|
||||
|
||||
auto display = std::make_shared<Ssd1306Display>(std::move(configuration));
|
||||
return std::static_pointer_cast<tt::hal::display::DisplayDevice>(display);
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
#pragma once
|
||||
|
||||
#include <Tactility/hal/display/DisplayDevice.h>
|
||||
|
||||
std::shared_ptr<tt::hal::display::DisplayDevice> createDisplay();
|
||||
@@ -0,0 +1,20 @@
|
||||
#include "Power.h"
|
||||
|
||||
#include <ChargeFromAdcVoltage.h>
|
||||
#include <EstimatedPower.h>
|
||||
#include <Tactility/hal/gpio/Gpio.h>
|
||||
#include <memory>
|
||||
|
||||
// ADC enable pin on GPIO37
|
||||
constexpr auto ADC_CTRL = 37;
|
||||
|
||||
std::shared_ptr<tt::hal::power::PowerDevice> createPower() {
|
||||
ChargeFromAdcVoltage::Configuration configuration;
|
||||
// 2.0 ratio, but +0.11 added as display voltage sag compensation.
|
||||
configuration.adcMultiplier = 2.11;
|
||||
|
||||
// Configure the ADC enable pin as an output
|
||||
tt::hal::gpio::configure(ADC_CTRL, tt::hal::gpio::Mode::Output, false, false);
|
||||
|
||||
return std::make_shared<EstimatedPower>(configuration);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
#include <Tactility/hal/power/PowerDevice.h>
|
||||
#include <driver/gpio.h>
|
||||
|
||||
std::shared_ptr<tt::hal::power::PowerDevice> createPower();
|
||||
Reference in New Issue
Block a user